Skip to content

Commit bbba8ae

Browse files
committed
fix: Improve BUILD_SHA detection and add debug logging
1 parent 6fa5dbd commit bbba8ae

File tree

3 files changed

+49
-10
lines changed

3 files changed

+49
-10
lines changed

.github/workflows/aws-backend-deploy.yml

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,16 @@ jobs:
3030
ref: ${{ github.event.inputs.ref }}
3131
- name: Set AWS Env & Image Tag per workflow
3232
run: |
33-
SHORT_SHA=$(git rev-parse --short HEAD)
3433
if [[ "$GITHUB_EVENT_NAME" == "workflow_dispatch" ]]; then
3534
INPUT_ENV=${{ github.event.inputs.env }}; INPUT_REF=${{ github.event.inputs.ref }}
3635
echo AWS_APPENV="$AWS_APP_NAME"-$INPUT_ENV >> $GITHUB_ENV
37-
echo IMAGE_TAG=$SHORT_SHA >> $GITHUB_ENV
36+
echo IMAGE_TAG=$(git rev-parse --short HEAD) >> $GITHUB_ENV
37+
echo BUILD_SHA=$(git rev-parse --short HEAD) >> $GITHUB_ENV
3838
fi
3939
outputs:
4040
AWS_APPENV: ${{ env.AWS_APPENV }}
4141
IMAGE_TAG: ${{ env.IMAGE_TAG }}
42+
BUILD_SHA: ${{ env.BUILD_SHA }}
4243
build:
4344
name: Build & Push Docker Image
4445
runs-on: ubuntu-latest
@@ -59,18 +60,30 @@ jobs:
5960
uses: aws-actions/amazon-ecr-login@v2
6061
- name: Set up Docker Buildx
6162
uses: docker/setup-buildx-action@v3
63+
- name: Debug Build Variables
64+
env:
65+
BUILD_SHA: ${{ needs.setup_env.outputs.BUILD_SHA }}
66+
IMAGE_TAG: ${{ needs.setup_env.outputs.IMAGE_TAG }}
67+
run: |
68+
echo "=== Build Debug Information ==="
69+
echo "BUILD_SHA: $BUILD_SHA"
70+
echo "IMAGE_TAG: $IMAGE_TAG"
71+
echo "DOCKERFILE: ${{ env.DOCKERFILE }}"
72+
echo "DOCKER_PATH: ${{ env.DOCKER_PATH }}"
73+
echo "================================"
6274
- name: Build & Push Image to ECR
6375
env:
6476
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
6577
ECR_REPOSITORY: ${{ needs.setup_env.outputs.AWS_APPENV }}
6678
IMAGE_TAG: ${{ needs.setup_env.outputs.IMAGE_TAG }}
79+
BUILD_SHA: ${{ needs.setup_env.outputs.BUILD_SHA }}
6780
run: |
6881
docker buildx build \
6982
--platform linux/amd64 \
7083
--cache-from type=gha \
7184
--cache-to type=gha,mode=max \
7285
--push \
73-
--build-arg BUILD_SHA=$IMAGE_TAG \
86+
--build-arg BUILD_SHA=$BUILD_SHA \
7487
-f ${{ env.DOCKERFILE }} \
7588
-t $ECR_REGISTRY/$ECR_REPOSITORY:latest \
7689
-t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG \

backend/Dockerfile.prod

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@ RUN yarn install --pure-lockfile
77
COPY . .
88

99
FROM node:18.12.0-slim AS api-production
10+
ARG BUILD_SHA
1011
EXPOSE 4000
11-
USER node
1212
WORKDIR /srv/backend
1313
COPY --from=api-builder /srv/backend/node_modules ./node_modules
1414
COPY . .
1515
ENV BUILD_SHA=${BUILD_SHA}
16+
RUN echo "${BUILD_SHA:-unknown}" > BUILD_INFO
17+
USER node
1618
CMD ["npm", "run", "start"]

backend/controllers/healthCheck.controller.js

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,41 @@
11
const { execSync } = require('child_process');
2+
const fs = require('fs');
23

34
const HealthCheckController = {};
45

56
function getBuildInfo() {
7+
// Method 1: BUILD_SHA environment variable (from Docker build arg) - PRIORITY
8+
if (
9+
process.env.BUILD_SHA &&
10+
process.env.BUILD_SHA !== 'undefined' &&
11+
process.env.BUILD_SHA !== ''
12+
) {
13+
return process.env.BUILD_SHA;
14+
}
15+
16+
// Method 2: Check BUILD_INFO file (created during Docker build)
617
try {
7-
// Try to get git info from the container
8-
const gitSha = execSync('git rev-parse --short HEAD 2>/dev/null || echo "unknown"', {
9-
encoding: 'utf8',
10-
}).trim();
11-
return gitSha;
18+
if (fs.existsSync('/srv/backend/BUILD_INFO')) {
19+
const buildInfo = fs.readFileSync('/srv/backend/BUILD_INFO', 'utf8').trim();
20+
if (buildInfo && buildInfo !== 'unknown' && buildInfo !== '') {
21+
return buildInfo;
22+
}
23+
}
1224
} catch {
13-
return process.env.BUILD_SHA || 'unknown';
25+
// BUILD_INFO file not available
1426
}
27+
28+
// Method 3: Try git command (for local development)
29+
try {
30+
const gitSha = execSync('git rev-parse --short HEAD 2>/dev/null', { encoding: 'utf8' }).trim();
31+
if (gitSha && gitSha !== '' && gitSha !== 'unknown') {
32+
return gitSha;
33+
}
34+
} catch {
35+
// Git not available
36+
}
37+
38+
return 'unknown';
1539
}
1640

1741
HealthCheckController.isAlive = (_, res) => {

0 commit comments

Comments
 (0)