## Description Temporary arrangement to consume different base image for `pg` vs `release`, until we upgrade Postgres to v15 on release. ## Automation /ok-to-test tags="@tag.Sanity" ### 🔍 Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/9479342636> > Commit: 69d29d1657d606d78c5f85aa130cf773eb693d27 > Cypress dashboard url: <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=9479342636&attempt=1" target="_blank">Click here!</a> <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Introduced a new input parameter `is-pg-build` to several workflows for better customization of PostgreSQL builds. - Enhanced Docker image build processes with dynamic base image tagging based on pull request conditions. - **Chores** - Updated GitHub Actions workflows to improve build automation and conditional logic handling. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
278 lines
11 KiB
YAML
278 lines
11 KiB
YAML
name: On demand build Docker image and deploy preview
|
||
|
||
on:
|
||
# This workflow is only triggered by the `/build-deploy-preview` command dispatch
|
||
repository_dispatch:
|
||
types: [build-deploy-preview-command]
|
||
|
||
jobs:
|
||
notify-job-details:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
# This step creates a comment on the PR with a link to this workflow run.
|
||
- name: Add a comment on the PR with link to workflow run
|
||
uses: peter-evans/create-or-update-comment@v3
|
||
with:
|
||
issue-number: ${{ github.event.client_payload.pull_request.number }}
|
||
body: |
|
||
Deploying Your Preview: <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>.
|
||
Workflow: `${{ github.workflow }}`.
|
||
skip-tests: `${{ github.event.client_payload.slash_command.args.named.skip-tests }}`.
|
||
env: `${{ github.event.client_payload.slash_command.args.named.env }}`.
|
||
PR: ${{ github.event.client_payload.pull_request.number }}.
|
||
recreate: ${{ github.event.client_payload.slash_command.args.named.recreate }}.
|
||
|
||
server-build:
|
||
name: server-build
|
||
if: github.event.client_payload.slash_command.args.named.env != 'release'
|
||
uses: ./.github/workflows/server-build.yml
|
||
secrets: inherit
|
||
with:
|
||
pr: ${{ github.event.client_payload.pull_request.number }}
|
||
skip-tests: ${{ github.event.client_payload.slash_command.args.named.skip-tests }}
|
||
is-pg-build: ${{ github.event.client_payload.pull_request.base.ref == 'pg' }}
|
||
|
||
client-build:
|
||
name: client-build
|
||
if: github.event.client_payload.slash_command.args.named.env != 'release'
|
||
uses: ./.github/workflows/client-build.yml
|
||
secrets: inherit
|
||
with:
|
||
pr: ${{ github.event.client_payload.pull_request.number }}
|
||
skip-tests: ${{ github.event.client_payload.slash_command.args.named.skip-tests }}
|
||
|
||
rts-build:
|
||
name: rts-build
|
||
if: github.event.client_payload.slash_command.args.named.env != 'release'
|
||
uses: ./.github/workflows/rts-build.yml
|
||
secrets: inherit
|
||
with:
|
||
pr: ${{ github.event.client_payload.pull_request.number }}
|
||
skip-tests: ${{ github.event.client_payload.slash_command.args.named.skip-tests }}
|
||
|
||
vercel-build:
|
||
name: vercel-build
|
||
if: github.event.client_payload.slash_command.args.named.env == 'release'
|
||
runs-on: ubuntu-latest
|
||
env:
|
||
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
|
||
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
|
||
|
||
steps:
|
||
- name: Checkout PR
|
||
uses: actions/checkout@v4
|
||
with:
|
||
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
|
||
|
||
- name: Install Vercel CLI
|
||
run: npm install --global vercel@latest
|
||
|
||
- name: Use Node.js
|
||
if: steps.run_result.outputs.run_result != 'success'
|
||
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-
|
||
|
||
- name: Pull Vercel Environment Information
|
||
run: vercel pull --yes --token=${{ secrets.VERCEL_TOKEN }}
|
||
|
||
- name: Build Project Artifacts
|
||
run: vercel build --yes --token=${{ secrets.VERCEL_TOKEN }}
|
||
|
||
- name: Deploy Project Artifacts to Vercel
|
||
run: |
|
||
vercel deploy --prebuilt --token=${{ secrets.VERCEL_TOKEN }} | tee -a ~/run_result.txt
|
||
|
||
- uses: actions/github-script@v7
|
||
with:
|
||
script: |
|
||
const dpUrl = require("fs").readFileSync(process.env.HOME + "/run_result.txt", "utf8")
|
||
const bodyLines = ["Deploy-Preview-URL: " + dpUrl]
|
||
if (context.repo.repo === "appsmith") {
|
||
bodyLines.push(
|
||
"",
|
||
"🚨 *Note*: The release environment runs EE code, so using a frontend-only DP on this repo, will",
|
||
"likely behave unexpectedly. Consider using a full DP instead.",
|
||
"[Learn more](https://notion.so/031b87bce3404e3a95240d4c14c82e46).",
|
||
)
|
||
}
|
||
github.rest.issues.createComment({
|
||
issue_number: context.payload.client_payload.pull_request.number,
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
body: bodyLines.join("\n"),
|
||
})
|
||
|
||
push-image:
|
||
needs: [client-build, rts-build, server-build]
|
||
runs-on: ubuntu-latest
|
||
if: success()
|
||
steps:
|
||
# Check out merge commit
|
||
- name: Checkout PR
|
||
uses: actions/checkout@v4
|
||
with:
|
||
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
|
||
|
||
# Timestamp will be used to create cache key
|
||
- id: timestamp
|
||
run: echo "timestamp=$(date +'%Y-%m-%dT%H:%M:%S')" >> $GITHUB_OUTPUT
|
||
|
||
# get Git-hash will be used to create cache key
|
||
- id: git_hash
|
||
run: echo "git_hash=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
|
||
|
||
- name: Download the client build artifact
|
||
uses: actions/download-artifact@v4
|
||
with:
|
||
name: client-build
|
||
path: app/client
|
||
|
||
- name: Unpack the client build artifact
|
||
if: steps.run_result.outputs.run_result != 'success'
|
||
run: |
|
||
mkdir -p app/client/build
|
||
tar -xvf app/client/build.tar -C app/client/build
|
||
|
||
- 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
|
||
run: |
|
||
if [[ -f scripts/generate_info_json.sh ]]; then
|
||
scripts/generate_info_json.sh
|
||
fi
|
||
|
||
- name: Login to DockerHub
|
||
uses: docker/login-action@v1
|
||
with:
|
||
username: ${{ secrets.DOCKER_HUB_USERNAME }}
|
||
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
|
||
|
||
- name: Set base image tag
|
||
id: set_base_tag
|
||
run: |
|
||
if [[ ${{ github.event.client_payload.pull_request.base.ref }} == 'pg' ]]; then
|
||
base_tag=pg
|
||
else
|
||
base_tag=release
|
||
fi
|
||
echo "base_tag=$base_tag" >> $GITHUB_OUTPUT
|
||
|
||
- name: Push to Docker Hub
|
||
uses: docker/build-push-action@v4
|
||
with:
|
||
context: .
|
||
pull: true
|
||
push: true
|
||
cache-from: ${{ vars.DOCKER_HUB_ORGANIZATION }}/appsmith-${{ vars.EDITION }}:release
|
||
tags: |
|
||
${{ vars.DOCKER_HUB_ORGANIZATION }}/appsmith-dp:${{ vars.EDITION }}-${{ github.event.client_payload.pull_request.number }}
|
||
build-args: |
|
||
APPSMITH_CLOUD_SERVICES_BASE_URL=https://release-cs.appsmith.com
|
||
BASE=${{ vars.DOCKER_HUB_ORGANIZATION }}/base-${{ vars.EDITION }}:${{ steps.set_base_tag.outputs.base_tag }}
|
||
|
||
outputs:
|
||
imageHash: ${{ vars.EDITION }}-${{ github.event.client_payload.pull_request.number }}
|
||
|
||
build-deploy-preview:
|
||
needs: [push-image]
|
||
runs-on: ubuntu-latest
|
||
defaults:
|
||
run:
|
||
working-directory: "."
|
||
|
||
if: success()
|
||
steps:
|
||
- name: Checkout PR
|
||
uses: actions/checkout@v4
|
||
with:
|
||
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
|
||
|
||
- name: Print versions of tools
|
||
run: |
|
||
set -o errexit
|
||
set -o xtrace
|
||
aws --version || true
|
||
kubectl version || true
|
||
helm version || true
|
||
|
||
- name: Install mongosh
|
||
run: |
|
||
curl -fsSL https://pgp.mongodb.com/server-6.0.asc \
|
||
| sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg --dearmor
|
||
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" \
|
||
| sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
|
||
sudo apt-get update
|
||
sudo apt-get install --yes mongodb-mongosh
|
||
echo "MongoSH version: $(mongosh --version)"
|
||
|
||
- name: Install relevant packages
|
||
run: |
|
||
set -o errexit
|
||
# We still need Kubectl v1.23. Once we up the cluster version, we can get rid of this step.
|
||
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.23.6/bin/linux/amd64/kubectl
|
||
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
|
||
kubectl version || true
|
||
|
||
- name: Deploy Helm chart
|
||
env:
|
||
AWS_ROLE_ARN: ${{ secrets.APPSMITH_EKS_AWS_ROLE_ARN }}
|
||
AWS_ACCESS_KEY_ID: ${{ secrets.APPSMITH_CI_AWS_SECRET_ACCESS_KEY_ID }}
|
||
AWS_SECRET_ACCESS_KEY: ${{ secrets.APPSMITH_CI_AWS_SECRET_ACCESS_KEY }}
|
||
IMAGE_HASH: ${{ needs.push-image.outputs.imageHash }}
|
||
AWS_RELEASE_CERT: ${{ secrets.APPSMITH_AWS_RELEASE_CERT_RELEASE }}
|
||
DOCKER_HUB_ORGANIZATION: ${{ vars.DOCKER_HUB_ORGANIZATION }}
|
||
DOCKER_HUB_USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }}
|
||
DOCKER_HUB_ACCESS_TOKEN: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
|
||
PULL_REQUEST_NUMBER: ${{ github.event.client_payload.pull_request.number }}
|
||
RECREATE: ${{ github.event.client_payload.slash_command.args.named.recreate }}
|
||
DB_USERNAME: ${{ secrets.DB_USERNAME }}
|
||
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
|
||
DB_URL: ${{ secrets.DB_URL }}
|
||
DP_EFS_ID: ${{ secrets.APPSMITH_DP_EFS_ID }}
|
||
REDIS_URL: ${{ secrets.APPSMITH_DP_REDIS_URL }}
|
||
run: |
|
||
echo "environment variables set to deploy the image" $IMAGE_HASH
|
||
/bin/bash ./scripts/deploy_preview.sh
|
||
|
||
notify-url:
|
||
needs: [build-deploy-preview]
|
||
runs-on: ubuntu-latest
|
||
if: success()
|
||
steps:
|
||
# This step creates a comment on the PR with a link to this workflow run.
|
||
- name: Add a comment on the PR with link to Deploy-Preview
|
||
uses: peter-evans/create-or-update-comment@v3
|
||
with:
|
||
issue-number: ${{ github.event.client_payload.pull_request.number }}
|
||
body: |
|
||
Deploy-Preview-URL: https://${{ vars.EDITION }}-${{ github.event.client_payload.pull_request.number }}.dp.appsmith.com
|