diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 5ae58c0a..117ec78e 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -30,7 +30,36 @@ jobs: lowercase-github-repository_owner: ${{ steps.github-repository_owner.outputs.lowercase }} ytdlp-latest-release: ${{ steps.yt-dlp.outputs.latest-release }} ytdlp-releases: ${{ steps.yt-dlp.outputs.releases }} + missing-tags: ${{ steps.tagged.outputs.missing }} + missing-tags-image: ${{ steps.tagged.outputs.image }} steps: + - name: Pull tagged releases + id: tagged + run: | + image='ghcr.io/meeb/${{ env.IMAGE_NAME }}' + missing='' + set_sl_var() { local f='%s=%s\n' ; printf -- "${f}" "$@" ; } ; + set -eux + set_sl_var image "${image}" >> "${GITHUB_OUTPUT}" + # v0.14.1 = ghcr.io/meeb/tubesync:latest@sha256:63fffee3411bda395c526087d7107f76834141bb0c1443a0bd6bed5533e5a85f + tag_tried='v0.14.1' + tag_image_digest='latest@sha256:63fffee3411bda395c526087d7107f76834141bb0c1443a0bd6bed5533e5a85f' + docker pull "${image}:${tag_image_digest}" + docker pull "${image}:${tag_tried}" && tag_found=1 || { + tag_found=0 + missing="${missing}${missing:+|}${tag_tried}=${image}:${tag_image_digest}" + } + set_sl_var "${tag_tried}" "${tag_found}" >> "${GITHUB_OUTPUT}" + # v0.15.1 = ghcr.io/meeb/tubesync:latest@sha256:7303b2d8854aac15f94dbbfdd0ee66ca598ade1af6ac2d9e3d886c93ffa2d596 + tag_tried='v0.15.1' + tag_image_digest='latest@sha256:7303b2d8854aac15f94dbbfdd0ee66ca598ade1af6ac2d9e3d886c93ffa2d596' + docker pull "${image}:${tag_image_digest}" + docker pull "${image}:${tag_tried}" && tag_found=1 || { + tag_found=0 + missing="${missing}${missing:+|}${tag_tried}=${image}:${tag_image_digest}" + } + set_sl_var "${tag_tried}" "${tag_found}" >> "${GITHUB_OUTPUT}" + set_sl_var missing "${missing}" >> "${GITHUB_OUTPUT}" - uses: actions/checkout@v4 - name: Lowercase github username id: github-actor @@ -168,6 +197,21 @@ jobs: DOCKER_USERNAME: ${{ github.actor }} DOCKER_TOKEN: ${{ 'meeb' == github.repository_owner && secrets.REGISTRY_ACCESS_TOKEN || secrets.GITHUB_TOKEN }} run: echo "${DOCKER_TOKEN}" | docker login --password-stdin --username "${DOCKER_USERNAME}" "${DOCKER_REGISTRY}" + - name: Push missing release tags + if: ${{ 'meeb' == github.actor && github.actor == github.repository_owner && '' != needs.info.outputs.missing-tags }} + run: | + missing='${{ needs.info.outputs.missing-tags }}' + image='${{ needs.info.outputs.missing-tags-image }}' + printf -- '%s\n' "${missing}" | tr '|' '\n' | \ + while read SPEC + do + printf -- '%s\n' "${SPEC}" | ( IFS='=' ; \ + read tag source && \ + docker pull "${source}" && \ + docker tag "${source}" "${image}:${tag}" && \ + docker push "${image}:${tag}" ; + ) + done - name: Build image for `dive` id: build-dive-image uses: docker/build-push-action@v6