1+ name : Hosting for js-sdk
2+
3+ on :
4+ workflow_dispatch :
5+ inputs :
6+ Environment :
7+ required : true
8+ type : choice
9+ description : Choose env
10+ options :
11+ - dev
12+ - stg
13+ - prd
14+ push :
15+ paths-ignore :
16+ - " **.md"
17+ branches :
18+ - dev
19+ - stg
20+
21+ env :
22+ SERVICE_NAME : siren-js
23+ AWS_REGION : " ap-south-1"
24+
25+ jobs :
26+ prepare-env :
27+ name : Prepare Env
28+ runs-on : " ubuntu-latest"
29+ timeout-minutes : 2
30+ outputs :
31+ AWS_ROLE : ${{ steps.vars.outputs.AWS_ROLE }}
32+ ENV : ${{ steps.vars.outputs.ENV }}
33+ PROJECT_PREFIX : ${{ steps.vars.outputs.PROJECT_PREFIX }}
34+ DISTRIBUTION_ID : ${{ steps.vars.outputs.DISTRIBUTION_ID }}
35+ ENVIRONMENT_BUCKET : ${{ steps.set_env.outputs.ENVIRONMENT_BUCKET }}
36+ STATIC_HOSTING_BUCKET : ${{ steps.set_env.outputs.STATIC_HOSTING_BUCKET }}
37+ SLACK_WEBHOOK_URL : ${{ steps.vars.outputs.SLACK_WEBHOOK_URL }}
38+
39+ steps :
40+ - id : vars
41+ run : |
42+ BRANCH="${GITHUB_REF#refs/heads/}"
43+ ENV=${{ github.event.inputs.environment }}
44+ echo $BRANCH
45+
46+ if [ -z "$ENV" ]
47+ then
48+ case $BRANCH in
49+ "dev")
50+ ENV="dev"
51+ ;;
52+ "stg")
53+ ENV="stg"
54+ ;;
55+ "main")
56+ ENV="prd"
57+ ;;
58+ *)
59+ echo "ENV not configured" && exit 1
60+ ;;
61+ esac
62+ fi
63+ if [[ $ENV == 'prd' && $BRANCH == 'main' ]]
64+ then
65+ echo "AWS_ROLE=PRD_AWS_ROLE" >> $GITHUB_OUTPUT
66+ echo "DISTRIBUTION_ID=PRD_DISTRIBUTION_ID" >> $GITHUB_OUTPUT
67+ echo "PROJECT_PREFIX=sirn-prd-mb" >> $GITHUB_OUTPUT
68+ echo "SLACK_WEBHOOK_URL=PRD_SLACK_WEBHOOK_URL" >> $GITHUB_OUTPUT
69+ elif [ $ENV == 'stg' ]
70+ then
71+ echo "AWS_ROLE=STG_AWS_ROLE" >> $GITHUB_OUTPUT
72+ echo "DISTRIBUTION_ID=STG_DISTRIBUTION_ID" >> $GITHUB_OUTPUT
73+ echo "PROJECT_PREFIX=sirn-stg-mb" >> $GITHUB_OUTPUT
74+ echo "SLACK_WEBHOOK_URL=DEV_SLACK_WEBHOOK_URL" >> $GITHUB_OUTPUT
75+ elif [ $ENV == 'dev' ]
76+ then
77+ echo "AWS_ROLE=DEV_AWS_ROLE" >> $GITHUB_OUTPUT
78+ echo "DISTRIBUTION_ID=DEV_DISTRIBUTION_ID" >> $GITHUB_OUTPUT
79+ echo "PROJECT_PREFIX=sirn-dev-mb" >> $GITHUB_OUTPUT
80+ echo "SLACK_WEBHOOK_URL=DEV_SLACK_WEBHOOK_URL" >> $GITHUB_OUTPUT
81+ else
82+ echo "Branch not configured!"
83+ exit 1
84+ fi
85+ echo "ENV=$ENV" >> $GITHUB_OUTPUT
86+ echo ":rocket: Environment - $ENV " >> $GITHUB_STEP_SUMMARY
87+ - name : set variables
88+ id : set_env
89+ run : |
90+ PROJECT_PREFIX=${{ steps.vars.outputs.PROJECT_PREFIX }}
91+ echo "PROJECT_PREFIX=$PROJECT_PREFIX" >> $GITHUB_OUTPUT
92+ echo "ENVIRONMENT_BUCKET=$PROJECT_PREFIX-s3-environment" >> $GITHUB_OUTPUT
93+ echo "AWS_REGION=ap-southeast-1" >> $GITHUB_OUTPUT
94+ echo "STATIC_HOSTING_BUCKET=$PROJECT_PREFIX-$SERVICE_NAME-website" >> $GITHUB_OUTPUT
95+ echo ":seedling: Branch:${GITHUB_REF#refs/heads/}" >> $GITHUB_STEP_SUMMARY
96+
97+ static-host :
98+ name : Static Hosting
99+ runs-on : " ubuntu-latest"
100+ timeout-minutes : 20
101+ permissions :
102+ id-token : write
103+ pull-requests : write
104+ contents : read
105+ needs : prepare-env
106+ env :
107+ AWS_ROLE : ${{ needs.prepare-env.outputs.AWS_ROLE }}
108+ ENV : ${{ needs.prepare-env.outputs.ENV }}
109+ PROJECT_PREFIX : ${{needs.prepare-env.outputs.PROJECT_PREFIX}}
110+ ENVIRONMENT_BUCKET : ${{needs.prepare-env.outputs.ENVIRONMENT_BUCKET}}
111+ STATIC_HOSTING_BUCKET : ${{needs.prepare-env.outputs.STATIC_HOSTING_BUCKET}}
112+ DISTRIBUTION_ID : ${{needs.prepare-env.outputs.DISTRIBUTION_ID}}
113+
114+ steps :
115+ - name : " Checkout repository"
116+ uses : actions/checkout@v4
117+
118+ - name : Configure AWS credentials
119+ uses : aws-actions/configure-aws-credentials@v4
120+ with :
121+ role-to-assume : ${{ secrets[env.AWS_ROLE] }}
122+ aws-region : ${{ env.AWS_REGION }}
123+
124+ # - name: Sync S3 environment
125+ # id: sync-env
126+ # run: |
127+ # aws s3 cp s3://${ENVIRONMENT_BUCKET}/${SERVICE_NAME}/${ENV}.env ./.env
128+
129+ - uses : actions/setup-node@v3
130+ with :
131+ node-version : 18
132+
133+ - name : Run Npm Command
134+ run : |
135+ npm install
136+ npm run build
137+
138+ - name : Sync S3 files
139+ id : sync-js
140+ run : |
141+ ls
142+ aws s3 cp ./dist/umd/ s3://${STATIC_HOSTING_BUCKET}/ --recursive
143+
144+ - name : Invalidate CloudFront
145+ 146+ env :
147+ DISTRIBUTION : ${{ secrets[env.DISTRIBUTION_ID] }}
148+ PATHS : " /*"
149+ AWS_REGION : ${{ env.AWS_REGION }}
150+
151+
152+
153+ # ## slack alert
154+
155+ slack-notification :
156+ name : Slack Notification
157+ if : always()
158+ runs-on : ' ubuntu-latest'
159+ needs :
160+ - prepare-env
161+ - static-host
162+ env :
163+ SLACK_WEBHOOK_URL : ${{needs.prepare-env.outputs.SLACK_WEBHOOK_URL}}
164+ steps :
165+ - uses : technote-space/workflow-conclusion-action@v3
166+ - name : Update slack message body
167+ id : body
168+ run : |
169+ if [ '${{ env.WORKFLOW_CONCLUSION }}' == 'success' ]
170+ then
171+ echo "::set-output name=SLACK_MESSAGE::Success :white_check_mark:"
172+ elif [ '${{ env.WORKFLOW_CONCLUSION }}' == 'failure' ]
173+ then
174+ echo "::set-output name=SLACK_MESSAGE::Failed :x:"
175+ elif [ '${{ env.WORKFLOW_CONCLUSION }}' == 'cancelled' ]
176+ then
177+ echo "::set-output name=SLACK_MESSAGE::Cancelled :grey_exclamation:"
178+ fi
179+ - name : Slack Notification
180+ uses : rtCamp/action-slack-notify@v2
181+ env :
182+ SLACK_COLOR : ${{ env.WORKFLOW_CONCLUSION }} # or a specific color like 'good' or '#ff00ff'
183+ SLACK_ICON : https://w7.pngwing.com/pngs/464/659/png-transparent-devops-computer-icons-agile-software-development-others-miscellaneous-text-orange-thumbnail.png
184+ SLACK_MESSAGE : ${{ steps.body.outputs.SLACK_MESSAGE }}
185+ SLACK_TITLE : Build Status
186+ SLACK_FOOTER : ' <${{ github.server_url }}/${{ github.repository }}|${{ github.repository }}>'
187+ SLACK_USERNAME : Siren-alerts
188+ SLACK_WEBHOOK : ${{ secrets[env.SLACK_WEBHOOK_URL] }}
0 commit comments