PromucFlow_constructor/.github/workflows/github-release.yml
Goutham Pratapa 86b84c99ed
chore: update GitHub Actions runner to Ubuntu 22.04-8core (#41261)
Updated the GitHub Actions workflow to use the Ubuntu 22.04-8core runner
for improved performance and compatibility.

## Description
> [!TIP]  
> _Add a TL;DR when the description is longer than 500 words or
extremely technical (helps the content, marketing, and DevRel team)._
>
> _Please also include relevant motivation and context. List any
dependencies that are required for this change. Add links to Notion,
Figma or any other documents that might be relevant to the PR._


Fixes #`Issue Number`  
_or_  
Fixes `Issue URL`
> [!WARNING]  
> _If no issue exists, please create an issue first, and check with the
maintainers if the issue is valid._

## Automation

/ok-to-test tags=""

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!CAUTION]  
> If you modify the content in this section, you are likely to disrupt
the CI result for your PR.

<!-- end of auto-generated comment: Cypress test results  -->


## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [ ] No
2025-09-25 12:00:34 +05:30

290 lines
8.7 KiB
YAML

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.).
# This workflow does NOT run tests.
# This workflow is automatically triggered when a release is created on GitHub.
on:
# Ref: <https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows#release>.
release:
types:
# Unlike the `released` event, the `published` event triggers for pre-releases as well.
- released
jobs:
prelude:
runs-on: ubuntu-latest
outputs:
tag: ${{ steps.main.outputs.tag }}
docker_tags: ${{ steps.main.outputs.docker_tags }}
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.ref }}
fetch-depth: "5"
fetch-tags: "true"
- 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:
- prelude
runs-on: ubuntu-latest-8-cores
defaults:
run:
working-directory: app/client
shell: bash
steps:
# Checkout the code
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version-file: app/client/package.json
# Retrieve npm dependencies from cache. After a successful run, these dependencies are cached again
- name: Cache npm dependencies
uses: actions/cache@v4
env:
cache-name: cache-yarn-dependencies
with:
# npm dependencies are stored in `~/.m2` on Linux/macOS
path: ~/.npm
key: ${{ runner.OS }}-node-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.OS }}-node-
${{ runner.OS }}-
- name: Install dependencies
run: yarn install --immutable
- name: Create the bundle
env:
REACT_APP_ENVIRONMENT: "PRODUCTION"
REACT_APP_FUSIONCHARTS_LICENSE_KEY: "${{ secrets.APPSMITH_FUSIONCHARTS_LICENSE_KEY }}"
REACT_APP_SEGMENT_CE_KEY: "${{ secrets.APPSMITH_SEGMENT_CE_KEY }}"
REACT_APP_INTERCOM_APP_ID: "${{ secrets.APPSMITH_INTERCOM_ID }}"
REACT_APP_VERSION_EDITION: "Community"
run: |
yarn build || EXIT_CODE=$?
if [ -n "$EXIT_CODE" ] && [ "$EXIT_CODE" -gt 1 ]; then
exit $EXIT_CODE
fi
ls -l build
- name: Pack the client build directory
run: |
tar -cvf ./build.tar -C build .
# Upload the build artifact so that it can be used by the test & deploy job in the workflow
- name: Upload react build bundle
uses: actions/upload-artifact@v4
with:
name: client-build
path: app/client/build.tar
overwrite: true
server-build:
needs:
- prelude
defaults:
run:
working-directory: app/server
runs-on: ubuntu-22.04-8core
steps:
- name: Checkout the code
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: "temurin"
java-version: "17"
# Retrieve maven dependencies from cache. After a successful run, these dependencies are cached again
- name: Cache maven dependencies
uses: actions/cache@v4
env:
cache-name: cache-maven-dependencies
with:
# maven dependencies are stored in `~/.m2` on Linux/macOS
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Test and Build package
working-directory: app/server
run: |
mvn --batch-mode versions:set \
-DnewVersion=${{ needs.prelude.outputs.tag }} \
-DgenerateBackupPoms=false \
-DprocessAllModules=true
./build.sh -DskipTests
ls -l dist
- name: Upload server build bundle
uses: actions/upload-artifact@v4
with:
name: server-build
path: app/server/dist/
overwrite: true
rts-build:
needs:
- prelude
defaults:
run:
working-directory: app/client/packages/rts
runs-on: ubuntu-latest
steps:
# Checkout the code
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version-file: app/client/package.json
# actions/setup-node@v4 doesn't work properly with Yarn 3
# when the project lives in a subdirectory: https://github.com/actions/setup-node/issues/488
# Restoring the cache manually instead
- name: Restore Yarn cache
if: steps.run_result.outputs.run_result != 'success'
uses: actions/cache@v4
with:
path: app/.yarn/cache
key: v1-yarn3-${{ hashFiles('app/yarn.lock') }}
restore-keys: |
v1-yarn3-
# Install all the dependencies
- name: Install dependencies
if: steps.run_result.outputs.run_result != 'success'
run: yarn install --immutable
- name: Build
run: |
echo 'export const VERSION = "${{ needs.prelude.outputs.tag }}"' > src/version.js
yarn build
# Tar the bundles to speed up the upload & download process
- name: Tar the rts bundles
run: |
tar -cvf rts-dist.tar dist
# Upload the build artifacts and dependencies so that it can be used by the test & deploy job in other workflows
- name: Upload rts build bundle
uses: actions/upload-artifact@v4
with:
name: rts-dist
path: app/client/packages/rts/rts-dist.tar
overwrite: true
package:
needs: [prelude, client-build, server-build, rts-build]
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
steps:
- name: Checkout the merged commit from PR and base branch
uses: actions/checkout@v4
- name: Set up Depot CLI
uses: depot/setup-action@v1
- name: Download the client build artifact
uses: actions/download-artifact@v4
with:
name: client-build
path: app/client
- name: Untar the client folder
run: |
mkdir -p app/client/build
tar -xvf app/client/build.tar -C app/client/build
echo "Cleaning up the client build"
rm app/client/build.tar
- name: Download the server build artifact
uses: actions/download-artifact@v4
with:
name: server-build
path: app/server/dist
- name: Download the rts build artifact
uses: actions/download-artifact@v4
with:
name: rts-dist
path: app/client/packages/rts/dist
- name: Untar the rts folder
run: |
tar -xvf app/client/packages/rts/dist/rts-dist.tar -C app/client/packages/rts/
echo "Cleaning up the tar files"
rm app/client/packages/rts/dist/rts-dist.tar
- name: Generate info.json
id: info_json
run: |
scripts/generate_info_json.sh
# As pg docker image is continuously updated for each scheduled cron on release, we are using the nightly tag while building the latest tag
- name: Place server artifacts-es
run: |
if [[ -f scripts/prepare_server_artifacts.sh ]]; then
PG_TAG=nightly scripts/prepare_server_artifacts.sh
else
echo "No script found to prepare server artifacts"
exit 1
fi
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Build and push fat image
uses: depot/build-push-action@v1
with:
context: .
push: true
platforms: linux/arm64,linux/amd64
build-args: |
APPSMITH_SEGMENT_CE_KEY=${{ secrets.APPSMITH_SEGMENT_CE_KEY }}
BASE=${{ vars.DOCKER_HUB_ORGANIZATION }}/base-${{ vars.EDITION }}:nightly
tags: |
${{ needs.prelude.outputs.docker_tags }}
labels: |
org.opencontainers.image.revision=${{ steps.info_json.outputs.commitSha }}
org.opencontainers.image.source=${{ steps.info_json.outputs.repo }}
org.opencontainers.image.version=${{ steps.info_json.outputs.version }}