From 5bd589e19fd9307a5ac3b294e47ccbba7426e51b Mon Sep 17 00:00:00 2001 From: AndrewKahr <22359829+AndrewKahr@users.noreply.github.com> Date: Wed, 23 Nov 2022 02:06:58 -0700 Subject: [PATCH] feat: Android updates for Windows and androidVersionCode output (#478) * Create android keystore on windows, output android version code * Add androidVersionCode output test * Move android keystore decode logic to TS --- action.yml | 2 ++ dist/index.js | Bin 21967718 -> 21970247 bytes dist/index.js.map | Bin 16361461 -> 16364287 bytes dist/platforms/ubuntu/steps/build.sh | 10 +--------- src/index.ts | 1 + src/model/output.test.ts | 8 ++++++++ src/model/output.ts | 4 ++++ src/model/platform-setup.ts | 4 +++- src/model/platform-setup/index.ts | 3 ++- src/model/platform-setup/setup-android.ts | 21 +++++++++++++++++++++ 10 files changed, 42 insertions(+), 11 deletions(-) create mode 100644 src/model/platform-setup/setup-android.ts diff --git a/action.yml b/action.yml index 64effd18..68f93923 100644 --- a/action.yml +++ b/action.yml @@ -188,6 +188,8 @@ outputs: description: 'The Persistent Volume (PV) where the build artifacts have been stored by Kubernetes' buildVersion: description: 'The generated version used for the Unity build' + androidVersionCode: + description: 'The generated versionCode used for the Android Unity build' branding: icon: 'box' color: 'gray-dark' diff --git a/dist/index.js b/dist/index.js index 4ffd8876c61a9948ff988776ff9e62a3665970be..ec837da4fd6abd012b65041c0af41fad758c4c0b 100644 GIT binary patch delta 2299 zcmburj(W)I@nMYwz)kkNi@rh)XZwt zW7%QZq1mCCE%89Dw8KiM?6fk=E-O1NJ3rrE3dGCpB z<_!^RxGrE$t@61&mD4gE#Uaff(i}mLmhW{3d=>7=o3e z?XlU_aNqPU`tn89E%b$Z5-hs&xFI%jXtxry>WlX&9b=ld8g8&8=@YjoYNTqvGSy&i z`dH0VBXtc*oFTr<=M8EqdkgueHLas>JZ$V~&(6&1mywZc_RRJB0$R{fBCnhpe&&cB zjY?NjmJEqBtTY~o(reZzbJ|q8f(_PG*KV(iEp}GAv~pjdO3lm5Q*BNAvZ-ll%}=hT$ZO3# zmsQjh-PzXEq4@N@%6*^w!jnSY^#8tT-C&AI)~9bZCKmqx$u#{~oRZ{pd&>CPx&J;o zF0vq0UhWAv$^*Wtf7_$2^sf`PWjHini595v&PcbFR(M^3YMY*%t8@zYn313l?PZE- zJ*9Y3QHe9ZaD-Y@!+Gh^`;}BZK07LLT!l6>R64~Mm>u-H%Feu(W^XRTuAa45yLxib zT?wWX^QrUIGgrBjY7aIlFd-T-Xn~e6!-7_@A{MO?hc;-7cqAYZGFLmaM+bC7Cv-*^ zB%>=-q@WwRqX$xv1{>0mfu86EJ9@)`KIn@~^h1ASAsaaufPolzL)iz1A}cuYVsoS2A7D8acn50fzk=i>rQ#f7*C7vmC4!*sY%iZZz2 zK{;k%CMqxsvr&mEc;SN|a}Yof8bY`fmtiidaXIFp2J^81S70Ho#8p^?tFai@pcdC+ z36^3RuETO%j}^E9H{vFQaWihgt?myn_8`KqFqoYj_<8@CM$*TX-Aq;9VTVdw3ro;1E8Q+$Tc@db|J zOMHc|aSY$!TYQJ_@dJLuar}gzaRR^KSNw+G@yD`*jfNGF7$s2>MPiafOJXD~BrPRo ziAB;%VwJ>7T1(<2Z6s|a@sb2dq9jSuPSRe|LDEsuNzz%;MUpJ(Dp4gVl5Udjk{*&& zNt(naNta|udP;gp?2_IRhoq0BuOw5_PtsqKCCQfLNCrp-N(M;=OL8ScBzcmdl5-@( mB>9p8Nugx8WQ1g-WRzsIWQ=62q)0MOGTu^+|M z!~gmAetl2vC9|JHDgD@B|7=ob~ zhT#~2k%+}8jK&y@#W;+|1jJz?CSfwBU@E3zI^r<{GcgOZF$Z%o4|dGQ0xZNLEXEQn z#WF0%3arE`ti~Fw#X79V25iJ8Y{nLB#Wrlm4(!A(Bw#o8z=6Hkhy6H!L>xpC4&gA4 z;3$saI8NXsPT@4p;4IGJJTBlOE+HA0aRpa#4cBo4H*pKMaR+yif_u1+2Y84_c#J1_ zif2g0bG*Pyyuxd|!CSn;d!*q5KH?KT;|spx8@}TQe&QE?;}8Dg-;|^jLp&5G#i*E+ zbV_=~S#eP^C}t(2;;L8_tCC4^Q!*=Al&p%ol1<63cqlm(PsK~gsdy{7l-!Ds;;Z;6 zc@%#oK*_7*Q}Qc;N{~`ODX0`u3M)mFqDnC(SShZQP)aHxN-3qZQbq|?!j!T~xKd6j nuT)SXl!{6vrLq#KR8gubQA#zXx>7@lR%$9X!y(SZFsaRd$v|(L diff --git a/dist/index.js.map b/dist/index.js.map index fa19a7fc66c240cd228f77b39bced98c0cceab2a..cd41e3a61166161d6c47f4b08182aefbd781058a 100644 GIT binary patch delta 1965 zcmaLVdsx#|9LMozc%vZqtmSQkqz*M&R+sGRkVMVEl zM0nE5Fe@*mvP@Q{nPqm7B)eN`R7zgTu&{c1dY*c3u9P0@kJlgPdw%D0zQ1$M`IfdG zf1YUT(YQucYwac)=JblFn>c81om;Ek?hb37S8MGXEDEbD;drgpA=*#HM2MP$+7W?I z>h;>SV(^aW2!GyMO_M565`P@fo^C2l&;>_z%e!OBGC8(ppvBTBSl5 zx}Yn%p*wmY99KY%2=qiGqM$)EV$ch*&>{}K5syCTiv)jb)s<@wb+D93r!4*YQ?TW|Ya*lNs*;7Q#ZaH4) zIt&rwShGG#Y&)lq6pQjrYLS1~5GV4=B~A5ypB@qnF#7lVlHyN_$~{SuChuh;FZ6Zk zE+S)7(hO0*TGoi{rE+YTMH0=;dP!I}Cq;|VK0~~}W3}8KDUPg{6T(A@X`*(k94BsQ z)T_lvpF!8OQP!x`p-CxS@`r7b^{UuHm($~wJa%unJ1?|xy)W4~JWv=ID&!hdQ%B}1 zxla3hw@dMQ(y{}y7o$3@7E`k10sgbojSXEyMYdch+Qa2;Juh7$D!0lekw4y`5slrG zGsU)ja~pjTR}iXQq9D$Lmt;lWb*ni{w^Zv+RXltIb;~_Ux0BMPszoRqwSa zC3dfMj?G)_Qp%+C^mNG_>dGvcOuk=>RFD>{#p`fgCXNp+4 zOpfdK|E-C|EymuWa<-Hhyx6FV2lP)u{C^~fybf9FS7a~bJr(`^-`voc^5SB`%>0hk|x(c;0#Ah&d zzU#R?jfM-aq59|+8Obogj1;7zKL)^pfk?w348{;#g{v_X*I*c~#dR2t5g3W$ifQgud$*^JyvXG4&+=i)`hTCxmreg+jF%x$p5Bad6 z0EH-m9mOa?DIA!E*_eYeIN^dDbD_WkFUoNj=3zb-U?CQv0(WCE?m;E)MHQCdKHQH7 zP>l!i5SC&Ymg8ZpKn+%+7LT9~kD?x{An+JgV+|h16L=D9@e~@c4o_n}p24$t4jZr$ zo3I(r;{|NNR%}Bfe0UMt@e+2R34XkcSFjVWVi$JfHSEFb*o!ytCidYi?8n=92k+uN z96&SP$3e8<102GK_y`~46MTx#@Hr0S3w((qIErKV3a$7W-{4yu#|gCIJDkKRoW>b^ dj~{RrKcXGy@DqMU2hQUc{OUit<+nb+{{?So-9P{U delta 1163 zcmW;DcUa5;0LJm>ijHz!9l2DL>+Dtb%*sec8fJ-5nVlq?Q#dmv`YEA8C?hU@WoBkX zMz&JuO2Qf8@ekknz$RAf|I{WDf%X>jWWUBU*#aC zW~k*7F+WqSkO(C{Y6mgQOqF7)tH@EK6{T;PhX=!Wj-fu87v z-spqA=!gCo05=T8APmM3423&}VK_!$Bs?$*o*0cW7>jZ6!gzSY2fpyb1Wd#vOvV&U zg+Br?4S|@B83@8m%))F0BLtzCgSnW8`B;F32!jTT5RS!&z!F4aDVAY5R$wJoVKvrZ zEwosNC`4mDHee%k*o4j4g00ww?TEn+#3Bwm5szKijRXkTgG3}@FOsnj`*8p%NJSbB z;t&oa9Y=5!$B=oOa{k!<{SWFVzR3Up diff --git a/dist/platforms/ubuntu/steps/build.sh b/dist/platforms/ubuntu/steps/build.sh index 2e7e3909..ba9a3ad9 100755 --- a/dist/platforms/ubuntu/steps/build.sh +++ b/dist/platforms/ubuntu/steps/build.sh @@ -63,17 +63,9 @@ else fi # -# Prepare Android keystore and SDK, if needed +# Prepare Android SDK, if needed # -if [[ "$BUILD_TARGET" == "Android" && -n "$ANDROID_KEYSTORE_NAME" && -n "$ANDROID_KEYSTORE_BASE64" ]]; then - echo "Creating Android keystore." - echo "$ANDROID_KEYSTORE_BASE64" | base64 --decode > "$UNITY_PROJECT_PATH/$ANDROID_KEYSTORE_NAME" - echo "Created Android keystore." -else - echo "Not creating Android keystore." -fi - if [[ "$BUILD_TARGET" == "Android" && -n "$ANDROID_SDK_MANAGER_PARAMETERS" ]]; then echo "Updating Android SDK with parameters: $ANDROID_SDK_MANAGER_PARAMETERS" export JAVA_HOME="$(awk -F'=' '/JAVA_HOME=/{print $2}' /usr/bin/unity-editor.d/*)" diff --git a/src/index.ts b/src/index.ts index 1582d7c0..99654f20 100644 --- a/src/index.ts +++ b/src/index.ts @@ -32,6 +32,7 @@ async function runMain() { // Set output await Output.setBuildVersion(buildParameters.buildVersion); + await Output.setAndroidVersionCode(buildParameters.androidVersionCode); } catch (error) { core.setFailed((error as Error).message); } diff --git a/src/model/output.test.ts b/src/model/output.test.ts index c4fcb114..c2bf2fef 100644 --- a/src/model/output.test.ts +++ b/src/model/output.test.ts @@ -7,3 +7,11 @@ describe('Output', () => { }); }); }); + +describe('Output', () => { + describe('setAndroidVersionCode', () => { + it('does not throw', async () => { + await expect(Output.setAndroidVersionCode('1000')).resolves.not.toThrow(); + }); + }); +}); diff --git a/src/model/output.ts b/src/model/output.ts index 1e482f6e..8b6896bc 100644 --- a/src/model/output.ts +++ b/src/model/output.ts @@ -4,6 +4,10 @@ class Output { static async setBuildVersion(buildVersion) { await core.setOutput('buildVersion', buildVersion); } + + static async setAndroidVersionCode(androidVersionCode) { + await core.setOutput('androidVersionCode', androidVersionCode); + } } export default Output; diff --git a/src/model/platform-setup.ts b/src/model/platform-setup.ts index ced5b753..f60072a3 100644 --- a/src/model/platform-setup.ts +++ b/src/model/platform-setup.ts @@ -1,7 +1,7 @@ import fs from 'fs'; import * as core from '@actions/core'; import { BuildParameters } from '.'; -import { SetupMac, SetupWindows } from './platform-setup/'; +import { SetupMac, SetupWindows, SetupAndroid } from './platform-setup/'; import ValidateWindows from './platform-validation/validate-windows'; class PlatformSetup { @@ -33,6 +33,8 @@ class PlatformSetup { let servicesConfig = fs.readFileSync(servicesConfigPathTemplate).toString(); servicesConfig = servicesConfig.replace('%URL%', buildParameters.unityLicensingServer); fs.writeFileSync(servicesConfigPath, servicesConfig); + + SetupAndroid.setup(buildParameters); } } diff --git a/src/model/platform-setup/index.ts b/src/model/platform-setup/index.ts index cc2ab97b..6d68ab38 100644 --- a/src/model/platform-setup/index.ts +++ b/src/model/platform-setup/index.ts @@ -1,4 +1,5 @@ import SetupWindows from './setup-windows'; import SetupMac from './setup-mac'; +import SetupAndroid from './setup-android'; -export { SetupWindows, SetupMac }; +export { SetupWindows, SetupMac, SetupAndroid }; diff --git a/src/model/platform-setup/setup-android.ts b/src/model/platform-setup/setup-android.ts new file mode 100644 index 00000000..4a2d1668 --- /dev/null +++ b/src/model/platform-setup/setup-android.ts @@ -0,0 +1,21 @@ +import fs from 'fs'; +import path from 'path'; +import { BuildParameters } from '..'; + +class SetupAndroid { + public static async setup(buildParameters: BuildParameters) { + const { targetPlatform, androidKeystoreBase64, androidKeystoreName, projectPath } = buildParameters; + + if (targetPlatform === 'Android' && androidKeystoreBase64 !== '' && androidKeystoreName !== '') { + SetupAndroid.setupAndroidRun(androidKeystoreBase64, androidKeystoreName, projectPath); + } + } + + private static setupAndroidRun(androidKeystoreBase64: string, androidKeystoreName: string, projectPath: string) { + const decodedKeystore = Buffer.from(androidKeystoreBase64, 'base64').toString('binary'); + const githubWorkspace = process.env.GITHUB_WORKSPACE || ''; + fs.writeFileSync(path.join(githubWorkspace, projectPath, androidKeystoreName), decodedKeystore, 'binary'); + } +} + +export default SetupAndroid;