Skip to content

Clarify build prerequisites and add a core build mode - #1012

Merged
jvukicev merged 1 commit into
masterfrom
rhei/issue-988
Aug 4, 2026
Merged

Clarify build prerequisites and add a core build mode#1012
jvukicev merged 1 commit into
masterfrom
rhei/issue-988

Conversation

@jvukicev

@jvukicev jvukicev commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

What changed

The developer guide now distinguishes the JDK used to launch Gradle from the Java 17 toolchain required to compile Native Build Tools. Gradle may run on a newer supported JDK, including JDK 21 or 25, but a discoverable JDK 17 installation is still required. When Java 17 is unavailable, root configuration fails early with repository-specific guidance while retaining Gradle's underlying toolchain failure for diagnostics.

The root build also has a new opt-in core mode that omits the documentation composite before it is configured. Root lifecycle tasks aggregate every build selected by the active mode, and the default full build renders the AsciiDoc documentation.

Why

Developers using a newer launcher JDK could reasonably assume that no Java 17 installation was needed, then receive a delayed generic toolchain failure. Documentation dependencies were also configured even when a developer only needed the product builds, and root assemble did not actually assemble the included builds despite the developer guide saying it did.

The change makes the required toolchains explicit, provides a faster docs-independent feedback path, and makes the documented root lifecycle behavior match the task graph.

Example

Run the normal documentation-inclusive repository build:

./gradlew build

Run the product builds without configuring or rendering documentation:

./gradlew build -Porg.graalvm.build.core=true

The property is strict: absence or false selects the full build, true selects core mode, and any other value fails during settings evaluation.

Implementation summary

  • Documented the separate Gradle launcher, discoverable Java 17 compiler toolchain, and GraalVM/native-image prerequisites.
  • Added strict org.graalvm.build.core parsing and omitted docs during settings composition in core mode.
  • Made root assemble, test, check, and inspections aggregate the builds present in the selected mode.
  • Connected the default full root build to the documentation build and connected the documentation build lifecycle to asciidoctor.
  • Added an early Java 17 toolchain prerequisite check using Gradle's public toolchain service, without enabling automatic provisioning.
  • Added focused TestKit coverage for mode selection, malformed input, aggregation, documentation rendering, and the missing-JDK diagnostic.

Validation

The following checks passed:

  • ./gradlew -p build-logic/aggregator cleanTest test --console=plain — 5 focused TestKit tests.
  • ./gradlew -p build-logic/documentation-plugins cleanTest test --console=plain — 1 focused TestKit test with rendered AsciiDoc output.
  • grund check
  • grund fmt . --marker --cross-refs --check
  • git diff --check
  • ./gradlew help -Porg.graalvm.build.core=true --console=plain
  • malformed-property smoke coverage for -Porg.graalvm.build.core=yes
  • default full build --dry-run task-graph assertion containing :docs:asciidoctor and :docs:build
  • core build --dry-run task-graph assertion containing product/common tasks and no :docs: tasks
  • ./gradlew :native-gradle-plugin:inspections :native-maven-plugin:inspections -Porg.graalvm.build.core=true --console=plain
  • constrained missing-JDK reproduction with toolchain auto-detection and auto-download disabled, confirming the actionable repository prerequisite message

A complete root ./gradlew build was not rerun because the existing :native-gradle-plugin:validatePlugins task reports unrelated Gradle 9.6.1 validation failures. Broad Native Image functional suites, the exact CI matrix, and documentation publication variants were not run locally.

Fixes #988

AI workflow

Generated by Rhei’s github-issue-fix workflow using 23 completed AI-assisted steps, 3 resolved models, and 3 focused review cycles. A maintainer-directed citation-only repair completed the blocked publication afterward.

View AI workflow details

Approved proposal: bbce876008d81808.

  1. Issue intake and repository grounding

Model: openai:gpt-5.6-sol · Agent: codex · Reasoning effort: medium
Tokens: 738019 total · 726819 input (633472 cached) · 11200 output

Captured issue #988, repository rules, specifications, worktree metadata, and implementation scope.

  1. Human proposal approval

Model: not applicable · Agent: human · Reasoning effort: not applicable
Tokens: not applicable

Approved proposal bbce876008d81808 for implementation.

  1. Implement approved fix

Model: openai:gpt-5.6-sol · Agent: codex · Reasoning effort: medium
Tokens: 7082293 total · 7059553 input (6852608 cached) · 22740 output

Implemented the core/full build split, lifecycle aggregation, documentation rendering, developer guidance, specification updates, and focused TestKit coverage.

  1. Validate implementation — visit 1

Model: openai:gpt-5.6-sol · Agent: codex · Reasoning effort: medium
Tokens: 2161957 total · 2149463 input (2060928 cached) · 12494 output

Ran focused tests, grounding checks, task-graph assertions, documentation rendering, and missing-toolchain reproduction.

  1. Requirements review — cycle 1

Model: openai:gpt-5.6-terra · Agent: codex · Reasoning effort: medium
Tokens: 201905 total · 199426 input (164480 cached) · 2479 output

Identified that the Java-17-unavailable acceptance criterion needed an earlier repository-owned diagnostic or stronger evidence.

  1. Spec review — cycle 1

Model: openai:gpt-5.6-terra · Agent: codex · Reasoning effort: medium
Tokens: 233051 total · 229794 input (190464 cached) · 3257 output

Checked specification order, repository grounding, and citation coverage with no blockers.

  1. Implementation review — cycle 1

Model: openai:gpt-5.6-terra · Agent: codex · Reasoning effort: medium
Tokens: 217588 total · 213775 input (172672 cached) · 3813 output

Reviewed the initial implementation for scope, correctness, and regression coverage.

  1. Validation review — cycle 1

Model: openai:gpt-5.6-terra · Agent: codex · Reasoning effort: medium
Tokens: 220063 total · 216368 input (180608 cached) · 3695 output

Accepted the focused validation while recording the missing-JDK evidence needed by requirements review.

  1. Aggregate review — cycle 1

Model: openai:gpt-5.6-sol · Agent: codex · Reasoning effort: medium
Tokens: 129688 total · 127599 input (88320 cached) · 2089 output

Reconciled the specialist reviews and routed the missing-JDK diagnostic repair.

  1. Address review findings — repair cycle 1

Model: openai:gpt-5.6-sol · Agent: codex · Reasoning effort: medium
Tokens: 1441840 total · 1432088 input (1358592 cached) · 9752 output

Added the early Java 17 prerequisite diagnostic, its specification, and constrained TestKit coverage.

  1. Validate repaired implementation — visit 2

Model: openai:gpt-5.6-sol · Agent: codex · Reasoning effort: medium
Tokens: 949494 total · 937936 input (845312 cached) · 11558 output

Verified the new diagnostic, normal newer-JDK launcher behavior, focused tests, grounding, and task graphs.

  1. Requirements review — cycle 2

Model: openai:gpt-5.6-terra · Agent: codex · Reasoning effort: medium
Tokens: 329495 total · 325266 input (288896 cached) · 4229 output

Confirmed the repaired implementation satisfied the issue acceptance criteria.

  1. Spec review — cycle 2

Model: openai:gpt-5.6-terra · Agent: codex · Reasoning effort: medium
Tokens: 311804 total · 306415 input (257792 cached) · 5389 output

Found that the missing-JDK TestKit case lacked its most-specific specification citation.

  1. Implementation review — cycle 2

Model: openai:gpt-5.6-terra · Agent: codex · Reasoning effort: medium
Tokens: 285318 total · 279309 input (234880 cached) · 6009 output

Confirmed implementation behavior and reported the same missing test citation blocker.

  1. Validation review — cycle 2

Model: openai:gpt-5.6-terra · Agent: codex · Reasoning effort: medium
Tokens: 296967 total · 292549 input (257152 cached) · 4418 output

Accepted focused validation and documented the remaining broad validation gaps.

  1. Aggregate review — cycle 2

Model: openai:gpt-5.6-sol · Agent: codex · Reasoning effort: medium
Tokens: 179869 total · 176620 input (132736 cached) · 3249 output

Reconciled cycle 2 and routed the missing citation repair.

  1. Address review findings — repair cycle 2

Model: openai:gpt-5.6-sol · Agent: codex · Reasoning effort: medium
Tokens: 336319 total · 332173 input (300288 cached) · 4146 output

Added §FS-build-infrastructure.2.1 to the missing-Java-17 TestKit case.

  1. Validate repaired implementation — visit 3

Model: openai:gpt-5.6-sol · Agent: codex · Reasoning effort: medium
Tokens: 1101052 total · 1086362 input (998144 cached) · 14690 output

Reran focused TestKit, grounding, task-graph, inspection, and missing-toolchain checks.

  1. Requirements review — cycle 3

Model: openai:gpt-5.6-terra · Agent: codex · Reasoning effort: medium
Tokens: 323460 total · 319071 input (268416 cached) · 4389 output

Confirmed all issue requirements were satisfied.

  1. Spec review — cycle 3

Model: openai:gpt-5.6-terra · Agent: codex · Reasoning effort: medium
Tokens: 383331 total · 377726 input (339072 cached) · 5605 output

Found two missing most-specific citations on the newly added TestKit dependency infrastructure.

  1. Implementation review — cycle 3

Model: openai:gpt-5.6-terra · Agent: codex · Reasoning effort: medium
Tokens: 256480 total · 252708 input (216448 cached) · 3772 output

Found the new missing-toolchain citation comment placed between @Test and its declaration.

  1. Validation review — cycle 3

Model: openai:gpt-5.6-terra · Agent: codex · Reasoning effort: medium
Tokens: 210758 total · 207037 input (174080 cached) · 3721 output

Accepted all focused validation with no blocking failures.

  1. Aggregate review — cycle 3

Model: openai:gpt-5.6-sol · Agent: codex · Reasoning effort: medium
Tokens: 126767 total · 123858 input (100608 cached) · 2909 output

Reconciled the final review and recorded three fixable citation and placement blockers.

  1. Record blocked publication

Model: openai:gpt-5.6-luna · Agent: codex · Reasoning effort: medium
Tokens: 87296 total · 85811 input (68480 cached) · 1485 output

Kept the branch local because the configured two repair visits were exhausted after the third review cycle.

  1. Maintainer-directed final repair and publication

Model: not recorded by Rhei · Agent: codex · Reasoning effort: not reported
Tokens: not captured by Rhei accounting

Applied the three citation-only review fixes, reran the focused checks, committed the result, pushed graalvm:rhei/issue-988, and opened this ready-for-review PR.

Aggregate token usage: 17604814 total · 17457726 input (16184448 cached) · 147088 output

The aggregate covers all 23 finalized Rhei agent invocations and excludes the maintainer-directed final repair and publication. Deterministic program routing is non-model work. Focused review cycles: 3. Review-repair cycles: 2 within Rhei, followed by one citation-only completion. Accounting coverage: 23 measured Rhei invocations. Superseded attempts: none. Unmeasured Rhei attempts: none. Pricing: unpriced. Unsupported cache dimensions: input cache write, output cached read, and output cache write.

@oracle-contributor-agreement oracle-contributor-agreement Bot added the OCA Verified All contributors have signed the Oracle Contributor Agreement. label Aug 3, 2026
@jvukicev jvukicev added the rhei label Aug 3, 2026
@jvukicev
jvukicev merged commit 5e287f5 into master Aug 4, 2026
3 checks passed
@jvukicev
jvukicev deleted the rhei/issue-988 branch August 4, 2026 13:58
mergify Bot added a commit to ArcadeData/arcadedb that referenced this pull request Aug 16, 2026
….8 to 1.1.9 [skip ci]

Bumps [org.graalvm.buildtools:native-maven-plugin](https://github.com/graalvm/native-build-tools) from 1.1.8 to 1.1.9.
Release notes

*Sourced from [org.graalvm.buildtools:native-maven-plugin's releases](https://github.com/graalvm/native-build-tools/releases).*

> 1.1.9
> -----
>
> What's Changed
> --------------
>
> * Make repository test output concise by default by [`@​jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#1004](https://redirect.github.com/graalvm/native-build-tools/pull/1004)
> * Decouple Maven plugin unit tests from remote bootstrap tasks by [`@​jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#1007](https://redirect.github.com/graalvm/native-build-tools/pull/1007)
> * Clarify build prerequisites and add a core build mode by [`@​jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#1012](https://redirect.github.com/graalvm/native-build-tools/pull/1012)
> * Release 1.1.8 by [`@​graalvmbot`](https://github.com/graalvmbot) in [graalvm/native-build-tools#1015](https://redirect.github.com/graalvm/native-build-tools/pull/1015)
> * Bump version to 1.1.9-SNAPSHOT by [`@​graalvmbot`](https://github.com/graalvmbot) in [graalvm/native-build-tools#1016](https://redirect.github.com/graalvm/native-build-tools/pull/1016)
> * Uplift the Native Image layer configuration model by [`@​jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#1011](https://redirect.github.com/graalvm/native-build-tools/pull/1011)
> * Update reachability metadata to 1.0.10 by [`@​graalvmbot`](https://github.com/graalvmbot) in [graalvm/native-build-tools#1021](https://redirect.github.com/graalvm/native-build-tools/pull/1021)
>
> **Full Changelog**: <graalvm/native-build-tools@1.1.8...1.1.9>


Commits

* [`70a22ad`](graalvm/native-build-tools@70a22ad) Release 1.1.9
* [`226c2f2`](graalvm/native-build-tools@226c2f2) Merge pull request [#1021](https://redirect.github.com/graalvm/native-build-tools/issues/1021) from graalvm/update-metadata-to-1.0.10
* [`750e24d`](graalvm/native-build-tools@750e24d) Update reachability metadata to 1.0.10
* [`f9d090c`](graalvm/native-build-tools@f9d090c) Clarify layer selector and test suite support
* [`8a62507`](graalvm/native-build-tools@8a62507) Skip later Gradle layer consumers on GraalVM 25.0
* [`fa9cb64`](graalvm/native-build-tools@fa9cb64) Narrow GraalVM 25.0 layer test skips
* [`a7f0ca4`](graalvm/native-build-tools@a7f0ca4) Skip Gradle layer consumers on GraalVM 25.0
* [`cf67f05`](graalvm/native-build-tools@cf67f05) Skip Maven shared layer test on GraalVM 25.0
* [`60da37c`](graalvm/native-build-tools@60da37c) Skip Maven all-selector layer test on GraalVM 25.0
* [`0498739`](graalvm/native-build-tools@0498739) Fix layered image runtime distribution
* Additional commits viewable in [compare view](graalvm/native-build-tools@1.1.8...1.1.9)
  
[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility\_score?dependency-name=org.graalvm.buildtools:native-maven-plugin&package-manager=maven&previous-version=1.1.8&new-version=1.1.9)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
  
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot show  ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
mergify Bot added a commit to robfrank/linklift that referenced this pull request Aug 20, 2026
….6 to 1.1.9 [skip ci]

Bumps [org.graalvm.buildtools:native-maven-plugin](https://github.com/graalvm/native-build-tools) from 1.1.6 to 1.1.9.
Release notes

*Sourced from [org.graalvm.buildtools:native-maven-plugin's releases](https://github.com/graalvm/native-build-tools/releases).*

> 1.1.9
> -----
>
> What's Changed
> --------------
>
> * Make repository test output concise by default by [`@​jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#1004](https://redirect.github.com/graalvm/native-build-tools/pull/1004)
> * Decouple Maven plugin unit tests from remote bootstrap tasks by [`@​jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#1007](https://redirect.github.com/graalvm/native-build-tools/pull/1007)
> * Clarify build prerequisites and add a core build mode by [`@​jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#1012](https://redirect.github.com/graalvm/native-build-tools/pull/1012)
> * Release 1.1.8 by [`@​graalvmbot`](https://github.com/graalvmbot) in [graalvm/native-build-tools#1015](https://redirect.github.com/graalvm/native-build-tools/pull/1015)
> * Bump version to 1.1.9-SNAPSHOT by [`@​graalvmbot`](https://github.com/graalvmbot) in [graalvm/native-build-tools#1016](https://redirect.github.com/graalvm/native-build-tools/pull/1016)
> * Uplift the Native Image layer configuration model by [`@​jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#1011](https://redirect.github.com/graalvm/native-build-tools/pull/1011)
> * Update reachability metadata to 1.0.10 by [`@​graalvmbot`](https://github.com/graalvmbot) in [graalvm/native-build-tools#1021](https://redirect.github.com/graalvm/native-build-tools/pull/1021)
>
> **Full Changelog**: <graalvm/native-build-tools@1.1.8...1.1.9>
>
> 1.1.8
> -----
>
> What's Changed
> --------------
>
> * Release 1.1.7 by [`@​graalvmbot`](https://github.com/graalvmbot) in [graalvm/native-build-tools#1009](https://redirect.github.com/graalvm/native-build-tools/pull/1009)
> * Bump version to 1.1.8-SNAPSHOT by [`@​graalvmbot`](https://github.com/graalvmbot) in [graalvm/native-build-tools#1010](https://redirect.github.com/graalvm/native-build-tools/pull/1010)
> * Deprecate fallback plugin options by [`@​jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#997](https://redirect.github.com/graalvm/native-build-tools/pull/997)
> * Update reachability metadata to 1.0.9 by [`@​graalvmbot`](https://github.com/graalvmbot) in [graalvm/native-build-tools#1014](https://redirect.github.com/graalvm/native-build-tools/pull/1014)
>
> **Full Changelog**: <graalvm/native-build-tools@1.1.7...1.1.8>
>
> 1.1.7
> -----
>
> What's Changed
> --------------
>
> * Release 1.1.6 by [`@​graalvmbot`](https://github.com/graalvmbot) in [graalvm/native-build-tools#996](https://redirect.github.com/graalvm/native-build-tools/pull/996)
> * Suppress missing Javadoc diagnostics across convention tasks by [`@​jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#994](https://redirect.github.com/graalvm/native-build-tools/pull/994)
> * Replace deprecated Kotlin DSL delegated accessors by [`@​jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#998](https://redirect.github.com/graalvm/native-build-tools/pull/998)
> * Fix Maven plugin unit-test mock maker and SLF4J setup by [`@​jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#999](https://redirect.github.com/graalvm/native-build-tools/pull/999)
> * Bump version to 1.1.7-SNAPSHOT by [`@​graalvmbot`](https://github.com/graalvmbot) in [graalvm/native-build-tools#1001](https://redirect.github.com/graalvm/native-build-tools/pull/1001)
> * Bump io.netty:netty-codec-http from 4.1.135.Final to 4.1.136.Final in /samples/metadata-repo-integration by [`@​dependabot`](https://github.com/dependabot)[bot] in [graalvm/native-build-tools#1002](https://redirect.github.com/graalvm/native-build-tools/pull/1002)
> * Avoid Maven internal API for console colors by [`@​jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#1003](https://redirect.github.com/graalvm/native-build-tools/pull/1003)
> * Update reachability metadata to 1.0.8 by [`@​graalvmbot`](https://github.com/graalvmbot) in [graalvm/native-build-tools#1008](https://redirect.github.com/graalvm/native-build-tools/pull/1008)
>
> **Full Changelog**: <graalvm/native-build-tools@1.1.6...1.1.7>


Commits

* [`70a22ad`](graalvm/native-build-tools@70a22ad) Release 1.1.9
* [`226c2f2`](graalvm/native-build-tools@226c2f2) Merge pull request [#1021](https://redirect.github.com/graalvm/native-build-tools/issues/1021) from graalvm/update-metadata-to-1.0.10
* [`750e24d`](graalvm/native-build-tools@750e24d) Update reachability metadata to 1.0.10
* [`f9d090c`](graalvm/native-build-tools@f9d090c) Clarify layer selector and test suite support
* [`8a62507`](graalvm/native-build-tools@8a62507) Skip later Gradle layer consumers on GraalVM 25.0
* [`fa9cb64`](graalvm/native-build-tools@fa9cb64) Narrow GraalVM 25.0 layer test skips
* [`a7f0ca4`](graalvm/native-build-tools@a7f0ca4) Skip Gradle layer consumers on GraalVM 25.0
* [`cf67f05`](graalvm/native-build-tools@cf67f05) Skip Maven shared layer test on GraalVM 25.0
* [`60da37c`](graalvm/native-build-tools@60da37c) Skip Maven all-selector layer test on GraalVM 25.0
* [`0498739`](graalvm/native-build-tools@0498739) Fix layered image runtime distribution
* Additional commits viewable in [compare view](graalvm/native-build-tools@1.1.6...1.1.9)
  
[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility\_score?dependency-name=org.graalvm.buildtools:native-maven-plugin&package-manager=maven&previous-version=1.1.6&new-version=1.1.9)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
  
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot show  ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

OCA Verified All contributors have signed the Oracle Contributor Agreement. rhei

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Make developer build prerequisites explicit and provide a core build path

2 participants