🏦

global installしたNode.js製CLIをGitHub Actionsでキャッシュする

2023/09/18に公開

経緯

markdownlint-clispectral-cliなどの、npmやyarn等経由でしかインストールできないCLIをキャッシュしたかった。

結論

markdownlintをcacheして実行する例を示す。
他のCLIをキャッシュしたい場合はmarkdownlintmarkdownlint-cliとなっているところをpackageに合わせて変えれば良い。

# .github/workflows/lint.yml

# START: 関係ない
name: Lint
on:
  push:
    branches:
      - main
  pull_request:
permissions:
  contents: read
  pull-requests: write
# END: 関係ない
jobs:
  markdown-lint:
    runs-on: ubuntu-latest
    env:
      MARKDOWNLINT_CLI_VERSION: 0.36.0
    steps:
      - uses: actions/checkout@v4
      - name: Cache markdownlint-cli
        id: cache-markdownlint-cli
        uses: actions/cache@v3
        with:
          path: |
	    # コマンド名毎に変える `/usr/local/bin/{command_name}`
            /usr/local/bin/markdownlint
	    # パッケージ名毎に変える `/usr/local/lib/node_modules/{package_name}`
            /usr/local/lib/node_modules/markdownlint-cli
          key: ${{ runner.os }}-markdonwlint-cli-${{ env.MARKDOWNLINT_CLI_VERSION }}
      - if: steps.cache-markdownlint-cli.outputs.cache-hit != 'true'
        name: Install markdownlint-cli
        run: npm install -g markdownlint-cli@${{ env.MARKDOWNLINT_CLI_VERSION }}
      - run: markdownlint --config .markdownlint.yml '**/*.md'

Discussion