diff --git a/action.yml b/action.yml index 1b5aff47..3d6b0776 100644 --- a/action.yml +++ b/action.yml @@ -217,6 +217,12 @@ inputs: description: 'The path to mount the workspace inside the docker container. For windows, leave out the drive letter. For example c:/github/workspace should be defined as /github/workspace' + errorWhenMissingUnityBuildResults: + default: true + required: false + description: + 'Check if Unity build product is present after build, and error if not. Set to false to not check, useful if + producing alternative build products.' outputs: volume: diff --git a/dist/index.js b/dist/index.js index 416f12b4..af4e690d 100644 Binary files a/dist/index.js and b/dist/index.js differ diff --git a/dist/index.js.map b/dist/index.js.map index 5ae2fa44..7100b83c 100644 Binary files a/dist/index.js.map and b/dist/index.js.map differ diff --git a/src/index.ts b/src/index.ts index 3f621d8e..d813aad9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -25,7 +25,13 @@ async function runMain() { if (process.platform === 'darwin') { MacBuilder.run(actionFolder); } else { - await Docker.run(baseImage.toString(), { workspace, actionFolder, ...buildParameters }); + await Docker.run( + baseImage.toString(), + { workspace, actionFolder, ...buildParameters }, + { + errorWhenMissingUnityBuildResults: buildParameters.errorWhenMissingUnityBuildResults, + }, + ); } } else { await CloudRunner.run(buildParameters, baseImage.toString()); diff --git a/src/model/build-parameters.ts b/src/model/build-parameters.ts index 4f430194..b28c3986 100644 --- a/src/model/build-parameters.ts +++ b/src/model/build-parameters.ts @@ -84,6 +84,7 @@ class BuildParameters { public cacheUnityInstallationOnMac!: boolean; public unityHubVersionOnMac!: string; public dockerWorkspacePath!: string; + public errorWhenMissingUnityBuildResults!: boolean; public static shouldUseRetainedWorkspaceMode(buildParameters: BuildParameters) { return buildParameters.maxRetainedWorkspaces > 0 && CloudRunner.lockedWorkspace !== ``; @@ -192,6 +193,7 @@ class BuildParameters { cacheUnityInstallationOnMac: Input.cacheUnityInstallationOnMac, unityHubVersionOnMac: Input.unityHubVersionOnMac, dockerWorkspacePath: Input.dockerWorkspacePath, + errorWhenMissingUnityBuildResults: Input.errorWhenMissingUnityBuildResults, }; } diff --git a/src/model/cloud-runner/providers/docker/index.ts b/src/model/cloud-runner/providers/docker/index.ts index 6837b1a9..d739f67d 100644 --- a/src/model/cloud-runner/providers/docker/index.ts +++ b/src/model/cloud-runner/providers/docker/index.ts @@ -136,21 +136,23 @@ cp -a ${sharedFolder}. /github/workspace/cloud-runner-cache/ await Docker.run( image, { workspace, actionFolder, ...this.buildParameters }, - false, - `chmod +x /github/workspace/${entrypointFilePath} && /github/workspace/${entrypointFilePath}`, - content, { - listeners: { - stdout: (data: Buffer) => { - myOutput += data.toString(); - }, - stderr: (data: Buffer) => { - myOutput += `[LOCAL-DOCKER-ERROR]${data.toString()}`; + silent: false, + overrideCommands: `chmod +x /github/workspace/${entrypointFilePath} && /github/workspace/${entrypointFilePath}`, + additionalVariables: content, + options: { + listeners: { + stdout: (data: Buffer) => { + myOutput += data.toString(); + }, + stderr: (data: Buffer) => { + myOutput += `[LOCAL-DOCKER-ERROR]${data.toString()}`; + }, }, }, + entrypointBash: true, + errorWhenMissingUnityBuildResults: false, }, - true, - false, ); return myOutput; diff --git a/src/model/docker.test.ts b/src/model/docker.test.ts index 290d19bf..d1a8432a 100644 --- a/src/model/docker.test.ts +++ b/src/model/docker.test.ts @@ -11,6 +11,6 @@ describe('Docker', () => { buildsPath: 'build', method: '', }; - await Docker.run(image, parameters); + await Docker.run(image, parameters, {}); }); }); diff --git a/src/model/docker.ts b/src/model/docker.ts index 24b93ab5..83ade0f0 100644 --- a/src/model/docker.ts +++ b/src/model/docker.ts @@ -5,17 +5,28 @@ import path from 'node:path'; import { ExecOptions } from '@actions/exec'; import { DockerParameters, StringKeyValuePair } from './shared-types'; +interface IDockerOptions { + silent?: boolean; + overrideCommands?: string; + additionalVariables?: StringKeyValuePair[]; + options?: ExecOptions | undefined; + entrypointBash?: boolean; + errorWhenMissingUnityBuildResults?: boolean; +} + class Docker { static async run( image: string, parameters: DockerParameters, - silent: boolean = false, - overrideCommands: string = '', - additionalVariables: StringKeyValuePair[] = [], - // eslint-disable-next-line unicorn/no-useless-undefined - options: ExecOptions | undefined = undefined, - entrypointBash: boolean = false, - errorWhenMissingUnityBuildResults: boolean = true, + { + silent = false, + overrideCommands = '', + additionalVariables = [], + // eslint-disable-next-line unicorn/no-useless-undefined + options = undefined, + entrypointBash = false, + errorWhenMissingUnityBuildResults = true, + }: IDockerOptions, ) { let runCommand = ''; switch (process.platform) { diff --git a/src/model/input.test.ts b/src/model/input.test.ts index f5d08d5c..e49ed530 100644 --- a/src/model/input.test.ts +++ b/src/model/input.test.ts @@ -285,4 +285,22 @@ describe('Input', () => { expect(spy).toHaveBeenCalledTimes(1); }); }); + + describe('errorWhenMissingUnityBuildResults', () => { + it('returns the default value', () => { + expect(Input.errorWhenMissingUnityBuildResults).toStrictEqual(false); + }); + + it('returns true when string true is passed', () => { + const spy = jest.spyOn(core, 'getInput').mockReturnValue('true'); + expect(Input.errorWhenMissingUnityBuildResults).toStrictEqual(true); + expect(spy).toHaveBeenCalledTimes(1); + }); + + it('returns false when string false is passed', () => { + const spy = jest.spyOn(core, 'getInput').mockReturnValue('false'); + expect(Input.errorWhenMissingUnityBuildResults).toStrictEqual(false); + expect(spy).toHaveBeenCalledTimes(1); + }); + }); }); diff --git a/src/model/input.ts b/src/model/input.ts index 011ed026..dc3aa715 100644 --- a/src/model/input.ts +++ b/src/model/input.ts @@ -220,6 +220,12 @@ class Input { return Input.getInput('dockerWorkspacePath') || '/github/workspace'; } + static get errorWhenMissingUnityBuildResults(): boolean { + const input = Input.getInput('errorWhenMissingUnityBuildResults') || false; + + return input === 'true'; + } + public static ToEnvVarFormat(input: string) { if (input.toUpperCase() === input) { return input;