В демонстрационных целях мы собираемся провести наши тесты как для последних, так и для ночных выпусков Crystal, а также запустить их как на Linux, так и на macOS. Как упоминалось ранее, не стесняйтесь настраивать платформы по своему усмотрению. GitHub Actions поддерживает концепцию, называемую матрицами
, которая позволяет нам определить одно задание, которое будет создавать дополнительные задания для каждой комбинации. Мы доберемся до этого в ближайшее время. Во-первых, давайте сосредоточимся на двух более простых задачах — стандартах форматирования и кодирования.Обновите карту вакансий нашего файла ci.yml, чтобы она выглядела следующим образом:
jobs:
check_format:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install Crystal
uses: crystal-lang/install-crystal@v1
- name: Check Format
run: crystal tool format --check
coding_standards:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install Crystal
uses: crystal-lang/install-crystal@v1
- name: Install Dependencies
run: shards install
- name: Ameba
run: ./bin/ameba
На высоком уровне эти профессии очень похожи. Мы настроили их для работы в последней версии Ubuntu, используя последний Crystal Alpine Docker image
. Конечно, шаги для каждого из них немного отличаются, но оба они начинаются с проверки кода вашего проекта.Для проверки форматирования можно просто запустить run crystal tool format --check
run shards install
для установки Ameba. Наконец, он запускает Ameba, которая также вернет ненулевой код выхода в случае сбоя. Далее давайте перейдем к заданию, которое будет запускать наши тесты.Добавьте следующий код в карту заданий:
test:
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- macos-latest
crystal:
- latest
- nightly
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
- name: Install Crystal
uses: crystal-lang/install-crystal@v1
with:
crystal: ${{ matrix.crystal }}
- name: Install Dependencies
run: shards install
- name: Specs
run: crystal spec --order=random --error-on- warnings
Эта работа немного сложнее двух последних. Давайте сломаем это!
В этом задании представлено отображение
false
, чтобы, например, ночной сбой Crystal на определенной платформе не приводил к сбою всех остальных заданий.Как упоминалось ранее, отображение матрицы, как следует из названия, позволяет определить матрицу, которая будет создавать задание для каждой комбинации значений матрицы. В итоге наша матрица определит четыре вакансии:
• Последняя версия Crystal для Ubuntu
• Crystal Nightly в Ubuntu
• Последняя версия Crystal для macOS.
• Crystal Nightly на macOS.
Дополнительные части конфигурации задания шаблонизированы для использования значений из матрицы, например для указания того, на чем выполняется задание и какую версию Crystal установить. Мы также используем https://github.com/crystal-lang/install-
crystal для установки Crystal, который работает кросс-платформенно.Затем мы запускаем shards install