conventional-changelog を使いこなしたい
![odan](https://res.cloudinary.com/zenn/image/fetch/s--WrPVoW6_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/a1725d5f38.jpeg)
CHANGELOG.md 生成をもっとよしなにしたい
![odan](https://res.cloudinary.com/zenn/image/fetch/s--WrPVoW6_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/a1725d5f38.jpeg)
プルリクのマージには Squash マージが必要みたい
このとき、タイトルがいい感じじゃないといけない
![odan](https://res.cloudinary.com/zenn/image/fetch/s--WrPVoW6_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/a1725d5f38.jpeg)
commit メッセージがいい感じかチェックするには commitlint がある
commit ごとに矯正するには例のごとく、husky でやる
![odan](https://res.cloudinary.com/zenn/image/fetch/s--WrPVoW6_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/a1725d5f38.jpeg)
余談だけど、デモ画像に使用されている svg-term-cli が便利そう
![odan](https://res.cloudinary.com/zenn/image/fetch/s--WrPVoW6_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/a1725d5f38.jpeg)
プルリクのタイトルをいい感じにするには Semantic Pull Requests というツールがあるみたい
![odan](https://res.cloudinary.com/zenn/image/fetch/s--WrPVoW6_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/a1725d5f38.jpeg)
GitHub の Release の作成を自動化するなら releaser-tools が良さそう?
![odan](https://res.cloudinary.com/zenn/image/fetch/s--WrPVoW6_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/a1725d5f38.jpeg)
commitlint の Shared configuration を眺める
- 基本的に
<type>(<scope>): <short summary>
という形式になっているかをチェックするもの- type/scope が lower-case になっているかとか、type の validation をしてくれる
-
@commitlint/config-angular
と@commitlint/config-conventional
は似たような感じ? -
@commitlint/config-lerna-scopes
と@commitlint/config-nx-scopes
も似たような感じ- monorepo の
packages
以下に生えているパッケージだけをscope
に指定するルールみたい - monorepo やってるならこれを選ぶのが良さそう
- monorepo の
-
@commitlint/config-patternplate
はscope
を自分で設定できるやつっぽい- @commitlint/config-angular` の拡張版
今回は monorepo に commitlint を導入したいので @commitlint/config-lerna-scopes
が良さそう
![odan](https://res.cloudinary.com/zenn/image/fetch/s--WrPVoW6_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/a1725d5f38.jpeg)
config は commitlint.config.ts
に書くことができる
型の付け方も含めて書き方は次の通り
import type { UserConfig } from "@commitlint/types";
const config: UserConfig = { extends: ["@commitlint/config-lerna-scopes"] };
export default config;
![odan](https://res.cloudinary.com/zenn/image/fetch/s--WrPVoW6_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/a1725d5f38.jpeg)
lerna-changelog
というのもあるらしい
ラベルで管理するみたい
![odan](https://res.cloudinary.com/zenn/image/fetch/s--WrPVoW6_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/a1725d5f38.jpeg)
こういう感じかな
name: Check Pull Request Title
on:
pull_request:
types: [opened, synchronize, reopened, edited]
workflow_dispatch:
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: nodenv/actions/node-version@main
id: nodenv
- name: Use Node.js ${{ steps.nodenv.outputs.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ steps.nodenv.outputs.node-version }}
cache: yarn
- name: yarn install
run: |
yarn install --frozen-lockfile
- name: Check title
run: echo "${{ github.event.pull_request.title }}" | yarn commitlint
![odan](https://res.cloudinary.com/zenn/image/fetch/s--WrPVoW6_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/a1725d5f38.jpeg)
https://github.com/conventional-changelog/releaser-tools は GitHub/GitLab などのリリース機能のためのツール群のリポジトリ
conventional-github-releaser を使えば良さそう...?
でもこれだと、CHANGELOG 作るのが lerna で、Release 作るのがこのツールになって良くないかな
CHANGELOG.md から Release 作る君が求められているかも
あとタグを push したら自動的に Release も作られるようにしたい
![odan](https://res.cloudinary.com/zenn/image/fetch/s--WrPVoW6_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/a1725d5f38.jpeg)
調べてみると release-it というツールが便利そう
npm publish に相当する機能もあるが、Release を生成するだけの機能を使うこともできそう
lerna が生成した CHANGELOG.md から Release を生成するための plugin として release-it-lerna-changelog もあった
この2つを組み合わせればやりたいことできそう
![odan](https://res.cloudinary.com/zenn/image/fetch/s--WrPVoW6_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/a1725d5f38.jpeg)
lerna 自身に --create-release
があってこれでリリースを生成できそう
![odan](https://res.cloudinary.com/zenn/image/fetch/s--WrPVoW6_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/a1725d5f38.jpeg)
lerna-changelogで始める頑張りすぎないリリースノート自動生成 | WEB EGG がリリース系のツールのまとめとしてよかった
- semantic-release
- conventional-changelog
- コミットメッセージで縛る系
- lerna-changelog
- プルリクのラベルで縛る系
これらを release-it で使うためにプラグインが存在する形
- https://github.com/rwjblue/release-it-lerna-changelog
- https://github.com/release-it/conventional-changelog
なので、commitlint で conventional なメッセージに縛っているなら conventional-changelog
を使うのが良さそう?