From 6c3d49c72c113b9c310dfaeaa13824f38447b17d Mon Sep 17 00:00:00 2001 From: Ayush8923 <80516839+Ayush8923@users.noreply.github.com> Date: Tue, 17 Mar 2026 12:25:04 +0530 Subject: [PATCH 1/6] feat(*): automation deployment for staging and prod --- .github/workflows/cd-production.yml | 45 +++++++++++++++++++++++++++++ .github/workflows/cd-staging.yml | 45 +++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 .github/workflows/cd-production.yml create mode 100644 .github/workflows/cd-staging.yml diff --git a/.github/workflows/cd-production.yml b/.github/workflows/cd-production.yml new file mode 100644 index 0000000..4ac6134 --- /dev/null +++ b/.github/workflows/cd-production.yml @@ -0,0 +1,45 @@ +name: Deploy Kaapi to EC2 Production + +on: + push: + branches: + - release + +jobs: + deploy: + name: Deploy Kaapi Frontend to EC2 Production + runs-on: ubuntu-latest + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Deploy via SSH + uses: appleboy/ssh-action@v1.0.3 + env: + SCRIPT_NAME: ${{ secrets.PM2_APP_NAME }} + with: + host: ${{ secrets.EC2_HOST }} + username: ${{ secrets.EC2_USER }} + key: ${{ secrets.EC2_SSH_KEY }} + script_stop: true + script: | + set -e + + echo "===== Navigating to Project Directory =====" + cd ${{ secrets.PROJECT_PATH }} + + echo "===== Fetch Latest Code =====" + git pull origin release + + echo "===== Stop Running Application =====" + pm2 stop "$SCRIPT_NAME" || true + + echo "===== Install Dependencies =====" + npm ci + + echo "===== Build Application =====" + npm run build + + echo "===== Start Application =====" + pm2 start "$SCRIPT_NAME" || pm2 start npm --name "$SCRIPT_NAME" -- start diff --git a/.github/workflows/cd-staging.yml b/.github/workflows/cd-staging.yml new file mode 100644 index 0000000..cbb0dc1 --- /dev/null +++ b/.github/workflows/cd-staging.yml @@ -0,0 +1,45 @@ +name: Deploy Kaapi to EC2 Staging + +on: + push: + branches: + - main + +jobs: + deploy: + name: Deploy Kaapi Frontend to EC2 Staging + runs-on: ubuntu-latest + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Deploy via SSH + uses: appleboy/ssh-action@v1.0.3 + env: + SCRIPT_NAME: ${{ secrets.PM2_APP_NAME }} + with: + host: ${{ secrets.EC2_HOST }} + username: ${{ secrets.EC2_USER }} + key: ${{ secrets.EC2_SSH_KEY }} + script_stop: true + script: | + set -e + + echo "===== Navigating to Project Directory =====" + cd ${{ secrets.PROJECT_PATH }} + + echo "===== Fetch Latest Code =====" + git pull origin main + + echo "===== Stop Running Application =====" + pm2 stop "$SCRIPT_NAME" || true + + echo "===== Install Dependencies =====" + npm ci + + echo "===== Build Application =====" + npm run build + + echo "===== Start Application =====" + pm2 start "$SCRIPT_NAME" From 725f60fc09de676947a3f7a9a3fdcc7ccce74039 Mon Sep 17 00:00:00 2001 From: Ayush8923 <80516839+Ayush8923@users.noreply.github.com> Date: Tue, 17 Mar 2026 12:32:49 +0530 Subject: [PATCH 2/6] chore: refine log separators in deployment script --- .github/workflows/cd-production.yml | 14 +++++++------- .github/workflows/cd-staging.yml | 12 ++++++------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/cd-production.yml b/.github/workflows/cd-production.yml index 4ac6134..6082030 100644 --- a/.github/workflows/cd-production.yml +++ b/.github/workflows/cd-production.yml @@ -26,20 +26,20 @@ jobs: script: | set -e - echo "===== Navigating to Project Directory =====" + echo "=== Navigating to Project Directory ===" cd ${{ secrets.PROJECT_PATH }} - echo "===== Fetch Latest Code =====" + echo "=== Fetch Latest Code ===" git pull origin release - echo "===== Stop Running Application =====" + echo "=== Stop Running Application ===" pm2 stop "$SCRIPT_NAME" || true - echo "===== Install Dependencies =====" + echo "=== Install Dependencies ===" npm ci - echo "===== Build Application =====" + echo "=== Build Application ===" npm run build - echo "===== Start Application =====" - pm2 start "$SCRIPT_NAME" || pm2 start npm --name "$SCRIPT_NAME" -- start + echo "=== Start Application ===" + pm2 start "$SCRIPT_NAME" diff --git a/.github/workflows/cd-staging.yml b/.github/workflows/cd-staging.yml index cbb0dc1..6e1a1ed 100644 --- a/.github/workflows/cd-staging.yml +++ b/.github/workflows/cd-staging.yml @@ -26,20 +26,20 @@ jobs: script: | set -e - echo "===== Navigating to Project Directory =====" + echo "=== Navigating to Project Directory ===" cd ${{ secrets.PROJECT_PATH }} - echo "===== Fetch Latest Code =====" + echo "=== Fetch Latest Code ===" git pull origin main - echo "===== Stop Running Application =====" + echo "=== Stop Running Application ===" pm2 stop "$SCRIPT_NAME" || true - echo "===== Install Dependencies =====" + echo "=== Install Dependencies ===" npm ci - echo "===== Build Application =====" + echo "=== Build Application ===" npm run build - echo "===== Start Application =====" + echo "=== Start Application ===" pm2 start "$SCRIPT_NAME" From ff4167b2210a442f0df9a9eddfb43c380775f9e0 Mon Sep 17 00:00:00 2001 From: Ayush8923 <80516839+Ayush8923@users.noreply.github.com> Date: Tue, 17 Mar 2026 17:38:40 +0530 Subject: [PATCH 3/6] fix(*): added the environment name in deployment pipeline --- .github/workflows/cd-production.yml | 1 + .github/workflows/cd-staging.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/cd-production.yml b/.github/workflows/cd-production.yml index 6082030..43d3953 100644 --- a/.github/workflows/cd-production.yml +++ b/.github/workflows/cd-production.yml @@ -9,6 +9,7 @@ jobs: deploy: name: Deploy Kaapi Frontend to EC2 Production runs-on: ubuntu-latest + environment: AWS_PRODUCTION_ENV steps: - name: Checkout Repository diff --git a/.github/workflows/cd-staging.yml b/.github/workflows/cd-staging.yml index 6e1a1ed..7a71765 100644 --- a/.github/workflows/cd-staging.yml +++ b/.github/workflows/cd-staging.yml @@ -9,6 +9,7 @@ jobs: deploy: name: Deploy Kaapi Frontend to EC2 Staging runs-on: ubuntu-latest + environment: AWS_STAGING_ENV steps: - name: Checkout Repository From 8d7991711cd9bf3669fb4cdc26e6211f508c640b Mon Sep 17 00:00:00 2001 From: Ayush8923 <80516839+Ayush8923@users.noreply.github.com> Date: Tue, 17 Mar 2026 17:53:55 +0530 Subject: [PATCH 4/6] fix(*): update naming convention --- .github/workflows/cd-production.yml | 9 +++++---- .github/workflows/cd-staging.yml | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/.github/workflows/cd-production.yml b/.github/workflows/cd-production.yml index 43d3953..089801c 100644 --- a/.github/workflows/cd-production.yml +++ b/.github/workflows/cd-production.yml @@ -18,7 +18,8 @@ jobs: - name: Deploy via SSH uses: appleboy/ssh-action@v1.0.3 env: - SCRIPT_NAME: ${{ secrets.PM2_APP_NAME }} + PM2_APP_NAME: ${{ secrets.PM2_APP_NAME }} + BUILD_DIRECTORY: ${{ secrets.BUILD_DIRECTORY }} with: host: ${{ secrets.EC2_HOST }} username: ${{ secrets.EC2_USER }} @@ -28,13 +29,13 @@ jobs: set -e echo "=== Navigating to Project Directory ===" - cd ${{ secrets.PROJECT_PATH }} + cd $BUILD_DIRECTORY echo "=== Fetch Latest Code ===" git pull origin release echo "=== Stop Running Application ===" - pm2 stop "$SCRIPT_NAME" || true + pm2 stop "$PM2_APP_NAME" || true echo "=== Install Dependencies ===" npm ci @@ -43,4 +44,4 @@ jobs: npm run build echo "=== Start Application ===" - pm2 start "$SCRIPT_NAME" + pm2 start "$PM2_APP_NAME" diff --git a/.github/workflows/cd-staging.yml b/.github/workflows/cd-staging.yml index 7a71765..b06eb2f 100644 --- a/.github/workflows/cd-staging.yml +++ b/.github/workflows/cd-staging.yml @@ -18,7 +18,8 @@ jobs: - name: Deploy via SSH uses: appleboy/ssh-action@v1.0.3 env: - SCRIPT_NAME: ${{ secrets.PM2_APP_NAME }} + PM2_APP_NAME: ${{ secrets.PM2_APP_NAME }} + BUILD_DIRECTORY: ${{ secrets.BUILD_DIRECTORY }} with: host: ${{ secrets.EC2_HOST }} username: ${{ secrets.EC2_USER }} @@ -28,13 +29,13 @@ jobs: set -e echo "=== Navigating to Project Directory ===" - cd ${{ secrets.PROJECT_PATH }} + cd $BUILD_DIRECTORY echo "=== Fetch Latest Code ===" git pull origin main echo "=== Stop Running Application ===" - pm2 stop "$SCRIPT_NAME" || true + pm2 stop "$PM2_APP_NAME" || true echo "=== Install Dependencies ===" npm ci @@ -43,4 +44,4 @@ jobs: npm run build echo "=== Start Application ===" - pm2 start "$SCRIPT_NAME" + pm2 start "$PM2_APP_NAME" From e8ca6ee6b8c6487676a4e92eb82418fdab3c3a32 Mon Sep 17 00:00:00 2001 From: Prajna1999 Date: Wed, 18 Mar 2026 14:46:26 +0530 Subject: [PATCH 5/6] feat: testing CD on branch --- .github/workflows/cd-staging.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cd-staging.yml b/.github/workflows/cd-staging.yml index b06eb2f..8dc9b9d 100644 --- a/.github/workflows/cd-staging.yml +++ b/.github/workflows/cd-staging.yml @@ -3,7 +3,7 @@ name: Deploy Kaapi to EC2 Staging on: push: branches: - - main + - feat/frontend-cicd-deployment jobs: deploy: From c1eb2e5d290e1a86df00ab3d5a245af1e1ff99a6 Mon Sep 17 00:00:00 2001 From: Ayush8923 <80516839+Ayush8923@users.noreply.github.com> Date: Fri, 20 Mar 2026 18:09:33 +0530 Subject: [PATCH 6/6] fix(*): update the readme and prduction deployment also --- .github/workflows/cd-production.yml | 4 ++-- README.md | 17 ++++++++++++----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/.github/workflows/cd-production.yml b/.github/workflows/cd-production.yml index 089801c..7e63353 100644 --- a/.github/workflows/cd-production.yml +++ b/.github/workflows/cd-production.yml @@ -2,8 +2,8 @@ name: Deploy Kaapi to EC2 Production on: push: - branches: - - release + tags: + - "v*" # Deploy only when tags like v1.0.0, v2.1.0, etc., are created jobs: deploy: diff --git a/README.md b/README.md index e4b76fc..9876298 100644 --- a/README.md +++ b/README.md @@ -106,20 +106,27 @@ Deployments are automated via a GitHub Actions CD pipeline that SSHes into the E ### Branch Strategy -| Branch | Environment | -| --------- | ----------- | -| `main` | Staging | -| `release` | Production | +| Trigger | Environment | +| ------------------------------------- | ----------- | +| Push to `main` | Staging | +| Tag matching `v*.*.*` (e.g. `v1.0.0`) | Production | ### Pipeline Steps -On every push to `main` or `release`, the pipeline automatically: +**Staging** — on every push to `main`, the pipeline automatically: 1. SSHes into the EC2 instance 2. Runs `git pull` to fetch the latest code 3. Runs `npm run build` to create an optimized production build 4. Restarts the server to apply the new build +**Production** — on every version tag (e.g. `v1.0.0`, `v2.1.0`), the pipeline automatically: + +1. SSHes into the EC2 instance +2. Runs `git fetch --tags` and checks out the tag +3. Runs `npm run build` to create an optimized production build +4. Restarts the server to apply the new build + --- ## Learn More