Skip to content

feat: add gitealike Actions CI parity#281

Merged
mariusvniekerk merged 8 commits intomainfrom
forge-actions-ci-parity
May 8, 2026
Merged

feat: add gitealike Actions CI parity#281
mariusvniekerk merged 8 commits intomainfrom
forge-actions-ci-parity

Conversation

@mariusvniekerk
Copy link
Copy Markdown
Collaborator

feat: add gitealike Actions CI parity

Merge Forgejo and Gitea Actions workflow runs into provider CI checks without duplicating commit statuses. Gitea Actions are gated to servers with the pinned SDK's 1.26+ workflow run API, leaving older hosts status-only.

fix: normalize gitealike action checks safely

Keep action runs with the same title as commit statuses when they point at distinct CI URLs, and normalize unsupported action conclusions without falling back through generic state mapping.

test: persist Gitea Actions checks through API sync

Add full-stack coverage for Gitea Actions CI ingestion so statuses and action runs are normalized, deduplicated by URL, persisted in SQLite, and returned through the pull detail API.

fix: keep latest gitealike action workflow run

Collapse Forgejo and Gitea action runs by workflow identity before CI aggregation so older failed reruns do not keep a pull request failed after a newer successful run.

feat: show locked pull request state

Render the locked PR state from the bool-backed API model only for providers whose frontend capability helper reports lock-state support. Add e2e coverage so the detail view consumes IsLocked instead of only carrying the field through the data model.

fix: prefer queued gitealike action reruns

Use action run numbers and created/updated timestamps when collapsing Gitea-like workflow runs so a queued rerun can supersede an older completed run for the same workflow. This prevents stale failed checks from remaining current after a rerun starts.

fix: keep Gitea Actions probe retryable

Enable the Gitea Actions reader without permanently disabling it from the startup version check. Known older-server version errors now fall back to commit statuses, while transient action/version read errors remain retryable on later syncs.

@roborev-ci
Copy link
Copy Markdown

roborev-ci Bot commented May 7, 2026

roborev: Combined Review (cbf8f20)

One medium issue found; no high or critical findings.

Medium

  • packages/ui/src/components/detail/PullDetail.svelte:588 - detail.platform_host is used as a fallback, but detail does not have a platform_host property. Use the local platform_host variable instead, consistent with the surrounding provider, owner, and name usage.

Synthesized from 3 reviews (agents: codex, gemini | types: default, security)

@roborev-ci
Copy link
Copy Markdown

roborev-ci Bot commented May 7, 2026

roborev: Combined Review (cf1b689)

No Medium, High, or Critical issues found.

All reported reviews found the changes clean; no actionable findings to include.


Synthesized from 3 reviews (agents: codex, gemini | types: default, security)

@mariusvniekerk mariusvniekerk force-pushed the forge-gitealike-docs branch from 3d5626d to 3f98a70 Compare May 7, 2026 20:14
@mariusvniekerk mariusvniekerk force-pushed the forge-actions-ci-parity branch from cf1b689 to e69abde Compare May 7, 2026 20:14
@roborev-ci
Copy link
Copy Markdown

roborev-ci Bot commented May 7, 2026

roborev: Combined Review (e69abde)

Medium-risk issue found.

Medium

  • internal/platform/gitealike/normalize.go:259 - NormalizeStatuses deduplicates Actions runs solely by matching HTMLURL against commit status TargetURL, even when their states disagree. This can hide a failing Gitea/Forgejo Actions run if a successful commit status points to the same URL, causing CI to appear green.

    Remediation: avoid URL-only dedupe. Keep both records when status/conclusion disagree, prefer Actions runs for action URLs, or merge conservatively so failure, pending, or queued states win over success. Use source identity such as app/source type, workflow id, context/name, and normalized state before suppressing a check.


Synthesized from 3 reviews (agents: codex, gemini | types: default, security)

@roborev-ci
Copy link
Copy Markdown

roborev-ci Bot commented May 7, 2026

roborev: Combined Review (052215a)

No Medium, High, or Critical findings were reported.

All review agents reported no actionable issues at or above Medium severity.


Synthesized from 3 reviews (agents: codex, gemini | types: default, security)

@mariusvniekerk mariusvniekerk force-pushed the forge-gitealike-docs branch from a7ccb27 to 78cc1a5 Compare May 7, 2026 20:37
@mariusvniekerk mariusvniekerk force-pushed the forge-actions-ci-parity branch from 052215a to be636d0 Compare May 7, 2026 20:37
@roborev-ci
Copy link
Copy Markdown

roborev-ci Bot commented May 7, 2026

roborev: Combined Review (be636d0)

No medium-or-higher severity issues found.

All reviewers reported the code as clean.


Synthesized from 3 reviews (agents: codex, gemini | types: default, security)

@mariusvniekerk mariusvniekerk force-pushed the forge-gitealike-docs branch from 78cc1a5 to 7d35ac6 Compare May 7, 2026 20:51
@mariusvniekerk mariusvniekerk force-pushed the forge-actions-ci-parity branch from be636d0 to 374f982 Compare May 7, 2026 20:52
@roborev-ci
Copy link
Copy Markdown

roborev-ci Bot commented May 7, 2026

roborev: Combined Review (374f982)

No Medium, High, or Critical findings were reported.

All review agents that provided output found no issues.


Synthesized from 3 reviews (agents: codex, gemini | types: default, security)

@mariusvniekerk mariusvniekerk force-pushed the forge-actions-ci-parity branch from 7a06275 to 9f7f982 Compare May 8, 2026 00:43
@mariusvniekerk mariusvniekerk force-pushed the forge-gitealike-docs branch from 9822874 to cf872cd Compare May 8, 2026 00:45
@mariusvniekerk mariusvniekerk force-pushed the forge-actions-ci-parity branch from 9f7f982 to da11afc Compare May 8, 2026 00:46
@mariusvniekerk mariusvniekerk force-pushed the forge-gitealike-docs branch from cf872cd to 90f417f Compare May 8, 2026 00:48
@mariusvniekerk mariusvniekerk force-pushed the forge-actions-ci-parity branch from da11afc to 34d9fb2 Compare May 8, 2026 00:48
@mariusvniekerk mariusvniekerk force-pushed the forge-gitealike-docs branch from 90f417f to 0a93fe2 Compare May 8, 2026 00:49
@mariusvniekerk mariusvniekerk force-pushed the forge-actions-ci-parity branch from 34d9fb2 to 0411a19 Compare May 8, 2026 00:50
@roborev-ci
Copy link
Copy Markdown

roborev-ci Bot commented May 8, 2026

roborev: Combined Review (34d9fb2)

No Medium, High, or Critical issues were found.

Security review found no issues, and the only reported finding was Low severity, so it is omitted per the review rules.


Synthesized from 3 reviews (agents: codex, gemini | types: default, security)

@mariusvniekerk mariusvniekerk force-pushed the forge-gitealike-docs branch from 0a93fe2 to 374d594 Compare May 8, 2026 00:51
@mariusvniekerk mariusvniekerk force-pushed the forge-actions-ci-parity branch from 0411a19 to 404536d Compare May 8, 2026 00:51
@mariusvniekerk mariusvniekerk force-pushed the forge-gitealike-docs branch from 374d594 to b930649 Compare May 8, 2026 00:52
@mariusvniekerk mariusvniekerk force-pushed the forge-actions-ci-parity branch from 404536d to daf96a5 Compare May 8, 2026 00:53
@roborev-ci
Copy link
Copy Markdown

roborev-ci Bot commented May 8, 2026

roborev: Combined Review (daf96a5)

No Medium, High, or Critical issues found.

All reviewed agents report the code is clean.


Synthesized from 3 reviews (agents: codex, gemini | types: default, security)

@mariusvniekerk mariusvniekerk force-pushed the forge-gitealike-docs branch from b930649 to ae85803 Compare May 8, 2026 00:58
@mariusvniekerk mariusvniekerk force-pushed the forge-actions-ci-parity branch from daf96a5 to 21fd08a Compare May 8, 2026 00:58
@mariusvniekerk mariusvniekerk force-pushed the forge-gitealike-docs branch from ae85803 to 5bd524e Compare May 8, 2026 01:02
@roborev-ci
Copy link
Copy Markdown

roborev-ci Bot commented May 8, 2026

roborev: Combined Review (21fd08a)

Summary verdict: One high-severity issue should be fixed before merge.

High

  • internal/platform/gitea/convert.go:172-173
    • Created and Updated are mapped from run.StartedAt and run.CompletedAt instead of run.CreatedAt and run.UpdatedAt.
    • For queued action runs, StartedAt is zero, so queued reruns can sort as older than prior completed runs and be ignored by actionRunIsNewer.
    • Fix by mapping Created to run.CreatedAt and Updated to run.UpdatedAt, then update TestConvertGiteaActionRun accordingly.

Medium

  • frontend/tests/e2e-full/provider-capabilities.spec.ts:4
    • The locked-state e2e coverage only verifies that a supported provider shows the Locked chip.
    • It does not cover an unsupported provider with IsLocked: true, so the UI could regress by showing locked state even when supportsLocked is false.
    • Add an e2e case with a mocked unsupported provider detail response and assert the Locked chip is absent.

Synthesized from 3 reviews (agents: codex, gemini | types: default, security)

@mariusvniekerk mariusvniekerk force-pushed the forge-actions-ci-parity branch from 21fd08a to 5366710 Compare May 8, 2026 01:02
Base automatically changed from forge-gitealike-docs to main May 8, 2026 01:02
Merge Forgejo and Gitea Actions workflow runs into provider CI checks without duplicating commit statuses. Gitea Actions are gated to servers with the pinned SDK's 1.26+ workflow run API, leaving older hosts status-only.
Keep action runs with the same title as commit statuses when they point at distinct CI URLs, and normalize unsupported action conclusions without falling back through generic state mapping.
Add full-stack coverage for Gitea Actions CI ingestion so statuses and action runs are normalized, deduplicated by URL, persisted in SQLite, and returned through the pull detail API.
Collapse Forgejo and Gitea action runs by workflow identity before CI aggregation so older failed reruns do not keep a pull request failed after a newer successful run.
Render the locked PR state from the bool-backed API model only for providers whose frontend capability helper reports lock-state support. Add e2e coverage so the detail view consumes IsLocked instead of only carrying the field through the data model.
Use action run numbers and created/updated timestamps when collapsing Gitea-like workflow runs so a queued rerun can supersede an older completed run for the same workflow. This prevents stale failed checks from remaining current after a rerun starts.
Enable the Gitea Actions reader without permanently disabling it from the startup version check. Known older-server version errors now fall back to commit statuses, while transient action/version read errors remain retryable on later syncs.
Wrap Gitea action-run listing with the shared SDK context guard so CI sync observes caller cancellation and context serialization.

Carry available action-run timestamps into the shared DTO so run freshness ordering has a timestamp fallback for Gitea runs.
@mariusvniekerk mariusvniekerk force-pushed the forge-actions-ci-parity branch from 5366710 to d3a7980 Compare May 8, 2026 01:04
@mariusvniekerk mariusvniekerk merged commit 194328c into main May 8, 2026
@mariusvniekerk mariusvniekerk deleted the forge-actions-ci-parity branch May 8, 2026 01:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant