フォーマットを書けるのが面倒ください。
このブログはマークダウンで書かれていて、コミットする前に必ずprettier --write
を実行しようと心に誓ったけど、まったくというほど実行されずにきた。そしてたまに思いだしたように実行し、毎回あげだされる差分に驚いてきた。
エンジニアとして対策しないのかという話だけれど、以前対策を試みGithub Action
を登録したけれどうまく動かず、そもそも最悪フォーマットしなくても問題ないので時間かけるのもどうだろうかとissue
に登録して寝かせていた。
Close
されずにずっと残り続けるissue
は心を蝕む……、なんてことはないけれど少し気持ち悪い。
そこで時間をかけてもいいので、解決することを最優先課題にしてみた。
そういうわけで色々なサイトを巡回し調べた結果、
name: Format Markdown
on:
push:
branches:
- main
permissions:
contents: write
jobs:
format:
runs-on: ubuntu-latest
steps:
- name: Check out the repository
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: "18"
- name: Install Prettier
run: npm install -g prettier
- name: Format Markdown files
run: prettier --write "**/*.md"
- name: Push changes
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git stash # 現在の変更を一時保存
git pull origin main # リモートの変更を取得
git stash pop # 保存した変更を復元
git add . # 変更をステージング
git commit -m "Format markdown files" || echo "No changes to commit"
git push origin main
で実現できた。
やっていることは以下の通りで、シンプル。
ワークフローのトリガー設定:
main
ブランチにプッシュされたときにこのワークフローが実行されます。
リポジトリのチェックアウト:
actions/checkout@v3
アクションを使ってリポジトリの全体(過去の履歴も含む)を取得します。
Node.jsのセットアップ:
actions/setup-node@v3
アクションを使い、Node.jsのバージョン18をインストールします。
Prettierのインストール:
npm install -g prettier
を使って、Markdownフォーマット用のツールであるPrettierをグローバルにインストールします。
Markdownファイルのフォーマット:
prettier --write "**/*.md"
コマンドで、リポジトリ内のすべてのMarkdownファイル(*.md
)をフォーマットします。
変更のプッシュ:
- 以下の手順でフォーマットした変更をリモートの
main
ブランチにプッシュします:git stash
で現在の変更を一時的に保存。git pull origin main
でリモートの最新変更を取得。git stash pop
で保存した変更を再適用。git add .
で変更をステージング。git commit
で変更をコミット(変更がない場合はスキップ)。git push origin main
で変更をリモートにプッシュ。
- 以下の手順でフォーマットした変更をリモートの
過去の試行錯誤を見るに、Token
とかを生成したりしているし、参考サイトにはToken
を生成している記事も多かった。
ただ、
GitHub Actionsでは、GITHUB_TOKENがデフォルトで自動的に適用される。このトークンはGitHubによって自動的に生成され、ワークフローのすべてのジョブで利用可能になっている。
とのこと。
Github
の方でアップデートがされたのか、そのおかげかしら?
過去の自分が何に躓いていたのかはわからないけれど、うまくいってよかった。