diff --git a/scripts/install.sh b/scripts/install.sh index 1f5caf4..4862a24 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -24,7 +24,7 @@ runner_user() { runner_is_installed() { local dir dir="$(runner_dir)" - [[ -x "$dir/runsvc.sh" ]] + [[ -x "$dir/runsvc.sh" || -x "$dir/bin/runsvc.sh" ]] } runner_is_configured() { diff --git a/scripts/runner-service.sh b/scripts/runner-service.sh index 548d673..e85d1ea 100755 --- a/scripts/runner-service.sh +++ b/scripts/runner-service.sh @@ -27,9 +27,17 @@ main() { local runner_dir="${RUNNER_ACTIONS_RUNNER_DIR:-$(appliance_path /opt/runner/actions-runner)}" local hook_dir="${RUNNER_HOOKS_DIR:-$(appliance_path /usr/local/lib/runner)}" - if [[ ! -x "$runner_dir/runsvc.sh" ]]; then + local runsvc_path="$runner_dir/runsvc.sh" + if [[ ! -x "$runsvc_path" && -x "$runner_dir/bin/runsvc.sh" ]]; then + runsvc_path="$runner_dir/bin/runsvc.sh" + cover_path "runner-service:runsvc-bin" + else + cover_path "runner-service:runsvc-root" + fi + + if [[ ! -x "$runsvc_path" ]]; then cover_path "runner-service:missing-runner" - die "Runner not installed/configured: missing $runner_dir/runsvc.sh" + die "Runner not installed/configured: missing $runner_dir/runsvc.sh (or $runner_dir/bin/runsvc.sh)" fi # Prefer using container hooks to avoid Docker. @@ -42,7 +50,7 @@ main() { fi cover_path "runner-service:exec" - exec "$runner_dir/runsvc.sh" + exec "$runsvc_path" } if [[ "${BASH_SOURCE[0]}" == "$0" ]]; then diff --git a/tests/bin/kcov-line-coverage.sh b/tests/bin/kcov-line-coverage.sh index 1e15cc4..ecc37a3 100755 --- a/tests/bin/kcov-line-coverage.sh +++ b/tests/bin/kcov-line-coverage.sh @@ -739,6 +739,18 @@ hook_dir="$APPLIANCE_ROOT/usr/local/lib/runner" ( set +e; kcov_wrap_run "runner-service-missing" "$REPO_ROOT/scripts/runner-service.sh"; exit 0 ) >/dev/null 2>&1 || true mkdir -p "$runner_dir" "$hook_dir" + +# First: only bin/runsvc.sh exists (matches real runner extraction layout). +mkdir -p "$runner_dir/bin" +cat >"$runner_dir/bin/runsvc.sh" <<'EOF' +#!/usr/bin/env bash +exit 0 +EOF +chmod +x "$runner_dir/bin/runsvc.sh" + +kcov_wrap_run "runner-service-no-hooks" "$REPO_ROOT/scripts/runner-service.sh" >/dev/null 2>&1 || true + +# Second: root runsvc.sh exists; should take precedence. cat >"$runner_dir/runsvc.sh" <<'EOF' #!/usr/bin/env bash exit 0 @@ -752,8 +764,6 @@ ln -sf "$REPO_ROOT/scripts/lib" "$runner_service_fallback_root/lib" ln -sf "$REPO_ROOT/scripts/runner-service.sh" "$runner_service_fallback_root/scripts/runner-service.sh" kcov_wrap_run "runner-service-libdir-fallback" "$runner_service_fallback_root/scripts/runner-service.sh" >/dev/null 2>&1 || true -kcov_wrap_run "runner-service-no-hooks" "$REPO_ROOT/scripts/runner-service.sh" >/dev/null 2>&1 || true - cat >"$hook_dir/container-hooks.sh" <<'EOF' #!/usr/bin/env bash exit 0 diff --git a/tests/integration/install.bats b/tests/integration/install.bats index f45101f..52d5152 100644 --- a/tests/integration/install.bats +++ b/tests/integration/install.bats @@ -192,12 +192,12 @@ EOF @test "install: starts runner service when runner already installed+configured (dry-run)" { write_config_env '' - mkdir -p "$TEST_ROOT/opt/runner/actions-runner" - cat >"$TEST_ROOT/opt/runner/actions-runner/runsvc.sh" <<'EOF' + mkdir -p "$TEST_ROOT/opt/runner/actions-runner/bin" + cat >"$TEST_ROOT/opt/runner/actions-runner/bin/runsvc.sh" <<'EOF' #!/usr/bin/env bash exit 0 EOF - chmod +x "$TEST_ROOT/opt/runner/actions-runner/runsvc.sh" + chmod +x "$TEST_ROOT/opt/runner/actions-runner/bin/runsvc.sh" touch "$TEST_ROOT/opt/runner/actions-runner/.runner" ID_APPLIANCE_EXISTS=1 \ diff --git a/tests/integration/runner-service.bats b/tests/integration/runner-service.bats index c8e92a9..378065e 100644 --- a/tests/integration/runner-service.bats +++ b/tests/integration/runner-service.bats @@ -20,20 +20,20 @@ teardown() { } @test "runner-service: no container hooks still runs" { - mkdir -p "$TEST_ROOT/opt/runner/actions-runner" - cat >"$TEST_ROOT/opt/runner/actions-runner/runsvc.sh" <<'EOF' + mkdir -p "$TEST_ROOT/opt/runner/actions-runner/bin" + cat >"$TEST_ROOT/opt/runner/actions-runner/bin/runsvc.sh" <<'EOF' #!/usr/bin/env bash exit 0 EOF - chmod +x "$TEST_ROOT/opt/runner/actions-runner/runsvc.sh" + chmod +x "$TEST_ROOT/opt/runner/actions-runner/bin/runsvc.sh" run env APPLIANCE_ALLOW_NON_ROOT=1 bash "$APPLIANCE_REPO_ROOT/scripts/runner-service.sh" [ "$status" -eq 0 ] } @test "runner-service: sets container hooks when present" { - mkdir -p "$TEST_ROOT/opt/runner/actions-runner" - cat >"$TEST_ROOT/opt/runner/actions-runner/runsvc.sh" <<'EOF' + mkdir -p "$TEST_ROOT/opt/runner/actions-runner/bin" + cat >"$TEST_ROOT/opt/runner/actions-runner/bin/runsvc.sh" <<'EOF' #!/usr/bin/env bash if [[ -z "${ACTIONS_RUNNER_CONTAINER_HOOKS:-}" ]]; then # Fail if hooks weren't set. @@ -41,7 +41,7 @@ if [[ -z "${ACTIONS_RUNNER_CONTAINER_HOOKS:-}" ]]; then fi exit 0 EOF - chmod +x "$TEST_ROOT/opt/runner/actions-runner/runsvc.sh" + chmod +x "$TEST_ROOT/opt/runner/actions-runner/bin/runsvc.sh" mkdir -p "$TEST_ROOT/usr/local/lib/runner" cat >"$TEST_ROOT/usr/local/lib/runner/container-hooks.sh" <<'EOF'