Repository navigation
[GH-P4] Checks API, statuts, GitHub Deployments + relance sur le SHA demandé - #236
Merged
Merged
Conversation
…+ rerun pins requested SHA
bobdivx
force-pushed
the
feat/gh-app-p4-checks
branch
from
October 15, 2026 08:33
670fc81 to
bb795d8
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
[GH-P4] Checks API, statuts de commit, GitHub Deployments + relance sur le SHA demandé
Plan :
devforge-plan-github-app.md, phase P4. S'appuie sur P0–P3.Checklist
P4-01
crates/github/src/checks.rs(RepoApi) :create_check_run(name = "DevForge / deploy",head_sha,details_url,external_id = deployment_uuid),update_check_run(id, status, conclusion, output{title, summary, text}), repliPOST /repos/{o}/{r}/statuses/{sha}(contextdevforge/deploy) pour les projets en PAT,branch_head,parse_repo. Le token est masqué enDebug; les erreurs ne contiennent que le code HTTP.P4-02 Branché dans
routes::run_real_deploy_at, par où passent tous les déploiements prod (manuel, webhook historique, webhook app-level, poller auto-deploy) :queued;in_progress;success+details_urlvers la page du déploiement DevForge + résumé avec l'URL ;failure: titre lisible viaerror_parser, 50 dernières lignes masquées (valeurs d'env du projet + jetonsx-access-token/ghs_/ghp_/github_pat_) ;cancelled.Statuts PAT :
pending→success/failure/error.P4-03 GitHub Deployments :
POST /deployments(environmentProduction,auto_merge:false,required_contexts:[]) +deployment_statuses(in_progress→successavecenvironment_url = production_url/failure/inactivesi annulé). C'est ce qui affiche « View deployment ».P4-04 Colonnes
deployments.check_run_id,github_deployment_id,github_head_sha(ALTER dont l'échec est toléré). Les appels GitHub tournent dans des tâches détachées. Un échec est journalisé puis retenté une fois au bout de 20 s, et ne fait jamais échouer le déploiement.Relance au SHA exact (dette P3) :
check_run/check_suite.rerequested⇒devforge_pin_sha=head_sha⇒run_real_deploy_at(.., Some(sha))⇒DeployRequest.pin_sha⇒ après la synchro de branche,git fetch origin <sha> && git reset --hard <sha>. Le SHA est validé (hex, 7–40 caractères) contre l'injection shell. Le Check Run vise ce même SHA.Garde-fou (règle 3)
Rien n'est envoyé à GitHub sans mode App (
DEVFORGE_GITHUB_APP=1ou app enregistrée). Aujourd'hui, en prod, aucune app n'existe : zéro appel, comportement identique. En mode App : Checks API pour les projets liés à l'installation, statuts de commit pour les autres (PAT).Tests
github_checks_tests.rs(wiremock) :check-runsqueued → in_progress → completed/success, deployment + statuses in_progress/success ;failure_output: aucun secret d'env du projet ni jeton GitHub dansoutput.text, 50 dernières lignes seulement.pin_sha_is_validated(deploy) ; la relance épingle biendevforge_pin_sha(events).parse_repo(URL https/ssh/owner/repo, rejets) etclip(coupe sans casser un caractère).cargo test --workspace⇒ 635 passés, 0 échec.Validation (manuelle, après création de l'app en prod)
Commit sur
maind'un repo installé ⇒ coche verte « DevForge / deploy » avec lien vers les logs. Build cassé volontairement ⇒ croix rouge avec un titre d'erreur lisible. Pas encore faite : il faut l'app en prod (P1) et un projet lié.Risques
head_shadu Check Run vient deGET /commits/{branch}au moment de l'enfilage. Si la branche avance avant le clone, la coche peut viser le commit précédent. La relance, elle, est exacte grâce à l'épinglage.git fetch origin <sha>: il faut que GitHub serve le commit par SHA (c'est le cas pour un commit atteignable). Sous Windows, on déploie la tête de branche, avec un log.dev_env.rs) n'est pas suivi côté GitHub dans cette phase (les previews de PR arrivent en P5).