我试图运行以下Github工作流的PHP项目:
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的开发环境,由docker compose协调。Php composer和其他工具是从docker映像运行的。
似乎我错过了一些东西,因为缓存命中
正在发生,因为我在日志中看到:
2020-03-28T10:37:07.2837003Z Cache restored from key: Linux-composer-0dffe7e110c8249b30d4e46844fede7ea6b8e1433061bed12cbb9a2ae964e2bb
但是没有生效,因为安装作曲家依赖项步骤仍在运行和下载工件。我的期望是,要么不运行,要么运行,但不下载任何东西,因为它需要所有从恢复缓存。
有人知道我错过了什么吗?
更新
我确实接受了@edric的回答,因为在我提出问题的背景下,他的回答为我的问题提供了解决方案。虽然我说这不是完全的解决办法。
我需要删除条件:if:steps.composer-cache.outputs.cache!='true'
从最后一步开始运行其余的工作流。我确实注意到作曲家缓存被恢复了,并且作曲家安装没有运行,由于缺少依赖项,导致后来出现问题。没有if条件作曲家安装总是运行,但使用恢复的缓存。
这是因为您没有在缓存锁文件的步骤中设置一个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