diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 575f83c..9225c0a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -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: @@ -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 }} + group: Collaborators + file: sample-ios-app.ipa + releaseNotes: Has symbols + debug: true diff --git a/Dockerfile b/Dockerfile index 23b1f27..c769a55 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,16 @@ -FROM node:12.10.0-alpine +FROM node:14 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 RUN chmod +x /app/entrypoint.sh diff --git a/README.md b/README.md index 034db0b..5b59b97 100644 --- a/README.md +++ b/README.md @@ -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` @@ -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` @@ -52,6 +62,7 @@ See Github Actions [documentation](https://docs.github.com/en/actions/creating-a ## Sample usage +Android: ``` name: Build, code quality, tests @@ -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 +``` diff --git a/action.yml b/action.yml index 9aad221..7033508 100644 --- a/action.yml +++ b/action.yml @@ -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" @@ -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 diff --git a/entrypoint.sh b/entrypoint.sh index 25775bb..0b1af9c 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -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 @@ -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[@]}" +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