| # 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: ci |
| |
| on: |
| pull_request: |
| push: |
| branches: |
| - master |
| |
| jobs: |
| build: |
| strategy: |
| matrix: |
| java: [17] |
| os: [ubuntu-latest, windows-latest] |
| include: |
| - java: 17 |
| os: ubuntu-latest |
| # - java: 18 |
| # os: ubuntu-latest |
| - java: 19 |
| os: ubuntu-latest |
| - java: 20 |
| os: ubuntu-latest |
| - java: 21 |
| os: ubuntu-latest |
| runs-on: ${{ matrix.os }} |
| if: (github.repository == 'apache/shenyu') |
| steps: |
| - name: Support longpaths |
| if: ${{ matrix.os == 'windows-latest'}} |
| run: git config --system core.longpaths true |
| - uses: actions/checkout@v3 |
| with: |
| submodules: true |
| - uses: ./actions/paths-filter |
| id: filter |
| with: |
| list-files: "csv" |
| filters: | |
| code: |
| - '!**/*.md' |
| - '!**/*.txt' |
| - '!resources/static/**' |
| - '!.asf.yaml' |
| - '!.gitignore' |
| - '!.licenserc.yaml' |
| - '!LICENSE' |
| - '!**/LICENSE' |
| - '!shenyu-*/**/LICENSE' |
| - '!shenyu-*/**/release-docs/LICENSE' |
| - '!NOTICE' |
| - '!**/NOTICE' |
| - '!shenyu-*/**/NOTICE' |
| - '!shenyu-*/**/release-docs/NOTICE' |
| - '!.github/ISSUE_TEMPLATE/**' |
| - '!.github/PULL_REQUEST_TEMPLATE' |
| - 'shenyu-*/**' |
| - 'pom.xml' |
| - '**/pom.xml' |
| - 'mvnw' |
| - 'mvnw.cmd' |
| - '.mvn/**' |
| - '.github/workflows/**' |
| - name: Debug - Show matched files |
| if: steps.filter.outputs.code == 'true' |
| run: | |
| echo "Matched files: ${{ steps.filter.outputs.code_files }}" |
| - name: Restore ShenYu Maven Repos |
| if: steps.filter.outputs.code == 'true' |
| id: restore-maven-cache |
| uses: actions/cache/restore@v3 |
| with: |
| path: ~/.m2/repository |
| key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} |
| restore-keys: | |
| ${{ runner.os }}-maven- |
| - uses: actions/setup-java@v4 |
| if: steps.filter.outputs.code == 'true' |
| with: |
| java-version: ${{ matrix.java }} |
| distribution: "temurin" |
| - name: Install mvnd |
| if: steps.filter.outputs.code == 'true' |
| shell: bash |
| run: | |
| MVND_VERSION=1.0.2 |
| if [[ "${{ runner.os }}" == "Windows" ]]; then |
| curl -sL https://downloads.apache.org/maven/mvnd/${MVND_VERSION}/maven-mvnd-${MVND_VERSION}-windows-amd64.zip -o mvnd.zip |
| unzip -q mvnd.zip |
| mkdir -p $HOME/.local |
| mv maven-mvnd-${MVND_VERSION}-windows-amd64 $HOME/.local/mvnd |
| echo "$HOME/.local/mvnd/bin" >> $GITHUB_PATH |
| echo "MVND_HOME=$HOME/.local/mvnd" >> $GITHUB_ENV |
| else |
| curl -sL https://downloads.apache.org/maven/mvnd/${MVND_VERSION}/maven-mvnd-${MVND_VERSION}-linux-amd64.zip -o mvnd.zip |
| unzip -q mvnd.zip |
| mkdir -p $HOME/.local |
| mv maven-mvnd-${MVND_VERSION}-linux-amd64 $HOME/.local/mvnd |
| echo "$HOME/.local/mvnd/bin" >> $GITHUB_PATH |
| echo "MVND_HOME=$HOME/.local/mvnd" >> $GITHUB_ENV |
| fi |
| |
| - name: Verify mvnd installation |
| if: steps.filter.outputs.code == 'true' |
| shell: bash |
| run: mvnd --version || echo "mvnd version check failed, will use maven wrapper as fallback" |
| |
| - name: Build with Maven |
| if: steps.filter.outputs.code == 'true' |
| shell: bash |
| run: | |
| if mvnd --version > /dev/null 2>&1; then |
| echo "Using mvnd for build" |
| mvnd -B clean test -Prelease |
| else |
| echo "Falling back to maven wrapper" |
| if [[ "${{ runner.os }}" == "Windows" ]]; then |
| ./mvnw.cmd -B clean test -Prelease |
| else |
| ./mvnw -B clean test -Prelease |
| fi |
| fi |
| - uses: codecov/codecov-action@v1 |
| with: |
| token: 2760af6a-3405-4882-9e61-04c5176fecfa |
| if: steps.filter.outputs.code == 'true' |
| - name: Save ShenYu Maven Repos |
| if: steps.filter.outputs.code == 'true' && steps.restore-maven-cache.outputs.cache-hit != 'true' |
| uses: actions/cache/save@v3 |
| with: |
| path: ~/.m2/repository |
| key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} |
| |
| check-license-header: |
| name: check-license-header |
| if: (github.repository == 'apache/shenyu') |
| runs-on: ubuntu-latest |
| timeout-minutes: 10 |
| steps: |
| - uses: actions/checkout@v3 |
| with: |
| submodules: true |
| - name: Check License Header |
| uses: apache/skywalking-eyes@9bd5feb86b5817aa6072b008f9866a2c3bbc8587 |
| env: |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| |
| requirement: |
| name: build |
| if: (github.repository == 'apache/shenyu') && always() |
| needs: |
| - build |
| runs-on: ubuntu-latest |
| steps: |
| - name: checking job status |
| run: | |
| [[ "${{ needs.build.result }}" == "success" ]] || exit -1 |