From 63489ee38f8448be4b9a785f53d504d244a9b8b1 Mon Sep 17 00:00:00 2001 From: adilallo <39313955+adilallo@users.noreply.github.com> Date: Wed, 28 Jan 2026 14:40:44 -0700 Subject: [PATCH] Simplify CI pipeline --- .gitea/workflows/ci.yaml | 103 ++++++++++++++++----------------------- 1 file changed, 42 insertions(+), 61 deletions(-) diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 7427d22..870cf14 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -7,46 +7,30 @@ on: branches: [main, develop] # PRs into main/develop types: [opened, reopened, synchronize] +concurrency: + group: ci-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + NODE_VERSION: "20" + NEXT_TELEMETRY_DISABLED: "1" + jobs: test: runs-on: [self-hosted, macos-latest] env: NODE_OPTIONS: "--max_old_space_size=8192 --max_semi_space_size=128" CI: true - VITEST_MAX_CONCURRENCY: 1 - VITEST_MAX_THREADS: 1 - VITEST_MIN_THREADS: 1 - VITEST_POOL: "vmThreads" - VITEST_POOL_OPTIONS: '{"vmThreads":{"singleThread":true}}' - VITEST_LOG_LEVEL: "info" - DEBUG: "vitest:*" - VITEST_WORKER_TIMEOUT: "300000" - VITEST_POOL_TIMEOUT: "300000" - VITEST_FORCE_RERUN_TRIGGERS: "**" steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 if: ${{ github.server_url == 'https://github.com' }} - with: { node-version: 20, cache: npm } + with: { node-version: ${{ env.NODE_VERSION }}, cache: npm } - uses: actions/setup-node@v4 if: ${{ github.server_url != 'https://github.com' || !github.server_url }} - with: { node-version: 20 } - - run: npm ci - - name: Show system info - run: | - echo "Node.js version: $(node -v)" - echo "NPM version: $(npm -v)" - echo "Available memory: $(free -h || vm_stat | head -10)" - echo "CPU info: $(sysctl -n machdep.cpu.brand_string || uname -m)" - - run: | - echo "Running tests with CI optimizations..." - # Run tests in smaller batches to avoid resource contention - echo "Running unit tests..." - npm test -- tests/unit/ --run --reporter=verbose --no-coverage --maxConcurrency=1 - echo "Running integration tests..." - npm test -- tests/integration/ --run --reporter=verbose --no-coverage --maxConcurrency=1 - echo "Running accessibility tests..." - npm test -- tests/accessibility/ --run --reporter=verbose --no-coverage --maxConcurrency=1 + with: { node-version: ${{ env.NODE_VERSION }} } + - run: npm ci --no-audit --fund=false + - run: npm test -- --reporter=dot --maxConcurrency=1 # If the Codecov Action fails on Gitea, replace this with the bash uploader below - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 @@ -69,18 +53,18 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 if: ${{ github.server_url == 'https://github.com' }} - with: { node-version: 20, cache: npm } + with: { node-version: ${{ env.NODE_VERSION }}, cache: npm } - uses: actions/setup-node@v4 if: ${{ github.server_url != 'https://github.com' || !github.server_url }} - with: { node-version: 20 } - - run: npm ci + with: { node-version: ${{ env.NODE_VERSION }} } + - run: npm ci --no-audit --fund=false - name: Install Playwright run: npx playwright install --with-deps ${{ matrix.browser }} - run: npm run build - name: E2E (start + test + teardown) run: | - set -euxo pipefail + set -euo pipefail export PORT="${PORT:-3010}" export HOST="127.0.0.1" @@ -118,12 +102,12 @@ jobs: # package artifacts (keeps file count small) - name: Package E2E artifacts - if: always() + if: failure() run: | tar -czf playwright-${{ matrix.browser }}.tgz playwright-report test-results || true - name: Upload E2E artifacts - if: always() + if: failure() uses: actions/upload-artifact@v3 with: name: playwright-results-${{ matrix.browser }} @@ -136,24 +120,24 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 if: ${{ github.server_url == 'https://github.com' }} - with: { node-version: 20, cache: npm } + with: { node-version: ${{ env.NODE_VERSION }}, cache: npm } - uses: actions/setup-node@v4 if: ${{ github.server_url != 'https://github.com' || !github.server_url }} - with: { node-version: 20 } - - run: npm ci + with: { node-version: ${{ env.NODE_VERSION }} } + - run: npm ci --no-audit --fund=false - name: Install Playwright run: npx playwright install --with-deps - run: npm run build # 1) Sanity check that the build exists - name: Verify Next build output run: | - set -euxo pipefail + set -euo pipefail ls -la .next || true test -f .next/BUILD_ID || (echo "No Next build output (.next) – did build fail?" && exit 1) - name: Visual Regression (start + test + teardown) run: | - set -euxo pipefail + set -euo pipefail export PORT="${PORT:-3010}" export HOST="127.0.0.1" @@ -295,7 +279,7 @@ jobs: NODE_OPTIONS: "--max-old-space-size=8192" - name: Package visual artifacts - if: always() + if: failure() run: | # Include server logs for debugging echo "📋 Server logs for debugging:" @@ -305,7 +289,7 @@ jobs: tar -czf visual-regression.tgz test-results tests/e2e/visual-regression.spec.ts-snapshots .next/runner.log || true - name: Upload visual artifacts - if: always() + if: failure() uses: actions/upload-artifact@v3 with: name: visual-regression-results @@ -325,14 +309,11 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 if: ${{ github.server_url == 'https://github.com' }} - with: { node-version: 20, cache: npm } + with: { node-version: ${{ env.NODE_VERSION }}, cache: npm } - uses: actions/setup-node@v4 if: ${{ github.server_url != 'https://github.com' || !github.server_url }} - with: { node-version: 20 } - - run: npm ci - - - name: Install LHCI - run: npm i -D @lhci/cli + with: { node-version: ${{ env.NODE_VERSION }} } + - run: npm ci --no-audit --fund=false - name: Build application run: npm run build @@ -346,14 +327,14 @@ jobs: # 1) Sanity check that the build exists - name: Verify Next build output run: | - set -euxo pipefail + set -euo pipefail ls -la .next || true test -f .next/BUILD_ID || (echo "No Next build output (.next) – did build fail?" && exit 1) - name: Install Chrome via Puppeteer (mac_arm) run: | # Install Chrome (arm64) into a local cache - set -euxo pipefail + set -euo pipefail mkdir -p .cache/puppeteer # 1) Install and capture the build id that was actually installed @@ -387,7 +368,7 @@ jobs: - name: Ensure arm64 Node for Lighthouse run: | - set -euxo pipefail + set -euo pipefail echo "node before: $(node -v) arch=$(node -p 'process.arch')" if [ "$(node -p 'process.arch')" != "arm64" ]; then NODE_VER=20.17.0 @@ -407,7 +388,7 @@ jobs: - name: Performance (start + test + teardown) run: | - set -euxo pipefail + set -euo pipefail export PORT=3010 HOST=127.0.0.1 mkdir -p .next @@ -462,7 +443,7 @@ jobs: NODE_OPTIONS: "--max-old-space-size=8192" - name: Upload Performance Artifacts - if: always() + if: failure() uses: actions/upload-artifact@v3 with: name: performance-results @@ -480,11 +461,11 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 if: ${{ github.server_url == 'https://github.com' }} - with: { node-version: 20, cache: npm } + with: { node-version: ${{ env.NODE_VERSION }}, cache: npm } - uses: actions/setup-node@v4 if: ${{ github.server_url != 'https://github.com' || !github.server_url }} - with: { node-version: 20 } - - run: npm ci + with: { node-version: ${{ env.NODE_VERSION }} } + - run: npm ci --no-audit --fund=false - run: npm run storybook:build:github # Storybook is used for component documentation only. # Component tests (tests/components/*.test.tsx) provide all test coverage. @@ -495,11 +476,11 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 if: ${{ github.server_url == 'https://github.com' }} - with: { node-version: 20, cache: npm } + with: { node-version: ${{ env.NODE_VERSION }}, cache: npm } - uses: actions/setup-node@v4 if: ${{ github.server_url != 'https://github.com' || !github.server_url }} - with: { node-version: 20 } - - run: npm ci + with: { node-version: ${{ env.NODE_VERSION }} } + - run: npm ci --no-audit --fund=false - run: npm run lint - run: npm exec prettier -- --check "**/*.{js,jsx,ts,tsx,json,css,md}" @@ -509,10 +490,10 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 if: ${{ github.server_url == 'https://github.com' }} - with: { node-version: 20, cache: npm } + with: { node-version: ${{ env.NODE_VERSION }}, cache: npm } - uses: actions/setup-node@v4 if: ${{ github.server_url != 'https://github.com' || !github.server_url }} - with: { node-version: 20 } - - run: npm ci + with: { node-version: ${{ env.NODE_VERSION }} } + - run: npm ci --no-audit --fund=false - run: npm run build - run: npm run storybook:build:github