Skip to content

Commit 20978f9

Browse files
author
GitHub Copilot
committed
Update CI workflows for reliable generation and GHCR cleanup
1 parent 56a542d commit 20978f9

2 files changed

Lines changed: 102 additions & 48 deletions

File tree

.github/workflows/action-docker-publish.yml

Lines changed: 75 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,23 @@ on:
44
push:
55
paths:
66
- "generate-dockerfiles.sh"
7-
- "generate-docker-compose.yml"
7+
- "generate-docker-compose.sh"
88
- "requirements.txt"
99
- "Dockerfile.j2"
1010
- "docker-compose.yml.j2"
1111
schedule:
1212
- cron: "0 3 * * 6"
1313

14+
concurrency:
15+
group: docker-publish-${{ github.ref }}
16+
cancel-in-progress: false
17+
1418
jobs:
1519
generate-dockerfiles:
1620
name: Generate Dockerfiles
1721
runs-on: ubuntu-latest
22+
permissions:
23+
contents: write
1824
outputs:
1925
matrix: ${{ steps.set-matrix.outputs.matrix }}
2026
steps:
@@ -24,25 +30,34 @@ jobs:
2430
- name: Generate python
2531
uses: actions/setup-python@v6
2632
with:
33+
python-version: "3.12"
2734
cache: "pip"
35+
cache-dependency-path: requirements.txt
2836
- run: pip3 install -r requirements.txt
2937

3038
- name: Generate Dockerfile with generate-dockerfiles.sh
3139
run: ./generate-dockerfiles.sh
3240

3341
- name: Upload a Build Artifact
34-
uses: actions/upload-artifact@v5.0.0
42+
uses: actions/upload-artifact@v7
3543
with:
3644
# Artifact name
3745
name: Dockerfiles
3846
# A file, directory or wildcard pattern that describes what to upload
3947
path: dockerfiles
4048

41-
- name: Push commit
42-
uses: EndBug/add-and-commit@v9
43-
with:
44-
message: "Generate Dockerfiles"
45-
add: "dockerfiles/Dockerfile*"
49+
- name: Commit and push generated Dockerfiles
50+
run: |
51+
git config user.name "github-actions[bot]"
52+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
53+
git add dockerfiles/Dockerfile*
54+
if git diff --cached --quiet; then
55+
echo "No Dockerfile changes to commit"
56+
exit 0
57+
fi
58+
git commit -m "Generate Dockerfiles"
59+
git pull --rebase origin "${GITHUB_REF_NAME}"
60+
git push origin "HEAD:${GITHUB_REF_NAME}"
4661
4762
- id: set-matrix
4863
run: |
@@ -53,24 +68,36 @@ jobs:
5368
generate-docker-compose:
5469
name: Generate docker-compose.yml files
5570
runs-on: ubuntu-latest
71+
needs: generate-dockerfiles
72+
permissions:
73+
contents: write
5674
steps:
5775
- name: Checkout
5876
uses: actions/checkout@v5
5977

6078
- name: Setup python
6179
uses: actions/setup-python@v6
6280
with:
81+
python-version: "3.12"
6382
cache: "pip"
83+
cache-dependency-path: requirements.txt
6484
- run: pip3 install -r requirements.txt
6585

6686
- name: Generate docker-compose.yml files with generate-docker-compose.sh
6787
run: ./generate-docker-compose.sh
6888

69-
- name: Push commit
70-
uses: EndBug/add-and-commit@v9
71-
with:
72-
message: "Generate docker-compose.yml files"
73-
add: "docker-compose/docker-compose*"
89+
- name: Commit and push generated docker-compose files
90+
run: |
91+
git config user.name "github-actions[bot]"
92+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
93+
git add docker-compose/docker-compose*
94+
if git diff --cached --quiet; then
95+
echo "No docker-compose changes to commit"
96+
exit 0
97+
fi
98+
git commit -m "Generate docker-compose.yml files"
99+
git pull --rebase origin "${GITHUB_REF_NAME}"
100+
git push origin "HEAD:${GITHUB_REF_NAME}"
74101
75102
docker-publish:
76103
name: Publish Docker Images
@@ -145,37 +172,55 @@ jobs:
145172
package-cleanup:
146173
name: Cleanup Old GitHub Packages
147174
runs-on: ubuntu-latest
175+
permissions:
176+
contents: read
177+
packages: write
148178
steps:
149-
- name: Delete Package Versions
150-
uses: actions/delete-package-versions@v5
179+
- name: Delete old untagged package versions
180+
uses: snok/container-retention-policy@v3.0.1
151181
with:
152-
package-name: gameserver
153-
package-type: container
154-
min-versions-to-keep: 1
155-
delete-only-untagged-versions: true
182+
account: GameServerManagers
183+
token: ${{ secrets.GITHUB_TOKEN }}
184+
image-names: gameserver
185+
tag-selection: untagged
186+
keep-n-most-recent: 1
187+
cut-off: 1s
188+
dry-run: true
156189

157190
package-cleanup-2:
158191
name: Cleanup Old GitHub Packages 2
159192
needs: package-cleanup
160193
runs-on: ubuntu-latest
194+
permissions:
195+
contents: read
196+
packages: write
161197
steps:
162-
- name: Delete Package Versions
163-
uses: actions/delete-package-versions@v5
198+
- name: Delete old untagged package versions
199+
uses: snok/container-retention-policy@v3.0.1
164200
with:
165-
package-name: gameserver
166-
package-type: container
167-
min-versions-to-keep: 1
168-
delete-only-untagged-versions: true
201+
account: GameServerManagers
202+
token: ${{ secrets.GITHUB_TOKEN }}
203+
image-names: gameserver
204+
tag-selection: untagged
205+
keep-n-most-recent: 1
206+
cut-off: 1s
207+
dry-run: true
169208

170209
package-cleanup-3:
171210
name: Cleanup Old GitHub Packages 3
172211
needs: package-cleanup-2
173212
runs-on: ubuntu-latest
213+
permissions:
214+
contents: read
215+
packages: write
174216
steps:
175-
- name: Delete Package Versions
176-
uses: actions/delete-package-versions@v5
217+
- name: Delete old untagged package versions
218+
uses: snok/container-retention-policy@v3.0.1
177219
with:
178-
package-name: gameserver
179-
package-type: container
180-
min-versions-to-keep: 1
181-
delete-only-untagged-versions: true
220+
account: GameServerManagers
221+
token: ${{ secrets.GITHUB_TOKEN }}
222+
image-names: gameserver
223+
tag-selection: untagged
224+
keep-n-most-recent: 1
225+
cut-off: 1s
226+
dry-run: true

.github/workflows/action-package-cleanup.yml

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,36 +13,45 @@ jobs:
1313
name: Cleanup Old GitHub Packages
1414
runs-on: ubuntu-latest
1515
steps:
16-
- name: Delete Package Versions
17-
uses: actions/delete-package-versions@v5
16+
- name: Delete old untagged package versions
17+
uses: snok/container-retention-policy@v3.0.1
1818
with:
19-
package-name: gameserver
20-
package-type: container
21-
min-versions-to-keep: 1
22-
delete-only-untagged-versions: true
19+
account: GameServerManagers
20+
token: ${{ secrets.GITHUB_TOKEN }}
21+
image-names: gameserver
22+
tag-selection: untagged
23+
keep-n-most-recent: 1
24+
cut-off: 1s
25+
dry-run: true
2326

2427
package-cleanup-2:
2528
name: Cleanup Old GitHub Packages 2
2629
needs: package-cleanup
2730
runs-on: ubuntu-latest
2831
steps:
29-
- name: Delete Package Versions
30-
uses: actions/delete-package-versions@v5
32+
- name: Delete old untagged package versions
33+
uses: snok/container-retention-policy@v3.0.1
3134
with:
32-
package-name: gameserver
33-
package-type: container
34-
min-versions-to-keep: 1
35-
delete-only-untagged-versions: true
35+
account: GameServerManagers
36+
token: ${{ secrets.GITHUB_TOKEN }}
37+
image-names: gameserver
38+
tag-selection: untagged
39+
keep-n-most-recent: 1
40+
cut-off: 1s
41+
dry-run: true
3642

3743
package-cleanup-3:
3844
name: Cleanup Old GitHub Packages 3
3945
needs: package-cleanup-2
4046
runs-on: ubuntu-latest
4147
steps:
42-
- name: Delete Package Versions
43-
uses: actions/delete-package-versions@v5
48+
- name: Delete old untagged package versions
49+
uses: snok/container-retention-policy@v3.0.1
4450
with:
45-
package-name: gameserver
46-
package-type: container
47-
min-versions-to-keep: 1
48-
delete-only-untagged-versions: true
51+
account: GameServerManagers
52+
token: ${{ secrets.GITHUB_TOKEN }}
53+
image-names: gameserver
54+
tag-selection: untagged
55+
keep-n-most-recent: 1
56+
cut-off: 1s
57+
dry-run: true

0 commit comments

Comments
 (0)