Add listLibrariesMissingMetadata task/goal for Gradle and Maven#877
Merged
Conversation
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- ListLibrariesMissingMetadataTest covers the Gradle path: only direct external module dependencies survive, project components and unresolved entries are filtered, transitive children are not walked. - ListLibrariesMissingMetadataMojoTest covers the Maven path: isDirectRuntimeDependency accepts compile/runtime/null scope at trail length 2, rejects test/provided, transitive trails, missing trail, and project-only trails. Both tests run as plain Spock unit tests and require no GitHub access, so they cover the dependency-selection contract without the brittle live-metadata-repo dependency that the earlier functional tests had. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ssues=true The old output interleaved each missing library's coordinates with a long, heavily URL-encoded prefilled issue link, then trailed a dense seven-counter summary line. The call-to-action for filing issues automatically (createIssues=true) was only reachable by reading the docs. The new rendering: - Groups results by status: "Already requested" (existing open issues), "Requested support for N libraries" (when createIssues succeeded), and a manual "Or request support manually" section for the remaining ones. Errors get their own block at the end. - Places a prominent call-to-action above the manual list that shows the exact re-run command tailored to the build tool (`-PcreateIssues=true` / `-DcreateIssues=true`) and the token resolution order on the next line. - Collapses prefilled issue URLs into numbered footnotes ([1], [E1], [C1]) so library names line up vertically instead of drowning in 200-character URLs. - Trims `&maven_coordinates=...` from the prefilled URL (the title already carries the GAV) and keeps colons readable in the title query value. - Appends `Full report: <path>` as a one-line footer when the plugins pass in the report-file path via the new renderConsoleOutput(reportFilePath) overload. - For all-supported runs, collapses to a single sentence. Tests in MissingMetadataCommandSupportTest are updated to assert on the new grouped output (headline, CTA, token sources, footnote indices) and on the trimmed prefilled URL shape. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
18 tasks
vjovanov
previously approved these changes
Apr 22, 2026
vjovanov
previously approved these changes
Apr 22, 2026
vjovanov
approved these changes
Apr 22, 2026
mergify Bot
added a commit
to robfrank/linklift
that referenced
this pull request
May 3, 2026
…1.5 to 1.1.0 [skip ci] Bumps [org.graalvm.buildtools:native-maven-plugin](https://github.com/graalvm/native-build-tools) from 0.11.5 to 1.1.0. Release notes *Sourced from [org.graalvm.buildtools:native-maven-plugin's releases](https://github.com/graalvm/native-build-tools/releases).* > 1.1.0 > ----- > > What's Changed > -------------- > > * Release 1.0.0 by [`@graalvmbot`](https://github.com/graalvmbot) in [graalvm/native-build-tools#857](https://redirect.github.com/graalvm/native-build-tools/pull/857) > * Bump version to 1.0.1-SNAPSHOT by [`@graalvmbot`](https://github.com/graalvmbot) in [graalvm/native-build-tools#858](https://redirect.github.com/graalvm/native-build-tools/pull/858) > * Use a safer way to create the temporary access filter file by [`@sschuberth`](https://github.com/sschuberth) in [graalvm/native-build-tools#852](https://redirect.github.com/graalvm/native-build-tools/pull/852) > * Bump io.netty:netty-codec-http from 4.1.129.Final to 4.1.132.Final in /samples/metadata-repo-integration by [`@dependabot`](https://github.com/dependabot)[bot] in [graalvm/native-build-tools#859](https://redirect.github.com/graalvm/native-build-tools/pull/859) > * Add class introduced in 5.14.1/6.0.1 by [`@marcphilipp`](https://github.com/marcphilipp) in [graalvm/native-build-tools#794](https://redirect.github.com/graalvm/native-build-tools/pull/794) > * Reduce CI usage by running CI only on "pull\_request" and running only the latest gradle version (except when creating a new release) by [`@jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#861](https://redirect.github.com/graalvm/native-build-tools/pull/861) > * Update latest docs symlink and improve 1.0.0 release notes by [`@jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#866](https://redirect.github.com/graalvm/native-build-tools/pull/866) > * Fix early classpath resolution in GenerateDynamicAccessMetadata by [`@jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#868](https://redirect.github.com/graalvm/native-build-tools/pull/868) > * Bump reachability metadata version to 1.0.0 by [`@jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#879](https://redirect.github.com/graalvm/native-build-tools/pull/879) > * Add listLibrariesMissingMetadata task/goal for Gradle and Maven by [`@jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#877](https://redirect.github.com/graalvm/native-build-tools/pull/877) > > **Full Changelog**: <graalvm/native-build-tools@1.0.0...1.1.0> > > 1.0.0 > ----- > > Breaking Changes > ---------------- > > * Native Build Tools 1.0.0 moves to the `1.0-M1` release of the reachability metadata repository, which uses the new `reachability-metadata.json` metadata format and no longer uses the global `metadata/index.json`. > * This may require dependency and metadata updates in downstream projects; some stacks can regress until they adapt. > > What's Changed > -------------- > > * Fix broken JavaApplicationFunctionalTest due to using a removed feature by [`@jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#850](https://redirect.github.com/graalvm/native-build-tools/pull/850) > * Remove the usage of the global metadata/index.json from the nbt plugins by [`@jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#829](https://redirect.github.com/graalvm/native-build-tools/pull/829) > * Add reachability-metadata-schema cross-validation by [`@jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#840](https://redirect.github.com/graalvm/native-build-tools/pull/840) > * Merge 1.0-M1 branch to master by [`@jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#848](https://redirect.github.com/graalvm/native-build-tools/pull/848) > > **Full Changelog**: <graalvm/native-build-tools@0.11.5...1.0.0> Commits * [`84cc046`](graalvm/native-build-tools@84cc046) Release 1.1.0 * [`95512d0`](graalvm/native-build-tools@95512d0) Add listLibrariesMissingMetadata task/goal for Gradle and Maven ([#877](https://redirect.github.com/graalvm/native-build-tools/issues/877)) * [`0dcda78`](graalvm/native-build-tools@0dcda78) Merge pull request [#879](https://redirect.github.com/graalvm/native-build-tools/issues/879) from jormundur00/bump-metadata-repository-1.0.0 * [`e5b90f0`](graalvm/native-build-tools@e5b90f0) Bump reachability metadata version to 1.0.0 * [`05f45d3`](graalvm/native-build-tools@05f45d3) Fix early classpath resolution in GenerateDynamicAccessMetadata ([#868](https://redirect.github.com/graalvm/native-build-tools/issues/868)) * [`4d614c7`](graalvm/native-build-tools@4d614c7) Update latest docs symlink and improve 1.0.0 release notes ([#866](https://redirect.github.com/graalvm/native-build-tools/issues/866)) * [`ee1351d`](graalvm/native-build-tools@ee1351d) Reduce CI usage by running CI only on "pull\_request" and running only the lat... * [`c6f3674`](graalvm/native-build-tools@c6f3674) Add class introduced in 5.14.1/6.0.1 ([#794](https://redirect.github.com/graalvm/native-build-tools/issues/794)) * [`5bc69bd`](graalvm/native-build-tools@5bc69bd) Bump io.netty:netty-codec-http from 4.1.129.Final to 4.1.132.Final in /sample... * [`395f3b2`](graalvm/native-build-tools@395f3b2) Use a safer way to create the temporary access filter file ([#852](https://redirect.github.com/graalvm/native-build-tools/issues/852)) * Additional commits viewable in [compare view](graalvm/native-build-tools@0.11.5...1.1.0) [](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)
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR adds the
listLibrariesMissingMetadataGradle task and thenative:list-libraries-missing-metadataMaven goal. They scan a project's direct external runtime dependencies, classify each as supported or missing against the configured GraalVM reachability metadata repository, look up existing GitHub issues for the missing ones, and either print a prefilled issue link per library or (withcreateIssues=true) file the issues directly. Implements #871.What Changed
New commands
listLibrariesMissingMetadata, registered inNativeImagePluginand wired against the runtime classpath.native:list-libraries-missing-metadata(requiresDependencyResolution=RUNTIME).createIssues=trueparameter on both that switches from "print prefilled link" to "file the issue via the GitHub API".upToDateWhen(false); Maven goal has no caching anyway).Detection
MissingMetadataCommandSupportincommon/graalvm-reachability-metadatais the single source of truth for classification; both plugins feed itDependencyCoordinates and consume aReport.group:artifact:version, with the existinguseLatestConfigWhenVersionIsUntestedbehavior preserved.ResolvedDependencyResults on the runtime classpath whose component is aModuleComponentIdentifier(project components and unresolved entries are filtered out).dependencyTrail.size() == 2and scopecompile/runtime/null.GitHub integration
repo:,is:issue is:open,label:library-new-request, and thegroupId:artifactIdsubstring; the result is matched by re-extracting coordinates from the issue title and body.-PgithubToken=.../-DgithubToken=...) →GITHUB_TOKEN→GH_TOKEN→gh auth token(5-second subprocess; non-zero exit treated as no token).oracle/graalvm-reachability-metadata(was a personal fork).createIssues=truethe failure is fatal.-PgithubToken=...for Gradle,-DgithubToken=...for Maven) and mentions all four token sources.Console output
createIssues=truesucceeded), and Or request support manually (the remaining ones). Errors get their own block at the bottom.createIssues=truere-run command tailored to the build tool, plus the token-resolution order on the next line.[1],[E1],[C1]) so library names line up vertically instead of drowning in 200-character URLs.title=value and populate the issue form'smaven_coordinatesfield so GitHub can auto-fill the request.Full report: <path>footer points the user at the JSON report.JSON report
command,mode,targetRepository,metadataRepositoryUri,scannedAt,project,summary,results[]. Per-result fields:coordinates,scope,status, plusissueStatus/issueUrl/issueNumberfor missing entries anderrorfor errors.schemas/list-libraries-missing-metadata-schema-v1.0.0.json; generated reports now include a$schemafield pointing to it.build/reports/native/list-libraries-missing-metadata.json(Gradle),${project.build.directory}/native/list-libraries-missing-metadata.json(Maven).Configuration & wiring
createIssues,githubToken,targetRepository,githubApiUrl,reportFile(the last one is now actually wired up).@Parameters with the same property names.getRootComponent()on the Gradle task is@Internal(paired withupToDateWhen(false)) for configuration-cache compatibility.Tests
MissingMetadataCommandSupportTest(shared) covers issue-title-and-body coordinate parsing, supported-vs-missing classification with prefilled-link generation, existing-issue reuse withgroup:artifact-level dedup (verified via an in-processHttpServer), token-resolution priority, the GitHub-CLI fallback, and the per-build-tool "missing token" error message. Tests of the new console layout assert on the headline, the call-to-action command, the token-resolution line, footnote indices, the prefilled issue-form URL, and the$schemareport field.ListLibrariesMissingMetadataTest(Gradle) covers the dependency-selection contract: only direct external module dependencies survive, project components and unresolved entries are filtered, transitive children are not walked.ListLibrariesMissingMetadataMojoTest(Maven) coversisDirectRuntimeDependencyacross scope (compile/runtime/null/test/provided) and trail length (1/2/3/null).Documentation
gradle-plugin.adocandmaven-plugin.adocget a "Checking Missing Metadata Support" reference section, including default usage, thecreateIssues=trueopt-in, the report file location, the override properties, and the four-step token-resolution order.[TIP]callout pointing at the command.Console output examples
Default mode (Gradle), all libraries missing, no existing requests
Default mode (Maven)
Same shape; the call-to-action becomes:
Mixed: some already requested, some still need support
After
createIssues=truesucceedsAll direct dependencies supported
Verification
originasjormundur00/gh-871.:graalvm-reachability-metadata:test,:native-gradle-plugin:test,:native-maven-plugin:test— all pass, including the new dependency-selection unit tests and the updated console-rendering assertions.Fixes: #871