Как получить доступ к матричным переменным в действиях Github

#python #github #continuous-integration #github-actions

#python #github #непрерывная интеграция #github-действия

Вопрос:

Я настроил рабочий процесс Github для своих нужд CI, и, похоже, он каким-то образом сбрасывает значения, присвоенные matrix переменным, в пустую строку всякий раз, когда я выполняю сравнение, используя matrix значения, например

 if: matrix.python-version == '3.8' amp;amp; matrix.toxenv=='quality'
 

и я указал runs-on: ${{ matrix.os }} , что это не удается, говоря:

Ошибка при оценке ‘runs-on’ для задания ‘run_tests’. (Строка: 12, Кол: 14): неожиданное значение «

если я укажу runs-on: ubuntu-20.04 , это будет работать просто отлично.

завершите рабочий процесс Github: (Я настроил переменные среды TOXENV, чтобы он параллельно запускал новое задание для каждой среды tox, и чтобы избежать ненужных сборок, выполняемых с каждым заданием (например, качество) и замедление заданий)

 on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  run_tests:
    name: Tests
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-20.04]
        python-version: ['3.5', '3.8', '3.9']
        toxenv: ['django22', 'django30','django31']
        include:
          - python-version: "3.8"
            toxenv: "quality"
        exclude:
          - python-version: "3.5"
            toxenv: "django30"
          - python-version: "3.5"
            toxenv: "django31"

    steps:
    - uses: actions/checkout@v2
    - name: setup python
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python-version }}

    - name: Install pip
      run: pip install -r requirements/pip.txt

    - name: Install Dependencies
      run: pip install -r requirements/ci.txt

    - name: Run Tests
      env:
        TOXENV: python${{ matrix.python-version }}-${{ matrix.toxenv }}
      run: tox

    # it'll run a separate job for quality checks with python 3.8
    - name: Run Quality
      if: matrix.python-version == '3.8' amp;amp; matrix.toxenv=='quality'
      env:
        TOXENV: ${{ matrix.toxenv }}
      run: tox

    - name: Run Coverage
      if: matrix.python-version == '3.8' amp;amp; matrix.toxenv=='django22'
      uses: codecov/codecov-action@v1
      with:
        flags: unittests
        fail_ci_if_error: true
 

Ответ №1:

Проблема связана с вашим include разделом. Я не знаю почему, но здесь вы должны полностью определить, для какой комбинации вы хотите добавить другую конфигурацию. Этот синтаксис будет работать:

 jobs:
  run_tests:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-20.04]
        python-version: ['3.5', '3.8', '3.9']
        toxenv: ['django22', 'django30','django31']
        include:
          - python-version: '3.8'
            toxenv: 'quality'
            os: [ubuntu-20.04]
        exclude:
          - python-version: '3.5'
            toxenv: 'django30'
          - python-version: '3.5'
            toxenv: 'django31'
    steps:
    - name: Get color
      run: echo "${{ matrix.os }} - ${{ matrix.python-version }} - ${{ matrix.toxenv }}"
 

Комментарии:

1. итак, любая конфигурация, которую мы добавляем в include раздел, должна содержать все ключи / значения, иначе для нее будет установлена пустая строка, для которой мы не указали никакого значения?

2. только что протестировал это, это работает! спасибо, и предположение, которое я сделал выше, верно, мы должны указать все ключи / значения для matrix include раздела in, которые мы обычно указываем.

3. Да, я тоже это нашел. Странно, но это работает 🙂