From 889367a6c1db33e4a8bc77338e98bc3148352c58 Mon Sep 17 00:00:00 2001 From: omrishiv <327609+omrishiv@users.noreply.github.com> Date: Mon, 1 Jul 2024 09:34:52 -0700 Subject: [PATCH] Adding nightly builds to idpbuilder (#320) Signed-off-by: omrishiv <327609+omrishiv@users.noreply.github.com> --- .github/workflows/nightly.yaml | 65 ++++++++++++++++++++++++++++++++++ .github/workflows/release.yaml | 9 +++++ 2 files changed, 74 insertions(+) create mode 100644 .github/workflows/nightly.yaml diff --git a/.github/workflows/nightly.yaml b/.github/workflows/nightly.yaml new file mode 100644 index 00000000..aaeccb24 --- /dev/null +++ b/.github/workflows/nightly.yaml @@ -0,0 +1,65 @@ +name: nightly +on: + # This can be used to automatically publish nightlies at UTC nighttime + schedule: + - cron: '0 7 * * *' # run at 7 AM UTC + # This can be used to allow manually triggering nightlies from the web interface + workflow_dispatch: + +jobs: + nightly: + runs-on: ubuntu-22.04 + steps: + - name: Generate a token + id: generate-token + uses: actions/create-github-app-token@v1 + with: + app-id: ${{ vars.CNOE_GH_WORKFLOW_TOKEN_APP_ID }} + private-key: ${{ secrets.CNOE_GH_WORKFLOW_TOKEN_PRIVATE_KEY }} + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + with: + token: ${{ steps.generate-token.outputs.token }} + fetch-depth: 0 + + - run: git fetch --force --tags + - + name: 'Push new tag' + run: | + git config user.name "${GITHUB_ACTOR}" + git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" + + # A previous release was created using a lightweight tag + # git describe by default includes only annotated tags + # git describe --tags includes lightweight tags as well + DESCRIBE=`git tag -l --sort=-v:refname | grep -v nightly | head -n 1` + MAJOR_VERSION=`echo $DESCRIBE | awk '{split($0,a,"."); print a[1]}'` + MINOR_VERSION=`echo $DESCRIBE | awk '{split($0,a,"."); print a[2]}'` + MINOR_VERSION="$((${MINOR_VERSION} + 1))" + TAG="${MAJOR_VERSION}.${MINOR_VERSION}.0-nightly.$(date +'%Y%m%d')" + git tag -a $TAG -m "$TAG: nightly build" + git push origin $TAG + - name: Find previous nightly + run: | + prev_tag=$(git tag | grep "nightly" | sort -r --version-sort | head -n 2 | tail -n 1) + echo "PREVIOUS_NIGHTLY_TAG=$prev_tag" >> $GITHUB_ENV + - name: 'Clean up nightly releases' + uses: actions/github-script@v7 + with: + github-token: ${{ steps.generate-token.outputs.token }} + script: | + const latestRelease = await github.rest.repos.getReleaseByTag({ + owner: "${{ github.repository_owner }}", + repo: "${{ github.event.repository.name }}", + tag: "${{ env.PREVIOUS_NIGHTLY_TAG }}" + }); + console.log(`Release ${latestRelease}`); + if (latestRelease && latestRelease.data && latestRelease.data.id) { + await github.rest.repos.deleteRelease({ + owner: "${{ github.repository_owner }}", + repo: "${{ github.event.repository.name }}", + release_id: latestRelease.data.id, + }); + console.log(`Release id ${latestRelease.data.id} has been deleted.`); + } else { + console.log("No latest release found or failed to retrieve it."); + } diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 04ba26c3..4225f335 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -3,6 +3,7 @@ on: push: tags: - 'v[0-9]+.[0-9]+.[0-9]+' + - 'v[0-9]+.[0-9]+.[0-9]+-nightly.[0-9]+' permissions: contents: write @@ -18,6 +19,13 @@ jobs: - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7 # v5.0.1 with: go-version: '1.21.0' + - name: Set GORELEASER_PREVIOUS_TAG in actual release + if: ${{ !contains(github.ref, '-nightly') }} + # find previous tag by filtering out nightly tags and choosing the + # second to last tag (last one is the current release) + run: | + prev_tag=$(git tag | grep -v "nightly" | sort -r --version-sort | head -n 2 | tail -n 1) + echo "GORELEASER_PREVIOUS_TAG=$prev_tag" >> $GITHUB_ENV # Ensure generation tools run - name: build run: | @@ -30,3 +38,4 @@ jobs: args: release --clean --timeout 30m env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GORELEASER_CURRENT_TAG: ${{ github.ref_name }}