in src/aws.js [15:78]
function buildUserDataScript(githubRegistrationToken, label) {
let scriptContent;
const cmd = `./config.sh --url https://github.com/${config.githubContext.owner}/${config.githubContext.repo} --token ${githubRegistrationToken} --labels ${label} --unattended ${config.input.disableEphemeralRunner ? '' : '--ephemeral'}`;
if (config.input.runnerHomeDir) {
// If runner home directory is specified, we expect the actions-runner software (and dependencies)
// to be pre-installed in the AMI, so we simply cd into that directory and then start the runner
scriptContent = [
'#!/bin/bash',
'exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1',
`cd "${config.input.runnerHomeDir}"`,
`echo "${config.input.preRunnerScript}" > pre-runner-script.sh`,
'source pre-runner-script.sh',
'export RUNNER_ALLOW_RUNASROOT=1',
cmd
];
} else {
scriptContent = [
'#!/bin/bash',
'exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1',
'mkdir actions-runner && cd actions-runner',
`echo "${config.input.preRunnerScript}" > pre-runner-script.sh`,
'source pre-runner-script.sh',
'case $(uname -m) in aarch64) ARCH="arm64" ;; amd64|x86_64) ARCH="x64" ;; esac && export RUNNER_ARCH=${ARCH}',
`RUNNER_VERSION=$(curl -s "https://api.github.com/repos/actions/runner/releases/latest" | grep -o '"tag_name"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*"tag_name"[[:space:]]*:[[:space:]]*"\\([^"]*\\)".*/\\1/' | tr -d "v")`,
'curl -O -L https://github.com/actions/runner/releases/download/v${RUNNER_VERSION}/actions-runner-linux-${RUNNER_ARCH}-${RUNNER_VERSION}.tar.gz',
'tar xzf ./actions-runner-linux-${RUNNER_ARCH}-${RUNNER_VERSION}.tar.gz',
'export RUNNER_ALLOW_RUNASROOT=1',
cmd
];
}
if (config.input.runAsUser) {
scriptContent.push(`chown -R ${config.input.runAsUser} .`);
}
if (config.input.runAsService) {
scriptContent.push(`./svc.sh install ${config.input.runAsUser || ''}`);
scriptContent.push('./svc.sh start');
} else {
scriptContent.push(`${config.input.runAsUser ? `su ${config.input.runAsUser} -c` : ''} ./run.sh`);
}
// Create MIME multipart format
const boundary = '//';
const mimeData = [
'Content-Type: multipart/mixed; boundary="' + boundary + '"',
'MIME-Version: 1.0',
'',
'--' + boundary,
'Content-Type: text/x-shellscript; charset="us-ascii"',
'MIME-Version: 1.0',
'Content-Transfer-Encoding: 7bit',
'Content-Disposition: attachment; filename="userdata.txt"',
'',
scriptContent.join('\n'),
'',
'--' + boundary + '--',
''
];
return mimeData.join('\n');
}