Merge pull request #59 from andreciornavei/develop #55
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: BnbBankCI | |
on: | |
push: | |
branches: | |
- staging | |
- production | |
jobs: | |
# deploy-api: | |
# name: deploy-api | |
# runs-on: ubuntu-latest | |
# steps: | |
# # This step checks out a copy of your repository. | |
# - name: Checkout code | |
# uses: actions/checkout@v3 | |
# - name: Get branch names | |
# id: branch-names | |
# uses: tj-actions/branch-names@v8 | |
# # This step sets up Node.js environment. | |
# - name: Setup Node.js | |
# uses: actions/setup-node@v3 | |
# if: success() | |
# # This step installs the Serverless Framework globally. | |
# - name: Install Serverless Framework | |
# run: | | |
# cd backend | |
# npm install -g serverless serverless-prune-plugin serverless-iam-roles-per-function | |
# if: success() | |
# # This step sets up PHP environment with the specified version. | |
# - name: Setup PHP | |
# uses: shivammathur/setup-php@v2 | |
# with: | |
# php-version: "8.2" | |
# if: success() | |
# # This step installs Composer dependencies with the specified options. | |
# - name: Install Composer dependencies | |
# run: | | |
# cd backend | |
# composer install --prefer-dist --optimize-autoloader --no-dev | |
# if: success() | |
# # This step deploys your application to AWS Lambda using the Serverless Framework. | |
# - name: Deploy to AWS Lambda | |
# run: | | |
# cd backend | |
# echo "APP_KEY=${{ vars.APP_KEY }}" >> .env | |
# echo "APP_NAME=${{ vars.SUBDOMAIN }}" >> .env | |
# echo "SUBDOMAIN=${{ vars.SUBDOMAIN }}" >> .env | |
# echo "DOMAIN=${{ vars.DOMAIN }}" >> .env | |
# echo "DB_URI=${{ secrets.DB_URI }}" >> .env | |
# echo "JWT_SECRET=${{ secrets.JWT_SECRET }}" >> .env | |
# echo "AWS_HOSTED_ZONE_ID=${{ vars.AWS_HOSTED_ZONE_ID }}" >> .env | |
# echo "AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY_ID }}" >> .env | |
# echo "AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_ACCESS_KEY }}" >> .env | |
# serverless deploy --config serverless.yml --stage ${{ steps.branch-names.outputs.current_branch }} --region ${{ vars.AWS_DEFAULT_REGION }} --verbose | |
# if: success() | |
deploy-web: | |
name: deploy-web | |
runs-on: ubuntu-latest | |
steps: | |
# This step checks out a copy of your repository. | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Get branch names | |
id: branch-names | |
uses: tj-actions/branch-names@v8 | |
# This step sets up Node.js environment. | |
- name: Setup Node.js | |
uses: actions/setup-node@v3 | |
if: success() | |
# This step installs the Serverless Framework globally. | |
- name: Install Serverless Framework | |
run: | | |
cd frontend | |
npm install -g serverless serverless-dotenv-plugin serverless-export-outputs fast-xml-parser | |
if: success() | |
# This step expose variables to environment | |
- name: Expose required environment variables | |
run: | | |
echo "BRANCH=${{ steps.branch-names.outputs.current_branch }}" >> $GITHUB_ENV | |
echo "DOMAIN=${{ vars.DOMAIN }}" >> $GITHUB_ENV | |
echo "APP_NAME=${{ vars.SUBDOMAIN }}-web" >> $GITHUB_ENV | |
echo "SUBDOMAIN=${{ vars.SUBDOMAIN }}" >> $GITHUB_ENV | |
echo "AWS_HOSTED_ZONE_ID=${{ vars.AWS_HOSTED_ZONE_ID }}" >> $GITHUB_ENV | |
echo "AWS_DEFAULT_REGION=${{ vars.AWS_DEFAULT_REGION }}" >> $GITHUB_ENV | |
echo "AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY_ID }}" >> $GITHUB_ENV | |
echo "AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_ACCESS_KEY }}" >> $GITHUB_ENV | |
if: success() | |
# This step build reactjs application to be deployed. | |
- name: Build ReactJS application | |
run: | | |
cd frontend | |
rm -rf .env | |
echo "REACT_APP_API_URL=https://${SUBDOMAIN}-api.$([ "${BRANCH}" != "production" ] && echo "${BRANCH}.")${DOMAIN}" >> .env | |
cat .env | |
yarn --dev --production=false | |
yarn build | |
if: success() | |
# This step deploys the application resources to AWS using the Serverless Framework. | |
- name: Deploy resources to AWS with Serverless Framework | |
run: | | |
cd frontend | |
rm -rf .env | |
echo "DOMAIN=${DOMAIN}" >> .env | |
echo "AWS_HOSTED_ZONE_ID=${AWS_HOSTED_ZONE_ID}" >> .env | |
cat .env | |
serverless deploy --config serverless-cert.yml --stage ${BRANCH} --region us-east-1 --verbose | |
SLS_WEBCERT_OUTPUT=$(cat sls-webcert-output.json) | |
$(echo "${SLS_WEBCERT_OUTPUT}" | jq -r 'keys[] as $k | "export \($k)=\(.[$k])"') | |
echo "AWS_ACM_ARN=${CertificateDomainArn}" >> .env | |
serverless deploy --config serverless.yml --stage ${BRANCH} --region ${AWS_DEFAULT_REGION} --verbose | |
if: success() | |
# This step deploys your application to AWS Lambda using the Serverless Framework. | |
- name: Release application aws s3 and invalidate cloud formation cache | |
run: | | |
S3_DOMAIN="$APP_NAME.$([ "${BRANCH}" != "production" ] && echo "${BRANCH}.")${DOMAIN}" | |
echo "S3_DOMAIN=${S3_DOMAIN}" | |
ls -R frontend/build/ | |
aws s3 sync frontend/build/ s3://${S3_DOMAIN} | |
SLS_OUTPUT=$(cat sls-output.json) | |
$(echo "${SLS_OUTPUT}" | jq -r 'keys[] as $k | "export \($k)=\(.[$k])"') | |
aws cloudfront create-invalidation --distribution-id ${CDNDistributionId} --paths "/*" | |
if: success() |