3030 - name : Enable Corepack for Yarn 3
3131 run : corepack enable
3232
33+ - name : Prepare Yarn version
34+ run : corepack prepare yarn@3.3.1 --activate
35+
3336 - name : Check Yarn version
3437 run : yarn --version
3538
7376 - name : Enable Corepack for Yarn 3
7477 run : corepack enable
7578
79+ - name : Prepare Yarn version
80+ run : corepack prepare yarn@3.3.1 --activate
81+
7682 - name : Check Yarn version
7783 run : yarn --version
7884
@@ -103,6 +109,8 @@ jobs:
103109 REGISTRY : 679752396206.dkr.ecr.${{ matrix.environment.region }}.amazonaws.com
104110 POLLER_REPOSITORY : mark-poller
105111 POLLER_IMAGE_TAG : mark-poller-${{ github.sha }}
112+ HANDLER_REPOSITORY : mark-handler
113+ HANDLER_IMAGE_TAG : mark-handler-${{ github.sha }}
106114 ADMIN_REPOSITORY : mark-admin
107115 ADMIN_IMAGE_TAG : mark-admin-${{ github.sha }}
108116 permissions :
@@ -126,16 +134,35 @@ jobs:
126134 with :
127135 mask-password : ' true'
128136
137+ - name : Ensure ECR repositories exist
138+ run : |
139+ aws ecr describe-repositories --repository-names $ADMIN_REPOSITORY --region $AWS_REGION || \
140+ aws ecr create-repository --repository-name $ADMIN_REPOSITORY --region $AWS_REGION --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
141+ aws ecr describe-repositories --repository-names $HANDLER_REPOSITORY --region $AWS_REGION || \
142+ aws ecr create-repository --repository-name $HANDLER_REPOSITORY --region $AWS_REGION --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
143+ aws ecr describe-repositories --repository-names $POLLER_REPOSITORY --region $AWS_REGION || \
144+ aws ecr create-repository --repository-name $POLLER_REPOSITORY --region $AWS_REGION --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
145+
129146 - name : Build and push Admin Docker image
130147 run : |
131- docker build -f docker/admin/Dockerfile -t $REGISTRY/$ADMIN_REPOSITORY:$ADMIN_IMAGE_TAG .
148+ docker build --provenance=false --sbom=false - f docker/admin/Dockerfile -t $REGISTRY/$ADMIN_REPOSITORY:$ADMIN_IMAGE_TAG .
132149 docker push $REGISTRY/$ADMIN_REPOSITORY:$ADMIN_IMAGE_TAG
133150
134151 - name : Build and push Poller Docker image
135152 run : |
136- docker build -f docker/poller/Dockerfile -t $REGISTRY/$POLLER_REPOSITORY:$POLLER_IMAGE_TAG .
153+ docker build --provenance=false --sbom=false - f docker/poller/Dockerfile -t $REGISTRY/$POLLER_REPOSITORY:$POLLER_IMAGE_TAG .
137154 docker push $REGISTRY/$POLLER_REPOSITORY:$POLLER_IMAGE_TAG
138155
156+ - name : Build and push Invoice Handler Docker image
157+ run : |
158+ docker build -f docker/handler/Dockerfile -t $REGISTRY/$HANDLER_REPOSITORY:$HANDLER_IMAGE_TAG .
159+ docker push $REGISTRY/$HANDLER_REPOSITORY:$HANDLER_IMAGE_TAG
160+
161+ # Remove the main poller Lambda before deploying the invoice handler (prevents duplicate intent creation)
162+ - name : Remove Main Poller Lambda Function
163+ run : |
164+ bash ops/scripts/remove-poller-lambda.sh ${{ matrix.environment.name }} mainnet prod $AWS_REGION
165+
139166 - name : Use Node.js
140167 uses : actions/setup-node@v4
141168 with :
@@ -178,6 +205,7 @@ jobs:
178205 AWS_PROFILE : aws-deployer-connext
179206 run : |
180207 terraform apply \
208+ -var "handler_image_uri=${REGISTRY}/${HANDLER_REPOSITORY}:${HANDLER_IMAGE_TAG}" \
181209 -var "image_uri=${REGISTRY}/${POLLER_REPOSITORY}:${POLLER_IMAGE_TAG}" \
182210 -var "admin_image_uri=${REGISTRY}/${ADMIN_REPOSITORY}:${ADMIN_IMAGE_TAG}" \
183211 -auto-approve > /dev/null 2>&1
@@ -189,6 +217,23 @@ jobs:
189217 echo "Admin API Endpoint URL for ${{ matrix.environment.name }}:"
190218 terraform output -raw admin_api_endpoint
191219
220+ - name : Show Invoice Handler URL
221+ if : success()
222+ working-directory : ${{ matrix.environment.terraform_dir }}
223+ run : |
224+ echo "Invoice Handler URL for ${{ matrix.environment.name }}:"
225+ terraform output -raw invoice_handler_url
226+
227+ - name : Post-Deploy Health Check
228+ if : success()
229+ uses : ./.github/actions/post-deploy-health-check
230+ with :
231+ aws-region : ${{ matrix.environment.region }}
232+ ecs-cluster : ${{ matrix.environment.name }}-ecs-mainnet-prod
233+ services : " ${{ matrix.environment.name }}-web3signer-mainnet-prod,${{ matrix.environment.name }}-fillservice-web3signer-mainnet-prod,${{ matrix.environment.name }}-handler-mainnet-prod,${{ matrix.environment.name }}-prometheus-mainnet-prod,${{ matrix.environment.name }}-pushgateway-mainnet-prod"
234+ aws-access-key-id : ${{ secrets.DEPLOYER_AWS_ACCESS_KEY_ID }}
235+ aws-secret-access-key : ${{ secrets.DEPLOYER_AWS_SECRET_ACCESS_KEY }}
236+
192237 # Staging deployment (mason) - triggered on staging branch
193238 build-and-deploy-staging :
194239 if : github.ref == 'refs/heads/staging'
@@ -198,6 +243,8 @@ jobs:
198243 REGISTRY : 679752396206.dkr.ecr.sa-east-1.amazonaws.com
199244 POLLER_REPOSITORY : mark-poller
200245 POLLER_IMAGE_TAG : mark-poller-${{ github.sha }}
246+ HANDLER_REPOSITORY : mark-handler
247+ HANDLER_IMAGE_TAG : mark-handler-${{ github.sha }}
201248 ADMIN_REPOSITORY : mark-admin
202249 ADMIN_IMAGE_TAG : mark-admin-${{ github.sha }}
203250 permissions :
@@ -221,16 +268,43 @@ jobs:
221268 with :
222269 mask-password : ' true'
223270
271+ - name : Ensure ECR repositories exist
272+ run : |
273+ # Create repositories if they don't exist
274+ aws ecr describe-repositories --repository-names $ADMIN_REPOSITORY --region $AWS_REGION || \
275+ aws ecr create-repository --repository-name $ADMIN_REPOSITORY --region $AWS_REGION --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
276+ aws ecr describe-repositories --repository-names $HANDLER_REPOSITORY --region $AWS_REGION || \
277+ aws ecr create-repository --repository-name $HANDLER_REPOSITORY --region $AWS_REGION --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
278+ aws ecr describe-repositories --repository-names $POLLER_REPOSITORY --region $AWS_REGION || \
279+ aws ecr create-repository --repository-name $POLLER_REPOSITORY --region $AWS_REGION --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
280+
224281 - name : Build and push Admin Docker image
225282 run : |
226- docker build -f docker/admin/Dockerfile -t $REGISTRY/$ADMIN_REPOSITORY:$ADMIN_IMAGE_TAG .
283+ docker build --provenance=false --sbom=false - f docker/admin/Dockerfile -t $REGISTRY/$ADMIN_REPOSITORY:$ADMIN_IMAGE_TAG .
227284 docker push $REGISTRY/$ADMIN_REPOSITORY:$ADMIN_IMAGE_TAG
228285
286+ - name : Build and push Invoice Handler Docker image
287+ run : |
288+ docker build -f docker/handler/Dockerfile -t $REGISTRY/$HANDLER_REPOSITORY:$HANDLER_IMAGE_TAG .
289+ docker push $REGISTRY/$HANDLER_REPOSITORY:$HANDLER_IMAGE_TAG
290+
229291 - name : Build and push Poller Docker image
230292 run : |
231- docker build -f docker/poller/Dockerfile -t $REGISTRY/$POLLER_REPOSITORY:$POLLER_IMAGE_TAG .
293+ docker build --provenance=false --sbom=false - f docker/poller/Dockerfile -t $REGISTRY/$POLLER_REPOSITORY:$POLLER_IMAGE_TAG .
232294 docker push $REGISTRY/$POLLER_REPOSITORY:$POLLER_IMAGE_TAG
233295
296+ # ============================================================================
297+ # POLLER REMOVAL - TEMPORARY
298+ # ============================================================================
299+ # Remove only the main poller Lambda function (mark_poller) before deploying the invoice
300+ # handler to prevent duplicate intent creation. Other poller Lambdas remain active.
301+ #
302+ # TODO: Remove this step once poller migration is complete
303+ # ============================================================================
304+ - name : Remove Main Poller Lambda Function
305+ run : |
306+ bash ops/scripts/remove-poller-lambda.sh mason mainnet staging $AWS_REGION
307+
234308 - name : Use Node.js
235309 uses : actions/setup-node@v4
236310 with :
@@ -273,6 +347,7 @@ jobs:
273347 AWS_PROFILE : aws-deployer-connext
274348 run : |
275349 terraform apply \
350+ -var "handler_image_uri=${REGISTRY}/${HANDLER_REPOSITORY}:${HANDLER_IMAGE_TAG}" \
276351 -var "image_uri=${REGISTRY}/${POLLER_REPOSITORY}:${POLLER_IMAGE_TAG}" \
277352 -var "admin_image_uri=${REGISTRY}/${ADMIN_REPOSITORY}:${ADMIN_IMAGE_TAG}" \
278353 -auto-approve > /dev/null 2>&1
@@ -283,3 +358,20 @@ jobs:
283358 run : |
284359 echo "Admin API Endpoint URL for mason (staging):"
285360 terraform output -raw admin_api_endpoint
361+
362+ - name : Show Invoice Handler URL
363+ if : success()
364+ working-directory : ./ops/mainnet/mason
365+ run : |
366+ echo "Invoice Handler URL for mason (staging):"
367+ terraform output -raw invoice_handler_url
368+
369+ - name : Post-Deploy Health Check
370+ if : success()
371+ uses : ./.github/actions/post-deploy-health-check
372+ with :
373+ aws-region : sa-east-1
374+ ecs-cluster : mason-ecs-mainnet-staging
375+ services : " mason-web3signer-mainnet-staging,mason-fillservice-web3signer-mainnet-staging,mason-handler-mainnet-staging,mason-prometheus-mainnet-staging,mason-pushgateway-mainnet-staging"
376+ aws-access-key-id : ${{ secrets.DEPLOYER_AWS_ACCESS_KEY_ID }}
377+ aws-secret-access-key : ${{ secrets.DEPLOYER_AWS_SECRET_ACCESS_KEY }}
0 commit comments