Множественные рабочие процессы GitHub не запускаются

Вопрос или проблема

Множественные рабочие процессы GitHub не запускаются

У меня проблема с рабочими процессами. У меня есть несколько файлов в директории .github/workflows. Для целей данного поста, давайте скажем, что их два: build.yml и cypress.yml. Я хочу запускать рабочий процесс/задачу только в том случае, если выполнены критерии paths, чтобы тесты cypress не запускались, пока не будет добавлен/изменен файл *.test-cy.tsx.

name: CI

on:
  push:
    paths: ["**/*", "!.github/**/*"]

jobs:
  build:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [20.x]

    steps:
      - uses: actions/checkout@v3
      - name: Использовать Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          cache: "npm"
          cache-dependency-path: "package-lock.json"
      - run: npm ci
      - run: npm run build --if-present
      - run: npm run build-storybook --if-present
name: Cypress

on:
  push:
    paths: ["src/**/*.test-cy.{js,jsx,ts,tsx}"]

jobs:
  test:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [20.x]

    steps:
      - uses: actions/checkout@v3
      - name: Использовать Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          cache: "npm"
          cache-dependency-path: "package-lock.json"
      - run: npm ci
      - run: npm run test:cypress --if-present

Когда я отправляю коммит, запускается только первый процесс. Я пытался также сделать это в одном рабочем процессе с несколькими задачами, но не смог найти правильное условие для if:.

Это шпаргалка по паттернам фильтрации для github action. Здесь нет символов { и }. Это может сработать:

name: Cypress

on:
  push:
    paths:
      - 'src/**/*.test-cy.tsx?'
      - 'src/**/*.test-cy.jsx?'

jobs:
  test:
    runs-on: ubuntu-latest

Ответ или решение

Ваша проблема со срабатыванием нескольких рабочих процессов в GitHub Actions может быть связана с тем, как вы настраиваете триггеры для каждого рабочего процесса. Давайте рассмотрим детали и предложим решение.

Вы описали, что у вас есть два файла в каталоге .github/workflows: build.yml и cypress.yml. Цель состоит в том, чтобы тесты Cypress запускались только тогда, когда определенные файлы с расширением *.test-cy.tsx добавлены или изменены, при этом рабочий процесс сборки build.yml должен запускаться на все изменения в коде, кроме файлов в директории .github.

В вашем текущем варианте рабочего процесса Cypress, триггер настроен на следующие пути:

on:
  push:
    paths: ["src/**/*.test-cy.{js,jsx,ts,tsx}"]

Однако у вас также есть другие файлы с расширениями, которые могут не соответствовать вашим ожиданиям. Вам нужно исправить определение путей в cypress.yml. Попробуйте следующий подход:

Шаг 1: Исправление cypress.yml

Избегайте использования символа {}. Вместо этого укажите пути более явно:

name: Cypress

on:
  push:
    paths:
      - 'src/**/*.test-cy.tsx'
      - 'src/**/*.test-cy.jsx'

jobs:
  test:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [20.x]

    steps:
      - uses: actions/checkout@v3
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          cache: "npm"
          cache-dependency-path: "package-lock.json"
      - run: npm ci
      - run: npm run test:cypress --if-present

Шаг 2: Объединение рабочих процессов (опционально)

Если вы хотите объединить оба рабочих процесса в один и применять условия, вы можете использовать директиву if: для выполнения отдельных заданий в зависимости от изменений файлов:

name: CI

on:
  push:
    paths: ["**/*", "!.github/**/*"]

jobs:
  build:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [20.x]

    steps:
      - uses: actions/checkout@v3
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          cache: "npm"
          cache-dependency-path: "package-lock.json"
      - run: npm ci
      - run: npm run build --if-present
      - run: npm run build-storybook --if-present

  test:
    runs-on: ubuntu-latest
    needs: build
    if: ${{ github.event_name == 'push' && (github.event.head_commit.message contains 'test-cy') }} # Условие для тестов.

    strategy:
      matrix:
        node-version: [20.x]

    steps:
      - uses: actions/checkout@v3
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          cache: "npm"
          cache-dependency-path: "package-lock.json"
      - run: npm ci
      - run: npm run test:cypress --if-present

Заключение

Теперь ваши рабочие процессы будут правильно срабатывать в соответствии с заданными условиями. Убедитесь, что ваши коммиты содержат изменения в соответствующих файлах при тестировании. Если у вас есть другие вопросы или проблемы, не стесняйтесь задавать их!

Оцените материал
Добавить комментарий

Капча загружается...