Fixed output variables for the multiple files case

This commit is contained in:
Victor Paleologue
2021-07-26 17:36:54 +02:00
parent f5d209bc1a
commit ce50c1312f
3 changed files with 132 additions and 12 deletions
+81 -7
View File
@@ -37,20 +37,26 @@ Then copy the contents of the `.txt` file to your GH secrets
## Outputs
### `signedReleaseFile`
Output variables are set both locally and in environment variables.
The path to the signed release file from this action
### `signedReleaseFile`/ ENV: `SIGNED_RELEASE_FILE`
### ENV: `SIGNED_RELEASE_FILE`
The path to the single release file that have been signed with this action.
Not set if several release files have been signed.
This also set's an environment variable that points to the signed release file
### `signedReleaseFiles` / ENV: `SIGNED_RELEASE_FILES`
The paths to the release files that have been signed with this action,
separated by `:`.
## Example usage
### Single APK
The output variable `signedReleaseFile` can be used in a release action.
```yaml
steps:
# ...
- uses: r0adkll/sign-android-release@v1
name: Sign app APK
# ID used to access action output
@@ -64,10 +70,78 @@ steps:
env:
// override default build-tools version (29.0.3) -- optional
BUILD_TOOLS_VERSION: "30.0.2"
# Example use of `signedReleaseFile` output -- not needed
- uses: actions/upload-artifact@v2
with:
name: Signed app bundle
path: ${{steps.sign_app.outputs.signedReleaseFile}}
```
### Multiple APKs, multiple variables
The output variables `signedReleaseFileX`
can be used to refer to each signed release file.
```yaml
steps:
- uses: r0adkll/sign-android-release@v1
id: sign_app
with:
releaseDirectory: app/build/outputs/apk/release
signingKeyBase64: ${{ secrets.SIGNING_KEY }}
alias: ${{ secrets.ALIAS }}
keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
keyPassword: ${{ secrets.KEY_PASSWORD }}
- name: Example Release
uses: "marvinpinto/action-automatic-releases@latest"
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "latest"
prerelease: true
title: "Release X"
files: |
${{ steps.sign_app.signedReleaseFile0 }}
${{ steps.sign_app.signedReleaseFile1 }}
${{ steps.sign_app.signedReleaseFile2 }}
${{ steps.sign_app.signedReleaseFile3 }}
${{ steps.sign_app.signedReleaseFile4 }}
```
### Multiple APKs, single variable
The output variable `signedReleaseFiles` must be split first,
before being used in a release action.
```yaml
steps:
- uses: r0adkll/sign-android-release@v1
id: sign_app
with:
releaseDirectory: app/build/outputs/apk/release
signingKeyBase64: ${{ secrets.SIGNING_KEY }}
alias: ${{ secrets.ALIAS }}
keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
keyPassword: ${{ secrets.KEY_PASSWORD }}
- uses: jungwinter/split@v1
id: signed_files
with:
msg: ${{ steps.sign_app.signedReleaseFiles }}
separator: ':'
- name: Example Release
uses: "marvinpinto/action-automatic-releases@latest"
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "latest"
prerelease: true
title: "Release X"
files: |
${{ steps.signed_files._0 }}
${{ steps.signed_files._1 }}
${{ steps.signed_files._2 }}
${{ steps.signed_files._3 }}
${{ steps.signed_files._4 }}
```
+31 -1
View File
@@ -22,7 +22,37 @@ inputs:
required: false
outputs:
signedReleaseFile:
description: 'The signed release APK or AAB file'
description: 'The signed release APK or AAB file, if single'
signedReleaseFiles:
description: 'The signed release APK or AAB files'
nofSignedReleaseFiles:
description: 'The number of signed release files'
signedReleaseFile0:
description: 'The Oth signed release APK or AAB file'
signedReleaseFile1:
description: 'The 1st signed release APK or AAB file'
signedReleaseFile2:
description: 'The 2nd signed release APK or AAB file'
signedReleaseFile3:
description: 'The 3rd signed release APK or AAB file'
signedReleaseFile4:
description: 'The 4th signed release APK or AAB file'
signedReleaseFile5:
description: 'The 5th signed release APK or AAB file'
signedReleaseFile6:
description: 'The 6th signed release APK or AAB file'
signedReleaseFile7:
description: 'The 7th signed release APK or AAB file'
signedReleaseFile8:
description: 'The 8th signed release APK or AAB file'
signedReleaseFile9:
description: 'The 9th signed release APK or AAB file'
signedReleaseFile10:
description: 'The 10th signed release APK or AAB file'
signedReleaseFile11:
description: 'The 11th signed release APK or AAB file'
signedReleaseFile12:
description: 'The 12th signed release APK or AAB file'
runs:
using: 'node12'
main: 'lib/main.js'
+20 -4
View File
@@ -21,12 +21,14 @@ async function run() {
// 1. Find release files
const releaseFiles = io.findReleaseFiles(releaseDir);
if (releaseFiles !== undefined) {
if (releaseFiles !== undefined && releaseFiles.length !== 0) {
// 3. Now that we have a release files, decode and save the signing key
const signingKey = path.join(releaseDir, 'signingKey.jks');
fs.writeFileSync(signingKey, signingKeyBase64, 'base64');
// 4. Now zipalign and sign each one of the the release files
let signedReleaseFiles:string[] = [];
let index = 0;
for (let releaseFile of releaseFiles) {
core.debug(`Found release to sign: ${releaseFile.name}`);
const releaseFilePath = path.join(releaseDir, releaseFile.name);
@@ -40,9 +42,23 @@ async function run() {
core.setFailed('No valid release file to sign.');
}
core.debug('Release signed! Setting outputs.');
core.exportVariable("SIGNED_RELEASE_FILE", signedReleaseFile);
core.setOutput('signedReleaseFile', signedReleaseFile);
// Each signed release file is stored in a separate variable + output.
core.exportVariable(`SIGNED_RELEASE_FILE_${index}`, signedReleaseFile);
core.setOutput(`signedReleaseFile${index}`, signedReleaseFile);
signedReleaseFiles.push(signedReleaseFile);
++index;
}
// All signed release files are stored in a merged variable + output.
core.exportVariable(`SIGNED_RELEASE_FILES`, signedReleaseFiles.join(":"));
core.setOutput('signedReleaseFiles', signedReleaseFiles.join(":"));
core.exportVariable(`NOF_SIGNED_RELEASE_FILES`, `${signedReleaseFiles.length}`);
core.setOutput(`nofSignedReleaseFiles`, `${signedReleaseFiles.length}`);
// When there is one and only one signed release file, stoire it in a specific variable + output.
if (signedReleaseFiles.length == 1) {
core.exportVariable(`SIGNED_RELEASE_FILE`, signedReleaseFiles[0]);
core.setOutput('signedReleaseFile', signedReleaseFiles[0]);
}
console.log('Releases signed!');
} else {