---
format_version: 1.0.0
default_step_lib_source: https://github.com/bitrise-io/bitrise-steplib.git
trigger_map:
- pattern: devicefarmUpload
  workflow: devicefarmUpload
- pattern: scheduled
  workflow: scheduled
- pattern: "*"
  workflow: primary
workflows:
  primary:
    steps:
    - script:
        title: Check for skipping CI
        inputs:
        - content: |-
            #!/bin/bash

            if [[ -n "$(echo $GIT_CLONE_COMMIT_MESSAGE_SUBJECT | sed -n '/\[skip ci\]/p')"  ||
                  -n "$(echo $GIT_CLONE_COMMIT_MESSAGE_SUBJECT | sed -n '/\[ci skip\]/p')"  ||
                  -n "$(echo $GIT_CLONE_COMMIT_MESSAGE_BODY    | sed -n 's/\[skip ci\]/p')" ||
                  -n "$(echo $GIT_CLONE_COMMIT_MESSAGE_BODY    | sed -n 's/\[ci skip\]/p')" ]]; then
                envman add --key SKIPCI --value true
            else
                envman add --key SKIPCI --value false
            fi
    - script:
        title: Configure GL-native build environement
        run_if: '{{enveq "SKIPCI" "false"}}'
        inputs:
        - content: |-
            #!/bin/bash
            set -eu -o pipefail
            curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
            sudo apt-get install -y pkg-config nodejs cmake
    - script:
        title: Configure Google Cloud SDK
        run_if: '{{enveq "SKIPCI" "false"}}'
        inputs:
        - content: |-
            #!/bin/bash
            # Install python tools for pip
            sudo apt-get install -y gcc python-dev python-setuptools
            sudo easy_install -U pip
            sudo pip uninstall crcmod
            sudo pip install -U crcmod

            # Install Google Cloud SDK for Firebase
            export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"
            echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee /etc/apt/sources.list.d/google-cloud-sdk.list
            curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
            sudo apt-get update && sudo apt-get install google-cloud-sdk

            # Get authentication secret
            echo "Downloading Google Cloud authnetication:"
            wget -O secret.json "$BITRISEIO_GCLOUD_SERVICE_ACCOUNT_JSON_URL"
    - script:
        title: Build libmapbox-gl.so for armeabi-v7a
        run_if: '{{enveq "SKIPCI" "false"}}'
        inputs:
        - content: |-
            #!/bin/bash
            echo "Compile libmapbox-gl.so for armeabi-v7a abi:"
            export BUILDTYPE=Debug
            make android-lib-arm-v7
    - script:
        title: Run local JVM Unit tests
        run_if: '{{enveq "SKIPCI" "false"}}'
        inputs:
        - content: |-
            #!/bin/bash
            echo "Running unit tests from testapp/src/test:"
            make run-android-unit-test
    - script:
        title: Generate Espresso sanity tests
        run_if: '{{enveq "SKIPCI" "false"}}'
        inputs:
        - content: |-
            #!/bin/bash
            echo "Generate these test locally by executing:"
            make test-code-android
    - script:
        title: Run Firebase instrumentation tests
        run_if: '{{enveq "SKIPCI" "false"}}'
        inputs:
        - content: |-
            #!/bin/bash
            echo "Downloading Mapbox accesstoken for running tests:"
            wget -O platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/developer-config.xml "$BITRISEIO_TEST_ACCESS_TOKEN_UI_TEST_URL"

            echo "Build seperate test apk:"
            make android-ui-test

            echo "Run tests on firebase:"
            gcloud auth activate-service-account --key-file secret.json --project android-gl-native
            gcloud beta test android devices list
            gcloud beta test android run --type instrumentation --app platform/android/MapboxGLAndroidSDKTestApp/build/outputs/apk/MapboxGLAndroidSDKTestApp-debug.apk --test platform/android/MapboxGLAndroidSDKTestApp/build/outputs/apk/MapboxGLAndroidSDKTestApp-debug-androidTest-unaligned.apk --device-ids shamu --os-version-ids 22 --locales en --orientations portrait --timeout 15m --test-targets "class com.mapbox.mapboxsdk.testapp.camera.CameraMoveTest"
            echo "The details are made available as a zipped build artefact on top of this page."
    - script:
        title: Download Firebase results
        run_if: '{{enveq "SKIPCI" "false"}}'
        is_always_run: true
        inputs:
        - content: |-
            #!/bin/bash
            echo "The details from Firebase will be downloaded, zipped and attached as a build artefact."
            testUri=$(gsutil ls "gs://test-lab-wrrntqk05p31w-h3y1qk44vuunw/" | tail -n1)
            echo "Downloading from : "$testUri
            cd platform/android/MapboxGLAndroidSDKTestApp/build/outputs/apk && gsutil -m cp -R -Z $testUri .

            echo "Try running ndk-stack on downloaded logcat to symbolicate the stacktraces:"
            find platform/android/MapboxGLAndroidSDKTestApp/build/outputs/apk -type f -name "logcat" -print0 | xargs -0 -Imylogcat mv -i mylogcat ./
            cat logcat | ndk-stack -sym build/android-arm-v7/Debug
    - deploy-to-bitrise-io:
        run_if: '{{enveq "SKIPCI" "false"}}'
        inputs:
        - deploy_path: platform/android/MapboxGLAndroidSDKTestApp/build/outputs/apk
        - is_compress: 'true'
        - notify_user_groups: none
    - slack:
        run_if: '{{enveq "SKIPCI" "false"}}'
        title: Post to Slack
        inputs:
        - webhook_url: "$SLACK_HOOK_URL"
        - channel: "#gl-bots"
        - from_username: 'Bitrise Android'
        - from_username_on_error: 'Bitrise Android'
        - message: '<${BITRISE_BUILD_URL}|Build #${BITRISE_BUILD_NUMBER}>
            for <https://github.com/mapbox/mapbox-gl-native/compare/${BITRISE_GIT_BRANCH}|mapbox/mapbox-gl-native@${BITRISE_GIT_BRANCH}>
            by ${GIT_CLONE_COMMIT_COMMITER_NAME}
            passed'
        - message_on_error: '<${BITRISE_BUILD_URL}|Build #${BITRISE_BUILD_NUMBER}>
            for <https://github.com/mapbox/mapbox-gl-native/compare/${BITRISE_GIT_BRANCH}|mapbox/mapbox-gl-native@${BITRISE_GIT_BRANCH}>
            by ${GIT_CLONE_COMMIT_COMMITER_NAME}
            failed'
        - icon_url: https://bitrise-public-content-production.s3.amazonaws.com/slack/bitrise-slack-icon-128.png
        - icon_url_on_error: https://bitrise-public-content-production.s3.amazonaws.com/slack/bitrise-slack-error-icon-128.png
  scheduled:
    steps:
    - script:
        title: Configure GL-native build environement
        inputs:
        - content: |-
            #!/bin/bash
            set -eu -o pipefail
            curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
            sudo apt-get install -y pkg-config nodejs cmake
    - script:
        title: Configure AWS-CLI
        inputs:
        - content: |-
            #!/bin/bash
            apt-get install -y python-pip python-dev build-essential
            pip install awscli
    - script:
        title: Download maven credentials
        inputs:
        - content: |-
            #!/bin/bash
            aws s3 cp s3://mapbox/android/signing-credentials/secring.gpg platform/android/MapboxGLAndroidSDK/secring.gpg

            # Add maven credentals for publishing
            echo "NEXUS_USERNAME=$PUBLISH_NEXUS_USERNAME
            NEXUS_PASSWORD=$PUBLISH_NEXUS_PASSWORD
            signing.keyId=$SIGNING_KEYID
            signing.password=$SIGNING_PASSWORD
            signing.secretKeyRingFile=secring.gpg" >> platform/android/MapboxGLAndroidSDK/gradle.properties
    - script:
        title: Build release
        inputs:
        - content: |-
            #!/bin/bash
            echo "Compile libmapbox-gl.so for all supportd abi's:"
            export BUILDTYPE=Release
            make apackage
    - script:
        title: Log metrics
        inputs:
        - content: |-
            #!/bin/bash
            echo "Log binary size metrics to AWS CloudWatch:"
            CLOUDWATCH=true platform/android/scripts/metrics.sh
    - script:
        title: Publish to maven
        inputs:
        - content: |-
            #!/bin/bash
            echo "Upload aar file to maven:"
            cd platform/android && ./gradlew uploadArchives
    - slack:
        title: Post to Slack
        inputs:
        - webhook_url: "$SLACK_HOOK_URL"
        - channel: "#gl-bots"
        - from_username: 'Bitrise Android'
        - from_username_on_error: 'Bitrise Android'
        - message: '<${BITRISE_BUILD_URL}|Build #${BITRISE_BUILD_NUMBER}> Publish to maven SUCCESS.'
        - message_on_error: '<${BITRISE_BUILD_URL}|Build #${BITRISE_BUILD_NUMBER}> Publish to maven FAILED.'
        - icon_url: https://bitrise-public-content-production.s3.amazonaws.com/slack/bitrise-slack-icon-128.png
        - icon_url_on_error: https://bitrise-public-content-production.s3.amazonaws.com/slack/bitrise-slack-error-icon-128.png
  devicefarmUpload:
    steps:
    - script:
        title: Configure GL-native build environement
        inputs:
        - content: |-
            #!/bin/bash
            set -eu -o pipefail
            curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
            sudo apt-get install -y pkg-config nodejs cmake
    - script:
        title: Build release
        inputs:
        - content: |-
            #!/bin/bash
            echo "Compile libmapbox-gl.so for all supportd abi's:"
            export BUILDTYPE=Release
            make apackage
    - script:
        title: Add AWS credentials
        inputs:
        - content: |-
            #!/bin/bash
            echo "AWS_ACCESS_KEY_ID_DEVICE_FARM=$AWS_ACCESS_KEY_ID_DEVICE_FARM" >> platform/android/MapboxGLAndroidSDKTestApp/gradle.properties
            echo "AWS_SECRET_ACCESS_KEY_DEVICE_FARM=$AWS_SECRET_ACCESS_KEY_DEVICE_FARM" >> platform/android/MapboxGLAndroidSDKTestApp/gradle.properties
    - script:
        title: Generate sanity tests
        inputs:
        - content: |-
            #!/bin/bash
            echo "Generate these test locally by executing:"
            make test-code-android
    - script:
        title: Run AWS Device Farm instrumentation tests
        inputs:
        - content: |-
            #!/bin/bash
            echo "Run tests on device farm:"
            cd platform/android && ./gradlew devicefarmUpload
    - slack:
        title: Post to Slack
        inputs:
        - webhook_url: "$SLACK_HOOK_URL"
        - channel: "#gl-bots"
        - from_username: 'Bitrise Android'
        - from_username_on_error: 'Bitrise Android'
        - message: '<${BITRISE_BUILD_URL}|Build #${BITRISE_BUILD_NUMBER}> for devicefarmUpload passed'
        - message_on_error: '<${BITRISE_BUILD_URL}|Build #${BITRISE_BUILD_NUMBER}> for devicefarmUpload failed'
        - icon_url: https://bitrise-public-content-production.s3.amazonaws.com/slack/bitrise-slack-icon-128.png
        - icon_url_on_error: https://bitrise-public-content-production.s3.amazonaws.com/slack/bitrise-slack-error-icon-128.png
