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}" >> $GITHUB_OUTPUT - name: Checkout Workspace uses: actions/checkout@v3 - 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@master with: version: tags/v${{ steps.semver.outputs.zrok_semver }} file: zrok_${{ steps.semver.outputs.zrok_semver }}_linux_amd64.tar.gz target: dist/amd64/linux/zrok_${{ steps.semver.outputs.zrok_semver }}_linux_amd64.tar.gz - name: Download Linux ARM64 Release Artifact uses: dsaltares/fetch-gh-release-asset@master with: version: tags/v${{ steps.semver.outputs.zrok_semver }} file: zrok_${{ steps.semver.outputs.zrok_semver }}_linux_arm64.tar.gz target: dist/arm64/linux/zrok_${{ steps.semver.outputs.zrok_semver }}_linux_arm64.tar.gz - name: Unpack the Release Artifacts run: | for TGZ in dist/{amd,arm}64/linux; do tar -xvzf ${TGZ}/zrok_*.tar.gz -C ${TGZ} done - name: Set Up QEMU uses: docker/setup-qemu-action@v2 with: platforms: amd64,arm64 - name: Set Up Docker BuildKit id: buildx uses: docker/setup-buildx-action@v2 - name: Login to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_HUB_API_USER }} password: ${{ secrets.DOCKER_HUB_API_TOKEN }} - name: Set Up Container Image Tags for zrok CLI Container env: RELEASE_REPO: openziti/zrok ZROK_VERSION: ${{ steps.semver.outputs.zrok_semver }} id: tagprep_cli run: | DOCKER_TAGS="" DOCKER_TAGS="${RELEASE_REPO}:${ZROK_VERSION},${RELEASE_REPO}:latest" echo "DEBUG: DOCKER_TAGS=${DOCKER_TAGS}" echo DOCKER_TAGS="${DOCKER_TAGS}" >> $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 # - name: Set Up Container Image Tags for zrok Controller Container # env: # RELEASE_REPO: openziti/zrok-controller # ZROK_VERSION: ${{ steps.semver.outputs.zrok_semver }} # id: tagprep_ctrl # run: | # DOCKER_TAGS="" # DOCKER_TAGS="${RELEASE_REPO}:${ZROK_VERSION},${RELEASE_REPO}:latest" # echo "DEBUG: DOCKER_TAGS=${DOCKER_TAGS}" # echo DOCKER_TAGS="${DOCKER_TAGS}" >> $GITHUB_OUTPUT # # This is a use-case image based on the minimal CLI image. It needs the # # ZROK_VERSION env var so it can build from the versioned image that # # we pushed in the prior step. # - name: Build & Push Multi-Platform Controller Container Image to Hub # uses: docker/build-push-action@v3 # with: # builder: ${{ steps.buildx.outputs.name }} # context: ${{ github.workspace }}/docker/images/zrok-controller/ # platforms: linux/amd64,linux/arm64 # tags: ${{ steps.tagprep_ctrl.outputs.DOCKER_TAGS }} # build-args: | # ZROK_VERSION=${{ env.ZROK_VERSION }} # push: true # - name: Set Up Container Image Tags for zrok Frontend Container # env: # RELEASE_REPO: openziti/zrok-frontend # ZROK_VERSION: ${{ steps.semver.outputs.zrok_semver }} # id: tagprep_frontend # run: | # DOCKER_TAGS="" # DOCKER_TAGS="${RELEASE_REPO}:${ZROK_VERSION},${RELEASE_REPO}:latest" # echo "DEBUG: DOCKER_TAGS=${DOCKER_TAGS}" # echo DOCKER_TAGS="${DOCKER_TAGS}" >> $GITHUB_OUTPUT # - name: Build & Push Multi-Platform Frontend Container Image to Hub # uses: docker/build-push-action@v3 # with: # builder: ${{ steps.buildx.outputs.name }} # context: ${{ github.workspace }}/docker/images/zrok-frontend/ # platforms: linux/amd64,linux/arm64 # tags: ${{ steps.tagprep_frontend.outputs.DOCKER_TAGS }} # build-args: | # ZROK_VERSION=${{ env.ZROK_VERSION }} # push: true # - name: Set Up Container Image Tags for zrok Share Container # env: # RELEASE_REPO: openziti/zrok-share # ZROK_VERSION: ${{ steps.semver.outputs.zrok_semver }} # id: tagprep_share # run: | # DOCKER_TAGS="" # DOCKER_TAGS="${RELEASE_REPO}:${ZROK_VERSION},${RELEASE_REPO}:latest" # echo "DEBUG: DOCKER_TAGS=${DOCKER_TAGS}" # echo DOCKER_TAGS="${DOCKER_TAGS}" >> $GITHUB_OUTPUT # - name: Build & Push Multi-Platform zrok Share Container Image to Hub # uses: docker/build-push-action@v3 # with: # builder: ${{ steps.buildx.outputs.name }} # context: ${{ github.workspace }}/docker/images/zrok-share/ # platforms: linux/amd64,linux/arm64 # tags: ${{ steps.tagprep_share.outputs.DOCKER_TAGS }} # build-args: | # ZROK_VERSION=${{ env.ZROK_VERSION }} # push: true # - name: Set Up Container Image Tags for zrok Access Container # env: # RELEASE_REPO: openziti/zrok-access # ZROK_VERSION: ${{ steps.semver.outputs.zrok_semver }} # id: tagprep_access # run: | # DOCKER_TAGS="" # DOCKER_TAGS="${RELEASE_REPO}:${ZROK_VERSION},${RELEASE_REPO}:latest" # echo "DEBUG: DOCKER_TAGS=${DOCKER_TAGS}" # echo DOCKER_TAGS="${DOCKER_TAGS}" >> $GITHUB_OUTPUT # - name: Build & Push Multi-Platform zrok Access Container Image to Hub # uses: docker/build-push-action@v3 # with: # builder: ${{ steps.buildx.outputs.name }} # context: ${{ github.workspace }}/docker/images/zrok-access/ # platforms: linux/amd64,linux/arm64 # tags: ${{ steps.tagprep_access.outputs.DOCKER_TAGS }} # build-args: | # ZROK_VERSION=${{ env.ZROK_VERSION }} # push: true