#    Licensed 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: Smoke Test

on:
  push:
    branches:
      - main
      - 10.1.x
      - 9.0.x
      - 8.5.x
  pull_request:
    branches:
      - main

env:
  LC_ALL: en_US.UTF-8

jobs:
  JDKxx_Matrix:
    strategy:
      fail-fast: false
      matrix:
        isMain:
          - ${{ contains(github.ref, 'main') }}
        java: [ 17, 20, 21-ea ]
        os: [ ubuntu-latest, windows-latest ]
        exclude:
          - isMain: true
            java: 17
          - isMain: true
            java: 20
          - os: windows-latest
            java: 20
          - os: windows-latest
            java: 21-ea
    name: JDK${{ matrix.java }} ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    steps:
    - name: Git Checkout
      uses: actions/checkout@v3
    - name: Set up Java
      uses: actions/setup-java@v3
      with:
        java-version: ${{ matrix.java }}
        distribution: zulu
    - name: Build
      run: |
        ant -noinput echoproperties deploy embed test-nio test-status
      env:
        ANT_OPTS: -Dtest.openssl.exists=false -Dtest.excludePerformance=true -Dtest.exclude=**/TestHttp2Limits.java,org/apache/catalina/connector/TestRequest.java,org/apache/coyote/http11/filters/TestChunkedInputFilter.java,org/apache/catalina/startup/TestTomcat.java,org/apache/coyote/http2/TestHttp2Timeouts.java,org/apache/catalina/core/TestAsyncContextStateChanges.java,org/apache/catalina/valves/TestStuckThreadDetectionValve.java,org/apache/coyote/http11/TestHttp11Processor.java,org/apache/catalina/tribes/group/interceptors/TestOrderInterceptor.java,org/apache/catalina/tribes/group/interceptors/TestTcpFailureDetector.java,org/apache/catalina/servlets/TestDefaultServletOptions.java,org/apache/catalina/nonblocking/TestNonBlockingAPI.java,org/apache/catalina/authenticator/TestSSOnonLoginAndBasicAuthenticator.java,org/apache/catalina/authenticator/TestSSOnonLoginAndDigestAuthenticator.java,org/apache/tomcat/websocket/TestWsWebSocketContainer.java,org/apache/catalina/startup/TestHostConfigAutomaticDeployment.java,jakarta/servlet/http/TestHttpServletResponseSendError.java,org/apache/catalina/core/TestAsyncContextImpl.java,org/apache/catalina/servlets/TestWebdavServletOptions.java,org/apache/catalina/servlets/TestDefaultServletEncodingWithoutBom.java,org/apache/catalina/servlets/TestDefaultServletEncodingWithBom.java,org/apache/catalina/authenticator/TestFormAuthenticator.java,org/apache/naming/TestEnvEntry.java,org/apache/tomcat/util/net/TestSSLHostConfigCompat.java,org/apache/tomcat/websocket/pojo/TestPojoEndpointBase.java,org/apache/jasper/compiler/TestJspDocumentParser.java,org/apache/catalina/valves/rewrite/TestRewriteValve.java,org/apache/jasper/compiler/TestEncodingDetector.java,org/apache/catalina/core/TestApplicationContextGetRequestDispatcher.java,org/apache/jasper/compiler/TestParser.java,org/apache/coyote/http2/TestStreamQueryString.java,org/apache/coyote/http11/TestHttp11InputBuffer.java,org/apache/coyote/http11/TestHttp11InputBufferCRLF.java,org/apache/tomcat/util/net/TestSsl.java,org/apache/coyote/ajp/TestAbstractAjpProcessor.java,org/apache/catalina/tribes/group/TestGroupChannelSenderConnections.java,org/apache/coyote/http2/TestHttp2Section_6_8.java,org/apache/catalina/tribes/group/TestGroupChannelStartStop.java,org/apache/catalina/tribes/group/TestGroupChannelMemberArrival.java,org/apache/tomcat/websocket/TestWebSocketFrameClientSSL.java,org/apache/el/TestELInJsp.java,org/apache/coyote/TestIoTimeouts.java,org/apache/catalina/connector/TestMaxConnections.java,org/apache/coyote/http2/TestAsync.java,org/apache/catalina/authenticator/TestNonLoginAndBasicAuthenticator.java,org/apache/catalina/tribes/group/interceptors/TestNonBlockingCoordinator.java
      continue-on-error:
        true
    - name: Upload logs
      uses: actions/upload-artifact@v3
      with:
        name: JDK${{ matrix.java }}-${{ matrix.os }}-logs
        path: output/build/logs/TEST*.txt
        retention-days: 7
