Fix release build (#607) #1145
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This file was generated by Project Keeper. | |
name: CI Build | |
on: | |
push: | |
branches: [ | |
main | |
] | |
pull_request: null | |
workflow_dispatch: null | |
jobs: | |
build-and-test: | |
runs-on: ubuntu-latest | |
defaults: | |
run: { | |
shell: bash | |
} | |
permissions: { | |
contents: read, | |
issues: read | |
} | |
concurrency: { | |
group: '${{ github.workflow }}-build-and-test-${{ github.ref }}', | |
cancel-in-progress: true | |
} | |
outputs: { | |
release-required: '${{ steps.check-release.outputs.release-required }}' | |
} | |
steps: | |
- name: Free Disk Space | |
id: free-disk-space | |
if: ${{ false }} | |
run: | | |
sudo rm -rf /usr/local/lib/android | |
sudo rm -rf /usr/share/dotnet | |
- name: Checkout the repository | |
id: checkout | |
uses: actions/checkout@v4 | |
with: { | |
fetch-depth: 0 | |
} | |
- name: Set up JDKs | |
id: setup-java | |
uses: actions/setup-java@v4 | |
with: | |
distribution: temurin | |
java-version: |- | |
11 | |
17 | |
cache: maven | |
- name: Set up Go | |
id: setup-go | |
uses: actions/setup-go@v5 | |
with: { | |
go-version: '1.22', | |
cache-dependency-path: .project-keeper.yml | |
} | |
- { | |
name: Install Go tools, | |
id: install-go-tools, | |
run: go install github.com/google/[email protected] | |
} | |
- name: Cache SonarCloud packages | |
id: cache-sonar | |
uses: actions/cache@v4 | |
with: { | |
path: ~/.sonar/cache, | |
key: '${{ runner.os }}-sonar', | |
restore-keys: '${{ runner.os }}-sonar' | |
} | |
- { | |
name: Enable testcontainer reuse, | |
id: enable-testcontainer-reuse, | |
run: echo 'testcontainers.reuse.enable=true' > "$HOME/.testcontainers.properties" | |
} | |
- name: Run tests and build with Maven | |
id: maven-build | |
run: | | |
mvn -T 1C --batch-mode clean install verify \ | |
-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \ | |
-DtrimStackTrace=false | |
env: { | |
GITHUB_TOKEN: '${{ github.token }}' | |
} | |
- name: Sonar analysis | |
id: sonar-analysis | |
if: ${{ env.SONAR_TOKEN != null }} | |
run: | | |
mvn --batch-mode org.sonarsource.scanner.maven:sonar-maven-plugin:sonar \ | |
-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \ | |
-DtrimStackTrace=false \ | |
-Dsonar.token=$SONAR_TOKEN | |
env: { | |
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}', | |
SONAR_TOKEN: '${{ secrets.SONAR_TOKEN }}' | |
} | |
- { | |
name: Run project-keeper itself, | |
id: build-pk-verify, | |
run: 'mvn --batch-mode com.exasol:project-keeper-maven-plugin:verify --projects .' | |
} | |
- name: Verify that metrics.json was created | |
id: verify-metrics-json | |
run: | | |
# Ensure that file exists: | |
ls -lh coverage-aggregator/target/metrics.json | |
cat coverage-aggregator/target/metrics.json | |
- name: Verify Release Artifacts | |
id: verify-release-artifacts | |
run: "print_message() {\n local -r message=$1\n echo \"$message\"\n echo \"$message\" >> \"$GITHUB_STEP_SUMMARY\"\n}\n\nprint_message \"### Release Artifacts\"\n\nIFS=$'\\n' artifacts_array=($ARTIFACTS)\nmissing_files=()\nfor file in \"${artifacts_array[@]}\";\ndo \n echo \"Checking if file $file exists...\"\n if ! [[ -f \"$file\" ]]; then\n print_message \"* ⚠️ \\`$file\\` does not exist ⚠️\"\n echo \"Content of directory $(dirname \"$file\"):\"\n ls \"$(dirname \"$file\")\"\n missing_files+=(\"$file\")\n else\n print_message \"* \\`$file\\` ✅\" \n fi\ndone\nprint_message \"\"\nnumber_of_missing_files=${#missing_files[@]}\nif [[ $number_of_missing_files -gt 0 ]]; then\n print_message \"⚠️ $number_of_missing_files release artifact(s) missing ⚠️\"\n exit 1\nfi\n" | |
env: { | |
ARTIFACTS: '${{ steps.build-pk-verify.outputs.release-artifacts }}' | |
} | |
- name: Upload artifacts | |
id: upload-artifacts | |
uses: actions/upload-artifact@v4 | |
with: { | |
name: artifacts, | |
path: '${{ steps.build-pk-verify.outputs.release-artifacts }}', | |
retention-days: 5 | |
} | |
- name: Configure link check | |
id: configure-link-check | |
run: | | |
mkdir -p ./target | |
echo '{"aliveStatusCodes": [429, 200], "ignorePatterns": [' \ | |
'{"pattern": "^https?://(www|dev).mysql.com/"},' \ | |
'{"pattern": "^https?://(www.)?opensource.org"}' \ | |
'{"pattern": "^https?://(www.)?eclipse.org"}' \ | |
'{"pattern": "^https?://projects.eclipse.org"}' \ | |
']}' > ./target/broken_links_checker.json | |
- uses: gaurav-nelson/github-action-markdown-link-check@v1 | |
id: run-link-check | |
with: { | |
use-quiet-mode: yes, | |
use-verbose-mode: yes, | |
config-file: ./target/broken_links_checker.json | |
} | |
next-java-compatibility: | |
runs-on: ubuntu-latest | |
defaults: | |
run: { | |
shell: bash | |
} | |
permissions: { | |
contents: read | |
} | |
concurrency: { | |
group: '${{ github.workflow }}-next-java-${{ github.ref }}', | |
cancel-in-progress: true | |
} | |
steps: | |
- name: Checkout the repository | |
id: checkout | |
uses: actions/checkout@v4 | |
with: { | |
fetch-depth: 0 | |
} | |
- name: Set up JDK 21 | |
id: setup-java | |
uses: actions/setup-java@v4 | |
with: { | |
distribution: temurin, | |
java-version: '21', | |
cache: maven | |
} | |
- { | |
name: Run tests and build with Maven 21, | |
id: build-next-java, | |
run: mvn --batch-mode clean package -DtrimStackTrace=false -Djava.version=21 | |
} | |
build: | |
needs: [ | |
build-and-test, | |
next-java-compatibility | |
] | |
runs-on: ubuntu-latest | |
defaults: | |
run: { | |
shell: bash | |
} | |
permissions: { | |
contents: read, | |
issues: read | |
} | |
outputs: { | |
release-required: '${{ steps.check-release.outputs.release-required }}' | |
} | |
steps: | |
- name: Checkout the repository | |
id: checkout | |
uses: actions/checkout@v4 | |
with: { | |
fetch-depth: 0 | |
} | |
- name: Set up JDKs | |
id: setup-java | |
uses: actions/setup-java@v4 | |
with: | |
distribution: temurin | |
java-version: |- | |
11 | |
17 | |
cache: maven | |
- name: Install Project Keeper before check-release | |
id: install-project-keeper | |
run: | | |
mvn --batch-mode --threads 1C install \ | |
-Dmaven.test.skip=true -Dproject-keeper.skip=true \ | |
-Dossindex.skip=true -Dmaven.javadoc.skip=true \ | |
-Derror-code-crawler.skip=true -Dreproducible.skip=true | |
- name: Check if release is needed | |
id: check-release | |
if: ${{ github.ref == 'refs/heads/main' }} | |
run: | | |
if mvn --batch-mode com.exasol:project-keeper-maven-plugin:verify-release --projects .; then | |
echo "### ✅ Release preconditions met, start release" >> "$GITHUB_STEP_SUMMARY" | |
echo "release-required=true" >> "$GITHUB_OUTPUT" | |
else | |
echo "### 🛑 Not all release preconditions met, skipping release" >> "$GITHUB_STEP_SUMMARY" | |
echo "See log output for details." >> "$GITHUB_STEP_SUMMARY" | |
echo "release-required=false" >> "$GITHUB_OUTPUT" | |
fi | |
env: { | |
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}' | |
} | |
start_release: | |
needs: build | |
if: ${{ github.ref == 'refs/heads/main' && needs.build.outputs.release-required == 'true' }} | |
concurrency: { | |
cancel-in-progress: false, | |
group: release | |
} | |
secrets: inherit | |
permissions: { | |
contents: write, | |
actions: read, | |
issues: read | |
} | |
uses: ./.github/workflows/release.yml | |
with: { | |
started-from-ci: true | |
} |