diff --git a/.github/workflows/rebase-translations.yml b/.github/workflows/rebase-translations.yml index 1fc1dd5..40799f6 100644 --- a/.github/workflows/rebase-translations.yml +++ b/.github/workflows/rebase-translations.yml @@ -1,8 +1,10 @@ # Rebase Translation PRs # # Install this workflow in the TARGET (translated) repository. -# When a translation-sync PR is merged, this workflow automatically -# rebases other open translation-sync PRs against the updated main branch. +# When a translation PR is merged, this workflow automatically rebases the +# other open translation PRs against the updated main branch. It covers both +# kinds this tool creates: `translation-sync-*` branches from the Action's sync +# mode, and `resync/*` branches from the CLI's `forward --github`. # # This eliminates merge conflicts caused by multiple upstream PRs # modifying the same files. See: https://github.com/QuantEcon/action-translation/issues/63 @@ -17,10 +19,16 @@ on: jobs: rebase: - # Only run when a translation-sync PR is merged + # Only run when a translation PR is merged. Both prefixes must be listed: + # sync mode creates `translation-sync-*`, while the CLI's `forward --github` + # creates `resync/*`, and a wave of resync PRs goes stale the same way. + # Keep this in step with `isTranslationBranch` in the action's src/branch-naming.ts + # — this `if` decides whether the job runs, that predicate decides which open PRs + # it then rebases, so a prefix matching only one of them is a no-op run. if: > github.event.pull_request.merged == true && - startsWith(github.event.pull_request.head.ref, 'translation-sync-') + (startsWith(github.event.pull_request.head.ref, 'translation-sync-') || + startsWith(github.event.pull_request.head.ref, 'resync/')) runs-on: ubuntu-latest permissions: @@ -34,7 +42,7 @@ jobs: steps: - name: Rebase open translation PRs - uses: QuantEcon/action-translation@v0.16.1 + uses: QuantEcon/action-translation@v0 with: mode: rebase anthropic-api-key: ${{ secrets.ANTHROPIC_API_KEY }} diff --git a/.github/workflows/review-translations.yml b/.github/workflows/review-translations.yml index c61722b..f1da1ff 100644 --- a/.github/workflows/review-translations.yml +++ b/.github/workflows/review-translations.yml @@ -1,21 +1,44 @@ -# Auto-generated by `translate setup` +# Review Translations — Quality check on translation PRs +# When a PR is opened/updated that carries the 'action-translation' label, +# this workflow runs a quality review and posts a comment. +# +# Mirrors the upstream template in action-translation +# docs/user/tutorials/connect-existing.md — keep it in step with that. name: Review Translations on: pull_request: - types: [opened, synchronize] + types: [opened, synchronize, labeled, reopened] jobs: review: - if: contains(github.event.pull_request.labels.*.name, 'action-translation') + # Ignore `labeled` events for every other label: a sync adds its labels in a single + # addLabels call, but GitHub emits one `labeled` event per label, and each would + # otherwise start a full (billed) review of the same diff. + if: > + contains(github.event.pull_request.labels.*.name, 'action-translation') && + (github.event.action != 'labeled' || github.event.label.name == 'action-translation') runs-on: ubuntu-latest + # v0.17.0's review dedupe deletes superseded comments, which needs pull-requests: write. + permissions: + contents: read + pull-requests: write + + # One review per PR — supersede an in-flight review instead of running both. + # Job-level (not workflow-level) on purpose: the group is entered only after the `if` + # above has passed, so a `labeled` event for 'automated' skips out without cancelling + # the real review. At workflow level it would cancel first and skip second, leaving none. + concurrency: + group: review-translations-${{ github.event.pull_request.number }} + cancel-in-progress: true + steps: - uses: actions/checkout@v4 with: fetch-depth: 2 - - uses: QuantEcon/action-translation@v0.16.1 + - uses: QuantEcon/action-translation@v0 with: mode: review source-repo: QuantEcon/lecture-python-programming