# 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: Java CI on: push: branches: [ master ] pull_request: branches: [ master ] # clear all permissions for GITHUB_TOKEN permissions: {} jobs: initial-build: runs-on: ubuntu-latest steps: - name: Set up JDK uses: actions/setup-java@v4 with: java-version: 17 distribution: 'temurin' - name: Checkout maven uses: actions/checkout@v4 with: persist-credentials: false - name: Cache Maven packages uses: actions/cache@v4 with: path: ~/.m2/repository/cached key: maven-${{ runner.os }}-initial-${{ hashFiles('**/pom.xml') }} restore-keys: | maven-${{ runner.os }}-initial- maven-${{ runner.os }}- - name: Set up Maven shell: bash run: mvn --errors --batch-mode --show-version org.apache.maven.plugins:maven-wrapper-plugin:3.3.2:wrapper "-Dmaven=4.0.0-rc-1" - name: Build Maven distributions shell: bash run: ./mvnw verify -e -B -V -Dmaven.repo.local=$HOME/.m2/repository/cached - name: List contents of target directory shell: bash run: ls -la apache-maven/target - name: Upload Maven distributions uses: actions/upload-artifact@v4 with: name: maven-distributions path: | apache-maven/target/apache-maven*.zip apache-maven/target/apache-maven*.tar.gz full-build: needs: initial-build runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] java: ['17', '21'] steps: - name: Set up JDK ${{ matrix.java }} uses: actions/setup-java@v4 with: java-version: ${{ matrix.java }} distribution: 'temurin' - name: Install Graphviz (MacOS) if: runner.os == 'macOS' run: brew install graphviz - name: Install Graphviz (Ubuntu) if: runner.os == 'Linux' run: sudo apt-get install graphviz - name: Install Graphviz (Windows) if: runner.os == 'Windows' run: choco install graphviz - name: Checkout maven uses: actions/checkout@v4 with: persist-credentials: false - name: Download Maven distribution uses: actions/download-artifact@v4 with: name: maven-distributions path: maven-dist - name: List downloaded files shell: bash run: ls -la maven-dist - name: Extract Maven distribution shell: bash run: | mkdir -p maven-local if [ "${{ runner.os }}" = "Windows" ]; then unzip maven-dist/apache-maven-*-bin.zip -d maven-local # Get the name of the extracted directory MAVEN_DIR=$(ls maven-local) # Move contents up one level mv "maven-local/$MAVEN_DIR"/* maven-local/ rm -r "maven-local/$MAVEN_DIR" else tar xzf maven-dist/apache-maven-*-bin.tar.gz -C maven-local --strip-components 1 fi echo "MAVEN_HOME=$PWD/maven-local" >> $GITHUB_ENV echo "$PWD/maven-local/bin" >> $GITHUB_PATH - name: Cache Maven packages uses: actions/cache@v4 with: path: ~/.m2/repository/cached key: maven-${{ runner.os }}-full-${{ hashFiles('**/pom.xml') }} restore-keys: | maven-${{ runner.os }}-full- maven-${{ runner.os }}- - name: Build with downloaded Maven shell: bash run: mvn verify -e -B -V -Dmaven.repo.local=$HOME/.m2/repository/cached - name: Build site with downloaded Maven shell: bash run: mvn site -e -B -V -Preporting -Dmaven.repo.local=$HOME/.m2/repository/cached integration-tests: needs: initial-build runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] java: ['17', '21'] steps: - name: Set up JDK ${{ matrix.java }} uses: actions/setup-java@v4 with: java-version: ${{ matrix.java }} distribution: 'temurin' - name: Checkout maven uses: actions/checkout@v4 with: persist-credentials: false - name: Download Maven distribution uses: actions/download-artifact@v4 with: name: maven-distributions path: maven-dist - name: List downloaded files shell: bash run: ls -la maven-dist - name: Extract Maven distribution shell: bash run: | mkdir -p maven-local if [ "${{ runner.os }}" = "Windows" ]; then unzip maven-dist/apache-maven-*-bin.zip -d maven-local # Get the name of the extracted directory MAVEN_DIR=$(ls maven-local) # Move contents up one level mv "maven-local/$MAVEN_DIR"/* maven-local/ rm -r "maven-local/$MAVEN_DIR" else tar xzf maven-dist/apache-maven-*-bin.tar.gz -C maven-local --strip-components 1 fi echo "MAVEN_HOME=$PWD/maven-local" >> $GITHUB_ENV echo "$PWD/maven-local/bin" >> $GITHUB_PATH - name: Cache Maven packages uses: actions/cache@v4 with: path: ~/.m2/repository/cached key: maven-${{ runner.os }}-its-${{ hashFiles('**/pom.xml') }} restore-keys: | maven-${{ runner.os }}-its maven-${{ runner.os }}- # we use two steps so that we can cache artifacts downloaded from Maven Central repository # without installing any local artifacts to not pollute the cache - name: Build maven and ITs shell: bash run: mvn package -DskipTests -e -B -V -Prun-its -Dmaven.repo.local=$HOME/.m2/repository/cached # Now run tests and ITs using a separate local repo (using the previous filled repo as tail) - name: Run integration tests shell: bash run: mvn install -e -B -V -Prun-its -Dmaven.repo.local=$HOME/.m2/repository/local -Dmaven.repo.local.tail=$HOME/.m2/repository/cached - name: Upload test artifacts uses: actions/upload-artifact@v4 if: failure() with: name: ${{ github.run_number }}-integration-test-artifact-${{ runner.os }}-${{ matrix.java }} path: ./its/core-it-suite/target/test-classes/