Skip to content
Open
Show file tree
Hide file tree
Changes from 3 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
37 changes: 32 additions & 5 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]
on: [ push, pull_request, workflow_dispatch ]
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
ios:
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
releaseNotes: Has symbols
debug: true
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.idea/
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

WORKDIR /app
COPY . /app

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

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
43 changes: 41 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** App name followed by username e.g. `wzieba/Sample-App`
**Required** App name preceded by the App Center's username e.g. wzieba/Sample-App
Copy link
Contributor Author

Choose a reason for hiding this comment

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

it wasn't clear for me what the username is. I have an account created using google sign in so in my case there was some.weirdshit-domaincom. I thought it might make sense to update the documentation here as well


### `token`

Expand All @@ -23,9 +23,17 @@ 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

### `releaseNotes`

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

### `gitReleaseNotes`

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

## Sample usage

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

Expand All @@ -71,7 +80,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 @@ -23,6 +23,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
40 changes: 30 additions & 10 deletions entrypoint.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/bash
#!/bin/bash -e
RELEASE_NOTES=""
isFirst=true
releaseId=""
Expand All @@ -7,16 +7,36 @@ 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
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[@]}"
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[@]}"
fi