diff --git a/.github/scripts/GenerateReadme.java b/.github/scripts/GenerateReadme.java index 2eb76ae3..0eb740e7 100644 --- a/.github/scripts/GenerateReadme.java +++ b/.github/scripts/GenerateReadme.java @@ -532,6 +532,19 @@ private static String render(Catalog source, StatsCache cache, LocalDate today, .append("License chips use GitHub SPDX metadata when available.\n\n") .append("Entries spanning several repositories combine their stars, use the most recent push for activity ") .append("and show a license only when all repositories agree.\n\n") + .append("
\n") + .append("Contents\n\n") + .append("Projects\n\n"); + + source.categories().stream() + .sorted(Comparator.comparing(category -> category.name, TEXT_ORDER)) + .forEach(category -> out.append("- [").append(category.name).append("](#") + .append(slug(category.name)).append(")\n")); + + out.append("\nResources\n\n"); + source.resources().forEach(resource -> out.append("- [").append(resource.name).append("](#") + .append(slug(resource.name)).append(")\n")); + out.append("\n
\n\n") .append("## Projects\n\n"); source.categories().stream() @@ -947,7 +960,7 @@ private static void selfTest() throws Exception { "license":{"spdx_id":"NOASSERTION"}} """); require(unknownLicense.license() == null, 0, "Unknown API license parsing"); - var category = new Category("Test"); + var category = new Category("API Compatibility"); category.description = "Test projects."; category.items.add(umbrella); var catalog = new Catalog("# Test", "Test.", List.of(category), List.of()); @@ -963,6 +976,14 @@ private static void selfTest() throws Exception { today, "test" ); + require( + rendered.contains("- [API Compatibility](#api-compatibility)") + && rendered.contains("
") + && rendered.contains("- [Links](#links)") + && rendered.contains("
"), + 0, + "Contents links" + ); require(rendered.contains("Suggest a project or resource"), 0, "Contribution CTA"); require(rendered.contains("CC BY-SA 4.0") && rendered.contains("[MIT](LICENSE-CODE)"), 0, "License footer"); diff --git a/README_SOURCE.md b/README_SOURCE.md index c4afed22..8f78fd92 100644 --- a/README_SOURCE.md +++ b/README_SOURCE.md @@ -11,6 +11,14 @@ Use absolute HTTPS canonical links and submit one project or resource per pull r ## Projects +### API Compatibility + +_Tools for tracking API evolution and detecting breaking changes between library versions._ + +- [japicmp](https://github.com/siom79/japicmp) - Compares two library JARs and reports source- and binary-incompatible changes. +- [Revapi](https://github.com/revapi/revapi) - Extensible API analysis and change tracking with configurable source, binary and semantic compatibility checks. +- [Roseau](https://github.com/alien-tools/roseau) - Detects source- and binary-breaking changes by comparing library versions from JAR files or source code. + ### Architecture _Frameworks and libraries that help implementing and verifying design and architecture concepts._