Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
116 changes: 116 additions & 0 deletions .github/workflows/deploy-prod-aws.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
# Copyright 2026 EPAM Systems
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: Deploy to prod (AWS S3)
env:
AWS_S3_BUCKET_NAME : rpp-landing-prod
AWS_REGION_NAME : eu-central-1
BUILD_DIR : public/
CONTACT_US_URL: https://testio.my.salesforce-sites.com/leadcapture/services/apexrest/leadservice
DOCUMENTATION_URL: /docs
GTM_ID: GTM-MK7ZHTL
CONTENTFUL_ENV_ID: master
CONTENTFUL_HOST: cdn.contentful.com
GATSBY_MAILCHIMP_LIST_ID: ca6d0eec5b

on:
push:
branches:
- master
paths-ignore:
- README.md
schedule:
- cron: "0 21 24 11 *"
- cron: "0 21 14 1 *"
- cron: "30 0 * * *"
workflow_dispatch:

permissions:
id-token: write
contents: read

jobs:
empty-s3-bucket:
runs-on: ubuntu-latest
environment: production
steps:
- name: Configure AWS credentials (OIDC)
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: ${{ env.AWS_REGION_NAME }}

- name: Empty AWS S3 bucket (keep docs/ folder)
run: aws s3 rm s3://${{ env.AWS_S3_BUCKET_NAME }} --recursive --exclude "docs/*"

deploy:
runs-on: ubuntu-latest
needs: [empty-s3-bucket]
environment: production
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 18

- name: Install of node dependencies
run: npm install

- name: create env file
run: |
touch .env.production
echo CONTENTFUL_ACCESS_TOKEN=${{ secrets.CONTENTFUL_ACCESS_TOKEN }} >> .env.production
echo CONTENTFUL_SPACE_ID=${{ secrets.CONTENTFUL_SPACE_ID }} >> .env.production
echo CONTENTFUL_ENV_ID=${{ env.CONTENTFUL_ENV_ID }} >> .env.production
echo CONTENTFUL_HOST=${{ env.CONTENTFUL_HOST }} >> .env.production
echo GTM_ID=${{ env.GTM_ID }} >> .env.production
echo CONTACT_US_URL=${{ env.CONTACT_US_URL }} >> .env.production
echo DOCUMENTATION_URL=${{ env.DOCUMENTATION_URL }} >> .env.production
echo GATSBY_MAILCHIMP_LIST_ID=${{ env.GATSBY_MAILCHIMP_LIST_ID }} >> .env.production
echo RECAPTCHA_SITE_KEY=${{ secrets.RECAPTCHA_SITE_KEY }} >> .env.production

- name: Build the source code
run: npm run build

- name: Configure AWS credentials (OIDC)
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: ${{ env.AWS_REGION_NAME }}

- name: Deploy to AWS S3
run: aws s3 sync ./${{ env.BUILD_DIR }} s3://${{ env.AWS_S3_BUCKET_NAME }} --exclude "docs/*"

- name: Trigger Amplify redeploy
run: |
aws s3 sync s3://${{ env.AWS_S3_BUCKET_NAME }} /tmp/full-site

DEPLOY_RESULT=$(aws amplify create-deployment \
--app-id ${{ secrets.AWS_AMPLIFY_APP_ID }} \
--branch-name main)

JOB_ID=$(echo "$DEPLOY_RESULT" | jq -r '.jobId')
ZIP_URL=$(echo "$DEPLOY_RESULT" | jq -r '.zipUploadUrl')

cd /tmp/full-site
zip -r /tmp/deploy.zip .

curl --fail -T /tmp/deploy.zip "$ZIP_URL"

aws amplify start-deployment \
--app-id ${{ secrets.AWS_AMPLIFY_APP_ID }} \
--branch-name main \
--job-id "$JOB_ID"