[[📜2024-09-16 semantic-releaseでGitHub管理のパッケージリリースを自動化してみる]] の知見を活かしたうえで、[[Obsidianプラグイン]]のリリースにも適応してみる。 ## 前提 [[Obsidianプラグイン]]のリリース方法や[[Bun]]プロジェクトの適応方法を知っていること。 - [[📕Obsidianプラグイン開発チュートリアル]] - [[📕ObsidianのNode.jsプロジェクトをBunに移行する方法]] 2つ目の[[Bun]]については[[Node.js]]でも構わない。ただし、以下はすべて[[Bun]]を前提にしているため、[[Node.js]]用のコマンドに適宜置き換えて読み進めること。 ## 適当対象 [[🦉Another Quick Switcher]]に適応してみる。 ## `.releaserc.mjs`の追加 [[プラグイン (semantic-release)|プラグイン]]としては、[[exec (semantic-release)|exec]]を使って`prepare`のタイミングにリリースコマンドを差し込むところが特徴的。重要な部分はコメントで記載してあるのでそちらを参照。 ```js export default { branches: ["master"], // Obsidianプラグインはgit tagにvをつけてはいけないのでtagFormatを変更 tagFormat: "${version}", plugins: [ [ "@semantic-release/commit-analyzer", { preset: "conventionalcommits", releaseRules: [ { breaking: true, release: "major" }, { type: "feat", release: "minor" }, { type: "build", release: "minor" }, { type: "style", release: "minor" }, { type: "fix", release: "patch" }, { type: "refactor", release: "patch" }, { revert: true, release: "patch" }, ], }, ], [ "@semantic-release/release-notes-generator", { preset: "conventionalcommits", presetConfig: { types: [ { type: "feat", section: "✨ Features" }, { type: "style", section: "🎨 Styles" }, { type: "fix", section: "🛡 Bug Fixes" }, { type: "build", section: "🤖 Build" }, { type: "docs", hidden: true }, { type: "refactor", hidden: true }, { type: "test", hidden: true }, { type: "ci", hidden: true }, { type: "dev", hidden: true }, { type: "chore", hidden: true }, ], }, }, ], [ "@semantic-release/exec", { // リリース作業直前にCIでビルド・テストを行い、version-bump.mtsでバージョン更新処理を行う. ${nextRelease.version}はsemantic-releaseが決めたバージョン prepareCmd: "bun run ci && bun version-bump.mts ${nextRelease.version}", }, ], [ "@semantic-release/github", { // Obsidianプラグインとして配布する必要のあるファイルを記載 assets: [ "main.js", "styles.css", "manifest.json", "manifest-beta.json", ], }, ], [ "@semantic-release/git", { // bun version-bump.mts で変更されたファイルすべてをコミット対象とする assets: [ "package.json", "manifest-beta.json", "manifest.json", "versions.json", "bun.lockb", ], message: "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}", }, ], ], }; ``` > [!info] 参考 > - [[タグのprefixであるvを除去 (semantic-release)|タグのprefixであるvを除去]] 以下は`package.json`の`scripts`。これはあくまで[[🦉Another Quick Switcher]]の例であり、各開発環境によってコマンドは異なるはず。 ```json "scripts": { "dev": "bun esbuild.config.mts", "build": "tsc -noEmit -skipLibCheck && bun esbuild.config.mts production", "test": "jest", "ci": "bun install && biome check src *.mts && bun run build && bun run test", "prepare": "husky", "pre:push": "tsc -noEmit -skipLibCheck && biome check src *.mts && bun run test" }, ``` ## GitHub ActionsのYAML変更 こちらも[[🦉Another Quick Switcher]]の場合の一例。[[Discord]]通知など関係ない部分はカットしている。重要な部分はコメントで補足。 ```yaml name: "Release" on: workflow_dispatch permissions: contents: write jobs: release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 # Bunの利用に必要. Bunを使っていなければ不要 - uses: oven-sh/setup-bun@v2 # semantic-releaseでプリインされていないプラグイン・モジュールをインストール - run: npm i -D --no-save conventional-changelog-conventionalcommits @semantic-release/git @semantic-release/exec # semantic-releaseのアクション - uses: cycjimmy/semantic-release-action@v4 with: # バージョンは固定にしておいたほうがいい semantic_version: 24.1.2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ``` 必要な設定はほとんど`.releaserc.mjs`に書かれているので比較的シンプル。[[プラグイン (semantic-release)|プラグイン]]インストールを忘れないよう気を付けるくらい。 ## 参考コミット <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://github.githubassets.com/favicons/favicon.svg" /> <span class="link-card-v2-site-name">GitHub</span> </div> <div class="link-card-v2-title"> dev: Support semantic-release · tadashi-aikawa/obsidian-another-quick-switcher@171c71d </div> <div class="link-card-v2-content"> This is an Obsidian plugin which is another choice of Quick switcher. - dev: Support semantic-release · tadashi- ... </div> <img class="link-card-v2-image" src="https://opengraph.githubassets.com/5f6cd80817bbd860741724879705835a3c74cb312786029326f080439cf4086e/tadashi-aikawa/obsidian-another-quick-switcher/commit/171c71d6273cde73b1b4303376864aa8f23544c8" /> <a href="https://github.com/tadashi-aikawa/obsidian-another-quick-switcher/commit/171c71d6273cde73b1b4303376864aa8f23544c8"></a> </div>