Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ability to upload mappings/symbols file #26

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 31 additions & 4 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
name: Sample workflow for App Center action
on: [push, pull_request, workflow_dispatch, pull_request_target]
jobs:
run:
android:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@master
uses: actions/checkout@v2
- name: Get sample .apk for test purposes
run: wget --output-document ApiDemos-debug.apk https://github.com/appium/appium/blob/906350fd335f9485376214fdd17c7cdb6c9ff26b/sample-code/apps/ApiDemos-debug.apk?raw=true
run: wget https://github.com/appium/appium/blob/906350fd335f9485376214fdd17c7cdb6c9ff26b/sample-code/apps/ApiDemos-debug.apk?raw=true -O ApiDemos-debug.apk
- name: Get sample mappings.txt file for test purposes
run: wget https://gist.githubusercontent.com/loopj/43a4a3231f32c17ab9e3/raw/2181ad9ae926cd3d46ee9becabcb0cce668ef9c0/mapping.txt -O mappings.txt
- name: Upload artifact with provided release notes
uses: ./
with:
Expand Down Expand Up @@ -47,4 +49,29 @@ jobs:
group: Collaborators
file: ApiDemos-debug.apk
debug: true

- name: Upload apk artifact with mappings file
uses: ./
with:
appName: ${{ secrets.APP_NAME }}
token: ${{ secrets.API_TOKEN }}
group: Collaborators
file: ApiDemos-debug.apk
mappings: mappings.txt
releaseNotes: Has mappings
debug: true
wzieba marked this conversation as resolved.
Show resolved Hide resolved
ios:
wzieba marked this conversation as resolved.
Show resolved Hide resolved
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Get sample .ipa file for test purposes
run: wget https://github.com/bitbar/test-samples/blob/master/apps/ios/bitbar-ios-sample.ipa?raw=true -O sample-ios-app.ipa
- name: Upload ipa artifact with symbols file
uses: ./
with:
appName: ${{ secrets.IOS_APP_NAME }}
token: ${{ secrets.IOS_API_TOKEN }}
Comment on lines +72 to +73
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

iOS apps cannot be uploaded to the same project as android ones

group: Collaborators
file: sample-ios-app.ipa
wzieba marked this conversation as resolved.
Show resolved Hide resolved
releaseNotes: Has symbols
debug: true
wzieba marked this conversation as resolved.
Show resolved Hide resolved
14 changes: 9 additions & 5 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
FROM node:12.10.0-alpine
FROM node:14
wzieba marked this conversation as resolved.
Show resolved Hide resolved

WORKDIR /app
COPY . /app

RUN npm install -g appcenter-cli@2.7.3 \
&& apk update \
&& apk add git \
&& apk add bash
RUN npm install -g appcenter-cli@2.7.3

RUN mkdir -p /usr/local/lib/aapt/
RUN wget -q "https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/4.0.1-6197926/aapt2-4.0.1-6197926-linux.jar" -O aapt2-all.jar \
&& mv aapt2-all.jar /usr/local/lib/aapt/aapt2-all.jar \
&& cd /usr/local/lib/aapt \
&& unzip -qq aapt2-all.jar \
&& ln -s /usr/local/lib/aapt/aapt2 /usr/local/bin/aapt2
Comment on lines +9 to +13
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

According to the [documentation(https://developer.android.com/studio/command-line/aapt2#download_aapt2) to use aapt it is required to download the jar and extract it. The jar itself isn't executable 🤷

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another thing here is the location where the jar file is extracted to.
I could extract the file into the working directory as it gets bound as a volume (which makes me thinking if COPY . /app is actually needed if all the content gets immediately ovewritten 🤔)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And one more thing is that I'm creating a symlink on a path that belongs to PATH as I wanted to make it executable everywhere, but for some reason I couldn't make it to work 🤷 If anyone has any idea why it didn't work in the bash script I'd love to know.


RUN chmod +x /app/entrypoint.sh

Expand Down
46 changes: 44 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ This action uploads artifacts (.apk or .ipa) to Visual Studio App Center.

### `appName`

**Required** username followed by App name e.g. `wzieba/Sample-App`
**Required** User name preceded by the App Center's username e.g. wzieba/Sample-App

### `token`

Expand All @@ -23,15 +23,25 @@ This action uploads artifacts (.apk or .ipa) to Visual Studio App Center.

**Required** Artifact to upload (.apk or .ipa)

### `mappings`

Android mappings.txt file location. See [the documentation](https://developer.android.com/studio/build/shrink-code) for details

### `symbols`

iOS debug symbol file (.dSYM) location. See [the documentation](https://docs.microsoft.com/en-us/appcenter/diagnostics/ios-symbolication) for details

### `buildVersion`

Build version parameter required for .zip, .msi, .pkg and .dmg files

### buildNumber

Build number parameter required for macOS .pkg and .dmg files

### `releaseNotes`

Release notes visible on release page
Release notes visible on App Center's Release page

### `gitReleaseNotes`

Expand All @@ -52,6 +62,7 @@ See Github Actions [documentation](https://docs.github.com/en/actions/creating-a

## Sample usage

Android:
```
name: Build, code quality, tests

Expand All @@ -77,6 +88,37 @@ jobs:
token: ${{secrets.APP_CENTER_TOKEN}}
group: Testers
file: app/build/outputs/apk/release/app-release-unsigned.apk
mappings: app/build/outputs/mappings/release/mappings.txt
notifyTesters: true
debug: false
```

iOS:
```
name: Build, code quality, tests

on: [push]

jobs:
build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v1
- name: set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: build release
run: ./gradlew assembleRelease
- name: upload artefact to App Center
uses: wzieba/AppCenter-Github-Action@v1
with:
appName: wzieba/Sample-App
token: ${{secrets.APP_CENTER_TOKEN}}
group: Testers
file: path/to/iOS.ipa
symbols: path/to/crash_symbols.dSYM
notifyTesters: true
```
8 changes: 7 additions & 1 deletion action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ description: "GitHub Action that uploads artefacts for Visual Studio App Center"
author: "Wojciech Zięba <@wzieba>"
inputs:
appName:
description: "App name followed by username e.g. wzieba/Sample-App"
description: "App name preceded by the App Center's username e.g. wzieba/Sample-App"
required: true
token:
description: "Upload token - you can get one from appcenter.ms/settings"
Expand All @@ -29,6 +29,12 @@ inputs:
notifyTesters:
description: "If true, send an email notification to the distribution group"
required: false
mappings:
description: "Android mappings.txt file location"
required: false
symbols:
description: "iOS debug symbol file (.dSYM) location."
required: false
debug:
description: "If true, shows additional information from the action execution"
required: false
Expand Down
38 changes: 29 additions & 9 deletions entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ params=()
[ "${INPUT_NOTIFYTESTERS}" != true ] && params+=(--silent)
[ "${INPUT_DEBUG}" == true ] && params+=(--debug)
if [ -n "${INPUT_RELEASENOTES}" ]; then
RELEASE_NOTES=${INPUT_RELEASENOTES}
RELEASE_NOTES=${INPUT_RELEASENOTES}
elif [ $INPUT_GITRELEASENOTES ]; then
RELEASE_NOTES="$(git log -1 --pretty=short)"
RELEASE_NOTES="$(git log -1 --pretty=short)"
fi

if [ -n "${INPUT_BUILDVERSION}" ]; then
Expand All @@ -21,11 +21,31 @@ if [ -n "${INPUT_BUILDNUMBER}" ]; then
fi

for group in $INPUT_GROUP; do
if ${isFirst} ; then
isFirst=false
appcenter distribute release --token "$INPUT_TOKEN" --app "$INPUT_APPNAME" --group $group --file "$INPUT_FILE" --release-notes "$RELEASE_NOTES" "${params[@]}"
releaseId=$(appcenter distribute releases list --token "$INPUT_TOKEN" --app "$INPUT_APPNAME" | grep ID | tr -s ' ' | cut -f2 -d ' ' | sort -n -r | head -1)
else
appcenter distribute releases add-destination --token "$INPUT_TOKEN" -d $group -t group -r $releaseId --app "$INPUT_APPNAME" "${params[@]}"
fi
if ${isFirst}; then
isFirst=false
appcenter distribute release --token "$INPUT_TOKEN" --app "$INPUT_APPNAME" --group $group --file "$INPUT_FILE" --release-notes "$RELEASE_NOTES" "${params[@]}"
releaseId=$(appcenter distribute releases list --token "$INPUT_TOKEN" --app "$INPUT_APPNAME" | grep ID | tr -s ' ' | cut -f2 -d ' ' | sort -n -r | head -1)
else
appcenter distribute releases add-destination --token "$INPUT_TOKEN" -d $group -t group -r $releaseId --app "$INPUT_APPNAME" "${params[@]}"
fi
done

crashUploadParams=()
[ "${INPUT_DEBUG}" == true ] && crashUploadParams+=(--debug)

if [ "$INPUT_MAPPINGS" ]; then
APP_VERSION_NAME=$(/usr/local/bin/aapt2 dump badging "$INPUT_FILE" | grep "versionName=" | sed -e "s/.*versionName='//" -e "s/' .*//")
APP_VERSION_CODE=$(/usr/local/bin/aapt2 dump badging "$INPUT_FILE" | grep "versionCode=" | sed -e "s/.*versionCode='//" -e "s/' .*//")
if ($INPUT_DEBUG); then
echo "Upload mappings $INPUT_MAPPINGS -> $APP_VERSION_NAME -> $APP_VERSION_CODE"
fi

appcenter crashes upload-mappings --token "$INPUT_TOKEN" --app "$INPUT_APPNAME" --mapping "$INPUT_MAPPINGS" --version-name "$APP_VERSION_NAME" --version-code "$APP_VERSION_CODE" "${crashUploadParams[@]}"
wzieba marked this conversation as resolved.
Show resolved Hide resolved
fi

if [ "$INPUT_SYMBOLS" ]; then
if ($INPUT_DEBUG); then
echo "Upload symbols $INPUT_SYMBOLS"
fi
appcenter crashes upload-symbols --token "$INPUT_TOKEN" --app "$INPUT_APPNAME" --symbol "$INPUT_SYMBOLS" "${crashUploadParams[@]}"
wzieba marked this conversation as resolved.
Show resolved Hide resolved
fi