require('./sourcemap-register.js');/******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ 94822: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); const core = __importStar(__nccwpck_require__(42186)); const model_1 = __nccwpck_require__(41359); const cli_1 = __nccwpck_require__(55651); const mac_builder_1 = __importDefault(__nccwpck_require__(39364)); const platform_setup_1 = __importDefault(__nccwpck_require__(64423)); const orchestrator_plugin_1 = __nccwpck_require__(2075); async function runMain() { try { if (cli_1.Cli.InitCliMode()) { await cli_1.Cli.RunCli(); return; } model_1.Action.checkCompatibility(); model_1.Cache.verify(); const { workspace, actionFolder } = model_1.Action; const buildParameters = await model_1.BuildParameters.create(); const baseImage = new model_1.ImageTag(buildParameters); // Load orchestrator plugin (optional — only needed for remote builds and plugin features) const plugin = await (0, orchestrator_plugin_1.loadOrchestratorPlugin)(); await plugin?.initialize(buildParameters, workspace); let exitCode = -1; if (plugin?.canHandleBuild()) { // Plugin handles the build entirely (remote providers, hot runner, test workflows) const result = await plugin.handleBuild(baseImage.toString()); exitCode = result.fallbackToLocal ? await runLocalBuild(buildParameters, baseImage, workspace, actionFolder, plugin) : result.exitCode; } else if (buildParameters.providerStrategy === 'local') { exitCode = await runLocalBuild(buildParameters, baseImage, workspace, actionFolder, plugin); } else { throw new Error(`Provider strategy "${buildParameters.providerStrategy}" requires @game-ci/orchestrator. ` + 'Install it via the game-ci/orchestrator action, or use providerStrategy=local.'); } // Set core outputs await model_1.Output.setBuildVersion(buildParameters.buildVersion); await model_1.Output.setAndroidVersionCode(buildParameters.androidVersionCode); await model_1.Output.setEngineExitCode(exitCode); // Plugin handles post-build (artifacts, archiving, retention) await plugin?.handlePostBuild(exitCode); if (exitCode !== 0) { core.setFailed(`Build failed with exit code ${exitCode}`); } } catch (error) { core.setFailed(error.message); } } async function runLocalBuild(buildParameters, baseImage, workspace, actionFolder, plugin) { await plugin?.beforeLocalBuild(workspace); await platform_setup_1.default.setup(buildParameters, actionFolder); const exitCode = process.platform === 'darwin' ? await mac_builder_1.default.run(actionFolder) : await model_1.Docker.run(baseImage.toString(), { workspace, actionFolder, ...buildParameters, }); await plugin?.afterLocalBuild(workspace, exitCode); return exitCode; } runMain(); /***/ }), /***/ 89088: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); const node_path_1 = __importDefault(__nccwpck_require__(49411)); class Action { static get supportedPlatforms() { return ['linux', 'win32', 'darwin']; } static get isRunningLocally() { return process.env.RUNNER_WORKSPACE === undefined; } static get isRunningFromSource() { return node_path_1.default.basename(__dirname) === 'model'; } static get canonicalName() { if (Action.isRunningFromSource) { return node_path_1.default.basename(node_path_1.default.dirname(node_path_1.default.join(node_path_1.default.dirname(__filename), '/..'))); } return 'unity-builder'; } static get rootFolder() { if (Action.isRunningFromSource) { return node_path_1.default.dirname(node_path_1.default.dirname(node_path_1.default.dirname(__filename))); } return node_path_1.default.dirname(node_path_1.default.dirname(__filename)); } static get actionFolder() { return `${Action.rootFolder}/dist`; } static get workspace() { return process.env.GITHUB_WORKSPACE; } static checkCompatibility() { const currentPlatform = process.platform; if (!Action.supportedPlatforms.includes(currentPlatform)) { throw new Error(`Currently ${currentPlatform}-platform is not supported`); } } } exports["default"] = Action; /***/ }), /***/ 43059: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", ({ value: true })); const core = __importStar(__nccwpck_require__(42186)); const semver = __importStar(__nccwpck_require__(11383)); class AndroidVersioning { static determineVersionCode(version, inputVersionCode) { if (inputVersionCode === '') { return AndroidVersioning.versionToVersionCode(version); } return inputVersionCode; } static versionToVersionCode(version) { if (version === 'none') { core.info(`Versioning strategy is set to ${version}, so android version code should not be applied.`); return '0'; } const parsedVersion = semver.parse(version); if (!parsedVersion) { core.warning(`Could not parse "${version}" to semver, defaulting android version code to 1`); return '1'; } // The greatest value Google Plays allows is 2100000000. // Allow for 3 patch digits, 3 minor digits and 3 major digits. const versionCode = parsedVersion.major * 1000000 + parsedVersion.minor * 1000 + parsedVersion.patch; if (versionCode >= 2050000000) { throw new Error(`Generated versionCode ${versionCode} is dangerously close to the maximum allowed number 2100000000. Consider a different versioning scheme to be able to continue updating your application.`); } core.info(`Using android versionCode ${versionCode}`); return versionCode.toString(); } static determineSdkManagerParameters(targetSdkVersion) { const parsedVersion = Number.parseInt(targetSdkVersion.slice(-2), 10); return Number.isNaN(parsedVersion) ? '' : `platforms;android-${parsedVersion}`; } } exports["default"] = AndroidVersioning; /***/ }), /***/ 80787: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); const nanoid_1 = __nccwpck_require__(17592); const android_versioning_1 = __importDefault(__nccwpck_require__(43059)); const input_1 = __importDefault(__nccwpck_require__(91933)); const platform_1 = __importDefault(__nccwpck_require__(9707)); const unity_versioning_1 = __importDefault(__nccwpck_require__(17146)); const versioning_1 = __importDefault(__nccwpck_require__(88729)); const git_repo_1 = __nccwpck_require__(24271); const github_cli_1 = __nccwpck_require__(44990); const cli_1 = __nccwpck_require__(55651); const github_1 = __importDefault(__nccwpck_require__(83654)); const core = __importStar(__nccwpck_require__(42186)); class BuildParameters { static async create() { const buildFile = this.parseBuildFile(input_1.default.buildName, input_1.default.targetPlatform, input_1.default.androidExportType); const editorVersion = unity_versioning_1.default.determineUnityVersion(input_1.default.projectPath, input_1.default.unityVersion); const buildVersion = await versioning_1.default.determineBuildVersion(input_1.default.versioningStrategy, input_1.default.specifiedVersion); const androidVersionCode = android_versioning_1.default.determineVersionCode(buildVersion, input_1.default.androidVersionCode); const androidSdkManagerParameters = android_versioning_1.default.determineSdkManagerParameters(input_1.default.androidTargetSdkVersion); const androidSymbolExportType = input_1.default.androidSymbolType; if (platform_1.default.isAndroid(input_1.default.targetPlatform)) { switch (androidSymbolExportType) { case 'none': case 'public': case 'debugging': break; default: throw new Error(`Invalid androidSymbolType: ${input_1.default.androidSymbolType}. Must be one of: none, public, debugging`); } } let unitySerial = ''; if (input_1.default.unityLicensingServer === '') { if (!input_1.default.unitySerial && github_1.default.githubInputEnabled) { // No serial was present, so it is a personal license that we need to convert if (!input_1.default.unityLicense) { throw new Error(`Missing Unity License File and no Serial was found. If this is a personal license, make sure to follow the activation steps and set the UNITY_LICENSE GitHub secret or enter a Unity serial number inside the UNITY_SERIAL GitHub secret.`); } unitySerial = this.getSerialFromLicenseFile(input_1.default.unityLicense); } else { unitySerial = input_1.default.unitySerial; } } if (unitySerial !== undefined && unitySerial.length === 27) { core.setSecret(unitySerial); core.setSecret(`${unitySerial.slice(0, -4)}XXXX`); } const providerStrategy = input_1.default.getInput('providerStrategy') || (cli_1.Cli.isCliMode ? 'aws' : 'local'); return { editorVersion, customImage: input_1.default.customImage, unitySerial, unityLicensingServer: input_1.default.unityLicensingServer, skipActivation: input_1.default.skipActivation, runnerTempPath: input_1.default.runnerTempPath, targetPlatform: input_1.default.targetPlatform, projectPath: input_1.default.projectPath, buildProfile: input_1.default.buildProfile, buildName: input_1.default.buildName, buildPath: `${input_1.default.buildsPath}/${input_1.default.targetPlatform}`, buildFile, buildMethod: input_1.default.buildMethod, buildVersion, manualExit: input_1.default.manualExit, enableGpu: input_1.default.enableGpu, androidVersionCode, androidKeystoreName: input_1.default.androidKeystoreName, androidKeystoreBase64: input_1.default.androidKeystoreBase64, androidKeystorePass: input_1.default.androidKeystorePass, androidKeyaliasName: input_1.default.androidKeyaliasName, androidKeyaliasPass: input_1.default.androidKeyaliasPass, androidTargetSdkVersion: input_1.default.androidTargetSdkVersion, androidSdkManagerParameters, androidExportType: input_1.default.androidExportType, androidSymbolType: androidSymbolExportType, customParameters: input_1.default.customParameters, useHostNetwork: input_1.default.useHostNetwork, sshAgent: input_1.default.sshAgent, sshPublicKeysDirectoryPath: input_1.default.sshPublicKeysDirectoryPath, gitPrivateToken: input_1.default.gitPrivateToken ?? (await github_cli_1.GithubCliReader.GetGitHubAuthToken()), runAsHostUser: input_1.default.runAsHostUser, chownFilesTo: input_1.default.chownFilesTo, dockerCpuLimit: input_1.default.dockerCpuLimit, dockerMemoryLimit: input_1.default.dockerMemoryLimit, dockerIsolationMode: input_1.default.dockerIsolationMode, containerRegistryRepository: input_1.default.containerRegistryRepository, containerRegistryImageVersion: input_1.default.containerRegistryImageVersion, providerStrategy, buildPlatform: providerStrategy !== 'local' ? 'linux' : process.platform, runNumber: input_1.default.runNumber, branch: input_1.default.branch.replace('/head', '') || (await git_repo_1.GitRepoReader.GetBranch()), githubRepo: (input_1.default.githubRepo ?? (await git_repo_1.GitRepoReader.GetRemote())) || 'game-ci/unity-builder', gitSha: input_1.default.gitSha, logId: (0, nanoid_1.customAlphabet)('0123456789abcdefghijklmnopqrstuvwxyz', 9)(), buildGuid: `${input_1.default.runNumber}-${input_1.default.targetPlatform.toLowerCase().replace('standalone', '')}-${(0, nanoid_1.customAlphabet)('0123456789abcdefghijklmnopqrstuvwxyz', 4)()}`, isCliMode: cli_1.Cli.isCliMode, cacheUnityInstallationOnMac: input_1.default.cacheUnityInstallationOnMac, unityHubVersionOnMac: input_1.default.unityHubVersionOnMac, dockerWorkspacePath: input_1.default.dockerWorkspacePath, }; } static parseBuildFile(filename, platform, androidExportType) { if (platform_1.default.isWindows(platform)) { return `${filename}.exe`; } if (platform_1.default.isAndroid(platform)) { switch (androidExportType) { case `androidPackage`: return `${filename}.apk`; case `androidAppBundle`: return `${filename}.aab`; case `androidStudioProject`: return filename; default: throw new Error(`Unknown Android Export Type: ${androidExportType}. Must be one of androidPackage for apk, androidAppBundle for aab, androidStudioProject for android project`); } } return filename; } static getSerialFromLicenseFile(license) { const startKey = ``; const startIndex = license.indexOf(startKey) + startKey.length; if (startIndex < 0) { throw new Error(`License File was corrupted, unable to locate serial`); } const endIndex = license.indexOf(endKey, startIndex); // Slice off the first 4 characters as they are garbage values return Buffer.from(license.slice(startIndex, endIndex), 'base64').toString('binary').slice(4); } } exports["default"] = BuildParameters; /***/ }), /***/ 97134: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); const core = __importStar(__nccwpck_require__(42186)); const node_fs_1 = __importDefault(__nccwpck_require__(87561)); const action_1 = __importDefault(__nccwpck_require__(89088)); const project_1 = __importDefault(__nccwpck_require__(88666)); class Cache { static verify() { if (!node_fs_1.default.existsSync(project_1.default.libraryFolder)) { this.notifyAboutCachingPossibility(); } } static notifyAboutCachingPossibility() { if (action_1.default.isRunningLocally) { return; } core.warning(` Library folder does not exist. Consider setting up caching to speed up your workflow, if this is not your first build. `); } } exports["default"] = Cache; /***/ }), /***/ 85301: /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.CliFunction = exports.CliFunctionsRepository = void 0; class CliFunctionsRepository { static PushCliFunction(target, propertyKey, descriptor, key, description) { CliFunctionsRepository.targets.push({ target, propertyKey, descriptor, key, description, }); } static GetCliFunctions(key) { const results = CliFunctionsRepository.targets.find((x) => x.key === key); if (results === undefined || results.length === 0) { throw new Error(`no CLI mode found for ${key}`); } return results; } static GetAllCliModes() { return CliFunctionsRepository.targets.map((x) => { return { key: x.key, description: x.description, }; }); } // eslint-disable-next-line no-unused-vars static PushCliFunctionSource(cliFunction) { } } exports.CliFunctionsRepository = CliFunctionsRepository; CliFunctionsRepository.targets = []; function CliFunction(key, description) { return (target, propertyKey, descriptor) => { CliFunctionsRepository.PushCliFunction(target, propertyKey, descriptor, key, description); }; } exports.CliFunction = CliFunction; /***/ }), /***/ 55651: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Cli = void 0; const commander_ts_1 = __nccwpck_require__(40451); const __1 = __nccwpck_require__(41359); const core = __importStar(__nccwpck_require__(42186)); const action_yaml_1 = __nccwpck_require__(11091); const cli_functions_repository_1 = __nccwpck_require__(85301); class Cli { static get isCliMode() { return Cli.options !== undefined && Cli.options.mode !== undefined && Cli.options.mode !== ''; } static query(key, alternativeKey) { if (Cli.options && Cli.options[key] !== undefined) { return Cli.options[key]; } if (Cli.options && alternativeKey && Cli.options[alternativeKey] !== undefined) { return Cli.options[alternativeKey]; } return; } static InitCliMode() { const program = new commander_ts_1.Command(); program.version('0.0.1'); const actionYamlReader = new action_yaml_1.ActionYamlReader(); const properties = Object.getOwnPropertyNames(__1.Input).filter((p) => p !== 'length' && p !== 'prototype' && p !== 'name'); for (const element of properties) { program.option(`--${element} <${element}>`, actionYamlReader.GetActionYamlValue(element)); } program.option('-m, --mode ', cli_functions_repository_1.CliFunctionsRepository.GetAllCliModes() .map((x) => `${x.key} (${x.description})`) .join(` | `)); program.option('--populateOverride ', 'should use override query to pull input false by default'); program.option('--cachePushFrom ', 'cache push from source folder'); program.option('--cachePushTo ', 'cache push to caching folder'); program.option('--artifactName ', 'caching artifact name'); program.option('--select