name: Validate Java e2e
on:
  push:
    branches:
      - main
      - releases/*
    paths-ignore:
      - '**.md'
  pull_request:
    paths-ignore:
      - '**.md'
  schedule:
    - cron:  '0 */12 * * *'
  workflow_dispatch:
jobs:
  setup-java-major-versions:
    if: ${{ matrix.distribution != 'microsoft' || matrix.version != '8' }}
    name: ${{ matrix.distribution }} ${{ matrix.version }} (jdk-x64) - ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [macos-latest, windows-latest, ubuntu-latest]
        distribution: ['temurin', 'adopt', 'adopt-openj9', 'zulu', 'liberica', 'microsoft' ] # internally 'adopt-hotspot' is the same as 'adopt'
        version: ['8', '11', '16']
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: setup-java
        uses: ./
        id: setup-java
        with:
          java-version: ${{ matrix.version }}
          distribution: ${{ matrix.distribution }}
      - name: Verify Java
        run: bash __tests__/verify-java.sh "${{ matrix.version }}" "${{ steps.setup-java.outputs.path }}"
        shell: bash

  setup-java-major-minor-versions:
    name: ${{ matrix.distribution }} ${{ matrix.version }} (jdk-x64) - ${{ matrix.os }}
    needs: setup-java-major-versions
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [macos-latest, windows-latest, ubuntu-latest]
        distribution: ['temurin', 'zulu', 'liberica']
        version:
        - '11.0'
        - '8.0.302'
        - '16.0.2+7'
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: setup-java
        uses: ./
        id: setup-java
        with:
          java-version: ${{ matrix.version }}
          distribution: ${{ matrix.distribution }}
      - name: Verify Java
        run: bash __tests__/verify-java.sh "${{ matrix.version }}" "${{ steps.setup-java.outputs.path }}"
        shell: bash

  setup-java-check-latest:
    name: ${{ matrix.distribution }} ${{ matrix.version }} - check-latest flag - ${{ matrix.os }}
    needs: setup-java-major-versions
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [macos-latest, windows-latest, ubuntu-latest]
        distribution: ['temurin', 'zulu', 'liberica']
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: setup-java
        uses: ./
        id: setup-java
        with:
          distribution: ${{ matrix.distribution }}
          java-version: 11
          check-latest: true
      - name: Verify Java
        run: bash __tests__/verify-java.sh "11" "${{ steps.setup-java.outputs.path }}"
        shell: bash

  setup-java-ea-versions-zulu:
    name: zulu ${{ matrix.version }} (jdk-x64) - ${{ matrix.os }}
    needs: setup-java-major-minor-versions
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [macos-latest, windows-latest, ubuntu-latest]
        version: ['17-ea', '15.0.0-ea.14']
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: setup-java
        uses: ./
        id: setup-java
        with:
          java-version: ${{ matrix.version }}
          distribution: zulu
      - name: Verify Java
        run: bash __tests__/verify-java.sh "${{ matrix.version }}" "${{ steps.setup-java.outputs.path }}"
        shell: bash

  setup-java-ea-versions-temurin:
    name: temurin ${{ matrix.version }} (jdk-x64) - ${{ matrix.os }}
    needs: setup-java-major-minor-versions
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [macos-latest, windows-latest, ubuntu-latest]
        version: ['17-ea']
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: setup-java
        uses: ./
        id: setup-java
        with:
          java-version: ${{ matrix.version }}
          distribution: temurin
      - name: Verify Java
        run: bash __tests__/verify-java.sh "${{ matrix.version }}" "${{ steps.setup-java.outputs.path }}"
        shell: bash

  setup-java-custom-package-type:
    name: ${{ matrix.distribution }} ${{ matrix.version }} (${{ matrix.java-package }}-x64) - ${{ matrix.os }}
    needs: setup-java-major-minor-versions
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [macos-latest, windows-latest, ubuntu-latest]
        distribution: ['temurin', 'zulu', 'liberica']
        java-package: ['jre']
        version: ['16.0']
        include:
          - distribution: 'zulu'
            java-package: jre+fx
            version: '8'
            os: ubuntu-latest
          - distribution: 'zulu'
            java-package: jdk+fx
            version: '8.0.242'
            os: ubuntu-latest
          - distribution: 'liberica'
            java-package: jdk+fx
            version: '8'
            os: ubuntu-latest
          - distribution: 'liberica'
            java-package: jre+fx
            version: '11'
            os: ubuntu-latest
        exclude:
          # Eclipse Temurin currently doesn't publish JREs, only JDKs
          - distribution: 'temurin'
            java-package: 'jre'
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: setup-java
        uses: ./
        id: setup-java
        with:
          java-version: ${{ matrix.version }}
          java-package: ${{ matrix.java-package }}
          distribution: ${{ matrix.distribution }}
      - name: Verify Java
        run: bash __tests__/verify-java.sh "${{ matrix.version }}" "${{ steps.setup-java.outputs.path }}"
        shell: bash

  setup-java-custom-architecture:
    # Only Zulu provides x86 arch for now and only for windows / ubuntu
    # Only Microsoft provides arm64 for windows / ubuntu / os x
    if: ${{ (matrix.distribution == 'zulu' && matrix.architecture == 'x86' && matrix.os != 'macos-latest' ) || (matrix.distribution == 'microsoft' && matrix.architecture == 'arm64') }}
    name: ${{ matrix.distribution }} ${{ matrix.version }} (jdk-${{ matrix.architecture }}) - ${{ matrix.os }}
    needs: setup-java-major-minor-versions
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
<<<<<<< HEAD
        # Only Zulu and Liberica provides x86 arch for now and only for windows / ubuntu
        os: [windows-latest, ubuntu-latest]
        distribution: ['zulu', 'liberica']
=======
        os: [macos-latest, windows-latest, ubuntu-latest]
        distribution: ['zulu', 'microsoft']
>>>>>>> Add microsoft distribution of the JDK.
        version: ['11']
        architecture: [ 'x86', 'arm64' ]
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: setup-java
        uses: ./
        id: setup-java
        with:
          distribution: ${{ matrix.distribution }}
          java-version: ${{ matrix.version }}
          architecture: ${{ matrix.architecture }}
      - name: Verify Java
        run: bash __tests__/verify-java.sh "${{ matrix.version }}" "${{ steps.setup-java.outputs.path }}"
        shell: bash