From 74deabd630c81be20d03a890244294342c128bc7 Mon Sep 17 00:00:00 2001 From: Josh Knapp Date: Fri, 13 Nov 2026 14:31:55 -0800 Subject: [PATCH] CI: suspend needrestart instead of letting it restart services On a host-mode ephemeral runner (eph-pve3-112), NEEDRESTART_MODE=a made needrestart restart act-runner.service during an apt-get install, which killed the build-linux job (PR #76, run 5217). Skip needrestart entirely with NEEDRESTART_SUSPEND=1, and fall back to list-only mode (l), which never prompts and never restarts anything. Co-Authored-By: Claude Opus 5.5 --- .gitea/workflows/build-app-preview.yml | 20 +++++++++++++------- .gitea/workflows/build-app.yml | 14 ++++++++++---- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/.gitea/workflows/build-app-preview.yml b/.gitea/workflows/build-app-preview.yml index 392d902..07d33ed 100644 --- a/.gitea/workflows/build-app-preview.yml +++ b/.gitea/workflows/build-app-preview.yml @@ -66,7 +66,13 @@ env: # libraries" prompt and hangs the job until it times out. `sudo` resets the # environment, so the apt-get calls below also pass these via `sudo env`; # here they reach the NodeSource setup script through `sudo -E`. - NEEDRESTART_MODE: a + # + # SUSPEND skips needrestart entirely. Mode `a` (restart automatically) is not + # safe: on a host-mode runner it restarted act-runner.service mid-job and + # killed the job. Mode `l` (list only) is a fallback for a needrestart that + # ignores SUSPEND; it never prompts and never restarts anything. + NEEDRESTART_SUSPEND: "1" + NEEDRESTART_MODE: l DEBIAN_FRONTEND: noninteractive GITEA_URL: ${{ gitea.server_url }} REPO: ${{ gitea.repository }} @@ -272,7 +278,7 @@ jobs: fi if [ "$NEED_INSTALL" = true ]; then curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - - sudo env NEEDRESTART_MODE=a DEBIAN_FRONTEND=noninteractive apt-get install -y nodejs + sudo env NEEDRESTART_SUSPEND=1 NEEDRESTART_MODE=l DEBIAN_FRONTEND=noninteractive apt-get install -y nodejs hash -r fi node --version @@ -283,8 +289,8 @@ jobs: - name: Install system dependencies run: | - sudo env NEEDRESTART_MODE=a DEBIAN_FRONTEND=noninteractive apt-get update - sudo env NEEDRESTART_MODE=a DEBIAN_FRONTEND=noninteractive apt-get install -y \ + sudo env NEEDRESTART_SUSPEND=1 NEEDRESTART_MODE=l DEBIAN_FRONTEND=noninteractive apt-get update + sudo env NEEDRESTART_SUSPEND=1 NEEDRESTART_MODE=l DEBIAN_FRONTEND=noninteractive apt-get install -y \ libgtk-3-dev \ libwebkit2gtk-4.1-dev \ gstreamer1.0-plugins-base \ @@ -368,7 +374,7 @@ jobs: fi if [ "$NEED_INSTALL" = true ]; then curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - - sudo env NEEDRESTART_MODE=a DEBIAN_FRONTEND=noninteractive apt-get install -y nodejs + sudo env NEEDRESTART_SUSPEND=1 NEEDRESTART_MODE=l DEBIAN_FRONTEND=noninteractive apt-get install -y nodejs hash -r fi node --version @@ -391,8 +397,8 @@ jobs: - name: Install system dependencies run: | - sudo env NEEDRESTART_MODE=a DEBIAN_FRONTEND=noninteractive apt-get update - sudo env NEEDRESTART_MODE=a DEBIAN_FRONTEND=noninteractive apt-get install -y \ + sudo env NEEDRESTART_SUSPEND=1 NEEDRESTART_MODE=l DEBIAN_FRONTEND=noninteractive apt-get update + sudo env NEEDRESTART_SUSPEND=1 NEEDRESTART_MODE=l DEBIAN_FRONTEND=noninteractive apt-get install -y \ libgtk-3-dev \ libwebkit2gtk-4.1-dev \ gstreamer1.0-plugins-base \ diff --git a/.gitea/workflows/build-app.yml b/.gitea/workflows/build-app.yml index 2ad49a7..9ef4a7a 100644 --- a/.gitea/workflows/build-app.yml +++ b/.gitea/workflows/build-app.yml @@ -22,7 +22,13 @@ env: # libraries" prompt and hangs the job until it times out. `sudo` resets the # environment, so the apt-get calls below also pass these via `sudo env`; # here they reach the NodeSource setup script through `sudo -E`. - NEEDRESTART_MODE: a + # + # SUSPEND skips needrestart entirely. Mode `a` (restart automatically) is not + # safe: on a host-mode runner it restarted act-runner.service mid-job and + # killed the job. Mode `l` (list only) is a fallback for a needrestart that + # ignores SUSPEND; it never prompts and never restarts anything. + NEEDRESTART_SUSPEND: "1" + NEEDRESTART_MODE: l DEBIAN_FRONTEND: noninteractive GITEA_URL: ${{ gitea.server_url }} REPO: ${{ gitea.repository }} @@ -125,7 +131,7 @@ jobs: fi if [ "$NEED_INSTALL" = true ]; then curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - - sudo env NEEDRESTART_MODE=a DEBIAN_FRONTEND=noninteractive apt-get install -y nodejs + sudo env NEEDRESTART_SUSPEND=1 NEEDRESTART_MODE=l DEBIAN_FRONTEND=noninteractive apt-get install -y nodejs hash -r fi echo "Node.js at: $(which node)" @@ -147,8 +153,8 @@ jobs: - name: Install system dependencies run: | - sudo env NEEDRESTART_MODE=a DEBIAN_FRONTEND=noninteractive apt-get update - sudo env NEEDRESTART_MODE=a DEBIAN_FRONTEND=noninteractive apt-get install -y \ + sudo env NEEDRESTART_SUSPEND=1 NEEDRESTART_MODE=l DEBIAN_FRONTEND=noninteractive apt-get update + sudo env NEEDRESTART_SUSPEND=1 NEEDRESTART_MODE=l DEBIAN_FRONTEND=noninteractive apt-get install -y \ libgtk-3-dev \ libwebkit2gtk-4.1-dev \ gstreamer1.0-plugins-base \ -- 2.52.0