Rewrite a portion of edits.ts

uploadRelease now specifically only uploads to an edit.
uploadToPlayStore is designed to handle multiple inputs, and commit them at the right time.
Error catching should be improved now.
This commit is contained in:
Jack Boswell (boswelja)
2020-10-20 19:27:02 +13:00
parent 640b063c96
commit 5d0e398bfb
4 changed files with 110 additions and 84 deletions

View File

@@ -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({

View File

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

View File

@@ -27,57 +27,68 @@ export interface EditOptions {
mappingFile?: string;
}
export async function uploadRelease(options: EditOptions, releaseFiles: string[]): Promise<string | undefined | null> {
// 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<string | undefined> {
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<string | undefined | null> {
// 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`)
}
}

View File

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