name: Build Release Docker Image on: release: types: [published] env: REGISTRY: git.techniverse.net IMAGE: git.techniverse.net/scriptos/stream-recorder jobs: build-amd64: runs-on: linux-amd64 steps: - name: Checkout repository uses: actions/checkout@v4 - name: Login to Gitea Container Registry run: echo "${REGISTRY_TOKEN}" | docker login "${REGISTRY}" -u "${GITHUB_ACTOR}" --password-stdin env: REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }} - name: Build and push amd64 release image run: | RELEASE_TAG="${GITHUB_REF_NAME}" VERSION="${RELEASE_TAG#v}" docker build --pull --platform linux/amd64 \ -t "${IMAGE}:${RELEASE_TAG}-amd64" \ -t "${IMAGE}:${VERSION}-amd64" \ . docker push "${IMAGE}:${RELEASE_TAG}-amd64" docker push "${IMAGE}:${VERSION}-amd64" build-arm64: runs-on: linux-arm64 steps: - name: Checkout repository uses: actions/checkout@v4 - name: Login to Gitea Container Registry run: echo "${REGISTRY_TOKEN}" | docker login "${REGISTRY}" -u "${GITHUB_ACTOR}" --password-stdin env: REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }} - name: Build and push arm64 release image run: | RELEASE_TAG="${GITHUB_REF_NAME}" VERSION="${RELEASE_TAG#v}" docker build --pull --platform linux/arm64 \ -t "${IMAGE}:${RELEASE_TAG}-arm64" \ -t "${IMAGE}:${VERSION}-arm64" \ . docker push "${IMAGE}:${RELEASE_TAG}-arm64" docker push "${IMAGE}:${VERSION}-arm64" publish-release-manifest: runs-on: linux-amd64 needs: [build-amd64, build-arm64] steps: - name: Login to Gitea Container Registry run: echo "${REGISTRY_TOKEN}" | docker login "${REGISTRY}" -u "${GITHUB_ACTOR}" --password-stdin env: REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }} - name: Publish release manifests run: | RELEASE_TAG="${GITHUB_REF_NAME}" VERSION="${RELEASE_TAG#v}" docker manifest create "${IMAGE}:${RELEASE_TAG}" \ --amend "${IMAGE}:${RELEASE_TAG}-amd64" \ --amend "${IMAGE}:${RELEASE_TAG}-arm64" docker manifest push "${IMAGE}:${RELEASE_TAG}" if [ "${VERSION}" != "${RELEASE_TAG}" ]; then docker manifest create "${IMAGE}:${VERSION}" \ --amend "${IMAGE}:${VERSION}-amd64" \ --amend "${IMAGE}:${VERSION}-arm64" docker manifest push "${IMAGE}:${VERSION}" fi docker manifest create "${IMAGE}:latest" \ --amend "${IMAGE}:${RELEASE_TAG}-amd64" \ --amend "${IMAGE}:${RELEASE_TAG}-arm64" docker manifest push "${IMAGE}:latest"