name: 'Docker Create Manifest' description: 'Creates and pushes a multi-arch manifest from per-platform digests.' runs: using: 'composite' steps: - name: Download digests uses: actions/download-artifact@v8 with: path: ${{ runner.temp }}/digests pattern: digests-* merge-multiple: true - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to GHCR uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ inputs.ghcr_username }} password: ${{ inputs.ghcr_token }} - name: Prepare combined tags (default + ubuntu suffix) id: combined_tags shell: bash run: | TAGS="${{ inputs.tags }}" # Generate both default tags and ubuntu-suffixed tags DEFAULT_TAGS="$TAGS" UBUNTU_TAGS=$(echo "$TAGS" | awk -F, '{for(i=1;i<=NF;i++){split($i,a,":"); printf "%s:%s-ubuntu", a[1], a[2]; if(i> $GITHUB_OUTPUT - name: Create manifest list and push shell: bash working-directory: ${{ runner.temp }}/digests run: | TAG_ARGS=$(echo "${{ steps.combined_tags.outputs.combined_tags }}" | tr ',' '\n' | xargs -I {} echo "-t {}" | tr '\n' ' ') docker buildx imagetools create $TAG_ARGS \ $(printf '${{ inputs.image_name }}@sha256:%s ' *) - name: Inspect image shell: bash run: | TAG=$(echo "${{ inputs.tags }}" | cut -d',' -f1) docker buildx imagetools inspect "$TAG" inputs: ghcr_username: required: true description: 'GHCR username' ghcr_token: required: true description: 'GHCR token' tags: required: true description: 'Comma-separated list of image tags' image_name: required: true description: 'Image name without tag (e.g. ghcr.io/gameyfin/gameyfin)'