Skip to content

Commit

Permalink
GitHub workflows on asf-staging are not taking effect, copy them to…
Browse files Browse the repository at this point in the history
… here
  • Loading branch information
vy committed Jan 29, 2024
1 parent c114cf5 commit f674214
Showing 1 changed file with 186 additions and 0 deletions.
186 changes: 186 additions & 0 deletions .github/workflows/update-stats.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,186 @@
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to you under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

name: update-stats

on:
workflow_dispatch: {}
schedule:
- cron: "0 0 1 * 1"

concurrency:
group: ${{ github.ref_name }}
cancel-in-progress: true

permissions: read-all

env:
DATA_FILEPATH: stats.csv

jobs:

collect:

name: "collect (${{ matrix.proj-spec.id }})"

runs-on: ubuntu-latest

strategy:
matrix:
proj-spec:
- id: chainsaw
repo-name: apache/logging-chainsaw
repo-branch: master
- id: log4cxx
repo-name: apache/logging-log4cxx
repo-branch: master
packaging: cmake
- id: log4j-1
repo-name: apache/logging-log4j1
repo-branch: main
- id: log4j-2
repo-name: apache/logging-log4j2
repo-branch: 2.x
- id: log4j-jmx-gui
repo-name: apache/logging-log4j-jmx-gui
- id: log4j-kotlin
repo-name: apache/logging-log4j-kotlin
- id: log4j-scala
repo-name: apache/logging-log4j-scala
- id: log4j-transform
repo-name: apache/logging-log4j-transform
- id: log4j-tools
repo-name: apache/logging-log4j-tools
- id: log4j-audit
repo-name: apache/logging-log4j-audit
repo-branch: master
- id: log4net
repo-name: apache/logging-log4net
repo-branch: master
packaging: nant
- id: log4j-server
repo-name: apache/logging-log4j-server
repo-branch: master

env:
PROJ_ID: ${{ matrix.proj-spec.id }}
REPO_NAME: ${{ matrix.proj-spec.repo-name }}
REPO_BRANCH: ${{ matrix.proj-spec.repo-branch || 'main' }}
PROJ_PACKAGING: ${{ matrix.proj-spec.packaging || 'maven' }}

steps:

- name: Checkout the repository
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # 4.0.0
with:
repository: ${{ env.REPO_NAME }}
ref: ${{ env.REPO_BRANCH }}
# Fetch all the history:
fetch-depth: 0

- name: Collect statistics
shell: bash
run: |
case $PROJ_PACKAGING in
maven)
find . -regextype posix-extended -name "pom.xml" -and -not -regex "(.*/)?target/.*" | while read pomXmlFilepath; do
# Ignore the artifact, if it is skipped at deployment
skipMatchCount=$(python -c "import xml.etree.ElementTree as ET; print(len(ET.parse('$pomXmlFilepath').findall('./{*}properties/{*}maven.deploy.skip')))")
[ "$skipMatchCount" -gt 0 ] && continue

# Extract the module name (i.e., `artifactId`)
module=$(python -c "import xml.etree.ElementTree as ET; print(ET.parse('$pomXmlFilepath').findall('./{*}artifactId')[0].text)")

# Dump statistics of the module folder
moduleDir=$(dirname "$pomXmlFilepath")
git log --pretty=tformat:"%as %ae" -- "$moduleDir" | while read instant author; do
echo "$PROJ_ID,$module,$instant,$author"
done >>"$DATA_FILEPATH"

done
;;

*)
git log --pretty=tformat:"%as %ae" | while read instant author; do
echo "$PROJ_ID,*,$instant,$author"
done >"$DATA_FILEPATH"
;;

esac

- name: Upload statistics
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # 3.1.3
with:
name: ${{ env.PROJ_ID }}-${{ env.REPO_BRANCH }}-${{ env.DATA_FILEPATH }}
path: ${{ env.DATA_FILEPATH }}

merge:

needs: collect

runs-on: ubuntu-latest

env:
DOWNLOAD_DIR: /tmp/stats

permissions:
contents: write

steps:

# We could have rolled out our own shell script to read the GPG private key.
# Though we use `actions/setup-java` everywhere for that purpose, and it simply works.
# Plus, it has several security enhancements; cleanup steps for removing the private key file and the imported keychain, etc.
- name: Set up GPG
uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 # 3.7.0
with:
distribution: temurin
java-version: 17
java-package: jdk
architecture: x64
gpg-private-key: ${{ secrets.LOGGING_GPG_SECRET_KEY }}

- name: Checkout the repository
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # 4.0.0
with:
ref: activity-monitor

- name: Set up Git
shell: bash
run: |
# Set up user name and email required for `git commit`
git config user.name "ASF Logging Services RM"
git config user.email private@logging.apache.org
- name: Download statistics
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # 3.0.2
with:
path: ${{ env.DOWNLOAD_DIR }}

- name: Merge & commit statistics
shell: bash
run: |
( echo "project,module,instant,author"; find "$DOWNLOAD_DIR" -type f | xargs cat ) >"$DATA_FILEPATH"
export DATA_INSTANT_FILEPATH="stats-instant.txt"
echo -n $(date --utc "+%Y-%m-%dT%H:%M:%SZ") >"$DATA_INSTANT_FILEPATH"
git add "$DATA_FILEPATH" "$DATA_INSTANT_FILEPATH"
if [ -n "$(git status --porcelain)" ]; then
git commit -S "$DATA_FILEPATH" "$DATA_INSTANT_FILEPATH" -m "Update project activity data"
git push -f origin
fi

0 comments on commit f674214

Please sign in to comment.