Skip to content

Fix flag

Fix flag #29

name: Production deployment
on:
push:
branches:
- 'main'
permissions:
id-token: write
jobs:
setup:
name: Setup
runs-on: ubuntu-latest
steps:
# Checkout code from repo
- name: Checkout code from main branch
uses: actions/checkout@v4
# Setup Node.js
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18.x'
## Build function
- name: 'Resolve Project Dependencies Using Npm'
shell: bash
run: |
pushd './function'
npm install
npm run build --if-present
npm run test --if-present
rm -r ./dist/**/*.map
cp -r ./host.json ./package.json ./node_modules ./dist
rm -r ./dist/node_modules/@types/
rm -r ./dist/node_modules/typescript/
pushd './dist'
mkdir dist
mv ./src ./dist/
zip -r ../deploy.zip ./*
popd
popd
# Upload build artifact
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: function
path: ./function/deploy.zip
infra:
name: Deploy infrastructure to Azure
runs-on: ubuntu-latest
environment: production
steps:
# Checkout code from repo
- name: Checkout code from main branch
uses: actions/checkout@v4
# Login to Azure
- name: Authenticate to Azure
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- id: date
run: echo " date=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
# Deploy infrastructure
- name: Run ARM deployment
uses: azure/arm-deploy@v2
with:
subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }}
resourceGroupName: ${{ secrets.AZURE_RG_NAME }}
template: ./arm/resources.json
deploymentName: GitHubActions${{ steps.date.outputs.date }}
parameters: environment=PROD
deployFunction:
name: Deploy function to Azure
runs-on: windows-latest
environment: production
needs: [setup, infra]
steps:
# Download build artifact
- name: Download build artifact
uses: actions/download-artifact@v4
with:
name: function
# Login to Azure
- name: Authenticate to Azure
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
# Deploy function
- name: Deploy function
uses: azure/functions-action@v1
id: fa
with:
app-name: ${{ vars.FUNCTION_APP_NAME }}
slot-name: production
package: deploy.zip
deployDocumentation:
name: Deploy documentation site to Azure
runs-on: ubuntu-latest
environment: production
needs: [setup, infra]
steps:
# Checkout code from repo
- name: Checkout code from production branch
uses: actions/checkout@v4
with:
submodules: true
lfs: false
- name: Login to Azure
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Retrieve secrets from Key Vault
uses: azure/CLI@v1
with:
inlineScript: |
algoliaAppId=$(az keyvault secret show --name "ALGOLIA-APP-ID" --vault-name "${{ secrets.AZURE_KV_NAME }}" --query "value" -o tsv)
echo "ALGOLIA_APP_ID="$algoliaAppId >> "$GITHUB_ENV"
algoliaIndexName=$(az keyvault secret show --name "ALGOLIA-INDEX-NAME" --vault-name "${{ secrets.AZURE_KV_NAME }}" --query "value" -o tsv)
echo "ALGOLIA_INDEX_NAME="$algoliaIndexName >> "$GITHUB_ENV"
AlgoliaSearchApiKey=$(az keyvault secret show --name "ALGOLIA-SEARCH-API-KEY" --vault-name "${{ secrets.AZURE_KV_NAME }}" --query "value" -o tsv)
echo "ALGOLIA_SEARCH_API_KEY="$AlgoliaSearchApiKey >> "$GITHUB_ENV"
- name: Build And Deploy
id: builddeploy
uses: Azure/static-web-apps-deploy@v1
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments)
action: "upload"
###### Repository/Build Configurations - These values can be configured to match your app requirements. ######
# For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig
app_location: "/docs" # App source code path
app_build_command: npm run build
api_location: "" # Api source code path - optional
output_location: "build" # Built app content directory - optional
###### End of Repository/Build Configurations ######
env:
ALGOLIA_APP_ID: ${{ env.ALGOLIA_APP_ID }}
ALGOLIA_INDEX_NAME: ${{ env.ALGOLIA_INDEX_NAME }}
ALGOLIA_SEARCH_API_KEY: ${{ env.ALGOLIA_SEARCH_API_KEY }}