name: CI on: push: branches: [main] tags: ['v*'] pull_request: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true permissions: contents: read jobs: lint: name: Lint, format, types runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - uses: actions/setup-node@v5 with: node-version: 22 cache: npm - run: npm ci - run: npm run lint - run: npm run format:check - run: npm run typecheck unit: name: Unit tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - uses: actions/setup-node@v5 with: node-version: 22 cache: npm - run: npm ci - run: npm test e2e: name: E2E tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - uses: actions/setup-node@v5 with: node-version: 22 cache: npm - run: npm ci - run: npx playwright install --with-deps firefox - run: npm run test:e2e - uses: actions/upload-artifact@v4 if: failure() with: name: playwright-report path: | playwright-report test-results retention-days: 14 docker: name: Docker image needs: [lint, unit, e2e] runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - uses: docker/setup-buildx-action@v3 - uses: docker/login-action@v3 if: github.event_name != 'pull_request' with: registry: registry.pumppi.dev username: ${{ secrets.REGISTRY_USER }} password: ${{ secrets.REGISTRY_PASSWORD }} - id: meta uses: docker/metadata-action@v5 with: images: registry.pumppi.dev/workh tags: | type=ref,event=branch type=ref,event=pr type=semver,pattern={{version}} type=sha type=raw,value=latest,enable={{is_default_branch}} # Pull requests only build the image (proves the Dockerfile works); pushes to # main and version tags also publish it. - uses: docker/build-push-action@v6 with: context: . push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha cache-to: type=gha,mode=max