Skip to content

Commit e8fc781

Browse files
committed
workflows: improve generate dockerfile workflow
- Run under perl:devel container - Run only for changes on selected paths - Install prereqs via cpm - Report possible uncommitted changes back to PR
1 parent 378aed9 commit e8fc781

File tree

1 file changed

+72
-12
lines changed

1 file changed

+72
-12
lines changed

.github/workflows/generate-dockerfiles-patches.yml

Lines changed: 72 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,92 @@ name: Generate Dockerfiles/patches
33
on:
44
push:
55
branches:
6-
- '**'
6+
- master
77
tags-ignore:
88
- '*'
99
pull_request:
10+
paths:
11+
- cpanfile
12+
- config.yml
13+
- generate.pl
14+
- .github/workflows/generate-dockerfiles-patches.yml
1015

1116
jobs:
1217
generate:
1318
runs-on: ubuntu-latest
19+
container: perl:devel
20+
permissions:
21+
contents: read
22+
pull-requests: write
23+
1424
steps:
25+
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
26+
1527
- name: Set up git user name and email
1628
run: |
1729
git config --global user.email "test@github-actions"
1830
git config --global user.name "GitHub Actions"
19-
- uses: actions/checkout@master
20-
- name: Install system perl and cpanm
21-
run: |
22-
sudo apt-get install --no-install-recommends -y perl cpanminus
31+
2332
- name: Install dependencies
2433
run: |
25-
cpanm --quiet --installdeps --notest -L local .
34+
cpm install -g
35+
2636
- name: Generate Dockerfiles/patches
37+
id: generate
38+
shell: bash -euo pipefail -x {0}
2739
run: |
28-
perl -Ilocal/lib/perl5 ./generate.pl
29-
- name: Show diffstat (if any)
30-
run: |
31-
git --no-pager diff --stat HEAD
32-
- name: Show diffstat (if any)
40+
git config --global --add safe.directory $PWD
41+
export DOCKER_PERL_DOWNLOADS_DIR=/tmp/docker-perl-downloads
42+
perl ./generate.pl
43+
/usr/bin/git --no-pager diff --stat > diffstat.txt
44+
if [[ -s diffstat.txt ]]; then
45+
echo has_extra_diffs=1 >> $GITHUB_OUTPUT
46+
fi
47+
48+
- name: Setup NodeJS in Perl container (for comment to PR)
49+
if: github.event_name == 'pull_request' && steps.generate.outputs.has_extra_diffs
3350
run: |
34-
git --no-pager diff --stat HEAD
51+
if ! command -v node; then
52+
curl -sL https://deb.nodesource.com/setup_lts.x -o nodesource_setup.sh
53+
bash nodesource_setup.sh
54+
apt-get install -y --no-install-recommends nodejs
55+
npm install -g yarn
56+
rm -fr /var/lib/apt/lists/* /var/lib/apt/cache/* nodesource_setup.sh
57+
fi
58+
59+
- name: Comment diffstat of generated changes to PR (if any)
60+
if: github.event_name == 'pull_request' && steps.generate.outputs.has_extra_diffs
61+
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
62+
with:
63+
script: |
64+
const fs = require('node:fs')
65+
let out = fs.readFileSync('diffstat.txt', 'utf8').trim()
66+
67+
if (out && context.actor !== 'nektos/act') {
68+
const output = `
69+
#### :warning: Additional changes generated (missing in commit), see diffstat:
70+
<details><summary>Show Output</summary>
71+
72+
\`\`\`diff
73+
${ out }
74+
\`\`\`
75+
</details>`
76+
77+
github.request('POST /repos/{owner}/{repo}/statuses/{sha}', {
78+
owner: context.repo.owner,
79+
repo: context.repo.repo,
80+
sha: context.sha,
81+
state: 'error',
82+
description: 'Additional changes generated that are missing in this commit!',
83+
context: 'continuous-integration/generate',
84+
})
85+
# github.rest.issues.createComment({
86+
# issue_number: context.issue.number,
87+
# owner: context.repo.owner,
88+
# repo: context.repo.repo,
89+
# body: output
90+
# })
91+
console.log(output)
92+
} else {
93+
console.log(out)
94+
}

0 commit comments

Comments
 (0)