-
Notifications
You must be signed in to change notification settings - Fork 3
146 lines (120 loc) · 4.81 KB
/
update-stats.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#
# 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: apache/${{ 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.
- name: Set up GPG
uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 # 3.7.0
with:
distribution: temurin
java-version: 17
java-package: jdk
architecture: x64
cache: maven
server-id: apache.releases.https
server-username: NEXUS_USERNAME
server-password: NEXUS_PASSWORD
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 [email protected]
- 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