Add skipActivation functionality

This commit is contained in:
Andrew Kahr 2024-02-17 19:26:59 -08:00
parent 082ea39498
commit 090b4d1e82
10 changed files with 80 additions and 54 deletions

View File

@ -253,6 +253,10 @@ inputs:
description: description:
'The path to mount the workspace inside the docker container. For windows, leave out the drive letter. For example 'The path to mount the workspace inside the docker container. For windows, leave out the drive letter. For example
c:/github/workspace should be defined as /github/workspace' c:/github/workspace should be defined as /github/workspace'
skipActivation:
default: 'false'
required: false
description: 'Skip the activation/deactivation of Unity. This assumes Unity is already activated.'
outputs: outputs:
volume: volume:

BIN
dist/index.js generated vendored

Binary file not shown.

BIN
dist/index.js.map generated vendored

Binary file not shown.

BIN
dist/licenses.txt generated vendored

Binary file not shown.

View File

@ -1,32 +1,40 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# #
# Create directories for license activation # Perform Activation
# #
UNITY_LICENSE_PATH="/Library/Application Support/Unity" if [ "$SKIP_ACTIVATION" != "true" ]; then
UNITY_LICENSE_PATH="/Library/Application Support/Unity"
if [ ! -d "$UNITY_LICENSE_PATH" ]; then if [ ! -d "$UNITY_LICENSE_PATH" ]; then
echo "Creating Unity License Directory" echo "Creating Unity License Directory"
sudo mkdir -p "$UNITY_LICENSE_PATH" sudo mkdir -p "$UNITY_LICENSE_PATH"
sudo chmod -R 777 "$UNITY_LICENSE_PATH" sudo chmod -R 777 "$UNITY_LICENSE_PATH"
fi; fi;
ACTIVATE_LICENSE_PATH="$ACTION_FOLDER/BlankProject" ACTIVATE_LICENSE_PATH="$ACTION_FOLDER/BlankProject"
mkdir -p "$ACTIVATE_LICENSE_PATH" mkdir -p "$ACTIVATE_LICENSE_PATH"
source $ACTION_FOLDER/platforms/mac/steps/activate.sh
else
echo "Skipping activation"
fi
# #
# Run steps # Run Build
# #
source $ACTION_FOLDER/platforms/mac/steps/activate.sh
source $ACTION_FOLDER/platforms/mac/steps/build.sh source $ACTION_FOLDER/platforms/mac/steps/build.sh
source $ACTION_FOLDER/platforms/mac/steps/return_license.sh
# #
# Remove license activation directory # License Cleanup
# #
rm -r "$ACTIVATE_LICENSE_PATH" if [ "$SKIP_ACTIVATION" != "true" ]; then
source $ACTION_FOLDER/platforms/mac/steps/return_license.sh
rm -r "$ACTIVATE_LICENSE_PATH"
fi
# #
# Instructions for debugging # Instructions for debugging

View File

@ -5,15 +5,23 @@
# #
source /steps/set_extra_git_configs.sh source /steps/set_extra_git_configs.sh
source /steps/set_gitcredential.sh source /steps/set_gitcredential.sh
source /steps/activate.sh
# If we didn't activate successfully, exit with the exit code from the activation step. if [ "$SKIP_ACTIVATION" != "true" ]; then
if [[ $UNITY_EXIT_CODE -ne 0 ]]; then source /steps/activate.sh
# If we didn't activate successfully, exit with the exit code from the activation step.
if [[ $UNITY_EXIT_CODE -ne 0 ]]; then
exit $UNITY_EXIT_CODE exit $UNITY_EXIT_CODE
fi
else
echo "Skipping activation"
fi fi
source /steps/build.sh source /steps/build.sh
source /steps/return_license.sh
if [ "$SKIP_ACTIVATION" != "true" ]; then
source /steps/return_license.sh
fi
# #
# Instructions for debugging # Instructions for debugging

View File

@ -2,7 +2,7 @@ Get-Process
# Import any necessary registry keys, ie: location of windows 10 sdk # Import any necessary registry keys, ie: location of windows 10 sdk
# No guarantee that there will be any necessary registry keys, ie: tvOS # No guarantee that there will be any necessary registry keys, ie: tvOS
Get-ChildItem -Path c:\regkeys -File | ForEach-Object {reg import $_.fullname} Get-ChildItem -Path c:\regkeys -File | ForEach-Object { reg import $_.fullname }
# Register the Visual Studio installation so Unity can find it # Register the Visual Studio installation so Unity can find it
regsvr32 C:\ProgramData\Microsoft\VisualStudio\Setup\x64\Microsoft.VisualStudio.Setup.Configuration.Native.dll regsvr32 C:\ProgramData\Microsoft\VisualStudio\Setup\x64\Microsoft.VisualStudio.Setup.Configuration.Native.dll
@ -14,18 +14,25 @@ Get-Process -Name regsvr32 | ForEach-Object { Stop-Process -Id $_.Id -Force }
. "c:\steps\set_gitcredential.ps1" . "c:\steps\set_gitcredential.ps1"
# Activate Unity # Activate Unity
. "c:\steps\activate.ps1" if ($env:SKIP_ACTIVATION -ne "true") {
. "c:\steps\activate.ps1"
# If we didn't activate successfully, exit with the exit code from the activation step. # If we didn't activate successfully, exit with the exit code from the activation step.
if ($ACTIVATION_EXIT_CODE -ne 0) { if ($ACTIVATION_EXIT_CODE -ne 0) {
exit $ACTIVATION_EXIT_CODE exit $ACTIVATION_EXIT_CODE
}
}
else {
Write-Host "Skipping activation"
} }
# Build the project # Build the project
. "c:\steps\build.ps1" . "c:\steps\build.ps1"
# Free the seat for the activated license # Free the seat for the activated license
. "c:\steps\return_license.ps1" if ($env:SKIP_ACTIVATION -ne "true") {
. "c:\steps\return_license.ps1"
}
Get-Process Get-Process

View File

@ -22,6 +22,7 @@ class BuildParameters {
public customImage!: string; public customImage!: string;
public unitySerial!: string; public unitySerial!: string;
public unityLicensingServer!: string; public unityLicensingServer!: string;
public skipActivation!: string;
public runnerTempPath!: string; public runnerTempPath!: string;
public targetPlatform!: string; public targetPlatform!: string;
public projectPath!: string; public projectPath!: string;
@ -59,7 +60,7 @@ class BuildParameters {
public kubeVolumeSize!: string; public kubeVolumeSize!: string;
public kubeVolume!: string; public kubeVolume!: string;
public kubeStorageClass!: string; public kubeStorageClass!: string;
public runAsHostUser!: String; public runAsHostUser!: string;
public chownFilesTo!: string; public chownFilesTo!: string;
public commandHooks!: string; public commandHooks!: string;
public pullInputList!: string[]; public pullInputList!: string[];
@ -146,6 +147,7 @@ class BuildParameters {
customImage: Input.customImage, customImage: Input.customImage,
unitySerial, unitySerial,
unityLicensingServer: Input.unityLicensingServer, unityLicensingServer: Input.unityLicensingServer,
skipActivation: Input.skipActivation,
runnerTempPath: Input.runnerTempPath, runnerTempPath: Input.runnerTempPath,
targetPlatform: Input.targetPlatform, targetPlatform: Input.targetPlatform,
projectPath: Input.projectPath, projectPath: Input.projectPath,
@ -168,7 +170,7 @@ class BuildParameters {
customParameters: Input.customParameters, customParameters: Input.customParameters,
sshAgent: Input.sshAgent, sshAgent: Input.sshAgent,
sshPublicKeysDirectoryPath: Input.sshPublicKeysDirectoryPath, sshPublicKeysDirectoryPath: Input.sshPublicKeysDirectoryPath,
gitPrivateToken: Input.gitPrivateToken || (await GithubCliReader.GetGitHubAuthToken()), gitPrivateToken: Input.gitPrivateToken ?? (await GithubCliReader.GetGitHubAuthToken()),
runAsHostUser: Input.runAsHostUser, runAsHostUser: Input.runAsHostUser,
chownFilesTo: Input.chownFilesTo, chownFilesTo: Input.chownFilesTo,
dockerCpuLimit: Input.dockerCpuLimit, dockerCpuLimit: Input.dockerCpuLimit,
@ -187,10 +189,10 @@ class BuildParameters {
preBuildContainerHooks: CloudRunnerOptions.preBuildContainerHooks, preBuildContainerHooks: CloudRunnerOptions.preBuildContainerHooks,
customJob: CloudRunnerOptions.customJob, customJob: CloudRunnerOptions.customJob,
runNumber: Input.runNumber, runNumber: Input.runNumber,
branch: Input.branch.replace('/head', '') || (await GitRepoReader.GetBranch()), branch: Input.branch.replaceAll('/head', '') || (await GitRepoReader.GetBranch()),
cloudRunnerBranch: CloudRunnerOptions.cloudRunnerBranch.split('/').reverse()[0], cloudRunnerBranch: CloudRunnerOptions.cloudRunnerBranch.split('/').reverse()[0],
cloudRunnerDebug: CloudRunnerOptions.cloudRunnerDebug, cloudRunnerDebug: CloudRunnerOptions.cloudRunnerDebug,
githubRepo: Input.githubRepo || (await GitRepoReader.GetRemote()) || 'game-ci/unity-builder', githubRepo: (Input.githubRepo ?? (await GitRepoReader.GetRemote())) || 'game-ci/unity-builder',
isCliMode: Cli.isCliMode, isCliMode: Cli.isCliMode,
awsStackName: CloudRunnerOptions.awsStackName, awsStackName: CloudRunnerOptions.awsStackName,
gitSha: Input.gitSha, gitSha: Input.gitSha,

View File

@ -29,6 +29,7 @@ class ImageEnvironmentFactory {
name: 'UNITY_LICENSING_SERVER', name: 'UNITY_LICENSING_SERVER',
value: parameters.unityLicensingServer, value: parameters.unityLicensingServer,
}, },
{ name: 'SKIP_ACTIVATION', value: parameters.skipActivation },
{ name: 'UNITY_VERSION', value: parameters.editorVersion }, { name: 'UNITY_VERSION', value: parameters.editorVersion },
{ {
name: 'USYM_UPLOAD_AUTH_TOKEN', name: 'USYM_UPLOAD_AUTH_TOKEN',
@ -81,20 +82,12 @@ class ImageEnvironmentFactory {
]; ];
if (parameters.providerStrategy === 'local-docker') { if (parameters.providerStrategy === 'local-docker') {
for (const element of additionalVariables) { for (const element of additionalVariables) {
if ( if (environmentVariables.some((x) => element?.name === x?.name) === undefined) {
environmentVariables.find(
(x) => element !== undefined && element.name !== undefined && x.name === element.name,
) === undefined
) {
environmentVariables.push(element); environmentVariables.push(element);
} }
} }
for (const variable of environmentVariables) { for (const variable of environmentVariables) {
if ( if (!environmentVariables.some((x) => variable?.name === x?.name)) {
environmentVariables.find(
(x) => variable !== undefined && variable.name !== undefined && x.name === variable.name,
) === undefined
) {
environmentVariables = environmentVariables.filter((x) => x !== variable); environmentVariables = environmentVariables.filter((x) => x !== variable);
} }
} }

View File

@ -55,7 +55,7 @@ class Input {
static get branch(): string { static get branch(): string {
if (Input.getInput(`GITHUB_REF`)) { if (Input.getInput(`GITHUB_REF`)) {
return Input.getInput(`GITHUB_REF`)!.replace('refs/', '').replace(`head/`, '').replace(`heads/`, ''); return Input.getInput(`GITHUB_REF`)!.replaceAll('refs/', '').replaceAll(`head/`, '').replaceAll(`heads/`, '');
} else if (Input.getInput('branch')) { } else if (Input.getInput('branch')) {
return Input.getInput('branch')!; return Input.getInput('branch')!;
} else { } else {
@ -104,7 +104,7 @@ class Input {
rawProjectPath = '.'; rawProjectPath = '.';
} }
return rawProjectPath.replace(/\/$/, ''); return rawProjectPath.replaceAll(/\/$/, '');
} }
static get runnerTempPath(): string { static get runnerTempPath(): string {
@ -186,7 +186,7 @@ class Input {
} }
static get sshPublicKeysDirectoryPath(): string { static get sshPublicKeysDirectoryPath(): string {
return Input.getInput('sshPublicKeysDirectoryPath') || ''; return Input.getInput('sshPublicKeysDirectoryPath') ?? '';
} }
static get gitPrivateToken(): string | undefined { static get gitPrivateToken(): string | undefined {
@ -194,27 +194,27 @@ class Input {
} }
static get runAsHostUser(): string { static get runAsHostUser(): string {
return Input.getInput('runAsHostUser') || 'false'; return Input.getInput('runAsHostUser')?.toLowerCase() ?? 'false';
} }
static get chownFilesTo() { static get chownFilesTo() {
return Input.getInput('chownFilesTo') || ''; return Input.getInput('chownFilesTo') ?? '';
} }
static get allowDirtyBuild(): boolean { static get allowDirtyBuild(): boolean {
const input = Input.getInput('allowDirtyBuild') || false; const input = Input.getInput('allowDirtyBuild') ?? false;
return input === 'true'; return input === 'true';
} }
static get cacheUnityInstallationOnMac(): boolean { static get cacheUnityInstallationOnMac(): boolean {
const input = Input.getInput('cacheUnityInstallationOnMac') || false; const input = Input.getInput('cacheUnityInstallationOnMac') ?? false;
return input === 'true'; return input === 'true';
} }
static get unityHubVersionOnMac(): string { static get unityHubVersionOnMac(): string {
const input = Input.getInput('unityHubVersionOnMac') || ''; const input = Input.getInput('unityHubVersionOnMac') ?? '';
return input !== '' ? input : ''; return input !== '' ? input : '';
} }
@ -228,11 +228,11 @@ class Input {
} }
static get dockerWorkspacePath(): string { static get dockerWorkspacePath(): string {
return Input.getInput('dockerWorkspacePath') || '/github/workspace'; return Input.getInput('dockerWorkspacePath') ?? '/github/workspace';
} }
static get dockerCpuLimit(): string { static get dockerCpuLimit(): string {
return Input.getInput('dockerCpuLimit') || os.cpus().length.toString(); return Input.getInput('dockerCpuLimit') ?? os.cpus().length.toString();
} }
static get dockerMemoryLimit(): string { static get dockerMemoryLimit(): string {
@ -252,20 +252,24 @@ class Input {
} }
return ( return (
Input.getInput('dockerMemoryLimit') || `${Math.floor((os.totalmem() / bytesInMegabyte) * memoryMultiplier)}m` Input.getInput('dockerMemoryLimit') ?? `${Math.floor((os.totalmem() / bytesInMegabyte) * memoryMultiplier)}m`
); );
} }
static get dockerIsolationMode(): string { static get dockerIsolationMode(): string {
return Input.getInput('dockerIsolationMode') || 'default'; return Input.getInput('dockerIsolationMode') ?? 'default';
} }
static get containerRegistryRepository(): string { static get containerRegistryRepository(): string {
return Input.getInput('containerRegistryRepository') || 'unityci/editor'; return Input.getInput('containerRegistryRepository') ?? 'unityci/editor';
} }
static get containerRegistryImageVersion(): string { static get containerRegistryImageVersion(): string {
return Input.getInput('containerRegistryImageVersion') || '3'; return Input.getInput('containerRegistryImageVersion') ?? '3';
}
static get skipActivation(): string {
return Input.getInput('skipActivation')?.toLowerCase() ?? 'false';
} }
public static ToEnvVarFormat(input: string) { public static ToEnvVarFormat(input: string) {
@ -274,10 +278,10 @@ class Input {
} }
return input return input
.replace(/([A-Z])/g, ' $1') .replaceAll(/([A-Z])/g, ' $1')
.trim() .trim()
.toUpperCase() .toUpperCase()
.replace(/ /g, '_'); .replaceAll(' ', '_');
} }
} }