🎙️ task - feat: support github rulesets at org and repo level
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 42/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Stack tecnológico
- github, typescript
- Área
- backend-api-design
Línea de trabajo
Empieza leyendo DeclaredGithubBranchProtection y DeclaredGithubEnvironment, y después sus DAOs y las pruebas de DAO existentes para conocer la estructura de archivos, la lógica de cast, la forma de context/auth y los patrones de get/set. Revisa .agent/ y briefs/ antes de implementar. Se considera terminado cuando los objetos y DAOs de reglas con alcance de repositorio y organización estén registrados y exportados, cubiertos por pruebas unitarias y de integración, y pasen typecheck, build, lint y format.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
🦫🎙️ dispatch to foreman
💧 task enqueued
├─ priority = ?
├─ yieldage = ?
└─ leverage = ?
title
feat: support github rulesets at org and repo level
description
.what
add support for github rulesets at both repo level and org level, so consumers can declare tag-protection (and branch) rulesets as code via the declastruct get/set pattern.
.why
use case from ahbode/infrastructure: enforce that only a specific github app (release-please) can create tags that match v*. this is the out-of-band half of an aws oidc "prod apply only from a version tag cut from main" guarantee:
- aws sts conditions on
ref_type == tag+ref LIKE refs/tags/v* - a github tag ruleset must restrict
v*creation to the release app only (bypass actor) - release-please runs only on main
today declastruct-github has no ruleset/tag-protection resource (it models DeclaredGithubBranchProtection + DeclaredGithubEnvironment but not rulesets), so this cannot be declared as code.
.deliverables
DeclaredGithubRepoRulesetdomain object (repo-scoped)DeclaredGithubOrgRulesetdomain object (org-scoped; adds repository-scope conditions)- supporter value objects if the repo favors that granularity (rule, bypass actor, conditions) — mirror how
DeclaredGithubBranchProtectionhandles nested shapes DeclaredGithubRepoRulesetDao+DeclaredGithubOrgRulesetDao— get (by primary id, by unique name, by ref) + set (findsert + upsert), to mirror extant DAO idempotency- register/export alongside extant objects + DAOs (no barrel-export forwarders)
- tests to mirror extant DAO tests (unit for cast logic; integration per the repo's test-fns + credentials pattern)
.api reference
- repo rulesets:
GET/POST/PUT/DELETE /repos/{owner}/{repo}/rulesets(+/rulesets/{id}) - org rulesets:
GET/POST/PUT/DELETE /orgs/{org}/rulesets(+/rulesets/{id}) - ruleset fields:
name(natural unique key per scope),target('branch'|'tag'|'push'),enforcement('active'|'evaluate'|'disabled'),bypass_actors[](actor_id,actor_type['Integration'|'Team'|'OrganizationAdmin'|'RepositoryRole'|'DeployKey'],bypass_mode['always'|'pull_request']),conditions(ref_name.include[]/exclude[], e.g.refs/tags/v*, meta~ALL/~DEFAULT_BRANCH),rules[]({ type, parameters? }; types:creation,update,deletion,required_signatures,required_linear_history,non_fast_forward, ...) - org rulesets also support
conditions.repository_name(include/exclude/protected) orrepository_id id= server-assigned primary key;name= natural unique key (per repo, or per org)
.key choices to verify
- repo ruleset:
primary = ['id'],unique = ['name'] - org ruleset: confirm name uniqueness is per-org; key accordingly
- mirror exactly:
DeclaredGithubBranchProtection,DeclaredGithubEnvironment, and their DAOs (names, file layout, cast functions, context/auth shape, get/set verbs, inline io types, one-export-per-file, fail-fast)
.note
- honor the repo's house rules under
.agent/andbriefs/ - get typecheck/build + lint/format green
- write integration tests per the repo's pattern even if creds are unavailable locally; never add failhide/skip stubs
.source
requested from ahbode/infrastructure work on github-environments-vs-aws-oidc (vlad).
- Lenguaje dominante
- TypeScript
- Estrellas
- 0
- Forks
- 0
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de ehmpathy/declastruct-github
-
🎙️ task - fix(repo): coerce empty-string homepage/description to null (perpetual UPDATE drift)Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 38/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 45/100
Todos los issues de ehmpathy/declastruct-github
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
JoviDeCroock/pracht#432 ·
Los mantenedores suelen responder en 1 día
-
Add: CNN en Espanol SDAbiertoapproved check:passed streams:add
Dificultad 1/5 Menos de una hora Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día
-
Hardware attribute name "app Connection Support" has inconsistent casingPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
walletbeat/walletbeat#1628 ·
Los mantenedores suelen responder en 1 día
-
bug go
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
genkit-ai/genkit#6761 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
NousResearch/hermes-agent#136483 ·
Los mantenedores suelen responder en 1 día