Skip to content

Removes unrequired file #133

Removes unrequired file

Removes unrequired file #133

name: Lambda Deployment
on:
push:
branches:
- main
paths:
- "terraform/states/environments/aws/my-aws-account/eu-north-1/dev-stockholm-1/lambda/**"
- ".github/workflows/order_retrieval_deployments.yml"
workflow_dispatch:
permissions:
id-token: write
contents: write
defaults:
run:
shell: bash
env:
AWS_REGION: "eu-north-1"
ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }}
ECR_REPO: "order-retrieval"
LAMBDA_FUNCTION_NAME: "order-retrieval"
IMAGE_TAG: "latest"
TG_DIR: "terraform/states/environments/aws/my-aws-account/eu-north-1/dev-stockholm-1/lambda/order-retrieval"
MD5_FILE: "terraform/states/environments/aws/my-aws-account/eu-north-1/dev-stockholm-1/lambda/order-retrieval/lambda_code.md5"
jobs:
deploy:
name: Deploy Order Retrieval
runs-on: ubuntu-latest
steps:
# === SETUP STAGE ===
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Terraform & Terragrunt
run: |
TEMP_DIR=$(mktemp -d)
cd $TEMP_DIR
curl -LO https://releases.hashicorp.com/terraform/1.5.5/terraform_1.5.5_linux_amd64.zip
unzip -o terraform_1.5.5_linux_amd64.zip
curl -LO https://github.com/gruntwork-io/terragrunt/releases/download/v0.45.12/terragrunt_linux_amd64
sudo install -o root -g root -m 0755 terraform /usr/local/bin/terraform
sudo install -o root -g root -m 0755 terragrunt_linux_amd64 /usr/local/bin/terragrunt
cd -
rm -rf $TEMP_DIR
- name: Configure AWS credentials (OIDC)
uses: aws-actions/configure-aws-credentials@v2
with:
role-to-assume: arn:aws:iam::${{ env.ACCOUNT_ID }}:role/aidoc-devops2-ex-github-oidc-auth
aws-region: ${{ env.AWS_REGION }}
- name: Assume `github-actions-workflows` Role
id: assume-role
run: |
CREDENTIALS=$(aws sts assume-role \
--role-arn "arn:aws:iam::${{ env.ACCOUNT_ID }}:role/aidoc-devops2-ex-github-actions-workflows" \
--role-session-name "GitHubActionsSession")
echo "AWS_ACCESS_KEY_ID=$(echo $CREDENTIALS | jq -r '.Credentials.AccessKeyId')" >> $GITHUB_ENV
echo "AWS_SECRET_ACCESS_KEY=$(echo $CREDENTIALS | jq -r '.Credentials.SecretAccessKey')" >> $GITHUB_ENV
echo "AWS_SESSION_TOKEN=$(echo $CREDENTIALS | jq -r '.Credentials.SessionToken')" >> $GITHUB_ENV
# === CODE CHANGE DETECTION ===
- name: Compute MD5 Hash of Lambda Code
id: compute-md5
run: |
NEW_MD5=$(find ${{ env.TG_DIR }}/lambda_source_code -type f -exec md5sum {} + | sort | md5sum | awk '{ print $1 }')
echo "NEW_MD5=${NEW_MD5}" >> $GITHUB_ENV
if [[ -f "${{ env.MD5_FILE }}" ]]; then
OLD_MD5=$(cat "${{ env.MD5_FILE }}")
echo "OLD_MD5=${OLD_MD5}" >> $GITHUB_ENV
else
OLD_MD5="none"
fi
- name: Check if Code Has Changed
id: check-md5
run: |
if [[ "${{ env.NEW_MD5 }}" == "${{ env.OLD_MD5 }}" ]]; then
echo "CODE_CHANGED=false" >> $GITHUB_ENV
else
echo "CODE_CHANGED=true" >> $GITHUB_ENV
fi
# === DOCKER BUILD & PUSH ===
- name: Login to Amazon ECR
if: env.CODE_CHANGED == 'true'
run: |
aws ecr get-login-password --region ${{ env.AWS_REGION }} | \
docker login --username AWS --password-stdin ${{ env.ACCOUNT_ID }}.dkr.ecr.${{ env.AWS_REGION }}.amazonaws.com
- name: Build and Push Docker image
if: env.CODE_CHANGED == 'true'
run: |
docker build -t ${{ env.ECR_REPO }}:${{ env.IMAGE_TAG }} ./${{ env.TG_DIR }}/lambda_source_code
docker tag ${{ env.ECR_REPO }}:${{ env.IMAGE_TAG }} ${{ env.ACCOUNT_ID }}.dkr.ecr.${{ env.AWS_REGION }}.amazonaws.com/${{ env.ECR_REPO }}:${{ env.IMAGE_TAG }}
docker push ${{ env.ACCOUNT_ID }}.dkr.ecr.${{ env.AWS_REGION }}.amazonaws.com/${{ env.ECR_REPO }}:${{ env.IMAGE_TAG }}
- name: Retrieve Latest ECR Image Digest
if: env.CODE_CHANGED == 'true'
id: get-ecr-digest
run: |
IMAGE_DIGEST=$(aws ecr describe-images \
--repository-name ${{ env.ECR_REPO }} \
--region ${{ env.AWS_REGION }} \
--query "sort_by(imageDetails,& imagePushedAt)[-1].imageDigest" \
--output text)
echo "IMAGE_URI=${{ env.ACCOUNT_ID }}.dkr.ecr.${{ env.AWS_REGION }}.amazonaws.com/${{ env.ECR_REPO }}@${IMAGE_DIGEST}" >> $GITHUB_ENV
# === INFRASTRUCTURE UPDATE ===
- name: Configure Git
if: env.CODE_CHANGED == 'true'
run: |
git config --global user.name 'GitHub Actions Bot'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
- name: Save and Push MD5 Hash
if: env.CODE_CHANGED == 'true'
run: |
git fetch origin main
git pull --rebase origin main
mkdir -p $(dirname ${{ env.MD5_FILE }})
echo "${{ env.NEW_MD5 }}" > ${{ env.MD5_FILE }}
if git diff --quiet ${{ env.MD5_FILE }}; then
echo "No changes to MD5 hash, continuing workflow"
exit 0
fi
git add ${{ env.MD5_FILE }}
if ! git diff --cached --quiet; then
git commit -m "chore: update lambda code MD5 hash [skip ci]"
git push origin main || {
git pull --rebase origin main
git push origin main
}
else
echo "No changes to commit, continuing workflow"
fi
- name: Update Terragrunt Configuration
if: env.CODE_CHANGED == 'true'
working-directory: ${{ env.TG_DIR }}
run: |
sed -i "s|image_uri = .*|image_uri = \"${{ env.IMAGE_URI }}\"|" terragrunt.hcl
- name: Apply Terraform Changes with Terragrunt
working-directory: ${{ env.TG_DIR }}
run: |
terragrunt run-all apply --terragrunt-non-interactive --auto-approve --terragrunt-include-external-dependencies