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 node_path_1 = __importDefault(__nccwpck_require__(49411));
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 enterprise = await (0, orchestrator_plugin_1.loadEnterpriseServices)();
// Always configure git environment for CI reliability
enterprise?.BuildReliabilityService.configureGitEnvironment();
const { workspace, actionFolder } = model_1.Action;
const buildParameters = await model_1.BuildParameters.create();
// If a test suite path is provided, use the test workflow engine
// instead of the standard build execution path
if (buildParameters.testSuitePath) {
core.info('[TestWorkflow] Test suite path detected, using test workflow engine');
const results = await enterprise?.TestWorkflowService.executeTestSuite(buildParameters.testSuitePath, buildParameters);
let totalFailed = 0;
for (const result of results || []) {
totalFailed += result.failed;
}
if (totalFailed > 0) {
core.setFailed(`Test workflow completed with ${totalFailed} failure(s)`);
}
else {
core.info('[TestWorkflow] All test runs passed');
}
return;
}
const baseImage = new model_1.ImageTag(buildParameters);
// Pre-build reliability checks
if (buildParameters.gitIntegrityCheck) {
core.info('Running git integrity checks...');
const isHealthy = enterprise?.BuildReliabilityService.checkGitIntegrity(workspace);
enterprise?.BuildReliabilityService.cleanStaleLockFiles(workspace);
enterprise?.BuildReliabilityService.validateSubmoduleBackingStores(workspace);
if (buildParameters.cleanReservedFilenames) {
enterprise?.BuildReliabilityService.cleanReservedFilenames(buildParameters.projectPath);
}
if (!isHealthy && buildParameters.gitAutoRecover) {
core.info('Git corruption detected, attempting automatic recovery...');
const recovered = enterprise?.BuildReliabilityService.recoverCorruptedRepo(workspace);
if (!recovered) {
core.warning('Automatic recovery failed. Build may encounter issues.');
}
}
}
else if (buildParameters.cleanReservedFilenames) {
// cleanReservedFilenames can run independently of gitIntegrityCheck
enterprise?.BuildReliabilityService.cleanReservedFilenames(buildParameters.projectPath);
}
let exitCode = -1;
// Hot runner path: attempt to use a persistent Unity editor instance
if (buildParameters.hotRunnerEnabled) {
core.info('[HotRunner] Hot runner mode enabled, attempting hot build...');
const hotRunnerConfig = {
enabled: true,
transport: buildParameters.hotRunnerTransport,
host: buildParameters.hotRunnerHost,
port: buildParameters.hotRunnerPort,
healthCheckInterval: buildParameters.hotRunnerHealthInterval,
maxIdleTime: buildParameters.hotRunnerMaxIdle,
maxJobsBeforeRecycle: 0, // no automatic recycle by job count
};
if (!enterprise?.HotRunnerService) {
throw new Error('[HotRunner] Enterprise services required for hot runner mode');
}
const hotRunnerService = new enterprise.HotRunnerService();
try {
await hotRunnerService.initialize(hotRunnerConfig);
const result = await hotRunnerService.submitBuild(buildParameters, (output) => {
core.info(output);
});
exitCode = result.exitCode;
core.info(`[HotRunner] Build completed with exit code ${exitCode}`);
await hotRunnerService.shutdown();
}
catch (hotRunnerError) {
await hotRunnerService.shutdown();
if (buildParameters.hotRunnerFallbackToCold) {
core.warning(`[HotRunner] Hot runner failed: ${hotRunnerError.message}. Falling back to cold build.`);
exitCode = await runColdBuild(buildParameters, baseImage, workspace, actionFolder);
}
else {
throw hotRunnerError;
}
}
}
else if (buildParameters.providerStrategy === 'local') {
core.info('Building locally');
// Child workspace isolation - restore cached workspace before any other setup
let childWorkspaceConfig;
if (buildParameters.childWorkspacesEnabled && buildParameters.childWorkspaceName) {
const ChildWorkspaceService = await enterprise?.loadChildWorkspaceService();
const cacheRoot = buildParameters.childWorkspaceCacheRoot ||
node_path_1.default.join(buildParameters.runnerTempPath || process.env.RUNNER_TEMP || '', 'game-ci-workspaces');
childWorkspaceConfig = ChildWorkspaceService?.buildConfig({
childWorkspacesEnabled: buildParameters.childWorkspacesEnabled,
childWorkspaceName: buildParameters.childWorkspaceName,
childWorkspaceCacheRoot: cacheRoot,
childWorkspacePreserveGit: buildParameters.childWorkspacePreserveGit,
childWorkspaceSeparateLibrary: buildParameters.childWorkspaceSeparateLibrary,
});
const projectFullPath = node_path_1.default.join(workspace, buildParameters.projectPath);
const restored = ChildWorkspaceService?.initializeWorkspace(projectFullPath, childWorkspaceConfig);
core.info(`Child workspace "${buildParameters.childWorkspaceName}": ${restored ? 'restored from cache' : 'starting fresh'}`);
// Log workspace size for resource tracking
const size = ChildWorkspaceService?.getWorkspaceSize(projectFullPath);
core.info(`Child workspace size after restore: ${size}`);
}
// Submodule profile initialization
if (buildParameters.submoduleProfilePath) {
core.info('Initializing submodules from profile...');
const SubmoduleProfileService = await enterprise?.loadSubmoduleProfileService();
const plan = await SubmoduleProfileService?.createInitPlan(buildParameters.submoduleProfilePath, buildParameters.submoduleVariantPath, workspace);
if (plan) {
await SubmoduleProfileService?.execute(plan, workspace, buildParameters.submoduleToken || buildParameters.gitPrivateToken);
}
}
// Configure custom LFS transfer agent
if (buildParameters.lfsTransferAgent) {
core.info('Configuring custom LFS transfer agent...');
const LfsAgentService = await enterprise?.loadLfsAgentService();
await LfsAgentService?.configure(buildParameters.lfsTransferAgent, buildParameters.lfsTransferAgentArgs, buildParameters.lfsStoragePaths ? buildParameters.lfsStoragePaths.split(';') : [], workspace);
}
// Local build caching - restore
let cacheRoot = '';
let cacheKey = '';
// eslint-disable-next-line no-undef
let LocalCacheService;
if (buildParameters.localCacheEnabled) {
LocalCacheService = await enterprise?.loadLocalCacheService();
cacheRoot = LocalCacheService?.resolveCacheRoot(buildParameters) || '';
cacheKey =
LocalCacheService?.generateCacheKey(buildParameters.targetPlatform, buildParameters.editorVersion, buildParameters.branch || '') || '';
if (buildParameters.localCacheLfs) {
await LocalCacheService?.restoreLfsCache(workspace, cacheRoot, cacheKey);
}
if (buildParameters.localCacheLibrary) {
const projectFullPath = node_path_1.default.join(workspace, buildParameters.projectPath);
await LocalCacheService?.restoreLibraryCache(projectFullPath, cacheRoot, cacheKey);
}
}
// Git hooks — opt-in only. When disabled (default), do not touch hooks at all.
if (buildParameters.gitHooksEnabled) {
const GitHooksService = await enterprise?.loadGitHooksService();
await GitHooksService?.installHooks(workspace);
if (buildParameters.gitHooksSkipList) {
const environment = GitHooksService?.configureSkipList(buildParameters.gitHooksSkipList.split(','));
if (environment) {
Object.assign(process.env, environment);
}
}
}
// Apply incremental sync strategy before build
const syncStrategy = buildParameters.syncStrategy;
if (syncStrategy !== 'full') {
core.info(`[Sync] Applying sync strategy: ${syncStrategy}`);
await applySyncStrategy(buildParameters, workspace, enterprise);
}
await platform_setup_1.default.setup(buildParameters, actionFolder);
exitCode =
process.platform === 'darwin'
? await mac_builder_1.default.run(actionFolder)
: await model_1.Docker.run(baseImage.toString(), {
workspace,
actionFolder,
...buildParameters,
});
// Local build caching - save
if (buildParameters.localCacheEnabled && LocalCacheService) {
if (buildParameters.localCacheLibrary) {
const projectFullPath = node_path_1.default.join(workspace, buildParameters.projectPath);
await LocalCacheService.saveLibraryCache(projectFullPath, cacheRoot, cacheKey);
}
if (buildParameters.localCacheLfs) {
await LocalCacheService.saveLfsCache(workspace, cacheRoot, cacheKey);
}
}
// Child workspace isolation - save workspace for next run
if (childWorkspaceConfig && childWorkspaceConfig.enabled) {
const ChildWorkspaceService = await enterprise?.loadChildWorkspaceService();
const projectFullPath = node_path_1.default.join(workspace, buildParameters.projectPath);
const preSaveSize = ChildWorkspaceService?.getWorkspaceSize(projectFullPath);
core.info(`Child workspace size before save: ${preSaveSize}`);
ChildWorkspaceService?.saveWorkspace(projectFullPath, childWorkspaceConfig);
core.info(`Child workspace "${buildParameters.childWorkspaceName}" saved to cache`);
}
// Revert overlays after job completion if configured
if (buildParameters.syncRevertAfter && syncStrategy !== 'full') {
core.info('[Sync] Reverting overlay changes after job completion');
try {
await enterprise?.IncrementalSyncService.revertOverlays(workspace, buildParameters.syncStatePath);
}
catch (revertError) {
core.warning(`[Sync] Overlay revert failed: ${revertError.message}`);
}
}
}
else {
const orchestrator = await (0, orchestrator_plugin_1.loadOrchestrator)();
if (!orchestrator) {
throw new Error('Orchestrator package not available. Install @game-ci/orchestrator or use providerStrategy=local.');
}
await orchestrator.run(buildParameters, baseImage.toString());
exitCode = 0;
}
// Post-build: archive and enforce retention
if (buildParameters.buildArchiveEnabled && exitCode === 0) {
core.info('Archiving build output...');
enterprise?.BuildReliabilityService.archiveBuildOutput(buildParameters.buildPath, buildParameters.buildArchivePath);
enterprise?.BuildReliabilityService.enforceRetention(buildParameters.buildArchivePath, buildParameters.buildArchiveRetention);
}
// Set output
await model_1.Output.setBuildVersion(buildParameters.buildVersion);
await model_1.Output.setAndroidVersionCode(buildParameters.androidVersionCode);
await model_1.Output.setEngineExitCode(exitCode);
// Artifact collection and upload (runs on both success and failure)
try {
// Register custom output types if provided
if (buildParameters.artifactCustomTypes) {
try {
const customTypes = JSON.parse(buildParameters.artifactCustomTypes);
if (Array.isArray(customTypes)) {
for (const ct of customTypes) {
enterprise?.OutputTypeRegistry.registerType({
name: ct.name,
defaultPath: ct.defaultPath || ct.pattern || `./${ct.name}/`,
description: ct.description || `Custom output type: ${ct.name}`,
builtIn: false,
});
}
}
}
catch (parseError) {
core.warning(`Failed to parse artifactCustomTypes: ${parseError.message}`);
}
}
// Collect outputs and generate manifest
const manifestPath = node_path_1.default.join(buildParameters.projectPath, 'output-manifest.json');
const manifest = await enterprise?.OutputService.collectOutputs(buildParameters.projectPath, buildParameters.buildGuid, buildParameters.artifactOutputTypes, manifestPath);
core.setOutput('artifactManifestPath', manifestPath);
if (manifest) {
// Upload artifacts
const uploadConfig = enterprise?.ArtifactUploadHandler.parseConfig(buildParameters.artifactUploadTarget, buildParameters.artifactUploadPath || undefined, buildParameters.artifactCompression, buildParameters.artifactRetentionDays);
if (uploadConfig) {
const uploadResult = await enterprise?.ArtifactUploadHandler.uploadArtifacts(manifest, uploadConfig, buildParameters.projectPath);
if (uploadResult && !uploadResult.success) {
core.warning(`Artifact upload completed with errors: ${uploadResult.entries
.filter((entry) => !entry.success)
.map((entry) => `${entry.type}: ${entry.error}`)
.join('; ')}`);
}
}
}
}
catch (artifactError) {
core.warning(`Artifact collection/upload failed: ${artifactError.message}`);
}
if (exitCode !== 0) {
core.setFailed(`Build failed with exit code ${exitCode}`);
}
}
catch (error) {
core.setFailed(error.message);
}
}
async function runColdBuild(buildParameters, baseImage, workspace, actionFolder) {
if (buildParameters.providerStrategy === 'local') {
core.info('Building locally');
await platform_setup_1.default.setup(buildParameters, actionFolder);
return process.platform === 'darwin'
? await mac_builder_1.default.run(actionFolder)
: await model_1.Docker.run(baseImage.toString(), {
workspace,
actionFolder,
...buildParameters,
});
}
else {
const orchestrator = await (0, orchestrator_plugin_1.loadOrchestrator)();
if (!orchestrator) {
throw new Error('Orchestrator package not available. Install @game-ci/orchestrator or use providerStrategy=local.');
}
await orchestrator.run(buildParameters, baseImage.toString());
return 0;
}
}
/**
* Apply the configured sync strategy to the workspace before build.
*/
async function applySyncStrategy(buildParameters, workspace, enterprise) {
if (!enterprise?.IncrementalSyncService) {
core.warning('[Sync] Enterprise services not available, skipping sync strategy');
return;
}
const { IncrementalSyncService } = enterprise;
const strategy = buildParameters.syncStrategy;
const resolvedStrategy = IncrementalSyncService.resolveStrategy(strategy, workspace, buildParameters.syncStatePath);
if (resolvedStrategy === 'full') {
core.info('[Sync] Resolved to full sync (no incremental state available)');
return;
}
switch (resolvedStrategy) {
case 'git-delta': {
const targetReference = buildParameters.gitSha || buildParameters.branch;
const changedFiles = await IncrementalSyncService.syncGitDelta(workspace, targetReference, buildParameters.syncStatePath);
core.info(`[Sync] Git delta sync applied: ${changedFiles} file(s) changed`);
break;
}
case 'direct-input': {
if (!buildParameters.syncInputRef) {
throw new Error('[Sync] direct-input strategy requires syncInputRef to be set');
}
const overlays = await IncrementalSyncService.applyDirectInput(workspace, buildParameters.syncInputRef, buildParameters.syncStorageRemote || undefined, buildParameters.syncStatePath);
core.info(`[Sync] Direct input applied: ${overlays.length} overlay(s)`);
break;
}
case 'storage-pull': {
if (!buildParameters.syncInputRef) {
throw new Error('[Sync] storage-pull strategy requires syncInputRef to be set');
}
const pulledFiles = await IncrementalSyncService.syncStoragePull(workspace, buildParameters.syncInputRef, {
rcloneRemote: buildParameters.syncStorageRemote || undefined,
syncRevertAfter: buildParameters.syncRevertAfter,
statePath: buildParameters.syncStatePath,
});
core.info(`[Sync] Storage pull complete: ${pulledFiles.length} file(s)`);
break;
}
default:
core.warning(`[Sync] Unknown sync strategy: ${resolvedStrategy}`);
}
}
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`);
}
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,
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: input_1.default.getInput('providerStrategy') || (cli_1.Cli.isCliMode ? 'aws' : 'local'),
fallbackProviderStrategy: input_1.default.getInput('fallbackProviderStrategy') || '',
runnerCheckEnabled: input_1.default.getInput('runnerCheckEnabled') === 'true',
runnerCheckLabels: (input_1.default.getInput('runnerCheckLabels') || '')
.split(',')
.map((l) => l.trim())
.filter(Boolean),
runnerCheckMinAvailable: Number(input_1.default.getInput('runnerCheckMinAvailable')) || 1,
retryOnFallback: input_1.default.getInput('retryOnFallback') === 'true',
providerInitTimeout: Number(input_1.default.getInput('providerInitTimeout')) || 0,
gitAuthMode: input_1.default.getInput('gitAuthMode') || 'header',
buildPlatform: input_1.default.getInput('buildPlatform') ||
((input_1.default.getInput('providerStrategy') || 'local') !== 'local' ? 'linux' : process.platform),
kubeConfig: input_1.default.getInput('kubeConfig') || '',
containerMemory: input_1.default.getInput('containerMemory') || '3072',
containerCpu: input_1.default.getInput('containerCpu') || '1024',
containerNamespace: input_1.default.getInput('containerNamespace') || 'default',
kubeVolumeSize: input_1.default.getInput('kubeVolumeSize') || '25Gi',
kubeVolume: input_1.default.getInput('kubeVolume') || '',
postBuildContainerHooks: input_1.default.getInput('postBuildContainerHooks') || '',
preBuildContainerHooks: input_1.default.getInput('preBuildContainerHooks') || '',
customJob: input_1.default.getInput('customJob') || '',
runNumber: input_1.default.runNumber,
branch: input_1.default.branch.replace('/head', '') || (await git_repo_1.GitRepoReader.GetBranch()),
orchestratorBranch: (input_1.default.getInput('orchestratorBranch') || 'main').split('/').reverse()[0],
orchestratorDebug: input_1.default.getInput('orchestratorDebug') === 'true' || input_1.default.getInput('orchestratorTests') === 'true',
githubRepo: (input_1.default.githubRepo ?? (await git_repo_1.GitRepoReader.GetRemote())) ||
input_1.default.getInput('orchestratorRepoName') ||
'game-ci/unity-builder',
orchestratorRepoName: input_1.default.getInput('orchestratorRepoName') || 'game-ci/unity-builder',
cloneDepth: Number.parseInt(input_1.default.getInput('cloneDepth') || '50'),
isCliMode: cli_1.Cli.isCliMode,
awsStackName: input_1.default.getInput('awsStackName') || 'game-ci',
awsEndpoint: input_1.default.getInput('awsEndpoint'),
awsCloudFormationEndpoint: input_1.default.getInput('awsCloudFormationEndpoint') || input_1.default.getInput('awsEndpoint'),
awsEcsEndpoint: input_1.default.getInput('awsEcsEndpoint') || input_1.default.getInput('awsEndpoint'),
awsKinesisEndpoint: input_1.default.getInput('awsKinesisEndpoint') || input_1.default.getInput('awsEndpoint'),
awsCloudWatchLogsEndpoint: input_1.default.getInput('awsCloudWatchLogsEndpoint') || input_1.default.getInput('awsEndpoint'),
awsS3Endpoint: input_1.default.getInput('awsS3Endpoint') || input_1.default.getInput('awsEndpoint'),
storageProvider: input_1.default.getInput('storageProvider') || 's3',
rcloneRemote: input_1.default.getInput('rcloneRemote') || '',
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)()}`,
commandHooks: input_1.default.getInput('commandHooks') || '',
inputPullCommand: input_1.default.getInput('inputPullCommand') || '',
pullInputList: (input_1.default.getInput('pullInputList') || '').split(',').filter(Boolean),
kubeStorageClass: input_1.default.getInput('kubeStorageClass') || '',
gcpProject: input_1.default.gcpProject,
gcpRegion: input_1.default.gcpRegion,
gcpStorageType: input_1.default.gcpStorageType,
gcpBucket: input_1.default.gcpBucket,
gcpFilestoreIp: input_1.default.gcpFilestoreIp,
gcpFilestoreShare: input_1.default.gcpFilestoreShare,
gcpMachineType: input_1.default.gcpMachineType,
gcpDiskSizeGb: input_1.default.gcpDiskSizeGb,
gcpServiceAccount: input_1.default.gcpServiceAccount,
gcpVpcConnector: input_1.default.gcpVpcConnector,
azureResourceGroup: input_1.default.azureResourceGroup,
azureLocation: input_1.default.azureLocation,
azureStorageType: input_1.default.azureStorageType,
azureStorageAccount: input_1.default.azureStorageAccount,
azureBlobContainer: input_1.default.azureBlobContainer,
azureFileShareName: input_1.default.azureFileShareName,
azureSubscriptionId: input_1.default.azureSubscriptionId,
azureCpu: input_1.default.azureCpu,
azureMemoryGb: input_1.default.azureMemoryGb,
azureDiskSizeGb: input_1.default.azureDiskSizeGb,
azureSubnetId: input_1.default.azureSubnetId,
cacheKey: input_1.default.getInput('cacheKey') || input_1.default.branch,
maxRetainedWorkspaces: Number.parseInt(input_1.default.getInput('maxRetainedWorkspaces') || '0'),
useLargePackages: input_1.default.getInput('useLargePackages') === 'true',
useCompressionStrategy: input_1.default.getInput('useCompressionStrategy') === 'true',
garbageMaxAge: Number(input_1.default.getInput('garbageMaxAge')) || 24,
githubChecks: input_1.default.getInput('githubChecks') === 'true',
asyncWorkflow: input_1.default.getInput('asyncOrchestrator') === 'true',
githubCheckId: input_1.default.getInput('githubCheckId') || '',
finalHooks: (input_1.default.getInput('finalHooks') || '').split(',').filter(Boolean),
skipLfs: input_1.default.getInput('skipLfs') === 'true',
skipCache: input_1.default.getInput('skipCache') === 'true',
cacheUnityInstallationOnMac: input_1.default.cacheUnityInstallationOnMac,
unityHubVersionOnMac: input_1.default.unityHubVersionOnMac,
dockerWorkspacePath: input_1.default.dockerWorkspacePath,
submoduleProfilePath: input_1.default.submoduleProfilePath,
submoduleVariantPath: input_1.default.submoduleVariantPath,
submoduleToken: input_1.default.submoduleToken,
localCacheEnabled: input_1.default.localCacheEnabled,
localCacheRoot: input_1.default.localCacheRoot,
localCacheLibrary: input_1.default.localCacheLibrary,
localCacheLfs: input_1.default.localCacheLfs,
childWorkspacesEnabled: input_1.default.childWorkspacesEnabled,
childWorkspaceName: input_1.default.childWorkspaceName,
childWorkspaceCacheRoot: input_1.default.childWorkspaceCacheRoot,
childWorkspacePreserveGit: input_1.default.childWorkspacePreserveGit,
childWorkspaceSeparateLibrary: input_1.default.childWorkspaceSeparateLibrary,
lfsTransferAgent: input_1.default.lfsTransferAgent,
lfsTransferAgentArgs: input_1.default.lfsTransferAgentArgs,
lfsStoragePaths: input_1.default.lfsStoragePaths,
gitHooksEnabled: input_1.default.gitHooksEnabled,
gitHooksSkipList: input_1.default.gitHooksSkipList,
gitHooksRunBeforeBuild: input_1.default.gitHooksRunBeforeBuild,
providerExecutable: input_1.default.providerExecutable,
// Remote PowerShell provider
remotePowershellHost: input_1.default.remotePowershellHost,
remotePowershellCredential: input_1.default.remotePowershellCredential,
remotePowershellTransport: input_1.default.remotePowershellTransport,
// GitHub Actions provider
githubActionsRepo: input_1.default.githubActionsRepo,
githubActionsWorkflow: input_1.default.githubActionsWorkflow,
githubActionsToken: input_1.default.githubActionsToken,
githubActionsRef: input_1.default.githubActionsRef,
// GitLab CI provider
gitlabProjectId: input_1.default.gitlabProjectId,
gitlabTriggerToken: input_1.default.gitlabTriggerToken,
gitlabApiUrl: input_1.default.gitlabApiUrl,
gitlabRef: input_1.default.gitlabRef,
// Ansible provider
ansibleInventory: input_1.default.ansibleInventory,
ansiblePlaybook: input_1.default.ansiblePlaybook,
ansibleExtraVars: input_1.default.ansibleExtraVars,
ansibleVaultPassword: input_1.default.ansibleVaultPassword,
gitIntegrityCheck: input_1.default.gitIntegrityCheck,
gitAutoRecover: input_1.default.gitAutoRecover,
cleanReservedFilenames: input_1.default.cleanReservedFilenames,
buildArchiveEnabled: input_1.default.buildArchiveEnabled,
buildArchivePath: input_1.default.buildArchivePath,
buildArchiveRetention: input_1.default.buildArchiveRetention,
testSuitePath: input_1.default.testSuitePath,
testSuiteEvent: input_1.default.testSuiteEvent,
testTaxonomyPath: input_1.default.testTaxonomyPath,
testResultFormat: input_1.default.testResultFormat,
testResultPath: input_1.default.testResultPath,
hotRunnerEnabled: input_1.default.hotRunnerEnabled,
hotRunnerTransport: input_1.default.hotRunnerTransport,
hotRunnerHost: input_1.default.hotRunnerHost,
hotRunnerPort: input_1.default.hotRunnerPort,
hotRunnerHealthInterval: input_1.default.hotRunnerHealthInterval,
hotRunnerMaxIdle: input_1.default.hotRunnerMaxIdle,
hotRunnerFallbackToCold: input_1.default.hotRunnerFallbackToCold,
artifactOutputTypes: input_1.default.artifactOutputTypes,
artifactUploadTarget: input_1.default.artifactUploadTarget,
artifactUploadPath: input_1.default.artifactUploadPath,
artifactCompression: input_1.default.artifactCompression,
artifactRetentionDays: input_1.default.artifactRetentionDays,
artifactCustomTypes: input_1.default.artifactCustomTypes,
syncStrategy: input_1.default.syncStrategy,
syncInputRef: input_1.default.syncInputRef,
syncStorageRemote: input_1.default.syncStorageRemote,
syncRevertAfter: input_1.default.syncRevertAfter,
syncStatePath: input_1.default.syncStatePath,
};
}
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