feat(plugin): add gRPC v1 plugin backend support #1500

Open
eleboucher wants to merge 7 commits from eleboucher/runner:plugin into main
Contributor

implement forgejo/forgejo-actions-feature-requests#107 (comment)

  • features
    • PR: feat(plugin): add gRPC v1 plugin backend support
implement https://code.forgejo.org/forgejo/forgejo-actions-feature-requests/issues/107#issuecomment-85284 <!--start release-notes-assistant--> <!--URL:https://code.forgejo.org/forgejo/runner--> - features - [PR](https://code.forgejo.org/forgejo/runner/pulls/1500): <!--number 1500 --><!--line 0 --><!--description ZmVhdChwbHVnaW4pOiBhZGQgZ1JQQyB2MSBwbHVnaW4gYmFja2VuZCBzdXBwb3J0-->feat(plugin): add gRPC v1 plugin backend support<!--description--> <!--end release-notes-assistant-->
eleboucher force-pushed plugin from 7764310894
Some checks are pending
Integration tests for the release process / release-simulation (pull_request) Blocked by required conditions
checks / Build Forgejo Runner (pull_request) Blocked by required conditions
checks / Build unsupported platforms (pull_request) Blocked by required conditions
checks / runner exec tests (pull_request) Blocked by required conditions
checks / Run integration tests with Docker (docker-latest) (pull_request) Blocked by required conditions
checks / Run integration tests with Docker (docker-stable) (pull_request) Blocked by required conditions
checks / Run integration tests with Podman (pull_request) Blocked by required conditions
checks / validate mocks (pull_request) Blocked by required conditions
checks / validate pre-commit-hooks file (pull_request) Blocked by required conditions
issue-labels / release-notes (pull_request_target) Successful in 5s
to ff3bfc7532
Some checks are pending
Integration tests for the release process / release-simulation (pull_request) Blocked by required conditions
checks / Build Forgejo Runner (pull_request) Blocked by required conditions
checks / Build unsupported platforms (pull_request) Blocked by required conditions
checks / runner exec tests (pull_request) Blocked by required conditions
checks / Run integration tests with Docker (docker-latest) (pull_request) Blocked by required conditions
checks / Run integration tests with Docker (docker-stable) (pull_request) Blocked by required conditions
checks / Run integration tests with Podman (pull_request) Blocked by required conditions
checks / validate mocks (pull_request) Blocked by required conditions
checks / validate pre-commit-hooks file (pull_request) Blocked by required conditions
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
issue-labels / release-notes (pull_request_target) Successful in 5s
2026-04-28 13:48:41 +00:00
Compare
eleboucher force-pushed plugin from ff3bfc7532
Some checks are pending
Integration tests for the release process / release-simulation (pull_request) Blocked by required conditions
checks / Build Forgejo Runner (pull_request) Blocked by required conditions
checks / Build unsupported platforms (pull_request) Blocked by required conditions
checks / runner exec tests (pull_request) Blocked by required conditions
checks / Run integration tests with Docker (docker-latest) (pull_request) Blocked by required conditions
checks / Run integration tests with Docker (docker-stable) (pull_request) Blocked by required conditions
checks / Run integration tests with Podman (pull_request) Blocked by required conditions
checks / validate mocks (pull_request) Blocked by required conditions
checks / validate pre-commit-hooks file (pull_request) Blocked by required conditions
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
issue-labels / release-notes (pull_request_target) Successful in 5s
to 870ea62b11
Some checks failed
cascade / forgejo (pull_request_target) Has been skipped
cascade / end-to-end (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 mocks (pull_request) Failing after 1m28s
checks / validate pre-commit-hooks file (pull_request) Successful in 1m48s
checks / Build Forgejo Runner (pull_request) Successful in 2m15s
checks / runner exec tests (pull_request) Successful in 47s
checks / Build unsupported platforms (pull_request) Successful in 1m52s
Integration tests for the release process / release-simulation (pull_request) Successful in 7m0s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 14m57s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 17m10s
checks / Run integration tests with Podman (pull_request) Successful in 20m2s
2026-04-28 15:07:09 +00:00
Compare
eleboucher force-pushed plugin from 870ea62b11
Some checks failed
cascade / forgejo (pull_request_target) Has been skipped
cascade / end-to-end (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 mocks (pull_request) Failing after 1m28s
checks / validate pre-commit-hooks file (pull_request) Successful in 1m48s
checks / Build Forgejo Runner (pull_request) Successful in 2m15s
checks / runner exec tests (pull_request) Successful in 47s
checks / Build unsupported platforms (pull_request) Successful in 1m52s
Integration tests for the release process / release-simulation (pull_request) Successful in 7m0s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 14m57s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 17m10s
checks / Run integration tests with Podman (pull_request) Successful in 20m2s
to 7df1656f9b
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
issue-labels / release-notes (pull_request_target) Successful in 6s
checks / validate mocks (pull_request) Failing after 36s
checks / Build Forgejo Runner (pull_request) Failing after 49s
checks / validate pre-commit-hooks file (pull_request) Successful in 48s
checks / Run integration tests with Podman (pull_request) Has been skipped
checks / runner exec tests (pull_request) Has been skipped
checks / Run integration tests with Docker (docker-stable) (pull_request) Has been skipped
checks / Build unsupported platforms (pull_request) Has been skipped
checks / Run integration tests with Docker (docker-latest) (pull_request) Has been skipped
Integration tests for the release process / release-simulation (pull_request) Successful in 4m57s
2026-05-06 08:41:24 +00:00
Compare
eleboucher force-pushed plugin from 6441c1da3b
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 / validate mocks (pull_request) Failing after 27s
checks / validate pre-commit-hooks file (pull_request) Successful in 39s
checks / Build Forgejo Runner (pull_request) Successful in 48s
checks / Build unsupported platforms (pull_request) Failing after 15s
checks / runner exec tests (pull_request) Successful in 31s
Integration tests for the release process / release-simulation (pull_request) Successful in 4m39s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 10m39s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 12m22s
checks / Run integration tests with Podman (pull_request) Successful in 16m46s
to fed7286109
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 6s
checks / validate mocks (pull_request) Failing after 51s
checks / validate pre-commit-hooks file (pull_request) Successful in 1m11s
checks / Build Forgejo Runner (pull_request) Successful in 1m27s
/ example-docker-compose (pull_request) Successful in 1m49s
checks / Build unsupported platforms (pull_request) Failing after 33s
example / docker-build-push-action-in-lxc (pull_request) Successful in 2m21s
checks / runner exec tests (pull_request) Successful in 54s
/ example-on-demand (pull_request) Successful in 5m13s
Integration tests for the release process / release-simulation (pull_request) Successful in 7m0s
/ example-lxc-systemd (pull_request) Successful in 9m8s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 15m34s
checks / Run integration tests with Podman (pull_request) Failing after 19m24s
checks / Run integration tests with Docker (docker-stable) (pull_request) Failing after 19m49s
2026-06-01 13:39:34 +00:00
Compare
eleboucher force-pushed plugin from fed7286109
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 6s
checks / validate mocks (pull_request) Failing after 51s
checks / validate pre-commit-hooks file (pull_request) Successful in 1m11s
checks / Build Forgejo Runner (pull_request) Successful in 1m27s
/ example-docker-compose (pull_request) Successful in 1m49s
checks / Build unsupported platforms (pull_request) Failing after 33s
example / docker-build-push-action-in-lxc (pull_request) Successful in 2m21s
checks / runner exec tests (pull_request) Successful in 54s
/ example-on-demand (pull_request) Successful in 5m13s
Integration tests for the release process / release-simulation (pull_request) Successful in 7m0s
/ example-lxc-systemd (pull_request) Successful in 9m8s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 15m34s
checks / Run integration tests with Podman (pull_request) Failing after 19m24s
checks / Run integration tests with Docker (docker-stable) (pull_request) Failing after 19m49s
to 266be7e9bb
Some checks failed
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
issue-labels / release-notes (pull_request_target) Successful in 6s
checks / Build Forgejo Runner (pull_request) Failing after 36s
checks / validate mocks (pull_request) Failing after 33s
checks / validate pre-commit-hooks file (pull_request) Successful in 1m18s
Integration tests for the release process / release-simulation (pull_request) Successful in 6m13s
checks / Build unsupported platforms (pull_request) Has been skipped
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
2026-06-01 15:30:22 +00:00
Compare
eleboucher force-pushed plugin from 266be7e9bb
Some checks failed
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
issue-labels / release-notes (pull_request_target) Successful in 6s
checks / Build Forgejo Runner (pull_request) Failing after 36s
checks / validate mocks (pull_request) Failing after 33s
checks / validate pre-commit-hooks file (pull_request) Successful in 1m18s
Integration tests for the release process / release-simulation (pull_request) Successful in 6m13s
checks / Build unsupported platforms (pull_request) Has been skipped
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
to eef6a8f04c
Some checks failed
cascade / end-to-end (pull_request_target) Has been skipped
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 8s
checks / Build Forgejo Runner (pull_request) Failing after 17s
checks / validate mocks (pull_request) Failing after 18s
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 / runner exec tests (pull_request) Has been skipped
checks / Run integration tests with Docker (docker-stable) (pull_request) Has been skipped
checks / Build unsupported platforms (pull_request) Has been skipped
checks / validate pre-commit-hooks file (pull_request) Successful in 31s
Integration tests for the release process / release-simulation (pull_request) Successful in 4m11s
2026-06-01 18:30:57 +00:00
Compare
eleboucher force-pushed plugin from eef6a8f04c
Some checks failed
cascade / end-to-end (pull_request_target) Has been skipped
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 8s
checks / Build Forgejo Runner (pull_request) Failing after 17s
checks / validate mocks (pull_request) Failing after 18s
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 / runner exec tests (pull_request) Has been skipped
checks / Run integration tests with Docker (docker-stable) (pull_request) Has been skipped
checks / Build unsupported platforms (pull_request) Has been skipped
checks / validate pre-commit-hooks file (pull_request) Successful in 31s
Integration tests for the release process / release-simulation (pull_request) Successful in 4m11s
to 7df964c119
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 6s
checks / Build Forgejo Runner (pull_request) Failing after 16s
checks / Run integration tests with Podman (pull_request) Has been skipped
checks / validate mocks (pull_request) Failing after 18s
checks / runner exec tests (pull_request) Has been skipped
checks / Build unsupported platforms (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 / validate pre-commit-hooks file (pull_request) Successful in 32s
Integration tests for the release process / release-simulation (pull_request) Successful in 4m14s
2026-06-01 18:51:14 +00:00
Compare
eleboucher force-pushed plugin from 7df964c119
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 6s
checks / Build Forgejo Runner (pull_request) Failing after 16s
checks / Run integration tests with Podman (pull_request) Has been skipped
checks / validate mocks (pull_request) Failing after 18s
checks / runner exec tests (pull_request) Has been skipped
checks / Build unsupported platforms (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 / validate pre-commit-hooks file (pull_request) Successful in 32s
Integration tests for the release process / release-simulation (pull_request) Successful in 4m14s
to 0e8a4fe682
Some checks failed
cascade / forgejo (pull_request_target) Has been skipped
cascade / end-to-end (pull_request_target) Has been skipped
cascade / debug (pull_request_target) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 8s
checks / validate mocks (pull_request) Failing after 28s
checks / Build Forgejo Runner (pull_request) Successful in 33s
checks / validate pre-commit-hooks file (pull_request) Successful in 41s
checks / Build unsupported platforms (pull_request) Failing after 20s
checks / runner exec tests (pull_request) Successful in 37s
Integration tests for the release process / release-simulation (pull_request) Successful in 5m32s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 13m51s
checks / Run integration tests with Podman (pull_request) Failing after 15m9s
checks / Run integration tests with Docker (docker-stable) (pull_request) Failing after 16m8s
2026-06-01 19:28:03 +00:00
Compare
eleboucher force-pushed plugin from 0e8a4fe682
Some checks failed
cascade / forgejo (pull_request_target) Has been skipped
cascade / end-to-end (pull_request_target) Has been skipped
cascade / debug (pull_request_target) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 8s
checks / validate mocks (pull_request) Failing after 28s
checks / Build Forgejo Runner (pull_request) Successful in 33s
checks / validate pre-commit-hooks file (pull_request) Successful in 41s
checks / Build unsupported platforms (pull_request) Failing after 20s
checks / runner exec tests (pull_request) Successful in 37s
Integration tests for the release process / release-simulation (pull_request) Successful in 5m32s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 13m51s
checks / Run integration tests with Podman (pull_request) Failing after 15m9s
checks / Run integration tests with Docker (docker-stable) (pull_request) Failing after 16m8s
to 277b97a3a7
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
test-multi-platform / validate pre-commit-hooks file (pull_request) Has been skipped
test-multi-platform / validate mocks (pull_request) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 3s
test-multi-platform / Build Forgejo Runner (pull_request) Has been skipped
test-multi-platform / runner exec tests (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-latest) (pull_request) Has been skipped
checks / validate mocks (pull_request) Failing after 29s
test-multi-platform / Build unsupported platforms (pull_request) Has been skipped
test-multi-platform / Run integration tests with Podman (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-stable) (pull_request) Has been skipped
test-multi-platform / arm64 (pull_request) Has been skipped
checks / validate pre-commit-hooks file (pull_request) Successful in 41s
checks / Build Forgejo Runner (pull_request) Successful in 50s
checks / Build unsupported platforms (pull_request) Failing after 15s
example / docker-build-push-action-in-lxc (pull_request) Successful in 1m29s
checks / runner exec tests (pull_request) Successful in 34s
/ example-docker-compose (pull_request) Successful in 2m51s
Integration tests for the release process / release-simulation (pull_request) Successful in 4m31s
/ example-on-demand (pull_request) Successful in 4m35s
/ example-lxc-systemd (pull_request) Successful in 7m11s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 10m27s
checks / Run integration tests with Podman (pull_request) Successful in 11m32s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 12m34s
2026-06-20 08:23:40 +00:00
Compare
eleboucher force-pushed plugin from 277b97a3a7
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
test-multi-platform / validate pre-commit-hooks file (pull_request) Has been skipped
test-multi-platform / validate mocks (pull_request) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 3s
test-multi-platform / Build Forgejo Runner (pull_request) Has been skipped
test-multi-platform / runner exec tests (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-latest) (pull_request) Has been skipped
checks / validate mocks (pull_request) Failing after 29s
test-multi-platform / Build unsupported platforms (pull_request) Has been skipped
test-multi-platform / Run integration tests with Podman (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-stable) (pull_request) Has been skipped
test-multi-platform / arm64 (pull_request) Has been skipped
checks / validate pre-commit-hooks file (pull_request) Successful in 41s
checks / Build Forgejo Runner (pull_request) Successful in 50s
checks / Build unsupported platforms (pull_request) Failing after 15s
example / docker-build-push-action-in-lxc (pull_request) Successful in 1m29s
checks / runner exec tests (pull_request) Successful in 34s
/ example-docker-compose (pull_request) Successful in 2m51s
Integration tests for the release process / release-simulation (pull_request) Successful in 4m31s
/ example-on-demand (pull_request) Successful in 4m35s
/ example-lxc-systemd (pull_request) Successful in 7m11s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 10m27s
checks / Run integration tests with Podman (pull_request) Successful in 11m32s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 12m34s
to 3103fe4476
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
issue-labels / release-notes (pull_request_target) Successful in 4s
checks / validate mocks (pull_request) Failing after 38s
checks / validate pre-commit-hooks file (pull_request) Successful in 45s
checks / Build Forgejo Runner (pull_request) Successful in 1m1s
checks / Run integration tests with Docker (docker-stable) (pull_request) Has been cancelled
checks / Run integration tests with Podman (pull_request) Has been cancelled
checks / Run integration tests with Docker (docker-latest) (pull_request) Has been cancelled
checks / Build unsupported platforms (pull_request) Has been cancelled
checks / runner exec tests (pull_request) Has been cancelled
Integration tests for the release process / release-simulation (pull_request) Has been cancelled
/ example-docker-compose (pull_request) Successful in 1m41s
example / docker-build-push-action-in-lxc (pull_request) Successful in 2m0s
/ example-on-demand (pull_request) Successful in 4m41s
/ example-lxc-systemd (pull_request) Successful in 7m22s
2026-06-22 14:51:35 +00:00
Compare
eleboucher force-pushed plugin from 3103fe4476
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
issue-labels / release-notes (pull_request_target) Successful in 4s
checks / validate mocks (pull_request) Failing after 38s
checks / validate pre-commit-hooks file (pull_request) Successful in 45s
checks / Build Forgejo Runner (pull_request) Successful in 1m1s
checks / Run integration tests with Docker (docker-stable) (pull_request) Has been cancelled
checks / Run integration tests with Podman (pull_request) Has been cancelled
checks / Run integration tests with Docker (docker-latest) (pull_request) Has been cancelled
checks / Build unsupported platforms (pull_request) Has been cancelled
checks / runner exec tests (pull_request) Has been cancelled
Integration tests for the release process / release-simulation (pull_request) Has been cancelled
/ example-docker-compose (pull_request) Successful in 1m41s
example / docker-build-push-action-in-lxc (pull_request) Successful in 2m0s
/ example-on-demand (pull_request) Successful in 4m41s
/ example-lxc-systemd (pull_request) Successful in 7m22s
to e46f11d039
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
issue-labels / release-notes (pull_request_target) Successful in 4s
checks / validate mocks (pull_request) Failing after 17s
checks / Build Forgejo Runner (pull_request) Successful in 23s
checks / Build unsupported platforms (pull_request) Failing after 21s
checks / validate pre-commit-hooks file (pull_request) Successful in 39s
checks / runner exec tests (pull_request) Successful in 33s
Integration tests for the release process / release-simulation (pull_request) Successful in 4m54s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 10m41s
checks / Run integration tests with Podman (pull_request) Successful in 11m23s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 12m34s
2026-06-22 14:52:42 +00:00
Compare
Author
Contributor

Hello @aahlenst
so this will be the next and last PR for the plugin right ? should we tackle it now ?

Hello @aahlenst so this will be the next and last PR for the plugin right ? should we tackle it now ?
eleboucher force-pushed plugin from e46f11d039
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
issue-labels / release-notes (pull_request_target) Successful in 4s
checks / validate mocks (pull_request) Failing after 17s
checks / Build Forgejo Runner (pull_request) Successful in 23s
checks / Build unsupported platforms (pull_request) Failing after 21s
checks / validate pre-commit-hooks file (pull_request) Successful in 39s
checks / runner exec tests (pull_request) Successful in 33s
Integration tests for the release process / release-simulation (pull_request) Successful in 4m54s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 10m41s
checks / Run integration tests with Podman (pull_request) Successful in 11m23s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 12m34s
to 00ecf1906c
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
test-multi-platform / Build Forgejo Runner (pull_request) Has been skipped
test-multi-platform / Build unsupported platforms (pull_request) Has been skipped
test-multi-platform / runner exec tests (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-latest) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-stable) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Podman (pull_request) Has been skipped
test-multi-platform / validate mocks (pull_request) Has been skipped
test-multi-platform / validate pre-commit-hooks file (pull_request) Has been skipped
test-multi-platform / arm64 (pull_request) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 10s
checks / validate mocks (pull_request) Failing after 38s
checks / Build Forgejo Runner (pull_request) Successful in 1m1s
checks / validate pre-commit-hooks file (pull_request) Successful in 1m6s
checks / runner exec tests (pull_request) Successful in 55s
checks / Build unsupported platforms (pull_request) Failing after 55s
/ example-docker-compose (pull_request) Successful in 2m26s
example / docker-build-push-action-in-lxc (pull_request) Successful in 2m41s
/ example-on-demand (pull_request) Successful in 4m32s
Integration tests for the release process / release-simulation (pull_request) Successful in 5m39s
checks / Run integration tests with Docker (docker-latest) (pull_request) Has been cancelled
checks / Run integration tests with Podman (pull_request) Has been cancelled
checks / Run integration tests with Docker (docker-stable) (pull_request) Has been cancelled
/ example-lxc-systemd (pull_request) Successful in 8m8s
2026-06-22 16:50:23 +00:00
Compare
eleboucher force-pushed plugin from 00ecf1906c
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
test-multi-platform / Build Forgejo Runner (pull_request) Has been skipped
test-multi-platform / Build unsupported platforms (pull_request) Has been skipped
test-multi-platform / runner exec tests (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-latest) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-stable) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Podman (pull_request) Has been skipped
test-multi-platform / validate mocks (pull_request) Has been skipped
test-multi-platform / validate pre-commit-hooks file (pull_request) Has been skipped
test-multi-platform / arm64 (pull_request) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 10s
checks / validate mocks (pull_request) Failing after 38s
checks / Build Forgejo Runner (pull_request) Successful in 1m1s
checks / validate pre-commit-hooks file (pull_request) Successful in 1m6s
checks / runner exec tests (pull_request) Successful in 55s
checks / Build unsupported platforms (pull_request) Failing after 55s
/ example-docker-compose (pull_request) Successful in 2m26s
example / docker-build-push-action-in-lxc (pull_request) Successful in 2m41s
/ example-on-demand (pull_request) Successful in 4m32s
Integration tests for the release process / release-simulation (pull_request) Successful in 5m39s
checks / Run integration tests with Docker (docker-latest) (pull_request) Has been cancelled
checks / Run integration tests with Podman (pull_request) Has been cancelled
checks / Run integration tests with Docker (docker-stable) (pull_request) Has been cancelled
/ example-lxc-systemd (pull_request) Successful in 8m8s
to 2ad1539615
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
test-multi-platform / Build Forgejo Runner (pull_request) Has been skipped
test-multi-platform / Build unsupported platforms (pull_request) Has been skipped
test-multi-platform / runner exec tests (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-latest) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-stable) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Podman (pull_request) Has been skipped
test-multi-platform / validate mocks (pull_request) Has been skipped
test-multi-platform / validate pre-commit-hooks file (pull_request) Has been skipped
test-multi-platform / arm64 (pull_request) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 6s
checks / validate mocks (pull_request) Successful in 27s
checks / Build Forgejo Runner (pull_request) Successful in 29s
checks / validate pre-commit-hooks file (pull_request) Successful in 35s
checks / Build unsupported platforms (pull_request) Failing after 20s
checks / runner exec tests (pull_request) Successful in 37s
Integration tests for the release process / release-simulation (pull_request) Successful in 4m17s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 10m35s
checks / Run integration tests with Podman (pull_request) Successful in 11m9s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 12m42s
2026-06-22 16:58:28 +00:00
Compare
eleboucher force-pushed plugin from 2ad1539615
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
test-multi-platform / Build Forgejo Runner (pull_request) Has been skipped
test-multi-platform / Build unsupported platforms (pull_request) Has been skipped
test-multi-platform / runner exec tests (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-latest) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-stable) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Podman (pull_request) Has been skipped
test-multi-platform / validate mocks (pull_request) Has been skipped
test-multi-platform / validate pre-commit-hooks file (pull_request) Has been skipped
test-multi-platform / arm64 (pull_request) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 6s
checks / validate mocks (pull_request) Successful in 27s
checks / Build Forgejo Runner (pull_request) Successful in 29s
checks / validate pre-commit-hooks file (pull_request) Successful in 35s
checks / Build unsupported platforms (pull_request) Failing after 20s
checks / runner exec tests (pull_request) Successful in 37s
Integration tests for the release process / release-simulation (pull_request) Successful in 4m17s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 10m35s
checks / Run integration tests with Podman (pull_request) Successful in 11m9s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 12m42s
to c74cb26490
All checks were successful
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
test-multi-platform / Build Forgejo Runner (pull_request) Has been skipped
test-multi-platform / Build unsupported platforms (pull_request) Has been skipped
test-multi-platform / runner exec tests (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-latest) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-stable) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Podman (pull_request) Has been skipped
test-multi-platform / validate mocks (pull_request) Has been skipped
test-multi-platform / validate pre-commit-hooks file (pull_request) Has been skipped
test-multi-platform / arm64 (pull_request) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 8s
checks / validate mocks (pull_request) Successful in 22s
checks / Build Forgejo Runner (pull_request) Successful in 23s
checks / validate pre-commit-hooks file (pull_request) Successful in 33s
checks / runner exec tests (pull_request) Successful in 53s
checks / Build unsupported platforms (pull_request) Successful in 1m16s
Integration tests for the release process / release-simulation (pull_request) Successful in 4m9s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 10m18s
checks / Run integration tests with Podman (pull_request) Successful in 11m18s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 12m17s
2026-06-22 17:12:15 +00:00
Compare
Member

@eleboucher wrote in #1500 (comment):

so this will be the next and last PR for the plugin right ? should we tackle it now ?

It's been a while, and I'm focused on something else, so my mental model might be outdated or incomplete. As far as I remember, there's no back-end discovery or loading, yet. Would it be possible for the plug-in to land without that?

It looks like this PR contains some commits that have already landed. Would a rebase help making it smaller?

@eleboucher wrote in https://code.forgejo.org/forgejo/runner/pulls/1500#issuecomment-92131: > so this will be the next and last PR for the plugin right ? should we tackle it now ? It's been a while, and I'm focused on something else, so my mental model might be outdated or incomplete. As far as I remember, there's no back-end discovery or loading, yet. Would it be possible for the plug-in to land without that? It looks like this PR contains some commits that have already landed. Would a rebase help making it smaller?
eleboucher force-pushed plugin from c74cb26490
All checks were successful
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
test-multi-platform / Build Forgejo Runner (pull_request) Has been skipped
test-multi-platform / Build unsupported platforms (pull_request) Has been skipped
test-multi-platform / runner exec tests (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-latest) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-stable) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Podman (pull_request) Has been skipped
test-multi-platform / validate mocks (pull_request) Has been skipped
test-multi-platform / validate pre-commit-hooks file (pull_request) Has been skipped
test-multi-platform / arm64 (pull_request) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 8s
checks / validate mocks (pull_request) Successful in 22s
checks / Build Forgejo Runner (pull_request) Successful in 23s
checks / validate pre-commit-hooks file (pull_request) Successful in 33s
checks / runner exec tests (pull_request) Successful in 53s
checks / Build unsupported platforms (pull_request) Successful in 1m16s
Integration tests for the release process / release-simulation (pull_request) Successful in 4m9s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 10m18s
checks / Run integration tests with Podman (pull_request) Successful in 11m18s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 12m17s
to eb54e71bc8
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
test-multi-platform / Build Forgejo Runner (pull_request) Has been skipped
test-multi-platform / Build unsupported platforms (pull_request) Has been skipped
test-multi-platform / runner exec tests (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-latest) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-stable) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Podman (pull_request) Has been skipped
test-multi-platform / validate mocks (pull_request) Has been skipped
test-multi-platform / validate pre-commit-hooks file (pull_request) Has been skipped
test-multi-platform / arm64 (pull_request) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 6s
checks / validate mocks (pull_request) Successful in 24s
checks / Build Forgejo Runner (pull_request) Successful in 26s
checks / validate pre-commit-hooks file (pull_request) Successful in 32s
checks / Build unsupported platforms (pull_request) Successful in 21s
checks / runner exec tests (pull_request) Successful in 46s
Integration tests for the release process / release-simulation (pull_request) Failing after 2m7s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 10m5s
checks / Run integration tests with Podman (pull_request) Successful in 11m44s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 12m24s
2026-06-24 15:31:55 +00:00
Compare
Author
Contributor

@aahlenst wrote in #1500 (comment):

It's been a while, and I'm focused on something else, so my mental model might be outdated or incomplete. As far as I remember, there's no back-end discovery or loading, yet. Would it be possible for the plug-in to land without that?

Hey, i squashed some commit so the history is better, but this is everything and rebased.

Yes no discovery yet it's config driven for now

@aahlenst wrote in https://code.forgejo.org/forgejo/runner/pulls/1500#issuecomment-92219: > > > > It's been a while, and I'm focused on something else, so my mental model might be outdated or incomplete. As far as I remember, there's no back-end discovery or loading, yet. Would it be possible for the plug-in to land without that? Hey, i squashed some commit so the history is better, but this is everything and rebased. Yes no discovery yet it's config driven for now
Member

@eleboucher wrote in #1500 (comment):

Yes no discovery yet it's config driven for now

That doesn't really answer my question. 🙂 It was: Would it be possible for the plug-in to land without that [back-end discovery]?

I have even more questions: Would it be sensible to land it without back-end discovery? What does that mean for existing users of Forgejo Runner? Or other people that want to use the plug-in interface?

@eleboucher wrote in https://code.forgejo.org/forgejo/runner/pulls/1500#issuecomment-92235: > Yes no discovery yet it's config driven for now That doesn't really answer my question. 🙂 It was: Would it be possible for the plug-in to land without that [back-end discovery]? I have even more questions: Would it be sensible to land it without back-end discovery? What does that mean for existing users of Forgejo Runner? Or other people that want to use the plug-in interface?
Author
Contributor

@aahlenst wrote in #1500 (comment):

@eleboucher wrote in #1500 (comment):

Yes no discovery yet it's config driven for now

That doesn't really answer my question. 🙂 It was: Would it be possible for the plug-in to land without that [back-end discovery]?

I have even more questions: Would it be sensible to land it without back-end discovery? What does that mean for existing users of Forgejo Runner? Or other people that want to use the plug-in interface?

oh yeah no problem in releasing that already without the backend discovery, here is how i use my config

            cache:
              enabled: true
              dir: /data/cache
            container:
              docker_host: "-"
              workdir_parent: shared/workdir
            host:
              workdir_parent: /data/act
            log:
              level: info
            plugins:
              k8s:
                address: "unix:///plugin/forgejo-runner-k8s.sock"
                options:
                  namespace: forgejo
                  poll_timeout: 10m
                  labels: "app.kubernetes.io/name=forgejo-runner-instance,egress.home.arpa/custom-egress=true"
                  resources: |
                    requests:
                      cpu: 100m
                      memory: 256Mi
                    limits:
                      memory: 1Gi

we can probably rework the config to fit more the backend interface we worked on but no behavior changes for anyone already the forgejo runner already

@aahlenst wrote in https://code.forgejo.org/forgejo/runner/pulls/1500#issuecomment-92236: > @eleboucher wrote in #1500 (comment): > > > Yes no discovery yet it's config driven for now > > That doesn't really answer my question. :slightly_smiling_face: It was: Would it be possible for the plug-in to land without that [back-end discovery]? > > I have even more questions: Would it be sensible to land it without back-end discovery? What does that mean for existing users of Forgejo Runner? Or other people that want to use the plug-in interface? oh yeah no problem in releasing that already without the backend discovery, here is how i use my config ``` cache: enabled: true dir: /data/cache container: docker_host: "-" workdir_parent: shared/workdir host: workdir_parent: /data/act log: level: info plugins: k8s: address: "unix:///plugin/forgejo-runner-k8s.sock" options: namespace: forgejo poll_timeout: 10m labels: "app.kubernetes.io/name=forgejo-runner-instance,egress.home.arpa/custom-egress=true" resources: | requests: cpu: 100m memory: 256Mi limits: memory: 1Gi ``` we can probably rework the config to fit more the backend interface we worked on but no behavior changes for anyone already the forgejo runner already
Member

Before I try to digest over 5000 lines in vain: What do you think, @mfenniak?

Before I try to digest over 5000 lines in vain: What do you think, @mfenniak?
Owner

I'm good with the broad direction. With a few minutes of reviewing, it's clear to me that this will not get a good review if it isn't broken down severely into smaller chunks of reviewable work.

This is certainly subject to @eleboucher's expertise, but I'd say:

  • Plugin lifecycle -- config, startup, shutdown
  • Startup and shutdown of "job containers"
  • Ability to exec remotely in the containers
  • Ability to copy files remotely into the containers
  • delegates_to_docker -- seems like an entirely separate capability that doesn't need to be in one PR

I'm not prescribing how to split it, but, I wouldn't be able to review this. This is really important functionality, with really subtle possible behaviours, and doing it right requires the ability for a reviewer to be able to fully grasp each change and think about the code that isn't present. "is this going to work when a job is cancelled", "what happens when this times out", "will error handling or resource leakage occur here" -- and that requires small chunks of work that build up the capabilities. Even if something doesn't have a meaningful outcome/output/deliverable in the first PRs.

I'm good with the broad direction. With a few minutes of reviewing, it's clear to me that this will not get a good review if it isn't broken down severely into smaller chunks of reviewable work. This is certainly subject to @eleboucher's expertise, but I'd say: - Plugin lifecycle -- config, startup, shutdown - Startup and shutdown of "job containers" - Ability to exec remotely in the containers - Ability to copy files remotely into the containers - `delegates_to_docker` -- seems like an entirely separate capability that doesn't need to be in one PR I'm not prescribing how to split it, but, I wouldn't be able to review this. This is really important functionality, with really subtle possible behaviours, and doing it right requires the ability for a reviewer to be able to fully grasp each change and think about the code that isn't present. "is this going to work when a job is cancelled", "what happens when this times out", "will error handling or resource leakage occur here" -- and that requires small chunks of work that build up the capabilities. Even if something doesn't have a meaningful outcome/output/deliverable in the first PRs.
eleboucher force-pushed plugin from eb54e71bc8
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
test-multi-platform / Build Forgejo Runner (pull_request) Has been skipped
test-multi-platform / Build unsupported platforms (pull_request) Has been skipped
test-multi-platform / runner exec tests (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-latest) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-stable) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Podman (pull_request) Has been skipped
test-multi-platform / validate mocks (pull_request) Has been skipped
test-multi-platform / validate pre-commit-hooks file (pull_request) Has been skipped
test-multi-platform / arm64 (pull_request) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 6s
checks / validate mocks (pull_request) Successful in 24s
checks / Build Forgejo Runner (pull_request) Successful in 26s
checks / validate pre-commit-hooks file (pull_request) Successful in 32s
checks / Build unsupported platforms (pull_request) Successful in 21s
checks / runner exec tests (pull_request) Successful in 46s
Integration tests for the release process / release-simulation (pull_request) Failing after 2m7s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 10m5s
checks / Run integration tests with Podman (pull_request) Successful in 11m44s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 12m24s
to fdf5ce3f3c
All checks were successful
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
test-multi-platform / Build Forgejo Runner (pull_request) Has been skipped
test-multi-platform / Build unsupported platforms (pull_request) Has been skipped
test-multi-platform / runner exec tests (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-latest) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-stable) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Podman (pull_request) Has been skipped
test-multi-platform / validate mocks (pull_request) Has been skipped
test-multi-platform / validate pre-commit-hooks file (pull_request) Has been skipped
test-multi-platform / arm64 (pull_request) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 6s
checks / validate mocks (pull_request) Successful in 43s
checks / Build Forgejo Runner (pull_request) Successful in 46s
checks / validate pre-commit-hooks file (pull_request) Successful in 49s
checks / Build unsupported platforms (pull_request) Successful in 35s
checks / runner exec tests (pull_request) Successful in 42s
Integration tests for the release process / release-simulation (pull_request) Successful in 5m21s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 13m21s
checks / Run integration tests with Podman (pull_request) Successful in 14m41s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 16m9s
2026-06-26 14:48:55 +00:00
Compare
Author
Contributor

@mfenniak wrote in #1500 (comment):

I'm good with the broad direction. With a few minutes of reviewing, it's clear to me that this will not get a good review if it isn't broken down severely into smaller chunks of reviewable work.

This is certainly subject to @eleboucher's expertise, but I'd say:

* Plugin lifecycle -- config, startup, shutdown

* Startup and shutdown of "job containers"

* Ability to exec remotely in the containers

* Ability to copy files remotely into the containers

* `delegates_to_docker` -- seems like an entirely separate capability that doesn't need to be in one PR

I'm not prescribing how to split it, but, I wouldn't be able to review this. This is really important functionality, with really subtle possible behaviours, and doing it right requires the ability for a reviewer to be able to fully grasp each change and think about the code that isn't present. "is this going to work when a job is cancelled", "what happens when this times out", "will error handling or resource leakage occur here" -- and that requires small chunks of work that build up the capabilities. Even if something doesn't have a meaningful outcome/output/deliverable in the first PRs.

I refactored the commit history to make more sense i hope now it's ready for review and i'm still reachable here or on matrix for more

@mfenniak wrote in https://code.forgejo.org/forgejo/runner/pulls/1500#issuecomment-92239: > I'm good with the broad direction. With a few minutes of reviewing, it's clear to me that this will not get a good review if it isn't broken down severely into smaller chunks of reviewable work. > > This is certainly subject to @eleboucher's expertise, but I'd say: > > * Plugin lifecycle -- config, startup, shutdown > > * Startup and shutdown of "job containers" > > * Ability to exec remotely in the containers > > * Ability to copy files remotely into the containers > > * `delegates_to_docker` -- seems like an entirely separate capability that doesn't need to be in one PR > > > I'm not prescribing how to split it, but, I wouldn't be able to review this. This is really important functionality, with really subtle possible behaviours, and doing it right requires the ability for a reviewer to be able to fully grasp each change and think about the code that isn't present. "is this going to work when a job is cancelled", "what happens when this times out", "will error handling or resource leakage occur here" -- and that requires small chunks of work that build up the capabilities. Even if something doesn't have a meaningful outcome/output/deliverable in the first PRs. I refactored the commit history to make more sense i hope now it's ready for review and i'm still reachable here or on matrix for more
mfenniak left a comment

I've reviewed the first one and a half commits. My comments on the protocol are extensive and I'm starting to repeat myself, so I want to send this feedback for you first -- the rest of the protocol likely also needs more documentation, more consistency, and more independence from docker-related concepts.

I've reviewed the first one and a half commits. My comments on the protocol are extensive and I'm starting to repeat myself, so I want to send this feedback for you first -- the rest of the protocol likely also needs more documentation, more consistency, and more independence from docker-related concepts.
Lines 27-41
@ -0,0 +24,18 @@
return x.ep
}
// NewJobContainer creates the container the job runs in.
func (x *ExecutionEnvironment) NewJobContainer(input *actcontainer.NewContainerInput) actcontainer.ExecutionsEnvironment {
return NewContainer(x.ep, input)
}
// NewServiceContainer creates a service container for the job.
func (x *ExecutionEnvironment) NewServiceContainer(input *actcontainer.NewContainerInput) actcontainer.ExecutionsEnvironment {
return NewContainer(x.ep, input)
}
// NewStepContainer creates the container a single step runs in (container
// actions and `uses: docker://`).
func (x *ExecutionEnvironment) NewStepContainer(input *actcontainer.NewContainerInput) actcontainer.ExecutionsEnvironment {
return NewContainer(x.ep, input)
}
Owner

Why are three different methods with the same signature, and same implementation, required? In what case would an execution environment have different behaviour based upon whether you're working in a job, service, or step?

Why are three different methods with the same signature, and same implementation, required? In what case would an execution environment have different behaviour based upon whether you're working in a job, service, or step?
@ -0,0 +17,4 @@
rpc Create(CreateRequest) returns (CreateResponse);
// Start boots a previously created environment.
rpc Start(StartRequest) returns (StartResponse);
Owner

What do errors look like from this request, or any of these requests? How are errors encoded, and do they contain any information that is actionable / machine-readable? Are there any need for structured errors?

What do errors look like from this request, or any of these requests? How are errors encoded, and do they contain any information that is actionable / machine-readable? Are there any need for structured errors?
@ -0,0 +44,4 @@
message CapabilitiesRequest {}
message CapabilitiesResponse {
Owner

All the fields in the protocol requests and response deserve documentation to explain them. It would be reasonable to assume this is the primary source of information for a developer working on implementing the protocol.

All the fields in the protocol requests and response deserve documentation to explain them. It would be reasonable to assume this is the primary source of information for a developer working on implementing the protocol.
@ -0,0 +53,4 @@
string default_path_variable = 6;
string path_separator = 7;
bool supports_docker_actions = 8;
bool manages_own_networking = 9;
Owner

There are no APIs on BackendPlugin to manage networking. As an author of a plugin, what am I expecting this parameter to do?

There are no APIs on `BackendPlugin` to manage networking. As an author of a plugin, what am I expecting this parameter to do?
Lines 61-66
@ -0,0 +58,9 @@
bool environment_case_insensitive = 11;
map<string, string> runner_context = 12;
bool supports_local_copy = 13;
// delegates_to_docker indicates the plugin only manages an execution
// environment lifecycle and exposes a Docker daemon endpoint for the
// runner to drive containers against. When true, the runner ignores
// Exec/CopyIn/CopyLocal/CopyOut/UpdateEnv/IsHealthy on this plugin and
// talks directly to the daemon returned in CreateResponse.delegate.
bool delegates_to_docker = 14;
Owner

This is such a different protocol implementation that I'm inclined to think that it shouldn't be part of the same service. Would it be plausible to split the service along this dimension?

e.g. a plugin can implement either BackendPlugin or DockerTunnelPlugin, and the later doesn't require defining 6 methods that do nothing.

This is such a different protocol implementation that I'm inclined to think that it shouldn't be part of the same service. Would it be plausible to split the service along this dimension? e.g. a plugin can implement either `BackendPlugin` or `DockerTunnelPlugin`, and the later doesn't require defining 6 methods that do nothing.
@ -0,0 +79,4 @@
}
message CreateRequest {
string image = 1;
Owner

What is image intended to contain in execution environments that are not docker? Can we document that? Is it just plugin-defined arbitrary string, from the protocol's perspective?

What is `image` intended to contain in execution environments that are not docker? Can we document that? Is it just plugin-defined arbitrary string, from the protocol's perspective?
@ -0,0 +81,4 @@
message CreateRequest {
string image = 1;
string name = 2;
repeated string env = 3;
Owner

Would this make more sense as a key-value pair so that a plugin doesn't have to parse it?

Would this make more sense as a key-value pair so that a plugin doesn't have to parse it?
@ -0,0 +82,4 @@
string image = 1;
string name = 2;
repeated string env = 3;
string working_dir = 4;
Owner

Kinda surprising that this comes from the runner and not from the plugin to the runner. How does the runner know the right field value here, assuming that, for example, you're writing a plugin that creates a VM in a different OS like Windows?

Kinda surprising that this comes from the runner and not from the plugin to the runner. How does the runner know the right field value here, assuming that, for example, you're writing a plugin that creates a VM in a different OS like Windows?
Lines 86-87
@ -0,0 +83,5 @@
string name = 2;
repeated string env = 3;
string working_dir = 4;
repeated string cap_add = 5;
repeated string cap_drop = 6;
Owner

These are pretty Linux-specific, and, I wouldn't expect every execution environment can mange this even within Linux. What is a plugin author expected to do if this is not possible on their environment? It wasn't listed in the CapabilitiesResponse...

These are pretty Linux-specific, and, I wouldn't expect every execution environment can mange this even within Linux. What is a plugin author expected to do if this is not possible on their environment? It wasn't listed in the `CapabilitiesResponse`...
@ -0,0 +85,4 @@
string working_dir = 4;
repeated string cap_add = 5;
repeated string cap_drop = 6;
repeated ServiceContainer services = 7;
Owner

What are the expectations if I authored my plugin and indicated supports_service_containers = false?

What are the expectations if I authored my plugin and indicated `supports_service_containers = false`?
@ -0,0 +86,4 @@
repeated string cap_add = 5;
repeated string cap_drop = 6;
repeated ServiceContainer services = 7;
map<string, string> backend_options = 8;
Owner

What are backend_options?

What are `backend_options`?
@ -0,0 +89,4 @@
map<string, string> backend_options = 8;
// force_pull asks the plugin to re-fetch the image. Plugins that cannot
// honor it should still succeed using the cached image.
bool force_pull = 9;
Owner

I'm not sure that this belongs in the protocol; it doesn't seem like a generically meaningful parameter. It implies a lot about the nature of the executor and the image.

I'm not sure that this belongs in the protocol; it doesn't seem like a generically meaningful parameter. It implies a lot about the nature of the executor and the image.
@ -0,0 +92,4 @@
bool force_pull = 9;
// platform is the OS/arch (e.g. "linux/amd64") the runner label selected for
// image pulls and container creation. Empty means auto-detect.
string platform = 10;
Owner

This requires the backend to parse a docker-specific platform string (which, aside, contains an optional third parameter in the architecture variant). I'd suggest (a) separating this out into separate fields so it doesn't need to be parsed by a non-docker backend, and (b) maybe turning it into structured data like an enum? I'm not so sure about (b); I don't want to be updating the protocol for new OSes, but, I'm not loving the idea of a plugin author having no idea what is coming here.

Or the field can be described less in terms of linux/amd64, and more in terms of "this is an execution-environment specific value; the runner and the protocol treat it opaquely; whatever is passed in over here arrives over here at the plugin."

Empty means auto-detect -- I'd prefer marking the field optional and omitting it, what do you think?

This requires the backend to parse a docker-specific platform string (which, aside, contains an optional third parameter in the architecture variant). I'd suggest (a) separating this out into separate fields so it doesn't need to be parsed by a non-docker backend, and (b) **maybe** turning it into structured data like an enum? I'm not so sure about (b); I don't want to be updating the protocol for new OSes, but, I'm not loving the idea of a plugin author having no idea what is coming here. Or the field can be described less in terms of `linux/amd64`, and more in terms of "this is an execution-environment specific value; the runner and the protocol treat it opaquely; whatever is passed in *over here* arrives *over here* at the plugin." `Empty means auto-detect` -- I'd prefer marking the field `optional` and omitting it, what do you think?
@ -0,0 +97,4 @@
message CreateResponse {
string environment_id = 1;
// delegate is set iff CapabilitiesResponse.delegates_to_docker is true.
Owner

I assume iff is intended a if and only if; please elaborate it

I assume `iff` is intended a `if and only if`; please elaborate it
@ -0,0 +100,4 @@
// delegate is set iff CapabilitiesResponse.delegates_to_docker is true.
// Carries the Docker daemon endpoint and TLS material the runner uses
// to drive containers inside the plugin-managed environment.
DockerDelegate delegate = 2;
Owner

This field should be marked optional?

This field should be marked `optional`?
@ -0,0 +111,4 @@
string endpoint = 1;
bytes tls_ca = 2;
bytes tls_cert = 3;
bytes tls_key = 4;
Owner

Having a TLS private key transferred is surprising....

What kind of trust model are we trying to establish here? Like... this feels a bit like we connected all the dots required to connect to a TLS-encrypted docker container, but without any thought put into whether any real security is involved in doing so. CA private keys floating around in-memory between are effectively compromised.

This ends up being, why are we using TLS, what security do we want to gain from it, and are we meeting that objective?

Having a TLS private key transferred is surprising.... What kind of trust model are we trying to establish here? Like... this feels a bit like we connected all the dots required to connect to a TLS-encrypted docker container, but without any thought put into whether any real security is involved in doing so. CA private keys floating around in-memory between are effectively compromised. This ends up being, why are we using TLS, what security do we want to gain from it, and are we meeting that objective?
@ -0,0 +123,4 @@
}
message StartResponse {
map<string, string> image_env = 1;
Owner

What is this?

What is this?
@ -0,0 +130,4 @@
message ExecRequest {
string environment_id = 1;
repeated string command = 2;
map<string, string> env = 3;
Owner

Here you've gone for map<string, string> for env, where earlier it was repeated string.

Here you've gone for `map<string, string>` for `env`, where earlier it was `repeated string`.
Owner

I'm overall inclined to think that, before we can land this plugin capability, it might be reasonable to have two independent implementations of plugins built on it. The protocol is going to be important and long-standing, so that might be the only way to gain a lot of confidence that it hits the right notes... 🤔

I'm overall inclined to think that, before we can land this plugin capability, it might be reasonable to have two independent implementations of plugins built on it. The protocol is going to be important and long-standing, so that might be the only way to gain a lot of confidence that it hits the right notes... 🤔
refactor(plugin): split protocol into BackendPlugin and DockerTunnelPlugin
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
test-multi-platform / Build Forgejo Runner (pull_request) Has been skipped
test-multi-platform / Build unsupported platforms (pull_request) Has been skipped
test-multi-platform / runner exec tests (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-latest) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-stable) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Podman (pull_request) Has been skipped
test-multi-platform / validate mocks (pull_request) Has been skipped
test-multi-platform / validate pre-commit-hooks file (pull_request) Has been skipped
test-multi-platform / arm64 (pull_request) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 4s
checks / validate mocks (pull_request) Successful in 31s
checks / validate pre-commit-hooks file (pull_request) Successful in 37s
checks / Build Forgejo Runner (pull_request) Successful in 48s
checks / runner exec tests (pull_request) Successful in 51s
checks / Build unsupported platforms (pull_request) Successful in 1m10s
Integration tests for the release process / release-simulation (pull_request) Successful in 4m8s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 9m49s
checks / Run integration tests with Podman (pull_request) Failing after 11m33s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 12m38s
ce1c26f593
eleboucher force-pushed plugin from ce1c26f593
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
test-multi-platform / Build Forgejo Runner (pull_request) Has been skipped
test-multi-platform / Build unsupported platforms (pull_request) Has been skipped
test-multi-platform / runner exec tests (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-latest) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-stable) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Podman (pull_request) Has been skipped
test-multi-platform / validate mocks (pull_request) Has been skipped
test-multi-platform / validate pre-commit-hooks file (pull_request) Has been skipped
test-multi-platform / arm64 (pull_request) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 4s
checks / validate mocks (pull_request) Successful in 31s
checks / validate pre-commit-hooks file (pull_request) Successful in 37s
checks / Build Forgejo Runner (pull_request) Successful in 48s
checks / runner exec tests (pull_request) Successful in 51s
checks / Build unsupported platforms (pull_request) Successful in 1m10s
Integration tests for the release process / release-simulation (pull_request) Successful in 4m8s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 9m49s
checks / Run integration tests with Podman (pull_request) Failing after 11m33s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 12m38s
to 6e5e2dc356
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
test-multi-platform / Build Forgejo Runner (pull_request) Has been skipped
test-multi-platform / Build unsupported platforms (pull_request) Has been skipped
test-multi-platform / runner exec tests (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-latest) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-stable) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Podman (pull_request) Has been skipped
test-multi-platform / validate mocks (pull_request) Has been skipped
test-multi-platform / validate pre-commit-hooks file (pull_request) Has been skipped
test-multi-platform / arm64 (pull_request) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 5s
checks / validate mocks (pull_request) Successful in 30s
checks / validate pre-commit-hooks file (pull_request) Successful in 40s
checks / Build Forgejo Runner (pull_request) Successful in 48s
checks / runner exec tests (pull_request) Successful in 36s
example / docker-build-push-action-in-lxc (pull_request) Successful in 1m56s
checks / Build unsupported platforms (pull_request) Successful in 1m7s
/ example-docker-compose (pull_request) Successful in 2m22s
Integration tests for the release process / release-simulation (pull_request) Successful in 4m31s
/ example-on-demand (pull_request) Successful in 5m20s
/ example-lxc-systemd (pull_request) Successful in 6m56s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 10m42s
checks / Run integration tests with Podman (pull_request) Failing after 11m38s
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 12m27s
2026-07-09 11:30:41 +00:00
Compare
Some checks failed
cascade / debug (pull_request_target) Has been skipped
Required
Details
cascade / forgejo (pull_request_target) Has been skipped
Required
Details
cascade / end-to-end (pull_request_target) Has been skipped
Required
Details
test-multi-platform / Build Forgejo Runner (pull_request) Has been skipped
test-multi-platform / Build unsupported platforms (pull_request) Has been skipped
test-multi-platform / runner exec tests (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-latest) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Docker (docker-stable) (pull_request) Has been skipped
test-multi-platform / Run integration tests with Podman (pull_request) Has been skipped
test-multi-platform / validate mocks (pull_request) Has been skipped
test-multi-platform / validate pre-commit-hooks file (pull_request) Has been skipped
test-multi-platform / arm64 (pull_request) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 5s
checks / validate mocks (pull_request) Successful in 30s
checks / validate pre-commit-hooks file (pull_request) Successful in 40s
checks / Build Forgejo Runner (pull_request) Successful in 48s
Required
Details
checks / runner exec tests (pull_request) Successful in 36s
Required
Details
example / docker-build-push-action-in-lxc (pull_request) Successful in 1m56s
checks / Build unsupported platforms (pull_request) Successful in 1m7s
/ example-docker-compose (pull_request) Successful in 2m22s
Integration tests for the release process / release-simulation (pull_request) Successful in 4m31s
/ example-on-demand (pull_request) Successful in 5m20s
/ example-lxc-systemd (pull_request) Successful in 6m56s
checks / Run integration tests with Docker (docker-latest) (pull_request) Successful in 10m42s
Required
Details
checks / Run integration tests with Podman (pull_request) Failing after 11m38s
Required
Details
checks / Run integration tests with Docker (docker-stable) (pull_request) Successful in 12m27s
Required
Details
This pull request has changes conflicting with the target branch.
  • act/runner/action.go
Some workflows are waiting to be reviewed.
View command line instructions

Manual merge helper

Use this merge commit message when completing the merge manually.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u plugin:eleboucher-plugin
git switch eleboucher-plugin
Sign in to join this conversation.
No reviewers
No milestone
No assignees
3 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!1500
No description provided.