name: Wavelog create Dockerimage and publish it on: release: types: [published] workflow_dispatch: env: REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} jobs: prepare: runs-on: ubuntu-latest outputs: image_name: ${{ steps.lowercase.outputs.image_name }} steps: - name: Set lowercase image name id: lowercase run: echo "image_name=$(echo '${{ env.IMAGE_NAME }}' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT build-amd64: runs-on: ubuntu-latest needs: prepare permissions: contents: read packages: write outputs: digest: ${{ steps.build.outputs.digest }} steps: - uses: actions/checkout@v6 - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Docker meta id: meta uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ needs.prepare.outputs.image_name }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build and push (amd64) id: build uses: docker/build-push-action@v6 with: context: . platforms: linux/amd64 outputs: type=image,name=${{ env.REGISTRY }}/${{ needs.prepare.outputs.image_name }},push-by-digest=true,name-canonical=true,push=true labels: ${{ steps.meta.outputs.labels }} build-arm64: runs-on: ubuntu-latest needs: prepare permissions: contents: read packages: write outputs: digest: ${{ steps.build.outputs.digest }} steps: - uses: actions/checkout@v6 - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Docker meta id: meta uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ needs.prepare.outputs.image_name }} - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build and push (arm64) id: build uses: docker/build-push-action@v6 with: context: . platforms: linux/arm64 outputs: type=image,name=${{ env.REGISTRY }}/${{ needs.prepare.outputs.image_name }},push-by-digest=true,name-canonical=true,push=true labels: ${{ steps.meta.outputs.labels }} build-armv7: runs-on: ubuntu-latest needs: prepare permissions: contents: read packages: write outputs: digest: ${{ steps.build.outputs.digest }} steps: - uses: actions/checkout@v6 - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Docker meta id: meta uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ needs.prepare.outputs.image_name }} - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build and push (arm/v7) id: build uses: docker/build-push-action@v6 with: context: . platforms: linux/arm/v7 outputs: type=image,name=${{ env.REGISTRY }}/${{ needs.prepare.outputs.image_name }},push-by-digest=true,name-canonical=true,push=true labels: ${{ steps.meta.outputs.labels }} merge: runs-on: ubuntu-latest needs: - prepare - build-amd64 - build-arm64 - build-armv7 permissions: contents: read packages: write steps: - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Docker meta id: meta uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ needs.prepare.outputs.image_name }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Create and push multi-arch manifest run: | docker buildx imagetools create \ $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ ${{ env.REGISTRY }}/${{ needs.prepare.outputs.image_name }}@${{ needs.build-amd64.outputs.digest }} \ ${{ env.REGISTRY }}/${{ needs.prepare.outputs.image_name }}@${{ needs.build-arm64.outputs.digest }} \ ${{ env.REGISTRY }}/${{ needs.prepare.outputs.image_name }}@${{ needs.build-armv7.outputs.digest }}