Skip to content

Commit 5cfa616

Browse files
authored
feat: enhance workflow with manual force rebuild option and Alpine version extraction (#18)
1 parent 50c6829 commit 5cfa616

1 file changed

Lines changed: 39 additions & 4 deletions

File tree

.github/workflows/push-docker-image.yml

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,20 @@ name: Publish autodarts docker image
1111

1212
#trigger when a new version tag is set
1313
on:
14+
push:
15+
branches:
16+
- main
17+
paths:
18+
- Dockerfile
1419
schedule:
15-
- cron: '0 10 * * *'
16-
workflow_dispatch: null
20+
- cron: "0 10 * * *"
21+
workflow_dispatch:
22+
inputs:
23+
force_rebuild:
24+
description: Force a rebuild and push even when no new autodarts version is available
25+
required: false
26+
type: boolean
27+
default: false
1728

1829
permissions:
1930
contents: write
@@ -27,21 +38,32 @@ jobs:
2738
runs-on: ubuntu-latest
2839
outputs:
2940
version: ${{ steps.autodarts-latest-release.outputs.version }}
41+
create_release: ${{ steps.autodarts-latest-release.outputs.create_release }}
3042
steps:
3143
- name: Get latest release from autodarts
3244
id: autodarts-latest-release
3345
run: |
3446
latestVersion=$(curl -s https://get.autodarts.io/detection/latest/linux/arm64/RELEASES.json | jq -r '.currentVersion')
3547
echo "Latest version from autodarts: $latestVersion"
36-
48+
3749
#get current version from docker hub michvllni/autodarts-docker
3850
currentVersion=$(curl -s https://hub.docker.com/v2/repositories/michvllni/autodarts/tags/ | jq -r '.results[].name' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | sort -V | tail -n 1)
3951
echo "Current version from docker hub: v$currentVersion"
4052
if [ "$latestVersion" != "v$currentVersion" ]; then
4153
echo "New version available"
4254
echo "version=$latestVersion" >> $GITHUB_OUTPUT
55+
echo "create_release=true" >> $GITHUB_OUTPUT
56+
elif [ "${{ github.event_name }}" = "workflow_dispatch" ] && [ "${{ github.event.inputs.force_rebuild }}" = "true" ]; then
57+
echo "Manual force rebuild requested"
58+
echo "version=$latestVersion" >> $GITHUB_OUTPUT
59+
echo "create_release=false" >> $GITHUB_OUTPUT
60+
elif [ "${{ github.event_name }}" = "push" ]; then
61+
echo "Dockerfile changed, rebuilding latest image"
62+
echo "version=$latestVersion" >> $GITHUB_OUTPUT
63+
echo "create_release=false" >> $GITHUB_OUTPUT
4364
else
4465
echo "No new version available"
66+
echo "create_release=false" >> $GITHUB_OUTPUT
4567
fi
4668
shell: bash
4769
push_to_registry:
@@ -68,6 +90,18 @@ jobs:
6890
username: ${{ secrets.DOCKERHUB_USERNAME }}
6991
password: ${{ secrets.DOCKERHUB_TOKEN }}
7092

93+
- name: Get Alpine version from Dockerfile
94+
id: alpine_version
95+
run: |
96+
mapfile -t alpineVersions < <(grep -E '^FROM( --platform=\$\{[^}]+\})? alpine:' Dockerfile | sed -E 's/^FROM( --platform=\$\{[^}]+\})? alpine:([^[:space:]]+).*/\2/' | sort -u)
97+
98+
if [ ${#alpineVersions[@]} -eq 0 ]; then
99+
echo "Could not determine Alpine version from Dockerfile"
100+
exit 1
101+
fi
102+
103+
echo "version=${alpineVersions[0]}" >> $GITHUB_OUTPUT
104+
71105
- name: Set Docker Image Metadata
72106
id: set_image_metadata
73107
uses: docker/metadata-action@v6
@@ -83,6 +117,7 @@ jobs:
83117
type=semver,pattern={{version}},value=${{ needs.get_target_version.outputs.version }}
84118
type=semver,pattern={{major}}.{{minor}},value=${{ needs.get_target_version.outputs.version }}
85119
type=semver,pattern={{major}},value=${{ needs.get_target_version.outputs.version }}
120+
type=semver,pattern={{version}}-${{ steps.alpine_version.outputs.version }},value=${{ needs.get_target_version.outputs.version }}
86121
type=sha
87122
latest
88123
@@ -103,7 +138,7 @@ jobs:
103138
needs:
104139
- get_target_version
105140
- push_to_registry
106-
if: needs.get_target_version.outputs.version != '' && github.event_name != 'pull_request'
141+
if: needs.get_target_version.outputs.version != '' && needs.get_target_version.outputs.create_release == 'true' && github.event_name != 'pull_request'
107142
steps:
108143
- name: Create GitHub tag and release
109144
uses: softprops/action-gh-release@v3

0 commit comments

Comments
 (0)