| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  | import AWSBuildPlatform from './aws-build-platform'; | 
					
						
							|  |  |  | import * as core from '@actions/core'; | 
					
						
							|  |  |  | import { BuildParameters } from '..'; | 
					
						
							| 
									
										
										
										
											2021-05-23 21:24:26 +00:00
										 |  |  | import RemoteBuilderNamespace from './remote-builder-namespace'; | 
					
						
							| 
									
										
										
										
											2021-06-06 19:59:34 +00:00
										 |  |  | import RemoteBuilderSecret from './remote-builder-secret'; | 
					
						
							| 
									
										
										
										
											2021-06-18 20:36:45 +00:00
										 |  |  | import { RemoteBuilderProviderInterface } from './remote-builder-provider-interface'; | 
					
						
							|  |  |  | import Kubernetes from './kubernetes-build-platform'; | 
					
						
							| 
									
										
										
										
											2021-06-19 04:27:24 +00:00
										 |  |  | const repositoryFolder = 'repo'; | 
					
						
							|  |  |  | const buildVolumeFolder = 'data'; | 
					
						
							|  |  |  | const cacheFolder = 'cache'; | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class RemoteBuilder { | 
					
						
							|  |  |  |   static SteamDeploy: boolean = false; | 
					
						
							| 
									
										
										
										
											2021-06-18 20:36:45 +00:00
										 |  |  |   static RemoteBuilderProviderPlatform: RemoteBuilderProviderInterface; | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |   static async build(buildParameters: BuildParameters, baseImage) { | 
					
						
							| 
									
										
										
										
											2021-06-19 22:15:44 +00:00
										 |  |  |     const runNumber = process.env.GITHUB_RUN_NUMBER; | 
					
						
							|  |  |  |     if (!runNumber || runNumber === '') { | 
					
						
							|  |  |  |       throw new Error('no run number found, exiting'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     const buildUid = RemoteBuilderNamespace.generateBuildName(runNumber, buildParameters.platform); | 
					
						
							|  |  |  |     const defaultBranchName = | 
					
						
							|  |  |  |       process.env.GITHUB_REF?.split('/') | 
					
						
							|  |  |  |         .filter((x) => { | 
					
						
							|  |  |  |           x = x[0].toUpperCase() + x.slice(1); | 
					
						
							|  |  |  |           return x; | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |         .join('') || ''; | 
					
						
							|  |  |  |     const branchName = | 
					
						
							|  |  |  |       process.env.REMOTE_BUILDER_CACHE !== undefined ? process.env.REMOTE_BUILDER_CACHE : defaultBranchName; | 
					
						
							|  |  |  |     this.SteamDeploy = process.env.STEAM_DEPLOY !== undefined || false; | 
					
						
							|  |  |  |     const token: string = buildParameters.githubToken; | 
					
						
							|  |  |  |     const defaultSecretsArray = [ | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         ParameterKey: 'GithubToken', | 
					
						
							|  |  |  |         EnvironmentVariable: 'GITHUB_TOKEN', | 
					
						
							|  |  |  |         ParameterValue: token, | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |     ]; | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |     try { | 
					
						
							| 
									
										
										
										
											2021-06-18 20:36:45 +00:00
										 |  |  |       switch (buildParameters.remoteBuildCluster) { | 
					
						
							|  |  |  |         case 'aws': | 
					
						
							| 
									
										
										
										
											2021-06-19 20:06:11 +00:00
										 |  |  |           core.info('Building with AWS'); | 
					
						
							| 
									
										
										
										
											2021-06-19 20:35:22 +00:00
										 |  |  |           this.RemoteBuilderProviderPlatform = new AWSBuildPlatform(buildParameters); | 
					
						
							| 
									
										
										
										
											2021-06-18 20:36:45 +00:00
										 |  |  |           break; | 
					
						
							|  |  |  |         default: | 
					
						
							| 
									
										
										
										
											2021-06-19 20:06:11 +00:00
										 |  |  |         case 'k8s': | 
					
						
							|  |  |  |           core.info('Building with Kubernetes'); | 
					
						
							| 
									
										
										
										
											2021-06-19 20:35:22 +00:00
										 |  |  |           this.RemoteBuilderProviderPlatform = new Kubernetes(buildParameters); | 
					
						
							| 
									
										
										
										
											2021-06-18 20:36:45 +00:00
										 |  |  |           break; | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2021-06-19 23:06:44 +00:00
										 |  |  |       await this.RemoteBuilderProviderPlatform.setupSharedBuildResources( | 
					
						
							| 
									
										
										
										
											2021-06-19 22:15:44 +00:00
										 |  |  |         buildUid, | 
					
						
							|  |  |  |         buildParameters, | 
					
						
							|  |  |  |         branchName, | 
					
						
							|  |  |  |         defaultSecretsArray, | 
					
						
							|  |  |  |       ); | 
					
						
							| 
									
										
										
										
											2021-06-26 03:18:14 +00:00
										 |  |  |       await RemoteBuilder.SetupStep(`setup${buildUid}`, buildParameters, branchName, defaultSecretsArray); | 
					
						
							|  |  |  |       await RemoteBuilder.BuildStep(`build${buildUid}`, buildParameters, baseImage, defaultSecretsArray); | 
					
						
							|  |  |  |       await RemoteBuilder.CompressionStep(`compress${buildUid}`, buildParameters, branchName, defaultSecretsArray); | 
					
						
							|  |  |  |       await RemoteBuilder.UploadArtifacts(`upload${buildUid}`, buildParameters, branchName, defaultSecretsArray); | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |       if (this.SteamDeploy) { | 
					
						
							|  |  |  |         await RemoteBuilder.DeployToSteam(buildUid, buildParameters, defaultSecretsArray); | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2021-06-19 23:06:44 +00:00
										 |  |  |       await this.RemoteBuilderProviderPlatform.cleanupSharedBuildResources( | 
					
						
							| 
									
										
										
										
											2021-06-19 22:15:44 +00:00
										 |  |  |         buildUid, | 
					
						
							|  |  |  |         buildParameters, | 
					
						
							|  |  |  |         branchName, | 
					
						
							|  |  |  |         defaultSecretsArray, | 
					
						
							|  |  |  |       ); | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |     } catch (error) { | 
					
						
							| 
									
										
										
										
											2021-06-19 23:06:44 +00:00
										 |  |  |       core.error(JSON.stringify(error, undefined, 4)); | 
					
						
							|  |  |  |       core.setFailed('Remote Builder failed'); | 
					
						
							|  |  |  |       await this.RemoteBuilderProviderPlatform.cleanupSharedBuildResources( | 
					
						
							| 
									
										
										
										
											2021-06-19 22:15:44 +00:00
										 |  |  |         buildUid, | 
					
						
							|  |  |  |         buildParameters, | 
					
						
							|  |  |  |         branchName, | 
					
						
							|  |  |  |         defaultSecretsArray, | 
					
						
							|  |  |  |       ); | 
					
						
							| 
									
										
										
										
											2021-06-26 03:26:38 +00:00
										 |  |  |       throw error; | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   private static async SetupStep( | 
					
						
							|  |  |  |     buildUid: string, | 
					
						
							|  |  |  |     buildParameters: BuildParameters, | 
					
						
							|  |  |  |     branchName: string | undefined, | 
					
						
							| 
									
										
										
										
											2021-06-06 19:59:34 +00:00
										 |  |  |     defaultSecretsArray: RemoteBuilderSecret[], | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |   ) { | 
					
						
							|  |  |  |     core.info('Starting step 1/4 clone and restore cache)'); | 
					
						
							| 
									
										
										
										
											2021-07-02 21:50:53 +00:00
										 |  |  |     const cacheFolderFull = `/${buildVolumeFolder}/${cacheFolder}`; | 
					
						
							| 
									
										
										
										
											2021-07-02 22:29:13 +00:00
										 |  |  |     const buildPathFull = `/${buildVolumeFolder}/${buildUid}`; | 
					
						
							|  |  |  |     const builderPathFull = `${buildPathFull}/builder`; | 
					
						
							|  |  |  |     const steamPathFull = `${buildPathFull}/steam`; | 
					
						
							|  |  |  |     const repoPathFull = `${buildPathFull}/${repositoryFolder}`; | 
					
						
							| 
									
										
										
										
											2021-07-01 21:59:18 +00:00
										 |  |  |     const projectPathFull = `${repoPathFull}/${buildParameters.projectPath}`; | 
					
						
							|  |  |  |     const libraryFolderFull = `${projectPathFull}/Library`; | 
					
						
							| 
									
										
										
										
											2021-06-19 04:49:32 +00:00
										 |  |  |     await this.RemoteBuilderProviderPlatform.runBuildTask( | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |       buildUid, | 
					
						
							|  |  |  |       'alpine/git', | 
					
						
							|  |  |  |       [ | 
					
						
							| 
									
										
										
										
											2021-07-02 23:02:23 +00:00
										 |  |  |         ` apk update
 | 
					
						
							|  |  |  |           apk add unzip | 
					
						
							|  |  |  |           apk add git-lfs | 
					
						
							|  |  |  |           apk add jq | 
					
						
							|  |  |  |           apk add jq | 
					
						
							|  |  |  |           apk add nodejs | 
					
						
							| 
									
										
										
										
											2021-07-02 22:29:13 +00:00
										 |  |  |           mkdir ${buildPathFull} | 
					
						
							| 
									
										
										
										
											2021-07-02 22:15:51 +00:00
										 |  |  |           mkdir ${builderPathFull} | 
					
						
							|  |  |  |           mkdir ${repoPathFull} | 
					
						
							|  |  |  |           mkdir ${steamPathFull} | 
					
						
							| 
									
										
										
										
											2021-07-02 22:39:32 +00:00
										 |  |  |           echo "Cloning utility repositories required for building:" | 
					
						
							| 
									
										
										
										
											2021-07-02 22:43:15 +00:00
										 |  |  |           git clone -q https://${buildParameters.githubToken}@github.com/game-ci/unity-builder.git ${builderPathFull}
 | 
					
						
							|  |  |  |           git clone -q https://${buildParameters.githubToken}@github.com/game-ci/steam-deploy.git ${steamPathFull}
 | 
					
						
							| 
									
										
										
										
											2021-07-02 22:15:51 +00:00
										 |  |  |           cd ${repoPathFull} | 
					
						
							|  |  |  |           # DISABLE LFS | 
					
						
							| 
									
										
										
										
											2021-07-01 21:59:18 +00:00
										 |  |  |           git config --global filter.lfs.smudge "git-lfs smudge --skip -- %f" | 
					
						
							|  |  |  |           git config --global filter.lfs.process "git-lfs filter-process --skip" | 
					
						
							| 
									
										
										
										
											2021-07-02 22:51:56 +00:00
										 |  |  |           echo '' | 
					
						
							| 
									
										
										
										
											2021-07-02 22:39:32 +00:00
										 |  |  |           echo "Cloning the repository being built:" | 
					
						
							| 
									
										
										
										
											2021-07-02 22:15:51 +00:00
										 |  |  |           git init | 
					
						
							|  |  |  |           git remote add origin https://${buildParameters.githubToken}@github.com/${process.env.GITHUB_REPOSITORY}.git
 | 
					
						
							|  |  |  |           git fetch origin | 
					
						
							| 
									
										
										
										
											2021-07-02 22:02:13 +00:00
										 |  |  |           git reset --hard $GITHUB_SHA | 
					
						
							| 
									
										
										
										
											2021-07-03 00:03:21 +00:00
										 |  |  |           git lfs ls-files --all | 
					
						
							| 
									
										
										
										
											2021-07-02 22:51:56 +00:00
										 |  |  |           echo '' | 
					
						
							| 
									
										
										
										
											2021-07-02 22:39:32 +00:00
										 |  |  |           echo "Combining LFS hash files into one hash, this is used as the cache key:" | 
					
						
							| 
									
										
										
										
											2021-07-02 22:45:12 +00:00
										 |  |  |           git lfs ls-files -l | cut -d' ' -f1 | sort > ${repoPathFull}/lfsSum.txt | 
					
						
							| 
									
										
										
										
											2021-07-02 22:39:32 +00:00
										 |  |  |           ls -a | 
					
						
							| 
									
										
										
										
											2021-07-02 22:45:12 +00:00
										 |  |  |           cat ${repoPathFull}/lfsSum.txt | 
					
						
							|  |  |  |           echo '^ checksum' | 
					
						
							| 
									
										
										
										
											2021-07-02 22:51:56 +00:00
										 |  |  |           echo '' | 
					
						
							| 
									
										
										
										
											2021-07-01 22:12:21 +00:00
										 |  |  |           # time to handle library cache | 
					
						
							| 
									
										
										
										
											2021-07-01 21:59:18 +00:00
										 |  |  |           if [ ! -d ${cacheFolderFull} ]; then | 
					
						
							|  |  |  |             mkdir ${cacheFolderFull} | 
					
						
							|  |  |  |             echo "creating new cache folder" | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |           fi | 
					
						
							| 
									
										
										
										
											2021-07-01 21:59:18 +00:00
										 |  |  |           if [ ! -d ${cacheFolderFull}/${branchName} ]; then | 
					
						
							|  |  |  |             mkdir ${cacheFolderFull}/${branchName} | 
					
						
							|  |  |  |             echo "creating new cache branch folder for: ${branchName}" | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |           fi | 
					
						
							| 
									
										
										
										
											2021-07-01 21:59:18 +00:00
										 |  |  |           echo "Library cache for branch: ${branchName}" | 
					
						
							|  |  |  |           ls ${cacheFolderFull}/${branchName} | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |           echo '' | 
					
						
							| 
									
										
										
										
											2021-07-01 21:59:18 +00:00
										 |  |  |           if [ -d ${libraryFolderFull} ]; then | 
					
						
							|  |  |  |             rm -r ${libraryFolderFull} | 
					
						
							| 
									
										
										
										
											2021-07-01 22:12:21 +00:00
										 |  |  |             echo "Git must ignore the Library folder" | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |           fi | 
					
						
							| 
									
										
										
										
											2021-07-01 22:12:21 +00:00
										 |  |  |           echo "Checking cache" | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |           # Restore cache | 
					
						
							|  |  |  |           latest=$(ls -t | head -1) | 
					
						
							|  |  |  |           if [ ! -z "$latest" ]; then | 
					
						
							|  |  |  |             echo "Library cache exists from build $latest from ${branchName}" | 
					
						
							|  |  |  |             echo 'Creating empty Library folder for cache' | 
					
						
							|  |  |  |             mkdir $libDir | 
					
						
							|  |  |  |             unzip -q $latest -d $libDir | 
					
						
							|  |  |  |             # purge cache | 
					
						
							|  |  |  |             ${process.env.PURGE_REMOTE_BUILDER_CACHE === undefined ? '#' : ''} rm -r $libDir | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             echo 'Cache does not exist' | 
					
						
							|  |  |  |           fi | 
					
						
							|  |  |  |           # Print out important directories | 
					
						
							|  |  |  |           echo '' | 
					
						
							|  |  |  |           echo 'Repo:' | 
					
						
							| 
									
										
										
										
											2021-06-19 04:27:24 +00:00
										 |  |  |           ls /${buildVolumeFolder}/${buildUid}/${repositoryFolder}/ | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |           echo '' | 
					
						
							|  |  |  |           echo 'Project:' | 
					
						
							| 
									
										
										
										
											2021-06-19 04:27:24 +00:00
										 |  |  |           ls /${buildVolumeFolder}/${buildUid}/${repositoryFolder}/${buildParameters.projectPath} | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |           echo '' | 
					
						
							|  |  |  |           echo 'Library:' | 
					
						
							| 
									
										
										
										
											2021-06-19 04:27:24 +00:00
										 |  |  |           ls /${buildVolumeFolder}/${buildUid}/${repositoryFolder}/${buildParameters.projectPath}/Library/ | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |           echo '' | 
					
						
							|  |  |  |       `,
 | 
					
						
							|  |  |  |       ], | 
					
						
							| 
									
										
										
										
											2021-06-19 04:27:24 +00:00
										 |  |  |       `/${buildVolumeFolder}`, | 
					
						
							|  |  |  |       `/${buildVolumeFolder}/`, | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |       [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           name: 'GITHUB_SHA', | 
					
						
							|  |  |  |           value: process.env.GITHUB_SHA || '', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       ], | 
					
						
							|  |  |  |       defaultSecretsArray, | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   private static async BuildStep( | 
					
						
							|  |  |  |     buildUid: string, | 
					
						
							|  |  |  |     buildParameters: BuildParameters, | 
					
						
							|  |  |  |     baseImage: any, | 
					
						
							| 
									
										
										
										
											2021-06-06 19:59:34 +00:00
										 |  |  |     defaultSecretsArray: RemoteBuilderSecret[], | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |   ) { | 
					
						
							|  |  |  |     const buildSecrets = new Array(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     buildSecrets.push(...defaultSecretsArray); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (process.env.UNITY_LICENSE) | 
					
						
							|  |  |  |       buildSecrets.push({ | 
					
						
							|  |  |  |         ParameterKey: 'UnityLicense', | 
					
						
							|  |  |  |         EnvironmentVariable: 'UNITY_LICENSE', | 
					
						
							|  |  |  |         ParameterValue: process.env.UNITY_LICENSE, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (process.env.UNITY_EMAIL) | 
					
						
							|  |  |  |       buildSecrets.push({ | 
					
						
							|  |  |  |         ParameterKey: 'UnityEmail', | 
					
						
							|  |  |  |         EnvironmentVariable: 'UNITY_EMAIL', | 
					
						
							|  |  |  |         ParameterValue: process.env.UNITY_EMAIL, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (process.env.UNITY_PASSWORD) | 
					
						
							|  |  |  |       buildSecrets.push({ | 
					
						
							|  |  |  |         ParameterKey: 'UnityPassword', | 
					
						
							|  |  |  |         EnvironmentVariable: 'UNITY_PASSWORD', | 
					
						
							|  |  |  |         ParameterValue: process.env.UNITY_PASSWORD, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (process.env.UNITY_SERIAL) | 
					
						
							|  |  |  |       buildSecrets.push({ | 
					
						
							|  |  |  |         ParameterKey: 'UnitySerial', | 
					
						
							|  |  |  |         EnvironmentVariable: 'UNITY_SERIAL', | 
					
						
							|  |  |  |         ParameterValue: process.env.UNITY_SERIAL, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (buildParameters.androidKeystoreBase64) | 
					
						
							|  |  |  |       buildSecrets.push({ | 
					
						
							|  |  |  |         ParameterKey: 'AndroidKeystoreBase64', | 
					
						
							|  |  |  |         EnvironmentVariable: 'ANDROID_KEYSTORE_BASE64', | 
					
						
							|  |  |  |         ParameterValue: buildParameters.androidKeystoreBase64, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (buildParameters.androidKeystorePass) | 
					
						
							|  |  |  |       buildSecrets.push({ | 
					
						
							|  |  |  |         ParameterKey: 'AndroidKeystorePass', | 
					
						
							|  |  |  |         EnvironmentVariable: 'ANDROID_KEYSTORE_PASS', | 
					
						
							|  |  |  |         ParameterValue: buildParameters.androidKeystorePass, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (buildParameters.androidKeyaliasPass) | 
					
						
							|  |  |  |       buildSecrets.push({ | 
					
						
							|  |  |  |         ParameterKey: 'AndroidKeyAliasPass', | 
					
						
							|  |  |  |         EnvironmentVariable: 'AWS_ACCESS_KEY_ALIAS_PASS', | 
					
						
							|  |  |  |         ParameterValue: buildParameters.androidKeyaliasPass, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     core.info('Starting part 2/4 (build unity project)'); | 
					
						
							| 
									
										
										
										
											2021-06-19 04:49:32 +00:00
										 |  |  |     await this.RemoteBuilderProviderPlatform.runBuildTask( | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |       buildUid, | 
					
						
							|  |  |  |       baseImage.toString(), | 
					
						
							|  |  |  |       [ | 
					
						
							|  |  |  |         `
 | 
					
						
							| 
									
										
										
										
											2021-06-19 04:27:24 +00:00
										 |  |  |             cp -r /${buildVolumeFolder}/${buildUid}/builder/dist/default-build-script/ /UnityBuilderAction; | 
					
						
							|  |  |  |             cp -r /${buildVolumeFolder}/${buildUid}/builder/dist/entrypoint.sh /entrypoint.sh; | 
					
						
							|  |  |  |             cp -r /${buildVolumeFolder}/${buildUid}/builder/dist/steps/ /steps; | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |             chmod -R +x /entrypoint.sh; | 
					
						
							|  |  |  |             chmod -R +x /steps; | 
					
						
							|  |  |  |             /entrypoint.sh; | 
					
						
							|  |  |  |           `,
 | 
					
						
							|  |  |  |       ], | 
					
						
							| 
									
										
										
										
											2021-06-19 04:27:24 +00:00
										 |  |  |       `/${buildVolumeFolder}`, | 
					
						
							|  |  |  |       `/${buildVolumeFolder}/${buildUid}/${repositoryFolder}/`, | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |       [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           name: 'ContainerMemory', | 
					
						
							|  |  |  |           value: buildParameters.remoteBuildMemory, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           name: 'ContainerCpu', | 
					
						
							|  |  |  |           value: buildParameters.remoteBuildCpu, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           name: 'GITHUB_WORKSPACE', | 
					
						
							| 
									
										
										
										
											2021-06-19 04:27:24 +00:00
										 |  |  |           value: `/${buildVolumeFolder}/${buildUid}/${repositoryFolder}/`, | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           name: 'PROJECT_PATH', | 
					
						
							|  |  |  |           value: buildParameters.projectPath, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           name: 'BUILD_PATH', | 
					
						
							|  |  |  |           value: buildParameters.buildPath, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           name: 'BUILD_FILE', | 
					
						
							|  |  |  |           value: buildParameters.buildFile, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           name: 'BUILD_NAME', | 
					
						
							|  |  |  |           value: buildParameters.buildName, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           name: 'BUILD_METHOD', | 
					
						
							|  |  |  |           value: buildParameters.buildMethod, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           name: 'CUSTOM_PARAMETERS', | 
					
						
							|  |  |  |           value: buildParameters.customParameters, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           name: 'BUILD_TARGET', | 
					
						
							|  |  |  |           value: buildParameters.platform, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           name: 'ANDROID_VERSION_CODE', | 
					
						
							|  |  |  |           value: buildParameters.androidVersionCode.toString(), | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           name: 'ANDROID_KEYSTORE_NAME', | 
					
						
							|  |  |  |           value: buildParameters.androidKeystoreName, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           name: 'ANDROID_KEYALIAS_NAME', | 
					
						
							|  |  |  |           value: buildParameters.androidKeyaliasName, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       ], | 
					
						
							|  |  |  |       buildSecrets, | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   private static async CompressionStep( | 
					
						
							|  |  |  |     buildUid: string, | 
					
						
							|  |  |  |     buildParameters: BuildParameters, | 
					
						
							|  |  |  |     branchName: string | undefined, | 
					
						
							| 
									
										
										
										
											2021-06-06 19:59:34 +00:00
										 |  |  |     defaultSecretsArray: RemoteBuilderSecret[], | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |   ) { | 
					
						
							|  |  |  |     core.info('Starting step 3/4 build compression'); | 
					
						
							|  |  |  |     // Cleanup
 | 
					
						
							| 
									
										
										
										
											2021-06-19 04:49:32 +00:00
										 |  |  |     await this.RemoteBuilderProviderPlatform.runBuildTask( | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |       buildUid, | 
					
						
							|  |  |  |       'alpine', | 
					
						
							|  |  |  |       [ | 
					
						
							|  |  |  |         `
 | 
					
						
							|  |  |  |             apk update | 
					
						
							|  |  |  |             apk add zip | 
					
						
							|  |  |  |             cd Library | 
					
						
							|  |  |  |             zip -r lib-${buildUid}.zip .* | 
					
						
							| 
									
										
										
										
											2021-06-19 04:27:24 +00:00
										 |  |  |             mv lib-${buildUid}.zip /${buildVolumeFolder}/${cacheFolder}/${branchName}/lib-${buildUid}.zip | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |             cd ../../ | 
					
						
							| 
									
										
										
										
											2021-05-23 13:03:29 +00:00
										 |  |  |             ls | 
					
						
							|  |  |  |             echo ' ' | 
					
						
							|  |  |  |             ls ${buildParameters.buildPath} | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |             zip -r build-${buildUid}.zip ${buildParameters.buildPath}/* | 
					
						
							| 
									
										
										
										
											2021-06-19 04:27:24 +00:00
										 |  |  |             mv build-${buildUid}.zip /${buildVolumeFolder}/${buildUid}/build-${buildUid}.zip | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |           `,
 | 
					
						
							|  |  |  |       ], | 
					
						
							| 
									
										
										
										
											2021-06-19 04:27:24 +00:00
										 |  |  |       `/${buildVolumeFolder}`, | 
					
						
							|  |  |  |       `/${buildVolumeFolder}/${buildUid}/${repositoryFolder}/${buildParameters.projectPath}`, | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |       [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           name: 'GITHUB_SHA', | 
					
						
							|  |  |  |           value: process.env.GITHUB_SHA || '', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       ], | 
					
						
							|  |  |  |       defaultSecretsArray, | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |     core.info('compression step complete'); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   private static async UploadArtifacts( | 
					
						
							|  |  |  |     buildUid: string, | 
					
						
							|  |  |  |     buildParameters: BuildParameters, | 
					
						
							|  |  |  |     branchName: string | undefined, | 
					
						
							| 
									
										
										
										
											2021-06-06 19:59:34 +00:00
										 |  |  |     defaultSecretsArray: RemoteBuilderSecret[], | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |   ) { | 
					
						
							|  |  |  |     core.info('Starting step 4/4 upload build to s3'); | 
					
						
							| 
									
										
										
										
											2021-06-19 04:49:32 +00:00
										 |  |  |     await this.RemoteBuilderProviderPlatform.runBuildTask( | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |       buildUid, | 
					
						
							|  |  |  |       'amazon/aws-cli', | 
					
						
							|  |  |  |       [ | 
					
						
							|  |  |  |         `
 | 
					
						
							|  |  |  |             aws s3 cp ${buildUid}/build-${buildUid}.zip s3://game-ci-storage/
 | 
					
						
							|  |  |  |             # no need to upload Library cache for now | 
					
						
							| 
									
										
										
										
											2021-06-19 04:27:24 +00:00
										 |  |  |             # aws s3 cp /${buildVolumeFolder}/${cacheFolder}/${branchName}/lib-${buildUid}.zip s3://game-ci-storage/
 | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |             ${this.SteamDeploy ? '#' : ''} rm -r ${buildUid} | 
					
						
							|  |  |  |           `,
 | 
					
						
							|  |  |  |       ], | 
					
						
							| 
									
										
										
										
											2021-06-19 04:27:24 +00:00
										 |  |  |       `/${buildVolumeFolder}`, | 
					
						
							|  |  |  |       `/${buildVolumeFolder}/`, | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |       [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           name: 'GITHUB_SHA', | 
					
						
							|  |  |  |           value: process.env.GITHUB_SHA || '', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           name: 'AWS_DEFAULT_REGION', | 
					
						
							|  |  |  |           value: process.env.AWS_DEFAULT_REGION || '', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       ], | 
					
						
							|  |  |  |       [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           ParameterKey: 'AWSAccessKeyID', | 
					
						
							|  |  |  |           EnvironmentVariable: 'AWS_ACCESS_KEY_ID', | 
					
						
							|  |  |  |           ParameterValue: process.env.AWS_ACCESS_KEY_ID || '', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           ParameterKey: 'AWSSecretAccessKey', | 
					
						
							|  |  |  |           EnvironmentVariable: 'AWS_SECRET_ACCESS_KEY', | 
					
						
							|  |  |  |           ParameterValue: process.env.AWS_SECRET_ACCESS_KEY || '', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         ...defaultSecretsArray, | 
					
						
							|  |  |  |       ], | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   private static async DeployToSteam( | 
					
						
							|  |  |  |     buildUid: string, | 
					
						
							|  |  |  |     buildParameters: BuildParameters, | 
					
						
							| 
									
										
										
										
											2021-06-06 19:59:34 +00:00
										 |  |  |     defaultSecretsArray: RemoteBuilderSecret[], | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |   ) { | 
					
						
							|  |  |  |     core.info('Starting steam deployment'); | 
					
						
							| 
									
										
										
										
											2021-06-19 04:49:32 +00:00
										 |  |  |     await this.RemoteBuilderProviderPlatform.runBuildTask( | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |       buildUid, | 
					
						
							|  |  |  |       'cm2network/steamcmd:root', | 
					
						
							|  |  |  |       [ | 
					
						
							|  |  |  |         `
 | 
					
						
							|  |  |  |             ls | 
					
						
							|  |  |  |             ls / | 
					
						
							| 
									
										
										
										
											2021-06-19 04:27:24 +00:00
										 |  |  |             cp -r /${buildVolumeFolder}/${buildUid}/steam/action/entrypoint.sh /entrypoint.sh; | 
					
						
							|  |  |  |             cp -r /${buildVolumeFolder}/${buildUid}/steam/action/steps/ /steps; | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |             chmod -R +x /entrypoint.sh; | 
					
						
							|  |  |  |             chmod -R +x /steps; | 
					
						
							|  |  |  |             /entrypoint.sh; | 
					
						
							| 
									
										
										
										
											2021-06-19 04:27:24 +00:00
										 |  |  |             rm -r /${buildVolumeFolder}/${buildUid} | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |           `,
 | 
					
						
							|  |  |  |       ], | 
					
						
							| 
									
										
										
										
											2021-06-19 04:27:24 +00:00
										 |  |  |       `/${buildVolumeFolder}`, | 
					
						
							|  |  |  |       `/${buildVolumeFolder}/${buildUid}/steam/action/`, | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |       [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           name: 'GITHUB_SHA', | 
					
						
							|  |  |  |           value: process.env.GITHUB_SHA || '', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       ], | 
					
						
							|  |  |  |       [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           EnvironmentVariable: 'INPUT_APPID', | 
					
						
							|  |  |  |           ParameterKey: 'appId', | 
					
						
							|  |  |  |           ParameterValue: process.env.APP_ID || '', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           EnvironmentVariable: 'INPUT_BUILDDESCRIPTION', | 
					
						
							|  |  |  |           ParameterKey: 'buildDescription', | 
					
						
							|  |  |  |           ParameterValue: process.env.BUILD_DESCRIPTION || '', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           EnvironmentVariable: 'INPUT_ROOTPATH', | 
					
						
							|  |  |  |           ParameterKey: 'rootPath', | 
					
						
							| 
									
										
										
										
											2021-05-23 13:07:07 +00:00
										 |  |  |           ParameterValue: buildParameters.buildPath, | 
					
						
							| 
									
										
										
										
											2021-05-23 04:08:40 +00:00
										 |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           EnvironmentVariable: 'INPUT_RELEASEBRANCH', | 
					
						
							|  |  |  |           ParameterKey: 'releaseBranch', | 
					
						
							|  |  |  |           ParameterValue: process.env.RELEASE_BRANCH || '', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           EnvironmentVariable: 'INPUT_LOCALCONTENTSERVER', | 
					
						
							|  |  |  |           ParameterKey: 'localContentServer', | 
					
						
							|  |  |  |           ParameterValue: process.env.LOCAL_CONTENT_SERVER || '', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           EnvironmentVariable: 'INPUT_PREVIEWENABLED', | 
					
						
							|  |  |  |           ParameterKey: 'previewEnabled', | 
					
						
							|  |  |  |           ParameterValue: process.env.PREVIEW_ENABLED || '', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         ...defaultSecretsArray, | 
					
						
							|  |  |  |       ], | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | export default RemoteBuilder; |