#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. Да, я тоже это нашел. Странно, но это работает 🙂