From 84c0fcd1facf403d7584068a7565cbe2bb330fe6 Mon Sep 17 00:00:00 2001 From: bircni Date: Tue, 10 Nov 2026 11:35:16 +0000 Subject: [PATCH] fix!: remove the dbfs log workaround and require Gitea 1.26.2 (#1395) Gitea 1.26.2 finalizes logs on an empty `UpdateLog` with `NoMore` (https://github.com/go-gitea/gitea/pull/37687), so the sentinel row is no longer needed. On older servers, the final log of most jobs would never be archived and stays in `dbfs_data`, so this raises the minimum Gitea version. It lives in `ver.MinGiteaVersion`, which the error for servers without `Declare` now names. Fixes: https://gitea.com/gitea/runner/issues/953 Co-authored-by: silverwind Reviewed-on: https://gitea.com/gitea/runner/pulls/1395 Reviewed-by: silverwind <2021+silverwind@noreply.gitea.com> Co-authored-by: bircni --- README.md | 1 + examples/docker-compose/README.md | 1 - internal/app/cmd/daemon.go | 2 +- internal/pkg/report/reporter.go | 16 ---------------- internal/pkg/report/reporter_test.go | 4 ++-- internal/pkg/ver/version.go | 2 ++ 6 files changed, 6 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index a543a9f6..400b5f11 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ Gitea Runner runs the jobs of Gitea Actions workflows. Register it with a Gitea ### Prerequisites - Linux, macOS or Windows, or FreeBSD. +- Gitea 1.26.2 or newer. - `git` 2.34.1 or newer. - `docker`, or `podman` with `podman.socket` enabled, for `docker` labels and Docker actions. See Docker's [install instructions](https://docs.docker.com/engine/install/). diff --git a/examples/docker-compose/README.md b/examples/docker-compose/README.md index 9a0b5212..e08738a7 100644 --- a/examples/docker-compose/README.md +++ b/examples/docker-compose/README.md @@ -16,7 +16,6 @@ This uses the recommended Docker-in-Docker image, see [image flavours](../../REA timeout: 10s environment: # GITEA_RUNNER_REGISTRATION_TOKEN can be used to set a global runner registration token. - # The Gitea version must be v1.23 or higher. # It's also possible to use GITEA_RUNNER_REGISTRATION_TOKEN_FILE to pass the location. # - GITEA_RUNNER_REGISTRATION_TOKEN= diff --git a/internal/app/cmd/daemon.go b/internal/app/cmd/daemon.go index 163c81f3..28770304 100644 --- a/internal/app/cmd/daemon.go +++ b/internal/app/cmd/daemon.go @@ -208,7 +208,7 @@ func runDaemon(ctx context.Context, daemArgs *daemonArgs, configFile *string) fu case err != nil && ctx.Err() != nil && !client.IsRegistrationRejected(err): return nil case err != nil && connect.CodeOf(err) == connect.CodeUnimplemented: - logging.Errorf("Your Gitea version is too old to support runner declare, please upgrade to v1.21 or later") + logging.Errorf("Your Gitea version is too old to support runner declare, please upgrade to v%s or later", ver.MinGiteaVersion) return err case err != nil: logging.WithError(err).Error("fail to invoke Declare") diff --git a/internal/pkg/report/reporter.go b/internal/pkg/report/reporter.go index 5f194972..b017de27 100644 --- a/internal/pkg/report/reporter.go +++ b/internal/pkg/report/reporter.go @@ -691,22 +691,6 @@ func (r *Reporter) Close(lastWords string) error { logging.Errorf("No Response from RunDaemon for %s, continue best effort", r.daemonWait) } - // Gitea's UpdateLog short-circuits on len(Rows)==0 before honoring NoMore, - // so a final empty request never runs TransferLogs and dbfs_data leaks. - // Inject a sentinel row after the daemon has exited so it can't be flushed - // before ReportLog(true). - // TODO: Remove after https://github.com/go-gitea/gitea/pull/37631 is in all - // supported branches, e.g. v1.28+. - r.stateMu.Lock() - if len(r.logRows) == 0 { - // Not appendLogRow: the sentinel is not job output and has no place in job.log. - r.logRows = append(r.logRows, &runnerv1.LogRow{ - Time: timestamppb.Now(), - Content: "", - }) - } - r.stateMu.Unlock() - // Separate budgets so a slow ReportLog can't starve the ReportState that // carries the cancel acknowledgement. err := errors.Join( diff --git a/internal/pkg/report/reporter_test.go b/internal/pkg/report/reporter_test.go index 95aa0cb5..68ef0215 100644 --- a/internal/pkg/report/reporter_test.go +++ b/internal/pkg/report/reporter_test.go @@ -355,7 +355,7 @@ func TestReporter_StateNotifyFlush(t *testing.T) { }) } -func TestReporter_CloseAlwaysSendsRowsWithNoMore(t *testing.T) { +func TestReporter_CloseFinalizesLogWithoutRows(t *testing.T) { var lastReq atomic.Pointer[runnerv1.UpdateLogRequest] var noMoreCalls atomic.Int64 @@ -400,7 +400,7 @@ func TestReporter_CloseAlwaysSendsRowsWithNoMore(t *testing.T) { final := lastReq.Load() require.NotNil(t, final) assert.True(t, final.NoMore, "final UpdateLog must carry NoMore=true") - assert.NotEmpty(t, final.Rows, "final UpdateLog must carry at least one row") + assert.Empty(t, final.Rows, "a job without output must not get a log row") } func TestReporter_StateHeartbeat(t *testing.T) { diff --git a/internal/pkg/ver/version.go b/internal/pkg/ver/version.go index c86157cd..89aac010 100644 --- a/internal/pkg/ver/version.go +++ b/internal/pkg/ver/version.go @@ -6,6 +6,8 @@ package ver // go build -ldflags "-X gitea.com/gitea/runner/internal/pkg/ver.version=1.2.3" var version = "dev" +const MinGiteaVersion = "1.26.2" // also in the README.md prerequisites + func Version() string { return version }