diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 56916183..bc6edbeb 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -17,17 +17,54 @@ on: push: branches: [main] pull_request: - types: [opened, synchronize, reopened, ready_for_review] + types: [opened, synchronize, reopened, ready_for_review, edited] +defaults: + run: + shell: bash --noprofile --norc -x -euo pipefail {0} + jobs: + pr-trigger: + name: 'PR Trigger Filter' + runs-on: ubuntu-latest + outputs: + should-test: ${{ steps.filter.outputs.should-test }} + should-build: ${{ steps.filter.outputs.should-build }} + + steps: + - name: 'Filter body' + if: ${{ github.event_name == 'pull_request' && github.event.action == 'edited' }} + id: filter + run: | + echo "should-test=false" >> $GITHUB_OUTPUT + echo "should-build=false" >> $GITHUB_OUTPUT + jq . "$GITHUB_EVENT_PATH" + new_body=$(jq -r '.pull_request.body' "$GITHUB_EVENT_PATH") + old_body=$(jq -r '.changes.body.from' "$GITHUB_EVENT_PATH") + if ! [[ "$new_body" =~ '- [x] *Run* checks:' && "$old_body" =~ '- [ ] *Run* checks:' ]]; then + exit 0 + fi + if [[ "$new_body" =~ '- [x] all' ]]; then + echo "should-test=true" >> $GITHUB_OUTPUT + echo "should-build=true" >> $GITHUB_OUTPUT + fi + if [[ "$new_body" =~ '- [x] tests' ]]; then + echo "should-test=true" >> $GITHUB_OUTPUT + fi + if [[ "$new_body" =~ '- [x] build app' ]]; then + echo "should-build=true" >> $GITHUB_OUTPUT + fi + paths-filter: + needs: pr-trigger + if : ${{ github.event_name != 'pull_request' || needs.pr-trigger.outputs.should-test == 'true' || needs.pr-trigger.outputs.should-build == 'true' }} name: 'Paths Filter' uses: ./.github/workflows/paths-filter.yml - + tests: name: 'Tests' - needs: [paths-filter] - if: ${{ !inputs.skip-tests && github.event.pull_request.draft != true && needs.paths-filter.outputs.should-test != 'false' }} + needs: [paths-filter, pr-trigger] + if: ${{ !inputs.skip-tests && github.event.pull_request.draft != true && needs.paths-filter.outputs.should-test != 'false' && (github.event_name != 'pull_request' || needs.pr-trigger.outputs.should-test == 'true') }} uses: grigorye/ReusableWorkflows/.github/workflows/tests-generic.yml@v20 secrets: inherit with: @@ -38,8 +75,8 @@ jobs: build-app: name: 'App' - needs: [paths-filter] - if: ${{ !inputs.skip-build-app && github.event.pull_request.draft != true && needs.paths-filter.outputs.should-build != 'false' }} + needs: [paths-filter, pr-trigger] + if: ${{ !inputs.skip-build-app && github.event.pull_request.draft != true && needs.paths-filter.outputs.should-build != 'false' && (github.event_name != 'pull_request' || needs.pr-trigger.outputs.should-build == 'true') }} uses: grigorye/ReusableWorkflows/.github/workflows/build-app-generic.yml@v20 with: macos-app-scheme: 'TMBuddy' diff --git a/ReusableWorkflows b/ReusableWorkflows index 108edff1..b87d51f2 160000 --- a/ReusableWorkflows +++ b/ReusableWorkflows @@ -1 +1 @@ -Subproject commit 108edff102616bde2f6809c07a145db5764eb74a +Subproject commit b87d51f21c1584185fa42f1535808c198ae3fa35