From f5c3d22549cfd7fa238d50efdf9851ef272fe814 Mon Sep 17 00:00:00 2001 From: "Jack Boswell (boswelja)" Date: Fri, 23 Oct 2020 15:20:16 +1300 Subject: [PATCH 1/6] Add some extra log output --- lib/edits.js | 3 +++ src/edits.ts | 3 +++ 2 files changed, 6 insertions(+) diff --git a/lib/edits.js b/lib/edits.js index 1b9c72c3..170b72c8 100644 --- a/lib/edits.js +++ b/lib/edits.js @@ -44,6 +44,7 @@ function uploadToPlayStore(options, releaseFiles) { releaseFiles.forEach((releaseFile) => __awaiter(this, void 0, void 0, function* () { core.debug(`Uploading ${releaseFile}`); yield uploadRelease(appEdit.data, options, releaseFile).catch(reason => { + core.setFailed(reason); return Promise.reject(reason); }); })); @@ -70,10 +71,12 @@ function uploadRelease(appEdit, options, releaseFile) { core.debug("Track is Internal app sharing, switch to special upload api"); if (releaseFile.endsWith('.apk')) { const res = yield internalSharingUploadApk(options, releaseFile); + console.log(`${releaseFile} uploaded to Internal Sharing, download it with ${res.downloadUrl}`); return Promise.resolve(res.downloadUrl); } else if (releaseFile.endsWith('.aab')) { const res = yield internalSharingUploadBundle(options, releaseFile); + console.log(`${releaseFile} uploaded to Internal Sharing, download it with ${res.downloadUrl}`); return Promise.resolve(res.downloadUrl); } else { diff --git a/src/edits.ts b/src/edits.ts index 643e94ca..b1760192 100644 --- a/src/edits.ts +++ b/src/edits.ts @@ -36,6 +36,7 @@ export async function uploadToPlayStore(options: EditOptions, releaseFiles: stri releaseFiles.forEach(async releaseFile => { core.debug(`Uploading ${releaseFile}`) await uploadRelease(appEdit.data, options, releaseFile).catch(reason => { + core.setFailed(reason) return Promise.reject(reason) }) }) @@ -61,9 +62,11 @@ async function uploadRelease(appEdit: AppEdit, options: EditOptions, releaseFile core.debug("Track is Internal app sharing, switch to special upload api") if (releaseFile.endsWith('.apk')) { const res = await internalSharingUploadApk(options, releaseFile) + console.log(`${releaseFile} uploaded to Internal Sharing, download it with ${res.downloadUrl}`) return Promise.resolve(res.downloadUrl) } else if (releaseFile.endsWith('.aab')) { const res = await internalSharingUploadBundle(options, releaseFile) + console.log(`${releaseFile} uploaded to Internal Sharing, download it with ${res.downloadUrl}`) return Promise.resolve(res.downloadUrl) } else { core.setFailed(`${releaseFile} is invalid`) From 87accbcd4146d863890bcaaff480eae3a88d48eb Mon Sep 17 00:00:00 2001 From: "Jack Boswell (boswelja)" Date: Fri, 23 Oct 2020 16:00:18 +1300 Subject: [PATCH 2/6] Add releases to the edit track correctly --- lib/edits.js | 22 +++++++++++----------- src/edits.ts | 24 ++++++++++++------------ 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/lib/edits.js b/lib/edits.js index 170b72c8..4350deb5 100644 --- a/lib/edits.js +++ b/lib/edits.js @@ -41,13 +41,16 @@ function uploadToPlayStore(options, releaseFiles) { auth: options.auth, packageName: options.applicationId }); + var versionCodes = new Array(); releaseFiles.forEach((releaseFile) => __awaiter(this, void 0, void 0, function* () { core.debug(`Uploading ${releaseFile}`); - yield uploadRelease(appEdit.data, options, releaseFile).catch(reason => { + const versionCode = yield uploadRelease(appEdit.data, options, releaseFile).catch(reason => { core.setFailed(reason); return Promise.reject(reason); }); + versionCodes.push(versionCode); })); + const track = trackVersionCode(appEdit.data, options, versionCodes); const res = yield androidPublisher.edits.commit({ auth: options.auth, editId: appEdit.data.id, @@ -72,12 +75,12 @@ function uploadRelease(appEdit, options, releaseFile) { if (releaseFile.endsWith('.apk')) { const res = yield internalSharingUploadApk(options, releaseFile); console.log(`${releaseFile} uploaded to Internal Sharing, download it with ${res.downloadUrl}`); - return Promise.resolve(res.downloadUrl); + return Promise.resolve(undefined); } else if (releaseFile.endsWith('.aab')) { const res = yield internalSharingUploadBundle(options, releaseFile); console.log(`${releaseFile} uploaded to Internal Sharing, download it with ${res.downloadUrl}`); - return Promise.resolve(res.downloadUrl); + return Promise.resolve(undefined); } else { core.setFailed(`${releaseFile} is invalid`); @@ -89,16 +92,15 @@ function uploadRelease(appEdit, options, releaseFile) { core.setFailed(`Track "${options.track}" could not be found `); return Promise.reject(`No track found for "${options.track}"`); } - let track = undefined; if (releaseFile.endsWith('.apk')) { const apk = yield uploadApk(appEdit, options, releaseFile); yield uploadMappingFile(appEdit, apk.versionCode, options); - track = yield trackVersionCode(appEdit, options, apk.versionCode); + return Promise.resolve(apk.versionCode); } else if (releaseFile.endsWith('.aab')) { const bundle = yield uploadBundle(appEdit, options, releaseFile); yield uploadMappingFile(appEdit, bundle.versionCode, options); - track = yield trackVersionCode(appEdit, options, bundle.versionCode); + return Promise.resolve(bundle.versionCode); } else { core.setFailed(`${releaseFile} is invalid`); @@ -116,7 +118,7 @@ function getAllTracks(appEdit, options) { return res.data.tracks; }); } -function trackVersionCode(appEdit, options, versionCode) { +function trackVersionCode(appEdit, options, versionCodes) { return __awaiter(this, void 0, void 0, function* () { let status; if (options.userFraction != undefined) { @@ -125,7 +127,7 @@ function trackVersionCode(appEdit, options, versionCode) { else { status = 'completed'; } - core.debug(`Creating Track Release for Edit(${appEdit.id}) for Track(${options.track}) with a UserFraction(${options.userFraction}) and VersionCode(${versionCode})`); + core.debug(`Creating Track Release for Edit(${appEdit.id}) for Track(${options.track}) with a UserFraction(${options.userFraction}) and VersionCodes(${versionCodes})`); const res = yield androidPublisher.edits.tracks .update({ auth: options.auth, @@ -139,9 +141,7 @@ function trackVersionCode(appEdit, options, versionCode) { userFraction: options.userFraction, status: status, releaseNotes: yield whatsnew_1.readLocalizedReleaseNotes(options.whatsNewDir), - versionCodes: [ - versionCode.toString() - ] + versionCodes: versionCodes.map(x => x.toString()) } ] } diff --git a/src/edits.ts b/src/edits.ts index b1760192..443536d5 100644 --- a/src/edits.ts +++ b/src/edits.ts @@ -33,14 +33,17 @@ export async function uploadToPlayStore(options: EditOptions, releaseFiles: stri packageName: options.applicationId }); + var versionCodes = new Array() releaseFiles.forEach(async releaseFile => { core.debug(`Uploading ${releaseFile}`) - await uploadRelease(appEdit.data, options, releaseFile).catch(reason => { + const versionCode = await uploadRelease(appEdit.data, options, releaseFile).catch(reason => { core.setFailed(reason) return Promise.reject(reason) }) + versionCodes.push(versionCode!) }) + const track = trackVersionCode(appEdit.data, options, versionCodes) const res = await androidPublisher.edits.commit({ auth: options.auth, editId: appEdit.data.id!, @@ -56,18 +59,18 @@ export async function uploadToPlayStore(options: EditOptions, releaseFiles: stri } } -async function uploadRelease(appEdit: AppEdit, options: EditOptions, releaseFile: string): Promise { +async function uploadRelease(appEdit: AppEdit, options: EditOptions, releaseFile: string): Promise { // Check the 'track' for 'internalsharing', if so switch to a non-track api if (options.track === 'internalsharing'){ core.debug("Track is Internal app sharing, switch to special upload api") if (releaseFile.endsWith('.apk')) { const res = await internalSharingUploadApk(options, releaseFile) console.log(`${releaseFile} uploaded to Internal Sharing, download it with ${res.downloadUrl}`) - return Promise.resolve(res.downloadUrl) + return Promise.resolve(undefined) } else if (releaseFile.endsWith('.aab')) { const res = await internalSharingUploadBundle(options, releaseFile) console.log(`${releaseFile} uploaded to Internal Sharing, download it with ${res.downloadUrl}`) - return Promise.resolve(res.downloadUrl) + return Promise.resolve(undefined) } else { core.setFailed(`${releaseFile} is invalid`) return Promise.reject(`${releaseFile} is invalid`) @@ -80,15 +83,14 @@ async function uploadRelease(appEdit: AppEdit, options: EditOptions, releaseFile return Promise.reject(`No track found for "${options.track}"`) } - let track: Track | undefined = undefined; if (releaseFile.endsWith('.apk')) { const apk = await uploadApk(appEdit, options, releaseFile); await uploadMappingFile(appEdit, apk.versionCode!, options); - track = await trackVersionCode(appEdit, options, apk.versionCode!) + return Promise.resolve(apk.versionCode) } else if (releaseFile.endsWith('.aab')) { const bundle = await uploadBundle(appEdit, options, releaseFile); await uploadMappingFile(appEdit, bundle.versionCode!, options); - track = await trackVersionCode(appEdit, options, bundle.versionCode!) + return Promise.resolve(bundle.versionCode) } else { core.setFailed(`${releaseFile} is invalid`) return Promise.reject(`${releaseFile} is invalid`) @@ -105,7 +107,7 @@ async function getAllTracks(appEdit: AppEdit, options: EditOptions): Promise { +async function trackVersionCode(appEdit: AppEdit, options: EditOptions, versionCodes: number[]): Promise { let status: string; if (options.userFraction != undefined) { status = 'inProgress' @@ -113,7 +115,7 @@ async function trackVersionCode(appEdit: AppEdit, options: EditOptions, versionC status = 'completed' } - core.debug(`Creating Track Release for Edit(${appEdit.id}) for Track(${options.track}) with a UserFraction(${options.userFraction}) and VersionCode(${versionCode})`); + core.debug(`Creating Track Release for Edit(${appEdit.id}) for Track(${options.track}) with a UserFraction(${options.userFraction}) and VersionCodes(${versionCodes})`); const res = await androidPublisher.edits.tracks .update({ auth: options.auth, @@ -127,9 +129,7 @@ async function trackVersionCode(appEdit: AppEdit, options: EditOptions, versionC userFraction: options.userFraction, status: status, releaseNotes: await readLocalizedReleaseNotes(options.whatsNewDir), - versionCodes: [ - versionCode.toString() - ] + versionCodes: versionCodes.map(x => x.toString()) } ] } From fc19501036d6580d4ce38ae7f489fe635784259a Mon Sep 17 00:00:00 2001 From: "Jack Boswell (boswelja)" Date: Fri, 23 Oct 2020 16:12:01 +1300 Subject: [PATCH 3/6] Move track validation to a separate function --- lib/edits.js | 17 ++++++++++------- src/edits.ts | 48 +++++++++++++++++++++++++----------------------- 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/lib/edits.js b/lib/edits.js index 4350deb5..42470d89 100644 --- a/lib/edits.js +++ b/lib/edits.js @@ -41,6 +41,10 @@ function uploadToPlayStore(options, releaseFiles) { auth: options.auth, packageName: options.applicationId }); + yield validateSelectedTrack(appEdit.data, options).catch(reason => { + core.setFailed(reason); + return Promise.reject(reason); + }); var versionCodes = new Array(); releaseFiles.forEach((releaseFile) => __awaiter(this, void 0, void 0, function* () { core.debug(`Uploading ${releaseFile}`); @@ -87,11 +91,6 @@ function uploadRelease(appEdit, options, releaseFile) { return Promise.reject(`${releaseFile} is invalid`); } } - const allTracks = yield getAllTracks(appEdit, options); - if (allTracks == undefined || allTracks.find(value => value.track == options.track) == undefined) { - core.setFailed(`Track "${options.track}" could not be found `); - return Promise.reject(`No track found for "${options.track}"`); - } if (releaseFile.endsWith('.apk')) { const apk = yield uploadApk(appEdit, options, releaseFile); yield uploadMappingFile(appEdit, apk.versionCode, options); @@ -108,14 +107,18 @@ function uploadRelease(appEdit, options, releaseFile) { } }); } -function getAllTracks(appEdit, options) { +function validateSelectedTrack(appEdit, options) { return __awaiter(this, void 0, void 0, function* () { const res = yield androidPublisher.edits.tracks.list({ auth: options.auth, editId: appEdit.id, packageName: options.applicationId }); - return res.data.tracks; + const allTracks = res.data.tracks; + if (allTracks == undefined || allTracks.find(value => value.track == options.track) == undefined) { + core.setFailed(`Track "${options.track}" could not be found `); + return Promise.reject(`No track found for "${options.track}"`); + } }); } function trackVersionCode(appEdit, options, versionCodes) { diff --git a/src/edits.ts b/src/edits.ts index 443536d5..bb5ac36a 100644 --- a/src/edits.ts +++ b/src/edits.ts @@ -33,17 +33,22 @@ export async function uploadToPlayStore(options: EditOptions, releaseFiles: stri packageName: options.applicationId }); - var versionCodes = new Array() - releaseFiles.forEach(async releaseFile => { - core.debug(`Uploading ${releaseFile}`) - const versionCode = await uploadRelease(appEdit.data, options, releaseFile).catch(reason => { - core.setFailed(reason) - return Promise.reject(reason) - }) - versionCodes.push(versionCode!) - }) + await validateSelectedTrack(appEdit.data, options).catch(reason => { + core.setFailed(reason); + return Promise.reject(reason); + }); - const track = trackVersionCode(appEdit.data, options, versionCodes) + var versionCodes = new Array(); + releaseFiles.forEach(async releaseFile => { + core.debug(`Uploading ${releaseFile}`); + const versionCode = await uploadRelease(appEdit.data, options, releaseFile).catch(reason => { + core.setFailed(reason); + return Promise.reject(reason); + }); + versionCodes.push(versionCode!); + }); + + const track = trackVersionCode(appEdit.data, options, versionCodes); const res = await androidPublisher.edits.commit({ auth: options.auth, editId: appEdit.data.id!, @@ -51,11 +56,11 @@ export async function uploadToPlayStore(options: EditOptions, releaseFiles: stri }); if (res.data.id != null) { - core.debug(`Successfully committed ${res.data.id}`) - return Promise.resolve(res.data.id!) + core.debug(`Successfully committed ${res.data.id}`); + return Promise.resolve(res.data.id!); } else { - core.setFailed(`Error ${res.status}: ${res.statusText}`) - return Promise.reject(res.status) + core.setFailed(`Error ${res.status}: ${res.statusText}`); + return Promise.reject(res.status); } } @@ -77,12 +82,6 @@ async function uploadRelease(appEdit: AppEdit, options: EditOptions, releaseFile } } - const allTracks = await getAllTracks(appEdit!, options); - if (allTracks == undefined || allTracks.find(value => value.track == options.track) == undefined) { - core.setFailed(`Track "${options.track}" could not be found `) - return Promise.reject(`No track found for "${options.track}"`) - } - if (releaseFile.endsWith('.apk')) { const apk = await uploadApk(appEdit, options, releaseFile); await uploadMappingFile(appEdit, apk.versionCode!, options); @@ -97,14 +96,17 @@ async function uploadRelease(appEdit: AppEdit, options: EditOptions, releaseFile } } -async function getAllTracks(appEdit: AppEdit, options: EditOptions): Promise { +async function validateSelectedTrack(appEdit: AppEdit, options: EditOptions): Promise { const res = await androidPublisher.edits.tracks.list({ auth: options.auth, editId: appEdit.id!, packageName: options.applicationId }); - - return res.data.tracks + const allTracks = res.data.tracks; + if (allTracks == undefined || allTracks.find(value => value.track == options.track) == undefined) { + core.setFailed(`Track "${options.track}" could not be found `) + return Promise.reject(`No track found for "${options.track}"`) + } } async function trackVersionCode(appEdit: AppEdit, options: EditOptions, versionCodes: number[]): Promise { From 32ecfee3156c5e3896088e6c87da395c80044fc3 Mon Sep 17 00:00:00 2001 From: "Jack Boswell (boswelja)" Date: Fri, 23 Oct 2020 16:15:51 +1300 Subject: [PATCH 4/6] Rename trackVersionCode to addReleasesToTrack I feel this better describes what the function does --- lib/edits.js | 4 ++-- src/edits.ts | 22 +++++++++++----------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/lib/edits.js b/lib/edits.js index 42470d89..efc69c51 100644 --- a/lib/edits.js +++ b/lib/edits.js @@ -54,7 +54,7 @@ function uploadToPlayStore(options, releaseFiles) { }); versionCodes.push(versionCode); })); - const track = trackVersionCode(appEdit.data, options, versionCodes); + const track = addReleasesToTrack(appEdit.data, options, versionCodes); const res = yield androidPublisher.edits.commit({ auth: options.auth, editId: appEdit.data.id, @@ -121,7 +121,7 @@ function validateSelectedTrack(appEdit, options) { } }); } -function trackVersionCode(appEdit, options, versionCodes) { +function addReleasesToTrack(appEdit, options, versionCodes) { return __awaiter(this, void 0, void 0, function* () { let status; if (options.userFraction != undefined) { diff --git a/src/edits.ts b/src/edits.ts index bb5ac36a..0bff373b 100644 --- a/src/edits.ts +++ b/src/edits.ts @@ -48,7 +48,7 @@ export async function uploadToPlayStore(options: EditOptions, releaseFiles: stri versionCodes.push(versionCode!); }); - const track = trackVersionCode(appEdit.data, options, versionCodes); + const track = addReleasesToTrack(appEdit.data, options, versionCodes); const res = await androidPublisher.edits.commit({ auth: options.auth, editId: appEdit.data.id!, @@ -85,14 +85,14 @@ async function uploadRelease(appEdit: AppEdit, options: EditOptions, releaseFile if (releaseFile.endsWith('.apk')) { const apk = await uploadApk(appEdit, options, releaseFile); await uploadMappingFile(appEdit, apk.versionCode!, options); - return Promise.resolve(apk.versionCode) + return Promise.resolve(apk.versionCode); } else if (releaseFile.endsWith('.aab')) { const bundle = await uploadBundle(appEdit, options, releaseFile); await uploadMappingFile(appEdit, bundle.versionCode!, options); - return Promise.resolve(bundle.versionCode) + return Promise.resolve(bundle.versionCode); } else { - core.setFailed(`${releaseFile} is invalid`) - return Promise.reject(`${releaseFile} is invalid`) + core.setFailed(`${releaseFile} is invalid`); + return Promise.reject(`${releaseFile} is invalid`); } } @@ -104,17 +104,17 @@ async function validateSelectedTrack(appEdit: AppEdit, options: EditOptions): Pr }); const allTracks = res.data.tracks; if (allTracks == undefined || allTracks.find(value => value.track == options.track) == undefined) { - core.setFailed(`Track "${options.track}" could not be found `) - return Promise.reject(`No track found for "${options.track}"`) + core.setFailed(`Track "${options.track}" could not be found `); + return Promise.reject(`No track found for "${options.track}"`); } } -async function trackVersionCode(appEdit: AppEdit, options: EditOptions, versionCodes: number[]): Promise { +async function addReleasesToTrack(appEdit: AppEdit, options: EditOptions, versionCodes: number[]): Promise { let status: string; if (options.userFraction != undefined) { - status = 'inProgress' + status = 'inProgress'; } else { - status = 'completed' + status = 'completed'; } core.debug(`Creating Track Release for Edit(${appEdit.id}) for Track(${options.track}) with a UserFraction(${options.userFraction}) and VersionCodes(${versionCodes})`); @@ -137,7 +137,7 @@ async function trackVersionCode(appEdit: AppEdit, options: EditOptions, versionC } }); - return res.data + return res.data; } async function uploadMappingFile(appEdit: AppEdit, versionCode: number, options: EditOptions) { From 7774099a1b7f49c72917ed98eae8f6e57df78ff3 Mon Sep 17 00:00:00 2001 From: "Jack Boswell (boswelja)" Date: Fri, 23 Oct 2020 16:26:01 +1300 Subject: [PATCH 5/6] Separate internal sharing uploading into it's own function Also skip unneeded setup when uploading to internal sharing --- lib/edits.js | 103 +++++++++++++++++++++++++++++---------------------- src/edits.ts | 100 +++++++++++++++++++++++++++---------------------- 2 files changed, 113 insertions(+), 90 deletions(-) diff --git a/lib/edits.js b/lib/edits.js index efc69c51..eb907305 100644 --- a/lib/edits.js +++ b/lib/edits.js @@ -37,60 +37,73 @@ const whatsnew_1 = require("./whatsnew"); const androidPublisher = googleapis_1.google.androidpublisher('v3'); function uploadToPlayStore(options, releaseFiles) { return __awaiter(this, void 0, void 0, function* () { - const appEdit = yield androidPublisher.edits.insert({ - auth: options.auth, - packageName: options.applicationId - }); - yield validateSelectedTrack(appEdit.data, options).catch(reason => { - core.setFailed(reason); - return Promise.reject(reason); - }); - var versionCodes = new Array(); - releaseFiles.forEach((releaseFile) => __awaiter(this, void 0, void 0, function* () { - core.debug(`Uploading ${releaseFile}`); - const versionCode = yield uploadRelease(appEdit.data, options, releaseFile).catch(reason => { + if (options.track === 'internalappsharing') { + core.debug("Track is Internal app sharing, switch to special upload api"); + releaseFiles.forEach((releaseFile) => __awaiter(this, void 0, void 0, function* () { + core.debug(`Uploading ${releaseFile}`); + yield uploadInternalSharingRelease(options, releaseFile).catch(reason => { + core.setFailed(reason); + return Promise.reject(reason); + }); + })); + } + else { + const appEdit = yield androidPublisher.edits.insert({ + auth: options.auth, + packageName: options.applicationId + }); + yield validateSelectedTrack(appEdit.data, options).catch(reason => { core.setFailed(reason); return Promise.reject(reason); }); - versionCodes.push(versionCode); - })); - const track = addReleasesToTrack(appEdit.data, options, versionCodes); - const res = yield androidPublisher.edits.commit({ - auth: options.auth, - editId: appEdit.data.id, - packageName: options.applicationId - }); - if (res.data.id != null) { - core.debug(`Successfully committed ${res.data.id}`); - return Promise.resolve(res.data.id); - } - else { - core.setFailed(`Error ${res.status}: ${res.statusText}`); - return Promise.reject(res.status); + // Check the 'track' for 'internalsharing', if so switch to a non-track api + var versionCodes = new Array(); + releaseFiles.forEach((releaseFile) => __awaiter(this, void 0, void 0, function* () { + core.debug(`Uploading ${releaseFile}`); + const versionCode = yield uploadRelease(appEdit.data, options, releaseFile).catch(reason => { + core.setFailed(reason); + return Promise.reject(reason); + }); + versionCodes.push(versionCode); + })); + const track = addReleasesToTrack(appEdit.data, options, versionCodes); + const res = yield androidPublisher.edits.commit({ + auth: options.auth, + editId: appEdit.data.id, + packageName: options.applicationId + }); + if (res.data.id != null) { + core.debug(`Successfully committed ${res.data.id}`); + return Promise.resolve(res.data.id); + } + else { + core.setFailed(`Error ${res.status}: ${res.statusText}`); + return Promise.reject(res.status); + } } }); } exports.uploadToPlayStore = uploadToPlayStore; +function uploadInternalSharingRelease(options, releaseFile) { + return __awaiter(this, void 0, void 0, function* () { + if (releaseFile.endsWith('.apk')) { + const res = yield internalSharingUploadApk(options, releaseFile); + console.log(`${releaseFile} uploaded to Internal Sharing, download it with ${res.downloadUrl}`); + return Promise.resolve(res.downloadUrl); + } + else if (releaseFile.endsWith('.aab')) { + const res = yield internalSharingUploadBundle(options, releaseFile); + console.log(`${releaseFile} uploaded to Internal Sharing, download it with ${res.downloadUrl}`); + return Promise.resolve(res.downloadUrl); + } + else { + core.setFailed(`${releaseFile} is invalid`); + return Promise.reject(`${releaseFile} is invalid`); + } + }); +} function uploadRelease(appEdit, options, releaseFile) { return __awaiter(this, void 0, void 0, function* () { - // Check the 'track' for 'internalsharing', if so switch to a non-track api - if (options.track === 'internalsharing') { - core.debug("Track is Internal app sharing, switch to special upload api"); - if (releaseFile.endsWith('.apk')) { - const res = yield internalSharingUploadApk(options, releaseFile); - console.log(`${releaseFile} uploaded to Internal Sharing, download it with ${res.downloadUrl}`); - return Promise.resolve(undefined); - } - else if (releaseFile.endsWith('.aab')) { - const res = yield internalSharingUploadBundle(options, releaseFile); - console.log(`${releaseFile} uploaded to Internal Sharing, download it with ${res.downloadUrl}`); - return Promise.resolve(undefined); - } - else { - core.setFailed(`${releaseFile} is invalid`); - return Promise.reject(`${releaseFile} is invalid`); - } - } if (releaseFile.endsWith('.apk')) { const apk = yield uploadApk(appEdit, options, releaseFile); yield uploadMappingFile(appEdit, apk.versionCode, options); diff --git a/src/edits.ts b/src/edits.ts index 0bff373b..d517c92c 100644 --- a/src/edits.ts +++ b/src/edits.ts @@ -28,60 +28,70 @@ export interface EditOptions { } export async function uploadToPlayStore(options: EditOptions, releaseFiles: string[]): Promise { - const appEdit = await androidPublisher.edits.insert({ - auth: options.auth, - packageName: options.applicationId - }); - - await validateSelectedTrack(appEdit.data, options).catch(reason => { - core.setFailed(reason); - return Promise.reject(reason); - }); - - var versionCodes = new Array(); - releaseFiles.forEach(async releaseFile => { - core.debug(`Uploading ${releaseFile}`); - const versionCode = await uploadRelease(appEdit.data, options, releaseFile).catch(reason => { + if (options.track === 'internalappsharing') { + core.debug("Track is Internal app sharing, switch to special upload api") + releaseFiles.forEach(async releaseFile => { + core.debug(`Uploading ${releaseFile}`); + await uploadInternalSharingRelease(options, releaseFile).catch(reason => { + core.setFailed(reason); + return Promise.reject(reason); + }); + }); + } else { + const appEdit = await androidPublisher.edits.insert({ + auth: options.auth, + packageName: options.applicationId + }); + + await validateSelectedTrack(appEdit.data, options).catch(reason => { core.setFailed(reason); return Promise.reject(reason); }); - versionCodes.push(versionCode!); - }); + + // Check the 'track' for 'internalsharing', if so switch to a non-track api + var versionCodes = new Array(); + releaseFiles.forEach(async releaseFile => { + core.debug(`Uploading ${releaseFile}`); + const versionCode = await uploadRelease(appEdit.data, options, releaseFile).catch(reason => { + core.setFailed(reason); + return Promise.reject(reason); + }); + versionCodes.push(versionCode!); + }); + + const track = addReleasesToTrack(appEdit.data, options, versionCodes); + const res = await androidPublisher.edits.commit({ + auth: options.auth, + editId: appEdit.data.id!, + packageName: options.applicationId + }); + + if (res.data.id != null) { + core.debug(`Successfully committed ${res.data.id}`); + return Promise.resolve(res.data.id!); + } else { + core.setFailed(`Error ${res.status}: ${res.statusText}`); + return Promise.reject(res.status); + } + } +} - const track = addReleasesToTrack(appEdit.data, options, versionCodes); - const res = await androidPublisher.edits.commit({ - auth: options.auth, - editId: appEdit.data.id!, - packageName: options.applicationId - }); - - if (res.data.id != null) { - core.debug(`Successfully committed ${res.data.id}`); - return Promise.resolve(res.data.id!); +async function uploadInternalSharingRelease(options: EditOptions, releaseFile: string): Promise { + if (releaseFile.endsWith('.apk')) { + const res = await internalSharingUploadApk(options, releaseFile) + console.log(`${releaseFile} uploaded to Internal Sharing, download it with ${res.downloadUrl}`) + return Promise.resolve(res.downloadUrl) + } else if (releaseFile.endsWith('.aab')) { + const res = await internalSharingUploadBundle(options, releaseFile) + console.log(`${releaseFile} uploaded to Internal Sharing, download it with ${res.downloadUrl}`) + return Promise.resolve(res.downloadUrl) } else { - core.setFailed(`Error ${res.status}: ${res.statusText}`); - return Promise.reject(res.status); + core.setFailed(`${releaseFile} is invalid`) + return Promise.reject(`${releaseFile} is invalid`) } } async function uploadRelease(appEdit: AppEdit, options: EditOptions, releaseFile: string): Promise { - // Check the 'track' for 'internalsharing', if so switch to a non-track api - if (options.track === 'internalsharing'){ - core.debug("Track is Internal app sharing, switch to special upload api") - if (releaseFile.endsWith('.apk')) { - const res = await internalSharingUploadApk(options, releaseFile) - console.log(`${releaseFile} uploaded to Internal Sharing, download it with ${res.downloadUrl}`) - return Promise.resolve(undefined) - } else if (releaseFile.endsWith('.aab')) { - const res = await internalSharingUploadBundle(options, releaseFile) - console.log(`${releaseFile} uploaded to Internal Sharing, download it with ${res.downloadUrl}`) - return Promise.resolve(undefined) - } else { - core.setFailed(`${releaseFile} is invalid`) - return Promise.reject(`${releaseFile} is invalid`) - } - } - if (releaseFile.endsWith('.apk')) { const apk = await uploadApk(appEdit, options, releaseFile); await uploadMappingFile(appEdit, apk.versionCode!, options); From 84e140d18c3f7a5b314d81074ce29af0949c8fda Mon Sep 17 00:00:00 2001 From: "Jack Boswell (boswelja)" Date: Fri, 23 Oct 2020 16:29:23 +1300 Subject: [PATCH 6/6] Update README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 869fbd1b..17c2ca5d 100644 --- a/README.md +++ b/README.md @@ -18,9 +18,9 @@ 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 -### `releaseFile` +### `releaseFiles` -**Required:** 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 ','. ### `track`