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
pull/471/head^2
AndrewKahr 2022-11-23 02:06:58 -07:00 committed by GitHub
parent f03bee03f6
commit 5bd589e19f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 93 additions and 13 deletions

View File

@ -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'

51
dist/index.js generated vendored
View File

@ -70,6 +70,7 @@ function runMain() {
}
// Set output
yield model_1.Output.setBuildVersion(buildParameters.buildVersion);
yield model_1.Output.setAndroidVersionCode(buildParameters.androidVersionCode);
}
catch (error) {
core.setFailed(error.message);
@ -6656,6 +6657,11 @@ class Output {
yield core.setOutput('buildVersion', buildVersion);
});
}
static setAndroidVersionCode(androidVersionCode) {
return __awaiter(this, void 0, void 0, function* () {
yield core.setOutput('androidVersionCode', androidVersionCode);
});
}
}
exports["default"] = Output;
@ -6729,6 +6735,7 @@ class PlatformSetup {
let servicesConfig = fs_1.default.readFileSync(servicesConfigPathTemplate).toString();
servicesConfig = servicesConfig.replace('%URL%', buildParameters.unityLicensingServer);
fs_1.default.writeFileSync(servicesConfigPath, servicesConfig);
platform_setup_1.SetupAndroid.setup(buildParameters);
}
}
exports["default"] = PlatformSetup;
@ -6745,11 +6752,53 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.SetupMac = exports.SetupWindows = void 0;
exports.SetupAndroid = exports.SetupMac = exports.SetupWindows = void 0;
const setup_windows_1 = __importDefault(__nccwpck_require__(37449));
exports.SetupWindows = setup_windows_1.default;
const setup_mac_1 = __importDefault(__nccwpck_require__(22466));
exports.SetupMac = setup_mac_1.default;
const setup_android_1 = __importDefault(__nccwpck_require__(45142));
exports.SetupAndroid = setup_android_1.default;
/***/ }),
/***/ 45142:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
const fs_1 = __importDefault(__nccwpck_require__(57147));
const path_1 = __importDefault(__nccwpck_require__(71017));
class SetupAndroid {
static setup(buildParameters) {
return __awaiter(this, void 0, void 0, function* () {
const { targetPlatform, androidKeystoreBase64, androidKeystoreName, projectPath } = buildParameters;
if (targetPlatform === 'Android' && androidKeystoreBase64 !== '' && androidKeystoreName !== '') {
SetupAndroid.setupAndroidRun(androidKeystoreBase64, androidKeystoreName, projectPath);
}
});
}
static setupAndroidRun(androidKeystoreBase64, androidKeystoreName, projectPath) {
const decodedKeystore = Buffer.from(androidKeystoreBase64, 'base64').toString('binary');
const githubWorkspace = process.env.GITHUB_WORKSPACE || '';
fs_1.default.writeFileSync(path_1.default.join(githubWorkspace, projectPath, androidKeystoreName), decodedKeystore, 'binary');
}
}
exports["default"] = SetupAndroid;
/***/ }),

2
dist/index.js.map generated vendored

File diff suppressed because one or more lines are too long

View File

@ -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/*)"

View File

@ -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);
}

View File

@ -7,3 +7,11 @@ describe('Output', () => {
});
});
});
describe('Output', () => {
describe('setAndroidVersionCode', () => {
it('does not throw', async () => {
await expect(Output.setAndroidVersionCode('1000')).resolves.not.toThrow();
});
});
});

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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 };

View File

@ -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;