From 21677d4c675012793ec790b785560639fe73228e Mon Sep 17 00:00:00 2001 From: Shrikant Sharat Kandula Date: Sat, 21 Dec 2024 10:29:11 +0530 Subject: [PATCH 1/4] ci: Don't tag `latest` when not latest version --- .github/workflows/github-release.yml | 38 ++++++++------- .../scripts/github-release/prelude.js | 47 +++++++++++++++++++ 2 files changed, 67 insertions(+), 18 deletions(-) create mode 100644 .github/workflows/scripts/github-release/prelude.js diff --git a/.github/workflows/github-release.yml b/.github/workflows/github-release.yml index cedac1f84817..baa29d0ee487 100644 --- a/.github/workflows/github-release.yml +++ b/.github/workflows/github-release.yml @@ -1,4 +1,4 @@ -name: Appsmith Github Release Workflow +name: Github Release # This workflow builds Docker images for server and client, and then pushes them to Docker Hub. # The docker-tag with which this push happens is `latest` and the release tag (e.g., v1.2.3 etc.). @@ -17,24 +17,27 @@ jobs: runs-on: ubuntu-latest outputs: - tag: ${{ steps.get_version.outputs.tag }} + tag: ${{ steps.main.outputs.tag }} + docker_tags: ${{ steps.main.outputs.docker_tags }} steps: - - name: Environment details - run: | - echo "PWD: $PWD" - echo "GITHUB_REF: $GITHUB_REF" - echo "GITHUB_SHA: $GITHUB_SHA" - echo "GITHUB_EVENT_NAME: $GITHUB_EVENT_NAME" + - uses: actions/checkout@v4 + with: + ref: ${{ github.ref }} + fetch-depth: "5" + fetch-tags: "true" - - name: Get the version - id: get_version - run: | - if ! [[ ${GITHUB_REF-} =~ ^refs/tags/v[[:digit:]]\.[[:digit:]]+(\.[[:digit:]]+)?$ ]]; then - echo "Invalid tag: '${GITHUB_REF-}'. Has to be like `v1.22`, `v1.22.33` only." - exit 1 - fi - echo "tag=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT + - name: Prelude checks and preparations + uses: actions/github-script@v7 + id: main + with: + script: | + require( + "${{ github.workspace }}/.github/workflows/scripts/github-release/prelude.js", + )( + { core, context, github }, + "${{ vars.DOCKER_HUB_ORGANIZATION }}/appsmith-${{ vars.EDITION }}", + ) client-build: needs: @@ -273,5 +276,4 @@ jobs: APPSMITH_SEGMENT_CE_KEY=${{ secrets.APPSMITH_SEGMENT_CE_KEY }} BASE=${{ vars.DOCKER_HUB_ORGANIZATION }}/base-${{ vars.EDITION }}:nightly tags: | - ${{ vars.DOCKER_HUB_ORGANIZATION }}/appsmith-${{ vars.EDITION }}:${{needs.prelude.outputs.tag}} - ${{ vars.DOCKER_HUB_ORGANIZATION }}/appsmith-${{ vars.EDITION }}:latest + ${{ needs.prelude.outputs.docker_tags }} diff --git a/.github/workflows/scripts/github-release/prelude.js b/.github/workflows/scripts/github-release/prelude.js new file mode 100644 index 000000000000..17f5772dc641 --- /dev/null +++ b/.github/workflows/scripts/github-release/prelude.js @@ -0,0 +1,47 @@ +const { exec } = require("child_process"); + +module.exports = async function ({ core, context }, imageRepo) { + core.summary.addList([ + "PWD: " + process.cwd(), + "GITHUB_REF: " + context.ref, + "GITHUB_SHA: " + context.sha, + "GITHUB_EVENT_NAME: " + context.eventName, + ]); + + if (!context.ref?.match(/^refs\/tags\/v/)) { + core.setFailed(`Invalid tag: '${context.ref}'. Has to be like 'v1.22', 'v1.22.33' only.`); + return; + } + + const thisVersion = context.ref.replace("refs/tags/", ""); + core.setOutput("tag", thisVersion); + + const dockerTags = [ + `${imageRepo}:${thisVersion}`, + ]; + const latestVersion = await getLatestTag(); + + if (latestVersion === thisVersion) { + dockerTags.push(`${imageRepo}:latest`); + } + + core.summary.addHeading("Docker image tags", 3); + core.summary.addCodeBlock(dockerTags.join("\n")); + core.setOutput("docker_tags", dockerTags.join("\n")); +} + +function getLatestTag() { + return new Promise((resolve, reject) => { + exec("git tag --list --sort=-version:refname 'v*' | head -1", (error, stdout, stderr) => { + if (error) { + reject(`exec error: ${error}`); + return; + } + if (stderr) { + reject(`stderr: ${stderr}`); + return; + } + resolve(stdout.trim()); + }); + }); +} From 8fce6ce3148c0ed082f839a59dd45d0b8b977218 Mon Sep 17 00:00:00 2001 From: Shrikant Sharat Kandula Date: Sat, 21 Dec 2024 10:32:22 +0530 Subject: [PATCH 2/4] write summary --- .github/workflows/scripts/github-release/prelude.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/scripts/github-release/prelude.js b/.github/workflows/scripts/github-release/prelude.js index 17f5772dc641..df7a97999dd4 100644 --- a/.github/workflows/scripts/github-release/prelude.js +++ b/.github/workflows/scripts/github-release/prelude.js @@ -28,6 +28,8 @@ module.exports = async function ({ core, context }, imageRepo) { core.summary.addHeading("Docker image tags", 3); core.summary.addCodeBlock(dockerTags.join("\n")); core.setOutput("docker_tags", dockerTags.join("\n")); + + core.summary.write(); } function getLatestTag() { From b902af094f22253d282334ab45ac34d3fef9f1d6 Mon Sep 17 00:00:00 2001 From: Shrikant Sharat Kandula Date: Sat, 21 Dec 2024 11:00:48 +0530 Subject: [PATCH 3/4] Use table for state summary --- .github/workflows/scripts/github-release/prelude.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/scripts/github-release/prelude.js b/.github/workflows/scripts/github-release/prelude.js index df7a97999dd4..149d266f6cf4 100644 --- a/.github/workflows/scripts/github-release/prelude.js +++ b/.github/workflows/scripts/github-release/prelude.js @@ -1,11 +1,11 @@ const { exec } = require("child_process"); module.exports = async function ({ core, context }, imageRepo) { - core.summary.addList([ - "PWD: " + process.cwd(), - "GITHUB_REF: " + context.ref, - "GITHUB_SHA: " + context.sha, - "GITHUB_EVENT_NAME: " + context.eventName, + core.summary.addTable([ + [{ data: "PWD", header: true }, process.cwd()], + [{ data: "GITHUB_REF", header: true }, context.ref], + [{ data: "GITHUB_SHA", header: true }, context.sha], + [{ data: "GITHUB_EVENT_NAME", header: true }, context.eventName], ]); if (!context.ref?.match(/^refs\/tags\/v/)) { From 21b3f9fe1ec7beea8b1f72b20f5406fb14fca4aa Mon Sep 17 00:00:00 2001 From: Shrikant Sharat Kandula Date: Sat, 21 Dec 2024 11:03:00 +0530 Subject: [PATCH 4/4] add some comments --- .github/workflows/scripts/github-release/prelude.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/scripts/github-release/prelude.js b/.github/workflows/scripts/github-release/prelude.js index 149d266f6cf4..27fec61b8446 100644 --- a/.github/workflows/scripts/github-release/prelude.js +++ b/.github/workflows/scripts/github-release/prelude.js @@ -13,13 +13,17 @@ module.exports = async function ({ core, context }, imageRepo) { return; } + // Current version being tagged, including the 'v' prefix. const thisVersion = context.ref.replace("refs/tags/", ""); core.setOutput("tag", thisVersion); + // The latest version of Appsmith available, including the 'v' prefix, including the currently tagged version. + const latestVersion = await getLatestTag(); + + // The docker tags to be pushed to the registry. const dockerTags = [ `${imageRepo}:${thisVersion}`, ]; - const latestVersion = await getLatestTag(); if (latestVersion === thisVersion) { dockerTags.push(`${imageRepo}:latest`);