Skip to content

update-stats

update-stats #77

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: {}
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 [email protected]
- 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