Skip to content

feat: env var refactor - deploy env #20

feat: env var refactor - deploy env

feat: env var refactor - deploy env #20

name: Build and deploy container app to Azure Web App
on:
push:
branches:
- main
workflow_dispatch:
# Variables and secrets will need to be set in the repository settings.
env:
# Static variables
NODE_VERSION: '20'
NX_APP_NAME: 'msal-react-demo'
# Dynamic variables
AZURE_APPSERVICE_APP_NAME: ${{ vars.AZURE_APPSERVICE_APP_NAME }}
AZURE_APPSERVICE_SLOT_NAME: ${{ vars.AZURE_APPSERVICE_SLOT_NAME }}
AZURE_B2C_AUTHORITY: ${{ vars.AZURE_B2C_AUTHORITY }}
AZURE_B2C_FLOW_EDIT_PROFILE: ${{ vars.AZURE_B2C_FLOW_EDIT_PROFILE }}
AZURE_B2C_FLOW_FORGOT_PASSWORD: ${{ vars.AZURE_B2C_FLOW_FORGOT_PASSWORD }}
AZURE_B2C_FLOW_SIGN_UP_SIGN_IN: ${{ vars.AZURE_B2C_FLOW_SIGN_UP_SIGN_IN }}
# Secrets - values won't be shown in the logs
AZURE_APPSERVICE_PUBLISHPROFILE: ${{ secrets.AZURE_APPSERVICE_PUBLISHPROFILE }}
AZURE_B2C_CLIENT_ID: ${{ secrets.AZURE_B2C_CLIENT_ID }}
AZURE_B2C_REDIRECT_URI: ${{ secrets.AZURE_B2C_REDIRECT_URI }}
AZURE_B2C_TENANT_ID: ${{ secrets.AZURE_B2C_TENANT_ID }}
DOCKERHUB_REPO: ${{ secrets.DOCKERHUB_REPO }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
jobs:
check_commit:
runs-on: ubuntu-latest
outputs:
should_skip: ${{ steps.skip_check.outputs.should_skip }}
steps:
- uses: actions/checkout@v4
- name: Determine if build should be skipped
id: skip_check
run: |
echo "Checking if the commit should skip the build and deploy process..."
if echo "${{ github.event.head_commit.message }}" | grep -E '^(docs|chore):'; then
echo "##[set-output name=should_skip;]true"
else
echo "##[set-output name=should_skip;]false"
fi
build:
runs-on: 'ubuntu-latest'
needs: check_commit
if: needs.check_commit.outputs.should_skip == 'false'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build Nx Next.js app
run: npx nx build ${{ env.NX_APP_NAME }}
- name: Show directory structure
run: tree -a -L 3 -d ./apps ./libs
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Log in to registry
uses: docker/login-action@v3
with:
username: ${{ env.DOCKERHUB_USERNAME }}
password: ${{ env.DOCKERHUB_TOKEN }}
- name: Build and push container image to registry
uses: docker/build-push-action@v5
with:
push: true
tags: index.docker.io/${{ env.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_REPO}}:${{ github.sha }}
context: .
build-args: |
AZURE_B2C_AUTHORITY: ${{ env.AZURE_B2C_AUTHORITY }}
AZURE_B2C_CLIENT_ID: ${{ env.AZURE_B2C_CLIENT_ID }}
AZURE_B2C_FLOW_EDIT_PROFILE: ${{ env.AZURE_B2C_FLOW_EDIT_PROFILE }}
AZURE_B2C_FLOW_FORGOT_PASSWORD: ${{ env.AZURE_B2C_FLOW_FORGOT_PASSWORD }}
AZURE_B2C_FLOW_SIGN_UP_SIGN_IN: ${{ env.AZURE_B2C_FLOW_SIGN_UP_SIGN_IN }}
AZURE_B2C_REDIRECT_URI: ${{ env.AZURE_B2C_REDIRECT_URI }}
AZURE_B2C_TENANT_ID: ${{ env.AZURE_B2C_TENANT_ID }}
NODE_VERSION: ${{ env.NODE_VERSION }}
deploy:
runs-on: ubuntu-latest
needs: build
if: needs.check_commit.outputs.should_skip == 'false'
environment:
name: production
url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
steps:
- name: Deploy to Azure Web App
id: deploy-to-webapp
uses: azure/webapps-deploy@v2
with:
app-name: ${{ env.AZURE_APPSERVICE_APP_NAME }}
slot-name: ${{ env.AZURE_APPSERVICE_SLOT_NAME }}
publish-profile: ${{ env.AZURE_APPSERVICE_PUBLISHPROFILE }}
images: 'index.docker.io/${{ env.DOCKER_IMAGE_NAME }}:${{ github.sha }}'