name: Publish Docker Images on: workflow_dispatch: inputs: zrok-version: description: zrok release tag to publish as a Docker image type: string required: true release: types: - released # excludes "prereleased" which is included in "published" to # avoid prematurely releasing semver tagged container images jobs: publish-docker-images: runs-on: ubuntu-latest env: RELEASE_REF: ${{ inputs.zrok-version || github.ref }} steps: # compose the semver string without leading "refs/tags" or "v" so we can predict the # release artifact filename - name: Set zrok Version Semver from Tag Ref id: semver run: | zrok_semver=${RELEASE_REF#refs/tags/} echo "zrok_semver=${zrok_semver#v}" | tee -a $GITHUB_OUTPUT - name: Checkout Workspace uses: actions/checkout@v4 - name: Create the Release Arch Dirs run: | for TGZ in dist/{amd,arm}64/linux/; do mkdir -pv ${TGZ} done - name: Download Linux AMD64 Release Artifact uses: dsaltares/fetch-gh-release-asset@1.1.2 with: version: tags/v${{ steps.semver.outputs.zrok_semver }} file: zrok.*_linux_amd64.tar.gz regex: true target: dist/amd64/linux/zrok_linux_amd64.tar.gz - name: Download Linux ARM64 Release Artifact uses: dsaltares/fetch-gh-release-asset@1.1.2 with: version: tags/v${{ steps.semver.outputs.zrok_semver }} file: zrok.*_linux_arm64.tar.gz regex: true target: dist/arm64/linux/zrok_linux_arm64.tar.gz - name: Unpack the Release Artifacts run: | for TGZ in dist/{amd,arm}64/linux; do tar -xvzf ${TGZ}/*.tar.gz -C ${TGZ} done - name: Set Up QEMU uses: docker/setup-qemu-action@v3 with: platforms: amd64,arm64 - name: Set Up Docker BuildKit id: buildx uses: docker/setup-buildx-action@v3 - name: Login to Docker Hub uses: docker/login-action@v3 with: username: ${{ vars.DOCKER_HUB_API_USER || secrets.DOCKER_HUB_API_USER }} password: ${{ secrets.DOCKER_HUB_API_TOKEN }} - name: Set Up Container Image Tags for zrok CLI Container env: ZROK_CONTAINER_IMAGE_REPO: ${{ vars.ZROK_CONTAINER_IMAGE_REPO || 'openziti/zrok' }} ZROK_CONTAINER_IMAGE_TAG: ${{ steps.semver.outputs.zrok_semver }} id: tagprep_cli run: | DOCKER_TAGS="${ZROK_CONTAINER_IMAGE_REPO}:${ZROK_CONTAINER_IMAGE_TAG}" DOCKER_TAGS+=",${ZROK_CONTAINER_IMAGE_REPO}:latest" echo "DOCKER_TAGS=${DOCKER_TAGS}" | tee -a $GITHUB_OUTPUT # this is the CLI image with the Linux binary for each # arch that was downloaded in ./dist/ - name: Build & Push Multi-Platform CLI Container Image to Hub uses: docker/build-push-action@v3 with: builder: ${{ steps.buildx.outputs.name }} context: ${{ github.workspace }}/ file: ${{ github.workspace }}/docker/images/zrok/Dockerfile platforms: linux/amd64,linux/arm64 tags: ${{ steps.tagprep_cli.outputs.DOCKER_TAGS }} build-args: | DOCKER_BUILD_DIR=./docker/images/zrok ARTIFACTS_DIR=./dist push: true