From 0f2e692a381e6e18eaba8aaba356c008edf330dd Mon Sep 17 00:00:00 2001 From: Thomas Leplus Date: Sat, 11 May 2024 23:20:51 -0400 Subject: [PATCH] Schedule workflows --- .github/workflows/docker-build-push.yml | 48 ++++++++ .../{dockerrelease.yml => docker-release.yml} | 0 .github/workflows/dockerimage.yml | 106 ------------------ .github/workflows/trigger-release.yml | 58 ++++++++++ .github/workflows/update-prs.yml | 2 +- 5 files changed, 107 insertions(+), 107 deletions(-) create mode 100644 .github/workflows/docker-build-push.yml rename .github/workflows/{dockerrelease.yml => docker-release.yml} (100%) delete mode 100644 .github/workflows/dockerimage.yml create mode 100644 .github/workflows/trigger-release.yml diff --git a/.github/workflows/docker-build-push.yml b/.github/workflows/docker-build-push.yml new file mode 100644 index 0000000..a7dd9ad --- /dev/null +++ b/.github/workflows/docker-build-push.yml @@ -0,0 +1,48 @@ +--- +name: Docker + +on: + push: + pull_request: + schedule: + - cron: '0 0 * * 0' + workflow_dispatch: + +permissions: {} + +jobs: + build: + if: ${{ ! startsWith(github.ref, 'refs/tags/') }} + runs-on: ubuntu-latest + steps: + - name: Set IMAGE + run: echo "IMAGE=${GITHUB_REPOSITORY#*/docker-}" >> "${GITHUB_ENV}" + - uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 + - uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v3.0.0 + - uses: docker/setup-buildx-action@d70bba72b1f3fd22344832f00baa16ece964efeb # v3.3.0 + - uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # v5.5.1 + id: meta + with: + images: ${{ github.repository_owner }}/${{ env.IMAGE }} + tags: | + type=schedule + type=ref,event=branch + type=ref,event=pr + type=sha + - name: Test the Docker image + working-directory: ${{ env.IMAGE }} + run: docker compose -f docker-compose.test.yml run sut + - uses: docker/login-action@e92390c5fb421da1463c202d546fed0ec5c39f20 # v3.1.0 + if: github.ref == 'refs/heads/main' + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - uses: docker/build-push-action@2cdde995de11925a030ce8070c3d77a52ffcf1c0 # v5.3.0 + with: + context: ${{ env.IMAGE }} + platforms: linux/amd64,linux/arm64 + pull: true + push: ${{ github.ref == 'refs/heads/main' }} + sbom: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/dockerrelease.yml b/.github/workflows/docker-release.yml similarity index 100% rename from .github/workflows/dockerrelease.yml rename to .github/workflows/docker-release.yml diff --git a/.github/workflows/dockerimage.yml b/.github/workflows/dockerimage.yml deleted file mode 100644 index 81921cc..0000000 --- a/.github/workflows/dockerimage.yml +++ /dev/null @@ -1,106 +0,0 @@ ---- -name: Docker - -on: - push: - pull_request: - schedule: - - cron: '0 0 * * 0' - workflow_dispatch: - -permissions: - contents: write - -jobs: - build: - if: ${{ ! startsWith(github.ref, 'refs/tags/') }} - runs-on: ubuntu-latest - steps: - - name: Set IMAGE - run: echo "IMAGE=${GITHUB_REPOSITORY#*/docker-}" >> "${GITHUB_ENV}" - - uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 - - name: Install cosign - if: github.ref == 'refs/heads/main' - uses: sigstore/cosign-installer@59acb6260d9c0ba8f4a2f9d9b48431a222b68e20 # v3.5.0 - with: - cosign-release: v2.1.1 - - uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v3.0.0 - - uses: docker/setup-buildx-action@d70bba72b1f3fd22344832f00baa16ece964efeb # v3.3.0 - - uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # v5.5.1 - id: meta - with: - images: ${{ github.repository_owner }}/${{ env.IMAGE }} - tags: | - type=schedule - type=ref,event=branch - type=ref,event=pr - type=sha - - uses: docker/login-action@e92390c5fb421da1463c202d546fed0ec5c39f20 # v3.1.0 - if: github.ref == 'refs/heads/main' - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - uses: docker/build-push-action@2cdde995de11925a030ce8070c3d77a52ffcf1c0 # v5.3.0 - id: build-and-push - with: - context: ${{ env.IMAGE }} - platforms: linux/amd64,linux/arm64 - pull: true - push: ${{ github.ref == 'refs/heads/main' }} - sbom: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - - name: Sign the published Docker image - if: github.ref == 'refs/heads/main' - env: - TAGS: ${{ steps.meta.outputs.tags }} - DIGEST: ${{ steps.build-and-push.outputs.digest }} - COSIGN_PASSWORD: '' - COSIGN_PRIVATE_KEY: ${{ secrets.COSIGN_PRIVATE_KEY }} - run: \echo "${TAGS}" | \xargs -I {} cosign sign --key <(\echo "${COSIGN_PRIVATE_KEY}") --yes "{}@${DIGEST}" \ - -a "workflow=${{ github.workflow }}" \ - -a "repo=${{ github.repository }}" \ - -a "branch=${{ github.ref_name }}" \ - -a "ref=${{ github.sha }}" - - name: Test the Docker image - working-directory: ${{ env.IMAGE }} - run: docker compose -f docker-compose.test.yml run sut - - name: Set VERSION - if: github.ref == 'refs/heads/main' - run: | - # shellcheck disable=SC2086 - VERSION="$(\grep ${IMAGE}/Dockerfile -e '^FROM' | \head -n 1 | \sed -e 's/@.*$//; s/^.*://;')" - if [[ "${VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] ; then - \echo "VERSION=${VERSION}" >> "${GITHUB_ENV}" - fi - - name: Check if release already exists - if: env.VERSION != '' - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 - id: check-release - with: - script: | - const { VERSION } = process.env - return github.rest.repos.getReleaseByTag({ - owner: context.repo.owner, - repo: context.repo.repo, - tag: `v${VERSION}`, - }).then(function(result) { - core.info(JSON.stringify(result)) - core.info(`Release ${result.data.tag_name} found`) - return result.data.tag_name - }).catch(function(error) { - if (error.status === 404) { - core.info(`Release v${VERSION} not found`) - return - } else { - throw error - } - }) - result-encoding: string - - name: Trigger release - if: env.VERSION != '' && steps.check-release.outputs.result == 'undefined' - uses: actions/create-release@0cb9c9b65d5d1901c1f53e5e66eaf4afd303e70e # v1.1.4 - env: - GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} - with: - tag_name: v${{ env.VERSION }} diff --git a/.github/workflows/trigger-release.yml b/.github/workflows/trigger-release.yml new file mode 100644 index 0000000..f30b40e --- /dev/null +++ b/.github/workflows/trigger-release.yml @@ -0,0 +1,58 @@ +--- +name: Trigger Release + +on: + push: + schedule: + - cron: '0 0 * * *' + workflow_dispatch: + +permissions: + contents: write + +jobs: + build: + if: ${{ ! startsWith(github.ref, 'refs/tags/') }} + runs-on: ubuntu-latest + steps: + - name: Set IMAGE + run: echo "IMAGE=${GITHUB_REPOSITORY#*/docker-}" >> "${GITHUB_ENV}" + - name: Set VERSION + if: github.ref == 'refs/heads/main' + run: | + # shellcheck disable=SC2086 + VERSION="$(\grep ${IMAGE}/Dockerfile -e '^FROM' | \head -n 1 | \sed -e 's/@.*$//; s/^.*://;')" + if [[ "${VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] ; then + \echo "VERSION=${VERSION}" >> "${GITHUB_ENV}" + fi + - name: Check if release already exists + if: env.VERSION != '' + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + id: check-release + with: + script: | + const { VERSION } = process.env + return github.rest.repos.getReleaseByTag({ + owner: context.repo.owner, + repo: context.repo.repo, + tag: `v${VERSION}`, + }).then(function(result) { + core.info(JSON.stringify(result)) + core.info(`Release ${result.data.tag_name} found`) + return result.data.tag_name + }).catch(function(error) { + if (error.status === 404) { + core.info(`Release v${VERSION} not found`) + return + } else { + throw error + } + }) + result-encoding: string + - name: Trigger Release + if: env.VERSION != '' && steps.check-release.outputs.result == 'undefined' + uses: actions/create-release@0cb9c9b65d5d1901c1f53e5e66eaf4afd303e70e # v1.1.4 + env: + GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} + with: + tag_name: v${{ env.VERSION }} diff --git a/.github/workflows/update-prs.yml b/.github/workflows/update-prs.yml index 669baae..2082e34 100644 --- a/.github/workflows/update-prs.yml +++ b/.github/workflows/update-prs.yml @@ -4,7 +4,7 @@ name: Update PRs on: push: schedule: - - cron: '0 0 * * 0' + - cron: '0 * * * *' workflow_dispatch: permissions: