diff --git a/.github/actions/labeler/labeler.yml b/.github/actions/labeler/labeler.yml index 6bd9b6daf1e5..c082dfbd2baa 100644 --- a/.github/actions/labeler/labeler.yml +++ b/.github/actions/labeler/labeler.yml @@ -63,6 +63,7 @@ e2e: - any: ['.github/workflows/e2e.yml'] - any: ['.github/workflows/api-test.yml'] - any: ['.github/workflows/e2e-k8s.yml'] + - any: ['.github/workflows/ssl-e2e.yml'] test: - any: ['**/test/**/*'] diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 03ab9a5fa2a3..eb43d4059258 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -143,8 +143,6 @@ jobs: class: org.apache.dolphinscheduler.e2e.cases.SqlServerDataSourceE2ETest - name: HiveDataSourceE2ETest class: org.apache.dolphinscheduler.e2e.cases.HiveDataSourceE2ETest - - name: SslShellTaskE2ETest - class: org.apache.dolphinscheduler.e2e.cases.ssl.SslShellTaskE2ETest env: RECORDING_PATH: /tmp/recording-${{ matrix.case.name }} steps: diff --git a/.github/workflows/ssl-e2e.yml b/.github/workflows/ssl-e2e.yml new file mode 100644 index 000000000000..33af19845133 --- /dev/null +++ b/.github/workflows/ssl-e2e.yml @@ -0,0 +1,194 @@ +# +# 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. +# + +on: + pull_request: + push: + branches: + - dev + - '[0-9]+.[0-9]+.[0-9]+-prepare' + - '[0-9]+.[0-9]+.[0-9]+-release' + +name: E2E + +concurrency: + group: e2e-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +permissions: + pull-requests: write + +jobs: + paths-filter: + name: E2E-Path-Filter + runs-on: ubuntu-latest + outputs: + not-ignore: ${{ steps.filter.outputs.not-ignore }} + steps: + - uses: actions/checkout@v4 + - uses: dorny/paths-filter@b2feaf19c27470162a626bd6fa8438ae5b263721 + id: filter + with: + filters: | + not-ignore: + - '!(docs/**)' + build: + name: E2E-Build + needs: paths-filter + if: ${{ (needs.paths-filter.outputs.not-ignore == 'true') || (github.event_name == 'push') }} + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - uses: actions/checkout@v4 + with: + submodules: true + - name: Maximize runner space + uses: ./.github/actions/maximize-build-space + with: + root-reserve-mb: 30720 + temp-reserve-mb: 10240 + remove-dotnet: 'true' + remove-android: 'true' + remove-haskell: 'true' + remove-codeql: 'true' + remove-docker-images: 'true' + - uses: actions/checkout@v4 + with: + submodules: true + - name: Sanity Check + uses: ./.github/actions/sanity-check + with: + token: ${{ secrets.GITHUB_TOKEN }} + - name: Cache local Maven repository + uses: actions/cache@v4 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-e2e + restore-keys: ${{ runner.os }}-maven- + - name: Build Image + run: | + ./mvnw -B clean install \ + -Dmaven.test.skip=true \ + -Dspotless.skip=true \ + -Pdocker,staging -Ddocker.tag=ci + - name: Export Docker Images + run: | + components=("master" "worker" "api" "tools" "alert-server") + for component in "${components[@]}"; do + docker save apache/dolphinscheduler-${component}-server:ci -o /tmp/${component}-image.tar \ + && du -sh /tmp/standalone-image.tar + done + - uses: actions/upload-artifact@v4 + name: Upload master Docker Images + with: + name: standalone-image-e2e + path: /tmp/master-image.tar + retention-days: 1 + - uses: actions/upload-artifact@v4 + name: Upload worker Docker Images + with: + name: standalone-image-e2e + path: /tmp/worker-image.tar + retention-days: 1 + - uses: actions/upload-artifact@v4 + name: Upload api Docker Images + with: + name: standalone-image-e2e + path: /tmp/api-image.tar + retention-days: 1 + - uses: actions/upload-artifact@v4 + name: Upload tool Docker Images + with: + name: standalone-image-e2e + path: /tmp/tool-image.tar + retention-days: 1 + - uses: actions/upload-artifact@v4 + name: Upload alert-server Docker Images + with: + name: standalone-image-e2e + path: /tmp/alert-server-image.tar + retention-days: 1 + e2e: + name: ${{ matrix.case.name }} + needs: build + runs-on: ubuntu-latest + timeout-minutes: 30 + strategy: + matrix: + - name: SslShellTaskE2ETest + class: org.apache.dolphinscheduler.e2e.cases.ssl.SslShellTaskE2ETest + env: + RECORDING_PATH: /tmp/recording-${{ matrix.case.name }} + steps: + - uses: actions/checkout@v4 + with: + submodules: true + - name: Set up JDK 11 + uses: actions/setup-java@v4 + with: + java-version: 11 + distribution: 'adopt' + - name: Collect Workflow Telemetry + uses: ./.github/actions/workflow-telemetry-action + with: + comment_on_pr: false + - name: Cache local Maven repository + uses: actions/cache@v4 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}-e2e + restore-keys: ${{ runner.os }}-maven- + - uses: actions/download-artifact@v4 + name: Download Docker Images + with: + name: standalone-image-e2e + path: /tmp + - name: Load Docker Images + run: | + components=("master" "worker" "api" "tools" "alert-server") + for component in "${components[@]}"; do + docker load -i /tmp/${component}-image.tar + done + - name: Run Test + run: | + ./mvnw -B -f dolphinscheduler-e2e/pom.xml -am \ + -DfailIfNoTests=false \ + -Dtest=${{ matrix.case.class }} test + - uses: actions/upload-artifact@v4 + if: always() + name: Upload Recording + with: + name: recording-${{ matrix.case.name }} + path: ${{ env.RECORDING_PATH }} + retention-days: 1 + result: + name: E2E + runs-on: ubuntu-latest + timeout-minutes: 30 + needs: [ e2e, paths-filter ] + if: always() + steps: + - name: Status + run: | + if [[ ${{ needs.paths-filter.outputs.not-ignore }} == 'false' && ${{ github.event_name }} == 'pull_request' ]]; then + echo "Skip E2E!" + exit 0 + fi + if [[ ${{ needs.e2e.result }} != 'success' ]]; then + echo "E2E Failed!" + exit -1 + fi