# 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, pull_request, workflow_dispatch] # clear all permissions for GITHUB_TOKEN permissions: {} jobs: build: # execute on any push, workflow_dispatch or pull request from forked repo if: > github.event_name == 'push' || github.event_name == 'workflow_dispatch' || ( github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork ) strategy: matrix: os: [ubuntu-latest, windows-latest, macOS-latest] fail-fast: false runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 with: persist-credentials: false - uses: actions/setup-java@v4 with: java-version: 17 distribution: 'temurin' cache: 'maven' - name: Set up Maven run: mvn --errors --batch-mode --show-version org.apache.maven.plugins:maven-wrapper-plugin:3.3.2:wrapper "-Dmaven=3.9.7" - name: Build with Maven run: ./mvnw verify -e -B -V -DdistributionFileName=apache-maven - name: Upload built Maven uses: actions/upload-artifact@v4 if: ${{ matrix.os == 'ubuntu-latest' }} with: name: built-maven path: apache-maven/target/ integration-test: needs: build strategy: matrix: os: [ubuntu-latest, windows-latest, macOS-latest] java: [17, 21] fail-fast: false runs-on: ${{ matrix.os }} steps: - name: Collect environment context variables shell: bash env: PR_HEAD_LABEL: ${{ github.event.pull_request.head.label }} run: | set +e repo=maven-integration-testing target_branch=master target_user=apache if [ "$GITHUB_EVENT_NAME" == "pull_request" ]; then user=${PR_HEAD_LABEL%:*} branch=${PR_HEAD_LABEL#*:} else user=${GITHUB_REPOSITORY%/*} branch=${GITHUB_REF#refs/heads/} fi if [ $branch != "master" ]; then git ls-remote https://github.com/$user/$repo.git | grep "refs/heads/${branch}$" > /dev/null if [ $? -eq 0 ]; then echo "Found a branch \"$branch\" in fork \"$user/$repo\", configuring this for the integration tests to be run against." target_branch=$branch target_user=$user else echo "Could not find fork \"$user/$repo\" or a branch \"$branch\" in this fork. Falling back to \"$target_branch\" in \"$target_user/$repo\"." fi else echo "Integration tests will run against $target_user/$repo for master builds." fi echo "REPO_BRANCH=$target_branch" >> $GITHUB_ENV echo "REPO_USER=$target_user" >> $GITHUB_ENV - name: Checkout maven-integration-testing uses: actions/checkout@v4 with: repository: ${{ env.REPO_USER }}/maven-integration-testing path: maven-integration-testing/ ref: ${{ env.REPO_BRANCH }} persist-credentials: false - name: Set up JDK uses: actions/setup-java@v4 with: java-version: ${{ matrix.java }} distribution: 'temurin' # cache: 'maven' - don't use cache for integration tests - uses: actions/checkout@v4 with: path: maven/ persist-credentials: false - name: Set up Maven run: mvn --errors --batch-mode --show-version org.apache.maven.plugins:maven-wrapper-plugin:3.3.2:wrapper "-Dmaven=3.9.7" - name: Build Maven run: ./mvnw install -e -B -V -DdistributionFileName=apache-maven -DskipTests -f maven/pom.xml - name: Running integration tests shell: bash run: ./mvnw install -e -B -V -Prun-its,embedded -DmavenDistro="$GITHUB_WORKSPACE/maven/apache-maven/target/apache-maven-bin.zip" -f maven-integration-testing/pom.xml - name: Upload artifact on integration testing uses: actions/upload-artifact@v4 if: failure() && matrix.os != 'windows-latest' with: name: ${{ github.run_number }}-integration-test-artifact-${{ matrix.os }}-${{ matrix.java }} path: ./maven-integration-testing/core-it-suite/target/test-classes/