CI
Walidacja kazdego PR do main — build, typecheck, testy.
Ksefnik wykorzystuje 4 workflow GitHub Actions do automatyzacji budowania, testowania, publikacji i deploymentu dokumentacji.
┌─────────────┐ │ main │ └──────┬──────┘ │ PR do main │ ▼ ┌────────────────┐ │ CI (ci.yml) │ │ build → test │ └────────────────┘ │ merge │ ▼ ┌─────────────┐ │ main │ └──────┬──────┘ │ PR do prod │ ▼ ┌──────────────────────┐ │ guard-prod.yml │ │ (org member check) │ └──────────┬───────────┘ │ merge│ ▼┌───────────────────────────────────────────────────┐│ prod-release.yml ││ typecheck → test → bump → build → npm publish ││ → tag → GitHub Release → sync PR prod→main │└───────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────┐ │ Sync PR prod→main │ │ (wersje w package │ │ .json) │ └──────────────────────┘
───────── osobny flow ─────────
zmiana w apps/docs/** │ ▼ ┌─────────────────┐ │ docs.yml │ │ Docker build │ │ → SSH deploy │ └─────────────────┘Workflow odpowiedzialny za walidację kodu przy pull requestach do main.
Trigger: pull request do main
pnpm install --frozen-lockfilepnpm build — budowanie wszystkich pakietówpnpm typecheck — sprawdzenie typówpnpm test -- --run — uruchomienie testow Vitestname: CI
on: pull_request: branches: [main]
jobs: test: runs-on: [self-hosted, codeformers] strategy: matrix: node-version: [22]
steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 - uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} cache: pnpm - run: pnpm install --frozen-lockfile - run: pnpm build - run: pnpm typecheck - run: pnpm test -- --runWorkflow publikujacy nowe wersje na npm. Uruchamia sie automatycznie po merge do brancha prod.
Trigger: push do prod (= merge PR)
fetch-depth: 0)registry-url: https://registry.npmjs.orgpnpm install --frozen-lockfilepnpm typecheck — sprawdzenie typowpnpm test -- --run — uruchomienie testownode scripts/bump-version.mjs minor — podbicie wersji minor we wszystkich pakietachpnpm -r build — budowanie wszystkich pakietowpnpm -r publish --access public --provenance --no-git-checks — publikacja na npmv{version} + push do prodprod → main z nowymi wersjamiWorkflow wymaga trzech uprawnien:
| Uprawnienie | Cel |
|---|---|
contents: write | Push commita, taga i tworzenie release |
id-token: write | Provenance signing przy npm publish |
pull-requests: write | Otwarcie sync PR prod → main |
Flaga --provenance przy npm publish generuje podpisany atest SLSA, ktory laczy opublikowana paczke z konkretnym commitem i workflow. Uzytkownik moze zweryfikowac zrodlo paczki na stronie npm.
Ochrona brancha prod przed PR-ami od osob spoza organizacji.
Trigger: otwarcie PR do prod (pull_request_target)
CodeFormers-it przez GitHub APISTATUS=$(gh api orgs/CodeFormers-it/members/$AUTHOR \ --silent -i 2>&1 | head -1 | grep -o '[0-9]\{3\}')
if [ "$STATUS" != "204" ]; then gh pr close $PR_NUMBER \ --comment "PRs to \`prod\` are restricted to org members. Please open your PR against \`main\` instead."fiBudowanie i deployment strony dokumentacji na VPS.
Trigger:
apps/docs/**, packages/shared/src/schemas/**, docker/docs.Dockerfile lub docker/nginx-docs.confworkflow_dispatch) z opcja deploy./scripts/build-and-push.sh./scripts/deploy.shon: pull_request: paths: - 'apps/docs/**' - 'packages/shared/src/schemas/**' - 'docker/docs.Dockerfile' - 'docker/nginx-docs.conf' workflow_dispatch: inputs: deploy: description: 'Deploy to VPS after build' type: boolean default: trueCI
Walidacja kazdego PR do main — build, typecheck, testy.
Release
Automatyczna publikacja na npm po merge do prod.
Guard
Ochrona prod przed PR-ami spoza organizacji.
Docs
Build dokumentacji Docker + deploy na VPS.
Wszystkie workflow (poza guard-prod) dzialaja na self-hosted runnerze z labelami [self-hosted, codeformers]. Runner dziala na Mac mini w biurze CodeFormers.
Zalety:
Wady: