Compare commits

...
39 Commits
Author SHA1 Message Date
Marcus Young 872988d630 [Automated 🤖 ] Bump to version 2.289.5 2023-01-30 10:07:51 -06:00
Marcus Young 8b5cafc897 [Automated 🤖 ] Bump to version 2.301.1 2023-01-18 19:13:36 -06:00
Marcus Young b0f0762e05 [Automated 🤖 ] Bump to version 2.301.0 2023-01-18 14:10:34 -06:00
myoung34andGitHub 1c136849c9 Merge pull request #271 from iamironz/master
Added using docker hostname instead manual generated random
2023-01-16 08:31:20 -06:00
Aleksandr Efremenkov 9175b93a7b added using docker hostname instead manual generated random, updated README 2023-01-16 16:10:48 +02:00
Marcus Young 45574ba8bb Hotfix: fix outdated key for focal on opensuse gpg 2022-12-31 18:59:13 -06:00
Marcus Young ac2e2b9a5d [Automated 🤖 ] Bump to version 2.300.2 2022-12-19 13:27:52 -06:00
Marcus Young 02418d25e4 [Automated 🤖 ] Bump to version 2.300.1 2022-12-19 10:37:02 -06:00
Marcus Young ca30659d4e [Automated 🤖 ] Bump to version 2.300.0 2022-12-14 02:52:06 -06:00
myoung34andGitHub 0bb0b6227b Merge pull request #264 from Abramo-Bagnara/master
Allow to put APP_PRIVATE_KEY in Docker env file. Introduced APP_LOGIN…
2022-12-12 14:56:59 -06:00
myoung34andGitHub b92d9416f7 Merge pull request #268 from lumagi/remove_recursive_chown
Change recursive chown to flat chown for tools directory
2022-12-12 14:50:23 -06:00
Lukas Magel cb7a831054 Change recursive chown to flat chown for tools directory
If the tools cache is already populated with tooling in a derived docker
image, performing a recursive chown significantly slows down ephemeral
runner startup.
2022-12-12 20:52:43 +01:00
Abramo Bagnara c4dad6b826 Added some info about APP_LOGIN in README.md. 2022-12-12 19:03:03 +01:00
Abramo Bagnara b431a190e0 Improved backward compatibility with sane defaults for APP_LOGIN. 2022-12-09 08:08:27 +01:00
myoung34andGitHub b89c3a1c85 Merge pull request #263 from ilyesAj/patch-1
add zip package to dockerfile
2022-12-06 13:39:43 -06:00
myoung34andGitHub 7827dd56fa Merge pull request #265 from nmalaguti/master
Fix expired GPG key for opensuse kubic repository
2022-12-06 12:34:50 -06:00
Nick Malaguti 47b2f1d300 Fix expired GPG key for opensuse kubic repository
https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_20.04/Release.key
expired on 2022-12-06. An updated key with an expiration of 2025-01-30
is available at
https://build.opensuse.org/project/keys_and_certificates/devel:kubic.
2022-12-06 11:39:40 -05:00
Abramo Bagnara c56bb17e42 Allow to put APP_PRIVATE_KEY in Docker env file. Introduced APP_LOGIN to fix access token retrieval in case of multiple GitHub's App subscriber. 2022-12-06 08:50:29 +01:00
ilyes AjroudandGitHub 28f9ffd8d0 add zip package 2022-12-05 15:24:07 +01:00
myoung34andGitHub a7dc4a3dcc Merge pull request #254 from chantra/github_app
Add support for GitHub app authentication
2022-11-11 09:17:41 -05:00
Manu Bretelle fe3e411b16 entrypoint: make APP_ID/APP_PRIVATE_KEY mutually exclusive with
{ACCESS,RUNNER}_TOKEN.

```
$ docker run --env RUNNER_TOKEN=foo --env APP_ID=1234 --env APP_PRIVATE_KEY="$(<~/Downloads/cert.pem)" runner_app
REPO_URL required for repo runners
Runner reusage is disabled
ERROR: ACCESS_TOKEN or RUNNER_TOKEN provided but are mutually exclusive with APP_ID and APP_PRIVATE_KEY.
$ docker run --env ACCESS_TOKEN=foo --env APP_ID=1234 --env APP_PRIVATE_KEY="$(<~/Downloads/cert.pem)" runner_app
REPO_URL required for repo runners
Runner reusage is disabled
ERROR: ACCESS_TOKEN or RUNNER_TOKEN provided but are mutually exclusive with APP_ID and APP_PRIVATE_KEY.
$ docker run --env ACCESS_TOKEN=foo --env APP_ID=1234 --env APP_PRIVATE_KEY="$(<~/Downloads/cert.pem)" runner_app
$ docker run --env APP_ID=250536  runner_app
REPO_URL required for repo runners
Runner reusage is disabled
ERROR: Both APP_ID and APP_PRIVATE_KEY must be specified.
$ docker run --env APP_ID=1234 --env APP_PRIVATE_KEY="$(<~/Downloads/cert.pem)" runner_app

REPO_URL required for repo runners
Runner reusage is disabled
Obtaining access token for app_id 1234
Obtaining the token of the runner
curl: (22) The requested URL returned error: 404
Configuring

--------------------------------------------------------------------------------
|        ____ _ _   _   _       _          _        _   _                      |
|       / ___(_) |_| | | |_   _| |__      / \   ___| |_(_) ___  _ __  ___      |
|      | |  _| | __| |_| | | | | '_ \    / _ \ / __| __| |/ _ \| '_ \/ __|     |
|      | |_| | | |_|  _  | |_| | |_) |  / ___ \ (__| |_| | (_) | | | \__ \     |
|       \____|_|\__|_| |_|\__,_|_.__/  /_/   \_\___|\__|_|\___/|_| |_|___/     |
|                                                                              |
|                       Self-hosted runner registration                        |
|                                                                              |
--------------------------------------------------------------------------------

Invalid configuration provided for url. Terminating unattended configuration.
An error occurred: Not configured. Run config.(sh/cmd) to configure the runner.
```
2022-11-10 13:31:22 -08:00
Manu Bretelle 8e83820e40 Update README.md with PR feedback 2022-11-10 13:31:22 -08:00
Manu Bretelle da04c0609f Fix trailing space in .github/workflows/deploy.yml 2022-11-10 13:31:22 -08:00
Manu Bretelle a283b1d8d0 Update README to document APP_ID/APP_PRIVATE_KEY
Document the new environment variables and highlight the possible
security risk and provide possible mitigations.
2022-11-10 13:31:22 -08:00
Manu Bretelle 516f8f96ac Copy app_token.sh when building the docker image 2022-11-10 13:31:22 -08:00
Manu Bretelle a43f59ceb9 Add suport for using a GitHub app to run the runner.
If both `APP_ID` and `APP_PRIVATE_KEY` are set, `entrypoint.sh` will
fetch an `ACCESS_TOKEN` for the GitHub app using `app_token.sh` script.

`ACCESS_TOKEN` will get set, and `entrypoint.sh` will carry on as it
used to had `ACCESS_TOKEN` been set from the environment variable.
2022-11-10 13:31:22 -08:00
Manu Bretelle ec64392f58 Add a script to fetch an access token for a Github App.
This script will fetch an access token from Github for a Github app.

It is expected that `APP_ID` and `APP_PRIVATE_KEY` environment variables are set.

Running
```
APP_ID=12345 APP_PRIVATE_KEY="$(</path/to/githubapp.pem)" bash ./app_token.sh
```

will generate a token suitable to use as `ACCESS_TOKEN`.
2022-11-10 13:31:22 -08:00
Marcus Young 000e4c0e03 [Automated 🤖 ] Bump to version 2.299.1 2022-11-02 20:06:22 -04:00
Marcus Young ccad12634b [Automated 🤖 ] Bump to version 2.299.0 2022-11-02 15:10:20 -04:00
Marcus Young adff5c97f3 Sid is now bookworm in lsb_release -cs 2022-10-31 10:03:36 -05:00
Marcus Young e44424c8b9 [Automated 🤖 ] Bump to version 2.298.2 2022-10-04 11:52:15 -05:00
Marcus Young f60efe84a9 [Automated 🤖 ] Bump to version 2.298.1 2022-10-04 10:36:00 -05:00
Marcus Young e3f7748492 [Automated 🤖 ] Bump to version 2.298.0 2022-10-04 07:27:21 -05:00
myoung34andGitHub 0f2883e196 Merge pull request #250 from chantra/fix_ephemeral
Fix ephemeral support
2022-10-02 08:31:55 -05:00
chantra 2fc9c11800 Fix ephemeral support
The quotes added in 08608da938 cause
`ephemeral` to evaluate as false when `DISABLE_AUTO_UPDATE` was not set.

This is explained in details in #249. This diff changes the logic to use
an array where extra parameters are being added.
When calling config.sh, the array is expanded.

Testing:
../self_hosted_runner.env contains
```
EPHEMERAL=true
```

Before: https://gist.github.com/chantra/443dfaa60d964d938bcb1c020781ca00
we can see multiple jobs got scheduled on the runner

After: https://gist.github.com/chantra/061dc471c63964c01a2e3733a53bd3ec
we can see that when the job finished, the container shutdown.

After with DISABLE_AUTO_UPDATE set: https://gist.github.com/chantra/df0102c7340b8f6bfd458ec56d9fa29c

Also adding `set -x` before the call to `config.sh` revealed the
arguments were correctly added.

Fixes #249
2022-09-30 14:49:04 -07:00
Marcus Young dafb91bfa3 Hotfix: more lenient sid to bullseye sub 2022-09-28 01:48:12 -05:00
Marcus Young c3c6a4e493 Fix ghcli installer by using API and not html parsing 2022-09-26 12:08:03 -05:00
Marcus Young 087e754f56 Fix permissions for release creation 2022-09-26 11:27:59 -05:00
Marcus Young 5b19b8dafa [Automated 🤖 ] Bump to version 2.297.0 2022-09-26 10:54:33 -05:00
7 changed files with 142 additions and 28 deletions
+2 -2
View File
@@ -10,9 +10,9 @@ on:
schedule:
- cron: '59 23 * * *'
permissions:
permissions:
contents: read
packages: write
packages: write
jobs:
ubuntu_latest_deploy:
+3 -3
View File
@@ -4,9 +4,9 @@ on:
tags:
- '*'
permissions:
contents: read
packages: write
permissions:
contents: write
packages: write
jobs:
create-release:
+3 -3
View File
@@ -5,7 +5,7 @@ LABEL maintainer="myoung34@my.apsu.edu"
ENV AGENT_TOOLSDIRECTORY=/opt/hostedtoolcache
RUN mkdir -p /opt/hostedtoolcache
ARG GH_RUNNER_VERSION="2.296.2"
ARG GH_RUNNER_VERSION="2.289.5"
ARG TARGETPLATFORM
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
@@ -18,8 +18,8 @@ RUN chmod +x /actions-runner/install_actions.sh \
&& rm /actions-runner/install_actions.sh \
&& chown runner /_work /actions-runner /opt/hostedtoolcache
COPY token.sh entrypoint.sh /
RUN chmod +x /token.sh /entrypoint.sh
COPY token.sh entrypoint.sh app_token.sh /
RUN chmod +x /token.sh /entrypoint.sh /app_token.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["./bin/Runner.Listener", "run", "--startuptype", "service"]
+6 -6
View File
@@ -23,6 +23,7 @@ RUN echo en_US.UTF-8 UTF-8 >> /etc/locale.gen \
curl \
tar \
unzip \
zip \
apt-transport-https \
ca-certificates \
sudo \
@@ -56,21 +57,20 @@ RUN echo en_US.UTF-8 UTF-8 >> /etc/locale.gen \
&& ( [[ $(apt-cache search -n liblttng-ust1 | awk '{print $1}') == "liblttng-ust1" ]] && apt-get install -y --no-install-recommends liblttng-ust1 || : ) \
&& ( ( curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip" && unzip awscliv2.zip -d /tmp/ && /tmp/aws/install && rm awscliv2.zip) || pip3 install --no-cache-dir awscli ) \
&& ( curl -s "https://github.com/git-lfs/git-lfs/releases/download/v${GIT_LFS_VERSION}/git-lfs-linux-${DPKG_ARCH}-v${GIT_LFS_VERSION}.tar.gz" -L -o /tmp/lfs.tar.gz && tar -xzf /tmp/lfs.tar.gz -C /tmp && /tmp/git-lfs-${GIT_LFS_VERSION}/install.sh && rm -rf /tmp/lfs.tar.gz /tmp/git-lfs-${GIT_LFS_VERSION}) \
# Determine the Distro name (Debian, Ubuntu, etc)
&& distro=$(lsb_release -is | awk '{print tolower($0)}') \
# Determine the Distro version (bullseye, xenial, etc)
# Note: sid is aliased to bullseye, because Docker doesn't have a matching apt repo
&& mkdir -p /etc/apt/keyrings \
&& ( curl -fsSL https://download.docker.com/linux/${distro}/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg ) \
&& version=$(lsb_release -cs | awk '{gsub("sid", "bullseye"); print $0}') \
&& version=$(lsb_release -cs | sed 's/bookworm\|n\/a/bullseye/g') \
&& ( echo "deb [arch=${DPKG_ARCH} signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/${distro} ${version} stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null ) \
&& apt-get update \
&& apt-get install -y docker-ce docker-ce-cli containerd.io --no-install-recommends --allow-unauthenticated \
&& ( [[ $(lscpu -J | jq -r '.lscpu[] | select(.field == "Vendor ID:") | .data') == "ARM" ]] && echo "Not installing docker-compose. See https://github.com/docker/compose/issues/6831" || ( curl -sL "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose ) ) \
&& ( [[ "${LSB_RELEASE_CODENAME}" == "focal" ]] && ( echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_20.04/ /" | tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list && curl -L "https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_20.04/Release.key" | apt-key add - && apt-get update) || : ) \
&& ( [[ "${LSB_RELEASE_CODENAME}" == "focal" ]] && ( echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_20.04/ /" | tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list && curl -L "https://build.opensuse.org/projects/devel:kubic/public_key" | apt-key add -; echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_20.04/ /" | tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list && curl -L "https://build.opensuse.org/projects/devel:kubic/public_key" | apt-key add - && apt-get update) || : ) \
&& ( [[ "${LSB_RELEASE_CODENAME}" == "focal" || "${LSB_RELEASE_CODENAME}" == "jammy" || "${LSB_RELEASE_CODENAME}" == "sid" || "${LSB_RELEASE_CODENAME}" == "bullseye" ]] && apt-get install -y --no-install-recommends podman buildah skopeo || : ) \
&& ( [[ "${LSB_RELEASE_CODENAME}" == "jammy" ]] && echo "Ubuntu Jammy is marked as beta. Please see https://github.com/actions/virtual-environments/issues/5490" || : ) \
&& GH_CLI_INSTALL_FILE="/tmp/gh-$$.deb" && curl -sSLo "${GH_CLI_INSTALL_FILE}" "https://github.com$(curl -sSL "https://github.com/cli/cli/releases/latest" | grep -Po "(?<=href=\")/cli/cli/releases/download/[^\"]*${DPKG_ARCH}[.]deb(?=\")")" && apt-get -y install "${GH_CLI_INSTALL_FILE}" \
&& GH_CLI_VERSION=$(curl -sL -H "Accept: application/vnd.github+json" https://api.github.com/repos/cli/cli/releases/latest | jq -r '.tag_name' | sed 's/^v//g') \
&& GH_CLI_DOWNLOAD_URL=$(curl -sL -H "Accept: application/vnd.github+json" https://api.github.com/repos/cli/cli/releases/latest | jq ".assets[] | select(.name == \"gh_${GH_CLI_VERSION}_linux_${DPKG_ARCH}.deb\")" | jq -r '.browser_download_url') \
&& curl -sSLo /tmp/ghcli.deb ${GH_CLI_DOWNLOAD_URL} && apt-get -y install /tmp/ghcli.deb && rm /tmp/ghcli.deb \
&& rm -rf /var/lib/apt/lists/* \
&& rm -rf /tmp/* \
&& groupadd -g 121 runner \
+5 -2
View File
@@ -14,7 +14,7 @@ Please read [the contributing guidelines](https://github.com/myoung34/docker-git
### Security ###
It is known that currently tokens (ACCESS_TOKEN / RUNNER_TOKEN ) are not safe from exfiltration.
It is known that environment variables are not safe from exfiltration.
If you are using this runner make sure that any workflow changes are gated by a verification process (in the actions settings) so that malicious PR's cannot exfiltrate these.
### Docker Support ###
@@ -55,8 +55,11 @@ These containers are built via Github actions that [copy the dockerfile](https:/
| --- | --- |
| `RUN_AS_ROOT` | Boolean to run as root. If `true`: will run as root. If `True` and the user is overridden it will error. If any other value it will run as the `runner` user and allow an optional override. Default is `true` |
| `RUNNER_NAME` | The name of the runner to use. Supercedes (overrides) `RUNNER_NAME_PREFIX` |
| `RUNNER_NAME_PREFIX` | A prefix for a randomly generated name (followed by a random 13 digit string). You must not also provide `RUNNER_NAME`. Defaults to `github-runner` |
| `RUNNER_NAME_PREFIX` | A prefix for runner name (followed by docker container id). You must not also provide `RUNNER_NAME`. Defaults to `github-runner` |
| `ACCESS_TOKEN` | A [github PAT](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token) to use to generate `RUNNER_TOKEN` dynamically at container start. Not using this requires a valid `RUNNER_TOKEN` |
| `APP_ID` | The github application ID. Must be paired with `APP_PRIVATE_KEY` and should not be used with `ACCESS_TOKEN` or `RUNNER_TOKEN` |
| `APP_PRIVATE_KEY` | The github application private key. Must be paired with `APP_ID` and should not be used with `ACCESS_TOKEN` or `RUNNER_TOKEN` |
| `APP_LOGIN` | The github application login id. Can be paired with `APP_ID` and `APP_PRIVATE_KEY` if default value extracted from `REPO_URL` or `ORG_NAME` is not correct. Note that no default is present when `RUNNER_SCOPE` is 'enterprise'. |
| `RUNNER_SCOPE` | The scope the runner will be registered on. Valid values are `repo`, `org` and `ent`. For 'org' and 'enterprise', `ACCESS_TOKEN` is required and `REPO_URL` is unnecessary. If 'org', requires `ORG_NAME`; if 'enterprise', requires `ENTERPRISE_NAME`. Default is 'repo'. |
| `ORG_NAME` | The organization name for the runner to register under. Requires `RUNNER_SCOPE` to be 'org'. No default value. |
| `ENTERPRISE_NAME` | The enterprise name for the runner to register under. Requires `RUNNER_SCOPE` to be 'enterprise'. No default value. |
+89
View File
@@ -0,0 +1,89 @@
#!/bin/bash
#
# Request an ACCESS_TOKEN to be used by a GitHub APP
# Environment variable that need to be set up:
# * APP_ID, the GitHub's app ID
# * APP_PRIVATE_KEY, the content of GitHub app's private key in PEM format.
# * APP_LOGIN, the login name used to install GitHub's app
#
# https://github.com/orgs/community/discussions/24743#discussioncomment-3245300
#
set -o pipefail
_GITHUB_HOST=${GITHUB_HOST:="github.com"}
# If URL is not github.com then use the enterprise api endpoint
if [[ ${GITHUB_HOST} = "github.com" ]]; then
URI="https://api.${_GITHUB_HOST}"
else
URI="https://${_GITHUB_HOST}/api/v3"
fi
API_VERSION=v3
API_HEADER="Accept: application/vnd.github.${API_VERSION}+json"
CONTENT_LENGTH_HEADER="Content-Length: 0"
APP_INSTALLATIONS_URI="${URI}/app/installations"
# JWT parameters based off
# https://docs.github.com/en/developers/apps/building-github-apps/authenticating-with-github-apps#authenticating-as-a-github-app
#
# JWT token issuance and expiration parameters
JWT_IAT_DRIFT=60
JWT_EXP_DELTA=600
JWT_JOSE_HEADER='{
"alg": "RS256",
"typ": "JWT"
}'
build_jwt_payload() {
now=$(date +%s)
iat=$((now - JWT_IAT_DRIFT))
jq -c \
--arg iat_str "${iat}" \
--arg exp_delta_str "${JWT_EXP_DELTA}" \
--arg app_id_str "${APP_ID}" \
'
($iat_str | tonumber) as $iat
| ($exp_delta_str | tonumber) as $exp_delta
| ($app_id_str | tonumber) as $app_id
| .iat = $iat
| .exp = ($iat + $exp_delta)
| .iss = $app_id
' <<< "{}" | tr -d '\n'
}
base64url() {
base64 | tr '+/' '-_' | tr -d '=\n'
}
rs256_sign() {
openssl dgst -binary -sha256 -sign <(echo "$1")
}
request_access_token() {
jwt_payload=$(build_jwt_payload)
encoded_jwt_parts=$(base64url <<<"${JWT_JOSE_HEADER}").$(base64url <<<"${jwt_payload}")
encoded_mac=$(echo -n "${encoded_jwt_parts}" | rs256_sign "${APP_PRIVATE_KEY}" | base64url)
generated_jwt="${encoded_jwt_parts}.${encoded_mac}"
auth_header="Authorization: Bearer ${generated_jwt}"
app_installations_response=$(curl -sX GET \
-H "${auth_header}" \
-H "${API_HEADER}" \
"${APP_INSTALLATIONS_URI}" \
)
access_token_url=$(echo "${app_installations_response}" | jq --raw-output '.[] | select (.account.login == "'"${APP_LOGIN}"'" and .app_id == '"${APP_ID}"') .access_tokens_url')
curl -sX POST \
-H "${CONTENT_LENGTH_HEADER}" \
-H "${auth_header}" \
-H "${API_HEADER}" \
"${access_token_url}" | \
jq --raw-output .token
}
request_access_token
+34 -12
View File
@@ -2,12 +2,14 @@
# shellcheck shell=bash
export RUNNER_ALLOW_RUNASROOT=1
export PATH=$PATH:/actions-runner
export PATH=${PATH}:/actions-runner
# Un-export these, so that they must be passed explicitly to the environment of
# any command that needs them. This may help prevent leaks.
export -n ACCESS_TOKEN
export -n RUNNER_TOKEN
export -n APP_ID
export -n APP_PRIVATE_KEY
deregister_runner() {
echo "Caught SIGTERM. Deregistering runner"
@@ -21,16 +23,15 @@ deregister_runner() {
_DISABLE_AUTOMATIC_DEREGISTRATION=${DISABLE_AUTOMATIC_DEREGISTRATION:-false}
_RUNNER_NAME=${RUNNER_NAME:-${RUNNER_NAME_PREFIX:-github-runner}-$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 13 ; echo '')}
_RUNNER_WORKDIR=${RUNNER_WORKDIR:-/_work}
_RUNNER_NAME=${RUNNER_NAME:-${RUNNER_NAME_PREFIX:-github-runner}-$(cat /etc/hostname)}
_RUNNER_WORKDIR=${RUNNER_WORKDIR:-/_work-${_RUNNER_NAME}}
_LABELS=${LABELS:-default}
_RUNNER_GROUP=${RUNNER_GROUP:-Default}
_GITHUB_HOST=${GITHUB_HOST:="github.com"}
_RUN_AS_ROOT=${RUN_AS_ROOT:="true"}
_EPHEMERAL=""
# ensure backwards compatibility
if [[ -z $RUNNER_SCOPE ]]; then
if [[ -z ${RUNNER_SCOPE} ]]; then
if [[ ${ORG_RUNNER} == "true" ]]; then
echo 'ORG_RUNNER is now deprecated. Please use RUNNER_SCOPE="org" instead.'
export RUNNER_SCOPE="org"
@@ -46,6 +47,9 @@ case ${RUNNER_SCOPE} in
[[ -z ${ORG_NAME} ]] && ( echo "ORG_NAME required for org runners"; exit 1 )
_SHORT_URL="https://${_GITHUB_HOST}/${ORG_NAME}"
RUNNER_SCOPE="org"
if [[ -n "${APP_ID}" ]] && [[ -z "${APP_LOGIN}" ]]; then
APP_LOGIN=${ORG_NAME}
fi
;;
ent*)
@@ -58,10 +62,29 @@ case ${RUNNER_SCOPE} in
[[ -z ${REPO_URL} ]] && ( echo "REPO_URL required for repo runners"; exit 1 )
_SHORT_URL=${REPO_URL}
RUNNER_SCOPE="repo"
if [[ -n "${APP_ID}" ]] && [[ -z "${APP_LOGIN}" ]]; then
APP_LOGIN=${REPO_URL%/*}
APP_LOGIN=${APP_LOGIN##*/}
fi
;;
esac
configure_runner() {
ARGS=()
if [[ -n "${APP_ID}" ]] && [[ -n "${APP_PRIVATE_KEY}" ]] && [[ -n "${APP_LOGIN}" ]]; then
if [[ -n "${ACCESS_TOKEN}" ]] || [[ -n "${RUNNER_TOKEN}" ]]; then
echo "ERROR: ACCESS_TOKEN or RUNNER_TOKEN provided but are mutually exclusive with APP_ID, APP_PRIVATE_KEY and APP_LOGIN." >&2
exit 1
fi
echo "Obtaining access token for app_id ${APP_ID} and login ${APP_LOGIN}"
nl="
"
ACCESS_TOKEN=$(APP_ID="${APP_ID}" APP_PRIVATE_KEY="${APP_PRIVATE_KEY//\\n/${nl}}" APP_LOGIN="${APP_LOGIN}" bash /app_token.sh)
elif [[ -n "${APP_ID}" ]] || [[ -n "${APP_PRIVATE_KEY}" ]] || [[ -n "${APP_LOGIN}" ]]; then
echo "ERROR: All of APP_ID, APP_PRIVATE_KEY and APP_LOGIN must be specified." >&2
exit 1
fi
if [[ -n "${ACCESS_TOKEN}" ]]; then
echo "Obtaining the token of the runner"
_TOKEN=$(ACCESS_TOKEN="${ACCESS_TOKEN}" bash /token.sh)
@@ -71,14 +94,12 @@ configure_runner() {
# shellcheck disable=SC2153
if [ -n "${EPHEMERAL}" ]; then
echo "Ephemeral option is enabled"
_EPHEMERAL="--ephemeral"
ARGS+=("--ephemeral")
fi
if [ -n "${DISABLE_AUTO_UPDATE}" ]; then
echo "Disable auto update option is enabled"
_AUTO_UPDATE="--disableupdate"
else
_AUTO_UPDATE=""
ARGS+=("--disableupdate")
fi
echo "Configuring"
@@ -91,8 +112,7 @@ configure_runner() {
--runnergroup "${_RUNNER_GROUP}" \
--unattended \
--replace \
"${_EPHEMERAL}" \
"${_AUTO_UPDATE}"
"${ARGS[@]}"
[[ ! -d "${_RUNNER_WORKDIR}" ]] && mkdir "${_RUNNER_WORKDIR}"
@@ -142,7 +162,9 @@ if [[ ${_RUN_AS_ROOT} == "true" ]]; then
else
if [[ $(id -u) -eq 0 ]]; then
[[ -n "${CONFIGURED_ACTIONS_RUNNER_FILES_DIR}" ]] && /usr/bin/chown -R runner "${CONFIGURED_ACTIONS_RUNNER_FILES_DIR}"
/usr/bin/chown -R runner "${_RUNNER_WORKDIR}" /opt/hostedtoolcache/ /actions-runner
/usr/bin/chown -R runner "${_RUNNER_WORKDIR}" /actions-runner
# The toolcache is not recursively chowned to avoid recursing over prepulated tooling in derived docker images
/usr/bin/chown runner /opt/hostedtoolcache/
/usr/sbin/gosu runner "$@"
else
"$@"