From c1e5829b03d94f6c70041c0190725f1a3fee62c6 Mon Sep 17 00:00:00 2001 From: Yusuke Kuoka Date: Wed, 11 May 2022 17:55:33 +0900 Subject: [PATCH] refactor(runner): ability to opt-out of using --ephemeral / opt-in to legacy --once for GHES older than 3.3 (#1384) * runner: Remove the ability to use the deprecated `--once` flag Ref #1196 * runner: Ability to opt-out of using --ephemeral Although we are going to eventually remove the ability to use the legacy --once flag as proposed in #1196, there might be folks still using legacy GHES versions 3.2 or earlier. This commit removes the existing feature flag to opt-in for --ephemeral, while adding another feature flag RUNNER_FEATURE_FLAG_ONCE to opt-in for --once so that folks stuck in legacy GHES versions can still use ARC. Since this change every user starts using --ephemeral by default. If they see any issues on legacy GHES instance, RUNNER_FEATURE_FLAG_ONCE=true can be set to opt-in to keep using --once, which gives one more ARC release until they upgrade their GHES instance. But beware, we won't support legacy GHES instances forever as it's going to be a maintenance nightmare. Please upgrade! Ref #1196 --- README.md | 7 +- runner/entrypoint.sh | 6 +- .../should_work_use_once_switch/test.sh | 90 ------------------- 3 files changed, 6 insertions(+), 97 deletions(-) delete mode 100755 test/entrypoint/should_work_use_once_switch/test.sh diff --git a/README.md b/README.md index 4af3f47a..1b98bfeb 100644 --- a/README.md +++ b/README.md @@ -1311,12 +1311,11 @@ spec: # Disables automatic runner updates - name: DISABLE_RUNNER_UPDATE value: "true" - # Configure runner with --ephemeral instead of --once flag + # Configure runner with legacy --once instead of --ephemeral flag # WARNING | THIS ENV VAR IS DEPRECATED AND WILL BE REMOVED - # IN A FUTURE VERSION OF ARC. IN 0.22.0 ARC SETS --ephemeral VIA - # THE CONTROLLER SETTING THIS ENV VAR ON POD CREATION. + # IN A FUTURE VERSION OF ARC. # THIS ENV VAR WILL BE REMOVED, SEE ISSUE #1196 FOR DETAILS - - name: RUNNER_FEATURE_FLAG_EPHEMERAL + - name: RUNNER_FEATURE_FLAG_ONCE value: "true" ``` diff --git a/runner/entrypoint.sh b/runner/entrypoint.sh index f0977036..887239c9 100755 --- a/runner/entrypoint.sh +++ b/runner/entrypoint.sh @@ -76,7 +76,7 @@ cd ${RUNNER_HOME} # past that point, it's all relative pathes from /runner config_args=() -if [ "${RUNNER_FEATURE_FLAG_EPHEMERAL:-}" == "true" -a "${RUNNER_EPHEMERAL}" == "true" ]; then +if [ "${RUNNER_FEATURE_FLAG_ONCE:-}" != "true" -a "${RUNNER_EPHEMERAL}" == "true" ]; then config_args+=(--ephemeral) log.debug 'Passing --ephemeral to config.sh to enable the ephemeral runner.' fi @@ -141,10 +141,10 @@ if [ -z "${UNITTEST:-}" ]; then fi args=() -if [ "${RUNNER_FEATURE_FLAG_EPHEMERAL:-}" != "true" -a "${RUNNER_EPHEMERAL}" == "true" ]; then +if [ "${RUNNER_FEATURE_FLAG_ONCE:-}" == "true" -a "${RUNNER_EPHEMERAL}" == "true" ]; then args+=(--once) log.warning 'Passing --once is deprecated and will be removed as an option' \ - 'from the image and actions-runner-controller at the release of 0.24.0.' \ + 'from the image and actions-runner-controller at the release of 0.25.0.' \ 'Upgrade to GHES => 3.3 to continue using actions-runner-controller. If' \ 'you are using github.com ignore this warning.' fi diff --git a/test/entrypoint/should_work_use_once_switch/test.sh b/test/entrypoint/should_work_use_once_switch/test.sh deleted file mode 100755 index 7a9a8d79..00000000 --- a/test/entrypoint/should_work_use_once_switch/test.sh +++ /dev/null @@ -1,90 +0,0 @@ -#!/usr/bin/env bash - -# UNITTEST: should work legacy once switch set -# Will simulate a scenario where RUNNER_FEATURE_FLAG_EPHEMERAL=false. expects: -# - the configuration step to be run exactly once -# - the entrypoint script to exit with no error -# - the run.sh script to run with the --once flag - -source ../assets/logging.sh - -entrypoint_log() { - while read I; do - printf "\tentrypoint.sh: $I\n" - done -} - -log "Setting up test area" -export RUNNER_HOME=testarea -mkdir -p ${RUNNER_HOME} - -log "Setting up the test" -export UNITTEST=true -export RUNNER_NAME="example_runner_name" -export RUNNER_REPO="myorg/myrepo" -export RUNNER_TOKEN="xxxxxxxxxxxxx" -export RUNNER_FEATURE_FLAG_EPHEMERAL="false" -export RUNNER_EPHEMERAL="true" - -# run.sh and config.sh get used by the runner's real entrypoint.sh and are part of actions/runner. -# We change symlink dummy versions so the entrypoint.sh can run allowing us to test the real entrypoint.sh -log "Symlink dummy config.sh and run.sh" -ln -s ../../assets/config.sh ${RUNNER_HOME}/config.sh -ln -s ../../assets/run.sh ${RUNNER_HOME}/run.sh - -cleanup() { - rm -rf ${RUNNER_HOME} - unset UNITTEST - unset RUNNERHOME - unset RUNNER_NAME - unset RUNNER_REPO - unset RUNNER_TOKEN - unset RUNNER_EPHEMERAL - unset RUNNER_FEATURE_FLAG_EPHEMERAL -} - -# Always run cleanup when test ends regardless of how it ends -trap cleanup SIGINT SIGTERM SIGQUIT EXIT - -log "Running the entrypoint" -log "" - -# run.sh and config.sh get used by the runner's real entrypoint.sh and are part of actions/runner. -# We change symlink dummy versions so the entrypoint.sh can run allowing us to test the real entrypoint.sh -../../../runner/entrypoint.sh 2> >(entrypoint_log) - -if [ "$?" != "0" ]; then - error "===========================================" - error "FAIL | Entrypoint script did not exit successfully" - exit 1 -fi - -log "Testing if we went through the configuration step only once" -count=`cat ${RUNNER_HOME}/counter || echo "not_found"` -if [ ${count} != "1" ]; then - error "===============================================" - error "FAIL | The configuration step was not run exactly once" - exit 1 -fi - -success "PASS | The configuration ran ${count} time(s)" - -log "Testing if the configuration included the --once flag" -if ! grep -q -- '--once' ${RUNNER_HOME}/runner_args; then - error "===============================================" - error "FAIL | The configuration did not include the --once flag, config printed below:" - exit 1 -fi - -success "PASS | The --once argument was passed in" - -log "Testing if run.sh ran" -if [ ! -f "${RUNNER_HOME}/run_sh_ran" ]; then - error "==============================" - error "FAIL | The runner service has not run" - exit 1 -fi -success "PASS | run.sh ran" -success "" -success "===========================" -success "Test completed successfully"