Skip to content

🌱 Add triage-party for the Cluster API backlog #10437

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
May 7, 2024
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 60 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,12 @@ IMPORT_BOSS_VER := v0.28.1
IMPORT_BOSS := $(abspath $(TOOLS_BIN_DIR)/$(IMPORT_BOSS_BIN))
IMPORT_BOSS_PKG := k8s.io/code-generator/cmd/import-boss

TRIAGE_PARTY_IMAGE_NAME ?= extra/triage-party
TRIAGE_PARTY_CONTROLLER_IMG ?= $(STAGING_REGISTRY)/$(TRIAGE_PARTY_IMAGE_NAME)
TRIAGE_PARTY_DIR := hack/triage
TRIAGE_PARTY_TMP_DIR ?= $(TRIAGE_PARTY_DIR)/triage-party.tmp
TRIAGE_PARTY_VERSION ?= v1.6.0

CONVERSION_VERIFIER_BIN := conversion-verifier
CONVERSION_VERIFIER := $(abspath $(TOOLS_BIN_DIR)/$(CONVERSION_VERIFIER_BIN))

Expand Down Expand Up @@ -1482,6 +1488,60 @@ $(GOVULNCHECK): # Build govulncheck.
$(IMPORT_BOSS): # Build import-boss
GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) $(IMPORT_BOSS_PKG) $(IMPORT_BOSS_BIN) $(IMPORT_BOSS_VER)

## --------------------------------------
## triage-party
## --------------------------------------

.PHONY: release-triage-party
release-triage-party: docker-build-triage-party docker-push-triage-party clean-triage-party

.PHONY: release-local-triage-party
release-local-triage-party: docker-build-triage-party clean-triage-party ## Release the triage party image for local use only

.PHONY: checkout-triage-party
checkout-triage-party:
@if [ -z "${TRIAGE_PARTY_VERSION}" ]; then echo "TRIAGE_PARTY_VERSION is not set"; exit 1; fi
@if [ -d "$(TRIAGE_PARTY_TMP_DIR)" ]; then \
echo "$(TRIAGE_PARTY_TMP_DIR) exists, skipping clone"; \
else \
git clone "https://github.com/google/triage-party.git" "$(TRIAGE_PARTY_TMP_DIR)"; \
cd "$(TRIAGE_PARTY_TMP_DIR)"; \
git checkout "$(TRIAGE_PARTY_VERSION)"; \
git apply "$(ROOT_DIR)/$(TRIAGE_PARTY_DIR)/triage-improvements.patch"; \
fi
@cd "$(ROOT_DIR)/$(TRIAGE_PARTY_TMP_DIR)"; \
if [ "$$(git describe --tag 2> /dev/null)" != "$(TRIAGE_PARTY_VERSION)" ]; then \
echo "ERROR: checked out version $$(git describe --tag 2> /dev/null) does not match expected version $(TRIAGE_PARTY_VERSION)"; \
exit 1; \
fi

.PHONY: docker-build-triage-party
docker-build-triage-party: checkout-triage-party
@if [ -z "${TRIAGE_PARTY_VERSION}" ]; then echo "TRIAGE_PARTY_VERSION is not set"; exit 1; fi
cd $(TRIAGE_PARTY_TMP_DIR) && \
docker buildx build --platform linux/amd64 -t $(TRIAGE_PARTY_CONTROLLER_IMG):$(TRIAGE_PARTY_VERSION) .

.PHONY: docker-push-triage-party
docker-push-triage-party:
@if [ -z "${TRIAGE_PARTY_VERSION}" ]; then echo "TRIAGE_PARTY_VERSION is not set"; exit 1; fi
docker push $(TRIAGE_PARTY_CONTROLLER_IMG):$(TRIAGE_PARTY_VERSION)

.PHONY: clean-triage-party
clean-triage-party:
rm -fr "$(TRIAGE_PARTY_TMP_DIR)"

.PHONY: triage-party
triage-party: ## Start a local instance of triage party
@if [ -z "${GITHUB_TOKEN}" ]; then echo "GITHUB_TOKEN is not set"; exit 1; fi
docker run --platform linux/amd64 --rm \
-e GITHUB_TOKEN \
-e "PERSIST_BACKEND=disk" \
-e "PERSIST_PATH=/app/.cache" \
-v "$(ROOT_DIR)/$(TRIAGE_PARTY_DIR)/.cache:/app/.cache" \
-v "$(ROOT_DIR)/$(TRIAGE_PARTY_DIR)/config.yaml:/app/config/config.yaml" \
-p 8080:8080 \
$(TRIAGE_PARTY_CONTROLLER_IMG):$(TRIAGE_PARTY_VERSION)

## --------------------------------------
## Helpers
## --------------------------------------
Expand Down
2 changes: 2 additions & 0 deletions hack/triage/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
triage-party.tmp/
.cache/
269 changes: 269 additions & 0 deletions hack/triage/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,269 @@
settings:
name: cluster-api
min_similarity: 0.8
repos:
- https://github.com/kubernetes-sigs/cluster-api
members:
- chrischdi
- enxebre
- fabriziopandini
- killianmuldoon
- sbueringer
- vincepri

collections:
- id: initial-triage
name: Initial Triage
dedup: false
description: >
Check new issue and apply labels for kind, priority, area (optional).
rules:
- triage-needs-kind
- triage-needs-priority

- id: triage-refinement
name: Triage Refinement
dedup: false
description: >
Work on issue to get them to an actionable state.
When ready, apply triage/accepted and help of good-first issue label
rules:
- triage-stale-awaiting-more-evidence
- triage-stale-kind-support
- triage-updated
- triage-again
- triage-lifecycle-stale-or-rotten-priority-critical-urgent
- triage-lifecycle-stale-or-rotten-priority-important-soon
- triage-lifecycle-stale-or-rotten-priority-important-longterm
- triage-lifecycle-frozen
- triage-all

- id: actionable
name: Actionable
description: >
Issue to be worked.
dedup: false
rules:
- actionable-not-assigned-without-help-or-good-first-issue
- actionable-updated
- actionable-all

- id: fix-me
name: Fix-me!
description: >
Ensure we are using the labels in a consistent way.
dedup: false
rules:
- fixme-avoid-triage-needs-information
- fixme-avoid-kind-design
- fixme-kind-proposal-without-kind-feature
- fixme-kind-support-with-other-kinds
- fixme-triage-accepted-with-kind-support-or-priority-awaiting-more-evidence
- fixme-help-or-good-first-issue-before-triage-accepted
- fixme-lifecycle-frozen-with-priority-critical-urgent-priority-important-soon-priority-important-longterm

rules:
# Phase: Initial triage

triage-needs-kind:
# WHY?: kinds need to be assigned by maintainers, let's do it!
name: "needs-kind"
resolution: "Add a kind/ label: api-change, bug, cleanup, deprecation, design, documentation, failing-test, feature, flake, proposal, regression, release-blocking, support"
type: issue
filters:
# TODO: Configure plugins so needs-kind label is applied + use it for this filter
- label: "!kind/.*"

triage-needs-priority:
# WHY?: kinds need to be assigned by maintainers, let's do it!
name: "needs-priority"
resolution: "Add a priority/ label: priority/critical-urgent > priority/important-soon > priority/important-longterm > priority/backlog > priority/awaiting-more-evidence"
type: issue
filters:
# TODO: Configure plugins so needs-priority label is applied + use it for this filter
- label: "!priority/.*"

# Phase: Triage finalization

triage-stale-awaiting-more-evidence:
# WHY?: issue authors are supposed to provide answers timely when an issue is labeled priority/awaiting-more-evidence, otherwise /close
name: "priority/awaiting-more-evidence not commented in the last 15 days"
resolution: "Consider if to close with /close, consider if to remove priority/awaiting-more-evidence label"
type: issue
filters:
- label: "!triage/accepted"
- label: "priority/awaiting-more-evidence"
- commented: +15d

triage-stale-kind-support:
# WHY?: support request are supposed to be quick back and forth between authors and maintainers, otherwise /close
name: "Support request not commented in the last 15 days"
resolution: "Consider if to close with /close, consider if to change kind"
type: issue
filters:
- label: "!triage/accepted"
- label: "kind/support"
- commented: +15d

triage-updated:
# WHY?: maintainers are supposed to keep up with issue discussions and help to move to actionable
name: "Issues with updates in the last month"
resolution: "Check if the issue is now actionable by applying /triage accepted, help in making progress, consider if to change priority or kind"
type: issue
filters:
- label: "!triage/accepted"
- commented: -30d
- tag: "!member-last"

triage-again:
# WHY?: maintainers are supposed to re-assess triaged issues after some time (frequency depends on priority)
# Note: this is a clear sign of project lacking contributors. At some point - might be after two back and forth -, we should give up and close.
name: "Issues back to triage"
resolution: "Confirm that this issue is still relevant with /triage accepted, close this issue with /close"
type: issue
filters:
- label: "!triage/accepted"
- un-triaged: +0d

triage-lifecycle-stale-or-rotten-priority-critical-urgent:
# WHY?: issue with priority/critical-urgent do not get automatically closed, it is up to maintainers to take a look again
# Note: this is a clear sign of project lacking contributors. At some point - might be after two back and forth -, we should give up and close.
name: "Issue with priority/critical-urgent, lifecycle/stale or rotten, and not commented in the last month"
resolution: "Consider if bring this issue to the attention of the community, consider if to change priority with /priority important-soon, /priority important-longterm or /priority backlog, consider if to close with /close"
type: issue
filters:
- label: "!triage/accepted"
- label: "priority/critical-urgent"
- label: "lifecycle/(stale|rotten)"
- commented: +30d

triage-lifecycle-stale-or-rotten-priority-important-soon:
# WHY?: issue with priority/important-soon do not get automatically closed, it is up to maintainers to take a look again
# Note: this is a clear sign of project lacking contributors. At some point - might be after two back and forth -, we should give up and close.
name: "Issue with priority/important-soon, lifecycle/stale or rotten, not commented in the last 2 month"
resolution: "Consider if to change priority with /priority important-longterm or /priority backlog, consider if to close with /close"
type: issue
filters:
- label: "!triage/accepted"
- label: "priority/important-soon"
- label: "lifecycle/(stale|rotten)"
- commented: +60d

triage-lifecycle-stale-or-rotten-priority-important-longterm:
# WHY?: issue with priority/important-longterm do not get automatically closed, it is up to maintainers to take a look again
# Note: this is a clear sign of project lacking contributors. At some point - might be after two back and forth -, we should give up and close.
name: "Issue with priority/important-longterm, lifecycle/stale or rotten, not commented in the last 6 months"
resolution: "Consider if to change priority with /priority backlog, consider if to clos with /closee"
type: issue
filters:
- label: "!triage/accepted"
- label: "priority/important-longterm"
- label: "lifecycle/(stale|rotten)"
- commented: +180d

triage-lifecycle-frozen:
# WHY?: issue with lifecycle/frozen do not get automatically closed, it is up to maintainers to take a look again
# Note: this is a clear sign of project lacking contributors. At some point - might be after two back and forth -, we should give up and close.
name: "Issue with lifecycle/frozen, not commented in the last 6 months"
resolution: "Consider if to close with /close"
type: issue
filters:
- label: "!triage/accepted"
- label: "lifecycle/frozen"
- commented: +180d

triage-all:
name: "All the issue in triage"
resolution: "Check if the issue is now actionable by applying /triage accepted, help in making progress, consider if to change priority or kind"
type: issue
filters:
- label: "!triage/accepted"

# Phase: Actionable

actionable-not-assigned-without-help-or-good-first-issue:
# WHY?: issue actionable must be assigned to someone or seeking for help
name: "Issues not assigned without help or good-first-issue"
resolution: "Apply /help or /good-first-issue"
type: issue
filters:
- label: "triage/accepted"
- label: "!(help|good-first-issue)"
- tag: "!assigned"

actionable-updated:
# WHY?: maintainers are supposed to keep up with issue discussions
name: "Issues with updates in the last month"
resolution: "Check updates"
type: issue
filters:
- label: "triage/accepted"
- commented: -30d
- tag: "!member-last"

actionable-all:
name: "All the actionable issues"
type: issue
filters:
- label: "triage/accepted"

# Fix-me
# WHY?: Let's try to be diligent in using labels

fixme-avoid-triage-needs-information:
name: "With triage/needs-information (let's not use this label)"
resolution: "Remove triage/needs-information, se priority/awaiting-more-evidence instead"
type: issue
filters:
- label: "triage/needs-information"

fixme-avoid-kind-design:
name: "With kind/design (let's not use this label)"
resolution: "remove kind/design, use kind/proposal instead"
type: issue
filters:
- label: "kind/design"

fixme-kind-proposal-without-kind-feature:
name: "With kind/proposal without kind/feature"
resolution: "Add kind/feature (we usually write proposals for new features, so kind/proposal and kind/feature should go together)"
type: issue
filters:
- label: "kind/proposal"
- label: "!kind/feature"

fixme-kind-support-with-other-kinds:
name: "With kind/support and also other kinds"
resolution: "Remove incorrect kinds (kind/support should not be combined with other kinds)"
type: issue
filters:
- label: "kind/support"
- label: "kind/(feature|documentation|bug|flake|cleanup|design|proposal|deprecation|regression|api-change|failing-test|release-blocking)"

fixme-triage-accepted-with-kind-support-or-priority-awaiting-more-evidence:
name: "With triage/accepted and kind/support or priority/awaiting-more-evidence"
resolution: "Remove triage/accepted (triage/accepted should not be applied to issue with kind/support or priority/awaiting-more-evidence)"
type: issue
filters:
- label: "triage/accepted"
- label: "(kind/support|priority/awaiting-more-evidence)"

fixme-help-or-good-first-issue-before-triage-accepted:
name: "With help or good-first-issue applied before triage/accepted"
resolution: "help or good-first-issue should not be applied before triage/accepted"
type: issue
filters:
- label: "(help|good-first-issue)"
- label: "!triage/accepted"
- tag: "!untriaged"

fixme-lifecycle-frozen-with-priority-critical-urgent-priority-important-soon-priority-important-longterm:
name: "With lifecycle/frozen and one of priority/critical-urgent, priority/important-soon or priority/important-longterm"
resolution: "Remove triage/accepted (priority/critical-urgent, priority/important-soon or priority/important-longterm are not subject to lifecycle events)"
type: issue
filters:
- label: "lifecycle/frozen"
- label: "priority/(critical-urgent|important-soon|important-longterm)"

# TODO: add more checks about invalid combinations of labels
# - ...
Loading
Loading