15
15
required : true
16
16
type : string
17
17
description : Provide tag (Eg:v3.14.0)
18
-
18
+ permissions :
19
+ id-token : write
20
+ contents : write
21
+ packages : read
22
+ actions : read
19
23
env :
20
- SERVICE_NAME : conductor-server
24
+ SERVICE_NAME : conductor
21
25
AWS_REGION : " ap-south-1"
22
-
26
+ HELM_CHART_NAME : " application-helm-chart "
23
27
24
28
jobs :
25
29
prepare-env :
26
30
name : Prepare Env
27
- runs-on : ' ubuntu-latest'
31
+ runs-on : " ubuntu-latest"
28
32
timeout-minutes : 2
29
33
outputs :
30
34
AWS_ROLE : ${{ steps.vars.outputs.AWS_ROLE }}
31
35
ENV : ${{ steps.vars.outputs.ENV }}
32
36
PROJECT_PREFIX : ${{ steps.vars.outputs.PROJECT_PREFIX }}
33
- ECS_CLUSTER : ${{ steps.set_env.outputs.ECS_CLUSTER }}
34
- ECS_SERVICE : ${{ steps.set_env.outputs.ECS_SERVICE }}
35
- TASK_DEFINITION : ${{ steps.set_env.outputs.TASK_DEFINITION }}
36
- CONTAINER_NAME : ${{ steps.set_env.outputs.CONTAINER_NAME }}
37
+ K8S_CLUSTER : ${{ steps.vars.outputs.K8S_CLUSTER }}
37
38
ECR_REPOSITORY : ${{ steps.set_env.outputs.ECR_REPOSITORY }}
39
+ ENVIRONMENT_BUCKET : ${{ steps.set_env.outputs.ENVIRONMENT_BUCKET }}
38
40
SLACK_WEBHOOK_URL : ${{ steps.vars.outputs.SLACK_WEBHOOK_URL }}
39
-
41
+ AWS_ACCOUNT_ID : ${{ steps.vars.outputs.AWS_ACCOUNT_ID}}
42
+
40
43
steps :
41
44
- id : vars
42
45
shell : bash
45
48
ENV=${{ github.event.inputs.environment }}
46
49
IMAGE_TAG=${{ github.event.inputs.tag }}
47
50
echo $BRANCH
48
-
51
+
49
52
if [ -z "$ENV" ]
50
53
then
51
54
case $BRANCH in
@@ -67,17 +70,23 @@ jobs:
67
70
then
68
71
echo "AWS_ROLE=PRD_AWS_ROLE" >> $GITHUB_OUTPUT
69
72
echo "PROJECT_PREFIX=sirn-prd-mb" >> $GITHUB_OUTPUT
70
- echo "SLACK_WEBHOOK_URL=PRD_SLACK_WEBHOOK_URL" >> $GITHUB_OUTPUT
73
+ echo "SLACK_WEBHOOK_URL=PRD_SLACK_WEBHOOK_URL" >> $GITHUB_OUTPUT
74
+ echo "AWS_ACCOUNT_ID=PRD_AWS_ACCOUNT_ID" >> $GITHUB_OUTPUT
75
+ echo "K8S_CLUSTER=sirn-prd-mb-prime" >> $GITHUB_OUTPUT
71
76
elif [ $ENV == 'stg' ]
72
77
then
73
78
echo "AWS_ROLE=STG_AWS_ROLE" >> $GITHUB_OUTPUT
74
79
echo "PROJECT_PREFIX=sirn-stg-mb" >> $GITHUB_OUTPUT
75
- echo "SLACK_WEBHOOK_URL=DEV_SLACK_WEBHOOK_URL" >> $GITHUB_OUTPUT
80
+ echo "SLACK_WEBHOOK_URL=DEV_SLACK_WEBHOOK_URL" >> $GITHUB_OUTPUT
81
+ echo "AWS_ACCOUNT_ID=NON_PRD_AWS_ACCOUNT_ID" >> $GITHUB_OUTPUT
82
+ echo "K8S_CLUSTER=sirn-dev-mb-prime" >> $GITHUB_OUTPUT
76
83
elif [ $ENV == 'dev' ]
77
84
then
78
85
echo "AWS_ROLE=DEV_AWS_ROLE" >> $GITHUB_OUTPUT
79
86
echo "PROJECT_PREFIX=sirn-dev-mb" >> $GITHUB_OUTPUT
80
87
echo "SLACK_WEBHOOK_URL=DEV_SLACK_WEBHOOK_URL" >> $GITHUB_OUTPUT
88
+ echo "AWS_ACCOUNT_ID=NON_PRD_AWS_ACCOUNT_ID" >> $GITHUB_OUTPUT
89
+ echo "K8S_CLUSTER=sirn-dev-mb-prime" >> $GITHUB_OUTPUT
81
90
else
82
91
echo "Branch not configured!"
83
92
exit 1
@@ -89,68 +98,65 @@ jobs:
89
98
id : set_env
90
99
run : |
91
100
PROJECT_PREFIX=${{ steps.vars.outputs.PROJECT_PREFIX }}
92
- echo "ECR_REPOSITORY=$PROJECT_PREFIX-ecr-$SERVICE_NAME" >> $GITHUB_OUTPUT
93
- echo "ECS_CLUSTER=$PROJECT_PREFIX-ecs-cluster" >> $GITHUB_OUTPUT
94
- echo "ECS_SERVICE=$PROJECT_PREFIX-svc-$SERVICE_NAME" >> $GITHUB_OUTPUT
95
- echo "TASK_DEFINITION=$PROJECT_PREFIX-td-$SERVICE_NAME" >> $GITHUB_OUTPUT
96
- echo "CONTAINER_NAME=$PROJECT_PREFIX-cntr-$SERVICE_NAME" >> $GITHUB_OUTPUT
101
+ echo "ENVIRONMENT_BUCKET=$PROJECT_PREFIX-s3-environment" >> $GITHUB_OUTPUT
97
102
echo ":seedling: Branch:${GITHUB_REF#refs/heads/}" >> $GITHUB_STEP_SUMMARY
98
-
103
+ echo "ECR_REPOSITORY=$PROJECT_PREFIX-ecr-conductor-server" >> $GITHUB_OUTPUT
104
+
99
105
# Deploy Conductor UI Image to ECS
100
- deploy-server-image :
101
- name : Deploy Server Image
102
- runs-on : ' ubuntu-latest'
103
- timeout-minutes : 20
106
+ deploy-to-k8s :
107
+ name : Deploy to k8s
108
+ runs-on : ubuntu-latest
109
+ container :
110
+ image : public.ecr.aws/kvsiren-dev/pipeline/helm-deploy:latest
111
+ timeout-minutes : 15
104
112
permissions :
105
113
id-token : write
106
114
pull-requests : write
107
115
contents : read
108
- needs : prepare-env
116
+ needs :
117
+ - prepare-env
109
118
env :
110
- AWS_ROLE : ${{ needs.prepare-env.outputs.AWS_ROLE }}
111
- ENV : ${{ needs.prepare-env.outputs.ENV }}
112
- PROJECT_PREFIX : ${{needs.prepare-env.outputs.PROJECT_PREFIX}}
113
- ECR_REPOSITORY : ${{needs.prepare-env.outputs.ECR_REPOSITORY}}
114
- IMAGE_TAG : ${{ github.event.inputs.tag }}
115
- ECS_CLUSTER : ${{ needs.prepare-env.outputs.ECS_CLUSTER }}
116
- ECS_SERVICE : ${{ needs.prepare-env.outputs.ECS_SERVICE }}
117
- TASK_DEFINITION : ${{ needs.prepare-env.outputs.TASK_DEFINITION }}
118
- CONTAINER_NAME : ${{ needs.prepare-env.outputs.CONTAINER_NAME }}
119
-
119
+ AWS_ACCOUNT_ID : ${{ needs.prepare-env.outputs.AWS_ACCOUNT_ID }}
120
+ ECR_REPOSITORY : ${{ needs.prepare-env.outputs.ECR_REPOSITORY }}
120
121
steps :
121
122
- name : Checkout code from action
122
123
uses : actions/checkout@v2
123
124
125
+ - name : Checkout values.yaml from siren-infra
126
+ uses : actions/checkout@v4
127
+ with :
128
+ repository : KeyvalueSoftwareSystems/siren-infra
129
+ ref : main
130
+ token : ${{secrets.SIREN_PAT}}
131
+ sparse-checkout : |
132
+ k8s/siren-services/${{ env.SERVICE_NAME }}/${{ needs.prepare-env.outputs.ENV }}-values.yaml
133
+ sparse-checkout-cone-mode : false
134
+
135
+ - name : Rename values.yaml for Helm
136
+ shell : bash
137
+ run : |
138
+ cp k8s/siren-services/${{ env.SERVICE_NAME }}/${{ needs.prepare-env.outputs.ENV }}-values.yaml ./values.yaml
139
+ cat ./values.yaml
140
+
124
141
- name : Configure AWS credentials
125
142
uses : aws-actions/configure-aws-credentials@v4
126
143
with :
127
- role-to-assume : ${{ secrets [env.AWS_ROLE ] }}
144
+ role-to-assume : arn:aws:iam:: ${{ vars [env.AWS_ACCOUNT_ID ] }}:role/github-actions
128
145
aws-region : ${{ env.AWS_REGION }}
129
146
130
- - name : Amazon ECR Login
131
- id : login-ecr
132
- uses : aws-actions/amazon-ecr-login@v1.7.0
147
+ - name : Deploy to Kubernetes
148
+ shell : bash
149
+ run : |
150
+ aws eks update-kubeconfig --name ${{ needs.prepare-env.outputs.K8S_CLUSTER }}
151
+ aws ecr get-login-password --region ${{ env.AWS_REGION }} | helm registry login --username AWS --password-stdin ${{ vars[env.AWS_ACCOUNT_ID] }}.dkr.ecr.${{ env.AWS_REGION }}.amazonaws.com
133
152
134
- - name : Check if image tag exists in ECR
135
- id : check-image-existence
136
- run : |
137
- if aws ecr describe-images --repository-name "${{ env.ECR_REPOSITORY }}" --region "${{ env.AWS_REGION }}" --image-ids imageTag="${{ env.IMAGE_TAG }}" 2>&1 | grep -q "imageTag"; then
138
- echo "Image tag $IMAGE_TAG exists in ECR"
139
- else
140
- echo "Error: Image tag $IMAGE_TAG does not exist in ECR"
141
- exit 1
142
- fi
153
+ # Construct base Helm command
154
+ HELM_CMD="helm upgrade --install ${{ env.SERVICE_NAME }} oci://${{ vars[env.AWS_ACCOUNT_ID] }}.dkr.ecr.${{ env.AWS_REGION }}.amazonaws.com/${{ env.HELM_CHART_NAME }} \
155
+ --namespace ${{ needs.prepare-env.outputs.ENV }} \
156
+ --values values.yaml \
157
+ --set default.image.repository='${{ vars[env.AWS_ACCOUNT_ID] }}.dkr.ecr.${{ env.AWS_REGION }}.amazonaws.com/${{ env.ECR_REPOSITORY }}' \
158
+ --set default.image.tag='${{ github.event.inputs.tag }}'"
143
159
144
- - name : Deploy backend
145
- id : deploy_backend
146
- uses : ./.github/actions/deploy-ecs
147
- env :
148
- APP_IMAGE : ${{ steps.login-ecr.outputs.registry }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}
149
- with :
150
- aws-region : ${{ env.AWS_REGION }}
151
- aws-role : ${{ secrets[env.AWS_ROLE] }}
152
- task-definition : ${{ env.TASK_DEFINITION }}
153
- container-name : ${{ env.CONTAINER_NAME }}
154
- ecs-service : ${{ env.ECS_SERVICE }}
155
- ecs-cluster : ${{ env.ECS_CLUSTER }}
156
- image : ${{ env.APP_IMAGE }}
160
+ # Run the Helm command
161
+ echo "Running: $HELM_CMD"
162
+ eval $HELM_CMD
0 commit comments