GitHub Actions - Composer 由于 PHP 版本限制而失败

Posted

技术标签:

【中文标题】GitHub Actions - Composer 由于 PHP 版本限制而失败【英文标题】:GitHub Actions - Composer failing because of PHP Version constraint 【发布时间】:2021-01-05 22:28:03 【问题描述】:

我正在尝试通过 GitHub Actions 在 pull_request 上运行我的单元测试。

当我更新我的 PR 时,我可以看到正在运行的操作,但 php 版本在尝试 Composer 安装我的项目时没有更新。

Command: composer install --no-interaction --no-suggest --no-progress
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - This package requires php ~7.3.0 but your PHP version (7.4.10) does not satisfy that requirement.

我尝试了多个不同的工作流文件,这是给我最大控制权的一个,但它似乎仍在 php 7.4 上运行。

name: Run Tests

on:
  pull_request:
    branches:
      - master

jobs:
  build:
    runs-on: $ matrix.operating-system 
    strategy:
      matrix:
        operating-system: [ubuntu-latest]
        php-versions: ['7.3']

    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2
      - uses: shivammathur/setup-php@v2
        with:
          php-version: $ matrix.php-versions 
      - uses: php-actions/composer@v2
      - uses: php-actions/phpunit@v8

最后,这是我的作曲家 json 中的 sn-p,它显示了约束:

"require": 
    "php": "~7.3.0",
    "guzzlehttp/guzzle": "^7.0"
,
"require-dev": 
    "phpunit/phpunit": "^8"

【问题讨论】:

也可以确认 shivammathur/setup-php@v2 步骤先运行,并回复:PHP Switched to PHP 7.3.22 是什么让您认为完全不同的操作(如php-actions/composer@v2)知道要使用哪个PHP 版本?据我所知,它使用不同的容器 有吗?我对 github 操作有点陌生。我认为构建设置了容器,并且所有步骤都在构建上运行。为什么作曲家需要启动一个新容器?如果 checkout 是检查你的 repo 的东西,并且你想在你的容器上进行 composer install ,那将如何工作。如果 composer@v2 操作启动一个新容器并执行......它到底有什么意义? 如果您将其写为答案,我会将其标记为完成。感谢您的建议,我能够直接运行作曲家,而不是通过一个动作。当作曲家有能力修复版本时,似乎对包所有者强制使用 PHP 版本有点限制!我没有意识到每一步都是它自己的容器! 【参考方案1】:

您可以通过添加 .github/workflows/YOURACTION.yaml

来强制作曲家操作的 PHP 版本
  - name: Build Composer
    uses: php-actions/composer@v5
    with:
      ssh_key: $ secrets.ssh_key 
      ssh_key_pub: $ secrets.ssh_key_pub 
      php_version: 7.2

注意我是在 Composer 步骤而不是在 shivammathur/setup-php@v2 试着把这一步全部去掉,你可能根本不需要它。

在此处查看更多信息:https://github.com/marketplace/actions/composer-php-actions

【讨论】:

这是模块所有者最近推出的一项新功能。几个月前我在 reddit 上与他交谈过,他确认你现在可以做到这一点!好消息:)

以上是关于GitHub Actions - Composer 由于 PHP 版本限制而失败的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 GitHub Actions 中的 Actions 之间保留 WORKDIR?

github Actions 使用方法

如何使用 Github Actions 进行 SFTP?

使用GitHub Actions自动构建DockerHub镜像

如何运行 github-actions 步骤,即使上一步失败,但仍使作业失败

4个提高效率的GitHub Actions技巧