Skip to content

update-stats

update-stats #5

Workflow file for this run

#
# 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
concurrency:
group: ${{ github.ref_name }}
cancel-in-progress: true
permissions: read-all
env:
DATA_FILEPATH: stats.csv
jobs:
collect:
runs-on: ubuntu-latest
strategy:
matrix:
proj-spec:
- 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-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
- id: chainsaw
repo-name: apache/logging-chainsaw
env:
PROJ_ID: ${{ matrix.proj-spec.id }}
REPO_NAME: ${{ matrix.proj-spec.repo-name }}
REPO_BRANCH: ${{ matrix.proj-spec.repo-branch || 'main' }}
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: |
find . -regextype posix-extended -name "pom.xml" -and -not -regex "(.*/)?target/.*" | while read pomXmlFilepath; do
# Ignore artifact which are skipped at deployment
grep -q "<maven.deploy.skip>true" "$pomXmlFilepath" && continue
# Extract the module name (i.e., `artifactId`)
module=$(awk 'match($0, /^[ \t]+<artifactId>(.+)<\/artifactId>$/, m) {print m[1]}' "$pomXmlFilepath")
# 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"
- 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:
runs-on: ubuntu-latest
env:
DOWNLOAD_DIR: /tmp/stats
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.GPG_SECRET_KEY }}
- 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: Checkout the repository
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # 4.0.0
with:
ref: activity-monitor
- 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 >"$DATA_FILEPATH"
find "$DOWNLOAD_DIR" -type f | xargs cat >>"$DATA_FILEPATH"
if [ -n "$(git status --porcelain)" ]; then
git commit -S "$DATA_FILEPATH" -m "Update \`$DATA_FILEPATH\`'
git push -f origin
fi