From bc748ab851a573223a6b158c3f075d0ba32c6404 Mon Sep 17 00:00:00 2001 From: Toby Harris Date: Wed, 20 Sep 2023 13:52:28 +0100 Subject: [PATCH] `errorWhenMissingUnityBuildResults` exposed as with parameter --- action.yml | 6 +++++ dist/index.js | Bin 22170535 -> 22171169 bytes dist/index.js.map | Bin 14627283 -> 14628001 bytes src/index.ts | 8 +++++- src/model/build-parameters.ts | 2 ++ .../cloud-runner/providers/docker/index.ts | 24 +++++++++-------- src/model/docker.test.ts | 2 +- src/model/docker.ts | 25 +++++++++++++----- src/model/input.test.ts | 18 +++++++++++++ src/model/input.ts | 6 +++++ 10 files changed, 71 insertions(+), 20 deletions(-) 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 416f12b4bcf89f72dbfba874bfcf285551e89d29..af4e690d307de9d3b62269138573052819276fdb 100644 GIT binary patch delta 1850 zcmXxkX;_q17=YnxX1 z>(`cNPD@eUskXrXca~OE)%c2%6G}Ww+%;vs3p>4$;USw&>6%K^bpO>Yne8o^hW*{f zm1eb7=I_qZt*XAYL+f8z>+yO^OFTK1<>l^*lInD|z+o&>Qwjqk?1gS`sk^w$Q=RTw zTv_4sRQOc%>5vGu;F!a%TB|k$s-q6$h0C0A7)SJ7Yn9VzQ42d6kmNMlRnkeTuBr-* z;mVp{?WZz2b&Hy12?$n=n_?}B#kqY;8gmVHb$+^LQ;l(k;9!P%S5#G&R`{~r)l1d9 z){ZcBBGsn-cWt#ROOH~CJJtj=^g500y-w5N9>Yp?C`dbMig&GQ-(u0$?rg5#tMxtO zn6riuwW!7vpw72(zC5iyJkC{Dr%rC$7ol?ZXfdj%%H(PeK61R-kr&aB(XK&IhG95HAPyrj3h@|? z1SBE}$rytajKw&N#{{Gz4e6MO3}j*wvM?D_kc}Kn#Wdt%I%Z%dW+4yxn2kA@ivrBU zMYtH3U_J_QDK5hTEX3uw0$1WH6k!qED8^!xz=I{Y8cR`%Yp@JuC`SbNEUtyqHw+=jKd9qVuh?!;YKk47|M1DdfBcViP2 zT5u2U#eLX}`|$uC#1?GDLwFdEU>hFAcI?1TJceC(9J}!ZoZ$#ZUMdzu;H=hI9BGf8bC2 zg}?C+dU1YTM!R7>Bu0rzqDgd#pTu7hAPJP1B|#F4q@N^MVwKn={Uvruh$K`JCJC2B zNCrq85~pOKBvKM386+7jaY>>jLnJYhSjkYyFv)Pq2uYk|q-2yNUNTyeAW4)YNs=XF zBq@@yl5vvpk_nPjNtz^GGEtHt$&^fzWJxAVrbx0SIg+W8X_8#Ybjb|KOvx-so+Mu~ STQWy7S5ja&z<**`w((!ARubO; delta 1601 zcmWmEXIvC?0LJmpop%QwH;@xl4&@XT(8GlbP{aX>3$kUUkttfHXo?n&GEGU%J^tm0 zY`Geg72ysV0+p3*N2J+sMebSto)_QWtLOEzX+xEBv#D~HdY$G(>WVm1dnn3hO2ciA z9o5d1WRq4I={B+BY$5ZC(#wj{ExQgo#*UgWH9u$yqOEzZ!01T@h4}@A!N5$XNvX6a znhd`+!PNS#F0-i8?lmJK>>iVw?Y5h`Os~((h_Jg%=I~IzCRrwDnAL0Y;w@p0*}*{J zlxfBiy5DD#w(Jclu86UgRm9Y*sWZWoHjmlpwpEvn_t+M0U3IYLW^qZm4R$yXf>6|l z6Jc<{4G+8sM*~E_hlYqm6dIv1njji}#GomfAr=8NM+?NEC0e01;*o$vv_V@0k%V?= zj}GXFPDn;)bU{~iLwBSg6=~>!o=8V8WS}?tpfCC%6Itkw0m#Nc48mXx!BFHN7k6M7 z?!;ZV8~5N|499)A9}i#zM&d!_;USE|!x)V*$j4ZW!y|YUiFz)GybYOKLp z7`%WNu@3980UPlWO7Jo^;T61!*YG;tz-Da0R&2v|yotB)Hr_!g-o<;^f%owNK13Nl zLOFI~7j|P0_F^CQ<6~5y5})8xe1^|)09B|)4Zgsa_zDN{HNL^OIE3%;J$}HC_z6Gb z7aYbB9K|vGidy`J<2ZreaT0&vPyB_yaSEq#24`^&|DX>4;yfM zCT`(B{J*%Q+_DUcRjH@g6uaV3LX=RYzT#BE6qn*wJc?HdR~jf0ice{%L@H5ABc-v@ zM2S}XN{rG}X{N*~0j0UpLWxsaDy@{(O1zSwBr0u`wn|V*Qrao)l@3ZrrIV7ZbXK}3 zU6pQ1cO^whRnn9mN>3$S>7`^Sy_G&nU!|Xtsbnerl>th&GEf<$3|59HLzNsQ*Rqd4 IvCLh48y>tv761SM diff --git a/dist/index.js.map b/dist/index.js.map index 5ae2fa44a584427c19f336c326342f3e9e7da505..7100b83cfcf954b8b006034cdce56aa7c29ebca6 100644 GIT binary patch delta 1478 zcmYMwZBW!z6vy#_T`<@MSr%HJwp~QQKtM%&z=vSzNip~rWl;t!vM8}Ev@D=0kttE8 zxogQOO9Cw|NJYv1m06HhSZ1hY2^N#(G>y&3OpUK}rZ3Xii_hG-=iJ|!Irr>u*8)5L zycXEA&d;X=OV7+OoecJxw)&KuZPCGU>JQBhpR!pxwo@PdJ+iQOdY|e)*123{Nb)IX zr1W68PO1-^`lV;8L8mTkG6iWR?7BwR+oB&ymyU{w$&x*+(aM5F!R@5ev}5UttH#D& zYl+)$Jb!d|L_^!(4C)TmtKtpOZ5+>xhH6`+V<;q7_2!#W{cp@wcOEll`1_R9u{n#6 z>l=N_fMj3r)AjDlo15WNBF5^i>rJycH>5YWrZ@Y+9~x*8fIv*ZEeJv|bkHLNp_qs; z7!VF4A`ppNVL}w5)%50=z1@X@(!^X~ ziI>9AOrt1?@p00(B*~(NrNpkzkRGR1E45n=+{{+GYU@2EGt$Z(74~|k=fCXfU+2U~ ztzw1$5V8fqFGZg*w5Be$ly+U_c^%aWKJbBT0pnj96r z%nusNnN5=IP0-5u9CKRRN_T*GHTz8x zI^qqKc$+!lW>YVU%{>3c3#BXBD9sHPgOn~$G3Y(+HMKRBE|1M#w@TvmQzHN0N)nQX z!{wyY8X|+2k4$JCu$k2X+ifSVvVwP>Wmq%K+N4%xS&F)3G%Z#;{#(1MtPwJF&Js0# z4Y_Essn`FC4fKjxwx3IUK0KN~}U9ov#h@ z(T+FKfllngZoGxJu?Ktc4&Fr!3wj^Gm<#i#fT zedx#MIELf+0$<`Q4B!O5#y2>LZ*dCWVGyTr250d-e!w~Wh@WsCLm0*d{H%^#`sJUz Fe*xvZ8#@31 delta 1252 zcmXxcd2q`K6u|L`Rz!YH+D0kbG;vdPth!d~YHJtkh@*9tgsP(|wN%$tHxWm*vh8yf zRW~IBan-Tw=sH8)NB_W%;SYaUW6Ut@H=XgvXXZO^-g_l)zp5)=eO0>`s9d&0MZQlr z_z11&yBVHIeug30qaUaa*pQ-#tt$Alf2VMb>XLuOvqZRxNpbnn)SJu}M%Y(X# zy!VBLi=}~*=SrPcTwobpG+3vI?q1k`KO$3X?*iTxHB()5xoZV3b2}YwrwTO?fI!rQ z8nvK7ZD^q&2s-Eyj1YvvfI0|6UDQK3>Z5_z?QED?BBk0Ejm53>tuMaZNVN=#iO_ie zZ5@#jE5+gY8u1mH^o|N^gtx*Pne$RTX?*6a^cb0!V6^JYX<7E{bbEG;d48&0LOz(I z#gb@jCAo>lwvs<8GEAHw%m&#~&?MYH3o1%7#`)(Vl9guCN$9T9I`S=Qzglj;eX4O( zB^kX{Nl_J_a(n_?Yes_o5-H(3tI>TOYtr2FGat)u*n31&1xV>CfiG(&T= zKufejG+HADZO|6&&>lab17gt;ozNLw&=o(U8{!a;?&yJ@=!M=$Kq8XR2fyG~^hH1P z$8Q*bff$6ruwV#=Vi<-a87UZnkr;*17=u)d#W+}D!+1X;TC77J)*~MU z*Z>#)L?MbG*oaNoj4jxTVr;{9>_7>2q7=KZ8+))9`>-Dea1e)3hQl}lH;&>MJUEUM zI0-LK;WWn+{PXFa2NMbiTikfhj@g? Sc!H;RhUa+UEq_z>dcgnF)5I$P 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;