## ---------------------------------------------------------------------------
## 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: master pr build

on:
  pull_request:
    branches:
      - master

env:
  MAVEN_OPTS: -Xmx4g -Xms1g -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.http.retryHandler.count=3

jobs:
  mvn:
    timeout-minutes: 180
    runs-on: ubuntu-20.04
    if: github.repository == 'apache/servicecomb-pack'
    strategy:
      matrix:
        java: [ '8', '11' ]
      fail-fast: false
    steps:
      - uses: actions/checkout@v2
        with:
          persist-credentials: false
      - name: Set up JDK ${{ matrix.java }}
        uses: actions/setup-java@v1
        with:
          java-version: ${{ matrix.java }}
      - name: Cache Maven Repository
        uses: actions/cache@v2
        with:
          path: |
            ~/.m2/repository/
            !~/.m2/repository/org/apache/servicecomb
          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
          restore-keys: ${{ runner.os }}-m2
      - name: Show the first log message
        run: git log -n1
      - name: Build and test
        if: ${{ success() }}
        run: ./mvnw clean install -B -Pdocker
      - name: Upload unit test results
        if: ${{ failure() }}
        uses: actions/upload-artifact@v2
        with:
          name: surefire-reports
          path: ./**/target/surefire-reports/
          if-no-files-found: ignore
      - name: Verify demo
        if: ${{ success() }}
        run: ./mvnw clean verify -B -f demo -Pdemo -Pdocker -Ddocker.useColor=false -Ddocker.showLogs
      - name: Verify Acceptance tests
        if: ${{ success() }}
        run: ./mvnw clean verify -B -f acceptance-tests -Pdemo -Pdocker -Ddocker.useColor=false -Ddocker.showLogs
