У меня есть следующий код в конфигурации 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 }} ]
Есть ли способ использовать переменные в определении матрицы, как это? Или мне просто нужно жестко закодировать все?

Согласно документации (ссылка 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 для отправки входных данных (в некотором роде это дает вам больше гибкости со значениями, но увеличивает сложность).