Skip to content
Open
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
28 changes: 28 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# CODEOWNERS — last matching pattern wins; keep broad paths first, then specifics.
# GitHub: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
#
# Only these handles: @snowfox1003 @jonathanMLDev @wpak-ai
# Per-app primary owners below are placeholders (round-robin); replace when the team agrees.

* @snowfox1003 @wpak-ai

boost_collector_runner/ @snowfox1003 @wpak-ai
cppa_user_tracker/ @snowfox1003 @wpak-ai
github_activity_tracker/ @snowfox1003 @wpak-ai
boost_library_tracker/ @snowfox1003 @wpak-ai
boost_library_docs_tracker/ @jonathanMLDev @wpak-ai
boost_library_usage_dashboard/ @jonathanMLDev @wpak-ai
boost_usage_tracker/ @jonathanMLDev @wpak-ai
boost_mailing_list_tracker/ @jonathanMLDev @wpak-ai
cppa_pinecone_sync/ @jonathanMLDev @wpak-ai
clang_github_tracker/ @snowfox1003 @wpak-ai
cppa_slack_tracker/ @snowfox1003 @wpak-ai
discord_activity_tracker/ @snowfox1003 @wpak-ai
wg21_paper_tracker/ @snowfox1003 @wpak-ai
cppa_youtube_script_tracker/ @jonathanMLDev @wpak-ai
slack_event_handler/ @snowfox1003 @wpak-ai

core/ @snowfox1003 @jonathanMLDev @wpak-ai
.github/workflows/ @snowfox1003 @wpak-ai

docs/ @snowfox1003 @jonathanMLDev @wpak-ai
29 changes: 29 additions & 0 deletions docs/operations/CODEOWNERS_and_branch_protection.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# CODEOWNERS and branch protection

This repo uses [`.github/CODEOWNERS`](../../.github/CODEOWNERS) so GitHub can request reviews from code owners. **CODEOWNERS only affects behavior meaningfully when branch protection requires reviews from code owners** (and owners have write access to the repository).

## 1. Enable branch protection (repository admin)

For each protected branch (for example `main` or `develop`):

1. Open **Settings → Branches → Branch protection rules** (or **Rules → Rulesets** if your org uses rulesets).
2. Edit the rule that applies to the branch (or create one).
3. Enable **Require a pull request before merging**.
4. Enable **Require an approval from a code owner** (wording may be **Require review from Code Owners**).
5. Set **Required number of approvals before merging** to **1** (or your team policy). With `docs/` listing multiple owners, one approval from any listed owner for the changed paths is usually enough.

Without step 4, owners may still appear as suggested reviewers, but merges are not blocked on owner review.

## 2. Verify after CODEOWNERS is on the default branch

GitHub reads `CODEOWNERS` from the **default** branch for review assignment. After your PR that adds or updates `.github/CODEOWNERS` is **merged**:

1. **App path:** open a **draft** PR that changes one file under a single app (e.g. `boost_mailing_list_tracker/`). Confirm the **Reviewers** section lists the owner from the matching `CODEOWNERS` line.
2. **`docs/`:** open a draft PR that only changes a file under `docs/`. Confirm all handles on the `docs/` line are requested (users with write access only).
3. **Workflows:** open a draft PR that only changes a file under `.github/workflows/`. Confirm the expected owner is requested.

Then close or merge the draft PRs as appropriate.

## 3. Updating owners

When primary owners change, edit [`.github/CODEOWNERS`](../../.github/CODEOWNERS) only. Optionally align the human ↔ app table in [Onboarding.md](../Onboarding.md) or [cross-app-dependencies.md](../cross-app-dependencies.md) so docs stay in sync.
20 changes: 11 additions & 9 deletions docs/operations/README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
# Operations (shared I/O layer)
# Operations

**Operations** are shared, app-agnostic layers for **external I/O** (GitHub API, Discord, notifications, etc.). Any Django app can use them; they are **not** part of the per-app **service API** (which is for database writes only).
**Operations** are shared, app-agnostic helpers under **`core/operations/`** for talking to the outside world (GitHub, Discord, CLIs, and similar). They are **not** the per-app **service API**, which is reserved for **database** writes.

| Operation | Package | Doc | Purpose |
|-----------|---------|-----|---------|
| **GitHub** | `core.operations.github_ops` | [github.md](github.md) | Clone, push, fetch file, create PR/issue/comment; token resolution. |
| **DiscordChatExporter** | *(external CLI)* | [discord_chat_exporter.md](discord_chat_exporter.md) | Download, install path, `.env` settings for Tyrrrz CLI used by `discord_activity_tracker`. |
| **Discord** | *(planned)* | *(e.g. discord.md)* | Send notifications to Discord; used by other apps. |
| Name | Where it lives | Doc | Role |
|------|----------------|-----|------|
| GitHub | `core.operations.github_ops` | [github.md](github.md) | Clone, fetch, PR/issue/comment helpers; tokens. |
| DiscordChatExporter | External CLI | [discord_chat_exporter.md](discord_chat_exporter.md) | Install, paths, and `.env` for the exporter used by `discord_activity_tracker`. |
| Discord | *(planned)* | — | Notifications to Discord from multiple apps. |

**When to add a new operation:** When multiple apps need the same external integration (e.g. “notify via Discord”). Prefer adding a **utility package** under **`core/operations/`** (not a new Django app unless you need models), document it in this folder, then list it in the table above.
**Repo runbooks:** [CODEOWNERS & branch protection](CODEOWNERS_and_branch_protection.md) — code owners file and GitHub branch settings.

**Service API vs Operations:** Service API = one place per app for **database** create/update/delete. Operations = shared **external** I/O (GitHub, Discord, etc.) used by many apps.
**Adding a new operation:** Put shared integration code in **`core/operations/`**, document it here, and add a row to the table (use a new Django app only if you need models).

**Service API vs operations:** *Service API* = one module per app for ORM create/update/delete. *Operations* = shared external I/O any app may import.
Loading