Skip to content

Commit 4a6e4e8

Browse files
committed
fix(ci): harden AWS artifact and production DB workflow
1 parent c0f9bcf commit 4a6e4e8

1 file changed

Lines changed: 37 additions & 23 deletions

File tree

.github/workflows/aws-artifact-db.yml

Lines changed: 37 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -42,26 +42,11 @@ permissions:
4242
actions: read
4343

4444
concurrency:
45-
group: aws-artifact-db-${{ github.ref }}
45+
group: aws-artifact-db-${{ github.ref }}-${{ github.event.inputs.environment || 'production' }}
4646
cancel-in-progress: true
4747

4848
env:
4949
NODE_VERSION: '22'
50-
AWS_REGION: ${{ secrets.AWS_REGION }}
51-
AWS_ROLE_TO_ASSUME: ${{ secrets.AWS_ROLE_TO_ASSUME }}
52-
AWS_ACCESS_KEY_ID_VALUE: ${{ secrets.AWS_ACCESS_KEY_ID }}
53-
AWS_SECRET_ACCESS_KEY_VALUE: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
54-
AWS_S3_ARTIFACT_BUCKET: ${{ secrets.AWS_S3_ARTIFACT_BUCKET }}
55-
AWS_CODEARTIFACT_DOMAIN: ${{ secrets.AWS_CODEARTIFACT_DOMAIN }}
56-
AWS_CODEARTIFACT_DOMAIN_OWNER: ${{ secrets.AWS_CODEARTIFACT_DOMAIN_OWNER }}
57-
AWS_CODEARTIFACT_REPOSITORY: ${{ secrets.AWS_CODEARTIFACT_REPOSITORY }}
58-
DB_TYPE: ${{ secrets.DB_TYPE }}
59-
DB_HOST: ${{ secrets.DB_HOST }}
60-
DB_PORT: ${{ secrets.DB_PORT }}
61-
DB_NAME: ${{ secrets.DB_NAME }}
62-
DB_USER: ${{ secrets.DB_USER }}
63-
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
64-
DB_SSL: ${{ secrets.DB_SSL }}
6550

6651
jobs:
6752
build-test-package:
@@ -100,7 +85,13 @@ jobs:
10085
shell: bash
10186
run: |
10287
set -euo pipefail
103-
PACKAGE_FILE="$(npm pack --silent)"
88+
npm pack --silent > /tmp/npm-pack-output.txt
89+
cat /tmp/npm-pack-output.txt
90+
PACKAGE_FILE="$(grep -E '\.tgz$' /tmp/npm-pack-output.txt | tail -n 1)"
91+
if [ -z "$PACKAGE_FILE" ] || [ ! -f "$PACKAGE_FILE" ]; then
92+
echo "npm pack did not produce a .tgz file" >&2
93+
exit 1
94+
fi
10495
echo "package_file=${PACKAGE_FILE}" >> "$GITHUB_OUTPUT"
10596
mkdir -p dist-artifact
10697
cp "$PACKAGE_FILE" dist-artifact/
@@ -127,11 +118,17 @@ jobs:
127118
name: Database connectivity check
128119
runs-on: ubuntu-latest
129120
needs: build-test-package
121+
environment: ${{ github.event.inputs.environment || 'production' }}
130122
if: ${{ github.event_name == 'push' || github.event.inputs.run_db_check == 'true' }}
123+
env:
124+
DB_TYPE: ${{ secrets.DB_TYPE }}
125+
DB_HOST: ${{ secrets.DB_HOST }}
126+
DB_PORT: ${{ secrets.DB_PORT }}
127+
DB_NAME: ${{ secrets.DB_NAME }}
128+
DB_USER: ${{ secrets.DB_USER }}
129+
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
130+
DB_SSL: ${{ secrets.DB_SSL }}
131131
steps:
132-
- name: Checkout repository
133-
uses: actions/checkout@v4
134-
135132
- name: Setup Node.js ${{ env.NODE_VERSION }}
136133
uses: actions/setup-node@v4
137134
with:
@@ -230,6 +227,15 @@ jobs:
230227
- db-connectivity
231228
if: ${{ always() && needs.build-test-package.result == 'success' && (needs.db-connectivity.result == 'success' || needs.db-connectivity.result == 'skipped') && (github.event_name == 'push' || github.event.inputs.deploy_to_s3 == 'true' || github.event.inputs.publish_codeartifact == 'true') }}
232229
environment: ${{ github.event.inputs.environment || 'production' }}
230+
env:
231+
AWS_REGION: ${{ secrets.AWS_REGION }}
232+
AWS_ROLE_TO_ASSUME: ${{ secrets.AWS_ROLE_TO_ASSUME }}
233+
AWS_ACCESS_KEY_ID_VALUE: ${{ secrets.AWS_ACCESS_KEY_ID }}
234+
AWS_SECRET_ACCESS_KEY_VALUE: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
235+
AWS_S3_ARTIFACT_BUCKET: ${{ secrets.AWS_S3_ARTIFACT_BUCKET }}
236+
AWS_CODEARTIFACT_DOMAIN: ${{ secrets.AWS_CODEARTIFACT_DOMAIN }}
237+
AWS_CODEARTIFACT_DOMAIN_OWNER: ${{ secrets.AWS_CODEARTIFACT_DOMAIN_OWNER }}
238+
AWS_CODEARTIFACT_REPOSITORY: ${{ secrets.AWS_CODEARTIFACT_REPOSITORY }}
233239
steps:
234240
- name: Download GitHub artifact
235241
uses: actions/download-artifact@v4
@@ -252,8 +258,15 @@ jobs:
252258
aws-secret-access-key: ${{ env.AWS_SECRET_ACCESS_KEY_VALUE }}
253259
aws-region: ${{ env.AWS_REGION || 'us-east-1' }}
254260

255-
- name: Verify AWS identity
256-
run: aws sts get-caller-identity
261+
- name: Verify AWS credentials configured
262+
shell: bash
263+
run: |
264+
set -euo pipefail
265+
if [ -z "${AWS_ROLE_TO_ASSUME:-}" ] && { [ -z "${AWS_ACCESS_KEY_ID_VALUE:-}" ] || [ -z "${AWS_SECRET_ACCESS_KEY_VALUE:-}" ]; }; then
266+
echo "AWS push skipped. Missing AWS_ROLE_TO_ASSUME or AWS access-key secrets."
267+
exit 0
268+
fi
269+
aws sts get-caller-identity
257270
258271
- name: Push artifact to S3
259272
if: ${{ env.AWS_S3_ARTIFACT_BUCKET != '' && (github.event_name == 'push' || github.event.inputs.deploy_to_s3 == 'true') }}
@@ -266,7 +279,7 @@ jobs:
266279
echo "Artifacts pushed to s3://${AWS_S3_ARTIFACT_BUCKET}/${PREFIX}/"
267280
268281
- name: Publish package to AWS CodeArtifact
269-
if: ${{ env.AWS_CODEARTIFACT_DOMAIN != '' && env.AWS_CODEARTIFACT_REPOSITORY != '' && (github.event.inputs.publish_codeartifact == 'true') }}
282+
if: ${{ env.AWS_CODEARTIFACT_DOMAIN != '' && env.AWS_CODEARTIFACT_REPOSITORY != '' && github.event.inputs.publish_codeartifact == 'true' }}
270283
shell: bash
271284
run: |
272285
set -euo pipefail
@@ -285,6 +298,7 @@ jobs:
285298
echo "## AWS artifact workflow"
286299
echo "- Commit: $GITHUB_SHA"
287300
echo "- Branch: $GITHUB_REF_NAME"
301+
echo "- Environment: ${{ github.event.inputs.environment || 'production' }}"
288302
echo "- GitHub artifact: sync-db-$GITHUB_SHA"
289303
echo "- S3 bucket: ${AWS_S3_ARTIFACT_BUCKET:-not configured}"
290304
echo "- CodeArtifact domain: ${AWS_CODEARTIFACT_DOMAIN:-not configured}"

0 commit comments

Comments
 (0)