name: Build on: workflow_dispatch: inputs: branch: description: 'Branch to build' required: true default: 'main' permissions: contents: read jobs: build: runs-on: ubuntu-latest timeout-minutes: 10 steps: - name: Checkout branch uses: actions/checkout@v3 with: ref: ${{ gitea.event.inputs.branch }} - name: Setup Node.js uses: actions/setup-node@v3 with: node-version: 24 - name: Cache Next.js build id: cache-nextjs uses: actions/cache@v3 continue-on-error: true with: path: .next/cache key: ${{ runner.os }}-nextjs-${{ hashFiles('package-lock.json') }} restore-keys: | ${{ runner.os }}-nextjs- - name: Install dependencies run: | set -euo pipefail npm ci --prefer-offline --no-audit --silent 2>&1 | tee install.log env: NODE_OPTIONS: '--max-old-space-size=4096' - name: Build (next build) run: | set -euo pipefail npm run build 2>&1 | tee build.log env: NODE_ENV: production NEXT_TELEMETRY_DISABLED: 1 NODE_OPTIONS: '--max-old-space-size=4096' timeout-minutes: 5 - name: Save Next.js cache if: always() uses: actions/cache@v3 continue-on-error: true with: path: .next/cache key: ${{ runner.os }}-nextjs-${{ hashFiles('package-lock.json') }} - name: Verify .next exists run: test -d .next || (echo "No .next folder. Check build logs above."; exit 1) - name: Upload logs on failure if: failure() uses: actions/upload-artifact@v3 with: name: build-logs path: | install.log build.log if-no-files-found: ignore - name: Build completed if: success() run: echo "Build completed successfully"