# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#  KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

name: Android Testsuite

on:
  push:
    paths-ignore:
      - '**.md'
      - 'LICENSE'
      - '.eslint*'
  pull_request:
    paths-ignore:
      - '**.md'
      - 'LICENSE'
      - '.eslint*'

jobs:
  test:
    name: Android ${{ matrix.versions.android }} Test
    runs-on: macos-latest

    # hoist configurations to top that are expected to be updated
    env:
      # Storing a copy of the repo
      repo: ${{ github.event.pull_request.head.repo.full_name || github.repository }}

      node-version: 16

      # These are the default Java configurations used by most tests.
      # To customize these options, add "java-distro" or "java-version" to the strategy matrix with its overriding value.
      default_java-distro: temurin
      default_java-version: 11

      # These are the default Android System Image configurations used by most tests.
      # To customize these options, add "system-image-arch" or "system-image-target" to the strategy matrix with its overriding value.
      default_system-image-arch: x86_64
      default_system-image-target: google_apis # Most system images have a google_api option. Set this as default.

    # configurations for each testing strategy (test matrix)
    strategy:
      matrix:
        versions:
          - android: 5.1
            android-api: 22

          - android: 6
            android-api: 23

          - android: 7
            android-api: 24

          - android: 7.1
            android-api: 25

          - android: 8
            android-api: 26

          - android: 8.1
            android-api: 27
            system-image-target: default

          - android: 9
            android-api: 28

          - android: 10
            android-api: 29

          - android: 11
            android-api: 30

    timeout-minutes: 60

    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: ${{ env.node-version }}
      - uses: actions/setup-java@v3
        env:
          java-version: ${{ matrix.versions.java-version == '' && env.default_java-version || matrix.versions.java-version }}
          java-distro: ${{ matrix.versions.java-distro == '' && env.default_java-distro || matrix.versions.java-distro }}
        with:
          distribution: ${{ env.java-distro }}
          java-version: ${{ env.java-version }}

      - name: Run Environment Information
        run: |
          node --version
          npm --version
          java -version

      - name: Run npm install
        run: |
          export PATH="/usr/local/lib/android/sdk/platform-tools":$PATH
          export JAVA_HOME=$JAVA_HOME_11_X64
          npm i -g cordova@latest
          npm ci

      - name: Run paramedic install
        if: ${{ endswith(env.repo, '/cordova-paramedic')　!= true }}
        run: npm i -g github:apache/cordova-paramedic

      - uses: reactivecircus/android-emulator-runner@5de26e4bd23bf523e8a4b7f077df8bfb8e52b50e
        env:
          system-image-arch: ${{ matrix.versions.system-image-arch == '' && env.default_system-image-arch || matrix.versions.system-image-arch }}
          system-image-target: ${{ matrix.versions.system-image-target == '' && env.default_system-image-target || matrix.versions.system-image-target }}
        with:
          api-level: ${{ matrix.versions.android-api }}
          target: ${{ env.system-image-target }}
          arch: ${{ env.system-image-arch }}
          force-avd-creation: false
          disable-animations: false
          emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim
          script: echo "Pregenerate the AVD before running Paramedic"

      - name: Run paramedic tests
        uses: reactivecircus/android-emulator-runner@5de26e4bd23bf523e8a4b7f077df8bfb8e52b50e
        env:
          system-image-arch: ${{ matrix.versions.system-image-arch == '' && env.default_system-image-arch || matrix.versions.system-image-arch }}
          system-image-target: ${{ matrix.versions.system-image-target == '' && env.default_system-image-target || matrix.versions.system-image-target }}
          test_config: 'android-${{ matrix.versions.android }}.config.json'
          # Generally, this should automatically work for cordova-paramedic & plugins. If the path is unique, this can be manually changed.
          test_plugin_path: ${{ endswith(env.repo, '/cordova-paramedic') && './spec/testable-plugin/' || './' }}
          paramedic: ${{ endswith(env.repo, '/cordova-paramedic') && 'node main.js' || 'cordova-paramedic' }}
        with:
          api-level: ${{ matrix.versions.android-api }}
          target: ${{ env.system-image-target }}
          arch: ${{ env.system-image-arch }}
          force-avd-creation: false
          disable-animations: false
          emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim
          script: ${{ env.paramedic }} --config ./pr/local/${{ env.test_config }} --plugin ${{ env.test_plugin_path }}
