Skip to content

Update main_product-docs-prod.yml #30

Update main_product-docs-prod.yml

Update main_product-docs-prod.yml #30

name: Build and deploy Docusaurus site to Azure Blob Storage
on:
push:
branches:
- main
- develop # Add your development branch here
workflow_dispatch:
inputs:
environment:
description: 'Environment to deploy to'
required: true
default: 'development'
type: choice
options:
- development
- production
jobs:
determine-environment:
runs-on: ubuntu-latest
outputs:
environment: ${{ steps.set-env.outputs.environment }}
steps:
- name: Determine environment
id: set-env
run: |
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
echo "environment=${{ github.event.inputs.environment }}" >> $GITHUB_OUTPUT
elif [[ "${{ github.ref }}" == "refs/heads/main" ]]; then
echo "environment=production" >> $GITHUB_OUTPUT
else
echo "environment=development" >> $GITHUB_OUTPUT
fi
build:
runs-on: self-hosted
needs: determine-environment
environment: ${{ needs.determine-environment.outputs.environment }}
permissions:
contents: read
steps:
- name: Check out source code
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '22.x'
- name: Cache Node.js dependencies
uses: actions/cache@v3
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- name: Install dependencies and build site
run: |
npm ci
npm run build
env:
NODE_OPTIONS: "--max-old-space-size=16384"
DOCUSAURUS_URL: "https://${{ secrets.STORAGE_ACCOUNT_NAME }}.z13.web.core.windows.net"
# Add any other environment-specific build variables here
NODE_ENV: ${{ needs.determine-environment.outputs.environment }}
- name: Upload artifact for deployment
uses: actions/upload-artifact@v4
with:
name: build-output
path: build/
deploy:
runs-on: ubuntu-latest
needs: [build, determine-environment]
environment: ${{ needs.determine-environment.outputs.environment }}
steps:
- name: Download build artifact
uses: actions/download-artifact@v4
with:
name: build-output
path: build/
# Azure login step removed - using storage account key instead
- name: Install azcopy
run: |
# Download and install azcopy for faster uploads
wget -O azcopy.tar.gz https://aka.ms/downloadazcopy-v10-linux
tar -xf azcopy.tar.gz --strip-components=1
sudo mv azcopy /usr/local/bin/
azcopy --version
- name: Upload to Azure Blob Storage with AzCopy
run: |
echo "Deploying to ${{ needs.determine-environment.outputs.environment }} environment"
echo "Starting high-performance upload of ~60,000 files..."
# Create SAS token for azcopy (more secure than using key directly)
end_date=$(date -u -d "30 minutes" '+%Y-%m-%dT%H:%MZ')
sas_token=$(az storage container generate-sas \
--account-name ${{ secrets.STORAGE_ACCOUNT_NAME }} \
--account-key ${{ secrets.STORAGE_ACCOUNT_KEY }} \
--name '$web' \
--permissions dlrw \
--expiry $end_date \
--output tsv)
# Use azcopy for parallel uploads (much faster for many files)
azcopy copy "./build/*" \
"https://${{ secrets.STORAGE_ACCOUNT_NAME }}.blob.core.windows.net/\$web?$sas_token" \
--recursive \
--overwrite=true \
--log-level=WARNING \
--cap-mbps=0 \
--block-size-mb=4 \
--include-pattern="*"
echo "Upload completed!"
- name: Set blob content types efficiently
run: |
echo "Setting content types for web files..."
# Create a properties file for batch operations
cat > set_content_types.sh << 'EOF'
#!/bin/bash
# Function to set content types in parallel
set_content_type() {
local pattern=$1
local content_type=$2
az storage blob list \
--account-name ${{ secrets.STORAGE_ACCOUNT_NAME }} \
--account-key ${{ secrets.STORAGE_ACCOUNT_KEY }} \
--container-name '$web' \
--prefix "" \
--query "[?ends_with(name, '$pattern')].name" \
--output tsv | \
xargs -P 10 -I {} az storage blob update \
--account-name ${{ secrets.STORAGE_ACCOUNT_NAME }} \
--account-key ${{ secrets.STORAGE_ACCOUNT_KEY }} \
--container-name '$web' \
--name "{}" \
--content-type "$content_type" \
--output none
}
# Set content types in parallel (10 concurrent operations)
echo "Setting HTML content types..."
set_content_type ".html" "text/html"
echo "Setting CSS content types..."
set_content_type ".css" "text/css"
echo "Setting JS content types..."
set_content_type ".js" "application/javascript"
echo "Setting JSON content types..."
set_content_type ".json" "application/json"
echo "Setting SVG content types..."
set_content_type ".svg" "image/svg+xml"
echo "Setting image content types..."
set_content_type ".png" "image/png"
set_content_type ".jpg" "image/jpeg"
set_content_type ".jpeg" "image/jpeg"
set_content_type ".gif" "image/gif"
set_content_type ".webp" "image/webp"
echo "Setting font content types..."
set_content_type ".woff" "font/woff"
set_content_type ".woff2" "font/woff2"
set_content_type ".ttf" "font/ttf"
set_content_type ".eot" "application/vnd.ms-fontobject"
echo "Content types updated!"
EOF
chmod +x set_content_types.sh
./set_content_types.sh
- name: Purge CDN endpoint (if configured)
if: ${{ secrets.CDN_ENDPOINT_NAME != '' && secrets.CDN_PROFILE_NAME != '' && secrets.CDN_RESOURCE_GROUP != '' }}

Check failure on line 190 in .github/workflows/main_product-docs-prod.yml

View workflow run for this annotation

GitHub Actions / Build and deploy Docusaurus site to Azure Blob Storage

Invalid workflow file

The workflow is not valid. .github/workflows/main_product-docs-prod.yml (Line: 190, Col: 13): Unrecognized named-value: 'secrets'. Located at position 1 within expression: secrets.CDN_ENDPOINT_NAME != '' && secrets.CDN_PROFILE_NAME != '' && secrets.CDN_RESOURCE_GROUP != ''
run: |
echo "Note: CDN purge requires Azure login. Skipping CDN purge when using storage key authentication."
echo "To use CDN purge, you'll need to use Azure AD authentication or purge CDN manually."
- name: Display deployment URL
run: |
echo "🚀 Deployment complete!"
echo "Environment: ${{ needs.determine-environment.outputs.environment }}"
echo "URL: https://${{ secrets.STORAGE_ACCOUNT_NAME }}.z13.web.core.windows.net"
if [[ -n "${{ secrets.CUSTOM_DOMAIN }}" ]]; then
echo "Custom Domain: ${{ secrets.CUSTOM_DOMAIN }}"
fi