测试包时如何在 github 操作上强制使用 symfony 版本

How to force a symfony version on github actions when testing a bundle

我正在尝试使用 github 操作在不同版本的 Symfony 上测试一个包。我尝试按照 Best practices for reusable bundles

中的说明配置我的工作

这是我的工作:

name: Bundle test

on:
  push: ~
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ${{ matrix.operating-system }}
    strategy:
      matrix:
        operating-system: [ ubuntu-latest ] #, windows-latest ]
        php: [ '7.4', '8.0' ]
        symfony: ['4.4', '5.2', '5.3']
    name: On ${{ matrix.operating-system }} with PHP ${{ matrix.php }} and Symfony ${{ matrix.symfony }}
    steps:
      - uses: actions/checkout@master

      - name: Validate composer.json
        run: composer validate --strict

      - name: Setup PHP ${{ matrix.php }}
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php }}
        run: php -v

      - name: Export Symfony version ${{ matrix.symfony }}
        run: export SYMFONY_REQUIRE=${{ matrix.symfony }}

      - name: Install symfony/flex
        run: composer global require --no-progress --no-scripts --no-plugins symfony/flex

      - name: Composer update on php ${{ matrix.php }} and symfony ${{ matrix.symfony }}
        run: composer update --prefer-dist --no-progress

即使我使用 symfony/flex 导出 Symfony 版本,作曲家总是安装 Symfony 5.3(这是当前的稳定版本)

Composer update on php 7.4 and symfony 4.4
Run composer update --prefer-dist --no-progress
Loading composer repositories with package information
Updating dependencies
Lock file operations: 85 installs, 0 updates, 0 removals
 ... ... ... ...
  - Locking symfony/console (v5.3.0)

如果需要,这里是我的 composer.json 文件的需求行:

{
    ...
    "require": {
        "php": "^7.4|^8.0",
        "symfony/security-bundle": "^4.4|^5.2|^5.3"
    },
    "require-dev": {
        "phpunit/phpunit": "9.*",
        "friendsofphp/php-cs-fixer": "^2.19",
        "nyholm/symfony-bundle-test": "^1.7"
    },
    ...
}

编辑:在我的本地开发计算机上,它工作正常,当我 运行:

export SYMFONY_REQUIRE=5.2
symfony composer global require --no-progress --no-scripts --no-plugins symfony/flex
symfony composer update --prefer-dist --no-progress

似乎 export 命令不是环境防护的。

最后,我删除了这些行:

  - name: Export Symfony version ${{ matrix.symfony }}
    run: export SYMFONY_REQUIRE=${{ matrix.symfony }}

并更新了最后一行:

  - name: Composer update on php ${{ matrix.php }} and symfony ${{ matrix.symfony }}
    run: composer update --prefer-dist --no-progress

  - name: Composer update on php ${{ matrix.php }} and symfony ${{ matrix.symfony }}
    run: SYMFONY_REQUIRE=${{ matrix.symfony }} composer update --prefer-dist --no-progress

这可能是部分解决方案,因为我猜它会在 windows-os 上失败。