support multiple licensing products

This commit is contained in:
Ejnar Arechavala 2024-08-07 13:51:17 -07:00
parent 461ecf7cea
commit 6ca32fc51b
10 changed files with 29 additions and 1 deletions

View File

@ -251,6 +251,13 @@ inputs:
default: '' default: ''
required: false required: false
description: 'The Unity licensing server address to use for activating Unity.' description: 'The Unity licensing server address to use for activating Unity.'
unityLicensingProductIds:
default: ''
required: false
description:
'Comma separated list of license product identifiers to request licenses for from the license server. Not setting
this will request the default license product configured on the licensing server. Only applicable if
unityLicensingServer is set.'
dockerWorkspacePath: dockerWorkspacePath:
default: '/github/workspace' default: '/github/workspace'
required: false required: false

BIN
dist/index.js generated vendored

Binary file not shown.

BIN
dist/index.js.map generated vendored

Binary file not shown.

View File

@ -3,5 +3,6 @@
"enableEntitlementLicensing": true, "enableEntitlementLicensing": true,
"enableFloatingApi": true, "enableFloatingApi": true,
"clientConnectTimeoutSec": 5, "clientConnectTimeoutSec": 5,
"clientHandshakeTimeoutSec": 10 "clientHandshakeTimeoutSec": 10,
"toolset": "%LICENSE_PRODUCT_IDS%"
} }

View File

@ -200,6 +200,14 @@ describe('BuildParameters', () => {
await expect(BuildParameters.create()).rejects.toThrowError(); await expect(BuildParameters.create()).rejects.toThrowError();
}); });
it('returns the unity licensing product ids', async () => {
const mockValue = 'license_id_1';
jest.spyOn(Input, 'unityLicensingProductIds', 'get').mockReturnValue(mockValue);
await expect(BuildParameters.create()).resolves.toEqual(
expect.objectContaining({ unityLicensingProductIds: mockValue }),
);
});
it('return serial when no license server is provided', async () => { it('return serial when no license server is provided', async () => {
const mockValue = '123'; const mockValue = '123';
delete process.env.UNITY_LICENSE; // Need to delete this as it is set for every test currently delete process.env.UNITY_LICENSE; // Need to delete this as it is set for every test currently

View File

@ -22,6 +22,7 @@ class BuildParameters {
public customImage!: string; public customImage!: string;
public unitySerial!: string; public unitySerial!: string;
public unityLicensingServer!: string; public unityLicensingServer!: string;
public unityLicensingProductIds!: string;
public skipActivation!: string; public skipActivation!: string;
public runnerTempPath!: string; public runnerTempPath!: string;
public targetPlatform!: string; public targetPlatform!: string;
@ -148,6 +149,7 @@ class BuildParameters {
customImage: Input.customImage, customImage: Input.customImage,
unitySerial, unitySerial,
unityLicensingServer: Input.unityLicensingServer, unityLicensingServer: Input.unityLicensingServer,
unityLicensingProductIds: Input.unityLicensingProductIds,
skipActivation: Input.skipActivation, skipActivation: Input.skipActivation,
runnerTempPath: Input.runnerTempPath, runnerTempPath: Input.runnerTempPath,
targetPlatform: Input.targetPlatform, targetPlatform: Input.targetPlatform,

View File

@ -29,6 +29,10 @@ class ImageEnvironmentFactory {
name: 'UNITY_LICENSING_SERVER', name: 'UNITY_LICENSING_SERVER',
value: parameters.unityLicensingServer, value: parameters.unityLicensingServer,
}, },
{
name: 'UNITY_LICENSING_PRODUCT_IDS',
value: parameters.unityLicensingProductIds,
},
{ name: 'SKIP_ACTIVATION', value: parameters.skipActivation }, { name: 'SKIP_ACTIVATION', value: parameters.skipActivation },
{ name: 'UNITY_VERSION', value: parameters.editorVersion }, { name: 'UNITY_VERSION', value: parameters.editorVersion },
{ {

View File

@ -123,6 +123,10 @@ class Input {
return Input.getInput('unityLicensingServer') ?? ''; return Input.getInput('unityLicensingServer') ?? '';
} }
static get unityLicensingProductIds(): string {
return Input.getInput('unityLicensingProductIds') ?? '';
}
static get buildMethod(): string { static get buildMethod(): string {
return Input.getInput('buildMethod') ?? ''; // Processed in docker file return Input.getInput('buildMethod') ?? ''; // Processed in docker file
} }

View File

@ -32,6 +32,7 @@ class PlatformSetup {
let servicesConfig = fs.readFileSync(servicesConfigPathTemplate).toString(); let servicesConfig = fs.readFileSync(servicesConfigPathTemplate).toString();
servicesConfig = servicesConfig.replace('%URL%', buildParameters.unityLicensingServer); servicesConfig = servicesConfig.replace('%URL%', buildParameters.unityLicensingServer);
servicesConfig = servicesConfig.replace('%LICENSE_PRODUCT_IDS%', buildParameters.unityLicensingProductIds);
fs.writeFileSync(servicesConfigPath, servicesConfig); fs.writeFileSync(servicesConfigPath, servicesConfig);
SetupAndroid.setup(buildParameters); SetupAndroid.setup(buildParameters);

View File

@ -168,6 +168,7 @@ class SetupMac {
process.env.UNITY_VERSION = buildParameters.editorVersion; process.env.UNITY_VERSION = buildParameters.editorVersion;
process.env.UNITY_SERIAL = buildParameters.unitySerial; process.env.UNITY_SERIAL = buildParameters.unitySerial;
process.env.UNITY_LICENSING_SERVER = buildParameters.unityLicensingServer; process.env.UNITY_LICENSING_SERVER = buildParameters.unityLicensingServer;
process.env.UNITY_LICENSING_PRODUCT_IDS = buildParameters.unityLicensingProductIds;
process.env.SKIP_ACTIVATION = buildParameters.skipActivation; process.env.SKIP_ACTIVATION = buildParameters.skipActivation;
process.env.PROJECT_PATH = buildParameters.projectPath; process.env.PROJECT_PATH = buildParameters.projectPath;
process.env.BUILD_TARGET = buildParameters.targetPlatform; process.env.BUILD_TARGET = buildParameters.targetPlatform;