ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹Π΅ сборки

ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹Π΅ сборки Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ слоТных ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ², дСлая ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌΠΈ, Π³ΠΈΠ±ΠΊΠΈΠΌΠΈ ΠΈ эффСктивными.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹Π΅ сборки, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅:

  1. Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° мноТСствС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм ΠΈΠ»ΠΈ вСрсий языков программирования, минимизируя ΠΏΡ€ΠΈ этом Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ.
  2. Π‘ΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ объСм ΠΊΠΎΠ΄Π°, дСлая Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ чистым ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ Π·Π° счСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Π΄Π°Ρ‡.
  3. ДинамичСски ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ созданиСм ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π·Π°Π΄Π°Ρ‡, добавляя ΠΈΠ»ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ спСцифичСскиС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ, ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ формируя ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π½Π° основС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π²Π½Π΅ΡˆΠ½ΠΈΡ… событий.
  4. Π”Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ошибок, опрСдСляя, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ всС ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒΡΡ с ошибкой Π±Π΅Π· прСрывания всСго процСсса.
  5. Π£ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠΎΠΌ выполнСния Π·Π°Π΄Π°Ρ‡, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ использованиС рСсурсов Ρ€Π°Π½Π½Π΅Ρ€ΠΎΠ² ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΡƒ.

ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹Π΅ стратСгии выполнСния Π·Π°Π΄Π°Ρ‡

jobs.<job_id>.strategy ΠΈ jobs.<job_id>.strategy.matrix β€” это ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ элСмСнты Π² Ρ„Π°ΠΉΠ»Π°Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… процСссов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠΉ стратСгии выполнСния Π·Π°Π΄Π°Ρ‡.

jobs.<job_id>.strategy являСтся ΠΎΠ±Ρ‰Π΅ΠΉ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠ΅ΠΉ использования стратСгии, Π° jobs.<job_id>.strategy.matrix β€” ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² для создания мноТСства Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΉ Π·Π°Π΄Π°Ρ‡.

jobs.<job_id>.strategy, стратСгия выполнСния Π·Π°Π΄Π°Ρ‡

БСкция jobs.<job_id>.strategy Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ (<job_id>) ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ выполнСния. Π­Ρ‚Π° сСкция содСрТит настройки Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄ΡƒΡ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ мноТСствСнныС запуски.

jobs.<job_id>.strategy.matrix, матричная стратСгия

jobs.<job_id>.strategy.matrix ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для опрСдСлСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ Π·Π°Π΄Π°Ρ‡. Π’ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ нСсколько ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… присваиваСтся массив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

ΠŸΠΎΠ΄ΡΠ΅ΠΊΡ†ΠΈΡ jobs.<job_id>.strategy.matrix Π²Π½ΡƒΡ‚Ρ€ΠΈ strategy опрСдСляСт саму ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ. Π—Π΄Π΅ΡΡŒ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ массивы Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ…:

  • ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ нСсколько ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, python_version, runner);
  • для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ указываСтся массив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ;
  • CI/CD Π±Π΅Ρ€Π΅Ρ‚ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ этих Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ создаСт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ запуск (job run) Π·Π°Π΄Π°Ρ‡ΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

on:
  push:
 
jobs:
  build_and_test: # НазваниС Π·Π°Π΄Π°Ρ‡ΠΈ
    strategy:
      matrix: # ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹
        runner: ["ubuntu-latest"] # Π Π°Π½Π½Π΅Ρ€Ρ‹
        python_version: ["3.8", "3.9", "3.10"] # ВСрсии Python
    runs-on: ${{ matrix.runner }} # ИспользованиС Ρ€Π°Π½Π½Π΅Ρ€Π° ΠΈΠ· ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹
    steps:
      - name: Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Python
        uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python_version }} # Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²Π΅Ρ€ΡΠΈΡŽ Python ΠΈΠ· ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

  1. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ β€” ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ максимум 256 Π·Π°Π΄Π°Ρ‡ Π½Π° Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс.
  2. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ Π·Π°Π΄Π°Ρ‡Π°. НапримСр, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ пСрСмСнная version со значСниями [10, 12, 14] ΠΈ пСрСмСнная os со значСниями [ubuntu-latest, self-hosted], Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ 6 Π·Π°Π΄Π°Ρ‡ (3 вСрсии * 2 ОБ), Ρ‚ΠΎ GitVerse ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ максимизируСт количСство ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ выполняСмых Π·Π°Π΄Π°Ρ‡ Π² зависимости ΠΎΡ‚ доступности Ρ€Π°Π½Π½Π΅Ρ€ΠΎΠ².
  3. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ создания Π·Π°Π΄Π°Ρ‡ опрСдСляСтся порядком ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ β€” пСрвая указанная пСрСмСнная создаСт ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ процСссС.
  4. Доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ: опрСдСляСмыС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ становятся свойствами Π² контСкстС matrix. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π½ΠΈΡ… Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… частях Ρ„Π°ΠΉΠ»Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ синтаксис matrix.<имя_ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ>. НапримСр, matrix.version ΠΈ matrix.os позволят ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… version ΠΈ os, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования ΠΌΠ°Ρ‚Ρ€ΠΈΡ†

ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°

ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для запуска ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ значСниями ΠΎΠ΄Π½ΠΎΠΉ характСристики:

on:
  push:
 
jobs:
  example_job:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python_version: ['3.8', '3.9', '3.12']
    steps:
      - name: Install Python
        uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python_version }}

Π­Ρ‚ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс устанавливаСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ python_version, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ список вСрсий Python (['3.8', '3.9', '3.12']), ΠΈ запускаСт Π·Π°Π΄Π°Ρ‡Ρƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ вСрсии. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ вСрсия Python Ρ‡Π΅Ρ€Π΅Π· синтаксис ${{ matrix.python_version }}, пСрСдаваСмая Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ установки Python (actions/setup-python).

ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°

ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° позволяСт ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ нСсколько ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π³Π΄Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ Π·Π°Π΄Π°Ρ‡Π°:

on:
  push:
jobs:
  test_environment:
    strategy:
      matrix:
        architecture: ['x64', 'x86']
        python_version: ['3.8', '3.9', '3.12']
    runs-on: ubuntu-latest
    steps:
      - name: Install Python
        run: |
          echo "Install ${{ matrix.architecture }} python ${{ matrix.python_version }}"

Π—Π΄Π΅ΡΡŒ дСмонстрируСтся использованиС ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ для тСстирования срСды с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ комбинациями ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ ΠΈ вСрсий Python:

  • architecture Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄Π²Π΅ значСния β€” 'x86' ΠΈ 'x64', ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ Ρ†Π΅Π»Π΅Π²Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ для запуска тСстов;
  • python_version Π·Π°Π΄Π°Π΅Ρ‚ Ρ‚Ρ€ΠΈ вСрсии Python β€” '3.8', '3.9', '3.12'.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, запустится ΡˆΠ΅ΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡, выполняя ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡƒΡŽ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ ΠΈ вСрсий Python.

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° с массивом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠ°ΠΊ массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π­Ρ‚ΠΎ позволяСт Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, спСцифичныС для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:

matrix:
  environment:
    - name: production
    - name: staging
  database:
    - type: postgresql
      version: '13'
    - type: mysql
      version: '8.0'
      config: innodb_buffer_pool_size=1GB

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ дСмонстрируСтся использованиС массива ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, Ρ‡Ρ‚ΠΎ позволяСт Π³ΠΈΠ±ΠΊΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ окруТСния для Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹:

  • environment β€” опрСдСляСт Π΄Π²Π° окруТСния (production ΠΈ staging);
  • database β€” содСрТит ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ для PostgreSQL ΠΈ MySQL, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ настройки для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ вСрсии Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сочСтания Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ· этих ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ. НапримСр, конфигурация Π·Π°Π΄Π°Ρ‡ΠΈ для MySQL 8.0 Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ настройку Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±ΡƒΡ„Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΏΡƒΠ»Π° InnoDB.

ВсСго создаСтся Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… контСкста для выполнСния Π·Π°Π΄Π°Ρ‡:

- matrix.environment.name: production
  matrix.database.type: postgresql
  matrix.database.version: '13'
- matrix.environment.name: production
  matrix.database.type: mysql
  matrix.database.version: '8.0'
  matrix.database.config: innodb_buffer_pool_size=1GB
- matrix.environment.name: staging
  matrix.database.type: postgresql
  matrix.database.version: '13'
- matrix.environment.name: staging
  matrix.database.type: mysql
  matrix.database.version: '8.0'
  matrix.database.config: innodb_buffer_pool_size=1GB

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ

jobs.<job_id>.strategy.matrix.include, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ include прСдставляСт собой список ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ jobs.<job_id>.strategy.matrix.include для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ ΠΈΠ»ΠΈ добавлСния ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΠ²Ρ‹Ρ…:

  1. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ β€” ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡:Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° include Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, Ссли ΠΎΠ½ΠΈ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ значСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.
  2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ β€” Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· include нСльзя Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΈ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Π±Π΅Π· пСрСзаписи, ΠΎΠ½ создаСт Π½ΠΎΠ²ΡƒΡŽ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.

Π’Π°ΠΆΠ½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°:

  1. ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ значСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли Π² Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, include Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ Π΅Π³ΠΎ.
  2. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ значСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ пСрСзаписаны Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ значСниями ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² include.
  3. НСвозмоТныС для добавлСния ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ выполнСния.

ВсС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ include ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ послС exclude. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сначала ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· exclude, Π° Π·Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… (ΠΈΠ»ΠΈ Π½ΠΎΠ²Ρ‹Π΅) Ρ‡Π΅Ρ€Π΅Π· include, Ссли это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Ρ€Π°Π±ΠΎΡ‚Π° с include

on:
  push
 
strategy:
  matrix:
    city: [moscow, saint_petersburg]
    transport: [bus, train]
    include:
      - weather: sunny
      - weather: rainy
        transport: bus
      - city: moscow
        population: large
      - city: yekaterinburg
        transport: train

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ создано 6 Π·Π°Π΄Π°Ρ‡ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ комбинациями:

  • city: moscow, transport: bus, weather: rainy, population: large;
  • city: moscow, transport: train, population: large;
  • city: saint_petersburg, transport: bus, weather: rainy;
  • city: saint_petersburg, transport: train;
  • weather: sunny;
  • city: yekaterinburg, transport: train.

Π›ΠΎΠ³ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ include

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° include для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ возмоТностСй стандартной ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠΉ стратСгии. Π˜ΡΡ…ΠΎΠ΄Π½Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° состоит ΠΈΠ· Π³ΠΎΡ€ΠΎΠ΄ΠΎΠ² (city) ΠΈ Π²ΠΈΠ΄ΠΎΠ² транспорта (transport), ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ добавляСм Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ условия с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Π»ΠΎΠΊΠ° include.

Пошаговая Π»ΠΎΠ³ΠΈΠΊΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ:

  1. Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ 4 Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Π½Π°Π±ΠΎΡ€Π°:
   {city: moscow, transport: bus}
   {city: moscow, transport: train}
   {city: saint_petersburg, transport: bus}
   {city: saint_petersburg, transport: train}
  1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π°:{weather: sunny} Π±Π΅Π· совпадСния с ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈΡΡ, добавится ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ, ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ выглядят ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ
{city: moscow, transport: bus, weather: sunny}
{city: moscow, transport: train, weather: sunny}
{city: saint_petersburg, transport: bus}
{city: saint_petersburg, transport: train}
{weather: sunny}
  1. Π£Ρ‚ΠΎΡ‡Π½Π΅Π½ΠΈΠ΅ условий. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ запись {weather: rainy, transport: bus} примСняСт условиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Π·Π°Π΄Π°Ρ‡Π°ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌ транспорт bus.

  2. Π”ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ. Π—Π°Ρ‚Π΅ΠΌ ΠΈΠ΄Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ {city: moscow, population: large}, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ устанавливаСт свойство population Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π³ΠΎΡ€ΠΎΠ΄Π° Москва, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΌΠΈ.

  3. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π°. Если ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ совпадаСт Π½ΠΈ с ΠΎΠ΄Π½ΠΎΠΉ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ, ΠΎΠ½ автоматичСски становится ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ. Π’Π°ΠΊ, сочСтаниС {city: yekaterinburg, transport: train} Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π½ΠΎΠ²ΡƒΡŽ строку.

Π˜Ρ‚ΠΎΠ³ΠΎΠ²Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

- {city: moscow, transport: bus, weather: rainy, population: large}
- {city: moscow, transport: train, population: large}
- {city: saint_petersburg, transport: bus, weather: rainy}
- {city: saint_petersburg, transport: train}
- {weather: sunny}
- {city: yekaterinburg, transport: train}

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, инструкция include ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ спСцифичСскиС случаи ΠΈΠ»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ стандартныС ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹Π΅ схСмы, обСспСчивая Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ гибкости Π² настройкС Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… процСссов.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈ снова include

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π΄Π²ΡƒΡ… языках программирования (Python, JavaScript):

on:
  push:
 
jobs:
  test_applications:
    strategy:
      matrix:
        runner: [linux, windows, macos]
        language: [python, javascript]
        include:
          - runner: linux
            language: python
            additional_test: database_tests
          - runner: macos
            language: javascript
            additional_test: performance_tests
    runs-on: ubuntu-latest
    steps:
      - name: Setup Environment
        run: |
          echo "Use ${{ matrix.language }}"
      - name: Standard Test Suite
        run: |
          echo "Running standard tests..."
      - if: ${{ matrix.additional_test }}
        name: Additional Test Suite
        run: |
          echo "Running additional ${{ matrix.additional_test }}..."

Базовая ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° состоит ΠΈΠ· ΡˆΠ΅ΡΡ‚ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ (Ρ‚Ρ€ΠΈ ОБ Γ— Π΄Π²Π° языка программирования).

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° include добавляСт Π΄Π²Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ:

Ubuntu + Python β†’ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ тСсты Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… (database_tests).

Windows + JavaScript β†’ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ тСсты ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (performance_tests).

Π­Ρ‚ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ тСсты Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… случаСв благодаря условному Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ шага if: ${{ matrix.additional_test }}.

Π’ ΠΈΡ‚ΠΎΠ³Π΅, Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ восСмь ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Π½ΠΈΠΉ, ΡˆΠ΅ΡΡ‚ΡŒ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ стандартныС тСсты, Π° Π΄Π²Π° β€” Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.

jobs.<job_id>.strategy.matrix.exclude, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ jobs.<job_id>.strategy.matrix.exclude для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ ΠΈΠ· ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹. Для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ достаточно частичного совпадСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ β€” Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ всС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

ВсС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ exclude ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π΄ include. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сначала ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· exclude, Π° Π·Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… (ΠΈΠ»ΠΈ Π½ΠΎΠ²Ρ‹Π΅) Ρ‡Π΅Ρ€Π΅Π· include, Ссли это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ

on:
  push:
 
jobs:
  display_combinations:
    strategy:
      matrix:
        region: [us-east, eu-central]
        instance_type: [small, medium, large]
        service: [web-app, api-gateway]
        exclude:
          - region: us-east
            instance_type: small
            service: web-app
          - region: eu-central
            instance_type: large
    runs-on: ubuntu-latest
    steps:
      - name: Display Combinations
        run: |
          echo "Region: ${{ matrix.region }}, Instance Type: ${{ matrix.instance_type }}, Service: ${{ matrix.service }}"

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ exclude:

  • Region: us-east, Instance Type: small, Service: api-gateway;
  • Region: us-east, Instance Type: medium, Service: web-app;
  • Region: us-east, Instance Type: medium, Service: api-gateway;
  • Region: us-east, Instance Type: large, Service: web-app;
  • Region: us-east, Instance Type: large, Service: api-gateway;
  • Region: eu-central, Instance Type: small, Service: web-app;
  • Region: eu-central, Instance Type: small, Service: api-gateway;
  • Region: eu-central, Instance Type: medium, Service: web-app;
  • Region: eu-central, Instance Type: medium, Service: api-gateway.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, наглядно продСмонстрирована Ρ€Π°Π±ΠΎΡ‚Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ exclude: ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ процСсса, ΠΈ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π°Π»ΠΈΠ΄Π½Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ количСство Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³ΠΎΠ½ΠΎΠ² ΠΈ оптимизируя процСсс Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ.

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ GitVerse максимизируСт количСство ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ выполняСмых Π·Π°Π΄Π°Ρ‡ Π² зависимости ΠΎΡ‚ доступности runner’ов. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли Ρƒ вас достаточно рСсурсов, всС Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈΠ· ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

Для ограничСния максимального количСства ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ выполняСмых Π·Π°Π΄Π°Ρ‡ ΠΏΡ€ΠΈ использовании ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠΉ стратСгии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€:

jobs.<job_id>.strategy.max-parallel, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния

Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ позволяСт Π²Π°ΠΌ Π·Π°Π΄Π°Ρ‚ΡŒ максимальноС число Π·Π°Π΄Π°Ρ‡ ΠΈΠ· ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для управлСния Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π½Π½Π΅Ρ€Ρ‹ ΠΈΠ»ΠΈ для соблюдСния ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° рСсурсы.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ограничСния ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния:

on:
  push:
 
jobs:
  parallel_matrix:
    runs-on: ubuntu-latest
    strategy:
      max-parallel: 2 # сСйчас это максимальноС количСство ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Π½Π° GitVerse
      matrix:
        version: [10, 12, 14]
        runner: [ubuntu-latest, windows-latest]
    steps:
      - name: Show OS version
        run: |
          echo "OS: ${{ matrix.os }}"
          echo "Version: ${{ matrix.version }}"

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, нСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° сгСнСрируСт 6 ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ (3 вСрсии Γ— 2 ОБ), ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 2 Π·Π°Π΄Π°Ρ‡. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΆΠ΄Π°Ρ‚ΡŒ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΏΠΎΠΊΠ° Π½Π΅ освободятся рСсурсы.

Π’Ρ‹ нашли Ρ‡Ρ‚ΠΎ искали?