Действия GitHub: использовать переменные в определении матрицы?

У меня есть следующий код в конфигурации GitHub Action:

name: Build & Tests

on:
  pull_request:

env:
  CARGO_TERM_COLOR: always
  ZEROCOPY_MSRV: 1.61.0
  ZEROCOPY_CURRENT_STABLE: 1.64.0
  ZEROCOPY_CURRENT_NIGHTLY: nightly-2022-09-26

jobs:
  build_test:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        # See `INTERNAL.md` for an explanation of these pinned toolchain
        # versions.
        channel: [ ${{ env.ZEROCOPY_MSRV }}, ${{ env.ZEROCOPY_CURRENT_STABLE }}, ${{ env.ZEROCOPY_CURRENT_NIGHTLY }} ]
        target: [ "i686-unknown-linux-gnu", "x86_64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "aarch64-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "powerpc64-unknown-linux-gnu", "wasm32-wasi" ]
        features: [ "" , "alloc,simd", "alloc,simd,simd-nightly" ]
        exclude:
          # Exclude any combination which uses a non-nightly toolchain but
          # enables nightly features.
          - channel: ${{ env.ZEROCOPY_MSRV }}
            features: "alloc,simd,simd-nightly"
          - channel: ${{ env.ZEROCOPY_CURRENT_STABLE }}
            features: "alloc,simd,simd-nightly"

Я получаю следующую ошибку синтаксического анализа этого файла:

Invalid workflow file: .github/workflows/ci.yml#L19
You have an error in your yaml syntax on line 19

Похоже, что это относится к этой строке (на самом деле она единственная, но, может быть, нулевая индексация номеров строк?):

channel: [ ${{ env.ZEROCOPY_MSRV }}, ${{ env.ZEROCOPY_CURRENT_STABLE }}, ${{ env.ZEROCOPY_CURRENT_NIGHTLY }} ]

Есть ли способ использовать переменные в определении матрицы, как это? Или мне просто нужно жестко закодировать все?

Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
0
0
286
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Согласно документации (ссылка 1 и ссылка 2)

Переменные среды (на уровне рабочего процесса) доступны для steps всех заданий в рабочем процессе.

В вашем примере переменные среды используются на уровне job (внутри задания strategy/определения матрицы), а не внутри задания steps.

На этом уровне переменные среды не интерполируются интерпретатором GitHub.


Первая альтернатива

Жестко закодируйте значения внутри поля channel внутри вашей матрицы strategy:

Пример:

channel: [ "1.61.0", "1.64.0", "nightly-2022-09-26" ]

Однако вам придется делать это для каждого задания (плохо для обслуживания из-за дублированного кода).

Второй вариант

Используйте inputs (с многоразовым триггером рабочего процесса workflow_call или с триггером workflow_dispatch.

Пример:

on:
  workflow_dispatch: # or workflow_call
    inputs:
      test1:
        description: "Test1"
        required: false
        default: "test1"
      test2:
        description: "Test2"
        required: false
        default: "test2"
      test3:
        description: "Test3"
        required: false
        default: "test3"

jobs:
  build_test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        channel: [ "${{ inputs.test1 }}", "${{ inputs.test2 }}", "${{ inputs.test3 }}" ]

В этом случае inputs будет интерполирован интерпретатором GitHub.

Однако вам нужно будет инициировать рабочий процесс из другого рабочего процесса или через API GitHub для отправки входных данных (в некотором роде это дает вам больше гибкости со значениями, но увеличивает сложность).

Другие вопросы по теме