name : Image Build
on :
# Manueel starte
workflow_dispatch :
inputs :
force_build :
description : Force new build?
required : false
default : "false"
type : string
schedule : # run daily
- cron : '0 0 * * *'
jobs :
init :
runs-on : ubuntu-latest
# Map a step output to a job output
outputs :
iventoy : ${{ steps.iventoy.outputs.version }}
buildOrNot : ${{ steps.buildOrNot.outputs.buildOrNot }}
steps :
-
name : get latest versions
id : iventoy
run : |
version=$(curl -s https://api.github.com/repos/ventoy/PXE/releases/latest | grep "tag_name" | cut -d'"' -f4)
echo "version=${version#'v'}" >> $GITHUB_OUTPUT
- # Check labels of the latest image on docker hub
name :
id : buildOrNOt
env : # if [ -z $FORCE_BUILD ]; then echo "false"; else echo $FORCE_BUILD; fi -> ternary -> ${FORCE_BUILD:-false}
FORCE_BUILD : ${{ github.event.inputs.force_build }}
run : |
repo=${1:-${{ github.repository }}}
tag=${2:-latest}
token=$(curl -s "https://auth.docker.io/token?service=registry.docker.io&scope=repository:${repo}:pull" | jq -r '.token')
digest=$(curl -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -H "Authorization: Bearer $token" -s "https://registry-1.docker.io/v2/${repo}/manifests/${tag}" | jq -r .config.digest)
latest=$(curl -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -H "Authorization: Bearer $token" -s -L "https://registry-1.docker.io/v2/${repo}/blobs/${digest}" | jq . | grep -Ew "IVENTOY" | cut -d'"' -f4)
echo "buildOrNot=$([ $latest != '${{ steps.iventoy.outputs.version }}' ] && echo "true" || echo "${FORCE_BUILD:-false}")" >> $GITHUB_OUTPUT
-
name : print
run : |
echo ${{ steps.iventoy.outputs.version }}
echo ${{ steps.buildOrNot.outputs.buildOrNot }}
docker :
name : iventoy image
runs-on : ubuntu-latest
needs :
- init
if : |
needs.init.outputs.buildOrNot == 'true'
steps :
-
name : init vars
run : |
echo "iventoy: ${{ needs.init.outputs.iventoy }}"
-
name : Checkout
uses : actions/checkout@v3
-
name : Login to Docker Hub
uses : docker/login-action@v2
with :
username : ${{ secrets.DOCKERHUB_USERNAME }}
password : ${{ secrets.DOCKERHUB_TOKEN }}
-
name : Set up Docker Buildx
uses : docker/setup-buildx-action@v2
-
name : Build and push
uses : docker/build-push-action@v4
with :
provenance : false # Breaking change introduced with 3.3.0 https://github.com/docker/build-push-action/releases/tag/v3.3.0, when an image is pushed since that version I can't retrieve the blob with labels anymore based on the digest via registry api, night have to look into an alternative way to do this
context : .
file : ./Dockerfile
labels : |
IVENTOY=${{ needs.init.outputs.iventoy }}
build-args : |
IVENTOY=${{ needs.init.outputs.iventoy }}
push : true
tags : |
${{ secrets.DOCKERHUB_USERNAME }}/${{ github.event.repository.name }}:${{ needs.init.outputs.iventoy }}
${{ secrets.DOCKERHUB_USERNAME }}/${{ github.event.repository.name }}:latest
-
name : tweet new release
uses : dart-actions/tweet@v1.0.0
with :
text : |
A new version of cloudflared-healtchecks has been released!
docker pull ${{ secrets.DOCKERHUB_USERNAME }}/${{ github.event.repository.name }}:${{ needs.init.outputs.healthchecks }}-${{ needs.init.outputs.cloudflared }}
consumer-key : ${{ secrets.X_API_KEY }}
consumer-secret : ${{ secrets.X_API_KEY_SECRET }}
access-token : ${{ secrets.X_ACCESS_TOKEN }}
access-token-secret : ${{ secrets.X_ACCESS_TOKEN_SECRET }}