10.05 — Workflows igoristan#

Voir aussi ../05-igoristan/07-ci-deploy.md

Vue d’ensemble#

WorkflowTriggerOSEffetNote
ci-pr.ymlPR **, dispatchubuntu × node 24 + pnpm 103 jobs parallélisés : wireit ci:format-checkwireit lintwireit typecheckGate PR
deploy.ymlpush main, dispatchubuntu × node 24 + pnpm 10pnpm install --frozen-lockfilepnpm build + upload PagesProduction

ci-pr.yml#

jobs:
  format-check:
    env:
      WIREIT_CACHE: github
    steps:
      - uses: actions/checkout@v6
      - uses: pnpm/action-setup@v5
        with: { version: 11 }
      - uses: actions/setup-node@v6
        with: { node-version: 24, cache: "pnpm" }
      - uses: google/wireit@setup-github-actions-caching/v2
      - run: make install
      - name: Formatcheck
        run: make ci:format-check

  lint:
    env:
      WIREIT_CACHE: github
    steps:
      # ... idem setup ...
      - uses: actions/cache@v5
        with:
          path: .eslintcache
          key: eslint-cache-${{ hashFiles('eslint.config.ts', 'src/**/*.*', 'package.json') }}
      - name: Lint
        run: pnpm lint

  typecheck:
    env:
      WIREIT_CACHE: github
    steps:
      # ... idem setup ...
      - name: Typecheck
        run: pnpm typecheck
JobCache supplémentaire
format-checkwireit
lintwireit + .eslintcache (actions/cache)
typecheckwireit + tsbuildinfo (via wireit)

WIREIT_CACHE: github#

env:
  WIREIT_CACHE: github
steps:
  - uses: google/wireit@setup-github-actions-caching/v2

Active le cache wireit. Les runs successifs réutilisent les artefacts wireit.

Pas de tests dans ci-pr.yml#

Igoristan n’a pas de tests unitaires. Cf. ../05-igoristan/07-ci-deploy.md :

L’Igoristan n’a pas de tests unitaires. Pourquoi ?

  • C’est une app démo, pas une lib.
  • Les comportements aléatoires (10%, 30%, 20%) sont volontaires.
  • Les comportements sont testés en e2e par ocarina-example.

→ Les tests sont ailleurs. L’Igoristan se contente de valider que le code compile et passe le lint.

deploy.yml#

on:
  push:
    branches: [main]
  workflow_dispatch:

permissions:
  contents: read
  pages: write
  id-token: write

concurrency:
  group: "pages"
  cancel-in-progress: false

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: pnpm/action-setup@v5
        with: { version: 11 }
      - uses: actions/setup-node@v6
        with: { node-version: 24, cache: "pnpm" }
      - name: Install dependencies
        run: pnpm install --frozen-lockfile
      - name: Build
        run: pnpm build
      - uses: actions/upload-pages-artifact@v4
        with: { path: dist/client }

  deploy:
    needs: build
    runs-on: ubuntu-latest
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    steps:
      - id: deployment
        uses: actions/deploy-pages@v5
  1. concurrency: pages, cancel-in-progress: false : empêche deux deploys simultanés (race condition). Le second attend.
  2. pnpm install --frozen-lockfile : déterminisme. Pas de modif du lock. Garantie d’avoir le même build en CI qu’en local.
  3. pnpm build = wireit build = lint + typecheck + vike build. Si lint/typecheck fail, build fail → deploy ne tourne pas.

dist/client/#

- uses: actions/upload-pages-artifact@v4
  with:
    path: dist/client

Le bundle Vike est produit dans dist/client/ (vs dist/server/ qui contient le SSR runtime, non utilisé ici). On upload juste client/ pour Pages.

URL finale#

https://mojo-molotov.github.io/igoristan/

Préfixe /igoristan configuré dans vite.config.ts#base.