英文:
Laravel Github Workflow Action - Cache composer dependencies, not working as intended
问题
这是我的.github/workflow/staging.yml
设置
name: 部署到暂存环境
on:
push:
branches:
- staging
jobs:
部署到暂存环境:
runs-on: ubuntu-latest
steps:
- name: 检出代码
uses: actions/checkout@v2
- name: 缓存 Composer 依赖项
uses: actions/cache@v2
with:
path: vendor
key: composer-${{ hashFiles('**/composer.lock') }}
restore-keys: |
composer-
- name: 设置 PHP
uses: shivammathur/setup-php@v2
with:
php-version: 8.2
tools: composer:v2
coverage: none
- name: 安装项目依赖项
working-directory: ./application
run: composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader --no-dev
... 剩余的步骤
我的 Laravel 代码位于名为 application
的文件夹中(因此使用了 working-directory
指令)
我已经使用上述更改部署了应用程序,供应商文件缓存似乎已经“预热”。然后,在后续部署中,它看起来像这样:
正如您所见,它说还原了约 0 MB
的缓存供应商,在流程的其余部分中,它再次下载并安装了 Composer 依赖项(尽管 composer.lock
文件没有更改)
我尝试更改哈希检查位置,如下所示,但也没有帮助:
> composer-${{ hashFiles('./application/composer.lock') }}
这里可能出了什么问题?
英文:
This is my .github/workflow/staging.yml
setup
name: Deploy Staging
on:
push:
branches:
- staging
jobs:
deploy-staging:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Cache composer dependencies
uses: actions/cache@v2
with:
path: vendor
key: composer-${{ hashFiles('**/composer.lock') }}
restore-keys: |
composer-
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: 8.2
tools: composer:v2
coverage: none
- name: Install Project Dependencies
working-directory: ./application
run: composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader --no-dev
... rest of the steps
My laravel code exists inside a folder called application
(hence the use of working-directory
directive)
I've deployed the app once with the above changes and the vendor folder cache supposedly "warmed up". Then on subsequent deployment it looked like this:
as you can see, it said restored ~0 MB
of cached vendor and in the rest of the flow it downloads and installs the composer dependencies again (even though the composer.lock
file hasn't changed)
I tried changing hash checking location like this and it did not help either:
> composer-${{ hashFiles('./application/composer.lock') }}
Any ideas what might be going wrong here?
答案1
得分: 1
看起来你指定的 Composer 缓存路径不正确。
在你的工作流中,在运行 composer install 之前,你将工作目录设置为 ./application
,但缓存操作正在寻找根目录中的 vendor 文件夹。
你需要将缓存操作中的路径更改为 ./application/vendor
,然后正确缓存你的 Composer 依赖项,以便在后续运行中使用。
这是你工作流中更新后的缓存步骤:
- name: 缓存 Composer 依赖项
uses: actions/cache@v2
with:
path: ./application/vendor
key: composer-${{ hashFiles('**/composer.lock') }}
restore-keys: |
composer-
请记住,hashFiles('**/composer.lock')
将对你仓库中所有包括子目录中的 composer.lock 文件进行哈希。如果你有多个 composer.lock 文件,请考虑指定你想要的确切路径。
另外,请确保将 composer.lock 文件提交并推送到你的仓库,因为如果不包括在你的仓库中,GitHub actions runner 可能找不到它。
英文:
it seems that the path you have specified for the composer cache is incorrect.
In your workflow, you are setting the working directory to ./application
before running composer install, but the cache action is looking for the vendor folder in the root directory.
You need to change the path in the cache action to ./application/vendor
, this should then correctly cache your composer dependencies and make them available for subsequent runs.
Here's the updated caching step in your workflow:
- name: Cache composer dependencies
uses: actions/cache@v2
with:
path: ./application/vendor
key: composer-${{ hashFiles('**/composer.lock') }}
restore-keys: |
composer-
Remember that hashFiles('**/composer.lock') will hash all composer.lock files in your repository including in all subdirectories. If you have multiple composer.lock files, consider specifying the exact path to the one you want.
As well as, make sure the composer.lock file is committed and pushed into your repository, as the GitHub actions runner may not find it if it's not included in your repository.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论