T27-6 #265
This file contains hidden or 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: Deploy to GitHub Pages | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - private | |
| # Allows you to run this workflow manually from the Actions tab | |
| workflow_dispatch: | |
| # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages | |
| permissions: | |
| contents: read | |
| pages: write | |
| id-token: write | |
| # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. | |
| # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: false | |
| jobs: | |
| # Build job | |
| build: | |
| runs-on: ubuntu-latest | |
| # ψ-location: extended timeout for multi-language build | |
| timeout-minutes: 360 # 6 hours - GitHub Actions maximum | |
| env: | |
| ACTIONS_RUNNER_DEBUG: true | |
| ACTIONS_STEP_DEBUG: true | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 18 | |
| cache: npm | |
| - name: Install dependencies | |
| run: | | |
| echo "Starting npm install..." | |
| npm ci --verbose | |
| echo "npm install completed" | |
| - name: Pre-build collapse | |
| run: | | |
| echo "Starting pre-build collapse..." | |
| node scripts/pre-build-collapse.js | |
| echo "Pre-build collapse completed" | |
| - name: Clean memory before build | |
| run: | | |
| echo "=== Memory status before cleanup ===" | |
| free -h | |
| echo "=== Cleaning memory ===" | |
| # Clear page cache, dentries and inodes | |
| sudo sh -c "echo 3 > /proc/sys/vm/drop_caches" || true | |
| # Force garbage collection | |
| sudo sh -c "sync && echo 1 > /proc/sys/vm/drop_caches" || true | |
| echo "=== Memory status after cleanup ===" | |
| free -h | |
| - name: Build website | |
| timeout-minutes: 300 # ψ-location: 5 hour timeout for build step | |
| env: | |
| DOCUSAURUS_SKIP_BUILD_OPTIMIZATION: true | |
| run: | | |
| echo "=== Build environment ===" | |
| echo "NODE_OPTIONS: $NODE_OPTIONS" | |
| free -h | |
| echo "=== Starting build at $(date) ===" | |
| # Run build with progress monitoring | |
| timeout 290m npm run build 2>&1 | while IFS= read -r line; do | |
| echo "[$(date '+%H:%M:%S')] $line" | |
| # Keep the runner alive by outputting progress | |
| if [[ $SECONDS -gt 300 ]]; then | |
| echo "[$(date '+%H:%M:%S')] Build still in progress..." | |
| SECONDS=0 | |
| fi | |
| done | |
| echo "=== Build completed at $(date) ===" | |
| - name: Upload artifact | |
| uses: actions/upload-pages-artifact@v3 | |
| with: | |
| path: ./build | |
| # Deployment job | |
| deploy: | |
| environment: | |
| name: github-pages | |
| url: ${{ steps.deployment.outputs.page_url }} | |
| runs-on: ubuntu-latest | |
| needs: build | |
| timeout-minutes: 30 # ψ-location: deployment timeout | |
| steps: | |
| - name: Deploy to GitHub Pages | |
| id: deployment | |
| uses: actions/deploy-pages@v4 |