Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
16 changes: 16 additions & 0 deletions .github/workflows/issue-project-sync.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
name: Issue Project Sync
on:
issues:
types: [labeled]

permissions:
issues: read

jobs:
sync:
if: github.event.label.name == 'backlog'
runs-on: ubuntu-latest
steps:
Comment thread
uwe-mayer marked this conversation as resolved.
- uses: cloudoperators/common/workflows/issue-project-sync@main
Comment thread
uwe-mayer marked this conversation as resolved.
with:
GH_TOKEN: ${{ secrets.GH_PROJECT_TOKEN }}
24 changes: 6 additions & 18 deletions .github/workflows/issue-triage.yml
Original file line number Diff line number Diff line change
@@ -1,25 +1,13 @@
name: Auto Label Issues

# Applies the 'needs-triage' label to every newly opened issue.
# This is the entry point of the issue lifecycle documented in CONTRIBUTING.md.
# See: https://github.com/cloudoperators/greenhouse/blob/main/CONTRIBUTING.md#issue-lifecycle

name: Issue Triage
on:
issues:
types: [opened]

permissions:
issues: write

jobs:
label:
triage:
runs-on: ubuntu-latest
Comment thread
uwe-mayer marked this conversation as resolved.
permissions:
issues: write
steps:
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
with:
script: |
github.rest.issues.addLabels({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
labels: ['needs-triage']
})
- uses: cloudoperators/common/workflows/issue-triage@main
Comment thread
uwe-mayer marked this conversation as resolved.
85 changes: 10 additions & 75 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,81 +48,16 @@ Before opening a Pull Request, make sure:

## Issues and Planning

We use GitHub issues to track bugs and enhancement requests.
We follow a shared issue lifecycle across all `cloudoperators` repositories. See the **[Issue Lifecycle documentation](https://github.com/cloudoperators/common/blob/main/ISSUE_LIFECYCLE.md)** for the full process including:

Please provide as much context as possible when you open an issue. The information you provide must be comprehensive enough to reproduce that issue for the assignee.
* Automatic triage labeling
* Triage decision matrix
* Definition of Ready
* Refinement workflow
* Sprint/quarter planning

### Issue Lifecycle
Quick links:

Every issue follows this workflow from creation to delivery:

```mermaid
flowchart TD
A([Issue Opened]) -->|auto-labeled| B[needs-triage]
B --> C{Triage}

C -->|clear & well-scoped| D[label: backlog]
C -->|unclear scope| E[label: needs-refinement]
C -->|duplicate / out of scope / won't fix| F([Closed])
C -->|missing info| G[label: needs-more-info]

G -->|reporter responds| C

E --> H[Refinement\nasync or meeting]
H -->|Definition of Ready met| D

D -->|GitHub Project UI automation| I[(Greenhouse Core Roadmap)]
I --> J[Sprint Planning]
J --> K([In Progress → Done])
```

#### Stage Details

**1. Issue Opened → `needs-triage`**

Every new issue is automatically labeled `needs-triage` by the [`issue-triage.yml`](.github/workflows/issue-triage.yml) workflow. No manual action is required from the reporter.

**2. Triage** (target: within 5 business days)

A maintainer removes `needs-triage` and takes one of these actions:

| Outcome | Action |
|---|---|
| Clear and well-scoped | Add label **`backlog`** — issue is auto-added to the Roadmap |
| Unclear scope | Add label **`needs-refinement`** |
| Needs more info | Add label **`needs-more-info`** and comment |
| Duplicate / out of scope / won't fix | Close with a short explanation comment |

**3. Refinement → `backlog`**

Issues labeled `needs-refinement` are discussed asynchronously in comments or during a refinement meeting. An issue is ready for the backlog when it has:

* A clear problem statement
* Testable acceptance criteria
* A size estimate (`size/S`, `size/M`, `size/L`, `size/XL`)
* Dependencies identified

Once ready, the maintainer removes `needs-refinement` and applies `backlog`.

**4. Backlog → Sprint**

During Sprint Planning, maintainers pull issues from the backlog into the upcoming sprint and assign them to a milestone.

### Label Reference

| Label | Applied by | Meaning |
|---|---|---|
| `needs-triage` | Automation (on open) | New issue, not yet reviewed |
| `needs-refinement` | Maintainer | Needs scoping before entering backlog |
| `needs-more-info` | Maintainer | Waiting on reporter for details |
| `backlog` | Maintainer | Ready for sprint planning; triggers Roadmap project automation |
| `bug` | Issue template | Regression or unintended behavior |
| `feature` | Issue template | New capability request |
| `size/S` | Maintainer | < 1 day |
| `size/M` | Maintainer | 1–3 days |
| `size/L` | Maintainer | 3–5 days |
| `size/XL` | Maintainer | > 5 days; consider splitting |

> **Quick links:**
> Issues needing triage: [`needs-triage`](https://github.com/cloudoperators/greenhouse/issues?q=is%3Aopen+is%3Aissue+label%3Aneeds-triage)
> Issues ready to pick up: [`backlog`](https://github.com/cloudoperators/greenhouse/issues?q=is%3Aopen+is%3Aissue+label%3Abacklog)
* [Issues needing triage (org-wide)](https://github.com/issues?q=org%3Acloudoperators+label%3Aneeds-triage+is%3Aopen+sort%3Acreated-asc)
* [Issues ready to pick up (`backlog`)](https://github.com/cloudoperators/greenhouse/issues?q=is%3Aopen+is%3Aissue+label%3Abacklog)
* [Project board](https://github.com/orgs/cloudoperators/projects/9)
112 changes: 0 additions & 112 deletions skills/issue-triage.md

This file was deleted.

Loading