diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index ca70f2617..0bc4ad10e 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -1,8 +1,10 @@
metadata/* @oracle/graalvm-reachability-maintainer
-tests/* @oracle/graalvm-reachability-maintainer
+tests/src/* @oracle/graalvm-reachability-maintainer
+tests/tck-build-logic/* @vjovanov
tests/tck-build-logic/src/main/resources/allowed-docker-images/* @matneu
library-and-framework-list.json @fniephaus
.github/* @vjovanov
-docs/* @vjovanov
+docs/* @vjovanov @ban-mi
+README.md @vjovanov @ban-mi
gradle/* @vjovanov
/* @vjovanov
diff --git a/pull_request_template.md b/.github/pull_request_template.md
similarity index 100%
rename from pull_request_template.md
rename to .github/pull_request_template.md
diff --git a/.github/workflows/checkstyle-skip.yml b/.github/workflows/checkstyle-skip.yml
index bed200961..2ae60e70b 100644
--- a/.github/workflows/checkstyle-skip.yml
+++ b/.github/workflows/checkstyle-skip.yml
@@ -3,6 +3,7 @@ name: "Check code style"
on:
pull_request:
paths:
+ - 'docs/**'
- '**.md'
- 'library-and-framework-list*.json'
diff --git a/.github/workflows/checkstyle.yml b/.github/workflows/checkstyle.yml
index 5ca5ec034..9fcef7915 100644
--- a/.github/workflows/checkstyle.yml
+++ b/.github/workflows/checkstyle.yml
@@ -3,23 +3,25 @@ name: "Check code style"
on:
pull_request:
paths-ignore:
+ - 'docs/**'
- '**.md'
- 'library-and-framework-list*.json'
jobs:
checkstyle:
- if: github.repository == 'oracle/graalvm-reachability-metadata'
name: "π Check style according to checkstyle.xml"
runs-on: "ubuntu-22.04"
timeout-minutes: 15
steps:
- name: "βοΈ Checkout repository"
uses: actions/checkout@v4
+
- uses: actions/setup-python@v4
- - name: "π§ Prepare environment"
- uses: graalvm/setup-graalvm@v1
+
+ - name: "π§ Setup java"
+ uses: actions/setup-java@v4
with:
- java-version: '17'
distribution: 'graalvm'
- github-token: ${{ secrets.GITHUB_TOKEN }}
+ java-version: '21'
+
- run: ./gradlew checkstyle
diff --git a/.github/workflows/create-scheduled-release.yml b/.github/workflows/create-scheduled-release.yml
index 693a62166..a26e59e32 100644
--- a/.github/workflows/create-scheduled-release.yml
+++ b/.github/workflows/create-scheduled-release.yml
@@ -12,6 +12,7 @@ permissions:
jobs:
get-changed-metadata:
name: "π Get a list of changed metadata"
+ if: github.repository == 'oracle/graalvm-reachability-metadata'
runs-on: "ubuntu-22.04"
timeout-minutes: 5
outputs:
@@ -22,16 +23,18 @@ jobs:
uses: actions/checkout@v4
with:
fetch-depth: 0
+
- name: "π§ Setup java"
uses: actions/setup-java@v4
with:
distribution: 'graalvm'
java-version: '21'
+
- name: "πΈοΈ Get changed metadata matrix"
id: set-matrix
run: |
LATEST_TAG=$(git tag --list | sort -V | tail -1)
- ./gradlew generateMatrixDiffCoordinates -PbaseCommit=$(git show-ref -s $LATEST_TAG) -PnewCommit=$(git rev-parse HEAD)
+ ./gradlew generateChangedCoordinatesMatrix -PbaseCommit=$(git show-ref -s $LATEST_TAG) -PnewCommit=$(git rev-parse HEAD)
release:
needs: get-changed-metadata
@@ -45,11 +48,13 @@ jobs:
uses: actions/checkout@v4
with:
fetch-depth: 0
+
- name: "π§ Setup java"
uses: actions/setup-java@v4
with:
distribution: 'graalvm'
java-version: '21'
+
- name: "Get tags"
run: |
PREVIOUS_RELEASE_TAG=$(git tag --list | sort -V | tail -1)
@@ -57,15 +62,19 @@ jobs:
CURRENT_RELEASE_TAG=$(sed -E 's/^([0-9]+\.)([0-9]+\.)([0-9]+)/echo \1\2$((\3+1))/e' <<< $PREVIOUS_RELEASE_TAG)
echo "CURRENT_RELEASE_TAG=$CURRENT_RELEASE_TAG" >> ${GITHUB_ENV}
+
- name: "β¬οΈ Update version"
run: |
sed -i "s/project.version(\"1.0.0-SNAPSHOT\")/project.version(\"${{ env.CURRENT_RELEASE_TAG }}\")/g" build.gradle
+
- name: "π Run spotless check"
run: |
./gradlew spotlessCheck
+
- name: "π Generate release artifacts"
run: |
./gradlew package
+
- name: "π Commit changes"
run: |
git config --local user.email "actions@github.com"
@@ -74,6 +83,7 @@ jobs:
git commit -m "Release version ${{ env.CURRENT_RELEASE_TAG }}"
git tag ${{ env.CURRENT_RELEASE_TAG }}
git push origin ${{ env.CURRENT_RELEASE_TAG }}
+
- name: "π Publish a release"
run: |
gh release create ${{ env.CURRENT_RELEASE_TAG }} build/graalvm-reachability-metadata-*.zip --generate-notes --notes-start-tag ${{ env.PREVIOUS_RELEASE_TAG }}
diff --git a/.github/workflows/library-and-framework-list-validation.yml b/.github/workflows/library-and-framework-list-validation.yml
index bec665690..a146b16fa 100644
--- a/.github/workflows/library-and-framework-list-validation.yml
+++ b/.github/workflows/library-and-framework-list-validation.yml
@@ -7,16 +7,17 @@ on:
jobs:
validate-library-and-framework-list-json:
- if: github.repository == 'oracle/graalvm-reachability-metadata'
name: "π Validate the JSON file"
runs-on: "ubuntu-22.04"
timeout-minutes: 5
steps:
- name: "βοΈ Checkout repository"
uses: actions/checkout@v4
+
- uses: actions/setup-python@v4
with:
python-version: '3.10'
+
- name: Check that the JSON file is well-formatted and sorted by artifact
run: |
JSON="library-and-framework-list.json"
@@ -29,6 +30,7 @@ jobs:
echo "'${JSON}' is no longer sorted by artifact key. You can use 'jq' to sort it: 'sorted="$(jq -s '.[] | sort_by(.artifact)' ${JSON})" && echo -E "${sorted}" > ${JSON}"
exit 8
fi
+
- name: Check that the JSON file conforms to the schema
run: |
pip install check-jsonschema
diff --git a/.github/workflows/scan-docker-images.yml b/.github/workflows/scan-docker-images.yml
index fbb179262..14d8c9117 100644
--- a/.github/workflows/scan-docker-images.yml
+++ b/.github/workflows/scan-docker-images.yml
@@ -1,11 +1,11 @@
name: "Scan docker images from the allowed docker images list"
on:
- # we should run this job if somebody wants to add/update allowed docker images
+ # we run this job if somebody wants to add/update allowed docker images
pull_request:
paths:
- 'tests/tck-build-logic/src/main/resources/allowed-docker-images/**'
- # we should run this job once a week to check if new vulnerabilities are found in existing images
+ # we run this job once a week to check if new vulnerabilities are found in existing images
schedule:
- cron: "0 0 * * 6"
@@ -18,18 +18,22 @@ jobs:
uses: actions/checkout@v4
with:
fetch-depth: 0
- - uses: graalvm/setup-graalvm@v1
+
+ - uses: actions/setup-java@v4
with:
- java-version: '17'
distribution: 'graalvm'
+ java-version: '21'
github-token: ${{ secrets.GITHUB_TOKEN }}
+
- name: "Install required tools"
run: |
- curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sudo sh -s -- -b /usr/local/bin
+ curl -sSfL https://get.anchore.io/grype/v0.104.0/install.sh | sudo sh -s -- -b /usr/local/bin
sudo apt-get install jq
+
- name: "π Check changed docker images"
if: github.event_name == 'pull_request'
run: ./gradlew checkAllowedDockerImages --baseCommit=${{ github.event.pull_request.base.sha }} --newCommit=${{ github.event.pull_request.head.sha }}
+
- name: "π Check all docker images"
- if: github.event_name != 'pull_request' && github.repository == 'oracle/graalvm-reachability-metadata'
+ if: github.event_name == 'schedule' && github.repository == 'oracle/graalvm-reachability-metadata'
run: ./gradlew checkAllowedDockerImages
diff --git a/.github/workflows/disable-docker.sh b/.github/workflows/scripts/disable-docker.sh
similarity index 100%
rename from .github/workflows/disable-docker.sh
rename to .github/workflows/scripts/disable-docker.sh
diff --git a/.github/workflows/discard-port.conf b/.github/workflows/scripts/discard-port.conf
similarity index 100%
rename from .github/workflows/discard-port.conf
rename to .github/workflows/scripts/discard-port.conf
diff --git a/.github/workflows/dockerd.service b/.github/workflows/scripts/dockerd.service
similarity index 100%
rename from .github/workflows/dockerd.service
rename to .github/workflows/scripts/dockerd.service
diff --git a/.github/workflows/run-consecutive-tests.sh b/.github/workflows/scripts/run-consecutive-tests.sh
similarity index 96%
rename from .github/workflows/run-consecutive-tests.sh
rename to .github/workflows/scripts/run-consecutive-tests.sh
index beaac23a7..26036a4aa 100644
--- a/.github/workflows/run-consecutive-tests.sh
+++ b/.github/workflows/scripts/run-consecutive-tests.sh
@@ -62,7 +62,7 @@ for VERSION in "${VERSIONS[@]}"; do
echo "$DELIMITER"
- if ! run_multiple_attempts "javac compile" 1 javac; then
+ if ! run_multiple_attempts "javac compile" 1 compileTestJava; then
break
fi
diff --git a/.github/workflows/test-all-metadata-skip.yml b/.github/workflows/test-all-metadata-skip.yml
deleted file mode 100644
index a9289b2b3..000000000
--- a/.github/workflows/test-all-metadata-skip.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-name: "Test all metadata"
-
-on:
- push:
- branches:
- - master
- paths:
- - '**.md'
- - 'library-and-framework-list*.json'
- workflow_dispatch:
-
-jobs:
- build:
- name: "π§ͺ All metadata tests have passed"
- runs-on: ubuntu-latest
- steps:
- - run: 'echo "No build required"'
diff --git a/.github/workflows/test-all-metadata.yml b/.github/workflows/test-all-metadata.yml
index 9c4490e11..4a87c9d71 100644
--- a/.github/workflows/test-all-metadata.yml
+++ b/.github/workflows/test-all-metadata.yml
@@ -1,13 +1,12 @@
-name: "Test all metadata"
+name: "Test all metadata (one version per test suite)"
on:
- push:
- branches:
- - master
- paths-ignore:
- - '**.md'
- - 'library-and-framework-list*.json'
workflow_dispatch:
+ pull_request:
+ branches:
+ - master
+ paths:
+ - 'ci.json'
concurrency:
group: "workflow = ${{ github.workflow }}, ref = ${{ github.event.ref }}, pr = ${{ github.event.pull_request.id }}"
@@ -15,7 +14,7 @@ concurrency:
jobs:
get-all-metadata:
- if: github.repository == 'oracle/graalvm-reachability-metadata'
+ if: github.event_name == 'workflow_dispatch' || github.repository == 'oracle/graalvm-reachability-metadata'
name: "π Get list of all supported libraries"
runs-on: "ubuntu-22.04"
timeout-minutes: 5
@@ -24,22 +23,22 @@ jobs:
steps:
- name: "βοΈ Checkout repository"
uses: actions/checkout@v4
- - name: "π§ Prepare environment"
- uses: graalvm/setup-graalvm@v1
+
+ - name: "π§ Setup java"
+ uses: actions/setup-java@v4
with:
- java-version: '17'
distribution: 'graalvm'
- github-token: ${{ secrets.GITHUB_TOKEN }}
+ java-version: '21'
+
- name: "πΈοΈ Populate matrix"
id: set-matrix
run: |
- ./gradlew generateMatrixMatchingCoordinates -Pcoordinates=all
+ ./gradlew generateMatrixBatchedCoordinates -Pbatches=16
test-all-metadata:
- if: github.repository == 'oracle/graalvm-reachability-metadata'
name: "π§ͺ ${{ matrix.coordinates }} (GraalVM for JDK ${{ matrix.version }} @ ${{ matrix.os }})"
runs-on: ${{ matrix.os }}
- timeout-minutes: 20
+ timeout-minutes: 120
needs: get-all-metadata
strategy:
fail-fast: false
@@ -47,24 +46,29 @@ jobs:
steps:
- name: "βοΈ Checkout repository"
uses: actions/checkout@v4
+
- name: "π§ Setup java"
uses: actions/setup-java@v4
with:
- distribution: 'oracle'
- java-version: '17'
- - name: "π§ Prepare environment"
+ distribution: 'graalvm'
+ java-version: '21'
+
+ - name: "π§ Download GraalVM for metadata testing"
uses: graalvm/setup-graalvm@v1
with:
- set-java-home: 'false'
- java-version: ${{ matrix.version }}
distribution: 'graalvm'
- github-token: ${{ secrets.GITHUB_TOKEN }}
+ java-version: ${{ matrix.version }}
+ set-java-home: 'false'
native-image-job-reports: 'true'
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+
- name: "Pull allowed docker images"
run: |
- ./gradlew pullAllowedDockerImages --coordinates=${{ matrix.coordinates }}
+ ./gradlew pullAllowedDockerImages -Pcoordinates=${{ matrix.coordinates }}
+
- name: "Disable docker networking"
- run: bash ./.github/workflows/disable-docker.sh
+ run: bash ./.github/workflows/scripts/disable-docker.sh
+
- name: "π§ͺ Run '${{ matrix.coordinates }}' tests"
run: |
./gradlew test -Pcoordinates=${{ matrix.coordinates }}
@@ -73,7 +77,6 @@ jobs:
name: "π§ͺ All metadata tests have passed"
runs-on: "ubuntu-22.04"
timeout-minutes: 1
- if: ${{ always() }} && github.repository == 'oracle/graalvm-reachability-metadata'
needs: test-all-metadata
steps:
- name: "All tests passed"
diff --git a/.github/workflows/test-changed-infrastructure-skip.yml b/.github/workflows/test-changed-infrastructure-skip.yml
new file mode 100644
index 000000000..e85f2aa23
--- /dev/null
+++ b/.github/workflows/test-changed-infrastructure-skip.yml
@@ -0,0 +1,25 @@
+name: "Test changed build logic"
+
+on:
+ pull_request:
+ branches:
+ - master
+ paths-ignore:
+ - "tests/tck-build-logic/**"
+ - "gradle/**"
+ - "build.gradle"
+ - "settings.gradle"
+ - "gradle.properties"
+
+jobs:
+ get-changed-infrastructure:
+ name: "π Get a list of libraries to test for build-logic changes"
+ runs-on: ubuntu-latest
+ steps:
+ - run: 'echo "No build required"'
+
+ all-infrastructure-passed:
+ name: "π§ͺ All build-logic triggered tests have passed"
+ runs-on: ubuntu-latest
+ steps:
+ - run: 'echo "No build required"'
diff --git a/.github/workflows/test-changed-infrastructure.yml b/.github/workflows/test-changed-infrastructure.yml
new file mode 100644
index 000000000..5eac2ed13
--- /dev/null
+++ b/.github/workflows/test-changed-infrastructure.yml
@@ -0,0 +1,100 @@
+name: "Test changed build logic"
+
+on:
+ pull_request:
+ branches:
+ - master
+ paths:
+ - "tests/tck-build-logic/**"
+ - "gradle/**"
+ - "build.gradle"
+ - "settings.gradle"
+ - "gradle.properties"
+
+concurrency:
+ group: "workflow = ${{ github.workflow }}, ref = ${{ github.event.ref }}, pr = ${{ github.event.pull_request.id }}"
+ cancel-in-progress: true
+
+jobs:
+ get-changed-infrastructure:
+ name: "π Get a list of libraries to test for build-logic changes"
+ runs-on: "ubuntu-22.04"
+ timeout-minutes: 5
+ outputs:
+ matrix: ${{ steps.set-matrix.outputs.matrix }}
+ none-found: ${{ steps.set-matrix.outputs.none-found }}
+ steps:
+ - name: "βοΈ Checkout repository"
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: "π§ Setup java"
+ uses: actions/setup-java@v4
+ with:
+ distribution: 'graalvm'
+ java-version: '21'
+
+ - name: "πΈοΈ Populate matrix"
+ id: set-matrix
+ run: |
+ ./gradlew generateInfrastructureChangedCoordinatesMatrix -PbaseCommit=${{ github.event.pull_request.base.sha }} -PnewCommit=${{ github.event.pull_request.head.sha }}
+
+ test-changed-infrastructure:
+ name: "π§ͺ ${{ matrix.coordinates }} (GraalVM for JDK ${{ matrix.version }} @ ${{ matrix.os }})"
+ if: needs.get-changed-infrastructure.result == 'success' && needs.get-changed-infrastructure.outputs.none-found != 'true' && github.repository == 'oracle/graalvm-reachability-metadata'
+ runs-on: ${{ matrix.os }}
+ timeout-minutes: 20
+ needs: get-changed-infrastructure
+
+ strategy:
+ fail-fast: false
+ matrix: ${{ fromJson(needs.get-changed-infrastructure.outputs.matrix) }}
+
+ steps:
+ - name: "βοΈ Checkout repository"
+ uses: actions/checkout@v4
+
+ - name: "π§ Setup java"
+ uses: actions/setup-java@v4
+ with:
+ distribution: 'graalvm'
+ java-version: '21'
+
+ - name: "π§ Download GraalVM for metadata testing"
+ uses: graalvm/setup-graalvm@v1
+ with:
+ distribution: "graalvm"
+ java-version: ${{ matrix.version }}
+ set-java-home: "false"
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ native-image-job-reports: "true"
+
+ - name: "Pull allowed docker images"
+ run: |
+ ./gradlew pullAllowedDockerImages -Pcoordinates=${{ matrix.coordinates }}
+
+ - name: "Disable docker networking"
+ run: bash ./.github/workflows/scripts/disable-docker.sh
+
+ - name: "π Check metadata files content"
+ run: |
+ ./gradlew checkMetadataFiles -Pcoordinates=${{ matrix.coordinates }}
+
+ - name: "π§ͺ Run '${{ matrix.coordinates }}' tests"
+ run: |
+ ./gradlew test -Pcoordinates=${{ matrix.coordinates }}
+
+ all-infrastructure-passed:
+ name: "π§ͺ All build-logic triggered tests have passed"
+ runs-on: "ubuntu-22.04"
+ timeout-minutes: 1
+ needs: test-changed-infrastructure
+ steps:
+ - name: "All tests passed"
+ if: needs.test-changed-infrastructure.result == 'success'
+ run: exit 0
+
+ - name: "Some tests failed"
+ if: needs.test-changed-infrastructure.result == 'failure'
+ run: exit 1
diff --git a/.github/workflows/test-changed-metadata-skip.yml b/.github/workflows/test-changed-metadata-skip.yml
index 81bfd24b3..82d07a247 100644
--- a/.github/workflows/test-changed-metadata-skip.yml
+++ b/.github/workflows/test-changed-metadata-skip.yml
@@ -4,9 +4,9 @@ on:
pull_request:
branches:
- master
- paths:
- - '**.md'
- - 'library-and-framework-list*.json'
+ paths-ignore:
+ - 'metadata/*'
+ - 'tests/src/*'
jobs:
get-changed-metadata:
diff --git a/.github/workflows/test-changed-metadata.yml b/.github/workflows/test-changed-metadata.yml
index d29dceebb..3e104005e 100644
--- a/.github/workflows/test-changed-metadata.yml
+++ b/.github/workflows/test-changed-metadata.yml
@@ -4,9 +4,9 @@ on:
pull_request:
branches:
- master
- paths-ignore:
- - '**.md'
- - 'library-and-framework-list*.json'
+ paths:
+ - 'metadata/**'
+ - 'tests/src/**'
concurrency:
group: "workflow = ${{ github.workflow }}, ref = ${{ github.event.ref }}, pr = ${{ github.event.pull_request.id }}"
@@ -14,7 +14,6 @@ concurrency:
jobs:
get-changed-metadata:
- if: github.repository == 'oracle/graalvm-reachability-metadata'
name: "π Get a list of all changed libraries"
runs-on: "ubuntu-22.04"
timeout-minutes: 5
@@ -26,16 +25,16 @@ jobs:
uses: actions/checkout@v4
with:
fetch-depth: 0
- - name: "π§ Prepare environment"
- uses: graalvm/setup-graalvm@v1
+ - name: "π§ Setup Java"
+ uses: actions/setup-java@v4
with:
- java-version: '17'
distribution: 'graalvm'
+ java-version: '21'
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: "πΈοΈ Populate matrix"
id: set-matrix
run: |
- ./gradlew generateMatrixDiffCoordinates -PbaseCommit=${{ github.event.pull_request.base.sha }} -PnewCommit=${{ github.event.pull_request.head.sha }}
+ ./gradlew generateChangedCoordinatesMatrix -PbaseCommit=${{ github.event.pull_request.base.sha }} -PnewCommit=${{ github.event.pull_request.head.sha }}
test-changed-metadata:
name: "π§ͺ ${{ matrix.coordinates }} (GraalVM for JDK ${{ matrix.version }} @ ${{ matrix.os }})"
@@ -50,27 +49,33 @@ jobs:
steps:
- name: "βοΈ Checkout repository"
uses: actions/checkout@v4
+
- name: "π§ Setup java"
uses: actions/setup-java@v4
with:
- distribution: 'oracle'
- java-version: '17'
- - name: "π§ Prepare environment"
+ distribution: 'graalvm'
+ java-version: '21'
+
+ - name: "π§ Download GraalVM for metadata testing"
uses: graalvm/setup-graalvm@v1
with:
- set-java-home: 'false'
- java-version: ${{ matrix.version }}
distribution: 'graalvm'
- github-token: ${{ secrets.GITHUB_TOKEN }}
+ java-version: ${{ matrix.version }}
+ set-java-home: 'false'
native-image-job-reports: 'true'
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+
- name: "Pull allowed docker images"
run: |
- ./gradlew pullAllowedDockerImages --coordinates=${{ matrix.coordinates }}
+ ./gradlew pullAllowedDockerImages -Pcoordinates=${{ matrix.coordinates }}
+
- name: "Disable docker networking"
- run: bash ./.github/workflows/disable-docker.sh
- - name: "π Check metadata config files content"
+ run: bash ./.github/workflows/scripts/disable-docker.sh
+
+ - name: "π Check metadata files content"
run: |
- ./gradlew checkConfigFiles --coordinates=${{ matrix.coordinates }}
+ ./gradlew checkMetadataFiles -Pcoordinates=${{ matrix.coordinates }}
+
- name: "π§ͺ Run '${{ matrix.coordinates }}' tests"
run: |
./gradlew test -Pcoordinates=${{ matrix.coordinates }}
@@ -79,7 +84,6 @@ jobs:
name: "π§ͺ All metadata tests have passed"
runs-on: "ubuntu-22.04"
timeout-minutes: 1
- if: ${{ always() }} && github.repository == 'oracle/graalvm-reachability-metadata'
needs: test-changed-metadata
steps:
- name: "All tests passed"
diff --git a/.github/workflows/verify-new-library-version-compatibility.yml b/.github/workflows/verify-new-library-version-compatibility.yml
index 46e6e90e5..652f56fc8 100644
--- a/.github/workflows/verify-new-library-version-compatibility.yml
+++ b/.github/workflows/verify-new-library-version-compatibility.yml
@@ -16,6 +16,7 @@ concurrency:
jobs:
get-all-libraries:
name: "π Get list of all supported libraries with newer versions"
+ # Opens PRs, with labels and assignees. Works only on the main repo.
if: github.repository == 'oracle/graalvm-reachability-metadata'
runs-on: ubuntu-22.04
timeout-minutes: 5
@@ -27,12 +28,11 @@ jobs:
- name: "βοΈ Checkout repository"
uses: actions/checkout@v4
- - name: "π§ Prepare environment"
- uses: graalvm/setup-graalvm@v1
+ - name: "π§ Setup java"
+ uses: actions/setup-java@v4
with:
- java-version: '21'
distribution: 'graalvm'
- github-token: ${{ secrets.GITHUB_TOKEN }}
+ java-version: '21'
- name: "π
Set branch name"
id: set-branch-name
@@ -74,17 +74,17 @@ jobs:
- name: "π§ Setup java"
uses: actions/setup-java@v4
with:
- distribution: 'oracle'
+ distribution: 'graalvm'
java-version: '21'
- - name: "π§ Prepare environment"
+ - name: "π§ Download GraalVM for metadata testing"
uses: graalvm/setup-graalvm@v1
with:
- set-java-home: 'false'
- java-version: 21
distribution: 'graalvm'
- github-token: ${{ secrets.GITHUB_TOKEN }}
+ java-version: 25
+ set-java-home: 'false'
native-image-job-reports: 'true'
+ github-token: ${{ secrets.GITHUB_TOKEN }}
- name: "Check for an existing issue and skip further testing if found"
id: check_existing_issue
@@ -122,17 +122,17 @@ jobs:
- name: "Pull allowed docker images"
if: steps.check_existing_issue.outputs.skip != 'true'
- run: ./gradlew pullAllowedDockerImages --coordinates="${{ env.TEST_COORDINATES }}"
+ run: ./gradlew pullAllowedDockerImages -Pcoordinates="${{ env.TEST_COORDINATES }}"
- name: "Disable docker networking"
if: steps.check_existing_issue.outputs.skip != 'true'
- run: bash ./.github/workflows/disable-docker.sh
+ run: bash ./.github/workflows/scripts/disable-docker.sh
- name: "π§ͺ Run '${{ env.TEST_COORDINATES }}' tests"
if: steps.check_existing_issue.outputs.skip != 'true'
id: runtests
run: |
- bash ./.github/workflows/run-consecutive-tests.sh "${{ env.TEST_COORDINATES }}" '${{ toJson(matrix.item.versions) }}' 2>&1 | tee test_results.txt || true
+ bash ./.github/workflows/scripts/run-consecutive-tests.sh "${{ env.TEST_COORDINATES }}" '${{ toJson(matrix.item.versions) }}' 2>&1 | tee test_results.txt || true
# Extract successful versions
grep "^PASSED:" test_results.txt | sed 's/PASSED://g' > successful_versions.txt
@@ -174,7 +174,7 @@ jobs:
update_new_versions() {
while read version; do
if [ -n "$version" ]; then
- ./gradlew addTestedVersion --coordinates="${{ matrix.item.name }}:$version" --lastSupportedVersion="${{ env.LATEST_VERSION }}"
+ ./gradlew addTestedVersion -Pcoordinates="${{ matrix.item.name }}:$version" --lastSupportedVersion="${{ env.LATEST_VERSION }}"
fi
done < successful_versions.txt
}
diff --git a/AGENTS.md b/AGENTS.md
new file mode 100644
index 000000000..62a30bd90
--- /dev/null
+++ b/AGENTS.md
@@ -0,0 +1,64 @@
+# Development Cheat Sheet
+
+## Prerequisites (assume exists)
+- JAVA_HOME set to JDK 21 (GraalVM recommended to match CI)
+- Docker
+- grype v0.104.0 (install: curl -sSfL https://get.anchore.io/grype/v0.104.0/install.sh | sudo sh -s -- -b /usr/local/bin)
+
+## Setup
+- Always use Gradle wrapper from repo root:
+ - Unix: ./gradlew [options]
+ - Windows: gradlew.bat [options]
+- Tip: add --stacktrace for debugging
+
+## One command for complete testing (use at the end of the task to verify)
+./gradlew testAllParallel -Pparallelism=4
+
+## Code Style
+- Always try to reuse existing code.
+- Be assertive in code.
+- Write type annotations in all functions and most variables.
+- Document code without being too verbose.
+- In java, always import classes and use them without qualified names.
+
+## Testing individual components
+
+- Clean previous build outputs for the selected coordinates: ./gradlew clean -Pcoordinates=[group:artifact:version|k/n|all]
+- Pre-fetch Docker images allowed by metadata (used in tests) for the selected coordinates: ./gradlew pullAllowedDockerImages -Pcoordinates=[group:artifact:version|k/n|all]
+- Validate reachability metadata files for the selected coordinates: ./gradlew checkMetadataFiles -Pcoordinates=[group:artifact:version|k/n|all]
+- Run Checkstyle for the selected coordinates: ./gradlew checkstyle -Pcoordinates=[group:artifact:version|k/n|all]
+- Compile test sources for the selected coordinates: ./gradlew compileTestJava -Pcoordinates=[group:artifact:version|k/n|all]
+- Run JVM-based tests for the selected coordinates: ./gradlew javaTest -Pcoordinates=[group:artifact:version|k/n|all]
+- Build native images used by native tests (compile-only) for the selected coordinates: ./gradlew nativeTestCompile -Pcoordinates=[group:artifact:version|k/n|all]
+- Run all tests for the selected coordinates: ./gradlew test -Pcoordinates=[group:artifact:version|k/n|all]
+
+
+## Check style and formatting
+- Style check: ./gradlew checkstyle
+- Format check: ./gradlew spotlessCheck
+
+## Testing the metadata
+- Single library (replace with group:artifact:version):
+ - ./gradlew pullAllowedDockerImages -Pcoordinates=group:artifact:version
+ - ./gradlew checkMetadataFiles -Pcoordinates=group:artifact:version
+ - ./gradlew test -Pcoordinates=group:artifact:version
+- Sharded example (1/64):
+ - ./gradlew pullAllowedDockerImages -Pcoordinates=1/64
+ - ./gradlew checkMetadataFiles -Pcoordinates=1/64
+ - ./gradlew test -Pcoordinates=1/64
+
+## Docker Image Vulnerability Scanning
+- Changed images between commits:
+ - ./gradlew checkAllowedDockerImages --baseCommit=$(git rev-parse origin/master) --newCommit=$(git rev-parse HEAD)
+- All allowed images:
+ - ./gradlew checkAllowedDockerImages
+
+##s Compatibility Automation (latest library versions)
+- List libs with newer upstream versions:
+ - ./gradlew fetchExistingLibrariesWithNewerVersions --quiet
+- Record a newly tested version:
+ - ./gradlew addTestedVersion -Pcoordinates="group:artifact:newVersion" --lastSupportedVersion="oldVersion"
+ - Example: ./gradlew addTestedVersion -Pcoordinates="org.postgresql:postgresql:42.7.4" --lastSupportedVersion="42.7.3"
+
+## Releases and Packaging
+- Package artifacts: ./gradlew package
diff --git a/README.md b/README.md
index f87d710fe..894fe49cc 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ you can enable automatic use of the metadata repository for [Gradle projects](ht
[This web page](https://www.graalvm.org/native-image/libraries-and-frameworks/) provides an overview of libraries and frameworks that are tested and thus ready for GraalVM Native Image.
If you would like to see your library or framework in the list too, please open a pull request and extend [this JSON file](https://github.com/oracle/graalvm-reachability-metadata/blob/master/library-and-framework-list.json).
-Before submitting a pull request, please read [this guide](./CONTRIBUTING.md#tested-libraries-and-frameworks).
+Before submitting a pull request, please read [this guide](docs/CONTRIBUTING.md#tested-libraries-and-frameworks).
## Rationale
@@ -25,4 +25,10 @@ Please visit [this web page](https://www.graalvm.org/latest/reference-manual/nat
## Contributing
We welcome contributions from the community.
-Before submitting a pull request, please [review our contribution guide](./CONTRIBUTING.md).
+Before submitting a pull request, please [review our contribution guide](docs/CONTRIBUTING.md).
+
+## Further Information
+
+1. Continuous integration is described in [CI.md](docs/CI.md).
+2. PR Reviewing guides are described in [REVIEWING.md](docs/REVIEWING.md).
+3. Development is described in [DEVELOPING.md](docs/DEVELOPING.md).
diff --git a/build.gradle b/build.gradle
index d043c1cff..ee694bc4c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,3 +1,6 @@
+import java.util.concurrent.Executors
+import java.util.concurrent.TimeUnit
+
/*
* Copyright and related rights waived via CC0
*
@@ -8,7 +11,7 @@
plugins {
id 'base'
id "com.diffplug.spotless" version "6.3.0"
- id "org.graalvm.internal.tck-harness"
+ id "org.graalvm.internal.tck-base"
}
allprojects {
@@ -25,17 +28,17 @@ project.version("1.0.0-SNAPSHOT")
spotless {
json {
target(
- tck.metadataRoot.map { it.toString() + '/**/*.json' }.get(),
+ tck.metadataRoot.map { it.toString() + '/**/*.json' }.get(),
tck.testRoot.map { it.toString() + '/**/*.json' }
)
targetExclude(
- tck.testRoot.map { it.toString() + '/**/build/**/*.json' },
+ tck.testRoot.map { it.toString() + '/**/build/**/*.json' },
tck.repoRoot.map { it.toString() + '/.github/**/*.json' }
)
gson()
- .indentWithSpaces(2)
- .sortByKeys()
- .version("2.9.0")
+ .indentWithSpaces(2)
+ .sortByKeys()
+ .version("2.9.0")
}
}
@@ -54,3 +57,146 @@ tasks.register('package', Zip) { task ->
include("library-and-framework-list.json")
}
}
+
+tasks.register('test') { t ->
+ t.setDescription("Aggregates tests configured by the TCK harness")
+ t.setGroup("verification")
+}
+
+// Apply the harness after creating the 'test' aggregator to avoid missing property,
+// and without applying the 'java' plugin to avoid task name conflicts.
+apply plugin: "org.graalvm.internal.tck-harness"
+
+ext.runLoggedCommand = { List args, String label, File logFile, File workingDir ->
+ def header = "==== BEGIN ${label}"
+ println(header)
+ logFile.text = header + System.lineSeparator()
+
+ def pb = new ProcessBuilder(args as String[])
+ pb.directory(workingDir)
+ pb.redirectErrorStream(true)
+ pb.redirectOutput(ProcessBuilder.Redirect.appendTo(logFile))
+ def proc = pb.start()
+ int exit = proc.waitFor()
+
+ def footer = exit != 0
+ ? "==== END ${label} FAILURE (exit ${exit})"
+ : "==== END ${label} SUCCESS"
+ logFile.append(footer + System.lineSeparator())
+ println(footer)
+ return exit
+}
+
+static List
+ * Coordinates can be provided via:
+ * - -Pcoordinates= (preferred)
+ * - --coordinates=
+ * The filter can be group:artifact:version or a fractional batch in the form k/n (e.g., 1/16), or 'all'.
+ */
+public abstract class ComputeAndPullAllowedDockerImagesTask extends DefaultTask {
+
+ @Input
+ @Optional
+ public abstract Property<@NotNull String> getCoordinates();
+
+ @Option(option = "coordinates", description = "Coordinate filter (group[:artifact[:version]] or k/n fractional batch)")
+ public void setCoordinatesOption(String value) {
+ getCoordinates().set(value);
+ }
+
+ @Inject
+ protected abstract ExecOperations getExecOperations();
+
+ protected String effectiveCoordinateFilter() {
+ // Prefer task option, fallback to -Pcoordinates, then empty string (all)
+ String opt = getCoordinates().getOrNull();
+ if (opt != null) {
+ return opt;
+ }
+ Object prop = getProject().findProperty("coordinates");
+ return prop == null ? "" : prop.toString();
+ }
+
+ @TaskAction
+ public void run() throws IOException {
+ TckExtension tck = Objects.requireNonNull(getProject().getExtensions().findByType(TckExtension.class));
+
+ // Resolve coordinates
+ String filter = effectiveCoordinateFilter();
+
+ List matching;
+ if (CoordinateUtils.isFractionalBatch(filter)) {
+ int[] frac = CoordinateUtils.parseFraction(filter);
+ assert frac != null : "Already checked";
+ List all = tck.getMatchingCoordinates("all");
+ matching = CoordinateUtils.computeBatchedCoordinates(all, frac[0], frac[1]);
+ } else {
+ matching = tck.getMatchingCoordinates(filter);
+ }
+
+ if (matching == null || matching.isEmpty()) {
+ throw new GradleException("No matching coordinates found. Provide --coordinates= (preferred) or -Pcoordinates=, or a fractional batch 'k/n'.");
+ }
+
+ // Collect union of required docker images
+ Set requiredImages = new LinkedHashSet<>();
+ for (String c : matching) {
+ String[] parts = c.split(":");
+ if (parts.length < 3) {
+ throw new GradleException("Invalid coordinates: " + c);
+ }
+ String group = parts[0];
+ String artifact = parts[1];
+ String version = parts[2];
+ File f = getProject().file("tests/src/" + group + "/" + artifact + "/" + version + "/required-docker-images.txt");
+ if (f.exists()) {
+ Files.readAllLines(f.toPath()).stream()
+ .map(String::trim)
+ .filter(s -> !s.isEmpty())
+ .filter(s -> !s.startsWith("#"))
+ .forEach(requiredImages::add);
+ }
+ }
+
+ // Validate against allowed images
+ validateRequiredImages(requiredImages);
+
+ // Pull images immediately
+ for (String image : requiredImages) {
+ getLogger().lifecycle("Pulling docker image {}", image);
+ try {
+ getExecOperations().exec(spec -> {
+ spec.setExecutable("docker");
+ spec.args("pull", image);
+ });
+ } catch (Exception e) {
+ throw new GradleException("Failed to pull image " + image + ": " + e.getMessage(), e);
+ }
+ }
+
+ if (requiredImages.isEmpty()) {
+ getLogger().lifecycle("No required docker images found for coordinates filter '{}'. If your tests use docker, please read: {}", filter,
+ URI.create("https://github.com/oracle/graalvm-reachability-metadata/blob/master/CONTRIBUTING.md#providing-the-tests-that-use-docker"));
+ }
+ }
+
+ private static void validateRequiredImages(Set requiredImages) {
+ Set allowed = DockerUtils.getAllAllowedImages();
+ List notAllowed = new ArrayList<>();
+ for (String img : requiredImages) {
+ if (!allowed.contains(img)) {
+ notAllowed.add(img);
+ }
+ }
+ if (!notAllowed.isEmpty()) {
+ throw new GradleException("""
+ The following images are not in the allowed list: %s. \
+ If you need them, add Dockerfiles under tests/tck-build-logic/src/main/resources/allowed-docker-images \
+ per docs/CONTRIBUTING.md, or adjust required-docker-images.txt files.
+ """.formatted(notAllowed));
+ }
+ }
+}
diff --git a/tests/tck-build-logic/src/main/groovy/org/graalvm/internal/tck/updaters/FetchExistingLibrariesWithNewerVersionsTask.groovy b/tests/tck-build-logic/src/main/groovy/org/graalvm/internal/tck/harness/tasks/FetchExistingLibrariesWithNewerVersionsTask.groovy
similarity index 97%
rename from tests/tck-build-logic/src/main/groovy/org/graalvm/internal/tck/updaters/FetchExistingLibrariesWithNewerVersionsTask.groovy
rename to tests/tck-build-logic/src/main/groovy/org/graalvm/internal/tck/harness/tasks/FetchExistingLibrariesWithNewerVersionsTask.groovy
index c230a5693..4982b9610 100644
--- a/tests/tck-build-logic/src/main/groovy/org/graalvm/internal/tck/updaters/FetchExistingLibrariesWithNewerVersionsTask.groovy
+++ b/tests/tck-build-logic/src/main/groovy/org/graalvm/internal/tck/harness/tasks/FetchExistingLibrariesWithNewerVersionsTask.groovy
@@ -1,4 +1,4 @@
-package org.graalvm.internal.tck.updaters
+package org.graalvm.internal.tck.harness.tasks
import com.fasterxml.jackson.annotation.JsonInclude
@@ -9,16 +9,14 @@ import groovy.json.JsonOutput
import org.graalvm.internal.tck.model.MetadataVersionsIndexEntry
import org.gradle.api.DefaultTask
import org.gradle.api.provider.ListProperty
-import org.gradle.api.provider.Property
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.TaskAction
-import org.gradle.api.tasks.options.Option
import org.gradle.util.internal.VersionNumber
import java.util.regex.Matcher
import java.util.regex.Pattern
-
+@SuppressWarnings("unused")
abstract class FetchExistingLibrariesWithNewerVersionsTask extends DefaultTask {
@Input
diff --git a/tests/tck-build-logic/src/main/groovy/org/graalvm/internal/tck/harness/tasks/TeeOutputStream.java b/tests/tck-build-logic/src/main/groovy/org/graalvm/internal/tck/harness/tasks/TeeOutputStream.java
index dd296db7e..ffc6273b6 100644
--- a/tests/tck-build-logic/src/main/groovy/org/graalvm/internal/tck/harness/tasks/TeeOutputStream.java
+++ b/tests/tck-build-logic/src/main/groovy/org/graalvm/internal/tck/harness/tasks/TeeOutputStream.java
@@ -7,6 +7,8 @@
package org.graalvm.internal.tck.harness.tasks;
+import org.jetbrains.annotations.NotNull;
+
import java.io.IOException;
import java.io.OutputStream;
@@ -26,13 +28,13 @@ public void write(int b) throws IOException {
}
@Override
- public void write(byte[] b) throws IOException {
+ public void write(byte @NotNull [] b) throws IOException {
out1.write(b);
out2.write(b);
}
@Override
- public void write(byte[] b, int off, int len) throws IOException {
+ public void write(byte @NotNull [] b, int off, int len) throws IOException {
out1.write(b, off, len);
out2.write(b, off, len);
}
diff --git a/tests/tck-build-logic/src/main/groovy/org/graalvm/internal/tck/updaters/GroupUnsupportedLibraries.groovy b/tests/tck-build-logic/src/main/groovy/org/graalvm/internal/tck/updaters/GroupUnsupportedLibraries.groovy
deleted file mode 100644
index edf3874f7..000000000
--- a/tests/tck-build-logic/src/main/groovy/org/graalvm/internal/tck/updaters/GroupUnsupportedLibraries.groovy
+++ /dev/null
@@ -1,53 +0,0 @@
-package org.graalvm.internal.tck.updaters
-
-import org.gradle.api.DefaultTask
-import org.gradle.api.provider.Property
-import org.gradle.api.tasks.Input
-import org.gradle.api.tasks.TaskAction
-import org.gradle.api.tasks.options.Option
-import org.gradle.util.internal.VersionNumber
-
-abstract class GroupUnsupportedLibraries extends DefaultTask {
-
- @Input
- @Option(option = "libraries", description = "Provides list of libraries that should be grouped.")
- abstract Property getLibraries()
-
- @TaskAction
- void action() {
- def libraries = getLibraries().get().split("\n")
-
- Map> libraryGroups = new HashMap>()
- for (def library : libraries) {
- def coordinatesPart = library.split("_")
- def artifactKey = coordinatesPart[0] + ":" + coordinatesPart[1]
- def version = coordinatesPart[2]
-
- if (libraryGroups.get(artifactKey) == null) {
- libraryGroups.put(artifactKey, new ArrayList())
- }
-
- libraryGroups.get(artifactKey).add(version)
- libraryGroups.get(artifactKey).sort(Comparator.comparing(VersionNumber::parse))
- }
-
- print generateGroupedComment(libraryGroups)
- }
-
- private static String generateGroupedComment(Map> groups) {
- def sb = new StringBuilder("List of all unsupported libraries:\n")
-
- for (String library : groups.keySet()) {
- sb.append("- ").append(library).append(":\n")
-
- for (String version : groups.get(library)) {
- sb.append("\t").append("- ").append(version).append("\n")
- }
-
- sb.append("\n")
- }
-
- return sb.toString()
- }
-
-}
diff --git a/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/ContributionTask.java b/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/ContributionTask.java
index c0b76b306..dbb687b1a 100644
--- a/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/ContributionTask.java
+++ b/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/ContributionTask.java
@@ -10,6 +10,7 @@
import org.graalvm.internal.tck.model.MetadataIndexEntry;
import org.graalvm.internal.tck.model.contributing.Question;
import org.graalvm.internal.tck.utils.ConfigurationStringBuilder;
+import org.graalvm.internal.tck.utils.CoordinateUtils;
import org.graalvm.internal.tck.utils.FilesUtils;
import org.graalvm.internal.tck.utils.InteractiveTaskUtils;
import org.gradle.api.DefaultTask;
diff --git a/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/CoordinateUtils.java b/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/CoordinateUtils.java
deleted file mode 100644
index e71173e06..000000000
--- a/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/CoordinateUtils.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.graalvm.internal.tck;
-
-
-public abstract class CoordinateUtils {
- public static String replace(String template, Coordinates coordinates) {
- return template
- .replace("$group$", coordinates.group())
- .replace("$sanitizedGroup$", coordinates.sanitizedGroup())
- .replace("$artifact$", coordinates.artifact())
- .replace("$sanitizedArtifact$", coordinates.sanitizedArtifact())
- .replace("$capitalizedSanitizedArtifact$", coordinates.capitalizedSanitizedArtifact())
- .replace("$version$", coordinates.version());
- }
-
- public static Coordinates fromString(String coordinates) throws IllegalArgumentException {
- String[] coordinatesParts = coordinates.split(":");
- if (coordinatesParts.length != 3) {
- throw new IllegalArgumentException("Maven coordinates not provided in the correct format.");
- }
-
- String group = coordinatesParts[0];
- String artifact = coordinatesParts[1];
- String version = coordinatesParts[2];
- return new Coordinates(group, artifact, version);
- }
-
-}
diff --git a/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/Coordinates.java b/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/Coordinates.java
index 83e90604b..e14a421ee 100644
--- a/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/Coordinates.java
+++ b/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/Coordinates.java
@@ -1,16 +1,18 @@
package org.graalvm.internal.tck;
+import org.jetbrains.annotations.NotNull;
+
import java.util.Set;
/**
* Dependency coordinates in the form 'group:artifact:version'.
*/
-record Coordinates(String group, String artifact, String version) {
+public record Coordinates(String group, String artifact, String version) {
private static final Set FORBIDDEN_CHARS = Set.of(
':', '-', '.'
);
- Coordinates {
+ public Coordinates {
if (group == null || group.isEmpty()) {
throw new IllegalArgumentException("group must not be empty");
}
@@ -22,15 +24,15 @@ record Coordinates(String group, String artifact, String version) {
}
}
- String sanitizedGroup() {
+ public String sanitizedGroup() {
return sanitize(group);
}
- String sanitizedArtifact() {
+ public String sanitizedArtifact() {
return sanitize(artifact);
}
- String capitalizedSanitizedArtifact() {
+ public String capitalizedSanitizedArtifact() {
String sanitizedArtifact = sanitizedArtifact();
if (sanitizedArtifact.isEmpty()) {
return sanitizedArtifact;
@@ -39,7 +41,7 @@ String capitalizedSanitizedArtifact() {
}
@Override
- public String toString() {
+ public @NotNull String toString() {
return group + ":" + artifact + ":" + version;
}
diff --git a/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/DockerTask.java b/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/DockerTask.java
index b7321bd4f..ad07c5db9 100644
--- a/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/DockerTask.java
+++ b/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/DockerTask.java
@@ -1,5 +1,6 @@
package org.graalvm.internal.tck;
+import org.graalvm.internal.tck.utils.CoordinateUtils;
import org.gradle.api.DefaultTask;
import org.gradle.api.file.RegularFileProperty;
import org.gradle.api.tasks.InputFiles;
@@ -20,6 +21,7 @@
import static org.graalvm.internal.tck.DockerUtils.getAllAllowedImages;
+@SuppressWarnings("unused")
public abstract class DockerTask extends DefaultTask {
@InputFiles
diff --git a/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/GrypeTask.java b/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/GrypeTask.java
index 3d53fd987..8a6ffab66 100644
--- a/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/GrypeTask.java
+++ b/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/GrypeTask.java
@@ -21,7 +21,7 @@
import java.util.*;
import java.util.stream.Collectors;
-
+@SuppressWarnings("unused")
public abstract class GrypeTask extends DefaultTask {
@Inject
@@ -181,13 +181,13 @@ private Vulnerabilities getVulnerabilities(String image) throws IOException {
* Get all docker images introduced between two commits
*/
private Set getChangedImages() throws IOException, URISyntaxException {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
getExecOperations().exec(spec -> {
- spec.setStandardOutput(baos);
+ spec.setStandardOutput(outputStream);
spec.commandLine("git", "diff", "--name-only", "--diff-filter=ACMRT", baseCommit, newCommit);
});
- String output = baos.toString(StandardCharsets.UTF_8);
+ String output = outputStream.toString(StandardCharsets.UTF_8);
List diffFiles = Arrays.stream(output.split("\\r?\\n"))
.filter(path -> path.contains(DOCKERFILE_DIRECTORY))
.map(path -> path.substring(path.lastIndexOf("/") + 1))
diff --git a/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/ConfigFilesChecker.java b/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/MetadataFilesCheckerTask.java
similarity index 92%
rename from tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/ConfigFilesChecker.java
rename to tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/MetadataFilesCheckerTask.java
index b68e4e1ec..db2302d4e 100644
--- a/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/ConfigFilesChecker.java
+++ b/tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/MetadataFilesCheckerTask.java
@@ -1,30 +1,25 @@
package org.graalvm.internal.tck;
import groovy.json.JsonSlurper;
+import org.graalvm.internal.tck.utils.CoordinateUtils;
import org.gradle.api.DefaultTask;
import org.gradle.api.file.RegularFileProperty;
import org.gradle.api.tasks.InputFiles;
import org.gradle.api.tasks.TaskAction;
import org.gradle.api.tasks.options.Option;
-import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
-import java.util.Arrays;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Set;
-import java.util.HashSet;
+import java.util.*;
import java.util.stream.Collectors;
/**
* Checks content of config files for a new library.
*
- * Run with {@code gradle checkConfigFiles --coordinates com.example:library:1.0.0}.
+ * Run with {@code gradle checkMetadataFiles -Pcoordinates com.example:library:1.0.0}.
*/
-public abstract class ConfigFilesChecker extends DefaultTask {
+@SuppressWarnings("unused")
+public abstract class MetadataFilesCheckerTask extends DefaultTask {
@InputFiles
protected abstract RegularFileProperty getMetadataRoot();
@@ -32,12 +27,17 @@ public abstract class ConfigFilesChecker extends DefaultTask {
@InputFiles
protected abstract RegularFileProperty getIndexFile();
- private final Set EXPECTED_FILES = new HashSet<>(Arrays.asList("index.json", "reflect-config.json", "resource-config.json", "serialization-config.json",
- "jni-config.json", "proxy-config.json", "predefined-classes-config.json"));
+ private final Set EXPECTED_FILES = new HashSet<>(List.of(
+ "index.json",
+ "reflect-config.json",
+ "resource-config.json",
+ "serialization-config.json",
+ "jni-config.json",
+ "proxy-config.json"));
private final Set ILLEGAL_TYPE_VALUES = new HashSet<>(List.of("java.lang"));
- private final Set PREDEFINED_ALLOWED_PACKAGES = new HashSet<>(Arrays.asList("java.lang", "java.util"));
+ private final Set PREDEFINED_ALLOWED_PACKAGES = new HashSet<>(List.of("java.lang", "java.util"));
Coordinates coordinates;
List allowedPackages;
@@ -98,7 +98,7 @@ void run() throws IllegalArgumentException, FileNotFoundException {
private List getConfigFilesForMetadataDir(File root) throws RuntimeException {
List files = new ArrayList<>();
- File [] content = root.listFiles();
+ File[] content = root.listFiles();
if (content == null) {
throw new RuntimeException("ERROR: Failed to load content of " + root.toURI());
@@ -121,7 +121,7 @@ private List> getConfigEntries(File file) {
return ((List