This commit is contained in:
+97
-6
@@ -1,28 +1,119 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
# push を main に限る。枝への push で発火させると、PR を開いている間は
|
||||
# 同じコミットに対して push と pull_request の 2 本が走る。中身は同一で、
|
||||
# 片方は情報を増やさない。1 本あたり 11 分台(E2E を足す前は 6 分台。
|
||||
# どちらも実測)なので、コミットごとに実行係の枠を二重に使っていた。
|
||||
# 枝の検査は pull_request 側が見る。main への直 push(マージコミット含む)
|
||||
# は push 側が見る。
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
build-and-test:
|
||||
runs-on: ubuntu-latest
|
||||
# act_runner は本番オーケストレータと同じホストに同居している。
|
||||
# テストが固まった場合(同期 SQLite クエリが止まらない等)、上限が無いと
|
||||
# プラットフォーム既定まで数時間占有し、周りごと巻き込む。
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
|
||||
with:
|
||||
# checkout が残す認証情報を、この後に走る依存インストールとビルドへ
|
||||
# 引き渡さない。lifecycle script を止めてもトークンが読める状態なら
|
||||
# 意味が薄れる。
|
||||
persist-credentials: false
|
||||
# setup-node の `cache: npm` はあえて使わない。act_runner は本番
|
||||
# オーケストレータと同じホストに同居していて、キャッシュは全ジョブで共有
|
||||
# される。未信頼 PR のジョブが書いたキャッシュを、既定ブランチのジョブが
|
||||
# 復元する経路を残さないため、共有キャッシュを持たない構成にしている。
|
||||
# 設計上の根拠は docs/design/2026-08-07-supply-chain-install-policy.html の
|
||||
# 「共有キャッシュ」節を参照。復活させる場合は、キャッシュキーに信頼レベル
|
||||
# を含めたうえで同ドキュメントを更新すること。
|
||||
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||
with:
|
||||
node-version: 22
|
||||
cache: npm
|
||||
cache-dependency-path: |
|
||||
package-lock.json
|
||||
ui/package-lock.json
|
||||
- name: Install LibreOffice Calc and UNO
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y --no-install-recommends libreoffice-calc python3-uno
|
||||
# 依存を入れる前に lockfile を検査する。順序が逆になると、検査対象の
|
||||
# lockfile が持ち込んだコードが検査より先に走ってしまう。
|
||||
- name: Check dependency policy
|
||||
run: node scripts/security/dependency-policy.mjs package-lock.json ui/package-lock.json
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
npm ci
|
||||
npm --prefix ui ci
|
||||
npm ci --ignore-scripts --no-audit
|
||||
npm --prefix ui ci --ignore-scripts --no-audit
|
||||
# --ignore-scripts で入れた native パッケージのうち、許可一覧に載っている
|
||||
# ものだけを出所と integrity を確認したうえで rebuild する。
|
||||
- name: Rebuild allowlisted native dependency
|
||||
run: node scripts/security/rebuild-native.mjs
|
||||
- name: Install Playwright Chromium
|
||||
run: node node_modules/playwright/cli.js install --with-deps chromium
|
||||
# UI の型検査を独立ステップにする。build に含めてはいるが、型エラーで
|
||||
# 落ちたのかバンドルで落ちたのかを、ログを読まずに判別できるようにする。
|
||||
- name: Typecheck (UI)
|
||||
run: npm run typecheck:ui
|
||||
# Tailwind は「不透明度を置く場所が無い色」に /50 のような指定を書いても
|
||||
# 黙って規則を捨てる。型検査もテストもビルドも通るので、ここで止める。
|
||||
# 既知の分は scripts/tailwind-opacity-baseline.json に控えてあり、
|
||||
# 増えたときだけ落ちる。
|
||||
- name: Check Tailwind opacity modifiers
|
||||
run: npm run check:tailwind-opacity
|
||||
# ui/src/index.css は暗い外観で slate の並びを上下ひっくり返す。素の
|
||||
# text-slate-700 が明暗どちらでも正しいので、そこへ dark: を足すと二度反転
|
||||
# して文字が地に沈む。既知の分は scripts/dark-text-baseline.json に控えてあり、
|
||||
# 増えたときだけ落ちる(コントラスト比は測っていない。#1388)。
|
||||
- name: Check dark-theme slate text classes
|
||||
run: npm run check:dark-text
|
||||
- name: Build
|
||||
run: npm run build:all -- --skip-python
|
||||
- name: Test
|
||||
run: npm test
|
||||
- name: Test Excel recalculation with LibreOffice
|
||||
env:
|
||||
RUN_LIBREOFFICE_TESTS: '1'
|
||||
run: npx vitest run src/engine/tools/excel-recalculate.test.ts
|
||||
# ブラウザを実際に動かす検査。Chromium は上で入れているのに、それを使う段が
|
||||
# 無かった(#1338)。走っていなかった間に 6 件が壊れ、PR のレビューで手作業の
|
||||
# 切り分けが要る状態になっていた。
|
||||
#
|
||||
# 最後に置く: いちばん遅く、いちばん落ちやすい。型検査・単体が先に出るので、
|
||||
# 素早く分かる失敗をこれで待たせない。
|
||||
#
|
||||
# webServer(scripts/e2e-web-server.mjs)は自分で build:server と build:ui を
|
||||
# 回してから起動する。上の Build と重なるが、E2E が見るのは自分が建てた
|
||||
# 使い捨ての木で、そこを飛ばすと途中の ui/dist を掴む事故に戻る。
|
||||
#
|
||||
# `|| true` も continue-on-error も付けない。赤は赤として出す。
|
||||
- name: Check egress controls (real worker and browser)
|
||||
run: |
|
||||
npm run security:egress-boundary
|
||||
npm run security:egress
|
||||
npm run security:egress-settings
|
||||
npm run security:ui-assets -- --csp
|
||||
- name: Check local UI assets (browser)
|
||||
run: |
|
||||
npm run security:ui-assets
|
||||
npm run check:execution-conversations
|
||||
npm run check:transcription
|
||||
npm run check:task-files-toolbar
|
||||
node scripts/check-ui-inspector.mjs
|
||||
- name: Test (E2E)
|
||||
run: npm run test:e2e
|
||||
# 認証を有効にして動かす検査(#1399)。上の E2E と別のハーネス
|
||||
# (ui/playwright.auth.config.ts)で、こちらだけが実在する利用者の識別子を
|
||||
# 必要とする権限まわり——管理者のユーザー管理・共有ワークスペース・公開範囲・
|
||||
# 招待・ワークスペースのファイルの受け口——を見る。認証を切った上の段では
|
||||
# そもそも試せない。
|
||||
#
|
||||
# 上の E2E と同じく `|| true` も continue-on-error も付けない。
|
||||
- name: Test (E2E, auth)
|
||||
run: npm run test:e2e:auth
|
||||
|
||||
Reference in New Issue
Block a user