Как я могу запустить некоторые шаги и пропустить, когда определенные файлы или папки изменились в действиях github?

Я пытаюсь создать конвейер с условиями if.

Когда я пытаюсь изменить файл или папку в папке foo2 или foo, некоторые тесты должны быть пропущены. Но все шаги выполняются вместо пропуска некоторых тестов. Потому что я только изменил файлы в папке. Не оба.

Я использую это действие для фильтра изменений путей: dorny/paths-filter@v2

Например, часть «# уменьшить файлы для каждого проекта» в файле YAML не работает должным образом. Когда я меняю только одну папку, все шаги этой части работают. Но не должно.

Мой каталог файлов выглядит следующим образом:

  • гитхаб

    • рабочие процессы
      • main.yml
  • фу

    • js

      .bc-global.js

      • прямой эфир

        .global-bundle.js

        .script-bundle.js

      • сценарии

        .script1.js

        .script2.js

        .script3.js

Каталог папки Foo2 такой же, как и папка foo.

Это мой файл YAML:

name: Upload to S3

on:
  push:
    branches:
      - test-s3
    paths:
      - "foo/js/bc-global.js"
      - "foo/js/scripts/**.js"
      - "foo2/js/lc-global.js"
      - "foo2/js/scripts/**.js"

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@master
      - uses: actions/checkout@v2
      - uses: dorny/paths-filter@v2
        id: changes
        with:
          filters: |
            foo:
              - 'foo/js/bc-global.js'
              - 'foo/js/scripts/**.js'
            foo2:
              - 'foo2/js/lc-global.js'
              - 'foo2/js/scripts/**.js'

      - name: Install node
        uses: actions/setup-node@v3
        with:
          node-version: 16.13.0
          registry-url: "https://registry.npmjs.org"

      - name: Install uglify-js
        run: npm install uglify-js -g

      # minify files for each project
      - name: minify script files for foo
        if: steps.changes.outputs.foo == 'true'
        run: uglifyjs foo/js/scripts/**.js -o foo/js/live/scripts-bundle.js
      - name: minify global file for foo
        if: steps.changes.outputs.foo == 'true'
        run: uglifyjs foo/js/bc-global.js -o foo/js/live/global-bundle.js

      - name: minify script files for foo2
        if: steps.changes.outputs.foo2 == 'true'
        run: uglifyjs foo2/js/scripts/**.js -o foo2/js/live/scripts-bundle.js
      - name: minify global file for foo2
        if: steps.changes.outputs.foo2 == 'true'
        run: uglifyjs foo2/js/lc-global.js -o foo2/js/live/global-bundle.js

      # Auto committing
      - name: Auto committing minified files
        uses: stefanzweifel/git-auto-commit-action@v4
        with:
          file_pattern: "*.js"
          commit_message: "Github Action: Auto Minified JS files"
          branch: ${{ github.ref }}

      # Deploy for foo
      - name: Deploy to S3 for foo
        if: steps.changes.outputs.foo == 'true'
        uses: jakejarvis/s3-sync-action@master
        with:
          args: --follow-symlinks --cache-control max-age=600
        env:
          AWS_S3_BUCKET: ${{ secrets.AWS_BUCKET_NAME }}
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_REGION: ${{ secrets.AWS_REGION }}
          SOURCE_DIR: "foo/js/live"
          DEST_DIR: "foo/pages/assets/js/test/"

        # Deploy for foo2
      - name: Deploy to S3 for foo2
        if: steps.changes.outputs.foo2 == 'true'
        uses: jakejarvis/s3-sync-action@master
        with:
          args: --follow-symlinks --cache-control max-age=600
        env:
          AWS_S3_BUCKET: ${{ secrets.AWS_BUCKET_NAME }}
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_REGION: ${{ secrets.AWS_REGION }}
          SOURCE_DIR: "foo2/js/live"
          DEST_DIR: "foo2/pages/assets/js/test/"

Реализация меня устраивает. Пробовали ли вы напечатать steps.changes.outputs.foo и steps.changes.outputs.foo2 перед их использованием, чтобы проверить, соответствуют ли значения ожидаемым?

GuiFalourd 13.10.2022 13:19

Да, точно. Мне тоже кажется хорошо. Как я могу их проверить? Я не понимаю. Нравится проверка console.info? Кроме того, я попытался изменить каждый из них на false. Он пропускает шаги, когда я изменил их на false. Это действительно странно. @GuiFalourd

ffcabbar 13.10.2022 13:55

Вы можете просто сделать что-то вроде run: echo ${{ steps.changes.outputs.foo }} (то же самое для foo2) в своем рабочем процессе после шага changes.

GuiFalourd 13.10.2022 15:20

Большое спасибо! Я пробовал. Это дает истину для всего, действительно странно. Я создал проблему на github для этого.

ffcabbar 13.10.2022 15:31
Редкие достижения на Github ✨
Редкие достижения на Github ✨
Редкая коллекция доступна в профиле на GitHub ✨
0
4
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это решило. Я добавил эту строку (базу) над разделом фильтров:

    with:
      base: ${{ github.ref }}
      filters: |
        foo:
          - 'foo/js/bc-global.js'
          - 'foo/js/scripts/**.js'
        foo2:
          - 'foo2/js/lc-global.js'
          - 'foo2/js/scripts/**.js'

Другие вопросы по теме