Build & Deploy #290
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build & Deploy | |
on: | |
workflow_dispatch: | |
push: | |
tags: | |
- 'v[0-9]+.[0-9]+.[0-9]+' | |
paths: | |
- "app/**.*" | |
- "public/**.*" | |
- "package.json" | |
- "package-lock.json" | |
- "next.config.json" | |
- "tailwind.config.json" | |
- "postcss.config.json" | |
- "tsconfig.json" | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
NODE_VERSION: "20" | |
AZURE_WEBAPP_NAME: "ct-aoai-gpt-chat-demo" | |
AZURE_WEBAPP_PACKAGE_PATH: "." | |
AZURE_WEBAPP_PUBLISH_PROFILE: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }} | |
AZURE_OPENAI_BASE_PATH: ${{ secrets.AZURE_OPENAI_BASE_PATH }}} | |
AZURE_OPENAI_API_KEY: ${{ secrets.AZURE_OPENAI_API_KEY }} | |
AZURE_OPENAI_MODEL_DEPLOYMENT: ${{ secrets.AZURE_OPENAI_MODEL_DEPLOYMENT }} | |
AZURE_OPENAI_GPT35_DEPLOYMENT: ${{ secrets.AZURE_OPENAI_GPT35_DEPLOYMENT }} | |
AZURE_OPENAI_API_VERSION: ${{ secrets.AZURE_OPENAI_API_VERSION }} | |
MS_TEAMS_WEBHOOK_URL: ${{ secrets.MS_TEAMS_WEBHOOK_URL }} | |
APP_DISPLAY_NAME: "GPT Chat Demo" | |
jobs: | |
build-and-deploy: | |
environment: | |
name: 'production' | |
url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: 📤 Notify Teams | |
uses: mikesprague/teams-incoming-webhook-action@v1 | |
with: | |
github-token: ${{ github.token }} | |
webhook-url: ${{ env.MS_TEAMS_WEBHOOK_URL }} | |
deploy-card: true | |
title: ${{ env.APP_DISPLAY_NAME }} Deployment Started | |
color: info | |
- name: 👷 Checkout Repo | |
uses: actions/checkout@v4 | |
- name: 🏗️ Setup Node.js ${{ env.NODE_VERSION }} environment | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
check-latest: true | |
- name: ⚡ Cache node_modules and .next folder | |
id: cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.npm | |
${{ github.workspace }}/node_modules | |
${{ github.workspace }}/.next/cache | |
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }} | |
restore-keys: | | |
${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}- | |
- name: ⬆️ Install dependencies | |
if: steps.cache.outputs.cache-hit != 'true' | |
shell: bash | |
run: npm install --force | |
- name: 🛠️ Build app | |
shell: bash | |
run: npm run build | |
- name: 📦 Zip all files for deployment step | |
# IMPORTANT: .next is a hidden folder and will NOT be included in the zip unless we specify it | |
run: zip ${{ env.AZURE_WEBAPP_NAME}}.zip ./* .next -qr | |
- name: 🚀 Deploy to Azure App Service | |
id: deploy-to-webapp | |
uses: azure/webapps-deploy@v3 | |
with: | |
app-name: ${{ env.AZURE_WEBAPP_NAME }} | |
publish-profile: ${{ env.AZURE_WEBAPP_PUBLISH_PROFILE }} | |
package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/${{ env.AZURE_WEBAPP_NAME}}.zip | |
type: zip | |
- name: ⚠️ Cancelled Notification | |
if: ${{ cancelled() }} | |
uses: mikesprague/teams-incoming-webhook-action@v1 | |
with: | |
github-token: ${{ github.token }} | |
webhook-url: ${{ env.MS_TEAMS_WEBHOOK_URL }} | |
deploy-card: true | |
title: ${{ env.APP_DISPLAY_NAME }} Deployment Cancelled | |
color: warning | |
- name: ⛔ Failure Notification | |
if: ${{ failure() }} | |
uses: mikesprague/teams-incoming-webhook-action@v1 | |
with: | |
github-token: ${{ github.token }} | |
webhook-url: ${{ env.MS_TEAMS_WEBHOOK_URL }} | |
deploy-card: true | |
title: ${{ env.APP_DISPLAY_NAME }} Deployment Failed | |
color: failure | |
- name: 🎉 Success Notification | |
if: ${{ success() }} | |
uses: mikesprague/teams-incoming-webhook-action@v1 | |
with: | |
github-token: ${{ github.token }} | |
webhook-url: ${{ env.MS_TEAMS_WEBHOOK_URL }} | |
deploy-card: true | |
title: ${{ env.APP_DISPLAY_NAME }} Deployment Successful | |
color: success |