diff --git a/cache/changelogs/changelog-21_0_0.json b/cache/releases/21.0.0/changelog.json similarity index 99% rename from cache/changelogs/changelog-21_0_0.json rename to cache/releases/21.0.0/changelog.json index a24b56f7..464c1247 100644 --- a/cache/changelogs/changelog-21_0_0.json +++ b/cache/releases/21.0.0/changelog.json @@ -2441,13 +2441,6 @@ "kind" : "bug", "area" : "admin/client-js", "url" : "https://github.com/keycloak/keycloak/issues/16899" -}, { - "number" : 16900, - "repository" : "keycloak", - "title" : "Documentation for handling errors", - "kind" : "enhancement", - "area" : "admin/client-js", - "url" : "https://github.com/keycloak/keycloak/issues/16900" }, { "number" : 16901, "repository" : "keycloak", diff --git a/cache/releases/21.0.0/release-notes.empty b/cache/releases/21.0.0/release-notes.empty new file mode 100644 index 00000000..e69de29b diff --git a/cache/changelogs/changelog-21_0_1.json b/cache/releases/21.0.1/changelog.json similarity index 100% rename from cache/changelogs/changelog-21_0_1.json rename to cache/releases/21.0.1/changelog.json diff --git a/cache/releases/21.0.1/release-notes.empty b/cache/releases/21.0.1/release-notes.empty new file mode 100644 index 00000000..e69de29b diff --git a/cache/changelogs/changelog-21_0_2.json b/cache/releases/21.0.2/changelog.json similarity index 100% rename from cache/changelogs/changelog-21_0_2.json rename to cache/releases/21.0.2/changelog.json diff --git a/cache/releases/21.0.2/release-notes.empty b/cache/releases/21.0.2/release-notes.empty new file mode 100644 index 00000000..e69de29b diff --git a/cache/changelogs/changelog-21_1_0.json b/cache/releases/21.1.0/changelog.json similarity index 98% rename from cache/changelogs/changelog-21_1_0.json rename to cache/releases/21.1.0/changelog.json index a55932be..c59bae6e 100644 --- a/cache/changelogs/changelog-21_1_0.json +++ b/cache/releases/21.1.0/changelog.json @@ -243,6 +243,13 @@ "kind" : "task", "area" : null, "url" : "https://github.com/keycloak/keycloak/issues/16730" +}, { + "number" : 16782, + "repository" : "keycloak", + "title" : "CVE-2020-29582 - Information Exposure vulnerability in org.jetbrains.kotlin:kotlin-stdlib", + "kind" : "cve", + "area" : "dependencies", + "url" : "https://github.com/keycloak/keycloak/issues/16782" }, { "number" : 16844, "repository" : "keycloak", diff --git a/cache/releases/21.1.0/release-notes.html b/cache/releases/21.1.0/release-notes.html new file mode 100644 index 00000000..b250af98 --- /dev/null +++ b/cache/releases/21.1.0/release-notes.html @@ -0,0 +1,78 @@ +
+

Monorepo

+
+

In the past Keycloak was maintained across multiple GitHub repositories:

+
+
+ +
+
+

Having multiple repositories introduced a lot of complexity and toil. For example frequently multiple pull requests had to be sent +to different repositories for a single change.

+
+
+

To simplify things we have now migrated everything into the main repository.

+
+
+
+

FIPS 140-2 support

+
+

FIPS 140-2 support in Keycloak, which was preview in the previous release, is now promoted to be officially supported.

+
+
+
+

Experimental Account Console version 3

+
+

The Account Console version 3 is now available as an experimental feature in Keycloak. This version supports custom fields created with the 'User Profile' feature. If you are looking to try it out and provide us with some early feedback you can enable it as follows:

+
+
+
+
bin/kc.sh start-dev --features=account3
+
+
+
+
+

Changes to Keycloak Authorization Services support in Keycloak Java-based Adapters

+
+

As part of the removal of the deprecated adapters, the Keycloak Policy Enforcer was extracted from the adapters code base +into a separate dependency:

+
+
+
+
<dependency>
+    <groupId>org.keycloak</groupId>
+    <artifactId>keycloak-policy-enforcer</artifactId>
+    <version>21.1.0</version>
+</dependency>
+
+
+
+

By providing this dependency, we expect making it possible to integrate the policy enforcer with the Java stack of your preference.

+
+
+

It also provides built-in support for enabling the policy enforcer to Jakarta applications protected with Wildfly Elytron.

+
+
+

For now, this dependency is not yet GA as we are still working on the quickstarts and documentation.

+
+
+

This work should not impact existing applications using the deprecated adapters.

+
+
+
+

Javascript engine available by default

+
+

In the previous version, when Keycloak was used on Java 17 with Javascript providers it was needed to add the Nashorn +javascript engine to the distribution. This is no longer needed as Nashorn javascript engine is available in Keycloak server by default.

+
+
\ No newline at end of file diff --git a/cache/changelogs/changelog-21_1_1.json b/cache/releases/21.1.1/changelog.json similarity index 100% rename from cache/changelogs/changelog-21_1_1.json rename to cache/releases/21.1.1/changelog.json diff --git a/cache/releases/21.1.1/release-notes.empty b/cache/releases/21.1.1/release-notes.empty new file mode 100644 index 00000000..e69de29b diff --git a/cache/changelogs/changelog-21_1_2.json b/cache/releases/21.1.2/changelog.json similarity index 100% rename from cache/changelogs/changelog-21_1_2.json rename to cache/releases/21.1.2/changelog.json diff --git a/cache/releases/21.1.2/release-notes.html b/cache/releases/21.1.2/release-notes.html new file mode 100644 index 00000000..8ed4714f --- /dev/null +++ b/cache/releases/21.1.2/release-notes.html @@ -0,0 +1,6 @@ +
+

Changes in validating schemes for valid redirect URIs

+
+

If an application client is using non http(s) custom schemes, from now on the validation requires that a valid redirect pattern explicitly allows that scheme. Example patterns for allowing custom scheme are custom:/test, custom:/test/* or custom:*. For security reasons a general pattern like * does not cover them anymore.

+
+
\ No newline at end of file diff --git a/cache/changelogs/changelog-22_0_0.json b/cache/releases/22.0.0/changelog.json similarity index 100% rename from cache/changelogs/changelog-22_0_0.json rename to cache/releases/22.0.0/changelog.json diff --git a/cache/releases/22.0.0/release-notes.html b/cache/releases/22.0.0/release-notes.html new file mode 100644 index 00000000..cfa85ab7 --- /dev/null +++ b/cache/releases/22.0.0/release-notes.html @@ -0,0 +1,207 @@ +
+

Server Distribution

+
+

Java 11 support removed

+
+

Running the Keycloak server with Java 11 is no longer supported. Java 11 was deprecated in Keycloak 21 with the announced plan to be removed in Keycloak 22.

+
+
+
+

Upgrade to Quarkus 3.x

+
+

Keycloak upgraded to version 3.2.0.Final of the Quarkus Java framework. +Quarkus 3.x continues the tradition of propelling Java development by moving fast and providing a cutting-edge user experience with the latest technologies.

+
+
+
Transition from Java EE to Jakarta EE
+
+

As part of upgrading to Quarkus 3.x Keycloak migrated its codebase from Java EE (Enterprise Edition) to its successor Jakarta EE, which brings various changes into Keycloak. +We have upgraded all Jakarta EE specifications in order to support Jakarta EE 10.

+
+
+
+
Context and dependency injection no longer enabled to JAX-RS Resources
+
+

In order to provide a better runtime and leverage as much as possible the underlying stack, +all injection points for contextual data using the javax.ws.rs.core.Context annotation were removed. The expected improvement +in performance involves no longer creating proxies instances multiple times during the request lifecycle, and drastically reducing the amount of reflection code at runtime.

+
+
+
+
+

Upgrade to Hibernate ORM 6

+
+

Keycloak now benefits from the upgrade to Hibernate ORM 6.2, which includes improved performance, better SQL, modern JDK support, and support for modern RDBMS features.

+
+
+
+

Elytron credential store replacement

+
+

The previous and now removed WildFly distribution provided a built-in vault provider that reads secrets from a keystore-backed Elytron credential store. As this is no longer available, we have added a new implementation of the Keycloak Vault SPI called Keycloak KeyStore Vault. As the name suggests, this implementation reads secrets from a Java keystore file. Such secrets can be then used within multiple places of the Administration Console. For further details, see our guide and the latest documentation.

+
+
+
+

KeyStore Config Source added

+
+

In relation to the KeyStore Vault news, we also integrated Quarkus’s recently released feature called KeyStore Config Source. This means that among the already existing configuration sources (CLI parameters, environment variables and files), you can now configure your Keycloak server via configuration properties stored in a Java keystore file. You can learn more about this feature in the Configuration guide.

+
+
+
+

Hostname debug tool

+
+

As a number of users have had problems with configuring the hostname for the server correctly there is now a new helper tool to allow debugging the configuration.

+
+
+
+

Passthrough proxy mode changes

+
+

Installations which use Keycloak’s --proxy configuration setting with mode passthrough should review the documentation as the behavior of this mode has changed.

+
+
+
+

Export and Import perform an automatic build

+
+

In previous releases, the export and import commands required a build command to be run first. +Starting with this release, the export and import commands perform an automatic rebuild of Keycloak if a build time configuration has changed.

+
+
+
+
+

Admin Console

+
+

Account Console v1 removal

+
+

The old Account Console (v1) is now completely removed. This version of the Account Console was marked as deprecated +in Keycloak 12.

+
+
+
+

Account Console v3 promoted to preview

+
+

In version 21.1.0 of Keycloak the new Account Console (version 3) was introduced as an experimental feature. Starting this version it has been promoted to a preview feature.

+
+
+
+

Account Console template variables removed

+
+

Two of the variables exposed to the Account Console V2 and V3 templates (isEventsEnabled and isTotpConfigured) were left unused, and have been removed in this release.

+
+
+

It is possible that if a developer extended the Account Console theme, he or she could make use of these variables. So make sure that these variables are no longer used if you are extending the base theme.

+
+
+
+

Changes to custom Admin Console messages

+
+

The Admin Console (and soon also the new Account Console) works slightly different than the rest of Keycloak in regards to how keys for internationalized messages are parsed. This is due to the fact that it uses the i18next library for internationalization. Therefore when defining custom messages for the Admin Console under "Realm Settings" ➡ "Localization" best practices for i18next must be taken into account. Specifically, when defining a message for the Admin Console it is it important to specify a namespace in the key of your message.

+
+
+

For example, let’s assume we want to overwrite the welcome message shown to the user when a new realm has been created. This message is located in the dashboard namespace, same as the name of the original file that holds the messages (dashboard.json). If we wanted to overwrite this message we’ll have to use the namespace as a prefix followed by the key of the message separated by a colon, in this case it would become dashboard:welcome.

+
+
+
+
+

JavaScript adapter

+
+

Legacy Promise API removed

+
+

With this release, we have removed the legacy Promise API methods from the Keycloak JS adapter. This means that calling .success() and .error() on promises returned from the adapter is no longer possible.

+
+
+
+

Required to be instantiated with the new operator

+
+

In a previous release we started to actively log deprecation warnings when the Keycloak JS adapter is constructed without the new operator. Starting this release doing so will throw an exception instead. This is to align with the expected behavior of JavaScript classes, which will allow further refactoring of the adapter in the future.

+
+
+
+
+

Admin API

+
+

Renamed Admin library artifacts

+
+

After the upgrade to Jakarta EE, artifacts for Keycloak Admin clients were renamed to more descriptive names with consideration for long-term maintainability. +We still provide two separate Keycloak Admin clients, one with Jakarta EE and the other with Java EE support.

+
+
+
+

Support for count users based on custom attributes

+
+

The User API now supports querying the number of users based on custom attributes. For that, a new q parameter was added to the /{realm}/users/count endpoint.

+
+
+

The q parameter expects the following format q=<name>:<value> <name>:<value>. Where <name> and <value> represent the attribute name and value, respectively.

+
+
+
+
+

Operator

+
+

k8s.keycloak.org/v2alpha1 changes

+
+

The are additional fields available in the keycloak.status to facilitate keycloak being a scalable resource. There are also additional fields that make the status easier to interpret such as observedGeneration and condition observedGeneration and lastTransitionTime fields.

+
+
+

The condition status field was changed from a boolean to a string for conformance with standard Kubernetes conditions. In the CRD it will temporarily be represented as accepting any content, but it will only ever be a string. Please make sure any of your usage of this field is updated to expect the values "True", "False", or "Unknown", rather than true or false.

+
+
+
+

Co-management of Operator Resources

+
+

In scenarios where advanced management is needed you may now directly update most fields on operator managed resources that have not been set by the operator directly. This can be used as an alternative to the unsupported stanza of the Keycloak spec. Like the unsupported stanza these direct modifications are not considered supported. If your modifications prevent the operator from being able to manage the resource, there Keycloak CR will show this error condition and the operator will log it.

+
+
+
+
+

Identity Brokering

+
+

Essential claim configuration in OpenID Connect identity providers

+
+

OpenID Connect identity providers support a new configuration to specify that the ID tokens issued by the identity provider must have a specific claim, +otherwise the user can not authenticate through this broker.

+
+
+

The option is disabled by default; when it is enabled, you can specify the name of the JWT token claim to filter and the value to match +(supports regular expression format).

+
+
+
+

Support for JWE encrypted ID Tokens and UserInfo responses in OpenID Connect providers

+
+

The OpenID Connect providers now support Json Web Encryption (JWE) for the ID Token and the UserInfo response. The providers use the realm keys defined for the selected encryption algorithm to perform the decryption.

+
+
+
+

Hardcoded group mapper

+
+

The new hardcorded group mapper allows adding a specific group to users brokered from an Identity Provider.

+
+
+
+

User session note mapper

+
+

The new user session note mapper allows mapping a claim to the user session notes.

+
+
+
+
+

LDAP Federation

+
+

LDAPS-only Truststore option removed

+
+

LDAP option to use truststore SPI Only for ldaps has been removed. This parameter is used to +select truststore for TLS-secured LDAP connection: either internal Keycloak truststore is +picked (Always), or the global JVM one (Never).

+
+
+

Deployments where Only for ldaps was used will automatically behave as if Always option was +selected for TLS-secured LDAP connections.

+
+
+
+
+

Removed Openshift integration feature

+
+

The openshift-integration preview feature that allowed replacing the internal IdP in OpenShift 3.x with Keycloak was removed from Keycloak codebase into separate extension project.

+
+
\ No newline at end of file diff --git a/cache/changelogs/changelog-22_0_1.json b/cache/releases/22.0.1/changelog.json similarity index 100% rename from cache/changelogs/changelog-22_0_1.json rename to cache/releases/22.0.1/changelog.json diff --git a/cache/releases/22.0.1/release-notes.empty b/cache/releases/22.0.1/release-notes.empty new file mode 100644 index 00000000..e69de29b diff --git a/cache/changelogs/changelog-22_0_2.json b/cache/releases/22.0.2/changelog.json similarity index 98% rename from cache/changelogs/changelog-22_0_2.json rename to cache/releases/22.0.2/changelog.json index eda1f49f..e894f846 100644 --- a/cache/changelogs/changelog-22_0_2.json +++ b/cache/releases/22.0.2/changelog.json @@ -173,13 +173,6 @@ "kind" : "bug", "area" : "admin/ui", "url" : "https://github.com/keycloak/keycloak/issues/21693" -}, { - "number" : 21710, - "repository" : "keycloak", - "title" : "Liquibase CustomChange are executed twice because of a Liquibase bug fixed in 4.21.0", - "kind" : "bug", - "area" : "storage", - "url" : "https://github.com/keycloak/keycloak/issues/21710" }, { "number" : 21719, "repository" : "keycloak", diff --git a/cache/releases/22.0.2/release-notes.html b/cache/releases/22.0.2/release-notes.html new file mode 100644 index 00000000..a3bc2646 --- /dev/null +++ b/cache/releases/22.0.2/release-notes.html @@ -0,0 +1,7 @@ +
+

Improvements in LDAP and Kerberos integration

+
+

Keycloak now supports multiple LDAP providers in a realm, which support Kerberos integration with the same Kerberos realm. When an LDAP provider is not able to find the user which was authenticated through +Kerberos/SPNEGO, Keycloak ties to fallback to the next LDAP provider. Keycloak has also better support for the case when single LDAP provider supports multiple Kerberos realms, which are in trust with each other.

+
+
\ No newline at end of file diff --git a/cache/changelogs/changelog-22_0_3.json b/cache/releases/22.0.3/changelog.json similarity index 100% rename from cache/changelogs/changelog-22_0_3.json rename to cache/releases/22.0.3/changelog.json diff --git a/cache/releases/22.0.3/release-notes.html b/cache/releases/22.0.3/release-notes.html new file mode 100644 index 00000000..05bac0e3 --- /dev/null +++ b/cache/releases/22.0.3/release-notes.html @@ -0,0 +1,62 @@ +
+

Security vulnerability when registering or updating user through templates

+
+

A security vulnerability was introduced in Keycloak 22.0.2. We highly recommend not upgrading to 22.0.2, and for anyone that has deployed 22.0.2 in production to upgrade to 22.0.3 immediately.

+
+
+

For users that has self-registered after Keycloak was upgraded to 22.0.2 their password is not stored securely, and can be exposed to administrators of Keycloak. This only affects users that has registered after the upgrade was rolled-out, and does not affect any previously registered users.

+
+
+

Any realm using the preview declarative user profile is not affected by this issue, and only realms using the default user profile provider is affected.

+
+
+

To identify if there are any affected users in your deployment you can query these by accessing the database, and running the following SQL statement:

+
+
+
+
SELECT DISTINCT U.ID, U.USERNAME, U.EMAIL, U.REALM_ID FROM USER_ENTITY U
+    INNER JOIN USER_ATTRIBUTE UA ON U.ID = UA.USER_ID
+    WHERE UA.NAME IN ('password','password-confirm')
+
+
+
+

We recommend contacting any affected users as well as adding the update password required action for them.

+
+
+

If there are any affected users we also recommend removing these attributes from the database by running the following SQL statement:

+
+
+
+
DELETE FROM USER_ATTRIBUTE UA WHERE UA.NAME IN ('password','password-confirm')
+
+
+
+

If any backups have been done of the database after the 22.0.2 release and there are affected users, we recommend deleting these.

+
+
+

Custom user storage providers

+
+

Any deployments with custom user storage federation providers may also be affected, please verify your custom user storage to identify if this is an issue.

+
+
+

To identify if there are any federated user affected in your deployment in case the user storage provider is delegating management of attributes to Keycloak, you can query these by accessing the database, and running the following SQL statement:

+
+
+
+
SELECT DISTINCT USER_ID,REALM_ID,STORAGE_PROVIDER_ID FROM FED_USER_ATTRIBUTE
+    WHERE NAME IN ('password','password-confirm')
+
+
+
+

If there are any affected federated users, we also recommend removing these attributes from the database by running the following SQL statement:

+
+
+
+
DELETE FROM FED_USER_ATTRIBUTE UA WHERE UA.NAME IN ('password','password-confirm')
+
+
+
+

If your custom user storage provider is managing attributes itself, you should look at your custom storage to remove the password and password-confirm attributes.

+
+
+
\ No newline at end of file diff --git a/cache/releases/22.0.4/changelog.json b/cache/releases/22.0.4/changelog.json new file mode 100644 index 00000000..1d9e889b --- /dev/null +++ b/cache/releases/22.0.4/changelog.json @@ -0,0 +1,267 @@ +[ { + "number" : 11931, + "repository" : "keycloak", + "title" : "user first name not refreshed in Keycloak V2 theme ", + "kind" : "bug", + "area" : "account/ui", + "url" : "https://github.com/keycloak/keycloak/issues/11931" +}, { + "number" : 17733, + "repository" : "keycloak", + "title" : "Improve feature (detection) code in the Admin Console", + "kind" : "enhancement", + "area" : "admin/api", + "url" : "https://github.com/keycloak/keycloak/issues/17733" +}, { + "number" : 21935, + "repository" : "keycloak", + "title" : "Using truststore with LDAP and StartTLS is not working", + "kind" : "bug", + "area" : "ldap", + "url" : "https://github.com/keycloak/keycloak/issues/21935" +}, { + "number" : 22185, + "repository" : "keycloak", + "title" : "Can't boot Keycloak server with Java KeyStore p12 file running on Windows 10/2019 ", + "kind" : "bug", + "area" : "dist/quarkus", + "url" : "https://github.com/keycloak/keycloak/issues/22185" +}, { + "number" : 22478, + "repository" : "keycloak", + "title" : "Custom User Provider SPI: MULTIVALUED_STRING_TYPE value isn't correctly displayed on ui (but correctly saved and retrieved)", + "kind" : "bug", + "area" : "admin/ui", + "url" : "https://github.com/keycloak/keycloak/issues/22478" +}, { + "number" : 22778, + "repository" : "keycloak", + "title" : "Deep link format for redirect uri parameter is not parsed correctly", + "kind" : "bug", + "area" : "core", + "url" : "https://github.com/keycloak/keycloak/issues/22778" +}, { + "number" : 22825, + "repository" : "keycloak", + "title" : "Keycloak 22.0.1 unable to create user with long email address", + "kind" : "bug", + "area" : "admin/api", + "url" : "https://github.com/keycloak/keycloak/issues/22825" +}, { + "number" : 22839, + "repository" : "keycloak", + "title" : "Linux Firefox + Keycloak 22.0.1 issue(continuation of issue 21307)", + "kind" : "bug", + "area" : "authentication", + "url" : "https://github.com/keycloak/keycloak/issues/22839" +}, { + "number" : 22892, + "repository" : "keycloak", + "title" : "Not-working link during adding a SAML Identity provider", + "kind" : "bug", + "area" : "admin/ui", + "url" : "https://github.com/keycloak/keycloak/issues/22892" +}, { + "number" : 22923, + "repository" : "keycloak", + "title" : "Events filter by IP Address not working", + "kind" : "bug", + "area" : "admin/api", + "url" : "https://github.com/keycloak/keycloak/issues/22923" +}, { + "number" : 22974, + "repository" : "keycloak", + "title" : "NullpointerException when using encrypted SAML assertions", + "kind" : "bug", + "area" : "saml", + "url" : "https://github.com/keycloak/keycloak/issues/22974" +}, { + "number" : 23053, + "repository" : "keycloak", + "title" : "KC22: Issue with FIPS140 in non approved mode.", + "kind" : "bug", + "area" : "core", + "url" : "https://github.com/keycloak/keycloak/issues/23053" +}, { + "number" : 23065, + "repository" : "keycloak", + "title" : "Admin console throwing 403 error when logged in for sub realm using local admin user", + "kind" : "bug", + "area" : "admin/ui", + "url" : "https://github.com/keycloak/keycloak/issues/23065" +}, { + "number" : 23066, + "repository" : "keycloak", + "title" : "Remove bearer-only content from the Server Administration Guide", + "kind" : "enhancement", + "area" : "docs", + "url" : "https://github.com/keycloak/keycloak/issues/23066" +}, { + "number" : 23124, + "repository" : "keycloak", + "title" : "Move email validation change docs to migration guide of 22.0.3", + "kind" : "enhancement", + "area" : "docs", + "url" : "https://github.com/keycloak/keycloak/issues/23124" +}, { + "number" : 23177, + "repository" : "keycloak", + "title" : "Move email validation change docs to migration guide of 22.0.4", + "kind" : "enhancement", + "area" : "docs", + "url" : "https://github.com/keycloak/keycloak/issues/23177" +}, { + "number" : 23185, + "repository" : "keycloak", + "title" : "Registration page not showing username when edit username is not enabled", + "kind" : "bug", + "area" : "user-profile", + "url" : "https://github.com/keycloak/keycloak/issues/23185" +}, { + "number" : 23233, + "repository" : "keycloak", + "title" : "Backport Registration CVE fix", + "kind" : "task", + "area" : null, + "url" : "https://github.com/keycloak/keycloak/issues/23233" +}, { + "number" : 23246, + "repository" : "keycloak", + "title" : "Improve documentation about manual database migration", + "kind" : "enhancement", + "area" : "docs", + "url" : "https://github.com/keycloak/keycloak/issues/23246" +}, { + "number" : 23251, + "repository" : "keycloak", + "title" : "SAML Encryption Key Export Downloads Signing Key", + "kind" : "bug", + "area" : "admin/ui", + "url" : "https://github.com/keycloak/keycloak/issues/23251" +}, { + "number" : 23258, + "repository" : "keycloak", + "title" : "Race condition inside Keycloak build chain execution", + "kind" : "bug", + "area" : "dist/quarkus", + "url" : "https://github.com/keycloak/keycloak/issues/23258" +}, { + "number" : 23280, + "repository" : "keycloak", + "title" : "Upgrade to Quarkus 3.2.6", + "kind" : "task", + "area" : "dist/quarkus", + "url" : "https://github.com/keycloak/keycloak/issues/23280" +}, { + "number" : 23306, + "repository" : "keycloak", + "title" : "NPE in AuthenticationManager backchannelLogout", + "kind" : "bug", + "area" : "core", + "url" : "https://github.com/keycloak/keycloak/issues/23306" +}, { + "number" : 23312, + "repository" : "keycloak", + "title" : "Deploy JavaScript adapter to Maven repository", + "kind" : "enhancement", + "area" : null, + "url" : "https://github.com/keycloak/keycloak/issues/23312" +}, { + "number" : 23325, + "repository" : "keycloak", + "title" : "PolicyEnforcer should set WWW-Authenticate header before calling sendError() method", + "kind" : "bug", + "area" : "authorization-services", + "url" : "https://github.com/keycloak/keycloak/issues/23325" +}, { + "number" : 23327, + "repository" : "keycloak", + "title" : "User cannot be created via Admin UI if custom user attribute is required", + "kind" : "bug", + "area" : "admin/ui", + "url" : "https://github.com/keycloak/keycloak/issues/23327" +}, { + "number" : 23341, + "repository" : "keycloak", + "title" : "Keycloak 22.0.3: Create user: select groups to join filter does nothing", + "kind" : "bug", + "area" : "admin/ui", + "url" : "https://github.com/keycloak/keycloak/issues/23341" +}, { + "number" : 23342, + "repository" : "keycloak", + "title" : "Test failures with Wildfly/EAP adapters using TLS", + "kind" : "bug", + "area" : "ci", + "url" : "https://github.com/keycloak/keycloak/issues/23342" +}, { + "number" : 23366, + "repository" : "keycloak", + "title" : "Reopening of CVE-2023-21971 - Update Connector/J to 8.0.33", + "kind" : "bug", + "area" : "dependencies", + "url" : "https://github.com/keycloak/keycloak/issues/23366" +}, { + "number" : 23402, + "repository" : "keycloak", + "title" : "Outdated kcadm.sh help examples can be misleading to our users", + "kind" : "bug", + "area" : "admin/cli", + "url" : "https://github.com/keycloak/keycloak/issues/23402" +}, { + "number" : 23438, + "repository" : "keycloak", + "title" : "Cannot update email address when \"Email as username\" is enabled", + "kind" : "bug", + "area" : "admin/api", + "url" : "https://github.com/keycloak/keycloak/issues/23438" +}, { + "number" : 23447, + "repository" : "keycloak", + "title" : "Allow 'prompt' Value 'consent' in Keycloak JavaScript Adapter", + "kind" : "bug", + "area" : "adapter/javascript", + "url" : "https://github.com/keycloak/keycloak/issues/23447" +}, { + "number" : 23460, + "repository" : "keycloak", + "title" : "Minor typo in documentation (Server - Configuring Keycloak)", + "kind" : "task", + "area" : null, + "url" : "https://github.com/keycloak/keycloak/issues/23460" +}, { + "number" : 23464, + "repository" : "keycloak", + "title" : "CVE-2023-4853 HTTP security policy bypass (io.quarkus:quarkus-vertx-http)", + "kind" : "task", + "area" : null, + "url" : "https://github.com/keycloak/keycloak/issues/23464" +}, { + "number" : 23481, + "repository" : "keycloak", + "title" : "Text field for last name field in user form has an incorrect ID", + "kind" : "bug", + "area" : "admin/ui", + "url" : "https://github.com/keycloak/keycloak/issues/23481" +}, { + "number" : 23637, + "repository" : "keycloak", + "title" : "Some container implementations don't work with the documented additional RPM install procedure", + "kind" : "bug", + "area" : "docs", + "url" : "https://github.com/keycloak/keycloak/issues/23637" +}, { + "number" : 23661, + "repository" : "keycloak", + "title" : "Upload JVM Heapdumps action fail on Windows", + "kind" : "bug", + "area" : "ci", + "url" : "https://github.com/keycloak/keycloak/issues/23661" +}, { + "number" : 23773, + "repository" : "keycloak", + "title" : "22.0.4 Operator installed via OLM deploys Keycloak nightly version", + "kind" : "bug", + "area" : "operator", + "url" : "https://github.com/keycloak/keycloak/issues/23773" +} ] \ No newline at end of file diff --git a/cache/releases/22.0.4/release-notes.empty b/cache/releases/22.0.4/release-notes.empty new file mode 100644 index 00000000..e69de29b diff --git a/cache/releases/22.0.5/changelog.json b/cache/releases/22.0.5/changelog.json new file mode 100644 index 00000000..b79ec866 --- /dev/null +++ b/cache/releases/22.0.5/changelog.json @@ -0,0 +1,302 @@ +[ { + "number" : 14820, + "repository" : "keycloak", + "title" : "Calling getTopLevelGroups is slow inside GroupLDAPStorageMapper#getLDAPGroupMappingsConverted", + "kind" : "enhancement", + "area" : "storage", + "url" : "https://github.com/keycloak/keycloak/issues/14820" +}, { + "number" : 19348, + "repository" : "keycloak", + "title" : "Sort subgroups", + "kind" : "enhancement", + "area" : "storage", + "url" : "https://github.com/keycloak/keycloak/issues/19348" +}, { + "number" : 22109, + "repository" : "keycloak", + "title" : "Add non-blocking liveness and readiness checks to Keycloak", + "kind" : "enhancement", + "area" : "dist/quarkus", + "url" : "https://github.com/keycloak/keycloak/issues/22109" +}, { + "number" : 22170, + "repository" : "keycloak", + "title" : "Operator secrets sequencing", + "kind" : "bug", + "area" : "operator", + "url" : "https://github.com/keycloak/keycloak/issues/22170" +}, { + "number" : 22200, + "repository" : "keycloak", + "title" : "External Link check for documentation logs warning and exception: WARN FilenoUtil: Native subprocess control requires open access", + "kind" : "enhancement", + "area" : "docs", + "url" : "https://github.com/keycloak/keycloak/issues/22200" +}, { + "number" : 22600, + "repository" : "keycloak", + "title" : "Keycloak admin v2 theme js mapper adding issue", + "kind" : "bug", + "area" : "admin/ui", + "url" : "https://github.com/keycloak/keycloak/issues/22600" +}, { + "number" : 22960, + "repository" : "keycloak", + "title" : "Do not store empty attributes when updating user profile", + "kind" : "bug", + "area" : "user-profile", + "url" : "https://github.com/keycloak/keycloak/issues/22960" +}, { + "number" : 22982, + "repository" : "keycloak", + "title" : "User attributes can't be saved when user profile is enabled", + "kind" : "bug", + "area" : "admin/ui", + "url" : "https://github.com/keycloak/keycloak/issues/22982" +}, { + "number" : 23220, + "repository" : "keycloak", + "title" : "Update to Keycloak 22.0.3 fails: Migration failed for change set META-INF/jpa-changelog-13.0.0.xml::default-roles::keycloak", + "kind" : "bug", + "area" : "storage", + "url" : "https://github.com/keycloak/keycloak/issues/23220" +}, { + "number" : 23294, + "repository" : "keycloak", + "title" : "admin-fine-grained-authz + client authorization settings requires more realm-management roles", + "kind" : "bug", + "area" : "admin/ui", + "url" : "https://github.com/keycloak/keycloak/issues/23294" +}, { + "number" : 23331, + "repository" : "keycloak", + "title" : "CVE-2023-42503 - Improper Input Validation vulnerability in org.apache.commons:commons-compress", + "kind" : "cve", + "area" : null, + "url" : "https://github.com/keycloak/keycloak/issues/23331" +}, { + "number" : 23345, + "repository" : "keycloak", + "title" : "Broken link https://stackapps.com/apps/oauth/register ", + "kind" : "bug", + "area" : "docs", + "url" : "https://github.com/keycloak/keycloak/issues/23345" +}, { + "number" : 23397, + "repository" : "keycloak", + "title" : "The \"invalid_grant\" error occurs again when loading the offline client session with an early creation time.", + "kind" : "bug", + "area" : "infinispan", + "url" : "https://github.com/keycloak/keycloak/issues/23397" +}, { + "number" : 23434, + "repository" : "keycloak", + "title" : "Can not view or update user profile attribute in user details", + "kind" : "bug", + "area" : "admin/ui", + "url" : "https://github.com/keycloak/keycloak/issues/23434" +}, { + "number" : 23507, + "repository" : "keycloak", + "title" : "User cannot be created via Admin UI if custom user attribute is required", + "kind" : "bug", + "area" : "admin/ui", + "url" : "https://github.com/keycloak/keycloak/issues/23507" +}, { + "number" : 23581, + "repository" : "keycloak", + "title" : "Code certain topics as upstream only", + "kind" : "enhancement", + "area" : null, + "url" : "https://github.com/keycloak/keycloak/issues/23581" +}, { + "number" : 23584, + "repository" : "keycloak", + "title" : "Return attribute group metadata from Admin and Account APIs", + "kind" : "bug", + "area" : "user-profile", + "url" : "https://github.com/keycloak/keycloak/issues/23584" +}, { + "number" : 23654, + "repository" : "keycloak", + "title" : "Attributes tab fields are not changing when a different group is selected ", + "kind" : "bug", + "area" : "admin/ui", + "url" : "https://github.com/keycloak/keycloak/issues/23654" +}, { + "number" : 23711, + "repository" : "keycloak", + "title" : "Remove recommendation to file a GitHub issue", + "kind" : "enhancement", + "area" : "docs", + "url" : "https://github.com/keycloak/keycloak/issues/23711" +}, { + "number" : 23713, + "repository" : "keycloak", + "title" : "Weak hashing algorithm usage in SSSD User federation", + "kind" : "bug", + "area" : "identity-brokering", + "url" : "https://github.com/keycloak/keycloak/issues/23713" +}, { + "number" : 23740, + "repository" : "keycloak", + "title" : "Admin Console doesn't show user when user attribute has annotation inputType", + "kind" : "bug", + "area" : "admin/ui", + "url" : "https://github.com/keycloak/keycloak/issues/23740" +}, { + "number" : 23743, + "repository" : "keycloak", + "title" : "Keycloak 22.0.4 crashes on file step1.html on old safari versions", + "kind" : "bug", + "area" : "authentication", + "url" : "https://github.com/keycloak/keycloak/issues/23743" +}, { + "number" : 23774, + "repository" : "keycloak", + "title" : "User can't be updated in admin console when user profile is used", + "kind" : "bug", + "area" : "admin/ui", + "url" : "https://github.com/keycloak/keycloak/issues/23774" +}, { + "number" : 23783, + "repository" : "keycloak", + "title" : "'Show version information' is not working", + "kind" : "bug", + "area" : "dist/quarkus", + "url" : "https://github.com/keycloak/keycloak/issues/23783" +}, { + "number" : 23790, + "repository" : "keycloak", + "title" : "The `Enabled When` setting should be set to `Always` by default", + "kind" : "bug", + "area" : "user-profile", + "url" : "https://github.com/keycloak/keycloak/issues/23790" +}, { + "number" : 23794, + "repository" : "keycloak", + "title" : "Made adapters compatible with KC23 \"iss\" parameter change", + "kind" : "task", + "area" : null, + "url" : "https://github.com/keycloak/keycloak/issues/23794" +}, { + "number" : 23800, + "repository" : "keycloak", + "title" : "Add a disclaimer about refererences to Kubernetes", + "kind" : "enhancement", + "area" : null, + "url" : "https://github.com/keycloak/keycloak/issues/23800" +}, { + "number" : 23856, + "repository" : "keycloak", + "title" : "Allow documentation to be build referencing only Linux, not Windows", + "kind" : "enhancement", + "area" : null, + "url" : "https://github.com/keycloak/keycloak/issues/23856" +}, { + "number" : 23862, + "repository" : "keycloak", + "title" : "Update Operator product documentation", + "kind" : "task", + "area" : "docs", + "url" : "https://github.com/keycloak/keycloak/issues/23862" +}, { + "number" : 23873, + "repository" : "keycloak", + "title" : "Simplify the docs referencing the container registry", + "kind" : "task", + "area" : null, + "url" : "https://github.com/keycloak/keycloak/issues/23873" +}, { + "number" : 23910, + "repository" : "keycloak", + "title" : "Removing the default cache metadata", + "kind" : "enhancement", + "area" : null, + "url" : "https://github.com/keycloak/keycloak/issues/23910" +}, { + "number" : 23911, + "repository" : "keycloak", + "title" : "User profile attribute default render should be ordinary input", + "kind" : "bug", + "area" : "admin/ui", + "url" : "https://github.com/keycloak/keycloak/issues/23911" +}, { + "number" : 23930, + "repository" : "keycloak", + "title" : "Admin console does not allow several special characters for realm name anymore", + "kind" : "bug", + "area" : "admin/ui", + "url" : "https://github.com/keycloak/keycloak/issues/23930" +}, { + "number" : 23940, + "repository" : "keycloak", + "title" : "Address test failures for WatchedSecretsTest.testSingleSecretMultipleKeycloaks", + "kind" : "task", + "area" : "operator", + "url" : "https://github.com/keycloak/keycloak/issues/23940" +}, { + "number" : 23946, + "repository" : "keycloak", + "title" : "Limit Keycloak 22 Windows support to the Admin CLI to upstream", + "kind" : "enhancement", + "area" : null, + "url" : "https://github.com/keycloak/keycloak/issues/23946" +}, { + "number" : 23949, + "repository" : "keycloak", + "title" : "CVE-2023-44487 - Denial of Service (DoS) vulnerability in io.netty:netty-codec-http2", + "kind" : "cve", + "area" : "dist/quarkus", + "url" : "https://github.com/keycloak/keycloak/issues/23949" +}, { + "number" : 23951, + "repository" : "keycloak", + "title" : "Update Keycloak 22 Getting Started", + "kind" : "enhancement", + "area" : null, + "url" : "https://github.com/keycloak/keycloak/issues/23951" +}, { + "number" : 23954, + "repository" : "keycloak", + "title" : "FederatedUserLink errors when user does not have view-realm role", + "kind" : "bug", + "area" : "admin/ui", + "url" : "https://github.com/keycloak/keycloak/issues/23954" +}, { + "number" : 24007, + "repository" : "keycloak", + "title" : "Remove mentions of Crunchy Operator from docs", + "kind" : "task", + "area" : "docs", + "url" : "https://github.com/keycloak/keycloak/issues/24007" +}, { + "number" : 24017, + "repository" : "keycloak", + "title" : "Operator operand env var does not conform to OSBS naming requirements", + "kind" : "bug", + "area" : "operator", + "url" : "https://github.com/keycloak/keycloak/issues/24017" +}, { + "number" : 24031, + "repository" : "keycloak", + "title" : "Missing migration step for Keycloak 22 during import", + "kind" : "bug", + "area" : "storage", + "url" : "https://github.com/keycloak/keycloak/issues/24031" +}, { + "number" : 24081, + "repository" : "keycloak", + "title" : "Scopes still persisted when required attribute is set to `Always`", + "kind" : "bug", + "area" : "user-profile", + "url" : "https://github.com/keycloak/keycloak/issues/24081" +}, { + "number" : 24143, + "repository" : "keycloak", + "title" : "Operator docs link is broken", + "kind" : "bug", + "area" : "operator", + "url" : "https://github.com/keycloak/keycloak/issues/24143" +} ] \ No newline at end of file diff --git a/cache/releases/22.0.5/release-notes.empty b/cache/releases/22.0.5/release-notes.empty new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/org/keycloak/webbuilder/Versions.java b/src/main/java/org/keycloak/webbuilder/Versions.java index db160e1f..15622552 100644 --- a/src/main/java/org/keycloak/webbuilder/Versions.java +++ b/src/main/java/org/keycloak/webbuilder/Versions.java @@ -46,11 +46,11 @@ public static class Version implements Comparable { private String version; - private String documentationTemplate; + private int documentationTemplate; - private String downloadTemplate; + private int downloadTemplate; - private String blogTemplate; + private int blogTemplate; private boolean latest; @@ -90,27 +90,27 @@ public void setVersion(String version) { this.version = version; } - public String getBlogTemplate() { + public int getBlogTemplate() { return blogTemplate; } - public void setBlogTemplate(String blogTemplate) { + public void setBlogTemplate(int blogTemplate) { this.blogTemplate = blogTemplate; } - public String getDocumentationTemplate() { + public int getDocumentationTemplate() { return documentationTemplate; } - public void setDocumentationTemplate(String documentationTemplate) { + public void setDocumentationTemplate(int documentationTemplate) { this.documentationTemplate = documentationTemplate; } - public String getDownloadTemplate() { + public int getDownloadTemplate() { return downloadTemplate; } - public void setDownloadTemplate(String downloadTemplate) { + public void setDownloadTemplate(int downloadTemplate) { this.downloadTemplate = downloadTemplate; } @@ -148,8 +148,12 @@ public void setChanges(ChangeLog changes) { @Override public int compareTo(Version o) { + return compareTo(o.getVersion()); + } + + public int compareTo(String o) { String[] v1 = version.split("\\."); - String[] v2 = o.getVersion().split("\\."); + String[] v2 = o.split("\\."); int r = stringNumberCompareTo(v2[0], v1[0]); if (r != 0) { diff --git a/src/main/java/org/keycloak/webbuilder/WebBuilder.java b/src/main/java/org/keycloak/webbuilder/WebBuilder.java index 082ff0df..6ced6d32 100644 --- a/src/main/java/org/keycloak/webbuilder/WebBuilder.java +++ b/src/main/java/org/keycloak/webbuilder/WebBuilder.java @@ -6,6 +6,7 @@ import org.keycloak.webbuilder.builders.ChangelogBuilder; import org.keycloak.webbuilder.builders.DocumentationArchiveBuilder; import org.keycloak.webbuilder.builders.DownloadsArchiveBuilder; +import org.keycloak.webbuilder.builders.GitHubReleaseNotesBuilder; import org.keycloak.webbuilder.builders.GuideBuilder; import org.keycloak.webbuilder.builders.PageBuilder; import org.keycloak.webbuilder.builders.ReleaseNotesBuilder; @@ -24,6 +25,7 @@ public class WebBuilder { new ChangelogBuilder(), new ResourcesBuilder(), new ReleaseNotesBuilder(), + new GitHubReleaseNotesBuilder(), new BlogBuilder(), new GuideBuilder(), new PageBuilder(), diff --git a/src/main/java/org/keycloak/webbuilder/builders/ChangelogBuilder.java b/src/main/java/org/keycloak/webbuilder/builders/ChangelogBuilder.java index 6b6741f9..2f8d634c 100644 --- a/src/main/java/org/keycloak/webbuilder/builders/ChangelogBuilder.java +++ b/src/main/java/org/keycloak/webbuilder/builders/ChangelogBuilder.java @@ -38,19 +38,30 @@ protected void build() throws Exception { })) .withOAuthToken(token).build(); - File changelogCache = new File(context.getCacheDir(), "changelogs"); - changelogCache.mkdirs(); + File releasesCache = new File(context.getCacheDir(), "releases"); for (Versions.Version v : context.versions()) { - String fileName = "changelog-" + v.getVersion().replace(".", "_") + ".json"; - File changeLogFile = new File(changelogCache, fileName); + File releaseCacheDir = new File(releasesCache, v.getVersion()); + releaseCacheDir.mkdirs(); + + File changeLogFile = new File(releaseCacheDir, "changelog.json"); if (changeLogFile.exists()) { Versions.ChangeLog changeLog = new Versions.ChangeLog(Arrays.asList(context.json().read(changeLogFile, ChangeLogEntry[].class))); + + if (v.getBlogTemplate() >= 3) { + for (ChangeLogEntry e : changeLog.getAll()) { + if (!e.getRepository().equals("keycloak")) { + String area = e.getRepository().replaceAll("keycloak-", ""); + e.setArea(area); + } + } + } + v.setChanges(changeLog); printStep("exists", v.getVersion()); } else { - if (Integer.parseInt(v.getBlogTemplate()) >= 2) { + if (v.getBlogTemplate() >= 2) { List ghIssues = gh.searchIssues().q("user:keycloak milestone:" + v.getVersion() + " is:closed is:issue").isClosed().list().toList(); List changes = new LinkedList<>(); diff --git a/src/main/java/org/keycloak/webbuilder/builders/GitHubReleaseNotesBuilder.java b/src/main/java/org/keycloak/webbuilder/builders/GitHubReleaseNotesBuilder.java new file mode 100644 index 00000000..82b69a56 --- /dev/null +++ b/src/main/java/org/keycloak/webbuilder/builders/GitHubReleaseNotesBuilder.java @@ -0,0 +1,44 @@ +package org.keycloak.webbuilder.builders; + +import org.keycloak.webbuilder.Versions; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +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"); + + for (Versions.Version v : context.versions()) { + if (v.compareTo(ghReleaseFrom) <= 0) { + File releaseCacheDir = new File(releasesCache, v.getVersion()); + releaseCacheDir.mkdirs(); + + File ghReleaseNotes = new File(releaseCacheDir, "gh-release-notes.html"); + + if (!ghReleaseNotes.isFile()) { + Map attributes = new HashMap<>(); + attributes.put("version", v); + + try { + context.freeMarker().writeFile(attributes, "templates/gh-release-3.ftl", ghReleaseNotes.getParentFile(), ghReleaseNotes.getName()); + printStep("created", v.getVersion()); + } catch (Exception e) { + printStep("failed", 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 1248ecbe..0a6dbfec 100644 --- a/src/main/java/org/keycloak/webbuilder/builders/ReleaseNotesBuilder.java +++ b/src/main/java/org/keycloak/webbuilder/builders/ReleaseNotesBuilder.java @@ -29,25 +29,36 @@ public void build() throws IOException { attributes = context.asciiDoctor().parseAttributes(new URL(DOCUMENT_ATTRIBUTES_URL), attributes); - context.getTmpDir().mkdirs(); + File releasesCache = new File(context.getCacheDir(), "releases"); for (Versions.Version v : context.versions()) { try { - String releaseNotesUrl = String.format(RELEASE_NOTES_URL, v.getVersionShorter(), v.getVersion().replace(".", "_")); - URL url = new URL(releaseNotesUrl); + File releaseCacheDir = new File(releasesCache, v.getVersion()); + releaseCacheDir.mkdirs(); - String fileName = "release-notes-" + v.getVersion().replace(".", "_") + ".html"; + File releaseNotesFile = new File(releaseCacheDir, "release-notes.html"); + File releaseNotesMissingFile = new File(releaseCacheDir, "release-notes.empty"); - if (new File(context.getTmpDir(), fileName).isFile()) { + if (releaseNotesFile.isFile()) { printStep("exists", v.getVersion()); + } else if (releaseNotesMissingFile.isFile()) { + printStep("missing", v.getVersion()); } else { - context.asciiDoctor().writeFile(attributes, url, context.getTmpDir(), fileName); - printStep("created", v.getVersion()); + String releaseNotesUrl = String.format(RELEASE_NOTES_URL, v.getVersionShorter(), v.getVersion().replace(".", "_")); + URL url = new URL(releaseNotesUrl); + + try { + context.asciiDoctor().writeFile(attributes, url, releaseNotesFile.getParentFile(), releaseNotesFile.getName()); + printStep("created", v.getVersion()); + } catch (FileNotFoundException e) { + printStep("notfound", v.getVersion()); + releaseNotesMissingFile.createNewFile(); + } } - v.setReleaseNotes("target/tmp/" + fileName); - } catch (FileNotFoundException e) { - printStep("missing", v.getVersion()); + if (releaseNotesFile.isFile()) { + v.setReleaseNotes("cache/releases/" + v.getVersion() + "/release-notes.html"); + } } catch (Exception e) { printStep("error", v.getVersion() + " (" + e.getClass().getSimpleName() + ")"); } diff --git a/templates/blog-release-3.ftl b/templates/blog-release-3.ftl new file mode 100644 index 00000000..fdea6155 --- /dev/null +++ b/templates/blog-release-3.ftl @@ -0,0 +1,50 @@ +

To download the release go to Keycloak downloads.

+ +<#if version.releaseNotes??> +

Highlights

+ <#include "../${version.releaseNotes}"> + + +

Upgrading

+

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

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

All resolved issues

+ +<#if version.changes.deprecations?has_content> +

Deprecated features

+ + + +<#if version.changes.features?has_content> +

New features

+ + + +<#if version.changes.enhancements?has_content> +

Enhancements

+ + + +<#if version.changes.bugs?has_content> +

Bugs

+ + + + \ No newline at end of file diff --git a/templates/gh-release-3.ftl b/templates/gh-release-3.ftl new file mode 100644 index 00000000..d0615b28 --- /dev/null +++ b/templates/gh-release-3.ftl @@ -0,0 +1,50 @@ +
+<#if version.releaseNotes??> +

Highlights

+ <#include "../${version.releaseNotes}"> + + +

Upgrading

+

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

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

All resolved issues

+ +<#if version.changes.deprecations?has_content> +

Deprecated features

+ + + +<#if version.changes.features?has_content> +

New features

+ + + +<#if version.changes.enhancements?has_content> +

Enhancements

+ + + +<#if version.changes.bugs?has_content> +

Bugs

+ + + + +
\ No newline at end of file diff --git a/version-template.json b/version-template.json index 6aa280cf..51282b09 100644 --- a/version-template.json +++ b/version-template.json @@ -1,7 +1,7 @@ { "date": "DATE", "version": "VERSION", - "blogTemplate": 2, + "blogTemplate": 3, "documentationTemplate": 11, "downloadTemplate": 21 }