From ced83cc4272d961e6851b0c29a52f449e258d8a1 Mon Sep 17 00:00:00 2001 From: "push-app-to-main[bot]" <203845782+push-app-to-main[bot]@users.noreply.github.com> Date: Thu, 11 Jun 2026 06:17:50 +0000 Subject: [PATCH 1/9] Add forgejo-runner (ct) --- ct/forgejo-runner.sh | 85 ++++++++++++++++++++++ ct/headers/forgejo-runner | 6 ++ install/forgejo-runner-install.sh | 115 ++++++++++++++++++++++++++++++ 3 files changed, 206 insertions(+) create mode 100644 ct/forgejo-runner.sh create mode 100644 ct/headers/forgejo-runner create mode 100644 install/forgejo-runner-install.sh diff --git a/ct/forgejo-runner.sh b/ct/forgejo-runner.sh new file mode 100644 index 00000000000..e77ffd88cec --- /dev/null +++ b/ct/forgejo-runner.sh @@ -0,0 +1,85 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: Simon Friedrich (lengschder97) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://forgejo.org/ + +APP="Forgejo-Runner" +var_tags="${var_tags:-ci}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-2048}" +var_disk="${var_disk:-8}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" + +var_unprivileged="${var_unprivileged:-1}" +var_nesting="${var_nesting:-1}" +var_keyctl="${var_keyctl:-1}" + +# App-specific variables (not in build.func whitelist) +# Export so they survive lxc-attach into the container +export var_forgejo_instance="${var_forgejo_instance:-}" +export var_forgejo_runner_token="${var_forgejo_runner_token:-}" +export var_runner_labels="${var_runner_labels:-}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -f /usr/local/bin/forgejo-runner ]]; then + msg_error "No ${APP} installation found!" + exit 1 + fi + + RELEASE=$(curl -fsSL https://data.forgejo.org/api/v1/repos/forgejo/runner/releases/latest | grep -oP '"tag_name":\s*"\K[^"]+' | sed 's/^v//') + if [[ "${RELEASE}" == "$(cat ~/.forgejo-runner 2>/dev/null)" ]]; then + msg_ok "No update required. ${APP} is already at v${RELEASE}" + exit + fi + + msg_info "Stopping Services" + systemctl stop forgejo-runner + msg_ok "Stopped Services" + + msg_info "Updating Forgejo Runner to v${RELEASE}" + curl -fsSL "https://code.forgejo.org/forgejo/runner/releases/download/v${RELEASE}/forgejo-runner-${RELEASE}-linux-amd64" -o /usr/local/bin/forgejo-runner + chmod +x /usr/local/bin/forgejo-runner + echo "${RELEASE}" >~/.forgejo-runner + msg_ok "Updated Forgejo Runner" + + msg_info "Starting Services" + systemctl start forgejo-runner + msg_ok "Started Services" + msg_ok "Updated successfully!" + exit +} + +# Fail early if running unattended without required values +# mode is only set when the user explicitly passes it (automating); +# bare "bash -c $(curl ...)" leaves mode empty and shows the whiptail menu +if [[ -n "${mode:-}" ]]; then + if [[ -z "${var_forgejo_instance:-}" ]]; then + msg_error "var_forgejo_instance is required for unattended installs." + exit 1 + fi + if [[ -z "${var_forgejo_runner_token:-}" ]]; then + msg_error "var_forgejo_runner_token is required for unattended installs." + exit 1 + fi +fi + +start +build_container +description + +msg_ok "Completed successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" diff --git a/ct/headers/forgejo-runner b/ct/headers/forgejo-runner new file mode 100644 index 00000000000..5be4a07fed8 --- /dev/null +++ b/ct/headers/forgejo-runner @@ -0,0 +1,6 @@ + ______ _ ____ + / ____/___ _________ ____ (_)___ / __ \__ ______ ____ ___ _____ + / /_ / __ \/ ___/ __ `/ _ \ / / __ \______/ /_/ / / / / __ \/ __ \/ _ \/ ___/ + / __/ / /_/ / / / /_/ / __/ / / /_/ /_____/ _, _/ /_/ / / / / / / / __/ / +/_/ \____/_/ \__, /\___/_/ /\____/ /_/ |_|\__,_/_/ /_/_/ /_/\___/_/ + /____/ /___/ diff --git a/install/forgejo-runner-install.sh b/install/forgejo-runner-install.sh new file mode 100644 index 00000000000..c52480b6121 --- /dev/null +++ b/install/forgejo-runner-install.sh @@ -0,0 +1,115 @@ +#!/usr/bin/env bash +# Copyright (c) 2021-2026 community-scripts ORG +# Author: Simon Friedrich (lengschder97) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://forgejo.org/ + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os +setup_yq + +# Get required configuration — skip prompts if already set (generated/unattended mode) +if [[ -z "${var_forgejo_instance:-}" ]]; then + read -r -p "${TAB3}Forgejo Instance URL (e.g. https://codeberg.org): " var_forgejo_instance + var_forgejo_instance="${var_forgejo_instance:-https://codeberg.org}" +fi + +if [[ -z "${var_forgejo_runner_uuid:-}" ]]; then + read -r -p "${TAB3}Forgejo Runner UUID: " var_forgejo_runner_uuid +fi + +if [[ -z "${var_forgejo_runner_uuid:-}" ]]; then + msg_error "No runner UUID provided. Cannot continue." + exit 1 +fi + +if [[ -z "${var_forgejo_runner_token:-}" ]]; then + read -r -p "${TAB3}Forgejo Runner Token: " var_forgejo_runner_token +fi + +if [[ -z "${var_forgejo_runner_token:-}" ]]; then + msg_error "No runner registration token provided. Cannot continue." + exit 1 +fi + +# Runner labels — default is always included; additional labels are appended +DEFAULT_RUNNER_LABELS="linux-amd64:docker://node:22-bookworm" +if [[ -z "${var_runner_labels:-}" ]]; then + read -r -p "${TAB3}Additional runner labels (comma-separated, or leave blank for default only): " var_runner_labels +fi +if [[ -n "${var_runner_labels:-}" ]]; then + RUNNER_LABELS="${DEFAULT_RUNNER_LABELS},${var_runner_labels}" +else + RUNNER_LABELS="${DEFAULT_RUNNER_LABELS}" +fi + +export FORGEJO_INSTANCE="$var_forgejo_instance" +export FORGEJO_RUNNER_TOKEN="$var_forgejo_runner_token" +export FORGEJO_RUNNER_UUID="$var_forgejo_runner_uuid" +export RUNNER_LABELS + +msg_info "Installing dependencies" +$STD apt install -y \ + git \ + podman podman-docker +msg_ok "Installed dependencies" + +msg_info "Enabling Podman socket" +systemctl enable --now podman.socket +msg_ok "Enabled Podman socket" + +msg_info "Installing Forgejo Runner" +RUNNER_VERSION=$(curl -fsSL https://data.forgejo.org/api/v1/repos/forgejo/runner/releases/latest | jq -r .name | sed 's/^v//') +curl -fsSL "https://code.forgejo.org/forgejo/runner/releases/download/v${RUNNER_VERSION}/forgejo-runner-${RUNNER_VERSION}-linux-amd64" -o /usr/local/bin/forgejo-runner +chmod +x /usr/local/bin/forgejo-runner +echo "${RUNNER_VERSION}" >~/.forgejo-runner +msg_ok "Installed Forgejo Runner" + +msg_info "Registering Forgejo Runner" +export DOCKER_HOST="unix:///run/podman/podman.sock" + +msg_info "Generating Forgejo Runner Configuration" +mkdir -p /etc/forgejo-runner +CONFIG_FILE="/etc/forgejo-runner/config.yaml" +forgejo-runner generate-config > $CONFIG_FILE +yq -i ' + .container.docker_host = strenv(DOCKER_HOST) | + .server.connections.forgejo.url = strenv(FORGEJO_INSTANCE) | + .server.connections.forgejo.uuid = strenv(FORGEJO_RUNNER_UUID) | + .server.connections.forgejo.token = strenv(FORGEJO_RUNNER_TOKEN) | + .server.connections.forgejo.labels = (strenv(RUNNER_LABELS) | split(",") | map(select(length > 0))) + ' $CONFIG_FILE +msg_ok "Generated Forgejo Runner Configuration" + + +msg_info "Creating Services" +cat </etc/systemd/system/forgejo-runner.service +[Unit] +Description=Forgejo Runner +Documentation=https://forgejo.org/docs/latest/admin/actions/ +After=podman.socket +Requires=podman.socket + +[Service] +User=root +WorkingDirectory=/root +Environment=DOCKER_HOST=unix:///run/podman/podman.sock +ExecStart=/usr/local/bin/forgejo-runner daemon -c $CONFIG_FILE +Restart=on-failure +RestartSec=10 +TimeoutSec=0 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now forgejo-runner +msg_ok "Created Services" + +motd_ssh +customize +cleanup_lxc From 79601851c497957044b6505f046fb046b6308c3a Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Fri, 12 Jun 2026 10:27:50 +0200 Subject: [PATCH 2/9] Apply suggestion from @CrazyWolf13 Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> --- ct/forgejo-runner.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/ct/forgejo-runner.sh b/ct/forgejo-runner.sh index e77ffd88cec..53a6d7dedc0 100644 --- a/ct/forgejo-runner.sh +++ b/ct/forgejo-runner.sh @@ -14,7 +14,6 @@ var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" var_arm64="${var_arm64:-no}" - var_unprivileged="${var_unprivileged:-1}" var_nesting="${var_nesting:-1}" var_keyctl="${var_keyctl:-1}" From a8867869c8c237018d3a85751808ac0ceb3e05d9 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Sat, 27 Jun 2026 23:27:07 +0200 Subject: [PATCH 3/9] Update ct/forgejo-runner.sh Co-authored-by: Sam Heinz --- ct/forgejo-runner.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/forgejo-runner.sh b/ct/forgejo-runner.sh index 53a6d7dedc0..a04c6121e72 100644 --- a/ct/forgejo-runner.sh +++ b/ct/forgejo-runner.sh @@ -13,7 +13,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_nesting="${var_nesting:-1}" var_keyctl="${var_keyctl:-1}" From edb7a156f5f67b17e1a14df48e0e20898522e147 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Sat, 27 Jun 2026 23:27:17 +0200 Subject: [PATCH 4/9] Update ct/forgejo-runner.sh Co-authored-by: Sam Heinz --- ct/forgejo-runner.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/forgejo-runner.sh b/ct/forgejo-runner.sh index a04c6121e72..efd587bc93f 100644 --- a/ct/forgejo-runner.sh +++ b/ct/forgejo-runner.sh @@ -50,7 +50,7 @@ function update_script() { msg_ok "Stopped Services" msg_info "Updating Forgejo Runner to v${RELEASE}" - curl -fsSL "https://code.forgejo.org/forgejo/runner/releases/download/v${RELEASE}/forgejo-runner-${RELEASE}-linux-amd64" -o /usr/local/bin/forgejo-runner + curl -fsSL "https://code.forgejo.org/forgejo/runner/releases/download/v${RELEASE}/forgejo-runner-${RELEASE}-linux-$(arch_resolve)" -o /usr/local/bin/forgejo-runner chmod +x /usr/local/bin/forgejo-runner echo "${RELEASE}" >~/.forgejo-runner msg_ok "Updated Forgejo Runner" From 9dfad63c09719f4d8448443a1d285fc5d9c527ab Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Sat, 27 Jun 2026 23:27:25 +0200 Subject: [PATCH 5/9] Update install/forgejo-runner-install.sh Co-authored-by: Sam Heinz --- install/forgejo-runner-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/forgejo-runner-install.sh b/install/forgejo-runner-install.sh index c52480b6121..25cf5b9df39 100644 --- a/install/forgejo-runner-install.sh +++ b/install/forgejo-runner-install.sh @@ -65,7 +65,7 @@ msg_ok "Enabled Podman socket" msg_info "Installing Forgejo Runner" RUNNER_VERSION=$(curl -fsSL https://data.forgejo.org/api/v1/repos/forgejo/runner/releases/latest | jq -r .name | sed 's/^v//') -curl -fsSL "https://code.forgejo.org/forgejo/runner/releases/download/v${RUNNER_VERSION}/forgejo-runner-${RUNNER_VERSION}-linux-amd64" -o /usr/local/bin/forgejo-runner +curl -fsSL "https://code.forgejo.org/forgejo/runner/releases/download/v${RUNNER_VERSION}/forgejo-runner-${RUNNER_VERSION}-linux-$(arch_resolve)" -o /usr/local/bin/forgejo-runner chmod +x /usr/local/bin/forgejo-runner echo "${RUNNER_VERSION}" >~/.forgejo-runner msg_ok "Installed Forgejo Runner" From 2441df8ac974d8991ba6c9b4b7f4ace63f2a247e Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 6 Jul 2026 18:18:28 +0200 Subject: [PATCH 6/9] Clean up comments in forgejo-runner.sh Removed comments regarding unattended mode checks and app-specific variables. --- ct/forgejo-runner.sh | 6 ------ 1 file changed, 6 deletions(-) diff --git a/ct/forgejo-runner.sh b/ct/forgejo-runner.sh index efd587bc93f..218b9733e0f 100644 --- a/ct/forgejo-runner.sh +++ b/ct/forgejo-runner.sh @@ -1,6 +1,5 @@ #!/usr/bin/env bash source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) - # Copyright (c) 2021-2026 community-scripts ORG # Author: Simon Friedrich (lengschder97) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -18,8 +17,6 @@ var_unprivileged="${var_unprivileged:-1}" var_nesting="${var_nesting:-1}" var_keyctl="${var_keyctl:-1}" -# App-specific variables (not in build.func whitelist) -# Export so they survive lxc-attach into the container export var_forgejo_instance="${var_forgejo_instance:-}" export var_forgejo_runner_token="${var_forgejo_runner_token:-}" export var_runner_labels="${var_runner_labels:-}" @@ -62,9 +59,6 @@ function update_script() { exit } -# Fail early if running unattended without required values -# mode is only set when the user explicitly passes it (automating); -# bare "bash -c $(curl ...)" leaves mode empty and shows the whiptail menu if [[ -n "${mode:-}" ]]; then if [[ -z "${var_forgejo_instance:-}" ]]; then msg_error "var_forgejo_instance is required for unattended installs." From 799e6381f6d19aef496efe0bc0326a55c3cc2d08 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 6 Jul 2026 18:19:58 +0200 Subject: [PATCH 7/9] Add post-setup message for Forgejo Runner Added a message to inform users about checking the Forgejo instance after setup. --- ct/forgejo-runner.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/ct/forgejo-runner.sh b/ct/forgejo-runner.sh index 218b9733e0f..7c7c1774f55 100644 --- a/ct/forgejo-runner.sh +++ b/ct/forgejo-runner.sh @@ -76,3 +76,4 @@ description msg_ok "Completed successfully!\n" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} After first boot, check your Forgejo Instance for the new Runner.${CL}" From a17b21e7d9dbfb6f7750534f777ecc8afa6dfd0a Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 6 Jul 2026 18:20:17 +0200 Subject: [PATCH 8/9] Update install/forgejo-runner-install.sh Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> --- install/forgejo-runner-install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install/forgejo-runner-install.sh b/install/forgejo-runner-install.sh index 25cf5b9df39..d6882d9e270 100644 --- a/install/forgejo-runner-install.sh +++ b/install/forgejo-runner-install.sh @@ -11,6 +11,7 @@ catch_errors setting_up_container network_check update_os + setup_yq # Get required configuration — skip prompts if already set (generated/unattended mode) From b5dac2719ebbdc43cd6279004d513f388a12b7e5 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 6 Jul 2026 18:24:44 +0200 Subject: [PATCH 9/9] Simplify Forgejo runner installation script prompts Remove prompt for Forgejo instance URL if already set. --- install/forgejo-runner-install.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/install/forgejo-runner-install.sh b/install/forgejo-runner-install.sh index d6882d9e270..94ceb687723 100644 --- a/install/forgejo-runner-install.sh +++ b/install/forgejo-runner-install.sh @@ -14,7 +14,6 @@ update_os setup_yq -# Get required configuration — skip prompts if already set (generated/unattended mode) if [[ -z "${var_forgejo_instance:-}" ]]; then read -r -p "${TAB3}Forgejo Instance URL (e.g. https://codeberg.org): " var_forgejo_instance var_forgejo_instance="${var_forgejo_instance:-https://codeberg.org}" @@ -38,7 +37,6 @@ if [[ -z "${var_forgejo_runner_token:-}" ]]; then exit 1 fi -# Runner labels — default is always included; additional labels are appended DEFAULT_RUNNER_LABELS="linux-amd64:docker://node:22-bookworm" if [[ -z "${var_runner_labels:-}" ]]; then read -r -p "${TAB3}Additional runner labels (comma-separated, or leave blank for default only): " var_runner_labels