Skip to content

Build and Tag

Build and Tag #2

Workflow file for this run

name: Build and Tag
on:
push:
branches: [main]
workflow_dispatch:
env:
REGISTRY: ghcr.io
FRONTEND_IMAGE_NAME: terramino-frontend
BACKEND_IMAGE_NAME: terramino-backend
HCP_CLIENT_ID: ${{ secrets.HCP_CLIENT_ID }}
HCP_CLIENT_SECRET: ${{ secrets.HCP_CLIENT_SECRET }}
HCP_PROJECT_ID: ${{ secrets.HCP_PROJECT_ID }}
HCP_ORGANIZATION_ID: ${{ secrets.HCP_ORGANIZATION_ID }}
AWS_REGION: ${{ secrets.AWS_REGION }}
jobs:
check-files-changed:
name : Check changed files
runs-on: ubuntu-latest
outputs:
build-packer: ${{ steps.check-packer.outputs.changed }}
build-container: ${{ steps.check-app.outputs.changed }}
update-terraform: ${{ steps.check-terraform.changed }}
manual-run: ${{ steps.manual-run.manual }}
steps:
- name: Checkout Repository
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
with:
fetch-depth: 2
- name: Check for Packer changes
id: check-packer
working-directory: .github/scripts
run: ./check_files_changed.sh "shared/** image.pkr.hcl" "${{ github.event_name }}" "${{ github.event.pull_request.base.sha }}" "${{ github.sha }}"
- name: Check for application changes
id: check-app
working-directory: .github/scripts
run: ./check_files_changed.sh "app/**" "${{ github.event_name }}" "${{ github.event.pull_request.base.sha }}" "${{ github.sha }}"
- name: Check for Terraform changes
id: check-terraform
working-directory: .github/scripts
run: ./check_files_changed.sh "*.tf" "${{ github.event_name }}" "${{ github.event.pull_request.base.sha }}" "${{ github.sha }}"
- name: Check for manual run
id: manual-run
#run: echo "manual=${{ github.event_name == 'workflow_dispatch' }}" >> $GITHUB_ENV
run: echo "manual=false" >> $GITHUB_ENV
build-packer:
name: Build AMI
runs-on: ubuntu-latest
needs: check-files-changed
if: ${{ needs.check-files-changed.outputs.build-packer == 'true' || needs.check-files-changed.outputs.manual-run == 'true' }}
steps:
- name: Checkout Repository
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@8c3f20df09ac63af7b3ae3d7c91f105f857d8497 # v4.0.0
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- name: Setup Packer
uses: hashicorp/setup-packer@main
id: setup-packer
- name: Packer Init
run: packer init .
- name: Packer Build
run: PKR_VAR_region="$AWS_REGION" packer build .
- name: Create and set channel
working-directory: .github/scripts
run: ./create_channel_version.sh nomad-consul-vault ${{ github.sha }} production
build-application:
name: Build Terramino images
runs-on: ubuntu-latest
needs: check-files-changed
if: ${{ needs.check-files-changed.outputs.build-container == 'true' || needs.check-files-changed.outputs.manual-run == 'true' }}
permissions:
contents: write
packages: write
steps:
- name: Set Timestamp
id: timestamp
run: echo "TIMESTAMP=$(date +%s)" >> $GITHUB_ENV
- name: Set repository name
id: set-repo
run: echo "REPO=${GITHUB_REPOSITORY@L}" >> "${GITHUB_ENV}"
- name: Checkout repo
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
- name: Log in to GHCR
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
# Frontend image build and push
- name: Build and push frontend image
id: frontend-push
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
with:
context: app/
file: app/Dockerfile.frontend
push: true
tags: ${{ env.REGISTRY }}/${{ env.REPO }}/${{ env.FRONTEND_IMAGE_NAME }}:${{ env.TIMESTAMP }}
- id: get-frontend-build-name
name: Save frontend image path to file
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
imageName=${{ fromJSON(steps.frontend-push.outputs.metadata)['image.name'] }}
echo "$imageName" > latest-frontend.version
# Backend image build and push
- name: Build and push backend image
id: backend-push
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
with:
context: app/
file: app/Dockerfile.backend
push: true
tags: ${{ env.REGISTRY }}/${{ env.REPO }}/${{ env.BACKEND_IMAGE_NAME }}:${{ env.TIMESTAMP }}
- id: get-backend-build-name
name: Save backend image path to file
run: |
imageName=${{ fromJSON(steps.backend-push.outputs.metadata)['image.name'] }}
echo "$imageName" > latest-backend.version
- name: Commit image files to repo
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git config user.name "github-actions"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add latest-frontend.version latest-backend.version
git commit -m "Updated frontend and backend image URIs."
git push
tag-release:
name: Create tag
runs-on: ubuntu-latest
needs: [check-files-changed, build-packer, build-application]
if: ${{ always() && (needs.build-packer.result == 'success' || needs.build-application.result == 'success' || needs.check-files-changed.outputs.update-terraform == 'true' || needs.check-files-changed.outputs.manual-run == 'true' ) }}
permissions:
contents: write
packages: write
steps:
- name: Checkout Repository
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
- name: Bump version and create tag
working-directory: .github/scripts
run: ./bump_and_create_tag.sh