From 49bdd293ef918c3b0ef651a3db2fbb63ff4f0eea Mon Sep 17 00:00:00 2001 From: Jon Koops Date: Fri, 10 Jan 2025 13:00:52 +0100 Subject: [PATCH] Pull release notes from `keycloak-client` repository Closes #547 Signed-off-by: Jon Koops Signed-off-by: Marek Posolda Co-authored-by: Marek Posolda --- add-version-client.sh | 29 +++++++ add-version.sh | 9 +- blog/2025/keycloak-client-2604.adoc | 7 -- .../26.0.0}/changelog.json | 0 .../26.0.0/gh-release-notes.html | 38 ++++++++ .../keycloak-client/26.0.0/release-notes.html | 32 +++++++ .../keycloak-client/26.0.1/changelog.json | 15 ++++ .../26.0.1/gh-release-notes.html | 20 +++++ .../26.0.1}/release-notes.empty | 0 .../keycloak-client/26.0.2/changelog.json | 22 +++++ .../26.0.2/gh-release-notes.html | 21 +++++ .../26.0.2}/release-notes.empty | 0 .../keycloak-client/26.0.3/changelog.json | 36 ++++++++ .../26.0.3/gh-release-notes.html | 22 +++++ .../26.0.3}/release-notes.empty | 0 .../keycloak-client/26.0.4/changelog.json | 50 +++++++++++ .../26.0.4/gh-release-notes.html | 25 ++++++ .../26.0.4}/release-notes.empty | 0 .../{ => keycloak}/21.0.0/changelog.json | 0 .../21.0.0}/release-notes.empty | 0 .../{ => keycloak}/21.0.1/changelog.json | 0 .../21.0.1}/release-notes.empty | 0 .../{ => keycloak}/21.0.2/changelog.json | 0 .../21.0.2}/release-notes.empty | 0 .../{ => keycloak}/21.1.0/changelog.json | 0 .../{ => keycloak}/21.1.0/release-notes.html | 0 .../{ => keycloak}/21.1.1/changelog.json | 0 .../21.1.1}/release-notes.empty | 0 .../{ => keycloak}/21.1.2/changelog.json | 0 .../{ => keycloak}/21.1.2/release-notes.html | 0 .../{ => keycloak}/22.0.0/changelog.json | 0 .../{ => keycloak}/22.0.0/release-notes.html | 0 .../{ => keycloak}/22.0.1/changelog.json | 0 .../22.0.1}/release-notes.empty | 0 .../{ => keycloak}/22.0.2/changelog.json | 0 .../{ => keycloak}/22.0.2/release-notes.html | 0 .../22.0.3}/changelog.json | 0 .../{ => keycloak}/22.0.3/release-notes.html | 0 .../{ => keycloak}/22.0.4/changelog.json | 0 .../22.0.4}/release-notes.empty | 0 .../{ => keycloak}/22.0.5/changelog.json | 0 .../22.0.5}/release-notes.empty | 0 .../{ => keycloak}/23.0.0/changelog.json | 0 .../23.0.0/gh-release-notes.html | 0 .../{ => keycloak}/23.0.0/release-notes.html | 0 .../{ => keycloak}/23.0.1/changelog.json | 0 .../23.0.1/gh-release-notes.html | 0 .../23.0.1}/release-notes.empty | 0 .../{ => keycloak}/23.0.2/changelog.json | 0 .../23.0.2/gh-release-notes.html | 0 .../{ => keycloak}/23.0.2/release-notes.html | 0 .../{ => keycloak}/23.0.3/changelog.json | 0 .../23.0.3/gh-release-notes.html | 0 .../23.0.3}/release-notes.empty | 0 .../{ => keycloak}/23.0.4/changelog.json | 0 .../23.0.4/gh-release-notes.html | 0 .../23.0.4}/release-notes.empty | 0 .../{ => keycloak}/23.0.5/changelog.json | 0 .../23.0.5/gh-release-notes.html | 0 .../23.0.5}/release-notes.empty | 0 .../{ => keycloak}/23.0.6/changelog.json | 0 .../23.0.6/gh-release-notes.html | 0 .../23.0.6}/release-notes.empty | 0 .../{ => keycloak}/23.0.7/changelog.json | 0 .../23.0.7/gh-release-notes.html | 0 .../23.0.7}/release-notes.empty | 0 .../{ => keycloak}/24.0.0/changelog.json | 0 .../24.0.0/gh-release-notes.html | 0 .../{ => keycloak}/24.0.0/release-notes.html | 0 cache/releases/keycloak/24.0.1/changelog.json | 1 + .../24.0.1/gh-release-notes.html | 0 .../{ => keycloak}/24.0.1/release-notes.html | 0 .../{ => keycloak}/24.0.2/changelog.json | 0 .../24.0.2/gh-release-notes.html | 0 .../24.0.2}/release-notes.empty | 0 .../{ => keycloak}/24.0.3/changelog.json | 0 .../24.0.3/gh-release-notes.html | 0 .../24.0.3}/release-notes.empty | 0 .../{ => keycloak}/24.0.4/changelog.json | 0 .../24.0.4/gh-release-notes.html | 0 .../{ => keycloak}/24.0.4/release-notes.html | 0 .../{ => keycloak}/24.0.5/changelog.json | 0 .../24.0.5/gh-release-notes.html | 0 .../{ => keycloak}/24.0.5/release-notes.html | 0 .../{ => keycloak}/25.0.0/changelog.json | 0 .../25.0.0/gh-release-notes.html | 0 .../{ => keycloak}/25.0.0/release-notes.html | 0 .../{ => keycloak}/25.0.1/changelog.json | 0 .../25.0.1/gh-release-notes.html | 0 .../25.0.1}/release-notes.empty | 0 .../{ => keycloak}/25.0.2/changelog.json | 0 .../25.0.2/gh-release-notes.html | 0 .../25.0.2}/release-notes.empty | 0 .../{ => keycloak}/25.0.4/changelog.json | 0 .../25.0.4/gh-release-notes.html | 0 .../25.0.4}/release-notes.empty | 0 .../{ => keycloak}/25.0.5/changelog.json | 0 .../25.0.5/gh-release-notes.html | 0 .../25.0.5}/release-notes.empty | 0 .../{ => keycloak}/25.0.6/changelog.json | 0 .../25.0.6/gh-release-notes.html | 0 .../25.0.6}/release-notes.empty | 0 .../{ => keycloak}/26.0.0/changelog.json | 0 .../26.0.0/gh-release-notes.html | 0 .../{ => keycloak}/26.0.0/release-notes.html | 0 .../{ => keycloak}/26.0.1/changelog.json | 0 .../26.0.1/gh-release-notes.html | 0 .../26.0.1}/release-notes.empty | 0 .../{ => keycloak}/26.0.2/changelog.json | 0 .../26.0.2/gh-release-notes.html | 0 .../keycloak/26.0.2/release-notes.empty | 0 .../{ => keycloak}/26.0.4/changelog.json | 0 .../26.0.4/gh-release-notes.html | 0 .../keycloak/26.0.4/release-notes.empty | 0 .../{ => keycloak}/26.0.5/changelog.json | 0 .../26.0.5/gh-release-notes.html | 0 .../{ => keycloak}/26.0.5/release-notes.html | 0 .../{ => keycloak}/26.0.6/changelog.json | 0 .../26.0.6/gh-release-notes.html | 0 .../{ => keycloak}/26.0.6/release-notes.html | 0 .../{ => keycloak}/26.0.7/changelog.json | 0 .../26.0.7/gh-release-notes.html | 0 .../keycloak/26.0.7/release-notes.empty | 0 .../{ => keycloak}/26.0.8/changelog.json | 0 .../26.0.8/gh-release-notes.html | 0 .../keycloak/26.0.8/release-notes.empty | 0 .../{ => keycloak}/26.1.0/changelog.json | 0 .../26.1.0/gh-release-notes.html | 0 .../{ => keycloak}/26.1.0/release-notes.html | 0 releases.yaml | 15 ++++ .../java/org/keycloak/webbuilder/Blogs.java | 41 +++++---- .../java/org/keycloak/webbuilder/Context.java | 38 ++++++-- .../keycloak/webbuilder/ReleasesMetadata.java | 87 +++++++++++++++++++ .../webbuilder/builders/ChangelogBuilder.java | 50 +++++++++-- .../builders/GitHubReleaseNotesBuilder.java | 29 +++++-- .../builders/ReleaseNotesBuilder.java | 69 ++++++++++----- templates/blog-release-3.ftl | 4 +- templates/gh-release-3.ftl | 2 +- templates/rss.ftl | 3 + version-template-client.json | 5 ++ versions/keycloak-client/26.0.0.json | 5 ++ versions/keycloak-client/26.0.1.json | 5 ++ versions/keycloak-client/26.0.2.json | 5 ++ versions/keycloak-client/26.0.3.json | 5 ++ versions/keycloak-client/26.0.4.json | 6 ++ versions/{ => keycloak}/21.0.0.json | 0 versions/{ => keycloak}/21.0.1.json | 0 versions/{ => keycloak}/21.0.2.json | 0 versions/{ => keycloak}/21.1.0.json | 0 versions/{ => keycloak}/21.1.1.json | 0 versions/{ => keycloak}/21.1.2.json | 0 versions/{ => keycloak}/22.0.0.json | 0 versions/{ => keycloak}/22.0.1.json | 0 versions/{ => keycloak}/22.0.2.json | 0 versions/{ => keycloak}/22.0.3.json | 0 versions/{ => keycloak}/22.0.4.json | 0 versions/{ => keycloak}/22.0.5.json | 0 versions/{ => keycloak}/23.0.0.json | 0 versions/{ => keycloak}/23.0.1.json | 0 versions/{ => keycloak}/23.0.2.json | 0 versions/{ => keycloak}/23.0.3.json | 0 versions/{ => keycloak}/23.0.4.json | 0 versions/{ => keycloak}/23.0.5.json | 0 versions/{ => keycloak}/23.0.6.json | 0 versions/{ => keycloak}/23.0.7.json | 0 versions/{ => keycloak}/24.0.0.json | 0 versions/{ => keycloak}/24.0.1.json | 0 versions/{ => keycloak}/24.0.2.json | 0 versions/{ => keycloak}/24.0.3.json | 0 versions/{ => keycloak}/24.0.4.json | 0 versions/{ => keycloak}/24.0.5.json | 0 versions/{ => keycloak}/25.0.0.json | 0 versions/{ => keycloak}/25.0.1.json | 0 versions/{ => keycloak}/25.0.2.json | 0 versions/{ => keycloak}/25.0.4.json | 0 versions/{ => keycloak}/25.0.5.json | 0 versions/{ => keycloak}/25.0.6.json | 0 versions/{ => keycloak}/26.0.0.json | 0 versions/{ => keycloak}/26.0.1.json | 0 versions/{ => keycloak}/26.0.2.json | 0 versions/{ => keycloak}/26.0.4.json | 0 versions/{ => keycloak}/26.0.5.json | 0 versions/{ => keycloak}/26.0.6.json | 0 versions/{ => keycloak}/26.0.7.json | 0 versions/{ => keycloak}/26.0.8.json | 0 versions/{ => keycloak}/26.1.0.json | 0 186 files changed, 620 insertions(+), 76 deletions(-) create mode 100755 add-version-client.sh delete mode 100644 blog/2025/keycloak-client-2604.adoc rename cache/releases/{22.0.3 => keycloak-client/26.0.0}/changelog.json (100%) create mode 100644 cache/releases/keycloak-client/26.0.0/gh-release-notes.html create mode 100644 cache/releases/keycloak-client/26.0.0/release-notes.html create mode 100644 cache/releases/keycloak-client/26.0.1/changelog.json create mode 100644 cache/releases/keycloak-client/26.0.1/gh-release-notes.html rename cache/releases/{21.0.0 => keycloak-client/26.0.1}/release-notes.empty (100%) create mode 100644 cache/releases/keycloak-client/26.0.2/changelog.json create mode 100644 cache/releases/keycloak-client/26.0.2/gh-release-notes.html rename cache/releases/{21.0.1 => keycloak-client/26.0.2}/release-notes.empty (100%) create mode 100644 cache/releases/keycloak-client/26.0.3/changelog.json create mode 100644 cache/releases/keycloak-client/26.0.3/gh-release-notes.html rename cache/releases/{21.0.2 => keycloak-client/26.0.3}/release-notes.empty (100%) create mode 100644 cache/releases/keycloak-client/26.0.4/changelog.json create mode 100644 cache/releases/keycloak-client/26.0.4/gh-release-notes.html rename cache/releases/{21.1.1 => keycloak-client/26.0.4}/release-notes.empty (100%) rename cache/releases/{ => keycloak}/21.0.0/changelog.json (100%) rename cache/releases/{22.0.1 => keycloak/21.0.0}/release-notes.empty (100%) rename cache/releases/{ => keycloak}/21.0.1/changelog.json (100%) rename cache/releases/{22.0.4 => keycloak/21.0.1}/release-notes.empty (100%) rename cache/releases/{ => keycloak}/21.0.2/changelog.json (100%) rename cache/releases/{22.0.5 => keycloak/21.0.2}/release-notes.empty (100%) rename cache/releases/{ => keycloak}/21.1.0/changelog.json (100%) rename cache/releases/{ => keycloak}/21.1.0/release-notes.html (100%) rename cache/releases/{ => keycloak}/21.1.1/changelog.json (100%) rename cache/releases/{23.0.1 => keycloak/21.1.1}/release-notes.empty (100%) rename cache/releases/{ => keycloak}/21.1.2/changelog.json (100%) rename cache/releases/{ => keycloak}/21.1.2/release-notes.html (100%) rename cache/releases/{ => keycloak}/22.0.0/changelog.json (100%) rename cache/releases/{ => keycloak}/22.0.0/release-notes.html (100%) rename cache/releases/{ => keycloak}/22.0.1/changelog.json (100%) rename cache/releases/{23.0.3 => keycloak/22.0.1}/release-notes.empty (100%) rename cache/releases/{ => keycloak}/22.0.2/changelog.json (100%) rename cache/releases/{ => keycloak}/22.0.2/release-notes.html (100%) rename cache/releases/{24.0.1 => keycloak/22.0.3}/changelog.json (100%) rename cache/releases/{ => keycloak}/22.0.3/release-notes.html (100%) rename cache/releases/{ => keycloak}/22.0.4/changelog.json (100%) rename cache/releases/{23.0.4 => keycloak/22.0.4}/release-notes.empty (100%) rename cache/releases/{ => keycloak}/22.0.5/changelog.json (100%) rename cache/releases/{23.0.5 => keycloak/22.0.5}/release-notes.empty (100%) rename cache/releases/{ => keycloak}/23.0.0/changelog.json (100%) rename cache/releases/{ => keycloak}/23.0.0/gh-release-notes.html (100%) rename cache/releases/{ => keycloak}/23.0.0/release-notes.html (100%) rename cache/releases/{ => keycloak}/23.0.1/changelog.json (100%) rename cache/releases/{ => keycloak}/23.0.1/gh-release-notes.html (100%) rename cache/releases/{23.0.6 => keycloak/23.0.1}/release-notes.empty (100%) rename cache/releases/{ => keycloak}/23.0.2/changelog.json (100%) rename cache/releases/{ => keycloak}/23.0.2/gh-release-notes.html (100%) rename cache/releases/{ => keycloak}/23.0.2/release-notes.html (100%) rename cache/releases/{ => keycloak}/23.0.3/changelog.json (100%) rename cache/releases/{ => keycloak}/23.0.3/gh-release-notes.html (100%) rename cache/releases/{23.0.7 => keycloak/23.0.3}/release-notes.empty (100%) rename cache/releases/{ => keycloak}/23.0.4/changelog.json (100%) rename cache/releases/{ => keycloak}/23.0.4/gh-release-notes.html (100%) rename cache/releases/{24.0.2 => keycloak/23.0.4}/release-notes.empty (100%) rename cache/releases/{ => keycloak}/23.0.5/changelog.json (100%) rename cache/releases/{ => keycloak}/23.0.5/gh-release-notes.html (100%) rename cache/releases/{24.0.3 => keycloak/23.0.5}/release-notes.empty (100%) rename cache/releases/{ => keycloak}/23.0.6/changelog.json (100%) rename cache/releases/{ => keycloak}/23.0.6/gh-release-notes.html (100%) rename cache/releases/{25.0.1 => keycloak/23.0.6}/release-notes.empty (100%) rename cache/releases/{ => keycloak}/23.0.7/changelog.json (100%) rename cache/releases/{ => keycloak}/23.0.7/gh-release-notes.html (100%) rename cache/releases/{25.0.2 => keycloak/23.0.7}/release-notes.empty (100%) rename cache/releases/{ => keycloak}/24.0.0/changelog.json (100%) rename cache/releases/{ => keycloak}/24.0.0/gh-release-notes.html (100%) rename cache/releases/{ => keycloak}/24.0.0/release-notes.html (100%) create mode 100644 cache/releases/keycloak/24.0.1/changelog.json rename cache/releases/{ => keycloak}/24.0.1/gh-release-notes.html (100%) rename cache/releases/{ => keycloak}/24.0.1/release-notes.html (100%) rename cache/releases/{ => keycloak}/24.0.2/changelog.json (100%) rename cache/releases/{ => keycloak}/24.0.2/gh-release-notes.html (100%) rename cache/releases/{25.0.4 => keycloak/24.0.2}/release-notes.empty (100%) rename cache/releases/{ => keycloak}/24.0.3/changelog.json (100%) rename cache/releases/{ => keycloak}/24.0.3/gh-release-notes.html (100%) rename cache/releases/{25.0.5 => keycloak/24.0.3}/release-notes.empty (100%) rename cache/releases/{ => keycloak}/24.0.4/changelog.json (100%) rename cache/releases/{ => keycloak}/24.0.4/gh-release-notes.html (100%) rename cache/releases/{ => keycloak}/24.0.4/release-notes.html (100%) rename cache/releases/{ => keycloak}/24.0.5/changelog.json (100%) rename cache/releases/{ => keycloak}/24.0.5/gh-release-notes.html (100%) rename cache/releases/{ => keycloak}/24.0.5/release-notes.html (100%) rename cache/releases/{ => keycloak}/25.0.0/changelog.json (100%) rename cache/releases/{ => keycloak}/25.0.0/gh-release-notes.html (100%) rename cache/releases/{ => keycloak}/25.0.0/release-notes.html (100%) rename cache/releases/{ => keycloak}/25.0.1/changelog.json (100%) rename cache/releases/{ => keycloak}/25.0.1/gh-release-notes.html (100%) rename cache/releases/{25.0.6 => keycloak/25.0.1}/release-notes.empty (100%) rename cache/releases/{ => keycloak}/25.0.2/changelog.json (100%) rename cache/releases/{ => keycloak}/25.0.2/gh-release-notes.html (100%) rename cache/releases/{26.0.1 => keycloak/25.0.2}/release-notes.empty (100%) rename cache/releases/{ => keycloak}/25.0.4/changelog.json (100%) rename cache/releases/{ => keycloak}/25.0.4/gh-release-notes.html (100%) rename cache/releases/{26.0.2 => keycloak/25.0.4}/release-notes.empty (100%) rename cache/releases/{ => keycloak}/25.0.5/changelog.json (100%) rename cache/releases/{ => keycloak}/25.0.5/gh-release-notes.html (100%) rename cache/releases/{26.0.4 => keycloak/25.0.5}/release-notes.empty (100%) rename cache/releases/{ => keycloak}/25.0.6/changelog.json (100%) rename cache/releases/{ => keycloak}/25.0.6/gh-release-notes.html (100%) rename cache/releases/{26.0.7 => keycloak/25.0.6}/release-notes.empty (100%) rename cache/releases/{ => keycloak}/26.0.0/changelog.json (100%) rename cache/releases/{ => keycloak}/26.0.0/gh-release-notes.html (100%) rename cache/releases/{ => keycloak}/26.0.0/release-notes.html (100%) rename cache/releases/{ => keycloak}/26.0.1/changelog.json (100%) rename cache/releases/{ => keycloak}/26.0.1/gh-release-notes.html (100%) rename cache/releases/{26.0.8 => keycloak/26.0.1}/release-notes.empty (100%) rename cache/releases/{ => keycloak}/26.0.2/changelog.json (100%) rename cache/releases/{ => keycloak}/26.0.2/gh-release-notes.html (100%) create mode 100644 cache/releases/keycloak/26.0.2/release-notes.empty rename cache/releases/{ => keycloak}/26.0.4/changelog.json (100%) rename cache/releases/{ => keycloak}/26.0.4/gh-release-notes.html (100%) create mode 100644 cache/releases/keycloak/26.0.4/release-notes.empty rename cache/releases/{ => keycloak}/26.0.5/changelog.json (100%) rename cache/releases/{ => keycloak}/26.0.5/gh-release-notes.html (100%) rename cache/releases/{ => keycloak}/26.0.5/release-notes.html (100%) rename cache/releases/{ => keycloak}/26.0.6/changelog.json (100%) rename cache/releases/{ => keycloak}/26.0.6/gh-release-notes.html (100%) rename cache/releases/{ => keycloak}/26.0.6/release-notes.html (100%) rename cache/releases/{ => keycloak}/26.0.7/changelog.json (100%) rename cache/releases/{ => keycloak}/26.0.7/gh-release-notes.html (100%) create mode 100644 cache/releases/keycloak/26.0.7/release-notes.empty rename cache/releases/{ => keycloak}/26.0.8/changelog.json (100%) rename cache/releases/{ => keycloak}/26.0.8/gh-release-notes.html (100%) create mode 100644 cache/releases/keycloak/26.0.8/release-notes.empty rename cache/releases/{ => keycloak}/26.1.0/changelog.json (100%) rename cache/releases/{ => keycloak}/26.1.0/gh-release-notes.html (100%) rename cache/releases/{ => keycloak}/26.1.0/release-notes.html (100%) create mode 100644 releases.yaml create mode 100644 src/main/java/org/keycloak/webbuilder/ReleasesMetadata.java create mode 100644 version-template-client.json create mode 100644 versions/keycloak-client/26.0.0.json create mode 100644 versions/keycloak-client/26.0.1.json create mode 100644 versions/keycloak-client/26.0.2.json create mode 100644 versions/keycloak-client/26.0.3.json create mode 100644 versions/keycloak-client/26.0.4.json rename versions/{ => keycloak}/21.0.0.json (100%) rename versions/{ => keycloak}/21.0.1.json (100%) rename versions/{ => keycloak}/21.0.2.json (100%) rename versions/{ => keycloak}/21.1.0.json (100%) rename versions/{ => keycloak}/21.1.1.json (100%) rename versions/{ => keycloak}/21.1.2.json (100%) rename versions/{ => keycloak}/22.0.0.json (100%) rename versions/{ => keycloak}/22.0.1.json (100%) rename versions/{ => keycloak}/22.0.2.json (100%) rename versions/{ => keycloak}/22.0.3.json (100%) rename versions/{ => keycloak}/22.0.4.json (100%) rename versions/{ => keycloak}/22.0.5.json (100%) rename versions/{ => keycloak}/23.0.0.json (100%) rename versions/{ => keycloak}/23.0.1.json (100%) rename versions/{ => keycloak}/23.0.2.json (100%) rename versions/{ => keycloak}/23.0.3.json (100%) rename versions/{ => keycloak}/23.0.4.json (100%) rename versions/{ => keycloak}/23.0.5.json (100%) rename versions/{ => keycloak}/23.0.6.json (100%) rename versions/{ => keycloak}/23.0.7.json (100%) rename versions/{ => keycloak}/24.0.0.json (100%) rename versions/{ => keycloak}/24.0.1.json (100%) rename versions/{ => keycloak}/24.0.2.json (100%) rename versions/{ => keycloak}/24.0.3.json (100%) rename versions/{ => keycloak}/24.0.4.json (100%) rename versions/{ => keycloak}/24.0.5.json (100%) rename versions/{ => keycloak}/25.0.0.json (100%) rename versions/{ => keycloak}/25.0.1.json (100%) rename versions/{ => keycloak}/25.0.2.json (100%) rename versions/{ => keycloak}/25.0.4.json (100%) rename versions/{ => keycloak}/25.0.5.json (100%) rename versions/{ => keycloak}/25.0.6.json (100%) rename versions/{ => keycloak}/26.0.0.json (100%) rename versions/{ => keycloak}/26.0.1.json (100%) rename versions/{ => keycloak}/26.0.2.json (100%) rename versions/{ => keycloak}/26.0.4.json (100%) rename versions/{ => keycloak}/26.0.5.json (100%) rename versions/{ => keycloak}/26.0.6.json (100%) rename versions/{ => keycloak}/26.0.7.json (100%) rename versions/{ => keycloak}/26.0.8.json (100%) rename versions/{ => keycloak}/26.1.0.json (100%) diff --git a/add-version-client.sh b/add-version-client.sh new file mode 100755 index 00000000..040351d2 --- /dev/null +++ b/add-version-client.sh @@ -0,0 +1,29 @@ +#!/bin/bash -e + +VERSION=$1 +if [ "$VERSION" == "" ]; then + echo "usage: add-version-client.sh VERSION" + exit 1 +fi + +VERSION_NAME=`echo $VERSION | sed 's/.Final//' | sed 's/.CR[[:digit:]]//'` +DATE=`date +%F` + +if [[ "$VERSION" == *".0" ]]; then + TEMPLATE="version-template-client.json" +else + TEMPLATE="versions/keycloak-client/${VERSION%.*}.0.json" +fi + +if [ ! -f "$TEMPLATE" ]; then + echo "$TEMPLATE not found" + exit +fi + +cat $TEMPLATE | sed "s/\"version\":.*/\"version\": \"$VERSION\",/" | sed 's/"date": ".*"/"date": "DATE"/' | sed "s/DATE/$DATE/" > versions/keycloak-client/$VERSION_NAME.json + +CURRENT=`cat pom.xml | grep '' | cut -d '>' -f 2 | cut -d '<' -f 1` +LATEST=`echo -e "$CURRENT\n$VERSION" | sort -V -r | head -n 1` + +mvn versions:set-property -Dproperty=version.keycloak.client -DnewVersion=$LATEST -DgenerateBackupPoms=false +mvn install diff --git a/add-version.sh b/add-version.sh index 3171e20d..a903a8a6 100755 --- a/add-version.sh +++ b/add-version.sh @@ -9,10 +9,10 @@ fi VERSION_NAME=`echo $VERSION | sed 's/.Final//' | sed 's/.CR[[:digit:]]//'` DATE=`date +%F` -if [[ "$VERSION" == *".0" ]]; then +if [[ "$VERSION" == *".0" ]]; then TEMPLATE="version-template.json" else - TEMPLATE="versions/${VERSION%.*}.0.json" + TEMPLATE="versions/keycloak/${VERSION%.*}.0.json" fi if [ ! -f "$TEMPLATE" ]; then @@ -20,11 +20,10 @@ if [ ! -f "$TEMPLATE" ]; then exit fi -cat $TEMPLATE | sed "s/\"version\":.*/\"version\": \"$VERSION\",/" | sed 's/"date": ".*"/"date": "DATE"/' | sed "s/DATE/$DATE/" > versions/$VERSION_NAME.json +cat $TEMPLATE | sed "s/\"version\":.*/\"version\": \"$VERSION\",/" | sed 's/"date": ".*"/"date": "DATE"/' | sed "s/DATE/$DATE/" > versions/keycloak/$VERSION_NAME.json CURRENT=`cat pom.xml | grep '' | cut -d '>' -f 2 | cut -d '<' -f 1` LATEST=`echo -e "$CURRENT\n$VERSION" | sort -V -r | head -n 1` -sed -i "s|$CURRENT|$LATEST|g" pom.xml - +mvn versions:set-property -Dproperty=version.keycloak -DnewVersion=$LATEST -DgenerateBackupPoms=false mvn install diff --git a/blog/2025/keycloak-client-2604.adoc b/blog/2025/keycloak-client-2604.adoc deleted file mode 100644 index b759d827..00000000 --- a/blog/2025/keycloak-client-2604.adoc +++ /dev/null @@ -1,7 +0,0 @@ -:title: Keycloak client 26.0.4 released -:date: 2025-01-17 -:publish: true -:author: Marek Posolda - -Keycloak client 26.0.4 is released. The corresponding artifacts are available in the public maven repository. This release is synced with Keycloak server 26.1.0 and allows to use -latest APIs of that server version. For the details, see all the fixed issues https://github.com/keycloak/keycloak-client/issues?q=is%3Aissue%20state%3Aclosed%20label%3Arelease%2F26.0.4[here]. diff --git a/cache/releases/22.0.3/changelog.json b/cache/releases/keycloak-client/26.0.0/changelog.json similarity index 100% rename from cache/releases/22.0.3/changelog.json rename to cache/releases/keycloak-client/26.0.0/changelog.json diff --git a/cache/releases/keycloak-client/26.0.0/gh-release-notes.html b/cache/releases/keycloak-client/26.0.0/gh-release-notes.html new file mode 100644 index 00000000..1904a3f7 --- /dev/null +++ b/cache/releases/keycloak-client/26.0.0/gh-release-notes.html @@ -0,0 +1,38 @@ +
+

Highlights

+
+

Dedicated release cycle for the client libraries

+
+

From this release, some of the Keycloak client libraries will have release cycle independent of the Keycloak server release cycle. The 26.0.0 release may be the last one +when the client libraries are released together with the Keycloak server. But from now on, the client libraries may be released at a different time than the Keycloak server.

+
+
+

The client libraries are these artifacts:

+
+
+
    +
  • +

    Java admin client - Maven artifact org.keycloak:keycloak-admin-client

    +
  • +
  • +

    Java authorization client - Maven artifact org.keycloak:keycloak-authz-client

    +
  • +
  • +

    Java policy enforcer - Maven artifact org.keycloak:keycloak-policy-enforcer

    +
  • +
+
+
+

It is possible that in the future, some more libraries will be included.

+
+
+
+

Compatibility of the client libraries with the server

+
+

Beginning with this release, we are testing and supporting client libraries with the same server version and a few previous major server versions.

+
+
+

Upgrading

+

Before upgrading refer to the migration guide for a complete list of changes.

+ +
\ No newline at end of file diff --git a/cache/releases/keycloak-client/26.0.0/release-notes.html b/cache/releases/keycloak-client/26.0.0/release-notes.html new file mode 100644 index 00000000..1b139f23 --- /dev/null +++ b/cache/releases/keycloak-client/26.0.0/release-notes.html @@ -0,0 +1,32 @@ +
+

Dedicated release cycle for the client libraries

+
+

From this release, some of the Keycloak client libraries will have release cycle independent of the Keycloak server release cycle. The 26.0.0 release may be the last one +when the client libraries are released together with the Keycloak server. But from now on, the client libraries may be released at a different time than the Keycloak server.

+
+
+

The client libraries are these artifacts:

+
+
+
    +
  • +

    Java admin client - Maven artifact org.keycloak:keycloak-admin-client

    +
  • +
  • +

    Java authorization client - Maven artifact org.keycloak:keycloak-authz-client

    +
  • +
  • +

    Java policy enforcer - Maven artifact org.keycloak:keycloak-policy-enforcer

    +
  • +
+
+
+

It is possible that in the future, some more libraries will be included.

+
+
+
+

Compatibility of the client libraries with the server

+
+

Beginning with this release, we are testing and supporting client libraries with the same server version and a few previous major server versions.

+
+
\ No newline at end of file diff --git a/cache/releases/keycloak-client/26.0.1/changelog.json b/cache/releases/keycloak-client/26.0.1/changelog.json new file mode 100644 index 00000000..3d1041da --- /dev/null +++ b/cache/releases/keycloak-client/26.0.1/changelog.json @@ -0,0 +1,15 @@ +[ { + "number" : 89, + "repository" : "keycloak-client", + "title" : "ClientTest failing with latest Keycloak nightly", + "kind" : "bug", + "area" : "admin-client", + "url" : "https://github.com/keycloak/keycloak-client/issues/89" +}, { + "number" : 92, + "repository" : "keycloak-client", + "title" : "Setup CI during nightly build", + "kind" : "enhancement", + "area" : null, + "url" : "https://github.com/keycloak/keycloak-client/issues/92" +} ] \ No newline at end of file diff --git a/cache/releases/keycloak-client/26.0.1/gh-release-notes.html b/cache/releases/keycloak-client/26.0.1/gh-release-notes.html new file mode 100644 index 00000000..1ba25812 --- /dev/null +++ b/cache/releases/keycloak-client/26.0.1/gh-release-notes.html @@ -0,0 +1,20 @@ +
+ +

Upgrading

+

Before upgrading refer to the migration guide for a complete list of changes.

+ +

All resolved issues

+ + + +

Enhancements

+
    +
  • #92 Setup CI during nightly build
  • +
+ +

Bugs

+
    +
  • #89 ClientTest failing with latest Keycloak nightly admin-client
  • +
+ +
\ No newline at end of file diff --git a/cache/releases/21.0.0/release-notes.empty b/cache/releases/keycloak-client/26.0.1/release-notes.empty similarity index 100% rename from cache/releases/21.0.0/release-notes.empty rename to cache/releases/keycloak-client/26.0.1/release-notes.empty diff --git a/cache/releases/keycloak-client/26.0.2/changelog.json b/cache/releases/keycloak-client/26.0.2/changelog.json new file mode 100644 index 00000000..953e5451 --- /dev/null +++ b/cache/releases/keycloak-client/26.0.2/changelog.json @@ -0,0 +1,22 @@ +[ { + "number" : 92, + "repository" : "keycloak-client", + "title" : "Setup CI during nightly build", + "kind" : "enhancement", + "area" : null, + "url" : "https://github.com/keycloak/keycloak-client/issues/92" +}, { + "number" : 94, + "repository" : "keycloak-client", + "title" : "Tests failing with latest Keycloak server nightly", + "kind" : "bug", + "area" : null, + "url" : "https://github.com/keycloak/keycloak-client/issues/94" +}, { + "number" : 99, + "repository" : "keycloak-client", + "title" : "Sync with keycloak server 26.0.4", + "kind" : "enhancement", + "area" : "admin-client", + "url" : "https://github.com/keycloak/keycloak-client/issues/99" +} ] \ No newline at end of file diff --git a/cache/releases/keycloak-client/26.0.2/gh-release-notes.html b/cache/releases/keycloak-client/26.0.2/gh-release-notes.html new file mode 100644 index 00000000..faf97d5d --- /dev/null +++ b/cache/releases/keycloak-client/26.0.2/gh-release-notes.html @@ -0,0 +1,21 @@ +
+ +

Upgrading

+

Before upgrading refer to the migration guide for a complete list of changes.

+ +

All resolved issues

+ + + +

Enhancements

+
    +
  • #92 Setup CI during nightly build
  • +
  • #99 Sync with keycloak server 26.0.4 admin-client
  • +
+ +

Bugs

+
    +
  • #94 Tests failing with latest Keycloak server nightly
  • +
+ +
\ No newline at end of file diff --git a/cache/releases/21.0.1/release-notes.empty b/cache/releases/keycloak-client/26.0.2/release-notes.empty similarity index 100% rename from cache/releases/21.0.1/release-notes.empty rename to cache/releases/keycloak-client/26.0.2/release-notes.empty diff --git a/cache/releases/keycloak-client/26.0.3/changelog.json b/cache/releases/keycloak-client/26.0.3/changelog.json new file mode 100644 index 00000000..70cd6d44 --- /dev/null +++ b/cache/releases/keycloak-client/26.0.3/changelog.json @@ -0,0 +1,36 @@ +[ { + "number" : 87, + "repository" : "keycloak-client", + "title" : "Setup nightly action to sync from keycloak server main", + "kind" : "task", + "area" : null, + "url" : "https://github.com/keycloak/keycloak-client/issues/87" +}, { + "number" : 90, + "repository" : "keycloak-client", + "title" : "Update MD files ", + "kind" : "enhancement", + "area" : null, + "url" : "https://github.com/keycloak/keycloak-client/issues/90" +}, { + "number" : 93, + "repository" : "keycloak-client", + "title" : "Move upgrading guide for keycloak-client libraries to the client documentation", + "kind" : "enhancement", + "area" : "docs", + "url" : "https://github.com/keycloak/keycloak-client/issues/93" +}, { + "number" : 101, + "repository" : "keycloak-client", + "title" : "Setup GH action (or script), which will send PR for automatically sync with keycloak server", + "kind" : "enhancement", + "area" : null, + "url" : "https://github.com/keycloak/keycloak-client/issues/101" +}, { + "number" : 105, + "repository" : "keycloak-client", + "title" : "Unnecessary `httpclient` dependency in `keycloak-client-common-synced` module", + "kind" : "bug", + "area" : null, + "url" : "https://github.com/keycloak/keycloak-client/issues/105" +} ] \ No newline at end of file diff --git a/cache/releases/keycloak-client/26.0.3/gh-release-notes.html b/cache/releases/keycloak-client/26.0.3/gh-release-notes.html new file mode 100644 index 00000000..36002e41 --- /dev/null +++ b/cache/releases/keycloak-client/26.0.3/gh-release-notes.html @@ -0,0 +1,22 @@ +
+ +

Upgrading

+

Before upgrading refer to the migration guide for a complete list of changes.

+ +

All resolved issues

+ + + +

Enhancements

+
    +
  • #90 Update MD files
  • +
  • #93 Move upgrading guide for keycloak-client libraries to the client documentation docs
  • +
  • #101 Setup GH action (or script), which will send PR for automatically sync with keycloak server
  • +
+ +

Bugs

+
    +
  • #105 Unnecessary `httpclient` dependency in `keycloak-client-common-synced` module
  • +
+ +
\ No newline at end of file diff --git a/cache/releases/21.0.2/release-notes.empty b/cache/releases/keycloak-client/26.0.3/release-notes.empty similarity index 100% rename from cache/releases/21.0.2/release-notes.empty rename to cache/releases/keycloak-client/26.0.3/release-notes.empty diff --git a/cache/releases/keycloak-client/26.0.4/changelog.json b/cache/releases/keycloak-client/26.0.4/changelog.json new file mode 100644 index 00000000..e5fbc334 --- /dev/null +++ b/cache/releases/keycloak-client/26.0.4/changelog.json @@ -0,0 +1,50 @@ +[ { + "number" : 113, + "repository" : "keycloak-client", + "title" : "Wrong logger class", + "kind" : "enhancement", + "area" : "policy-enforcer", + "url" : "https://github.com/keycloak/keycloak-client/issues/113" +}, { + "number" : 115, + "repository" : "keycloak-client", + "title" : "ProviderTest failing with latest nightly build", + "kind" : "bug", + "area" : "testsuite", + "url" : "https://github.com/keycloak/keycloak-client/issues/115" +}, { + "number" : 117, + "repository" : "keycloak-client", + "title" : "Remove JEE from the title of GH actions", + "kind" : "enhancement", + "area" : null, + "url" : "https://github.com/keycloak/keycloak-client/issues/117" +}, { + "number" : 124, + "repository" : "keycloak-client", + "title" : "The action \"Sync with Keycloak Server and send PR with changes\" sends PR, which does not have DCO on the commit", + "kind" : "bug", + "area" : null, + "url" : "https://github.com/keycloak/keycloak-client/issues/124" +}, { + "number" : 127, + "repository" : "keycloak-client", + "title" : "Sync after Keycloak server 26.1.0 release", + "kind" : "enhancement", + "area" : null, + "url" : "https://github.com/keycloak/keycloak-client/issues/127" +}, { + "number" : 129, + "repository" : "keycloak-client", + "title" : "The action \"Sync with Keycloak Server and send PR with changes\" takes only client-common-synced into consideration", + "kind" : "bug", + "area" : null, + "url" : "https://github.com/keycloak/keycloak-client/issues/129" +}, { + "number" : 130, + "repository" : "keycloak-client", + "title" : "Test with keycloak server images 24.0, 26.0 and 26.1", + "kind" : "enhancement", + "area" : "testsuite", + "url" : "https://github.com/keycloak/keycloak-client/issues/130" +} ] \ No newline at end of file diff --git a/cache/releases/keycloak-client/26.0.4/gh-release-notes.html b/cache/releases/keycloak-client/26.0.4/gh-release-notes.html new file mode 100644 index 00000000..b7bd7b6c --- /dev/null +++ b/cache/releases/keycloak-client/26.0.4/gh-release-notes.html @@ -0,0 +1,25 @@ +
+ +

Upgrading

+

Before upgrading refer to the migration guide for a complete list of changes.

+ +

All resolved issues

+ + + +

Enhancements

+
    +
  • #113 Wrong logger class policy-enforcer
  • +
  • #117 Remove JEE from the title of GH actions
  • +
  • #127 Sync after Keycloak server 26.1.0 release
  • +
  • #130 Test with keycloak server images 24.0, 26.0 and 26.1 testsuite
  • +
+ +

Bugs

+
    +
  • #115 ProviderTest failing with latest nightly build testsuite
  • +
  • #124 The action "Sync with Keycloak Server and send PR with changes" sends PR, which does not have DCO on the commit
  • +
  • #129 The action "Sync with Keycloak Server and send PR with changes" takes only client-common-synced into consideration
  • +
+ +
\ No newline at end of file diff --git a/cache/releases/21.1.1/release-notes.empty b/cache/releases/keycloak-client/26.0.4/release-notes.empty similarity index 100% rename from cache/releases/21.1.1/release-notes.empty rename to cache/releases/keycloak-client/26.0.4/release-notes.empty diff --git a/cache/releases/21.0.0/changelog.json b/cache/releases/keycloak/21.0.0/changelog.json similarity index 100% rename from cache/releases/21.0.0/changelog.json rename to cache/releases/keycloak/21.0.0/changelog.json diff --git a/cache/releases/22.0.1/release-notes.empty b/cache/releases/keycloak/21.0.0/release-notes.empty similarity index 100% rename from cache/releases/22.0.1/release-notes.empty rename to cache/releases/keycloak/21.0.0/release-notes.empty diff --git a/cache/releases/21.0.1/changelog.json b/cache/releases/keycloak/21.0.1/changelog.json similarity index 100% rename from cache/releases/21.0.1/changelog.json rename to cache/releases/keycloak/21.0.1/changelog.json diff --git a/cache/releases/22.0.4/release-notes.empty b/cache/releases/keycloak/21.0.1/release-notes.empty similarity index 100% rename from cache/releases/22.0.4/release-notes.empty rename to cache/releases/keycloak/21.0.1/release-notes.empty diff --git a/cache/releases/21.0.2/changelog.json b/cache/releases/keycloak/21.0.2/changelog.json similarity index 100% rename from cache/releases/21.0.2/changelog.json rename to cache/releases/keycloak/21.0.2/changelog.json diff --git a/cache/releases/22.0.5/release-notes.empty b/cache/releases/keycloak/21.0.2/release-notes.empty similarity index 100% rename from cache/releases/22.0.5/release-notes.empty rename to cache/releases/keycloak/21.0.2/release-notes.empty diff --git a/cache/releases/21.1.0/changelog.json b/cache/releases/keycloak/21.1.0/changelog.json similarity index 100% rename from cache/releases/21.1.0/changelog.json rename to cache/releases/keycloak/21.1.0/changelog.json diff --git a/cache/releases/21.1.0/release-notes.html b/cache/releases/keycloak/21.1.0/release-notes.html similarity index 100% rename from cache/releases/21.1.0/release-notes.html rename to cache/releases/keycloak/21.1.0/release-notes.html diff --git a/cache/releases/21.1.1/changelog.json b/cache/releases/keycloak/21.1.1/changelog.json similarity index 100% rename from cache/releases/21.1.1/changelog.json rename to cache/releases/keycloak/21.1.1/changelog.json diff --git a/cache/releases/23.0.1/release-notes.empty b/cache/releases/keycloak/21.1.1/release-notes.empty similarity index 100% rename from cache/releases/23.0.1/release-notes.empty rename to cache/releases/keycloak/21.1.1/release-notes.empty diff --git a/cache/releases/21.1.2/changelog.json b/cache/releases/keycloak/21.1.2/changelog.json similarity index 100% rename from cache/releases/21.1.2/changelog.json rename to cache/releases/keycloak/21.1.2/changelog.json diff --git a/cache/releases/21.1.2/release-notes.html b/cache/releases/keycloak/21.1.2/release-notes.html similarity index 100% rename from cache/releases/21.1.2/release-notes.html rename to cache/releases/keycloak/21.1.2/release-notes.html diff --git a/cache/releases/22.0.0/changelog.json b/cache/releases/keycloak/22.0.0/changelog.json similarity index 100% rename from cache/releases/22.0.0/changelog.json rename to cache/releases/keycloak/22.0.0/changelog.json diff --git a/cache/releases/22.0.0/release-notes.html b/cache/releases/keycloak/22.0.0/release-notes.html similarity index 100% rename from cache/releases/22.0.0/release-notes.html rename to cache/releases/keycloak/22.0.0/release-notes.html diff --git a/cache/releases/22.0.1/changelog.json b/cache/releases/keycloak/22.0.1/changelog.json similarity index 100% rename from cache/releases/22.0.1/changelog.json rename to cache/releases/keycloak/22.0.1/changelog.json diff --git a/cache/releases/23.0.3/release-notes.empty b/cache/releases/keycloak/22.0.1/release-notes.empty similarity index 100% rename from cache/releases/23.0.3/release-notes.empty rename to cache/releases/keycloak/22.0.1/release-notes.empty diff --git a/cache/releases/22.0.2/changelog.json b/cache/releases/keycloak/22.0.2/changelog.json similarity index 100% rename from cache/releases/22.0.2/changelog.json rename to cache/releases/keycloak/22.0.2/changelog.json diff --git a/cache/releases/22.0.2/release-notes.html b/cache/releases/keycloak/22.0.2/release-notes.html similarity index 100% rename from cache/releases/22.0.2/release-notes.html rename to cache/releases/keycloak/22.0.2/release-notes.html diff --git a/cache/releases/24.0.1/changelog.json b/cache/releases/keycloak/22.0.3/changelog.json similarity index 100% rename from cache/releases/24.0.1/changelog.json rename to cache/releases/keycloak/22.0.3/changelog.json diff --git a/cache/releases/22.0.3/release-notes.html b/cache/releases/keycloak/22.0.3/release-notes.html similarity index 100% rename from cache/releases/22.0.3/release-notes.html rename to cache/releases/keycloak/22.0.3/release-notes.html diff --git a/cache/releases/22.0.4/changelog.json b/cache/releases/keycloak/22.0.4/changelog.json similarity index 100% rename from cache/releases/22.0.4/changelog.json rename to cache/releases/keycloak/22.0.4/changelog.json diff --git a/cache/releases/23.0.4/release-notes.empty b/cache/releases/keycloak/22.0.4/release-notes.empty similarity index 100% rename from cache/releases/23.0.4/release-notes.empty rename to cache/releases/keycloak/22.0.4/release-notes.empty diff --git a/cache/releases/22.0.5/changelog.json b/cache/releases/keycloak/22.0.5/changelog.json similarity index 100% rename from cache/releases/22.0.5/changelog.json rename to cache/releases/keycloak/22.0.5/changelog.json diff --git a/cache/releases/23.0.5/release-notes.empty b/cache/releases/keycloak/22.0.5/release-notes.empty similarity index 100% rename from cache/releases/23.0.5/release-notes.empty rename to cache/releases/keycloak/22.0.5/release-notes.empty diff --git a/cache/releases/23.0.0/changelog.json b/cache/releases/keycloak/23.0.0/changelog.json similarity index 100% rename from cache/releases/23.0.0/changelog.json rename to cache/releases/keycloak/23.0.0/changelog.json diff --git a/cache/releases/23.0.0/gh-release-notes.html b/cache/releases/keycloak/23.0.0/gh-release-notes.html similarity index 100% rename from cache/releases/23.0.0/gh-release-notes.html rename to cache/releases/keycloak/23.0.0/gh-release-notes.html diff --git a/cache/releases/23.0.0/release-notes.html b/cache/releases/keycloak/23.0.0/release-notes.html similarity index 100% rename from cache/releases/23.0.0/release-notes.html rename to cache/releases/keycloak/23.0.0/release-notes.html diff --git a/cache/releases/23.0.1/changelog.json b/cache/releases/keycloak/23.0.1/changelog.json similarity index 100% rename from cache/releases/23.0.1/changelog.json rename to cache/releases/keycloak/23.0.1/changelog.json diff --git a/cache/releases/23.0.1/gh-release-notes.html b/cache/releases/keycloak/23.0.1/gh-release-notes.html similarity index 100% rename from cache/releases/23.0.1/gh-release-notes.html rename to cache/releases/keycloak/23.0.1/gh-release-notes.html diff --git a/cache/releases/23.0.6/release-notes.empty b/cache/releases/keycloak/23.0.1/release-notes.empty similarity index 100% rename from cache/releases/23.0.6/release-notes.empty rename to cache/releases/keycloak/23.0.1/release-notes.empty diff --git a/cache/releases/23.0.2/changelog.json b/cache/releases/keycloak/23.0.2/changelog.json similarity index 100% rename from cache/releases/23.0.2/changelog.json rename to cache/releases/keycloak/23.0.2/changelog.json diff --git a/cache/releases/23.0.2/gh-release-notes.html b/cache/releases/keycloak/23.0.2/gh-release-notes.html similarity index 100% rename from cache/releases/23.0.2/gh-release-notes.html rename to cache/releases/keycloak/23.0.2/gh-release-notes.html diff --git a/cache/releases/23.0.2/release-notes.html b/cache/releases/keycloak/23.0.2/release-notes.html similarity index 100% rename from cache/releases/23.0.2/release-notes.html rename to cache/releases/keycloak/23.0.2/release-notes.html diff --git a/cache/releases/23.0.3/changelog.json b/cache/releases/keycloak/23.0.3/changelog.json similarity index 100% rename from cache/releases/23.0.3/changelog.json rename to cache/releases/keycloak/23.0.3/changelog.json diff --git a/cache/releases/23.0.3/gh-release-notes.html b/cache/releases/keycloak/23.0.3/gh-release-notes.html similarity index 100% rename from cache/releases/23.0.3/gh-release-notes.html rename to cache/releases/keycloak/23.0.3/gh-release-notes.html diff --git a/cache/releases/23.0.7/release-notes.empty b/cache/releases/keycloak/23.0.3/release-notes.empty similarity index 100% rename from cache/releases/23.0.7/release-notes.empty rename to cache/releases/keycloak/23.0.3/release-notes.empty diff --git a/cache/releases/23.0.4/changelog.json b/cache/releases/keycloak/23.0.4/changelog.json similarity index 100% rename from cache/releases/23.0.4/changelog.json rename to cache/releases/keycloak/23.0.4/changelog.json diff --git a/cache/releases/23.0.4/gh-release-notes.html b/cache/releases/keycloak/23.0.4/gh-release-notes.html similarity index 100% rename from cache/releases/23.0.4/gh-release-notes.html rename to cache/releases/keycloak/23.0.4/gh-release-notes.html diff --git a/cache/releases/24.0.2/release-notes.empty b/cache/releases/keycloak/23.0.4/release-notes.empty similarity index 100% rename from cache/releases/24.0.2/release-notes.empty rename to cache/releases/keycloak/23.0.4/release-notes.empty diff --git a/cache/releases/23.0.5/changelog.json b/cache/releases/keycloak/23.0.5/changelog.json similarity index 100% rename from cache/releases/23.0.5/changelog.json rename to cache/releases/keycloak/23.0.5/changelog.json diff --git a/cache/releases/23.0.5/gh-release-notes.html b/cache/releases/keycloak/23.0.5/gh-release-notes.html similarity index 100% rename from cache/releases/23.0.5/gh-release-notes.html rename to cache/releases/keycloak/23.0.5/gh-release-notes.html diff --git a/cache/releases/24.0.3/release-notes.empty b/cache/releases/keycloak/23.0.5/release-notes.empty similarity index 100% rename from cache/releases/24.0.3/release-notes.empty rename to cache/releases/keycloak/23.0.5/release-notes.empty diff --git a/cache/releases/23.0.6/changelog.json b/cache/releases/keycloak/23.0.6/changelog.json similarity index 100% rename from cache/releases/23.0.6/changelog.json rename to cache/releases/keycloak/23.0.6/changelog.json diff --git a/cache/releases/23.0.6/gh-release-notes.html b/cache/releases/keycloak/23.0.6/gh-release-notes.html similarity index 100% rename from cache/releases/23.0.6/gh-release-notes.html rename to cache/releases/keycloak/23.0.6/gh-release-notes.html diff --git a/cache/releases/25.0.1/release-notes.empty b/cache/releases/keycloak/23.0.6/release-notes.empty similarity index 100% rename from cache/releases/25.0.1/release-notes.empty rename to cache/releases/keycloak/23.0.6/release-notes.empty diff --git a/cache/releases/23.0.7/changelog.json b/cache/releases/keycloak/23.0.7/changelog.json similarity index 100% rename from cache/releases/23.0.7/changelog.json rename to cache/releases/keycloak/23.0.7/changelog.json diff --git a/cache/releases/23.0.7/gh-release-notes.html b/cache/releases/keycloak/23.0.7/gh-release-notes.html similarity index 100% rename from cache/releases/23.0.7/gh-release-notes.html rename to cache/releases/keycloak/23.0.7/gh-release-notes.html diff --git a/cache/releases/25.0.2/release-notes.empty b/cache/releases/keycloak/23.0.7/release-notes.empty similarity index 100% rename from cache/releases/25.0.2/release-notes.empty rename to cache/releases/keycloak/23.0.7/release-notes.empty diff --git a/cache/releases/24.0.0/changelog.json b/cache/releases/keycloak/24.0.0/changelog.json similarity index 100% rename from cache/releases/24.0.0/changelog.json rename to cache/releases/keycloak/24.0.0/changelog.json diff --git a/cache/releases/24.0.0/gh-release-notes.html b/cache/releases/keycloak/24.0.0/gh-release-notes.html similarity index 100% rename from cache/releases/24.0.0/gh-release-notes.html rename to cache/releases/keycloak/24.0.0/gh-release-notes.html diff --git a/cache/releases/24.0.0/release-notes.html b/cache/releases/keycloak/24.0.0/release-notes.html similarity index 100% rename from cache/releases/24.0.0/release-notes.html rename to cache/releases/keycloak/24.0.0/release-notes.html diff --git a/cache/releases/keycloak/24.0.1/changelog.json b/cache/releases/keycloak/24.0.1/changelog.json new file mode 100644 index 00000000..8878e547 --- /dev/null +++ b/cache/releases/keycloak/24.0.1/changelog.json @@ -0,0 +1 @@ +[ ] \ No newline at end of file diff --git a/cache/releases/24.0.1/gh-release-notes.html b/cache/releases/keycloak/24.0.1/gh-release-notes.html similarity index 100% rename from cache/releases/24.0.1/gh-release-notes.html rename to cache/releases/keycloak/24.0.1/gh-release-notes.html diff --git a/cache/releases/24.0.1/release-notes.html b/cache/releases/keycloak/24.0.1/release-notes.html similarity index 100% rename from cache/releases/24.0.1/release-notes.html rename to cache/releases/keycloak/24.0.1/release-notes.html diff --git a/cache/releases/24.0.2/changelog.json b/cache/releases/keycloak/24.0.2/changelog.json similarity index 100% rename from cache/releases/24.0.2/changelog.json rename to cache/releases/keycloak/24.0.2/changelog.json diff --git a/cache/releases/24.0.2/gh-release-notes.html b/cache/releases/keycloak/24.0.2/gh-release-notes.html similarity index 100% rename from cache/releases/24.0.2/gh-release-notes.html rename to cache/releases/keycloak/24.0.2/gh-release-notes.html diff --git a/cache/releases/25.0.4/release-notes.empty b/cache/releases/keycloak/24.0.2/release-notes.empty similarity index 100% rename from cache/releases/25.0.4/release-notes.empty rename to cache/releases/keycloak/24.0.2/release-notes.empty diff --git a/cache/releases/24.0.3/changelog.json b/cache/releases/keycloak/24.0.3/changelog.json similarity index 100% rename from cache/releases/24.0.3/changelog.json rename to cache/releases/keycloak/24.0.3/changelog.json diff --git a/cache/releases/24.0.3/gh-release-notes.html b/cache/releases/keycloak/24.0.3/gh-release-notes.html similarity index 100% rename from cache/releases/24.0.3/gh-release-notes.html rename to cache/releases/keycloak/24.0.3/gh-release-notes.html diff --git a/cache/releases/25.0.5/release-notes.empty b/cache/releases/keycloak/24.0.3/release-notes.empty similarity index 100% rename from cache/releases/25.0.5/release-notes.empty rename to cache/releases/keycloak/24.0.3/release-notes.empty diff --git a/cache/releases/24.0.4/changelog.json b/cache/releases/keycloak/24.0.4/changelog.json similarity index 100% rename from cache/releases/24.0.4/changelog.json rename to cache/releases/keycloak/24.0.4/changelog.json diff --git a/cache/releases/24.0.4/gh-release-notes.html b/cache/releases/keycloak/24.0.4/gh-release-notes.html similarity index 100% rename from cache/releases/24.0.4/gh-release-notes.html rename to cache/releases/keycloak/24.0.4/gh-release-notes.html diff --git a/cache/releases/24.0.4/release-notes.html b/cache/releases/keycloak/24.0.4/release-notes.html similarity index 100% rename from cache/releases/24.0.4/release-notes.html rename to cache/releases/keycloak/24.0.4/release-notes.html diff --git a/cache/releases/24.0.5/changelog.json b/cache/releases/keycloak/24.0.5/changelog.json similarity index 100% rename from cache/releases/24.0.5/changelog.json rename to cache/releases/keycloak/24.0.5/changelog.json diff --git a/cache/releases/24.0.5/gh-release-notes.html b/cache/releases/keycloak/24.0.5/gh-release-notes.html similarity index 100% rename from cache/releases/24.0.5/gh-release-notes.html rename to cache/releases/keycloak/24.0.5/gh-release-notes.html diff --git a/cache/releases/24.0.5/release-notes.html b/cache/releases/keycloak/24.0.5/release-notes.html similarity index 100% rename from cache/releases/24.0.5/release-notes.html rename to cache/releases/keycloak/24.0.5/release-notes.html diff --git a/cache/releases/25.0.0/changelog.json b/cache/releases/keycloak/25.0.0/changelog.json similarity index 100% rename from cache/releases/25.0.0/changelog.json rename to cache/releases/keycloak/25.0.0/changelog.json diff --git a/cache/releases/25.0.0/gh-release-notes.html b/cache/releases/keycloak/25.0.0/gh-release-notes.html similarity index 100% rename from cache/releases/25.0.0/gh-release-notes.html rename to cache/releases/keycloak/25.0.0/gh-release-notes.html diff --git a/cache/releases/25.0.0/release-notes.html b/cache/releases/keycloak/25.0.0/release-notes.html similarity index 100% rename from cache/releases/25.0.0/release-notes.html rename to cache/releases/keycloak/25.0.0/release-notes.html diff --git a/cache/releases/25.0.1/changelog.json b/cache/releases/keycloak/25.0.1/changelog.json similarity index 100% rename from cache/releases/25.0.1/changelog.json rename to cache/releases/keycloak/25.0.1/changelog.json diff --git a/cache/releases/25.0.1/gh-release-notes.html b/cache/releases/keycloak/25.0.1/gh-release-notes.html similarity index 100% rename from cache/releases/25.0.1/gh-release-notes.html rename to cache/releases/keycloak/25.0.1/gh-release-notes.html diff --git a/cache/releases/25.0.6/release-notes.empty b/cache/releases/keycloak/25.0.1/release-notes.empty similarity index 100% rename from cache/releases/25.0.6/release-notes.empty rename to cache/releases/keycloak/25.0.1/release-notes.empty diff --git a/cache/releases/25.0.2/changelog.json b/cache/releases/keycloak/25.0.2/changelog.json similarity index 100% rename from cache/releases/25.0.2/changelog.json rename to cache/releases/keycloak/25.0.2/changelog.json diff --git a/cache/releases/25.0.2/gh-release-notes.html b/cache/releases/keycloak/25.0.2/gh-release-notes.html similarity index 100% rename from cache/releases/25.0.2/gh-release-notes.html rename to cache/releases/keycloak/25.0.2/gh-release-notes.html diff --git a/cache/releases/26.0.1/release-notes.empty b/cache/releases/keycloak/25.0.2/release-notes.empty similarity index 100% rename from cache/releases/26.0.1/release-notes.empty rename to cache/releases/keycloak/25.0.2/release-notes.empty diff --git a/cache/releases/25.0.4/changelog.json b/cache/releases/keycloak/25.0.4/changelog.json similarity index 100% rename from cache/releases/25.0.4/changelog.json rename to cache/releases/keycloak/25.0.4/changelog.json diff --git a/cache/releases/25.0.4/gh-release-notes.html b/cache/releases/keycloak/25.0.4/gh-release-notes.html similarity index 100% rename from cache/releases/25.0.4/gh-release-notes.html rename to cache/releases/keycloak/25.0.4/gh-release-notes.html diff --git a/cache/releases/26.0.2/release-notes.empty b/cache/releases/keycloak/25.0.4/release-notes.empty similarity index 100% rename from cache/releases/26.0.2/release-notes.empty rename to cache/releases/keycloak/25.0.4/release-notes.empty diff --git a/cache/releases/25.0.5/changelog.json b/cache/releases/keycloak/25.0.5/changelog.json similarity index 100% rename from cache/releases/25.0.5/changelog.json rename to cache/releases/keycloak/25.0.5/changelog.json diff --git a/cache/releases/25.0.5/gh-release-notes.html b/cache/releases/keycloak/25.0.5/gh-release-notes.html similarity index 100% rename from cache/releases/25.0.5/gh-release-notes.html rename to cache/releases/keycloak/25.0.5/gh-release-notes.html diff --git a/cache/releases/26.0.4/release-notes.empty b/cache/releases/keycloak/25.0.5/release-notes.empty similarity index 100% rename from cache/releases/26.0.4/release-notes.empty rename to cache/releases/keycloak/25.0.5/release-notes.empty diff --git a/cache/releases/25.0.6/changelog.json b/cache/releases/keycloak/25.0.6/changelog.json similarity index 100% rename from cache/releases/25.0.6/changelog.json rename to cache/releases/keycloak/25.0.6/changelog.json diff --git a/cache/releases/25.0.6/gh-release-notes.html b/cache/releases/keycloak/25.0.6/gh-release-notes.html similarity index 100% rename from cache/releases/25.0.6/gh-release-notes.html rename to cache/releases/keycloak/25.0.6/gh-release-notes.html diff --git a/cache/releases/26.0.7/release-notes.empty b/cache/releases/keycloak/25.0.6/release-notes.empty similarity index 100% rename from cache/releases/26.0.7/release-notes.empty rename to cache/releases/keycloak/25.0.6/release-notes.empty diff --git a/cache/releases/26.0.0/changelog.json b/cache/releases/keycloak/26.0.0/changelog.json similarity index 100% rename from cache/releases/26.0.0/changelog.json rename to cache/releases/keycloak/26.0.0/changelog.json diff --git a/cache/releases/26.0.0/gh-release-notes.html b/cache/releases/keycloak/26.0.0/gh-release-notes.html similarity index 100% rename from cache/releases/26.0.0/gh-release-notes.html rename to cache/releases/keycloak/26.0.0/gh-release-notes.html diff --git a/cache/releases/26.0.0/release-notes.html b/cache/releases/keycloak/26.0.0/release-notes.html similarity index 100% rename from cache/releases/26.0.0/release-notes.html rename to cache/releases/keycloak/26.0.0/release-notes.html diff --git a/cache/releases/26.0.1/changelog.json b/cache/releases/keycloak/26.0.1/changelog.json similarity index 100% rename from cache/releases/26.0.1/changelog.json rename to cache/releases/keycloak/26.0.1/changelog.json diff --git a/cache/releases/26.0.1/gh-release-notes.html b/cache/releases/keycloak/26.0.1/gh-release-notes.html similarity index 100% rename from cache/releases/26.0.1/gh-release-notes.html rename to cache/releases/keycloak/26.0.1/gh-release-notes.html diff --git a/cache/releases/26.0.8/release-notes.empty b/cache/releases/keycloak/26.0.1/release-notes.empty similarity index 100% rename from cache/releases/26.0.8/release-notes.empty rename to cache/releases/keycloak/26.0.1/release-notes.empty diff --git a/cache/releases/26.0.2/changelog.json b/cache/releases/keycloak/26.0.2/changelog.json similarity index 100% rename from cache/releases/26.0.2/changelog.json rename to cache/releases/keycloak/26.0.2/changelog.json diff --git a/cache/releases/26.0.2/gh-release-notes.html b/cache/releases/keycloak/26.0.2/gh-release-notes.html similarity index 100% rename from cache/releases/26.0.2/gh-release-notes.html rename to cache/releases/keycloak/26.0.2/gh-release-notes.html diff --git a/cache/releases/keycloak/26.0.2/release-notes.empty b/cache/releases/keycloak/26.0.2/release-notes.empty new file mode 100644 index 00000000..e69de29b diff --git a/cache/releases/26.0.4/changelog.json b/cache/releases/keycloak/26.0.4/changelog.json similarity index 100% rename from cache/releases/26.0.4/changelog.json rename to cache/releases/keycloak/26.0.4/changelog.json diff --git a/cache/releases/26.0.4/gh-release-notes.html b/cache/releases/keycloak/26.0.4/gh-release-notes.html similarity index 100% rename from cache/releases/26.0.4/gh-release-notes.html rename to cache/releases/keycloak/26.0.4/gh-release-notes.html diff --git a/cache/releases/keycloak/26.0.4/release-notes.empty b/cache/releases/keycloak/26.0.4/release-notes.empty new file mode 100644 index 00000000..e69de29b diff --git a/cache/releases/26.0.5/changelog.json b/cache/releases/keycloak/26.0.5/changelog.json similarity index 100% rename from cache/releases/26.0.5/changelog.json rename to cache/releases/keycloak/26.0.5/changelog.json diff --git a/cache/releases/26.0.5/gh-release-notes.html b/cache/releases/keycloak/26.0.5/gh-release-notes.html similarity index 100% rename from cache/releases/26.0.5/gh-release-notes.html rename to cache/releases/keycloak/26.0.5/gh-release-notes.html diff --git a/cache/releases/26.0.5/release-notes.html b/cache/releases/keycloak/26.0.5/release-notes.html similarity index 100% rename from cache/releases/26.0.5/release-notes.html rename to cache/releases/keycloak/26.0.5/release-notes.html diff --git a/cache/releases/26.0.6/changelog.json b/cache/releases/keycloak/26.0.6/changelog.json similarity index 100% rename from cache/releases/26.0.6/changelog.json rename to cache/releases/keycloak/26.0.6/changelog.json diff --git a/cache/releases/26.0.6/gh-release-notes.html b/cache/releases/keycloak/26.0.6/gh-release-notes.html similarity index 100% rename from cache/releases/26.0.6/gh-release-notes.html rename to cache/releases/keycloak/26.0.6/gh-release-notes.html diff --git a/cache/releases/26.0.6/release-notes.html b/cache/releases/keycloak/26.0.6/release-notes.html similarity index 100% rename from cache/releases/26.0.6/release-notes.html rename to cache/releases/keycloak/26.0.6/release-notes.html diff --git a/cache/releases/26.0.7/changelog.json b/cache/releases/keycloak/26.0.7/changelog.json similarity index 100% rename from cache/releases/26.0.7/changelog.json rename to cache/releases/keycloak/26.0.7/changelog.json diff --git a/cache/releases/26.0.7/gh-release-notes.html b/cache/releases/keycloak/26.0.7/gh-release-notes.html similarity index 100% rename from cache/releases/26.0.7/gh-release-notes.html rename to cache/releases/keycloak/26.0.7/gh-release-notes.html diff --git a/cache/releases/keycloak/26.0.7/release-notes.empty b/cache/releases/keycloak/26.0.7/release-notes.empty new file mode 100644 index 00000000..e69de29b diff --git a/cache/releases/26.0.8/changelog.json b/cache/releases/keycloak/26.0.8/changelog.json similarity index 100% rename from cache/releases/26.0.8/changelog.json rename to cache/releases/keycloak/26.0.8/changelog.json diff --git a/cache/releases/26.0.8/gh-release-notes.html b/cache/releases/keycloak/26.0.8/gh-release-notes.html similarity index 100% rename from cache/releases/26.0.8/gh-release-notes.html rename to cache/releases/keycloak/26.0.8/gh-release-notes.html diff --git a/cache/releases/keycloak/26.0.8/release-notes.empty b/cache/releases/keycloak/26.0.8/release-notes.empty new file mode 100644 index 00000000..e69de29b diff --git a/cache/releases/26.1.0/changelog.json b/cache/releases/keycloak/26.1.0/changelog.json similarity index 100% rename from cache/releases/26.1.0/changelog.json rename to cache/releases/keycloak/26.1.0/changelog.json diff --git a/cache/releases/26.1.0/gh-release-notes.html b/cache/releases/keycloak/26.1.0/gh-release-notes.html similarity index 100% rename from cache/releases/26.1.0/gh-release-notes.html rename to cache/releases/keycloak/26.1.0/gh-release-notes.html diff --git a/cache/releases/26.1.0/release-notes.html b/cache/releases/keycloak/26.1.0/release-notes.html similarity index 100% rename from cache/releases/26.1.0/release-notes.html rename to cache/releases/keycloak/26.1.0/release-notes.html diff --git a/releases.yaml b/releases.yaml new file mode 100644 index 00000000..dd16f5b7 --- /dev/null +++ b/releases.yaml @@ -0,0 +1,15 @@ +sources: + - id: keycloak + productName: Keycloak + repo: keycloak/keycloak + githubReleaseNotesFrom: 23.0.0 + releaseNotes: release/${version.getVersionShorter()}/docs/documentation/release_notes/topics/${version.getVersion()?replace(".", "_")}.adoc + attributeSources: + - release/${version.getVersionShorter()}/docs/documentation/topics/templates/document-attributes.adoc + - ${version.getVersion()}/docs/documentation/topics/templates/document-attributes.adoc + migrationGuidePath: docs/latest/upgrading/index.html#migration-changes + - id: keycloak-client + productName: Keycloak Client Libraries + repo: keycloak/keycloak-client + releaseNotes: main/docs/release-notes/${version.getVersion()?replace(".", "_")}.adoc + migrationGuidePath: securing-apps/upgrading diff --git a/src/main/java/org/keycloak/webbuilder/Blogs.java b/src/main/java/org/keycloak/webbuilder/Blogs.java index 920d9a4e..00d4cd21 100644 --- a/src/main/java/org/keycloak/webbuilder/Blogs.java +++ b/src/main/java/org/keycloak/webbuilder/Blogs.java @@ -1,8 +1,5 @@ package org.keycloak.webbuilder; -import org.keycloak.webbuilder.utils.AsciiDoctor; -import org.keycloak.webbuilder.utils.FreeMarker; - import java.io.File; import java.util.*; @@ -17,15 +14,9 @@ public class Blogs extends LinkedList { OLD_BLOG.add(Calendar.MONTH, -12); } - private FreeMarker freeMarker; - private AsciiDoctor asciiDoctor; - - public Blogs(File blogDir, Versions versions, Config config, FreeMarker freeMarker, AsciiDoctor asciiDoctor) throws Exception { - this.freeMarker = freeMarker; - this.asciiDoctor = asciiDoctor; - + public Blogs(Context context) throws Exception { List blogFiles = new LinkedList<>(); - for (File d : blogDir.listFiles((dir, name) -> name.matches("\\d{4}"))) { + for (File d : context.getBlogDir().listFiles((dir, name) -> name.matches("\\d{4}"))) { for (File f: d.listFiles((dir, name) -> name.endsWith(".ftl") || name.endsWith(".adoc"))) { blogFiles.add(f); } @@ -34,7 +25,7 @@ public Blogs(File blogDir, Versions versions, Config config, FreeMarker freeMark if (blogFiles != null) { for (File f : blogFiles) { BlogFormat format = f.getName().endsWith(".ftl") ? BlogFormat.FREEMARKER : BlogFormat.ASCIIDOC; - Map attributes = BlogFormat.FREEMARKER.equals(format) ? freeMarker.parseAttributes(f) : asciiDoctor.parseAttributes(f); + Map attributes = BlogFormat.FREEMARKER.equals(format) ? context.freeMarker().parseAttributes(f) : context.asciiDoctor().parseAttributes(f); Date date = attributes.containsKey("date") ? Constants.DATE_IN.parse(attributes.get("date").toString()) : null; boolean publish = attributes.containsKey("publish") ? Boolean.parseBoolean((String) attributes.get("publish")) : false; @@ -58,16 +49,32 @@ public Blogs(File blogDir, Versions versions, Config config, FreeMarker freeMark false, "blog/" + f.getParentFile().getName() + "/" + f.getName()); - if (blog.isPublish() || !config.isPublish()) { + if (blog.isPublish() || !context.config().isPublish()) { add(blog); } } } - for (Versions.Version v : versions) { - Blog blog = new Blog(BlogFormat.FREEMARKER, v.getDate(), "keycloak-" + v.getVersion().replace(".", "") + "-released", "Keycloak " + v.getVersion() + " released", null, null, "Keycloak Release", true, true, "templates/blog-release-" + v.getBlogTemplate() + ".ftl"); - blog.getMap().put("version", v); - add(blog); + ReleasesMetadata metadata = context.getReleasesMetadata(); + + for (ReleasesMetadata.ReleaseSource source : metadata.getSources()) { + for (Versions.Version v : context.versionsFor(source.getId())) { + Blog blog = new Blog( + BlogFormat.FREEMARKER, + v.getDate(), + source.getId() + "-" + v.getVersion().replace(".", "") + "-released", + source.getProductName() + " " + v.getVersion() + " released", + null, + null, + source.getProductName() + " Release", + true, + true, + "templates/blog-release-" + v.getBlogTemplate() + ".ftl" + ); + blog.getMap().put("version", v); + blog.getMap().put("source", source); + add(blog); + } } sort(Comparator.comparing(Blog::getDate).reversed()); diff --git a/src/main/java/org/keycloak/webbuilder/Context.java b/src/main/java/org/keycloak/webbuilder/Context.java index 8519fb51..596805f5 100644 --- a/src/main/java/org/keycloak/webbuilder/Context.java +++ b/src/main/java/org/keycloak/webbuilder/Context.java @@ -6,6 +6,7 @@ import org.keycloak.webbuilder.utils.YamlParser; import java.io.File; +import java.util.LinkedList; public class Context { @@ -16,6 +17,8 @@ public class Context { private final File resourcesDir; private final File staticDir; private final File versionsDir; + private final File keycloakVersionsDir; + private final File keycloakClientVersionsDir; private final File extensionsDir; private final File newsDir; private final File blogDir; @@ -25,11 +28,13 @@ public class Context { private final File cacheDir; private Config config; - private Versions versions; + private Versions keycloakVersions; + private Versions keycloakClientVersions; private Extensions extensions; private Blogs blogs; private Guides guides; private GuidesMetadata guidesMetadata; + private ReleasesMetadata releasesMetadata; private News news; private FreeMarker freeMarker; @@ -45,6 +50,8 @@ public Context(File rootDir) throws Exception { resourcesDir = new File(webSrcDir, "resources"); staticDir = new File(webSrcDir, "static"); versionsDir = new File(webSrcDir, "versions"); + keycloakVersionsDir = new File(versionsDir, "keycloak"); + keycloakClientVersionsDir = new File(versionsDir, "keycloak-client"); extensionsDir = new File(webSrcDir, "extensions"); newsDir = new File(webSrcDir, "news"); blogDir = new File(webSrcDir, "blog"); @@ -60,10 +67,12 @@ public void init() throws Exception { config = loadConfig(); links = new Links(config); - versions = new Versions(versionsDir); - extensions = new Extensions(extensionsDir); - blogs = new Blogs(blogDir, versions, config, freeMarker, asciiDoctor); + keycloakVersions = new Versions(keycloakVersionsDir); + keycloakClientVersions = new Versions(keycloakClientVersionsDir); guidesMetadata = new YamlParser().read(new File(getWebSrcDir(),"/guides.yaml"), GuidesMetadata.class); + releasesMetadata = new YamlParser().read(new File(getWebSrcDir(),"/releases.yaml"), ReleasesMetadata.class); + extensions = new Extensions(extensionsDir); + blogs = new Blogs(this); guides = new Guides(guidesMetadata, tmpDir, getWebSrcDir(), asciiDoctor); news = new News(newsDir, blogs, config); @@ -92,7 +101,22 @@ public Config config() { } public Versions versions() { - return versions; + return keycloakVersions; + } + + public LinkedList versionsFor(String id) throws Exception { + switch (id) { + case "keycloak": + return versions(); + case "keycloak-client": + return clientVersions(); + default: + throw new Exception(String.format("No versions available for %s", id)); + } + } + + public Versions clientVersions() { + return keycloakClientVersions; } public Extensions extensions() { @@ -159,6 +183,10 @@ public GuidesMetadata getGuidesMetadata() { return guidesMetadata; } + public ReleasesMetadata getReleasesMetadata() { + return releasesMetadata; + } + public File getGuidesDir() { return guidesDir; } diff --git a/src/main/java/org/keycloak/webbuilder/ReleasesMetadata.java b/src/main/java/org/keycloak/webbuilder/ReleasesMetadata.java new file mode 100644 index 00000000..a93090c5 --- /dev/null +++ b/src/main/java/org/keycloak/webbuilder/ReleasesMetadata.java @@ -0,0 +1,87 @@ +package org.keycloak.webbuilder; + +import java.util.List; + +public class ReleasesMetadata { + public final static String MAIN_PROJECT_ID = "keycloak"; + + public List sources; + + public List getSources() { + return sources; + } + + public void setSources(List sources) { + this.sources = sources; + } + + public static class ReleaseSource { + private String id; + private String productName; + private String repo; + private String githubReleaseNotesFrom; + private String releaseNotes; + private List attributeSources; + private String migrationGuidePath; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getProductName() { + return this.productName; + } + + public void setProductName(String productName) { + this.productName = productName; + } + + public String getRepo() { + return repo; + } + + public void setRepo(String repo) { + this.repo = repo; + } + + public String getGithubReleaseNotesFrom() { + return githubReleaseNotesFrom; + } + + public void setGithubReleaseNotesFrom(String githubReleaseNotesFrom) { + this.githubReleaseNotesFrom = githubReleaseNotesFrom; + } + + public String getReleaseNotes() { + return releaseNotes; + } + + public void setReleaseNotes(String releaseNotes) { + this.releaseNotes = releaseNotes; + } + + public List getAttributeSources() { + return attributeSources; + } + + public void setAttributeSources(List attributeSources) { + this.attributeSources = attributeSources; + } + + public String getMigrationGuidePath() { + return migrationGuidePath; + } + + public void setMigrationGuidePath(String migrationGuidePath) { + this.migrationGuidePath = migrationGuidePath; + } + + public boolean isMainProject() { + return getId().equals(MAIN_PROJECT_ID); + } + } +} diff --git a/src/main/java/org/keycloak/webbuilder/builders/ChangelogBuilder.java b/src/main/java/org/keycloak/webbuilder/builders/ChangelogBuilder.java index 0d4e9f4b..78216df6 100644 --- a/src/main/java/org/keycloak/webbuilder/builders/ChangelogBuilder.java +++ b/src/main/java/org/keycloak/webbuilder/builders/ChangelogBuilder.java @@ -1,6 +1,7 @@ package org.keycloak.webbuilder.builders; import com.fasterxml.jackson.databind.ObjectMapper; +import org.keycloak.webbuilder.ReleasesMetadata; import org.keycloak.webbuilder.Versions; import org.keycloak.webbuilder.misc.ChangeLogEntry; import org.keycloak.webbuilder.utils.JsonParser; @@ -20,11 +21,20 @@ import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; public class ChangelogBuilder extends AbstractBuilder { @Override protected void build() throws Exception { + ReleasesMetadata metadata = context.getReleasesMetadata(); + + for (ReleasesMetadata.ReleaseSource source : metadata.getSources()) { + buildForSource(source); + } + } + + private void buildForSource(ReleasesMetadata.ReleaseSource source) throws Exception { String token = getGitHubToken(); if (token == null) { printStep("error", "Failed to get token for GitHub APIs"); @@ -41,9 +51,10 @@ protected void build() throws Exception { })) .withOAuthToken(token).build(); - File releasesCache = new File(context.getCacheDir(), "releases"); + File releasesCache = new File(context.getCacheDir(), "releases/" + source.getId()); + List versions = context.versionsFor(source.getId()); - for (Versions.Version v : context.versions()) { + for (Versions.Version v : versions) { File releaseCacheDir = new File(releasesCache, v.getVersion()); releaseCacheDir.mkdirs(); @@ -54,7 +65,7 @@ protected void build() throws Exception { if (v.getBlogTemplate() >= 3) { for (ChangeLogEntry e : changeLog.getAll()) { - if (!e.getRepository().equals("keycloak")) { + if (!e.getRepository().equals(ReleasesMetadata.MAIN_PROJECT_ID)) { String area = e.getRepository().replaceAll("keycloak-", ""); e.setArea(area); } @@ -62,13 +73,37 @@ protected void build() throws Exception { } v.setChanges(changeLog); - printStep("exists", v.getVersion()); + printStep("exists", source.getId() + " " + v.getVersion()); } else { if (v.getBlogTemplate() >= 2) { Map ghIssues = new HashMap<>(); + List queries = new LinkedList<>(); + + if (source.isMainProject()) { + // Query all Keycloak projects only for the main project. + queries.add("user:keycloak"); + + // For the main project query all repositories except the ones explicitly listed as separately versioned. + List ignoredRepos = context.getReleasesMetadata().getSources() + .stream() + .filter(s -> !s.isMainProject()) + .map(s -> "-repo:" + s.getRepo()) + .collect(Collectors.toList()); + + queries.addAll(ignoredRepos); + } else { + // Only query the currently active repo if we're not targeting the main project. + // The main project is the only one that can pull in release notes from other repos. + queries.add("repo:" + source.getRepo()); + } + + queries.add("is:issue"); + queries.add("is:closed"); - gh.searchIssues().q("user:keycloak milestone:" + v.getVersion() + " is:closed is:issue").isClosed().list().forEach(i -> ghIssues.put(i.getNumber(), i)); - gh.searchIssues().q("user:keycloak label:release/" + v.getVersion() + " is:closed is:issue").isClosed().list().forEach(i -> ghIssues.put(i.getNumber(), i)); + String baseQuery = String.join(" ", queries); + + gh.searchIssues().q(baseQuery + " milestone:" + v.getVersion()).list().forEach(i -> ghIssues.put(i.getNumber(), i)); + gh.searchIssues().q(baseQuery + " label:release/" + v.getVersion()).list().forEach(i -> ghIssues.put(i.getNumber(), i)); List changes = new LinkedList<>(); @@ -103,7 +138,7 @@ protected void build() throws Exception { new ObjectMapper().writerWithDefaultPrettyPrinter().writeValue(changeLogFile, changes); - printStep("loaded", v.getVersion()); + printStep("loaded", source.getId() + " " + v.getVersion()); } } } @@ -113,7 +148,6 @@ protected void build() throws Exception { } } - private String getGitHubToken() { String token = System.getenv("GITHUB_TOKEN"); if (token != null) { diff --git a/src/main/java/org/keycloak/webbuilder/builders/GitHubReleaseNotesBuilder.java b/src/main/java/org/keycloak/webbuilder/builders/GitHubReleaseNotesBuilder.java index 82b69a56..5048ba4f 100644 --- a/src/main/java/org/keycloak/webbuilder/builders/GitHubReleaseNotesBuilder.java +++ b/src/main/java/org/keycloak/webbuilder/builders/GitHubReleaseNotesBuilder.java @@ -1,26 +1,36 @@ package org.keycloak.webbuilder.builders; +import org.keycloak.webbuilder.ReleasesMetadata; import org.keycloak.webbuilder.Versions; import java.io.File; -import java.io.IOException; import java.util.HashMap; +import java.util.List; import java.util.Map; public class GitHubReleaseNotesBuilder extends AbstractBuilder { - private String ghReleaseFrom = "23.0.0"; - @Override protected String getTitle() { return "GitHub Release Notes"; } - public void build() throws IOException { - File releasesCache = new File(context.getCacheDir(), "releases"); + public void build() throws Exception { + ReleasesMetadata metadata = context.getReleasesMetadata(); + + for (ReleasesMetadata.ReleaseSource source : metadata.getSources()) { + buildForSource(source); + } + } + + private void buildForSource(ReleasesMetadata.ReleaseSource source) throws Exception { + File releasesCache = new File(context.getCacheDir(), "releases/" + source.getId()); + List versions = context.versionsFor(source.getId()); + + for (Versions.Version v : versions) { + String releaseNotesFrom = source.getGithubReleaseNotesFrom(); - for (Versions.Version v : context.versions()) { - if (v.compareTo(ghReleaseFrom) <= 0) { + if (releaseNotesFrom == null || v.compareTo(releaseNotesFrom) <= 0) { File releaseCacheDir = new File(releasesCache, v.getVersion()); releaseCacheDir.mkdirs(); @@ -29,12 +39,13 @@ public void build() throws IOException { if (!ghReleaseNotes.isFile()) { Map attributes = new HashMap<>(); attributes.put("version", v); + attributes.put("source", source); try { context.freeMarker().writeFile(attributes, "templates/gh-release-3.ftl", ghReleaseNotes.getParentFile(), ghReleaseNotes.getName()); - printStep("created", v.getVersion()); + printStep("created", source.getId() + " " + v.getVersion()); } catch (Exception e) { - printStep("failed", e.getMessage()); + printStep("failed", source.getId() + " " + e.getMessage()); } } } diff --git a/src/main/java/org/keycloak/webbuilder/builders/ReleaseNotesBuilder.java b/src/main/java/org/keycloak/webbuilder/builders/ReleaseNotesBuilder.java index 4846dfa9..d3ade6b1 100644 --- a/src/main/java/org/keycloak/webbuilder/builders/ReleaseNotesBuilder.java +++ b/src/main/java/org/keycloak/webbuilder/builders/ReleaseNotesBuilder.java @@ -1,30 +1,39 @@ package org.keycloak.webbuilder.builders; +import freemarker.template.Configuration; +import freemarker.template.Template; +import org.keycloak.webbuilder.ReleasesMetadata; import org.keycloak.webbuilder.Versions; import java.io.File; import java.io.FileNotFoundException; -import java.io.IOException; +import java.io.StringWriter; import java.net.URL; import java.util.HashMap; +import java.util.List; import java.util.Map; public class ReleaseNotesBuilder extends AbstractBuilder { - private static final String DOCUMENT_ATTRIBUTES_TAG_URL = "https://raw.githubusercontent.com/keycloak/keycloak/%s/docs/documentation/topics/templates/document-attributes.adoc"; - private static final String DOCUMENT_ATTRIBUTES_BRANCH_URL = "https://raw.githubusercontent.com/keycloak/keycloak/release/%s/docs/documentation/topics/templates/document-attributes.adoc"; - - private static final String RELEASE_NOTES_URL = "https://raw.githubusercontent.com/keycloak/keycloak/release/%s/docs/documentation/release_notes/topics/%s.adoc"; - @Override protected String getTitle() { return "Release Notes"; } - public void build() throws IOException { - File releasesCache = new File(context.getCacheDir(), "releases"); + @Override + protected void build() throws Exception { + ReleasesMetadata metadata = context.getReleasesMetadata(); + + for (ReleasesMetadata.ReleaseSource source : metadata.getSources()) { + buildForSource(source); + } + } + + private void buildForSource(ReleasesMetadata.ReleaseSource source) throws Exception { + File releasesCache = new File(context.getCacheDir(), "releases/" + source.getId()); + List versions = context.versionsFor(source.getId()); - for (Versions.Version v : context.versions()) { + for (Versions.Version v : versions) { try { File releaseCacheDir = new File(releasesCache, v.getVersion()); releaseCacheDir.mkdirs(); @@ -33,9 +42,9 @@ public void build() throws IOException { File releaseNotesMissingFile = new File(releaseCacheDir, "release-notes.empty"); if (releaseNotesFile.isFile()) { - printStep("exists", v.getVersion()); + printStep("exists", source.getId() + " " + v.getVersion()); } else if (releaseNotesMissingFile.isFile()) { - printStep("missing", v.getVersion()); + printStep("missing", source.getId() + " " + v.getVersion()); } else { Map attributes = new HashMap<>(); @@ -43,31 +52,47 @@ public void build() throws IOException { attributes.put("leveloffset", "2"); attributes.put("fragment", "yes"); - Map branchAttributes = context.asciiDoctor().parseAttributes(new URL(String.format(DOCUMENT_ATTRIBUTES_BRANCH_URL, v.getVersionShorter())), attributes); - Map tagAttributes = context.asciiDoctor().parseAttributes(new URL(String.format(DOCUMENT_ATTRIBUTES_TAG_URL, v.getVersion())), attributes); + List attributeSources = source.getAttributeSources(); - attributes.putAll(branchAttributes); - attributes.putAll(tagAttributes); + if (attributeSources != null) { + for (String attributeSource : source.getAttributeSources()) { + URL templateUrl = buildTemplateUrl(source, v, attributeSource); + Map templateAttributes = context.asciiDoctor().parseAttributes(templateUrl, attributes); + attributes.putAll(templateAttributes); + } + } - String releaseNotesUrl = String.format(RELEASE_NOTES_URL, v.getVersionShorter(), v.getVersion().replace(".", "_")); - URL url = new URL(releaseNotesUrl); + URL releaseNotesURL = buildTemplateUrl(source, v, source.getReleaseNotes()); try { - context.asciiDoctor().writeFile(attributes, url, releaseNotesFile.getParentFile(), releaseNotesFile.getName()); - printStep("created", v.getVersion()); + context.asciiDoctor().writeFile(attributes, releaseNotesURL, releaseNotesFile.getParentFile(), releaseNotesFile.getName()); + printStep("created", source.getId() + " " + v.getVersion()); } catch (FileNotFoundException e) { - printStep("notfound", v.getVersion()); + printStep("notfound", source.getId() + " " + v.getVersion()); releaseNotesMissingFile.createNewFile(); } } if (releaseNotesFile.isFile()) { - v.setReleaseNotes("cache/releases/" + v.getVersion() + "/release-notes.html"); + v.setReleaseNotes("cache/releases/" + source.getId() + "/" + v.getVersion() + "/release-notes.html"); } } catch (Exception e) { - printStep("error", v.getVersion() + " (" + e.getClass().getSimpleName() + ")"); + printStep("error", source.getId() + " " + v.getVersion() + " (" + e.getClass().getSimpleName() + ")"); } } } + private URL buildTemplateUrl(ReleasesMetadata.ReleaseSource source, Versions.Version version, String pathTemplate) throws Exception { + Configuration configuration = new Configuration(Configuration.VERSION_2_3_31); + Template template = new Template("template", pathTemplate, configuration); + StringWriter writer = new StringWriter(); + Map attributes = new HashMap<>(); + + attributes.put("version", version); + template.process(attributes, writer); + + String path = writer.toString(); + + return new URL(String.format("https://raw.githubusercontent.com/%s/%s", source.getRepo(), path)); + } } diff --git a/templates/blog-release-3.ftl b/templates/blog-release-3.ftl index 46a32f5d..e27c31b7 100644 --- a/templates/blog-release-3.ftl +++ b/templates/blog-release-3.ftl @@ -1,4 +1,4 @@ -

To download the release go to Keycloak downloads.

+<#if source.isMainProject()>

To download the release go to Keycloak downloads.

<#if version.releaseNotes??>

Highlights

@@ -6,7 +6,7 @@

Upgrading

-

Before upgrading refer to the migration guide for a complete list of changes.

+

Before upgrading refer to the migration guide for a complete list of changes.

<#if version.changes?? && version.changes.all?has_content>

All resolved issues

diff --git a/templates/gh-release-3.ftl b/templates/gh-release-3.ftl index ad98c42c..757ab31d 100644 --- a/templates/gh-release-3.ftl +++ b/templates/gh-release-3.ftl @@ -5,7 +5,7 @@

Upgrading

-

Before upgrading refer to the migration guide for a complete list of changes.

+

Before upgrading refer to the migration guide for a complete list of changes.

<#if version.changes?? && version.changes.all?has_content>

All resolved issues

diff --git a/templates/rss.ftl b/templates/rss.ftl index 1bd524f3..e1c9453c 100644 --- a/templates/rss.ftl +++ b/templates/rss.ftl @@ -13,6 +13,9 @@ Keycloak/SSO/Identity and Access Management <#list blogs as blog> <#assign description> + <#list blog.getMap() as key, value> + <@"<#assign ${key}=value>"?interpret /> + <#include "../${blog.template}"> diff --git a/version-template-client.json b/version-template-client.json new file mode 100644 index 00000000..f4d6b890 --- /dev/null +++ b/version-template-client.json @@ -0,0 +1,5 @@ +{ + "date": "DATE", + "version": "VERSION", + "blogTemplate": 3 +} diff --git a/versions/keycloak-client/26.0.0.json b/versions/keycloak-client/26.0.0.json new file mode 100644 index 00000000..89425ec4 --- /dev/null +++ b/versions/keycloak-client/26.0.0.json @@ -0,0 +1,5 @@ +{ + "date": "2024-10-04", + "version": "26.0.0", + "blogTemplate": 3 +} diff --git a/versions/keycloak-client/26.0.1.json b/versions/keycloak-client/26.0.1.json new file mode 100644 index 00000000..dcafb4c7 --- /dev/null +++ b/versions/keycloak-client/26.0.1.json @@ -0,0 +1,5 @@ +{ + "date": "2024-10-22", + "version": "26.0.1", + "blogTemplate": 3 +} diff --git a/versions/keycloak-client/26.0.2.json b/versions/keycloak-client/26.0.2.json new file mode 100644 index 00000000..5f6f8d50 --- /dev/null +++ b/versions/keycloak-client/26.0.2.json @@ -0,0 +1,5 @@ +{ + "date": "2024-10-31", + "version": "26.0.2", + "blogTemplate": 3 +} diff --git a/versions/keycloak-client/26.0.3.json b/versions/keycloak-client/26.0.3.json new file mode 100644 index 00000000..c03b4ca4 --- /dev/null +++ b/versions/keycloak-client/26.0.3.json @@ -0,0 +1,5 @@ +{ + "date": "2024-11-19", + "version": "26.0.3", + "blogTemplate": 3 +} diff --git a/versions/keycloak-client/26.0.4.json b/versions/keycloak-client/26.0.4.json new file mode 100644 index 00000000..d5ffa217 --- /dev/null +++ b/versions/keycloak-client/26.0.4.json @@ -0,0 +1,6 @@ +{ + "date": "2025-01-17", + "version": "26.0.4", + "blogTemplate": 3 + } + \ No newline at end of file diff --git a/versions/21.0.0.json b/versions/keycloak/21.0.0.json similarity index 100% rename from versions/21.0.0.json rename to versions/keycloak/21.0.0.json diff --git a/versions/21.0.1.json b/versions/keycloak/21.0.1.json similarity index 100% rename from versions/21.0.1.json rename to versions/keycloak/21.0.1.json diff --git a/versions/21.0.2.json b/versions/keycloak/21.0.2.json similarity index 100% rename from versions/21.0.2.json rename to versions/keycloak/21.0.2.json diff --git a/versions/21.1.0.json b/versions/keycloak/21.1.0.json similarity index 100% rename from versions/21.1.0.json rename to versions/keycloak/21.1.0.json diff --git a/versions/21.1.1.json b/versions/keycloak/21.1.1.json similarity index 100% rename from versions/21.1.1.json rename to versions/keycloak/21.1.1.json diff --git a/versions/21.1.2.json b/versions/keycloak/21.1.2.json similarity index 100% rename from versions/21.1.2.json rename to versions/keycloak/21.1.2.json diff --git a/versions/22.0.0.json b/versions/keycloak/22.0.0.json similarity index 100% rename from versions/22.0.0.json rename to versions/keycloak/22.0.0.json diff --git a/versions/22.0.1.json b/versions/keycloak/22.0.1.json similarity index 100% rename from versions/22.0.1.json rename to versions/keycloak/22.0.1.json diff --git a/versions/22.0.2.json b/versions/keycloak/22.0.2.json similarity index 100% rename from versions/22.0.2.json rename to versions/keycloak/22.0.2.json diff --git a/versions/22.0.3.json b/versions/keycloak/22.0.3.json similarity index 100% rename from versions/22.0.3.json rename to versions/keycloak/22.0.3.json diff --git a/versions/22.0.4.json b/versions/keycloak/22.0.4.json similarity index 100% rename from versions/22.0.4.json rename to versions/keycloak/22.0.4.json diff --git a/versions/22.0.5.json b/versions/keycloak/22.0.5.json similarity index 100% rename from versions/22.0.5.json rename to versions/keycloak/22.0.5.json diff --git a/versions/23.0.0.json b/versions/keycloak/23.0.0.json similarity index 100% rename from versions/23.0.0.json rename to versions/keycloak/23.0.0.json diff --git a/versions/23.0.1.json b/versions/keycloak/23.0.1.json similarity index 100% rename from versions/23.0.1.json rename to versions/keycloak/23.0.1.json diff --git a/versions/23.0.2.json b/versions/keycloak/23.0.2.json similarity index 100% rename from versions/23.0.2.json rename to versions/keycloak/23.0.2.json diff --git a/versions/23.0.3.json b/versions/keycloak/23.0.3.json similarity index 100% rename from versions/23.0.3.json rename to versions/keycloak/23.0.3.json diff --git a/versions/23.0.4.json b/versions/keycloak/23.0.4.json similarity index 100% rename from versions/23.0.4.json rename to versions/keycloak/23.0.4.json diff --git a/versions/23.0.5.json b/versions/keycloak/23.0.5.json similarity index 100% rename from versions/23.0.5.json rename to versions/keycloak/23.0.5.json diff --git a/versions/23.0.6.json b/versions/keycloak/23.0.6.json similarity index 100% rename from versions/23.0.6.json rename to versions/keycloak/23.0.6.json diff --git a/versions/23.0.7.json b/versions/keycloak/23.0.7.json similarity index 100% rename from versions/23.0.7.json rename to versions/keycloak/23.0.7.json diff --git a/versions/24.0.0.json b/versions/keycloak/24.0.0.json similarity index 100% rename from versions/24.0.0.json rename to versions/keycloak/24.0.0.json diff --git a/versions/24.0.1.json b/versions/keycloak/24.0.1.json similarity index 100% rename from versions/24.0.1.json rename to versions/keycloak/24.0.1.json diff --git a/versions/24.0.2.json b/versions/keycloak/24.0.2.json similarity index 100% rename from versions/24.0.2.json rename to versions/keycloak/24.0.2.json diff --git a/versions/24.0.3.json b/versions/keycloak/24.0.3.json similarity index 100% rename from versions/24.0.3.json rename to versions/keycloak/24.0.3.json diff --git a/versions/24.0.4.json b/versions/keycloak/24.0.4.json similarity index 100% rename from versions/24.0.4.json rename to versions/keycloak/24.0.4.json diff --git a/versions/24.0.5.json b/versions/keycloak/24.0.5.json similarity index 100% rename from versions/24.0.5.json rename to versions/keycloak/24.0.5.json diff --git a/versions/25.0.0.json b/versions/keycloak/25.0.0.json similarity index 100% rename from versions/25.0.0.json rename to versions/keycloak/25.0.0.json diff --git a/versions/25.0.1.json b/versions/keycloak/25.0.1.json similarity index 100% rename from versions/25.0.1.json rename to versions/keycloak/25.0.1.json diff --git a/versions/25.0.2.json b/versions/keycloak/25.0.2.json similarity index 100% rename from versions/25.0.2.json rename to versions/keycloak/25.0.2.json diff --git a/versions/25.0.4.json b/versions/keycloak/25.0.4.json similarity index 100% rename from versions/25.0.4.json rename to versions/keycloak/25.0.4.json diff --git a/versions/25.0.5.json b/versions/keycloak/25.0.5.json similarity index 100% rename from versions/25.0.5.json rename to versions/keycloak/25.0.5.json diff --git a/versions/25.0.6.json b/versions/keycloak/25.0.6.json similarity index 100% rename from versions/25.0.6.json rename to versions/keycloak/25.0.6.json diff --git a/versions/26.0.0.json b/versions/keycloak/26.0.0.json similarity index 100% rename from versions/26.0.0.json rename to versions/keycloak/26.0.0.json diff --git a/versions/26.0.1.json b/versions/keycloak/26.0.1.json similarity index 100% rename from versions/26.0.1.json rename to versions/keycloak/26.0.1.json diff --git a/versions/26.0.2.json b/versions/keycloak/26.0.2.json similarity index 100% rename from versions/26.0.2.json rename to versions/keycloak/26.0.2.json diff --git a/versions/26.0.4.json b/versions/keycloak/26.0.4.json similarity index 100% rename from versions/26.0.4.json rename to versions/keycloak/26.0.4.json diff --git a/versions/26.0.5.json b/versions/keycloak/26.0.5.json similarity index 100% rename from versions/26.0.5.json rename to versions/keycloak/26.0.5.json diff --git a/versions/26.0.6.json b/versions/keycloak/26.0.6.json similarity index 100% rename from versions/26.0.6.json rename to versions/keycloak/26.0.6.json diff --git a/versions/26.0.7.json b/versions/keycloak/26.0.7.json similarity index 100% rename from versions/26.0.7.json rename to versions/keycloak/26.0.7.json diff --git a/versions/26.0.8.json b/versions/keycloak/26.0.8.json similarity index 100% rename from versions/26.0.8.json rename to versions/keycloak/26.0.8.json diff --git a/versions/26.1.0.json b/versions/keycloak/26.1.0.json similarity index 100% rename from versions/26.1.0.json rename to versions/keycloak/26.1.0.json