DEFAULT_PYTHON_VERSION: "3.11"
NLTK_DATA: "/usr/share/nltk_data"
jobs:
+ detect-duplicate:
+ name: Detect Duplicate Run
+ runs-on: ubuntu-24.04
+ outputs:
+ should_run: ${{ steps.check.outputs.should_run }}
+ steps:
+ - name: Check if workflow should run
+ id: check
+ uses: actions/github-script@v7
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ script: |
+ if (context.eventName !== 'push') {
+ core.info('Not a push event; running workflow.');
+ core.setOutput('should_run', 'true');
+ return;
+ }
+
+ const ref = context.ref || '';
+ if (!ref.startsWith('refs/heads/')) {
+ core.info('Push is not to a branch; running workflow.');
+ core.setOutput('should_run', 'true');
+ return;
+ }
+
+ const branch = ref.substring('refs/heads/'.length);
+ const { owner, repo } = context.repo;
+ const prs = await github.paginate(github.rest.pulls.list, {
+ owner,
+ repo,
+ state: 'open',
+ head: `${owner}:${branch}`,
+ per_page: 100,
+ });
+
+ if (prs.length === 0) {
+ core.info(`No open PR found for ${branch}; running workflow.`);
+ core.setOutput('should_run', 'true');
+ } else {
+ core.info(`Found ${prs.length} open PR(s) for ${branch}; skipping duplicate push run.`);
+ core.setOutput('should_run', 'false');
+ }
pre-commit:
- # We want to run on external PRs, but not on our own internal PRs as they'll be run
- # by the push to the branch. Without this if check, checks are duplicated since
- # internal PRs match both the push and pull_request events.
- if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
+ needs:
+ - detect-duplicate
+ if: needs.detect-duplicate.outputs.should_run == 'true'
name: Linting Checks
runs-on: ubuntu-24.04
steps: