Skip to content

全 workspace の quality gate / CI coverage を静的検査する #44

Description

@koh110

背景

root package.json は packages/* を npm workspace として扱っている一方、quality gate は各 workspace の script / workflow 定義に依存している。

現在 root の lint / test 等で --if-present を使う場合、新しい workspace が必要な script を持たずに追加されても repository 全体の command が成功しうる。

また runtime package 以外の tooling package(例: packages/bin)は dependency graph ベースの CI 設計から漏れやすい。

さらに package 一覧をコード側で手書きすると、npm workspaces と別の source of truth が発生する。

目的

「workspace を追加したが lint / test / build / CI のどこからも検査されていない」という状態を機械的に禁止する。

実装案

root workspace definition から package 一覧を取得し、それを single source of truth とする。

各 workspace に metadata / capability を持たせる。

例:

workspace: api
kind: runtime
required:
  - lint
  - format-check
  - build
  - test
  - ci

workspace: bin
kind: tooling
required:
  - lint
  - format-check
  - typecheck
  - test
  - ci

checker で以下を検査する。

  • workspace が必要な quality script を持つか
  • script が空文字 / no-op になっていないか
  • CI workflow から workspace が到達可能か
  • root verify が全 workspace を含んでいるか
  • package list の手書き複製がないか

設計方針

--if-present を全面禁止する必要はない。

「optional script である」と明示された workspace だけ skip を許可し、required quality gate について silent skip を許可しない設計にする。

Acceptance Criteria

  • root workspace definition から workspace 一覧を取得する
  • required quality scripts の欠落を検出できる
  • empty / no-op quality script を検出できる
  • CI coverage のない workspace を検出できる
  • root verify から全 required workspace が検査される
  • packages/bin を含む tooling workspace も検査対象になる
  • workspace 名の手書き list を可能な限り削除する

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions