Add gitea act runner
Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
docker-base = import ./docker/base { inherit pkgs; };
|
||||
docker-flaresolverr = import ./docker/flaresolverr { inherit pkgs; };
|
||||
docker-gitea = import ./docker/gitea { inherit pkgs; };
|
||||
docker-gitea-act-runner = import ./docker/gitea-act-runner { inherit pkgs; };
|
||||
docker-grafana = import ./docker/grafana { inherit pkgs; };
|
||||
docker-grafana-image-renderer = import ./docker/grafana-image-renderer { inherit pkgs; };
|
||||
docker-jellyfin = import ./docker/jellyfin { inherit pkgs inputs system; };
|
||||
|
51
packages/docker/gitea-act-runner/default.nix
Normal file
51
packages/docker/gitea-act-runner/default.nix
Normal file
@@ -0,0 +1,51 @@
|
||||
{ pkgs, ... }:
|
||||
let
|
||||
entrypoint = pkgs.writeTextFile {
|
||||
name = "entrypoint";
|
||||
executable = true;
|
||||
destination = "/bin/entrypoint";
|
||||
text = builtins.readFile ./entrypoint.sh;
|
||||
};
|
||||
|
||||
runnerConfig = pkgs.writeTextDir "/etc/gitea-act-runner/config.yaml" (
|
||||
builtins.readFile (
|
||||
(pkgs.formats.yaml { }).generate "config.yaml" {
|
||||
runner = {
|
||||
file = "/var/lib/gitea-act-runner/registration";
|
||||
capacity = 4;
|
||||
};
|
||||
cache.dir = "/tmp/gitea-act-runner/";
|
||||
# https://gitea.com/gitea/act_runner/issues/223#issuecomment-743748
|
||||
container.docker_host = "-";
|
||||
}
|
||||
)
|
||||
);
|
||||
in
|
||||
pkgs.dockerTools.buildImage {
|
||||
name = "gitea-act-runner";
|
||||
fromImage = import ../base { inherit pkgs; };
|
||||
|
||||
copyToRoot = pkgs.buildEnv {
|
||||
name = "root";
|
||||
paths = with pkgs; [
|
||||
entrypoint
|
||||
gitea-actions-runner
|
||||
runnerConfig
|
||||
curl
|
||||
jq
|
||||
];
|
||||
pathsToLink = [
|
||||
"/bin"
|
||||
"/etc"
|
||||
];
|
||||
};
|
||||
|
||||
config = {
|
||||
Entrypoint = [ "entrypoint" ];
|
||||
WorkDir = "/var/lib/gitea-act-runner";
|
||||
Volumes = {
|
||||
"/var/lib/gitea-act-runner" = { };
|
||||
"/tmp/gitea-act-runner" = { };
|
||||
};
|
||||
};
|
||||
}
|
41
packages/docker/gitea-act-runner/entrypoint.sh
Normal file
41
packages/docker/gitea-act-runner/entrypoint.sh
Normal file
@@ -0,0 +1,41 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
|
||||
GITEA_RUNNER_NAME="${GITEA_RUNNER_NAME:-main}"
|
||||
|
||||
LOG_PIPE="$(mktemp -u)"
|
||||
mkfifo "$LOG_PIPE"
|
||||
|
||||
(
|
||||
while IFS= read -r line; do
|
||||
if echo "$line" | grep -qiE 'level=(warn|error|fatal)'; then
|
||||
echo "$line" >&2
|
||||
else
|
||||
echo "$line"
|
||||
fi
|
||||
done < "$LOG_PIPE"
|
||||
) &
|
||||
|
||||
if [ ! -f /var/lib/gitea-act-runner/registration ]; then
|
||||
GITEA_API="${GITEA_INSTANCE_URL%/}/api/v1"
|
||||
|
||||
auth="Authorization: Basic $(echo -n "$GITEA_ADMIN_USERNAME:$GITEA_ADMIN_PASSWORD" | base64 -w 0)"
|
||||
|
||||
runners="$(curl -sf --retry 10 --retry-connrefused -H "$auth" "$GITEA_API/admin/actions/runners")"
|
||||
old_runner="$(echo "$runners" | jq -r ".runners[] | select(.name == \"$GITEA_RUNNER_NAME\") | .id")"
|
||||
|
||||
if [ -n "$old_runner" ]; then
|
||||
curl -sf -X DELETE -H "$auth" "$GITEA_API/admin/actions/runners/$old_runner"
|
||||
fi
|
||||
|
||||
act_runner --config /etc/gitea-act-runner/config.yaml register \
|
||||
--no-interactive \
|
||||
--instance "$GITEA_INSTANCE_URL" \
|
||||
--token "$GITEA_RUNNER_REGISTRATION_TOKEN" \
|
||||
--name "$GITEA_RUNNER_NAME" \
|
||||
--labels "${GITEA_RUNNER_LABELS:-}" > "$LOG_PIPE" 2>&1
|
||||
fi
|
||||
|
||||
exec act_runner --config /etc/gitea-act-runner/config.yaml daemon "$@" > "$LOG_PIPE" 2>&1
|
@@ -93,13 +93,13 @@ rpc_url="http://127.0.0.1:9091${rpc_path}rpc/"
|
||||
|
||||
natpmp_port="$(echo "$natpmp_output" | awk '/Mapped public port/ { print $4 }')"
|
||||
|
||||
output_headers=$(curl -s -D - -o /dev/null -X POST "$rpc_url" \
|
||||
output_headers=$(curl -sf -D - -o /dev/null -X POST "$rpc_url" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"method": "session-get", "arguments": {"fields": ["session-id"]}}')
|
||||
|
||||
session_id="$(echo "$output_headers" | awk '/X-Transmission-Session-Id:/ { print $2 }' | tr -d '\r')"
|
||||
|
||||
curl -s -X POST "$rpc_url" \
|
||||
curl -sf -X POST "$rpc_url" \
|
||||
-H "X-Transmission-Session-Id: $session_id" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"method\": \"session-set\", \"arguments\": {\"peer-port\": $natpmp_port}}" \
|
||||
|
Reference in New Issue
Block a user