# 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: 7
            android-api: 24

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

          - android: 11
            android-api: 30

          - android: 12L
            android-api: 32

          - android: 13
            android-api: 33

    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@d94c3fbe4fe6a29e4a5ba47c12fb47677c73656b
        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@d94c3fbe4fe6a29e4a5ba47c12fb47677c73656b
        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 }}
