Skip to content

markdown-lint: textlint ステップが空出力で reviewdog が EOF 落ちする / 中央テンプレートと textlint v15 の不整合 #8

@tomio2480

Description

@tomio2480

事象

markdown-lint reusable workflow を caller として呼び出すと,textlint ステップが空の textlint-report.xml を出力し,後続の reviewdog が `reviewdog: parse error: EOF` で exit 1 する.

実観測したリポジトリ:tomio2480/blog-private#1(Private のため URL のみ参考).

切り分け結果

1. 中央テンプレート `templates/.textlintrc.json` と textlint v15 の非互換

中央テンプレートは preset を shorthand で参照している:

```json
{
"rules": {
"preset-ja-technical-writing": {...},
"preset-ja-spacing": {...}
}
}
```

textlint v15.6.0 ではこの shorthand では preset が解決されず, `textlint --print-config` で `"rule": []` (空配列)になる.完全モジュール名( `textlint-rule-preset-ja-technical-writing` 等)に書き換えると解決される.

2. 中央テンプレートの `filters.comments` と install 内容の不整合

中央テンプレートには `filters.comments: true` が含まれる:

```json
{
"filters": {
"comments": true
}
}
```

しかし `Setup textlint runtime` ステップの `npm install` 対象は以下のみで, `textlint-filter-rule-comments` を含まない.

  • textlint
  • textlint-rule-preset-ja-technical-writing
  • textlint-rule-preset-ja-spacing
  • textlint-rule-prh

filter モジュールが見つからない場合, textlint は config 全体を silently reject し `"rule": []` になる.

3. self-detection が caller リポジトリを中央として誤認

`Detect self repository` ステップのログ:

```
Detected self repo: tomio2480/blog-private
Using ref: refs/pull/1/merge
```

caller リポジトリ自身を中央リポジトリとして actions/checkout してしまうため, `.central-workflows/templates/.textlintrc.json` のフォールバック解決が必ず失敗する(caller には `templates/` ディレクトリがないため).

影響

  • 中央テンプレートをそのまま per-repo override として配置しても CI が落ちる
  • ローカルで preset を完全モジュール名に書き換え, filters ブロックを削除した上でも CI 上では textlint が空出力になる事象が継続観測されており,さらに別の不整合の可能性がある(再現環境の再調査が必要)

提案する修正

  1. `templates/.textlintrc.json` の preset 参照を完全モジュール名に書き換える
  2. `textlint-filter-rule-comments` を install 対象に追加する(または `filters.comments` を中央テンプレートから外す)
  3. self-detection ロジックを修正し, reusable workflow の所属リポジトリを正しく検出する
  4. (任意)caller 側で `textlint-report.xml` が空でも reviewdog を skip する分岐を入れる. EOF parse error を握りつぶす形でフェイルセーフ化.

参照

  • caller の md-lint.yml は templates/.github/workflows/md-lint.yml の手順に従って配置済み
  • 該当 CI run(caller 側):tomio2480/blog-private の Actions タブから docs/pivot-to-evernote-export-flow ブランチの実行ログを参照

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