nixos/tests/gitea-actions-runner: init (#559009)

This commit is contained in:
Sandro
2026-09-07 12:39:50 +00:00
committed by GitHub
5 changed files with 147 additions and 22 deletions

View File

@@ -703,6 +703,7 @@ in
inherit pkgs runTest;
inherit (pkgs) lib;
};
gitea-actions-runner = runTest ./gitea-actions-runner.nix;
github-runner = runTest ./github-runner.nix;
gitlab = import ./gitlab {
inherit runTest;

View File

@@ -0,0 +1,136 @@
{ pkgs, ... }:
{
name = "gitea-actions-runner";
meta = {
maintainers = pkgs.gitea-actions-runner.meta.maintainers;
};
nodes.machine =
{ pkgs, ... }:
{
services.gitea = {
enable = true;
database.type = "sqlite3";
settings = {
actions.ENABLED = true;
service.DISABLE_REGISTRATION = true;
};
};
services.gitea-actions-runner.instances = {
host = {
enable = true;
name = "ci-host";
url = "http://localhost:3000";
labels = [ "native:host" ];
tokenFile = "/var/lib/gitea/runner_token";
settings.metrics = {
enabled = true;
addr = "127.0.0.1:9101";
};
};
podman = {
enable = true;
name = "ci-podman";
url = "http://localhost:3000";
labels = [ "container:docker://test-image:latest" ];
tokenFile = "/var/lib/gitea/runner_token";
settings.metrics = {
enabled = true;
addr = "127.0.0.1:9102";
};
};
};
virtualisation.podman.enable = true;
environment.systemPackages = [
pkgs.gitea
pkgs.gitMinimal
pkgs.tea
];
};
testScript =
let
containerImage = pkgs.dockerTools.buildLayeredImage {
name = "test-image";
tag = "latest";
contents = [
pkgs.busybox
pkgs.bashInteractive
];
};
ciWorkflow = pkgs.writeText "gitea-actions-runner-test-workflow.yaml" ''
name: test
on: [push]
jobs:
host:
runs-on: native
steps:
- run: echo hello from the host runner
container:
runs-on: container
steps:
- run: echo hello from the podman runner
'';
in
''
import json
from typing import Any
def gitea_admin(args: str) -> str:
return machine.succeed(f"su -l gitea -c 'GITEA_WORK_DIR=/var/lib/gitea gitea {args}'")
def tea_json(args: str) -> Any:
output = machine.succeed(f"tea {args} --login test -o json").strip()
if not output.startswith(("[", "{")):
return []
return json.loads(output)
start_all()
machine.wait_for_unit("gitea.service")
machine.wait_for_open_port(3000)
machine.succeed("curl --fail http://localhost:3000/")
gitea_admin("admin user create --username test --password hunter2 --email test@localhost")
machine.succeed(
"tea login add --url http://localhost:3000 --user test --password hunter2 -n test"
)
with subtest("Loading the test container image into podman"):
machine.wait_for_unit("podman.socket")
machine.succeed("podman load -i ${containerImage}")
with subtest("Registering the runners"):
token = gitea_admin("actions generate-runner-token").strip()
machine.succeed(f"echo TOKEN={token} > /var/lib/gitea/runner_token")
machine.wait_for_unit("gitea-runner-host.service")
machine.wait_until_succeeds("curl --fail http://localhost:9101/readyz")
machine.wait_until_succeeds("journalctl -u gitea-runner-host.service --grep 'Runner registered successfully'")
machine.wait_for_unit("gitea-runner-podman.service")
machine.wait_until_succeeds("curl --fail http://localhost:9102/readyz")
machine.wait_until_succeeds("journalctl -u gitea-runner-podman.service --grep 'Runner registered successfully'")
with subtest("Creating a repository with a workflow using both runners"):
tea_json("repos create --name repo --init")
machine.succeed(
"tea api -X POST /repos/test/repo/contents/.gitea%2Fworkflows%2Ftest.yaml "
+ "--login test "
+ "-f branch=main "
+ '-f content="$(base64 -w0 ${ciWorkflow})" '
+ '-f message="Add CI workflow"'
)
with subtest("Waiting for both jobs to be picked up and run"):
retry(lambda _: len(tea_json("actions runs list --repo test/repo --status success")) == 1)
'';
}

View File

@@ -53,17 +53,6 @@ let
};
};
gitea-actions-runner.instances."test" = {
enable = true;
name = "ci";
url = "http://localhost:3000";
labels = [
# don't require docker/podman
"native:host"
];
tokenFile = "/var/lib/gitea/runner_token";
};
openssh.enable = true;
};
environment.systemPackages = [
@@ -160,13 +149,6 @@ let
+ '-H "Authorization: Bearer fakesecret" '
+ 'http://localhost:3000/metrics '
+ '| grep gitea_accesses')
with subtest("Testing runner registration"):
server.succeed(
"su -l gitea -c 'GITEA_WORK_DIR=/var/lib/gitea gitea actions generate-runner-token' | sed 's/^/TOKEN=/' | tee /var/lib/gitea/runner_token"
)
server.wait_for_unit("gitea-runner-test.service")
server.succeed("journalctl -o cat -u gitea-runner-test.service | grep -q 'Runner registered successfully'")
'';
});
in

View File

@@ -4,6 +4,7 @@
buildGoModule,
testers,
gitea-actions-runner,
nixosTests,
nix-update-script,
}:
@@ -35,9 +36,12 @@ buildGoModule (finalAttrs: {
'';
passthru = {
tests.version = testers.testVersion {
package = gitea-actions-runner;
version = "v${finalAttrs.version}";
tests = {
version = testers.testVersion {
package = gitea-actions-runner;
version = "v${finalAttrs.version}";
};
nixos = nixosTests.gitea-actions-runner;
};
updateScript = nix-update-script { };
};

View File

@@ -130,7 +130,9 @@ buildGoModule (finalAttrs: {
lib.warn "gitea.passthru.data-compressed is deprecated. Use \"compressDrvWeb gitea.data\"."
(compressDrvWeb gitea.data { });
tests = nixosTests.gitea;
tests = {
inherit (nixosTests) gitea gitea-actions-runner;
};
};
meta = {