diff --git a/lib/edits.js b/lib/edits.js index 5c5032d0..1b9c72c3 100644 --- a/lib/edits.js +++ b/lib/edits.js @@ -28,66 +28,81 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.uploadRelease = void 0; +exports.uploadToPlayStore = void 0; const core = __importStar(require("@actions/core")); const fs = __importStar(require("fs")); const fs_1 = require("fs"); const googleapis_1 = require("googleapis"); const whatsnew_1 = require("./whatsnew"); const androidPublisher = googleapis_1.google.androidpublisher('v3'); -function uploadRelease(options, releaseFiles) { +function uploadToPlayStore(options, releaseFiles) { 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"); - releaseFiles.forEach((releaseFile) => __awaiter(this, void 0, void 0, function* () { - // if (releaseFile.endsWith('.apk')) { - // const res = await internalSharingUploadApk(options, releaseFile) - // return Promise.resolve(res.downloadUrl) - // } else if (releaseFile.endsWith('.aab')) { - // const res = await internalSharingUploadBundle(options, releaseFile) - // return Promise.resolve(res.downloadUrl) - // } else { - // return Promise.reject(`Unrecognized Release File`) - // } - })); - } const appEdit = yield androidPublisher.edits.insert({ auth: options.auth, packageName: options.applicationId }); - const allTracks = yield getAllTracks(appEdit.data, options); + releaseFiles.forEach((releaseFile) => __awaiter(this, void 0, void 0, function* () { + core.debug(`Uploading ${releaseFile}`); + yield uploadRelease(appEdit.data, options, releaseFile).catch(reason => { + return Promise.reject(reason); + }); + })); + 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 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); + return Promise.resolve(res.downloadUrl); + } + else if (releaseFile.endsWith('.aab')) { + const res = yield internalSharingUploadBundle(options, releaseFile); + return Promise.resolve(res.downloadUrl); + } + else { + core.setFailed(`${releaseFile} is invalid`); + 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}"`); } let track = undefined; - releaseFiles.forEach((releaseFile) => __awaiter(this, void 0, void 0, function* () { - if (releaseFile.endsWith('.apk')) { - const apk = yield uploadApk(appEdit.data, options, releaseFile); - yield uploadMappingFile(appEdit.data, apk.versionCode, options); - track = yield trackVersionCode(appEdit.data, options, apk.versionCode); - } - else if (releaseFile.endsWith('.aab')) { - const bundle = yield uploadBundle(appEdit.data, options, releaseFile); - yield uploadMappingFile(appEdit.data, bundle.versionCode, options); - track = yield trackVersionCode(appEdit.data, options, bundle.versionCode); - } - else { - return Promise.reject("Invalid release file"); - } - })); - if (track != undefined) { - const res = yield androidPublisher.edits.commit({ - auth: options.auth, - editId: appEdit.data.id, - packageName: options.applicationId - }); - core.debug(`Committed release with Id(${res.data.id}) and Track: ${track}`); + if (releaseFile.endsWith('.apk')) { + const apk = yield uploadApk(appEdit, options, releaseFile); + yield uploadMappingFile(appEdit, apk.versionCode, options); + track = yield trackVersionCode(appEdit, options, 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); + } + else { + core.setFailed(`${releaseFile} is invalid`); + return Promise.reject(`${releaseFile} is invalid`); } }); } -exports.uploadRelease = uploadRelease; function getAllTracks(appEdit, options) { return __awaiter(this, void 0, void 0, function* () { const res = yield androidPublisher.edits.tracks.list({ diff --git a/lib/main.js b/lib/main.js index 9e642230..4b0a2759 100644 --- a/lib/main.js +++ b/lib/main.js @@ -91,7 +91,7 @@ function run() { return; } const authClient = yield auth.getClient(); - const downloadUrl = yield edits_1.uploadRelease({ + const downloadUrl = yield edits_1.uploadToPlayStore({ auth: authClient, applicationId: packageName, track: track, diff --git a/src/edits.ts b/src/edits.ts index 29864034..643e94ca 100644 --- a/src/edits.ts +++ b/src/edits.ts @@ -27,57 +27,68 @@ export interface EditOptions { mappingFile?: string; } -export async function uploadRelease(options: EditOptions, releaseFiles: 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") - releaseFiles.forEach(async releaseFile => { - // if (releaseFile.endsWith('.apk')) { - // const res = await internalSharingUploadApk(options, releaseFile) - // return Promise.resolve(res.downloadUrl) - // } else if (releaseFile.endsWith('.aab')) { - // const res = await internalSharingUploadBundle(options, releaseFile) - // return Promise.resolve(res.downloadUrl) - // } else { - // return Promise.reject(`Unrecognized Release File`) - // } - }) - } - +export async function uploadToPlayStore(options: EditOptions, releaseFiles: string[]): Promise { const appEdit = await androidPublisher.edits.insert({ auth: options.auth, packageName: options.applicationId }); + + releaseFiles.forEach(async releaseFile => { + core.debug(`Uploading ${releaseFile}`) + await uploadRelease(appEdit.data, options, releaseFile).catch(reason => { + return Promise.reject(reason) + }) + }) - const allTracks = await getAllTracks(appEdit.data!, options); + 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) + } +} + +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) + return Promise.resolve(res.downloadUrl) + } else if (releaseFile.endsWith('.aab')) { + const res = await internalSharingUploadBundle(options, releaseFile) + return Promise.resolve(res.downloadUrl) + } else { + core.setFailed(`${releaseFile} is invalid`) + return Promise.reject(`${releaseFile} is invalid`) + } + } + + 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}"`) } let track: Track | undefined = undefined; - releaseFiles.forEach(async releaseFile => { - if (releaseFile.endsWith('.apk')) { - const apk = await uploadApk(appEdit.data, options, releaseFile); - await uploadMappingFile(appEdit.data, apk.versionCode!, options); - track = await trackVersionCode(appEdit.data, options, apk.versionCode!) - } else if (releaseFile.endsWith('.aab')) { - const bundle = await uploadBundle(appEdit.data, options, releaseFile); - await uploadMappingFile(appEdit.data, bundle.versionCode!, options); - track = await trackVersionCode(appEdit.data, options, bundle.versionCode!) - } else { - return Promise.reject("Invalid release file") - } - }) - - if (track != undefined) { - const res = await androidPublisher.edits.commit({ - auth: options.auth, - editId: appEdit.data.id!, - packageName: options.applicationId - }); - - core.debug(`Committed release with Id(${res.data.id}) and Track: ${track}`); + if (releaseFile.endsWith('.apk')) { + const apk = await uploadApk(appEdit, options, releaseFile); + await uploadMappingFile(appEdit, apk.versionCode!, options); + track = await trackVersionCode(appEdit, options, 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!) + } else { + core.setFailed(`${releaseFile} is invalid`) + return Promise.reject(`${releaseFile} is invalid`) } } diff --git a/src/main.ts b/src/main.ts index ef145635..80ec6932 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,6 +1,6 @@ import * as core from '@actions/core'; import * as fs from "fs"; -import {uploadRelease} from "./edits"; +import { uploadToPlayStore } from "./edits"; const {google} = require('googleapis'); const auth = new google.auth.GoogleAuth({ @@ -71,7 +71,7 @@ async function run() { const authClient = await auth.getClient(); - const downloadUrl = await uploadRelease({ + const downloadUrl = await uploadToPlayStore({ auth: authClient, applicationId: packageName, track: track,