This is an automated email from the ASF dual-hosted git repository.
davidarthur pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/kafka.git
The following commit(s) were added to refs/heads/trunk by this push:
new b8dadb741c1 MINOR Add PR triage workflow (#17881)
b8dadb741c1 is described below
commit b8dadb741c1a6f6c44d8e058ff5863f3e29528d5
Author: David Arthur <[email protected]>
AuthorDate: Tue Dec 10 12:34:09 2024 -0500
MINOR Add PR triage workflow (#17881)
Automatically adds a "triage" label to PRs from the community. After 7
days, if no review has been made and the "triage" label is still present, a
"needs-attention" label is added.
Reviewers: Chia-Ping Tsai <[email protected]>, Mickael Maison
<[email protected]>
---
.github/workflows/README.md | 48 ++++++++++++++++++++++++++++
.github/workflows/pr-reviewed-trigger.yml | 42 ++++++++++++++++++++++++
.github/workflows/pr-reviewed.yml | 53 +++++++++++++++++++++++++++++++
.github/workflows/pr-update.yml | 25 ++++++++++++++-
.github/workflows/stale.yml | 16 ++++++++++
5 files changed, 183 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/README.md b/.github/workflows/README.md
index f921ad78393..26f22cb2741 100644
--- a/.github/workflows/README.md
+++ b/.github/workflows/README.md
@@ -51,6 +51,54 @@ using this for very simple tasks such as applying labels or
adding comments to P
_We must never run the untrusted PR code in the elevated `pull_request_target`
context_
+## Our Workflows
+
+### Trunk Build
+
+The [ci.yml](ci.yml) is run when commits are pushed to trunk. This calls into
[build.yml](build.yml)
+to run our main build. In the trunk build, we do not read from the Gradle
cache,
+but we do write to it. Also, the test catalog is only updated from trunk
builds.
+
+### PR Build
+
+Similar to trunk, this workflow starts in [ci.yml](ci.yml) and calls into
[build.yml](build.yml).
+Unlike trunk, the PR builds _will_ utilize the Gradle cache.
+
+### PR Triage
+
+In order to get the attention of committers, we have a triage workflow for
Pull Requests
+opened by non-committers. This workflow consists of three files:
+
+* [pr-update.yml](pr-update.yml) When a PR is created add the `triage` label
if the PR
+ was opened by a non-committer.
+* [pr-reviewed-trigger.yml](pr-reviewed-trigger.yml) Runs when any PR is
reviewed.
+ Used as a trigger for the next workflow
+* [pr-reviewed.yml](pr-reviewed.yml) Remove the `triage` label after a PR has
been reviewed
+
+_The pr-update.yml workflow includes pull_request_target!_
+
+### CI Approved
+
+Due to a combination of GitHub security and ASF's policy, we required explicit
+approval of workflows on PRs submitted by non-committers (and
non-contributors).
+To simply this process, we have a `ci-approved` label which automatically
approves
+these workflows.
+
+There are two files related to this workflow:
+
+* [pr-labeled.yml](pr-labeled.yml) approves a pending approval for PRs that
have
+been labeled with `ci-approved`
+* [ci-requested.yml](ci-requested.yml) approves future CI requests
automatically
+if the PR has the `ci-approved` label
+
+_The pr-labeled.yml workflow includes pull_request_target!_
+
+### Stale PRs
+
+This one is straightforward. Using the "actions/stale" GitHub Action, we
automatically
+label and eventually close PRs which have not had activity for some time. See
the
+[stale.yml](stale.yml) workflow file for specifics.
+
## GitHub Actions Quirks
### Composite Actions
diff --git a/.github/workflows/pr-reviewed-trigger.yml
b/.github/workflows/pr-reviewed-trigger.yml
new file mode 100644
index 00000000000..f089176ff4b
--- /dev/null
+++ b/.github/workflows/pr-reviewed-trigger.yml
@@ -0,0 +1,42 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+name: Pull Request Reviewed
+
+on:
+ pull_request_review:
+ types:
+ - submitted
+
+jobs:
+ # This job is a workaround for the fact that pull_request_review lacks
necessary permissions to modify PRs.
+ # Also, there is no pull_request_target analog to pull_request_review. The
approach taken here is taken from
+ #
https://securitylab.github.com/resources/github-actions-preventing-pwn-requests/.
+ pr-review-trigger:
+ name: Reviewed
+ runs-on: ubuntu-latest
+ steps:
+ - name: Env
+ run: printenv
+ env:
+ GITHUB_CONTEXT: ${{ toJson(github) }}
+ - name: Capture PR Number
+ run:
+ echo ${{ github.event.pull_request.number }} >> pr-number.txt
+ - name: Archive Event
+ uses: actions/upload-artifact@v4
+ with:
+ name: pr-number.txt
+ path: pr-number.txt
diff --git a/.github/workflows/pr-reviewed.yml
b/.github/workflows/pr-reviewed.yml
new file mode 100644
index 00000000000..2f6cae8a4fe
--- /dev/null
+++ b/.github/workflows/pr-reviewed.yml
@@ -0,0 +1,53 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+name: Remove Triage Label
+
+on:
+ workflow_run:
+ workflows: [Pull Request Reviewed]
+ types:
+ - completed
+
+jobs:
+ # This job runs with elevated permissions and the ability to modify pull
requests. The steps taken here
+ # should be limited to updating labels and adding comments to PRs. This
approach is taken from
+ #
https://securitylab.github.com/resources/github-actions-preventing-pwn-requests/.
+ remove-triage:
+ if: ${{ github.event.workflow_run.conclusion == 'success' }}
+ runs-on: ubuntu-latest
+ steps:
+ - name: Env
+ run: printenv
+ env:
+ GITHUB_CONTEXT: ${{ toJson(github) }}
+ - uses: actions/download-artifact@v4
+ with:
+ github-token: ${{ github.token }}
+ run-id: ${{ github.event.workflow_run.id }}
+ name: pr-number.txt
+ - name: Remove label
+ uses: actions/github-script@v7
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ script: |
+ var fs = require('fs');
+ var pr_number = Number(fs.readFileSync('./pr-number.txt'));
+ await github.rest.issues.removeLabel({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: pr_number,
+ name: 'triage'
+ });
diff --git a/.github/workflows/pr-update.yml b/.github/workflows/pr-update.yml
index 31e00387054..e1cd7214d6c 100644
--- a/.github/workflows/pr-update.yml
+++ b/.github/workflows/pr-update.yml
@@ -25,9 +25,11 @@ on:
# *
https://securitylab.github.com/resources/github-actions-preventing-pwn-requests/
pull_request_target:
types: [opened, reopened, synchronize]
+ branches:
+ - trunk
jobs:
- label_PRs:
+ add-labeler-labels:
name: Labeler
permissions:
contents: read
@@ -45,3 +47,24 @@ jobs:
PR_NUM: ${{github.event.number}}
run: |
./.github/scripts/label_small.sh
+
+ add-triage-label:
+ if: github.event.action == 'opened' || github.event.action == 'reopened'
+ name: Add triage label
+ runs-on: ubuntu-latest
+ permissions:
+ pull-requests: write
+ steps:
+ - name: Env
+ run: printenv
+ env:
+ GITHUB_CONTEXT: ${{ toJson(github) }}
+ # If the PR is from a non-committer, add triage label
+ - if: |
+ github.event.pull_request.author_association != 'MEMBER' &&
+ github.event.pull_request.author_association != 'OWNER'
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ GH_REPO: ${{ github.repository }}
+ NUMBER: ${{ github.event.pull_request.number }}
+ run: gh pr edit "$NUMBER" --add-label triage
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
index 9382d4173e9..6ceb074f62c 100644
--- a/.github/workflows/stale.yml
+++ b/.github/workflows/stale.yml
@@ -35,6 +35,22 @@ permissions:
pull-requests: write
jobs:
+ needs-attention:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/stale@v9
+ with:
+ debug-only: ${{ inputs.dryRun || false }}
+ operations-per-run: ${{ inputs.operationsPerRun || 500 }}
+ days-before-stale: 7
+ days-before-close: -1
+ ignore-pr-updates: true
+ only-pr-labels: 'triage'
+ stale-pr-label: 'needs-attention'
+ stale-pr-message: |
+ A label of 'needs-attention' was automatically added to this PR in
order to raise the
+ attention of the committers. Once this issue has been triaged, the
`triage` label
+ should be removed to prevent this automation from happening again.
stale:
runs-on: ubuntu-latest
steps: