如何在 GitHub 操作中缓存已安装的工具?

How do I cache an installed tool between runs in GitHub Actions?

我需要 运行 poetry version 来获取 pyproject.toml 每次推送到 master touching pyproject.toml 的版本。但是,由于 Poetry 未安装在 GitHub Actions 运行ner 虚拟环境中,我还需要先安装它才能 运行 任何 Poetry 命令。我想缓存此工具安装,这样我就不必在每个 运行 上安装它并用完 Actions 分钟。我唯一需要 运行 的 Poetry 命令是 poetry version,所以我不担心该工具已过时 - 它只需要解析 pyproject.toml 并获取项目版本号。我也不确定使用什么作为缓存操作的 key - 我假设它可以是静态的

所需的操作顺序类似于:

  1. 查看存储库。
  2. 检查诗歌的缓存。如果没有安装,请安装它。
  3. 运行 poetry version.

actions/cache@v2key 输入可以是字符串 - 可以任意输入。 path 输入是工具的位置。

潜在陷阱:

  • 请注意,path 参数不会像 $HOME 那样解析环境变量,但波浪号 (~) 可用于表示主目录。
  • 诗歌必须在每个 运行 之前添加到 PATH,因为在 运行 之间不保留默认环境变量。
  • Poetry 可能会抱怨它很快就会放弃对 Python2 的支持 - 以确保它是 运行 Python 3,确保使用 运行 中的任何 Python 3个版本。
on:
  push:
    branches:
      - master
    paths:
      - 'pyproject.toml'

jobs:
  pyproject-version:
    runs-on: 'ubuntu-latest'
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Setup Python
        uses: actions/setup-python@v2
        with:
          python-version: '3.7'
      # Perma-cache Poetry since we only need it for checking pyproject version
      - name: Cache Poetry
        id: cache-poetry
        uses: actions/cache@v2
        with:
          path: ~/.poetry
          key: poetry
      # Only runs when key from caching step changes
      - name: Install latest version of Poetry
        if: steps.cache-poetry.outputs.cache-hit != 'true'
        run: |
          curl -sSL https://install.python-poetry.org | python -
      # Poetry still needs to be re-prepended to the PATH on each run, since
      # PATH does not persist between runs.
      - name: Add Poetry to $PATH
        run: |
          echo "$HOME/.poetry/bin" >> $GITHUB_PATH
      - name: Get pyproject version
        run: poetry version