name: "Build and Push Lambda Image to ECR" description: "Reusable action for building and pushing lambda Docker image to ECR" inputs: lambda_name: description: "Lambda name / ECR repo name" required: true dockerfile_path: description: "Path to Dockerfile" required: true ecr_tf_dir: description: "Path to ECR terraform directory" required: true lambda_tf_dir: description: "Path to Lambda terraform directory" required: true aws-access-key-id: description: "AWS access key" required: true aws-secret-access-key: description: "AWS secret key" required: true aws-region: description: "AWS region" required: true git-sha: description: "Git commit SHA" required: true git-ref: description: "Git ref name" required: true runs: using: "composite" steps: - uses: actions/checkout@v4 - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: aws-access-key-id: ${{ inputs.aws-access-key-id }} aws-secret-access-key: ${{ inputs.aws-secret-access-key }} aws-region: ${{ inputs.aws-region }} - name: Log in to Amazon ECR id: login-ecr uses: aws-actions/amazon-ecr-login@v2 - name: Deploy ECR uses: ./.github/workflows/actions/terraform-deploy with: working_directory: ${{ inputs.ecr_tf_dir }} aws-access-key-id: ${{ inputs.aws-access-key-id }} aws-secret-access-key: ${{ inputs.aws-secret-access-key }} aws-region: ${{ inputs.aws-region }} - name: Set Docker image tag id: set_tag shell: bash run: | SHORT_SHA=$(echo "${{ inputs.git-sha }}" | cut -c1-7) BRANCH=$(echo "${{ inputs.git-ref }}" | tr '/' '-') TAG="${BRANCH}-${SHORT_SHA}" echo "IMAGE_TAG=${TAG}" >> $GITHUB_ENV echo "tag=$TAG" >> $GITHUB_OUTPUT - name: Build and push Docker image shell: bash run: | IMAGE_URI=${{ steps.login-ecr.outputs.registry }}/${{ inputs.lambda_name }}:${{ steps.set_tag.outputs.tag }} echo "Building Docker image for ${{ inputs.lambda_name }}..." docker build -t $IMAGE_URI -f ${{ inputs.dockerfile_path }} . echo "Pushing to ECR..." docker push $IMAGE_URI - name: Deploy Lambda uses: ./.github/workflows/actions/terraform-deploy with: working_directory: ${{ inputs.lambda_tf_dir }} aws-access-key-id: ${{ inputs.aws-access-key-id }} aws-secret-access-key: ${{ inputs.aws-secret-access-key }} aws-region: ${{ inputs.aws-region }} lambda-image-tag: ${{ steps.set_tag.outputs.tag }}