name: 🤖 PR Checks on: pull_request: types: [opened, synchronize, reopened] concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true permissions: contents: read pull-requests: read jobs: changes: name: Detect changes runs-on: warp-ubuntu-latest-x64-2x outputs: code: ${{ steps.code_filter.outputs.code }} typecheck_self: ${{ steps.filter.outputs.typecheck_self }} webapp: ${{ steps.filter.outputs.webapp }} packages: ${{ steps.filter.outputs.packages }} internal: ${{ steps.filter.outputs.internal }} cli: ${{ steps.filter.outputs.cli }} sdk: ${{ steps.filter.outputs.sdk }} steps: # `code` uses `every` semantics so the negation patterns actually subtract. # With the default `some` quantifier, `**` matches every file and the # subsequent `!...` patterns are no-ops (each pattern is OR'd, not AND'd). - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 id: code_filter with: predicate-quantifier: every filters: | code: - '**' - '!docs/**' - '!.changeset/**' - '!hosting/**' - '!.github/**' - '!**/*.md' - '!**/.env.example' - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 id: filter with: filters: | typecheck_self: - '.github/workflows/pr_checks.yml' - '.github/workflows/typecheck.yml' - '.github/workflows/code-quality.yml' webapp: - 'apps/webapp/**' - 'packages/**' - 'internal-packages/**' - '.github/workflows/pr_checks.yml' - '.github/workflows/unit-tests-webapp.yml' - '.github/workflows/e2e-webapp.yml' - '.configs/**' - 'package.json' - 'pnpm-lock.yaml' - 'pnpm-workspace.yaml' - 'turbo.json' packages: - 'packages/**' - '.github/workflows/pr_checks.yml' - '.github/workflows/unit-tests-packages.yml' - '.configs/**' - 'package.json' - 'pnpm-lock.yaml' - 'pnpm-workspace.yaml' - 'turbo.json' internal: - 'internal-packages/**' - 'packages/**' - '.github/workflows/pr_checks.yml' - '.github/workflows/unit-tests-internal.yml' - '.configs/**' - 'package.json' - 'pnpm-lock.yaml' - 'pnpm-workspace.yaml' - 'turbo.json' cli: - 'packages/cli-v3/**' - 'packages/build/**' - 'packages/core/**' - 'packages/schema-to-json/**' - '.github/workflows/pr_checks.yml' - '.github/workflows/e2e.yml' - '.configs/**' - 'package.json' - 'pnpm-lock.yaml' - 'pnpm-workspace.yaml' - 'turbo.json' sdk: - 'packages/trigger-sdk/**' - 'packages/core/**' - '.github/workflows/pr_checks.yml' - '.github/workflows/sdk-compat.yml' - '.configs/**' - 'package.json' - 'pnpm-lock.yaml' - 'pnpm-workspace.yaml' - 'turbo.json' code-quality: uses: ./.github/workflows/code-quality.yml typecheck: needs: changes if: needs.changes.outputs.code == 'true' || needs.changes.outputs.typecheck_self == 'true' uses: ./.github/workflows/typecheck.yml webapp: needs: changes if: needs.changes.outputs.webapp == 'true' uses: ./.github/workflows/unit-tests-webapp.yml secrets: DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} e2e-webapp: needs: changes if: needs.changes.outputs.webapp == 'true' uses: ./.github/workflows/e2e-webapp.yml secrets: DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} packages: needs: changes if: needs.changes.outputs.packages == 'true' uses: ./.github/workflows/unit-tests-packages.yml secrets: DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} internal: needs: changes if: needs.changes.outputs.internal == 'true' uses: ./.github/workflows/unit-tests-internal.yml secrets: DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} e2e: needs: changes if: needs.changes.outputs.cli == 'true' uses: ./.github/workflows/e2e.yml with: package: cli-v3 sdk-compat: needs: changes if: needs.changes.outputs.sdk == 'true' uses: ./.github/workflows/sdk-compat.yml all-checks: name: All PR Checks needs: - changes - code-quality - typecheck - webapp - e2e-webapp - packages - internal - e2e - sdk-compat if: always() runs-on: warp-ubuntu-latest-x64-2x steps: - name: Verify all checks run: | if [[ "${{ contains(needs.*.result, 'failure') }}" == "true" ]]; then echo "One or more checks failed" exit 1 fi if [[ "${{ contains(needs.*.result, 'cancelled') }}" == "true" ]]; then echo "One or more checks were cancelled" exit 1 fi echo "All checks passed or were skipped due to path filters"