@@ -11,9 +11,20 @@ name: Publish autodarts docker image
1111
1212# trigger when a new version tag is set
1313on :
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
1829permissions :
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 :
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
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