# This workflow is triggered when opening/reopening PR, editing the PR description or changing labels. It ignores unrelated label changes. It runs PR type validation and if it succeeds, it runs PR milestone and detector labels workflow in parallel. name: PR Edit Trigger on: pull_request: types: - opened - reopened - edited - labeled - unlabeled permissions: pull-requests: write contents: read jobs: check-pr-trigger: name: Check PR Trigger runs-on: ubuntu-latest outputs: require_validation: ${{ steps.check.outputs.require_validation }} file_label_change: ${{ steps.check.outputs.file_label_change }} pr_edited: ${{ steps.check.outputs.pr_edited }} steps: - name: Check PR Trigger id: check uses: actions/github-script@v8 with: script: | let requireValidation = true; let fileLabelChange = false; /* * If triggered by label change, ignore unrelated labels. */ const action = context.payload.action; const prEdited = action === 'edited'; if (action === 'labeled' || action === 'unlabeled') { const changedLabel = context.payload.label?.name; core.info( `Changed Label: ${changedLabel}` ); const relevantLabels = [ 'Feature', 'Bug Fix', 'Infrastructure', 'Breaking API' ]; if (!relevantLabels.includes(changedLabel)) { requireValidation = false; } // File Major requires Breaking API label const fileLabels = [ 'File Major', 'File Minor', 'Breaking API' ]; if (fileLabels.includes(changedLabel)) { fileLabelChange = true; } } core.setOutput( 'require_validation', requireValidation.toString() ); core.setOutput( 'file_label_change', fileLabelChange.toString() ); core.setOutput( 'pr_edited', prEdited.toString() ); if (requireValidation) { core.info('PR type validation: Required.'); } else { core.info('PR type validation: Not required - Unrelated label.'); } if (fileLabelChange) { core.info('File label or Breaking API: Changed.'); } else { core.info('File label or Breaking API: No Change.'); } validate-pr-type: needs: check-pr-trigger if: ${{ needs.check-pr-trigger.outputs.require_validation == 'true' }} uses: ./.github/workflows/pr_type_validation.yaml with: pr_number: ${{ github.event.pull_request.number }} permissions: pull-requests: write contents: read milestone: needs: validate-pr-type uses: ./.github/workflows/pr_milestone.yaml with: pr_number: ${{ github.event.pull_request.number }} permissions: pull-requests: write contents: read detector-labels: needs: validate-pr-type uses: ./.github/workflows/pr_detector_labels.yaml with: pr_number: ${{ github.event.pull_request.number }} permissions: pull-requests: write issues: read file-version: needs: - check-pr-trigger - validate-pr-type if: >- ${{ always() && ( needs.check-pr-trigger.outputs.file_label_change == 'true' || ( needs.check-pr-trigger.outputs.pr_edited == 'true' && needs.validate-pr-type.result == 'success' ) ) }} uses: ./.github/workflows/pr_file_version.yaml with: pr_number: ${{ github.event.pull_request.number }} permissions: pull-requests: write contents: read