name: Build-Release-Image on: push: tags: - '*' env: CONTAINER_NAME: git.mrmeeb.stream/mrmeeb/simple-login TEA_VERSION: 0.9.2 jobs: Build-Image: runs-on: [ubuntu-docker-latest, "${{ matrix.platform }}"] strategy: fail-fast: false matrix: platform: - linux/amd64 - linux/arm64 steps: - name: Prepare run: | platform=${{ matrix.platform }} echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV - name: Checkout uses: actions/checkout@v2 # Not needed currently due to https://github.com/go-gitea/gitea/issues/29563 #- name: Prepare tags # id: meta # uses: docker/metadata-action@v5 # with: # images: ${{ env.CONTAINER_NAME }} # tags: | # type=pep440,pattern={{version}} - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Gitea Container Registry uses: docker/login-action@v3 with: registry: git.mrmeeb.stream username: ${{ env.GITHUB_ACTOR }} password: ${{ secrets.GTCR_TOKEN }} - name: Build and push by digest uses: docker/build-push-action@v5 id: build with: context: ./app platforms: ${{ matrix.platform }} provenance: false outputs: type=image,name=${{ env.CONTAINER_NAME }},push-by-digest=true,name-canonical=true,push=true - name: Export digest run: | mkdir -p /tmp/digests digest="${{ steps.build.outputs.digest }}" touch "/tmp/digests/${digest#sha256:}" - name: Upload digest uses: actions/upload-artifact@v3 with: name: digests-${{ env.PLATFORM_PAIR }} path: /tmp/digests/* if-no-files-found: error retention-days: 1 - name: Notify uses: rjstone/discord-webhook-notify@v1 if: failure() with: severity: ${{ job.status == 'success' && 'info' || (job.status == 'cancelled' && 'warn' || 'error') }} details: Build ${{ job.status == 'success' && 'succeeded' || (job.status == 'cancelled' && 'cancelled' || 'failed') }}! webhookUrl: ${{ secrets.DISCORD_WEBHOOK }} username: Gitea avatarUrl: ${{ vars.RUNNER_ICON_URL }} Merge-Images: runs-on: ubuntu-docker-latest needs: [Build-Image] steps: - name: Checkout uses: actions/checkout@v2 - name: Get tag run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV - name: Download digests uses: actions/download-artifact@v3 with: path: /tmp/digests pattern: digests-* merge-multiple: true - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 # Not needed currently due to https://github.com/go-gitea/gitea/issues/29563 #- name: Prepare Docker metadata # id: meta # uses: docker/metadata-action@v5 # with: # images: ${{ env.CONTAINER_NAME }} - name: Login to Gitea Container Registry uses: docker/login-action@v3 with: registry: git.mrmeeb.stream username: ${{ env.GITHUB_ACTOR }} password: ${{ secrets.GTCR_TOKEN }} - name: Create manifest latest working-directory: /tmp/digests run: | docker manifest create ${{ env.CONTAINER_NAME }}:latest \ --amend ${{ env.CONTAINER_NAME }}@sha256:$(ls -p digests-linux-amd64/* | cut -d / -f 2) \ --amend ${{ env.CONTAINER_NAME }}@sha256:$(ls -p digests-linux-arm64/* | cut -d / -f 2) #docker manifest annotate --arch amd64 --os linux ${{ env.CONTAINER_NAME }}:latest ${{ env.CONTAINER_NAME }}@sha256:$(ls -p digests-linux-amd64/* | cut -d / -f 2) #docker manifest annotate --arch arm64 --os linux ${{ env.CONTAINER_NAME }}:latest ${{ env.CONTAINER_NAME }}@sha256:$(ls -p digests-linux-arm64/* | cut -d / -f 2) docker manifest inspect ${{ env.CONTAINER_NAME }}:latest docker manifest push ${{ env.CONTAINER_NAME }}:latest - name: Create manifest tagged working-directory: /tmp/digests run: | docker manifest create ${{ env.CONTAINER_NAME }}:${{ env.RELEASE_VERSION }} \ --amend ${{ env.CONTAINER_NAME }}@sha256:$(ls -p digests-linux-amd64/* | cut -d / -f 2) \ --amend ${{ env.CONTAINER_NAME }}@sha256:$(ls -p digests-linux-arm64/* | cut -d / -f 2) #docker manifest annotate --arch amd64 --os linux ${{ env.CONTAINER_NAME }}:${{ env.RELEASE_VERSION }} ${{ env.CONTAINER_NAME }}@sha256:$(ls -p digests-linux-amd64/* | cut -d / -f 2) #docker manifest annotate --arch arm64 --os linux ${{ env.CONTAINER_NAME }}:${{ env.RELEASE_VERSION }} ${{ env.CONTAINER_NAME }}@sha256:$(ls -p digests-linux-arm64/* | cut -d / -f 2) docker manifest inspect ${{ env.CONTAINER_NAME }}:${{ env.RELEASE_VERSION }} docker manifest push ${{ env.CONTAINER_NAME }}:${{ env.RELEASE_VERSION }} # Disabled due to https://github.com/go-gitea/gitea/issues/29563 #- name: Create manifest list and push # working-directory: /tmp/digests # run: | # echo $DOCKER_METADATA_OUTPUT_JSON # echo $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ # $(printf '${{ env.CONTAINER_NAME }}@sha256:%s ' $(ls -p */* | cut -d / -f 2)) # docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ # $(printf '${{ env.CONTAINER_NAME }}@sha256:%s ' $(ls -p */* | cut -d / -f 2)) #- name: Inspect image # run: | # docker buildx imagetools inspect ${{ env.CONTAINER_NAME }}:${{ steps.meta.outputs.version }} - name: Notify uses: rjstone/discord-webhook-notify@v1 if: failure() with: severity: ${{ job.status == 'success' && 'info' || (job.status == 'cancelled' && 'warn' || 'error') }} details: Build ${{ job.status == 'success' && 'succeeded' || (job.status == 'cancelled' && 'cancelled' || 'failed') }}! webhookUrl: ${{ secrets.DISCORD_WEBHOOK }} username: Gitea avatarUrl: ${{ vars.RUNNER_ICON_URL }} Create-Release: runs-on: [ubuntu-latest, linux/amd64] needs: [Merge-Images] steps: - name: Checkout uses: actions/checkout@v2 - name: Get tag run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV - name: Prepare tea run: | # Download tea from Gitea release page echo "Downloading Tea v${{ env.TEA_VERSION }}" && \ wget -q -O tea https://gitea.com/gitea/tea/releases/download/v${{ env.TEA_VERSION }}/tea-${{ env.TEA_VERSION }}-linux-amd64 && \ echo "Downloaded Tea" && \ chmod +x tea && \ # Login to Gitea echo "Logging in to Gitea using Tea" && \ ./tea login add --name SimpleLogin --url https://git.mrmeeb.stream --token ${{ secrets.GITHUB_TOKEN }} && \ echo "Done" - name: Make release run: | echo "Creating release" && \ ./tea release create --login "SimpleLogin" --repo ${{ env.GITHUB_REPOSITORY }} --tag ${{ env.RELEASE_VERSION }} -t ${{ env.RELEASE_VERSION }} -n "Triggered by release of v${{ env.RELEASE_VERSION }} by the SimpleLogin team. View the changelog" && \ echo "Done" - name: Notify uses: rjstone/discord-webhook-notify@v1 if: failure() with: severity: ${{ job.status == 'success' && 'info' || (job.status == 'cancelled' && 'warn' || 'error') }} details: Release ${{ job.status == 'success' && 'succeeded' || (job.status == 'cancelled' && 'cancelled' || 'failed') }}! webhookUrl: ${{ secrets.DISCORD_WEBHOOK }} username: Gitea avatarUrl: ${{ vars.RUNNER_ICON_URL }} Notify: runs-on: ubuntu-latest needs: [Build-Image, Merge-Images, Create-Release] steps: - name: Notify uses: rjstone/discord-webhook-notify@v1 if: always() with: severity: ${{ job.status == 'success' && 'info' || (job.status == 'cancelled' && 'warn' || 'error') }} details: Release ${{ job.status == 'success' && 'succeeded' || (job.status == 'cancelled' && 'cancelled' || 'failed') }}! webhookUrl: ${{ secrets.DISCORD_WEBHOOK }} username: Gitea avatarUrl: ${{ vars.RUNNER_ICON_URL }}