feat: allow config server.connections config to poll multiple Forgejo servers simultaneously #1380

Merged
mfenniak merged 8 commits from mfenniak/forgejo-runner:multi-connection into main 2026-02-17 16:46:20 +00:00
Owner

Adds support for multiple server connections via config file.

Example:

server:
  connections:
    forgejo1:
      url: https://example.com/
      uuid: 74bec7ab-ba78-44cb-815c-7c4ded077f0e
      token: 4acd10731a44d0c6a29935efa7dc813a
      # labels: ...
      # fetch_interval: ...
    forgejo2:
      url: https://codeberg.org/
      uuid: b72e5f14-c561-4f03-94e1-79a0c78e99b8
      token: 224c50cc68f7ad8e429b19044f105232

Both labels and fetch_interval can optionally be provided on a connection. If absent, they'll default to runner.labels and runner.fetch_interval (with a default of 2s, and a minimum of 30s for codeberg.org).

This is a fully backwards compatible change. If no config changes are made, then the contents of the runner registration file (.runner) file will be used to populate one server connection. However, if multiple servers are desired, then .runner must be removed and migrated to the new config file section -- both server.connections and .runner cannot co-exist.

Future items that are planned for this effort are documented in forgejo/forgejo-actions-feature-requests#88 (comment), and include new registration tools in Forgejo to make this capability easier to use.

  • features
    • PR: feat: allow config server.connections config to poll multiple Forgejo servers simultaneously
Adds support for multiple server connections via config file. Example: ``` server: connections: forgejo1: url: https://example.com/ uuid: 74bec7ab-ba78-44cb-815c-7c4ded077f0e token: 4acd10731a44d0c6a29935efa7dc813a # labels: ... # fetch_interval: ... forgejo2: url: https://codeberg.org/ uuid: b72e5f14-c561-4f03-94e1-79a0c78e99b8 token: 224c50cc68f7ad8e429b19044f105232 ``` Both `labels` and `fetch_interval` can optionally be provided on a connection. If absent, they'll default to `runner.labels` and `runner.fetch_interval` (with a default of 2s, and a minimum of 30s for codeberg.org). This is a fully backwards compatible change. If no config changes are made, then the contents of the runner registration file (`.runner`) file will be used to populate one server connection. However, if multiple servers are desired, then `.runner` must be removed and migrated to the new config file section -- both `server.connections` and `.runner` cannot co-exist. Future items that are planned for this effort are documented in https://code.forgejo.org/forgejo/forgejo-actions-feature-requests/issues/88#issuecomment-78079, and include new registration tools in Forgejo to make this capability easier to use. <!--start release-notes-assistant--> <!--URL:https://code.forgejo.org/forgejo/runner--> - features - [PR](https://code.forgejo.org/forgejo/runner/pulls/1380): <!--number 1380 --><!--line 0 --><!--description ZmVhdDogYWxsb3cgY29uZmlnIGBzZXJ2ZXIuY29ubmVjdGlvbnNgIGNvbmZpZyB0byBwb2xsIG11bHRpcGxlIEZvcmdlam8gc2VydmVycyBzaW11bHRhbmVvdXNseQ==-->feat: allow config `server.connections` config to poll multiple Forgejo servers simultaneously<!--description--> <!--end release-notes-assistant-->
feat: add multiple connection support to daemon
Some checks failed
checks / Build Forgejo Runner (pull_request) Failing after 43s
issue-labels / release-notes (pull_request_target) Successful in 6s
checks / Build unsupported platforms (pull_request) Has been skipped
checks / validate pre-commit-hooks file (pull_request) Successful in 49s
checks / runner exec tests (pull_request) Has been skipped
checks / Run integration tests with Docker (docker-stable) (pull_request) Has been skipped
checks / Run integration tests with Docker (docker-latest) (pull_request) Has been skipped
checks / Run integration tests with Podman (pull_request) Has been skipped
checks / validate mocks (pull_request) Successful in 1m5s
2ee87865a1
mfenniak changed title from WIP: feat: use server.connections config to poll multiple Forgejo servers simultaneously to WIP: feat: use server.connections config to poll multiple Forgejo servers simultaneously [skip ci] 2026-02-16 03:37:26 +00:00
mfenniak force-pushed multi-connection from 2ee87865a1
Some checks failed
checks / Build Forgejo Runner (pull_request) Failing after 43s
issue-labels / release-notes (pull_request_target) Successful in 6s
checks / Build unsupported platforms (pull_request) Has been skipped
checks / validate pre-commit-hooks file (pull_request) Successful in 49s
checks / runner exec tests (pull_request) Has been skipped
checks / Run integration tests with Docker (docker-stable) (pull_request) Has been skipped
checks / Run integration tests with Docker (docker-latest) (pull_request) Has been skipped
checks / Run integration tests with Podman (pull_request) Has been skipped
checks / validate mocks (pull_request) Successful in 1m5s
to 7b517ccfd1 2026-02-16 20:46:54 +00:00
Compare
mfenniak force-pushed multi-connection from 7b517ccfd1 to 530056bd10 2026-02-16 21:32:11 +00:00 Compare
mfenniak force-pushed multi-connection from 530056bd10 to 99aee6b52e 2026-02-16 21:58:46 +00:00 Compare
mfenniak force-pushed multi-connection from 99aee6b52e to 0518962ced 2026-02-16 22:17:40 +00:00 Compare
mfenniak force-pushed multi-connection from 0518962ced to 9fe105895b 2026-02-16 22:22:05 +00:00 Compare
mfenniak force-pushed multi-connection from 9fe105895b to 7fc2e94890
All checks were successful
issue-labels / release-notes (pull_request_target) Successful in 4s
2026-02-16 22:55:07 +00:00
Compare
mfenniak changed title from WIP: feat: use server.connections config to poll multiple Forgejo servers simultaneously [skip ci] to WIP: feat: use server.connections config to poll multiple Forgejo servers simultaneously 2026-02-16 22:55:35 +00:00
mfenniak force-pushed multi-connection from 7fc2e94890
All checks were successful
issue-labels / release-notes (pull_request_target) Successful in 4s
to 33f06a5789
Some checks failed
cascade / debug (pull_request_target) Has been skipped
cascade / forgejo (pull_request_target) Has been skipped
cascade / end-to-end (pull_request_target) Has been skipped
checks / validate pre-commit-hooks file (pull_request) Successful in 36s
issue-labels / release-notes (pull_request_target) Successful in 4s
checks / Build Forgejo Runner (pull_request) Successful in 39s
checks / validate mocks (pull_request) Successful in 42s
checks / Build unsupported platforms (pull_request) Successful in 19s
checks / runner exec tests (pull_request) Successful in 51s
checks / Run integration tests with Podman (pull_request) Failing after 30m50s
checks / Run integration tests with Docker (docker-latest) (pull_request) Failing after 31m11s
checks / Run integration tests with Docker (docker-stable) (pull_request) Failing after 31m30s
2026-02-16 22:59:54 +00:00
Compare
mfenniak force-pushed multi-connection from 33f06a5789
Some checks failed
cascade / debug (pull_request_target) Has been skipped
cascade / forgejo (pull_request_target) Has been skipped
cascade / end-to-end (pull_request_target) Has been skipped
checks / validate pre-commit-hooks file (pull_request) Successful in 36s
issue-labels / release-notes (pull_request_target) Successful in 4s
checks / Build Forgejo Runner (pull_request) Successful in 39s
checks / validate mocks (pull_request) Successful in 42s
checks / Build unsupported platforms (pull_request) Successful in 19s
checks / runner exec tests (pull_request) Successful in 51s
checks / Run integration tests with Podman (pull_request) Failing after 30m50s
checks / Run integration tests with Docker (docker-latest) (pull_request) Failing after 31m11s
checks / Run integration tests with Docker (docker-stable) (pull_request) Failing after 31m30s
to 8469762532
Some checks failed
cascade / end-to-end (pull_request_target) Has been skipped
cascade / debug (pull_request_target) Has been skipped
cascade / forgejo (pull_request_target) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 5s
checks / validate pre-commit-hooks file (pull_request) Successful in 35s
checks / validate mocks (pull_request) Successful in 41s
checks / Build Forgejo Runner (pull_request) Successful in 41s
checks / Build unsupported platforms (pull_request) Successful in 18s
checks / runner exec tests (pull_request) Successful in 29s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 9m43s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 11m38s
checks / Run integration tests with Podman (pull_request) Has been cancelled
2026-02-17 01:33:18 +00:00
Compare
mfenniak force-pushed multi-connection from 8469762532
Some checks failed
cascade / end-to-end (pull_request_target) Has been skipped
cascade / debug (pull_request_target) Has been skipped
cascade / forgejo (pull_request_target) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 5s
checks / validate pre-commit-hooks file (pull_request) Successful in 35s
checks / validate mocks (pull_request) Successful in 41s
checks / Build Forgejo Runner (pull_request) Successful in 41s
checks / Build unsupported platforms (pull_request) Successful in 18s
checks / runner exec tests (pull_request) Successful in 29s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 9m43s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 11m38s
checks / Run integration tests with Podman (pull_request) Has been cancelled
to 33ae17db93
Some checks failed
cascade / end-to-end (pull_request_target) Has been skipped
cascade / debug (pull_request_target) Has been skipped
cascade / forgejo (pull_request_target) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 4s
checks / Build Forgejo Runner (pull_request) Failing after 27s
checks / Build unsupported platforms (pull_request) Has been skipped
checks / runner exec tests (pull_request) Has been skipped
checks / Run integration tests with Podman (pull_request) Has been skipped
checks / Run integration tests with Docker (docker-latest) (pull_request) Has been skipped
checks / Run integration tests with Docker (docker-stable) (pull_request) Has been skipped
checks / validate pre-commit-hooks file (pull_request) Successful in 41s
checks / validate mocks (pull_request) Successful in 52s
2026-02-17 01:48:03 +00:00
Compare
mfenniak force-pushed multi-connection from 33ae17db93
Some checks failed
cascade / end-to-end (pull_request_target) Has been skipped
cascade / debug (pull_request_target) Has been skipped
cascade / forgejo (pull_request_target) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 4s
checks / Build Forgejo Runner (pull_request) Failing after 27s
checks / Build unsupported platforms (pull_request) Has been skipped
checks / runner exec tests (pull_request) Has been skipped
checks / Run integration tests with Podman (pull_request) Has been skipped
checks / Run integration tests with Docker (docker-latest) (pull_request) Has been skipped
checks / Run integration tests with Docker (docker-stable) (pull_request) Has been skipped
checks / validate pre-commit-hooks file (pull_request) Successful in 41s
checks / validate mocks (pull_request) Successful in 52s
to 2e7f3d8c26
All checks were successful
cascade / forgejo (pull_request_target) Has been skipped
cascade / debug (pull_request_target) Has been skipped
cascade / end-to-end (pull_request_target) Has been skipped
checks / Build Forgejo Runner (pull_request) Successful in 46s
checks / validate pre-commit-hooks file (pull_request) Successful in 49s
checks / validate mocks (pull_request) Successful in 1m2s
checks / Build unsupported platforms (pull_request) Successful in 27s
checks / runner exec tests (pull_request) Successful in 34s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 10m46s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 13m13s
checks / Run integration tests with Podman (pull_request) Successful in 16m1s
issue-labels / release-notes (pull_request_target) Successful in 3s
2026-02-17 01:50:51 +00:00
Compare
mfenniak changed title from WIP: feat: use server.connections config to poll multiple Forgejo servers simultaneously to WIP: feat: allow config server.connections config to poll multiple Forgejo servers simultaneously 2026-02-17 02:05:45 +00:00
mfenniak changed title from WIP: feat: allow config server.connections config to poll multiple Forgejo servers simultaneously to feat: allow config server.connections config to poll multiple Forgejo servers simultaneously 2026-02-17 02:07:55 +00:00
Author
Owner

@aahlenst I've done my best to make this change reviewable by-commit, but pulling apart logical commits has been a bit difficult. Hopefully it's manageable as the overall size isn't too large.

@aahlenst I've done my best to make this change reviewable by-commit, but pulling apart logical commits has been a bit difficult. Hopefully it's manageable as the overall size isn't too large.
aahlenst approved these changes 2026-02-17 13:17:24 +00:00
aahlenst left a comment
Member

I gave it a whirl and it works great.

I gave it a whirl and it works great.
@ -256,4 +244,0 @@
// if declared successfully, override the labels in the.runner file with valid labels in the config file (if specified)
runner.Update(ctx, ls)
reg.Labels = ls.ToStrings()
if err := config.SaveRegistration(cfg.Runner.File, reg); err != nil {
Member

To confirm that I got it right:

In config.go, parsedDefaultLabels are now applied to every connection before handing out the newly created connection. That means that every connection in .runner now receives labels even if there are no labels in .runner.

That's terrific and fixes multiple bugs.

To confirm that I got it right: In `config.go`, `parsedDefaultLabels` are now applied to every connection before handing out the newly created connection. That means that every connection in `.runner` now receives labels even if there are no labels in `.runner`. That's terrific and fixes multiple bugs.
Author
Owner

That's right. 👍

That's right. 👍
mfenniak marked this conversation as resolved
@ -85,0 +78,4 @@
runners := make([]run.RunnerInterface, 0, len(cfg.Server.Connections))
ephemeralRunners := make([]bool, 0, len(cfg.Server.Connections))
for name, conn := range cfg.Server.Connections {
client := createClient(cfg, conn)
Member

Info: shadows imported package client.

Info: shadows imported package `client`.
mfenniak marked this conversation as resolved
@ -250,0 +250,4 @@
} else {
for _, conn := range config.Server.Connections {
if conn.FetchInterval == 0 {
conn.FetchInterval = s.FetchInterval
Member

What about enforcing the Codeberg limit here?

What about enforcing the Codeberg limit here?
Author
Owner

config.New(config.FromFile(...), config.FromRegistration) -- at this point in the code we're in the config.FromFile(...) option, and so applying the Codeberg limit here won't apply to the connection imported from the .runner registration file.

`config.New(config.FromFile(...), config.FromRegistration)` -- at this point in the code we're in the `config.FromFile(...)` option, and so applying the Codeberg limit here won't apply to the connection imported from the `.runner` registration file.
@ -483,0 +503,4 @@
if conn.FetchInterval == 0 {
conn.FetchInterval = 2 * time.Second
}
if conn.URL.Host == "codeberg.org" && conn.FetchInterval < 30*time.Second {
Member

conn.URL.Hostname()? Hostname() removes an optional port. I'd also compare to www.codeberg.org.

`conn.URL.Hostname()`? `Hostname()` removes an optional port. I'd also compare to `www.codeberg.org`.
Author
Owner

Updated to strings.HasSuffix(conn.URL.Hostname(), "codeberg.org"). 👍

Updated to `strings.HasSuffix(conn.URL.Hostname(), "codeberg.org")`. 👍
mfenniak marked this conversation as resolved
@ -23,4 +24,0 @@
Token string `json:"token"`
Address string `json:"address"`
Labels []string `json:"labels"`
Ephemeral bool `json:"-"`
Member

You were able to optimize that one away? That's great.

You were able to optimize that one away? That's great.
Author
Owner

Yeah, it led to a four-return-value function in createRunner which I don't love, but it's easy to fix in a future refactor.

Yeah, it led to a four-return-value function in `createRunner` which I don't love, but it's easy to fix in a future refactor.
mfenniak marked this conversation as resolved
@ -64,0 +94,4 @@
require.Len(t, c.Labels, 1)
assert.Equal(t, c.Labels[0].Name, "ubuntu-latest")
assert.Equal(t, c.Labels[0].Schema, "docker")
assert.Equal(t, c.Labels[0].Arg, "//code.forgejo.org/oci/node:20-bookworm")
Member

Should we add String() to Label? Doesn't have to happen as part of this PR. I can do it if you want me to.

Should we add `String()` to `Label`? Doesn't have to happen as part of this PR. I can do it if you want me to.
Author
Owner

That'd be nice-to-have in the future.

That'd be nice-to-have in the future.
mfenniak force-pushed multi-connection from 2e7f3d8c26
All checks were successful
cascade / forgejo (pull_request_target) Has been skipped
cascade / debug (pull_request_target) Has been skipped
cascade / end-to-end (pull_request_target) Has been skipped
checks / Build Forgejo Runner (pull_request) Successful in 46s
checks / validate pre-commit-hooks file (pull_request) Successful in 49s
checks / validate mocks (pull_request) Successful in 1m2s
checks / Build unsupported platforms (pull_request) Successful in 27s
checks / runner exec tests (pull_request) Successful in 34s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 10m46s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 13m13s
checks / Run integration tests with Podman (pull_request) Successful in 16m1s
issue-labels / release-notes (pull_request_target) Successful in 3s
to c456ed039e
Some checks failed
checks / validate pre-commit-hooks file (pull_request) Successful in 36s
checks / Build Forgejo Runner (pull_request) Successful in 44s
checks / validate mocks (pull_request) Successful in 49s
cascade / forgejo (pull_request_target) Has been skipped
cascade / debug (pull_request_target) Has been skipped
checks / runner exec tests (pull_request) Successful in 49s
issue-labels / release-notes (pull_request_target) Successful in 5s
checks / Build unsupported platforms (pull_request) Successful in 1m2s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 9m37s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 11m23s
checks / Run integration tests with Podman (pull_request) Successful in 14m10s
cascade / end-to-end (pull_request_target) Failing after 15m19s
2026-02-17 14:45:17 +00:00
Compare
Contributor

cascading-pr updated at actions/setup-forgejo#889

cascading-pr updated at https://code.forgejo.org/actions/setup-forgejo/pulls/889
Author
Owner

Hm. While looking into the end-to-end testing failure (https://code.forgejo.org/forgejo/end-to-end/actions/runs/4938/jobs/6/attempt/1), I discovered one bug before I got to reproducing the test. Previously labels from .runner would be overridden by labels from the config file's runner.labels, but now they get set into the server connection and therefore look just like they're specified on the connection.

I'm looking into a solution for this before this can move forward.

Hm. While looking into the end-to-end testing failure (https://code.forgejo.org/forgejo/end-to-end/actions/runs/4938/jobs/6/attempt/1), I discovered one bug before I got to reproducing the test. Previously labels from `.runner` would be overridden by labels from the config file's `runner.labels`, but now they get set into the server connection and therefore look just like they're specified on the connection. I'm looking into a solution for this before this can move forward.
fix: prioritize 'runner.labels' over '.runner' labels if specified
Some checks failed
cascade / forgejo (pull_request_target) Has been skipped
cascade / debug (pull_request_target) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 5s
checks / validate pre-commit-hooks file (pull_request) Successful in 34s
checks / Build Forgejo Runner (pull_request) Successful in 38s
checks / validate mocks (pull_request) Successful in 41s
checks / Build unsupported platforms (pull_request) Successful in 21s
checks / runner exec tests (pull_request) Successful in 26s
cascade / end-to-end (pull_request_target) Failing after 11m43s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 9m4s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 10m42s
checks / Run integration tests with Podman (pull_request) Has been cancelled
914b403c29
Contributor

cascading-pr updated at actions/setup-forgejo#889

cascading-pr updated at https://code.forgejo.org/actions/setup-forgejo/pulls/889
Author
Owner

That may have been the cause of the end-to-end test failure as well, as I can pass the failed test in a local environment now -- will see if it passes in CI as well. 914b403c29 is a bit ugly, marking the .runner labels as some that can be overridden... but as it's all internal to the config package I don't hate it completely. In the long term as we get rid of .runner, the behaviour becomes clearer and easier to understand.

That may have been the cause of the end-to-end test failure as well, as I can pass the failed test in a local environment now -- will see if it passes in CI as well. 914b403c29aeb5f2b535662a784216c443fb476a is a bit ugly, marking the `.runner` labels as some that can be overridden... but as it's all internal to the config package I don't hate it completely. In the long term as we get rid of `.runner`, the behaviour becomes clearer and easier to understand.
fix: store a copy of 'runner.labels' in '.runner' during create-runner-file
All checks were successful
issue-labels / release-notes (pull_request_target) Successful in 6s
checks / validate pre-commit-hooks file (pull_request) Successful in 35s
checks / validate mocks (pull_request) Successful in 39s
checks / Build Forgejo Runner (pull_request) Successful in 41s
checks / Build unsupported platforms (pull_request) Successful in 23s
checks / runner exec tests (pull_request) Successful in 27s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 9m0s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 10m27s
checks / Run integration tests with Podman (pull_request) Successful in 14m9s
cascade / debug (pull_request_target) Has been skipped
cascade / end-to-end (pull_request_target) Successful in 4s
cascade / forgejo (pull_request_target) Successful in 1m11s
10c517717f
Contributor

cascading-pr updated at actions/setup-forgejo#889

cascading-pr updated at https://code.forgejo.org/actions/setup-forgejo/pulls/889
Author
Owner

Another patch for an end-to-end test failure: 10c517717f It's probably more of a testing artifact than anything else, but I figured it's best to maintain as much backward compatibility as possible. create-runner-file test was failing because a config file's runner.labels is used to declare the runner during this operation, which used to cause a second save of the .runner file with the declared labels and cause the config labels to end up in the .runner file. The test is validating that those labels end up in .runner (even though, in the presence of a config file, the value here has no impact). I've replicated the same behaviour by initializing the registration with those labels now.

Another patch for an end-to-end test failure: 10c517717f989245003c34f0a487d1c472f611ad It's probably more of a testing artifact than anything else, but I figured it's best to maintain as much backward compatibility as possible. `create-runner-file` test was failing because a config file's `runner.labels` is used to declare the runner during this operation, which used to cause a second save of the `.runner` file with the declared labels and cause the config labels to end up in the `.runner` file. The test is validating that those labels end up in `.runner` (even though, in the presence of a config file, the value here has no impact). I've replicated the same behaviour by initializing the registration with those labels now.
Author
Owner

end-to-end tests passed, although "actions (11.0)" failed on first run but succeeded on a retry. https://code.forgejo.org/forgejo/end-to-end/actions/runs/4940/jobs/6/attempt/2

I think removing SaveRegistration operations from daemon may cause some of the end-to-end tests to have a little flakiness as a leftover .runner file from one test could impact another, depending on what the tests do. But I think this is some laziness in cleanup between end-to-end tests that can be revisited if it proves flaky -- the core change here makes sense and makes the overall operational behaviour more predictable.

end-to-end tests passed, although "actions (11.0)" failed on first run but succeeded on a retry. https://code.forgejo.org/forgejo/end-to-end/actions/runs/4940/jobs/6/attempt/2 I think removing `SaveRegistration` operations from `daemon` may cause some of the end-to-end tests to have a little flakiness as a leftover `.runner` file from one test could impact another, depending on what the tests do. But I think this is some laziness in cleanup between end-to-end tests that can be revisited if it proves flaky -- the core change here makes sense and makes the overall operational behaviour more predictable.
mfenniak deleted branch multi-connection 2026-02-17 16:46:20 +00:00
First-time contributor

When's this making it into a release?

When's this making it into a release?
Member

@OffsetMonkey538 soon-ish. That's the best I can say. However, you can start testing it today, for example, by building it yourself or fetching the binary from the CI run. Feedback is always appreciated.

@OffsetMonkey538 soon-ish. That's the best I can say. However, you can start _testing_ it today, for example, by building it yourself or fetching the binary from the CI run. Feedback is always appreciated.
First-time contributor

Are commits not automatically released as container images? I use docker for running my runners

Are commits not automatically released as container images? I use docker for running my runners
Member

@OffsetMonkey538 You should be able to build a container image yourself: run docker build -t forgejo-runner-experimental:latest -f Dockerfile . in the root of this repository.

@OffsetMonkey538 You should be able to build a container image yourself: run `docker build -t forgejo-runner-experimental:latest -f Dockerfile .` in the root of this repository.
Author
Owner

I'm planning to release this as soon as #1383 is complete, which is functionally ready but just resolving a minor difference of technical opinion. 🙂

I'm planning to release this as soon as #1383 is complete, which is functionally ready but just resolving a minor difference of technical opinion. 🙂
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
4 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
forgejo/runner!1380
No description provided.