From 787c6cfe6e583ed132aed7b5bfb7104afb938aaa Mon Sep 17 00:00:00 2001 From: adilallo <39313955+adilallo@users.noreply.github.com> Date: Fri, 29 Aug 2025 08:08:30 -0600 Subject: [PATCH] feat: add complete CI pipeline with Gitea Actions runner configuration --- .gitea/workflows/ci.yaml | 239 +++++++++++++++++++++++++++++++++++++++ config.yaml | 33 ++++++ runner-config.yaml | 10 ++ 3 files changed, 282 insertions(+) create mode 100644 .gitea/workflows/ci.yaml create mode 100644 config.yaml create mode 100644 runner-config.yaml diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml new file mode 100644 index 0000000..49f1377 --- /dev/null +++ b/.gitea/workflows/ci.yaml @@ -0,0 +1,239 @@ +name: CI Pipeline +run-name: ${{ gitea.actor }} triggered CI pipeline + +on: + push: + branches: [main, develop] + pull_request: + branches: [main, develop] + +jobs: + # Unit and Integration Tests + test: + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [18, 20] + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: "npm" + + - name: Install dependencies + run: npm ci + + - name: Run unit and integration tests + run: npm test + + - name: Upload coverage reports + uses: codecov/codecov-action@v3 + with: + token: ${{ secrets.CODECOV_TOKEN }} + file: ./coverage/lcov.info + flags: unittests + name: codecov-umbrella + + # E2E Tests + e2e: + runs-on: ubuntu-latest + strategy: + matrix: + browser: [chromium, firefox, webkit] + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "npm" + + - name: Install dependencies + run: npm ci + + - name: Install Playwright browsers + run: npx playwright install --with-deps ${{ matrix.browser }} + + - name: Build application + run: npm run build + + - name: Start application + run: npm run preview & + env: + CI: true + + - name: Wait for application to be ready + run: npx wait-on http://localhost:3000 + + - name: Run E2E tests + run: npx playwright test --project=${{ matrix.browser }} + env: + CI: true + + - name: Upload test results + uses: actions/upload-artifact@v4 + if: always() + with: + name: playwright-results-${{ matrix.browser }} + path: | + test-results/ + playwright-report/ + retention-days: 30 + + # Visual Regression Tests + visual-regression: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "npm" + + - name: Install dependencies + run: npm ci + + - name: Install Playwright browsers + run: npx playwright install --with-deps + + - name: Build application + run: npm run build + + - name: Start application + run: npm run preview & + env: + CI: true + + - name: Wait for application to be ready + run: npx wait-on http://localhost:3000 + + - name: Run visual regression tests + run: npx playwright test tests/e2e/visual-regression.spec.ts + env: + CI: true + + - name: Upload visual regression results + uses: actions/upload-artifact@v4 + if: always() + with: + name: visual-regression-results + path: | + test-results/ + tests/e2e/visual-regression.spec.ts-snapshots/ + retention-days: 30 + + # Performance Tests + performance: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "npm" + + - name: Install dependencies + run: npm ci + + - name: Build application + run: npm run build + + - name: Start application + run: npm run preview & + env: + CI: true + + - name: Wait for application to be ready + run: npx wait-on http://localhost:3000 + + - name: Run Lighthouse CI + run: npm run lhci + env: + CI: true + + # Storybook Tests + storybook: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "npm" + + - name: Install dependencies + run: npm ci + + - name: Build Storybook + run: npm run build-storybook + + - name: Run Storybook tests + run: npm run test:sb + env: + CI: true + + # Lint and Format + lint: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "npm" + + - name: Install dependencies + run: npm ci + + - name: Run ESLint + run: npm run lint + + - name: Check formatting + run: npx prettier --check "**/*.{js,jsx,ts,tsx,json,css,md}" + + # Build Verification + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "npm" + + - name: Install dependencies + run: npm ci + + - name: Build application + run: npm run build + + - name: Build Storybook + run: npm run build-storybook diff --git a/config.yaml b/config.yaml new file mode 100644 index 0000000..dadce6a --- /dev/null +++ b/config.yaml @@ -0,0 +1,33 @@ +log: + level: info + +runner: + file: .runner + capacity: 2 + timeout: 3h + insecure: false + fetch_timeout: 5s + fetch_interval: 2s + labels: + - "ubuntu-latest:docker://mcr.microsoft.com/playwright:v1.54.2-jammy" + - "macos-latest:host" + - "self-hosted:host" + +cache: + enabled: true + dir: "" + host: "" + port: 0 + external_server: "" + +container: + network: "" + privileged: false + options: + workdir_parent: + valid_volumes: [] + docker_host: "" + force_pull: false + +host: + workdir_parent: "" diff --git a/runner-config.yaml b/runner-config.yaml new file mode 100644 index 0000000..90d11af --- /dev/null +++ b/runner-config.yaml @@ -0,0 +1,10 @@ +log: + level: info + +runner: + capacity: 2 + +runners: + - name: community-rule-runner + labels: + - "ubuntu-latest:docker://mcr.microsoft.com/playwright:v1.54.2-jammy"