# 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
    continue-on-error: true

    # 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:
          # Test the lowest minimum supported APIs
          - android: 5.1
            android-api: 22

          # Test the last 3-4 supported APIs
          - android: 10
            android-api: 29

          - android: 11
            android-api: 30

          - android: 12
            android-api: 31

          - android: 12L
            android-api: 32

    timeout-minutes: 60

    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        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 }}
