diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index effb888a..2fd0229e 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -15,6 +15,37 @@ + + + diff --git a/docs/modules/bindings-specification/pages/message-passing-api.adoc b/docs/modules/bindings-specification/pages/message-passing-api.adoc index d75a6eb0..706d204c 100644 --- a/docs/modules/bindings-specification/pages/message-passing-api.adoc +++ b/docs/modules/bindings-specification/pages/message-passing-api.adoc @@ -122,6 +122,8 @@ outputFormat: String? project: Project? /// Configuration of outgoing HTTP(s) requests. +/// +/// Added in Pkl 0.26.0. http: Http? class ClientResourceReader { diff --git a/docs/modules/pkl-cli/pages/index.adoc b/docs/modules/pkl-cli/pages/index.adoc index 756e2edf..938c13cc 100644 --- a/docs/modules/pkl-cli/pages/index.adoc +++ b/docs/modules/pkl-cli/pages/index.adoc @@ -178,6 +178,7 @@ Pkl {pkl-version} (Linux, native) NOTE: We currently do not support the aarch64 architecture for Alpine Linux. +[[windows-executable]] === Windows Executable [source,PowerShell] @@ -197,6 +198,7 @@ Pkl {pkl-version} (Windows 10.0, native) NOTE: We currently do not support the aarch64 architecture for Windows. +[[java-executable]] === Java Executable [source,shell] diff --git a/docs/modules/release-notes/pages/0.26.adoc b/docs/modules/release-notes/pages/0.26.adoc index 61c4e6f8..1bde177e 100644 --- a/docs/modules/release-notes/pages/0.26.adoc +++ b/docs/modules/release-notes/pages/0.26.adoc @@ -1,14 +1,16 @@ = Pkl 0.26 Release Notes :version: 0.26 :version-minor: 0.26.0 -:release-date: TBD +:release-date: June 17th, 2024 include::ROOT:partial$component-attributes.adoc[] Pkl {version} was released on {release-date}. + [.small]#The latest bugfix release is {version-minor}. (xref:changelog.adoc[All Versions])# -The next release (0.27) is scheduled for July 2nd, 2024.. +This release brings Windows support, improvements to controlling how Pkl talks over HTTP, and also fixes a scoping bug around typealiases. + +The next release (0.27) is scheduled for October 10th, 2024. Please send feedback and questions to https://github.com/apple/pkl/discussions[GitHub Discussions], or submit an issue on https://github.com/apple/pkl/issues/new[Github]. + @@ -19,51 +21,490 @@ To get started, follow xref:pkl-cli:index.adoc#installation[Installation].# News you don't want to miss. -.XXX -[%collapsible] +[[windows-support]] +=== Windows Support (https://github.com/apple/pkl/pull/492[#492]) + +Pkl is now available on Windows! + +In addition to macOS and Linux, Pkl is now available for download on Windows operating systems. + +For installation instructions, consult xref:pkl-cli:index.adoc#windows-executable[Windows Executable] in the CLI reference. + +==== Writing cross-platform Pkl programs + +On Windows, the in-language filepath separator is still `/`. +This means that most existing Pkl code should still continue working as-is. + +A small portion of programs will need to be updated to handle Windows support correctly. +One example is the various conversion scripts that read input files as CLI flags. + +For example, here is a snippet from module https://github.com/apple/pkl-pantry/blob/d9571cdce407bb7f1687f81b945a4bfd24ce017d/packages/k8s.contrib/convert.pkl#L100C1-L103C74[k8s.contrib.convert]: + +.convert.pkl#L100-L103 +[source,pkl] +---- +local inputUri = + if (input.startsWith(Regex(#"\w+:"#))) input // absolute URI + else if (input.startsWith("/")) "file://\(input)" // absolute file path + else "file://\(read("env:PWD"))/\(input)" // relative file path +---- + +On Windows, the env var `PWD` is a Windows-style path, like `C:\Foo\Bar\Baz`. +With the above logic, `inputUri` can expand to a value like `"\file://C:\Foo\Bar\Baz/input.yaml"`. +This would an invalid URI; the correct URI should be `"\file:///C:/Foo/Bar/Baz/input.yaml"`. + +Here is a possible fix for this code: + +[source,pkl] +---- +import "pkl:platform" + +local inputUri = + if (input.startsWith(Regex(#"\w+:/"#))) input + else if (input.startsWith("/")) "file://\(input)" + else + let (pwd = read("env:PWD")) + let ( + path = + if (platform.current.operatingSystem.name == "Windows") + "/\(pwd)/\(input)".replaceAll("\\", "/") + else "\(pwd)/\(input)" + ) + "file://\(path)" +---- + +To learn more about this design, consult https://github.com/apple/pkl-evolution/blob/main/spices/SPICE-0006-import-paths-on-windows.adoc[SPICE-0006]. + +[[http-proxying]] +=== HTTP proxying (https://github.com/apple/pkl/pull/506[#506]) + +Pkl now supports proxying HTTP(S) requests. + +For users of the CLI, Pkl will by default look for proxy settings configured within the OS when on macOS, Windows, and GNOME environments. + +This can be changed by adding settings in the following locations: + +1. xref:pkl-cli:index.adoc#settings-file[Settings file] +2. xref:language-reference:index.adoc#projects[PklProject file] +3. `--http-proxy` and `--http-no-proxy` CLI flags + +As part of this, some changes have been made to the standard library. For details, see <>. + +Users of the Java/Kotlin bindings can specify proxy settings when building an <>. + +HTTP proxy settings are also added as new fields in the message-passing-api. +Authors of external Pkl clients are encouraged to support these new fields to provide proxy support in their libraries. +For details, see <>. + +To read more about the design of HTTP proxying, consult https://github.com/apple/pkl-evolution/blob/main/spices/SPICE-0004-HTTP-Proxy-Support.adoc[SPICE-0004], and also the xref:pkl-cli:index.adoc#http-proxy[documentation]. + +[[scheme-agnostic-project-dependencies]] +=== Scheme-agnostic project dependencies (https://github.com/apple/pkl/pull/486[#486]) + +A project dependency is a way to manage `package`-based modules. +It provides two uses: + +1. A package can be imported through xref:language-reference:index.adoc#dependency-notation[dependency notation]. +2. Conflicting versions in the transitive dependency graph are resolved. + +Currently, dependencies can only be used with file-based modules. +This can be limiting in some circumstances: + +1. JVM library users typically interact with Pkl by bundling Pkl files a classpath resources, and load them using `modulepath:` URIs. +2. Go library users often embed Pkl code using the https://pkg.go.dev/embed#hdr-Directives[`go:embed` directive], and load them using https://pkg.go.dev/github.com/apple/pkl-go/pkl#WithFs[`WithFs`]. + +This means that these users miss out on the benefits of project dependencies. + +Pkl 0.26 adds support for using dependencies in any hierarchical module scheme. +This means that `modulepath:` users in Java can now declare projects and dependencies. +This also means that other custom methods of embedding modules can also use dependency notation. + +[NOTE] ==== -XXX +A _hierarchical_ URI is a URI whose path part starts with `/`, and in which `/` delimits path segments. + +The URI `myscheme:/foo.pkl` is hierarchical, whereas the URI `myscheme:foo.pkl` is not. ==== +To read more about this design, consult https://github.com/apple/pkl-evolution/tree/main/spices/SPICE-0005-scheme-agnostic-projects.adoc[SPICE-0005]. + +[[typealias-scoping-fix-and-change]] +=== Typealias scoping fix and change (https://github.com/apple/pkl/pull/144[#144], https://github.com/apple/pkl/pull/373[#373], https://github.com/apple/pkl/pull/516[#516]) + +Currently, a typealias that references a value on its enclosing module will break if used in another module. + +.myModule.pkl +[source,pkl] +---- +typealias StartsWithFoo = String(startsWith(foo)) + +foo = "foo" +---- + +[source,pkl] +---- +import "myModule.pkl" + +myStr: StartsWithFoo = "fooey" +---- + +This results in error: + +[source] +---- +–– Pkl Error –– +Cannot find property `foo`. + +1 | typealias StartsWithFoo = String(startsWith(foo)) +---- + +This is a language bug that has been fixed. + +In the process of fixing this bug, we realized that the rules around variable resolution within typealiases were problematic. +Typealiases are meant to be statically defined, and shouldn't be able to see properties that can be late-bound. +Thus, a new rule is introduced: a typealias can only reference properties/methods that are `const`. + +This is a breaking change. To read more about this breakage and remediation steps, reference <>. + == Noteworthy [small]#🎶# Ready when you need them. -.XXX -[%collapsible] -==== -XXX -==== +[[pkldoc-improvements]] +=== Pkldoc improvements + +The following improvements have been made to xref:pkl-doc:index.adoc[Pkldoc]: + +1. The documentation for the standard library no longer shows dependent packages, because every package implicitly depends on the standard library (https://github.com/apple/pkl/pull/503[#503]). +2. If the standard library exists in the package list, it is shown first (https://github.com/apple/pkl/pull/165[#165]). +3. Fewer characters are percent-encoded. For example, the `(` and `)` characters are no longer percent-encoded (https://github.com/apple/pkl/pull/489[#489]). + +[[standard-library-changes]] +=== Standard library changes (https://github.com/apple/pkl/pull/506[#506]) + +To support <>, several changes have been made to the standard library. + +* Module `pkl.settings` has new property `http`. +* class `EvaluatorSettings` originally in `pkl.Project` has been moved to its own module. +For backwards compatibility, `pkl.Project` now has a `typealias EvaluatorSettings` pointing to the new module, but it is marked `@Deprecated`. + +=== Java API Changes + +[[http-java-client]] +==== HTTP Java Client (https://github.com/apple/pkl/pull/217[#217], https://github.com/apple/pkl/pull/295[#295], https://github.com/apple/pkl/pull/506[#506], https://github.com/apple/pkl/pull/518[#518]) + +A new Java API is introduced, named `org.pkl.core.http.HttpClient`. +This interface provides the ability to manage how Pkl makes HTTP(S) calls, including how it deals with CA certificates, as well as proxies. + +This client can be passed to Pkl's evaluator using `EvaluatorBuilder` for users of pkl-core, and `ConfigEvaluatorBuilder` for users of pkl-config-java or pkl-config-kotlin. + +[[http-module-key-factory]] +==== New HTTP ModuleKeyFactory (https://github.com/apple/pkl/pull/495[#495]) + +A new module key factory for HTTP(S) modules has been added, and can be built with `org.pkl.core.ModuleKeyFactories#http`. + +The preconfigured evaluator (`org.pkl.core.EvaluatorBuilder#preconfigured`) includes this module key. +Users that build their own evaluator from scratch should add this module key factory if HTTP(S) modules are needed. + +Example: + +[source,diff] +---- + import org.pkl.core.EvaluatorBuilder; + import org.pkl.core.module.ModuleKeyFactories; + + var evaluator = EvaluatorBuilder.unconfigured() ++ .addModuleKeyFactory(ModuleKeyFactories.http) // <1> + .build(); +---- +<1> Add `ModuleKeyFactories.http` to the set of module key factories used by this evaluator. + +If this module key factory is not added, Pkl may still make HTTP(S) requests if `ModuleKeyFactories.genericUrl` is included. +However, this bypasses proxy and CA certificate settings. + +[[pkl-executor-changes]] +==== `pkl-executor` changes (https://github.com/apple/pkl/pull/217[#217], https://github.com/apple/pkl/pull/518[#518]) + +A new set of parameters are now available to `org.pkl.executor.Executor`. +These new parameters are exposed by `org.pkl.executor.spi.v1.ExecutorSpiOptions2`. + +The new parameters are: + +* `certificateFiles`: A set of CA certificate files to trust when making HTTPS requests. +* `certificateBytes`: A set of PEM-encoded CA certificate bytes to trust when making HTTPS requests. +* `testPort`: An option that is used for internal testing only. + +These options are ignored when using a Pkl distribution whose version is lower than 0.26.0. + +[[message-passing-api-changes]] +=== Message passing API changes (https://github.com/apple/pkl/pull/506[#506], https://github.com/apple/pkl/pull/518[#518]) + +A new property, `http`, is added to xref:bindings-specification:message-passing-api.adoc#create-evaluator-request[Create Evaluator Request]. + +This allows for the configuration of Pkl's HTTP proxy, as well as CA certificates. + +[[rename-codegen-classes]] +=== Ability to rename classes produced by Java/Kotlin code generators (https://github.com/apple/pkl/pull/499[#499]) + +The Java and Kotlin code generators have a new option that allows users to change the name of Java/Kotlin classes that get produced during code generation. + +The CLIs have a new flag, `--rename`, and the Gradle plugin receives a similarly named property called `renames`. + +This option accepts a map from an old prefix to a new prefix, where longer prefixes have higher precedence than shorter prefixes. + +For example, when generating `module foo.Bar`, specifying `--rename foo.=com.foo.` will cause the Java/Kotlin code generators to emit package `com.foo`, and class `Bar`. == Breaking Changes [small]#💔# Things to watch out for when upgrading. -.XXX -[%collapsible] -==== -XXX -==== +[[typealiases-are-treated-as-const]] +=== Typealiases are treated as `const` (https://github.com/apple/pkl/pull/516[#516]) -== Work In Progress [small]#🚆# +Typealiases are types that can stand in for another type declaration. -They missed the train but deserve a mention. +The aliased type can have constraints, where these constraints can reference values defined on the enclosing module. -.XXX -[%collapsible] -==== -XXX -==== +.baseModule.pkl +[source,pkl] +---- +typealias MyValue = Any(isValid) // <1> + +isValid = true +---- +<1> `isValid` is defined on the enclosing module. + +One problem with this is that typealiases are meant to be statically defined. +Like classes, typealiases should not be changed by amending its enclosing module. + +[source,pkl] +---- +amends "baseModule.pkl" + +isValid = false // <1> +---- +<1> Despite this amended value, `typealias MyValue` should still stand for `Any(true)`. + +To have clearer semantics, a new rule is introduced: referenced members on the enclosing module must be `const`. +Effectively, a typealias is treated as if it is also a `const` member. + +To fix the above typealias, the `const` modifier should be added to `isValid`. + +[source,diff] +---- + typealias MyValue = Any(isValid) + +-isValid = true ++const isValid = true +---- + +It might not always be valid to add the `const` modifier. +For example, this property may be overwritten in a downstream module, so adding the `const` modifier this would break that module. +In these cases, another fix is to self-import the enclosing module. +This works because import declarations introduce values that are implicitly marked `const`. + +.baseModule.pkl +[source,diff] +---- ++import "baseModule.pkl" // <1> ++ +-typealias MyValue = Any(isValid) ++typealias MyValue = Any(baseModule.isValid) + + isValid = true +---- +<1> Self import + +This change aligns with the behavior of class and annotation bodies. + +To read more about the rationale behind this change, consult https://github.com/apple/pkl-evolution/blob/main/spices/SPICE-0007-const-checks-in-typealiases.adoc[SPICE-0007]. + +[[expanded-dependency-notation-uris]] +=== Expanded dependency notation URIs (https://github.com/apple/pkl/pull/486[#486]) + +Currently, the declaration `import "@foo/bar.pkl"` is treated as the import of a dependency named `foo`, but _only_ when declared within file-based and package-based modules. +In an HTTP-based module, for example, the above import is treated as "bar.pkl inside directory @foo". + +To <>, such declarations are treated as dependency notation in all modules, and will fail with error "Cannot find dependency". + +Any import/reads that are intentionally relative-path imports will need to be updated to be prefixed with `./`. + +Example: + +[source,diff] +---- +-import "@bar/foo.pkl" ++import "./@bar/foo.pkl" +---- + +[[minimum-java-version-bump]] +=== Minimum Java version bumped to Java 17 (https://github.com/apple/pkl/pull/439[#439]) + +The minimum Java version for Pkl has been bumped to Java 17. + +This means that when running the xref:pkl-cli:index.adoc#java-executable[jpkl] CLI, the installed `java` is expected to be Java 17 or higher. +This also means that users of the JVM libraries need to be on at least Java 17 or higher. + +[[minimum-gradle-version-bump]] +=== Gradle plugin minimum version bump (https://github.com/apple/pkl/pull/454[#454]) + +The minimum Gradle version for the xref:main:pkl-gradle:index.adoc[Gradle plugin] is now 8.1. + +[[path-encoding-changes]] +=== Path encoding changes (https://github.com/apple/pkl/pull/489[#489]) + +In order to support Windows, the output of some Pkl tools have unsafe characters encoded in a special format. + +On Windows, the characters `<`, `>`, `:`, `"`, `\`, `|`, `?`, and `*` are reserved and cannot exist in a filename. +Additionally, the ASCII control character code points `0x0` through `0x1f` are also illegal. + +These characters are encoded by wrapping their hexadecimal code point value in parentheses. +For example, the character `:` is encoded as `(3a)`. + +In some scenarios, files that get written to disk will be encoded. +These are: + +* Files generated by Pkldoc. +* `*.kt` files produced by the Kotlin code generator. +* Packages written to the cache directory. + +To learn more about this design, consult https://github.com/apple/pkl-evolution/blob/main/spices/SPICE-0003-windows-safe-paths.adoc[SPICE-0003]. + +==== Pkldoc links changes + +The links generated by Pkldoc have changed. + +For example, a module called `module `foo/package-1` to `/package-2`. + +If Pkl's dependencies are vendored within a repository, these dependencies will need to be re-vendored. + +=== Java API Breaking Changes + +The following Java APIs have breaking changes: + +|=== +|Class/method | Breaking change + +|`org.pkl.cli.commands.CliDownloadPackageCommand` +|Renamed to `org.pkl.cli.commands.CliPackageDownloader` + +|`org.pkl.cli.commands.CliAbstractProjectCommand` +|Renamed to `org.pkl.cli.commands.CliProjectCommand` + +|`org.pkl.config.java.InvalidMappingException` +|Fields `pklName` and `javaName` are now `private`. + +|`org.pkl.core.packages.PackageResolver#getInstance` +|New parameter `httpClient` added + +|`org.pkl.core.repl.ReplServer.ReplServer` +|New parameter `httpClient` added + +|`org.pkl.commons.cli.CliBaseOptions` +|New parameters `testPort`, `httpProxy`, `httpNoProxy` added +|=== + +[[standard-library-breaking-changes]] +=== Standard library breaking changes (https://github.com/apple/pkl/pull/506[#506]) + +Class `pkl.Project.EvaluatorSettings` has been removed. +A new (deprecated) typealias is added that points to new module `pkl.EvaluatorSettings`. + +[[type-checked-settings-file]] +=== Type-checked settings file (https://github.com/apple/pkl/pull/477[#477]) + +The xref:pkl-cli:index.adoc#settings-file[Settings file] is a way to control the behavior of the Pkl CLI. +This module is expected to `amends "pkl:settings"`, but this behavior was not checked. + +In 0.26, it is an error if the settings module neither amends `"pkl:settings"`, nor set its `output.value` to an instance of the settings module. + +[[empty-directories-excluded-from-packaging]] +=== Empty directories excluded from packaging (https://github.com/apple/pkl/pull/330[#330]) + +Currently, the `pkl project package` command will bundle empty directories into the resulting ZIP file. + +In version 0.26, this has been changed to exclude these directories. +This means that the packages can produce a _different_ checksum if there are any empty directories. + +This does not break the usage of existing packages, and does not affect compatibility of new packages used with older Pkl 0.25. + +However, this can break certain workflows. +The `pkl project package` command runs a publish check, to determine if a package has already been published but with a different checksum. +When upgrading, users might encounter an error message like the following: + +[source] +---- +-- Pkl Error -- +Package `package://example.com/foo@1.0.0` was already published with different contents. +---- + +To mitigate, the package's version needs to be bumped, even if package contents have not changed. + +== Miscellaneous [small]#🐸# + +The following changes have been made that are not new features, nor breaking changes. + +* Pkl's user-agent header for HTTP requests has been tweaked to add a semicolon (https://github.com/apple/pkl/pull/221[#221]). Here is an example difference: ++ +Before: `Pkl/0.26 (macOS native)` + +After: `Pkl/0.26 (macOS; native)` +* Documentation improvements (https://github.com/apple/pkl/pull/120[#120], https://github.com/apple/pkl/pull/121[#121], https://github.com/apple/pkl/pull/142[#142], https://github.com/apple/pkl/pull/121[#121], https://github.com/apple/pkl/pull/337[#337], https://github.com/apple/pkl/pull/341[#341], https://github.com/apple/pkl/pull/372[#372], https://github.com/apple/pkl/pull/386[#386], https://github.com/apple/pkl/pull/391[#391], https://github.com/apple/pkl/pull/397[#397], https://github.com/apple/pkl/pull/422[#422], https://github.com/apple/pkl/pull/436[#436], https://github.com/apple/pkl/pull/469[#469], https://github.com/apple/pkl/pull/484[#484], https://github.com/apple/pkl/pull/485[#485], https://github.com/apple/pkl/pull/[#491]). +* Optimization: `const` access is checked when variables are resolved, instead of every time the variable is accessed (https://github.com/apple/pkl/pull/438[#438]). +* Optimization: use logical AND instead of bitwise AND when comparing numbers (https://github.com/apple/pkl/pull/102[#102]). +* Mark Java classes `final` (https://github.com/apple/pkl/pull/458[#458]). +* Migrate code to newer JDK17 features, and clean up existing Java code (https://github.com/apple/pkl/pull/451[#451], https://github.com/apple/pkl/pull/458[#458], https://github.com/apple/pkl/pull/512[#512]). +* Improve rendering of string values within generated `.pkl-expected.pcf` files when running `pkl test` (https://github.com/apple/pkl/pull/416[#416]). +* Improve performance of loading Pkl's built-in CA certificates (https://github.com/apple/pkl/pull/518[#518]). + +== Bug Fixes [small]#🐜# + +The following bugs have been fixed. + +* `Collection#sortWith` produces un-sorted output (https://github.com/apple/pkl/pull/394[#394]). +* Property `typedType` in module `pkl.reflect` reflects upon `Type`, instead of `Typed` (https://github.com/apple/pkl/pull/426[#426]). +* `const` members can be assigned to when via an object spread (https://github.com/apple/pkl/pull/428[#428]). +* Relative globbed reads resolve to the same value in different modules (https://github.com/apple/pkl/pull/449[#449]). +* Performance bug: globbed imports and globbed reads expand to an unbounded number of root nodes (https://github.com/apple/pkl/pull/449[#449]). +* Relative globbed imports within a package match no modules (https://github.com/apple/pkl/pull/496[#496]). +* Constraints within typealiases resolve to the wrong values (https://github.com/apple/pkl/pull/144[#144]). +* Members of `pkl.reflect` cannot be rendered (https://github.com/apple/pkl/pull/170[#170], https://github.com/apple/pkl/pull/470[#470]). +* Throws `NullPointerException` if "List Resources Response" or "List Modules Response" messages contain both null `pathElements` and `error` (https://github.com/apple/pkl/pull/480[#480]). +* Classes of `com.oracle.truffle` are not shaded in pkl-config-java-all and pkl-tools (https://github.com/apple/pkl/pull/238[#238]). +* Throws `PklBugException` when running publish check on an invalid URL (https://github.com/apple/pkl/pull/441[#441]). == Contributors [small]#🙏# We would like to thank the contributors to this release (in alphabetical order): -* XXX +* https://github.com/flyinprogrammer[@flyinprogrammer] +* https://github.com/fumiya-kume[@fumiya-kume] +* https://github.com/garysassano[@garysassano] +* https://github.com/HT154[@HT154] +* https://github.com/hoxell[@hoxell] +* https://github.com/jw-y[@jw-y] +* https://github.com/KushalP[@KushalP] +* https://github.com/lilyball[@lilyball] +* https://github.com/luuvish[@luuvish] +* https://github.com/Malix-off[@Malix-off] +* https://github.com/manuelsblanco[@manuelsblanco] +* https://github.com/MarkSRobinson[@MarkSRobinson] +* https://github.com/mitchcapper[@mitchcapper] +* https://github.com/mrs1669[@mrs1669] +* https://github.com/nirinchev[@nirinchev] +* https://github.com/raj-j-shah[@raj-j-shah] +* https://github.com/sgammon[@sgammon] +* https://github.com/StefMa[@StefMa] +* https://github.com/stefanobaghino[@stefanobaghino] +* https://github.com/TimeTravelPenguin[@TimeTravelPenguin] +* https://github.com/TheFruxz[@TheFruxz] +* https://github.com/translatenix[@translatenix] +* https://github.com/zihluwang[@zihluwang] -== Closed Radars [small]#🔒# - -XXX Radars down, Inbox Zero in sight ... - -[smaller] -. XXX (https://github.com/apple/pkl/issues/new[XXX]) +A special thank-you goes out to https://github.com/translatenix[@translatenix]! +They submitted multiple bug fixes, improved the quality of the codebase, and provided HTTP improvements. diff --git a/docs/modules/release-notes/pages/changelog.adoc b/docs/modules/release-notes/pages/changelog.adoc index 5dd80efd..26542114 100644 --- a/docs/modules/release-notes/pages/changelog.adoc +++ b/docs/modules/release-notes/pages/changelog.adoc @@ -2,7 +2,7 @@ include::ROOT:partial$component-attributes.adoc[] [[release-0.26.0]] -== 0.26.0 +== 0.26.0 (2024-06-17) xref:0.26.adoc[Release notes]