Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ba5abd87ce | ||
|
|
d4681f654d | ||
|
|
bda8b09ade | ||
|
|
ca061d798d | ||
|
|
21e00b9d69 | ||
|
|
e9a4446395 | ||
|
|
b06f374506 | ||
|
|
84d17e8c1c | ||
|
|
40448bb1bb | ||
|
|
2f949adc6e |
10
README.md
10
README.md
@@ -72,13 +72,17 @@ The mapping.txt file used to de-obfuscate your stack traces from crash reports
|
||||
|
||||
## Outputs
|
||||
|
||||
### `releaseName`
|
||||
### `internalSharingDownloadUrls`
|
||||
|
||||
The name of the release published to Google Play, which is generated on commit by default
|
||||
A JSON list containing the download urls for every release file uploaded using the `track` `internalsharing`
|
||||
|
||||
### ENV VAR: `INTERNAL_SHARING_DOWNLOAD_URLS`
|
||||
|
||||
The environment variable that is set when using the `track` `internalsharing`
|
||||
|
||||
### `internalSharingDownloadUrl`
|
||||
|
||||
The download url for an app that was uploaded using the `track` `internalsharing`
|
||||
The download url for the last release file uploaded using the `track` `internalsharing`, useful when a single release file is uploaded
|
||||
|
||||
### ENV VAR: `INTERNAL_SHARING_DOWNLOAD_URL`
|
||||
|
||||
|
||||
39
lib/edits.js
39
lib/edits.js
@@ -40,38 +40,51 @@ function uploadToPlayStore(options, releaseFiles) {
|
||||
// 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");
|
||||
let downloadUrls = [];
|
||||
for (const releaseFile of releaseFiles) {
|
||||
core.debug(`Uploading ${releaseFile}`);
|
||||
yield uploadInternalSharingRelease(options, releaseFile).catch(reason => {
|
||||
yield uploadInternalSharingRelease(options, releaseFile)
|
||||
.then(downloadUrl => {
|
||||
downloadUrls.push(downloadUrl);
|
||||
})
|
||||
.catch(reason => {
|
||||
core.setFailed(reason);
|
||||
return Promise.reject(reason);
|
||||
});
|
||||
}
|
||||
core.setOutput("internalSharingDownloadUrls", downloadUrls);
|
||||
core.exportVariable("INTERNAL_SHARING_DOWNLOAD_URLS", downloadUrls);
|
||||
}
|
||||
else {
|
||||
// Create a new Edit
|
||||
core.info(`Creating a new Edit for this release`);
|
||||
const appEdit = yield androidPublisher.edits.insert({
|
||||
auth: options.auth,
|
||||
packageName: options.applicationId
|
||||
});
|
||||
// Validate the given track
|
||||
core.info(`Validating track '${options.track}'`);
|
||||
yield validateSelectedTrack(appEdit.data, options).catch(reason => {
|
||||
core.setFailed(reason);
|
||||
return Promise.reject(reason);
|
||||
});
|
||||
// Upload artifacts to Google Play, and store their version codes
|
||||
var versionCodes = new Array();
|
||||
const versionCodes = new Array();
|
||||
for (const releaseFile of releaseFiles) {
|
||||
core.debug(`Uploading ${releaseFile}`);
|
||||
core.info(`Uploading ${releaseFile}`);
|
||||
const versionCode = yield uploadRelease(appEdit.data, options, releaseFile).catch(reason => {
|
||||
core.setFailed(reason);
|
||||
return Promise.reject(reason);
|
||||
});
|
||||
versionCodes.push(versionCode);
|
||||
}
|
||||
core.info(`Successfully uploaded ${versionCodes.length} artifacts`);
|
||||
// Add the uploaded artifacts to the Edit track
|
||||
core.info(`Adding ${versionCodes.length} artifacts to release on '${options.track}' track`);
|
||||
const track = yield addReleasesToTrack(appEdit.data, options, versionCodes);
|
||||
core.debug(`Track: ${track}`);
|
||||
// Commit the pending Edit
|
||||
core.info(`Committing the Edit`);
|
||||
const res = yield androidPublisher.edits.commit({
|
||||
auth: options.auth,
|
||||
editId: appEdit.data.id,
|
||||
@@ -79,9 +92,7 @@ function uploadToPlayStore(options, releaseFiles) {
|
||||
});
|
||||
// Simple check to see whether commit was successful
|
||||
if (res.data.id != null) {
|
||||
core.debug(`Successfully committed ${res.data.id}`);
|
||||
const name = options.name || (yield getPublishedReleaseName(res.data, options));
|
||||
core.setOutput("releaseName", name);
|
||||
core.info(`Successfully committed ${res.data.id}`);
|
||||
return Promise.resolve(res.data.id);
|
||||
}
|
||||
else {
|
||||
@@ -96,11 +107,15 @@ function uploadInternalSharingRelease(options, releaseFile) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
if (releaseFile.endsWith('.apk')) {
|
||||
const res = yield internalSharingUploadApk(options, releaseFile);
|
||||
core.setOutput("internalSharingDownloadUrl", res.downloadUrl);
|
||||
core.exportVariable("INTERNAL_SHARING_DOWNLOAD_URL", res.downloadUrl);
|
||||
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);
|
||||
core.setOutput("internalSharingDownloadUrl", res.downloadUrl);
|
||||
core.exportVariable("INTERNAL_SHARING_DOWNLOAD_URL", res.downloadUrl);
|
||||
console.log(`${releaseFile} uploaded to Internal Sharing, download it with ${res.downloadUrl}`);
|
||||
return Promise.resolve(res.downloadUrl);
|
||||
}
|
||||
@@ -251,15 +266,3 @@ function uploadBundle(appEdit, options, bundleReleaseFile) {
|
||||
return res.data;
|
||||
});
|
||||
}
|
||||
function getPublishedReleaseName(appEdit, options) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const track = yield androidPublisher.edits.tracks.get({
|
||||
auth: options.auth,
|
||||
packageName: options.applicationId,
|
||||
editId: appEdit.id,
|
||||
track: options.track
|
||||
});
|
||||
const release = track.data.releases[0]; // We only ever create one release, so grab the first one
|
||||
return release.name;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -128,7 +128,7 @@ function run() {
|
||||
return;
|
||||
}
|
||||
const authClient = yield auth.getClient();
|
||||
yield edits_1.uploadToPlayStore({
|
||||
const result = yield edits_1.uploadToPlayStore({
|
||||
auth: authClient,
|
||||
applicationId: packageName,
|
||||
track: track,
|
||||
@@ -138,7 +138,7 @@ function run() {
|
||||
mappingFile: mappingFile,
|
||||
name: releaseName
|
||||
}, validatedReleaseFiles);
|
||||
console.log(`Finished uploading to the Play Store`);
|
||||
console.log(`Finished uploading to the Play Store: ${result}`);
|
||||
}
|
||||
catch (error) {
|
||||
core.setFailed(error.message);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "upload-google-play",
|
||||
"version": "1.0.9",
|
||||
"version": "1.0.10",
|
||||
"private": true,
|
||||
"description": "Upload an Android release (.apk or .aab) to Google Play Console",
|
||||
"main": "lib/main.js",
|
||||
|
||||
44
src/edits.ts
44
src/edits.ts
@@ -33,41 +33,54 @@ export async function uploadToPlayStore(options: EditOptions, releaseFiles: stri
|
||||
// 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")
|
||||
let downloadUrls: string[] = []
|
||||
for (const releaseFile of releaseFiles) {
|
||||
core.debug(`Uploading ${releaseFile}`);
|
||||
await uploadInternalSharingRelease(options, releaseFile).catch(reason => {
|
||||
core.setFailed(reason);
|
||||
return Promise.reject(reason);
|
||||
});
|
||||
await uploadInternalSharingRelease(options, releaseFile)
|
||||
.then(downloadUrl => {
|
||||
downloadUrls.push(downloadUrl as string)
|
||||
})
|
||||
.catch(reason => {
|
||||
core.setFailed(reason);
|
||||
return Promise.reject(reason);
|
||||
});
|
||||
}
|
||||
core.setOutput("internalSharingDownloadUrls", downloadUrls);
|
||||
core.exportVariable("INTERNAL_SHARING_DOWNLOAD_URLS", downloadUrls);
|
||||
} else {
|
||||
// Create a new Edit
|
||||
core.info(`Creating a new Edit for this release`)
|
||||
const appEdit = await androidPublisher.edits.insert({
|
||||
auth: options.auth,
|
||||
packageName: options.applicationId
|
||||
});
|
||||
|
||||
// Validate the given track
|
||||
core.info(`Validating track '${options.track}'`)
|
||||
await validateSelectedTrack(appEdit.data, options).catch(reason => {
|
||||
core.setFailed(reason);
|
||||
return Promise.reject(reason);
|
||||
});
|
||||
|
||||
// Upload artifacts to Google Play, and store their version codes
|
||||
var versionCodes = new Array<number>();
|
||||
const versionCodes = new Array<number>();
|
||||
for (const releaseFile of releaseFiles) {
|
||||
core.debug(`Uploading ${releaseFile}`);
|
||||
core.info(`Uploading ${releaseFile}`);
|
||||
const versionCode = await uploadRelease(appEdit.data, options, releaseFile).catch(reason => {
|
||||
core.setFailed(reason);
|
||||
return Promise.reject(reason);
|
||||
});
|
||||
versionCodes.push(versionCode!);
|
||||
}
|
||||
core.info(`Successfully uploaded ${versionCodes.length} artifacts`)
|
||||
|
||||
// Add the uploaded artifacts to the Edit track
|
||||
core.info(`Adding ${versionCodes.length} artifacts to release on '${options.track}' track`)
|
||||
const track = await addReleasesToTrack(appEdit.data, options, versionCodes);
|
||||
core.debug(`Track: ${track}`);
|
||||
|
||||
// Commit the pending Edit
|
||||
core.info(`Committing the Edit`)
|
||||
const res = await androidPublisher.edits.commit({
|
||||
auth: options.auth,
|
||||
editId: appEdit.data.id!,
|
||||
@@ -76,9 +89,7 @@ export async function uploadToPlayStore(options: EditOptions, releaseFiles: stri
|
||||
|
||||
// Simple check to see whether commit was successful
|
||||
if (res.data.id != null) {
|
||||
core.debug(`Successfully committed ${res.data.id}`);
|
||||
const name = options.name || (await getPublishedReleaseName(res.data, options));
|
||||
core.setOutput("releaseName", name)
|
||||
core.info(`Successfully committed ${res.data.id}`);
|
||||
return Promise.resolve(res.data.id!);
|
||||
} else {
|
||||
core.setFailed(`Error ${res.status}: ${res.statusText}`);
|
||||
@@ -90,10 +101,14 @@ export async function uploadToPlayStore(options: EditOptions, releaseFiles: stri
|
||||
async function uploadInternalSharingRelease(options: EditOptions, releaseFile: string): Promise<string | undefined | null> {
|
||||
if (releaseFile.endsWith('.apk')) {
|
||||
const res = await internalSharingUploadApk(options, releaseFile)
|
||||
core.setOutput("internalSharingDownloadUrl", res.downloadUrl);
|
||||
core.exportVariable("INTERNAL_SHARING_DOWNLOAD_URL", res.downloadUrl);
|
||||
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)
|
||||
core.setOutput("internalSharingDownloadUrl", res.downloadUrl);
|
||||
core.exportVariable("INTERNAL_SHARING_DOWNLOAD_URL", res.downloadUrl);
|
||||
console.log(`${releaseFile} uploaded to Internal Sharing, download it with ${res.downloadUrl}`)
|
||||
return Promise.resolve(res.downloadUrl)
|
||||
} else {
|
||||
@@ -239,15 +254,4 @@ async function uploadBundle(appEdit: AppEdit, options: EditOptions, bundleReleas
|
||||
});
|
||||
|
||||
return res.data
|
||||
}
|
||||
|
||||
async function getPublishedReleaseName(appEdit: AppEdit, options: EditOptions): Promise<String | null | undefined> {
|
||||
const track = await androidPublisher.edits.tracks.get({
|
||||
auth: options.auth,
|
||||
packageName: options.applicationId,
|
||||
editId: appEdit.id!,
|
||||
track: options.track
|
||||
})
|
||||
const release = track.data.releases![0] // We only ever create one release, so grab the first one
|
||||
return release.name
|
||||
}
|
||||
@@ -106,7 +106,7 @@ async function run() {
|
||||
|
||||
const authClient = await auth.getClient();
|
||||
|
||||
await uploadToPlayStore({
|
||||
const result = await uploadToPlayStore({
|
||||
auth: authClient,
|
||||
applicationId: packageName,
|
||||
track: track,
|
||||
@@ -117,7 +117,7 @@ async function run() {
|
||||
name: releaseName
|
||||
}, validatedReleaseFiles);
|
||||
|
||||
console.log(`Finished uploading to the Play Store`)
|
||||
console.log(`Finished uploading to the Play Store: ${result}`)
|
||||
} catch (error) {
|
||||
core.setFailed(error.message)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user