name: Frontend CI/CD on: push: branches: ["main"] paths: - frontend/** - json/** pull_request: branches: ["main"] types: [opened, synchronize, reopened, edited] paths: - frontend/** - json/** workflow_dispatch: permissions: contents: read concurrency: group: pages-${{ github.ref }} cancel-in-progress: false jobs: build: runs-on: ubuntu-latest defaults: run: working-directory: frontend steps: - name: Checkout uses: actions/checkout@v4 - name: Update JSON statuses run: | JSON_DIR=public/json STATUS_FILE="$JSON_DIR/statuses.json" for file in "$JSON_DIR"/*.json; do filename=$(basename "$file") # skip the generated statuses.json itself if [[ "$filename" == "statuses.json" ]]; then continue fi # pull status from statuses.json; skip if null or empty status=$(jq -r --arg key "$filename" '.[$key] // empty' "$STATUS_FILE") if [[ -n "$status" ]]; then # inject/update top-level "status" field jq --arg st "$status" '.status = $st' "$file" > "$file.tmp" mv "$file.tmp" "$file" echo "→ Updated $filename with status: $status" fi done - name: Setup Node uses: actions/setup-node@v4 with: node-version: "20" cache: npm cache-dependency-path: frontend/package-lock.json - name: Install dependencies run: npm ci --prefer-offline --legacy-peer-deps - name: Configure Next.js for pages uses: actions/configure-pages@v5 with: static_site_generator: next - name: Build with Next.js run: npm run build - name: Upload artifact if: github.ref == 'refs/heads/main' uses: actions/upload-pages-artifact@v3 with: path: frontend/out deploy: runs-on: ubuntu-latest needs: build if: github.ref == 'refs/heads/main' && github.repository == 'asylumexp/Proxmox' permissions: pages: write id-token: write environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} steps: - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4