Github操作/缓存对我的工作流程没有影响

时间:2020-03-28 11:09:57

标签: docker caching composer-php github-actions

我正在尝试为php项目运行以下Github工作流程:

name: CI

on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    env:
      DB_NAME: ${{ secrets.DB_NAME }}
      DB_USER: ${{ secrets.DB_USER }}
      DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
      MYSQL_ROOT_PASSWORD: ${{ secrets.MYSQL_ROOT_PASSWORD }}

    steps:
    - uses: actions/checkout@v2

    - name: Set up the CI environment
      run: |
        envsubst < src/.env.ci > src/.env
        docker pull composer
        alias composer="docker run --rm --interactive --tty --volume $(pwd):/app --volume ${COMPOSER_HOME:-$HOME/.composer}:/tmp --user $(id -u):$(id -g) composer"
        composer --version

    - name: Get Composer Cache Directory
      id: composer-cache
      run: |
        echo "::set-output name=dir::$(composer config cache-files-dir)"

    - uses: actions/cache@v1
      with:
        path: ${{ steps.composer-cache.outputs.dir }}
        key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
        restore-keys: |
          ${{ runner.os }}-composer-

    - name: Install composer dependencies
      if: steps.composer-cache.outputs.cache-hit != 'true'
      run: composer install

情况如下。我有一个基于docker-compose的基于docker的开发环境。 PHP撰写器和其他工具从docker映像运行。

似乎我在这里丢失了一些东西,因为cache-hit正在发生,正如我在日志中看到的那样:

2020-03-28T10:37:07.2837003Z Cache restored from key: Linux-composer-0dffe7e110c8249b30d4e46844fede7ea6b8e1433061bed12cbb9a2ae964e2bb

但未生效,因为步骤Install composer dependencies仍在运行并且正在下载工件。我的期望是要么不运行,要么不下载任何东西,因为它从恢复的缓存中获取全部。

有人知道我想念什么吗?

更新

我确实接受了@edric的回答,因为在这种情况下,我提出问题时,他的回答为我的问题提供了解决方案。尽管我之以鼻,但这并不是完全解决方案。

我需要删除条件:if: steps.composer-cache.outputs.cache-hit != 'true',以便使其余工作流程正常运行。我确实注意到作曲家缓存是 已还原,并且composer install未运行,由于缺少依赖项,稍后会导致问题。没有if condition composer安装程序将始终运行,但使用已还原的缓存。

1 个答案:

答案 0 :(得分:0)

那是因为您没有在缓存锁文件的步骤中设置ID,并且在接下来的步骤中还使用了错误的ID来检查是否命中了缓存。我建议您将检索缓存目录的步骤的ID重命名为其他ID,以免混淆自己:

- name: Get Composer Cache Directory
  id: get-composer-cache-dir # Instead of composer-cache
  run: |
    echo "::set-output name=dir::$(composer config cache-files-dir)"
- name: Cache Composer
  uses: actions/cache@v1
  id: composer-cache
  with:
        path: ${{ steps.get-composer-cache-dir.outputs.dir }}
        key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
        restore-keys: |
          ${{ runner.os }}-composer-
- name: Install composer dependencies
  if: steps.composer-cache.outputs.cache-hit != 'true'
  run: composer install