From 6bdd0b899aa627fe97ba2dddf95d0b6992078852 Mon Sep 17 00:00:00 2001 From: Drew Heavner Date: Wed, 11 Nov 2020 09:46:26 -0500 Subject: [PATCH] Added 'releaseFile' back to action to maintain backwards compatibility. --- README.md | 13 +++++++++---- action.yml | 5 ++++- lib/main.js | 30 ++++++++++++++++++++++++++---- src/main.ts | 30 +++++++++++++++++++++++++----- 4 files changed, 64 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index af2a0fe9..7099a50f 100644 --- a/README.md +++ b/README.md @@ -18,9 +18,14 @@ The service account json in plain text, provided via a secret, etc. **Required:** The package name, or Application Id, of the app you are uploading -### `releaseFiles` +### `releaseFile` +**DEPRECATED:** Please switch to using `releaseFiles` as this will be removed in the future +The Android release file to upload (.apk or .aab) -**Required:** The Android release file(s) to upload (.apk or .aab). Multiple files are separated by ','. +### `releaseFiles` +**CAVEAT:** Either this or `releaseFile` are required + +The Android release file(s) to upload (.apk or .aab). Multiple files are separated by ','. ### `releaseName` @@ -29,14 +34,14 @@ The release name. Not required to be unique. If not set, the name is generated f ### `track` **Required:** The track in which you want to assign the uploaded app. -**Default:** `production` +**Default:** `production` _Values:_ `alpha`, `beta`, `internal`, `production`, `internalsharing` ### `inAppUpdatePriority` In-app update priority of the release. All newly added APKs in the release will be considered at this priority. Can take values in the range [0, 5], with 5 the highest priority. -**Default:** `0` +**Default:** `0` _Values:_ `[0, 5]` ### `userFraction` diff --git a/action.yml b/action.yml index 21e491fb..1c15170a 100644 --- a/action.yml +++ b/action.yml @@ -14,9 +14,12 @@ inputs: packageName: description: 'The package name, or Application Id, of the app you are uploading' required: true + releaseFile: + description: 'The Android release file to upload (.apk or .aab)' + required: false releaseFiles: description: "The Android release file(s) to upload (.apk or .aab). Separated by a ',' for multiple artifacts" - required: true + required: false releaseName: description: 'The name of this release. If not set it's generated automatically from the APKs versionName' required: false diff --git a/lib/main.js b/lib/main.js index 8b831315..449be056 100644 --- a/lib/main.js +++ b/lib/main.js @@ -36,12 +36,14 @@ const auth = new google.auth.GoogleAuth({ scopes: ['https://www.googleapis.com/auth/androidpublisher'] }); function run() { + var _a, _b; return __awaiter(this, void 0, void 0, function* () { try { const serviceAccountJson = core.getInput('serviceAccountJson', { required: false }); const serviceAccountJsonRaw = core.getInput('serviceAccountJsonPlainText', { required: false }); const packageName = core.getInput('packageName', { required: true }); - const releaseFiles = core.getInput('releaseFiles', { required: true }).split(',').filter(x => x !== ''); + const releaseFile = core.getInput('releaseFile', { required: false }); + const releaseFiles = ((_b = (_a = core.getInput('releaseFiles', { required: false })) === null || _a === void 0 ? void 0 : _a.split(',')) === null || _b === void 0 ? void 0 : _b.filter(x => x !== '')) || []; const releaseName = core.getInput('releaseName', { required: false }); const track = core.getInput('track', { required: true }); const inAppUpdatePriority = core.getInput('inAppUpdatePriority', { required: false }); @@ -52,6 +54,7 @@ function run() { if (!serviceAccountJson && !serviceAccountJsonRaw) { console.log("No service account json key provided!"); core.setFailed("You must provide one of 'serviceAccountJson' or 'serviceAccountJsonPlainText' to use this action"); + return; } // If the user has provided the raw plain text via secrets, or w/e, then write to file and // set appropriate env variable for the auth @@ -89,13 +92,32 @@ function run() { else { inAppUpdatePriorityInt = undefined; } - // Check release files - for (const releaseFile of releaseFiles) { + // Check release files while maintaining backward compatibility + let validatedReleaseFiles = []; + if (releaseFiles.length == 0 && !releaseFile) { + core.setFailed(`You must provide either 'releaseFile' or 'releaseFiles' in your configuration.`); + return; + } + else if (releaseFiles.length == 0 && releaseFile) { + core.warning(`WARNING!! 'releaseFile' is deprecated and will be removed in a future release. Please migrate to 'releaseFiles'.`); core.debug(`Validating ${releaseFile} exists`); if (!fs.existsSync(releaseFile)) { core.setFailed(`Unable to find release file @ ${releaseFile}`); return; } + else { + validatedReleaseFiles = [releaseFile]; + } + } + else if (releaseFiles.length > 0) { + for (const file of releaseFiles) { + core.debug(`Validating ${file} exists`); + if (!fs.existsSync(file)) { + core.setFailed(`Unable to find release file @ ${file}`); + return; + } + } + validatedReleaseFiles = releaseFiles; } if (whatsNewDir != undefined && whatsNewDir.length > 0 && !fs.existsSync(whatsNewDir)) { core.setFailed(`Unable to find 'whatsnew' directory @ ${whatsNewDir}`); @@ -115,7 +137,7 @@ function run() { whatsNewDir: whatsNewDir, mappingFile: mappingFile, name: releaseName - }, releaseFiles); + }, validatedReleaseFiles); console.log(`Finished uploading to the Play Store`); } catch (error) { diff --git a/src/main.ts b/src/main.ts index 3c975c1c..8c5937c8 100644 --- a/src/main.ts +++ b/src/main.ts @@ -12,7 +12,10 @@ async function run() { const serviceAccountJson = core.getInput('serviceAccountJson', { required: false }); const serviceAccountJsonRaw = core.getInput('serviceAccountJsonPlainText', { required: false}); const packageName = core.getInput('packageName', { required: true }); - const releaseFiles = core.getInput('releaseFiles', { required: true }).split(',').filter(x => x !== ''); + const releaseFile = core.getInput('releaseFile', { required: false }); + const releaseFiles = core.getInput('releaseFiles', { required: false }) + ?.split(',') + ?.filter(x => x !== '') || []; const releaseName = core.getInput('releaseName', { required: false }); const track = core.getInput('track', { required: true }); const inAppUpdatePriority = core.getInput('inAppUpdatePriority', { required: false }); @@ -24,6 +27,7 @@ async function run() { if (!serviceAccountJson && !serviceAccountJsonRaw) { console.log("No service account json key provided!"); core.setFailed("You must provide one of 'serviceAccountJson' or 'serviceAccountJsonPlainText' to use this action"); + return; } // If the user has provided the raw plain text via secrets, or w/e, then write to file and @@ -65,13 +69,29 @@ async function run() { inAppUpdatePriorityInt = undefined; } - // Check release files - for (const releaseFile of releaseFiles) { + // Check release files while maintaining backward compatibility + let validatedReleaseFiles: string[] = []; + if (releaseFiles.length == 0 && !releaseFile) { + core.setFailed(`You must provide either 'releaseFile' or 'releaseFiles' in your configuration.`); + return; + } else if (releaseFiles.length == 0 && releaseFile) { + core.warning(`WARNING!! 'releaseFile' is deprecated and will be removed in a future release. Please migrate to 'releaseFiles'.`); core.debug(`Validating ${releaseFile} exists`) if (!fs.existsSync(releaseFile)) { core.setFailed(`Unable to find release file @ ${releaseFile}`); - return + return; + } else { + validatedReleaseFiles = [releaseFile]; } + } else if (releaseFiles.length > 0) { + for (const file of releaseFiles) { + core.debug(`Validating ${file} exists`) + if (!fs.existsSync(file)) { + core.setFailed(`Unable to find release file @ ${file}`); + return; + } + } + validatedReleaseFiles = releaseFiles; } if (whatsNewDir != undefined && whatsNewDir.length > 0 && !fs.existsSync(whatsNewDir)) { @@ -95,7 +115,7 @@ async function run() { whatsNewDir: whatsNewDir, mappingFile: mappingFile, name: releaseName - }, releaseFiles); + }, validatedReleaseFiles); console.log(`Finished uploading to the Play Store`) } catch (error) {