From 9751137bec8dae761cea7a8e01ccbe1d1995c8a0 Mon Sep 17 00:00:00 2001 From: Techassi Date: Mon, 26 May 2025 15:16:09 +0200 Subject: [PATCH 1/2] fix(stackable-versioned): Correctly emit kube status attribute --- .../src/codegen/container/struct.rs | 22 ++++++++++++------- .../tests/inputs/k8s/pass/basic.rs | 6 +++++ ..._macros__snapshot_tests__k8s@basic.rs.snap | 9 +++++--- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/crates/stackable-versioned-macros/src/codegen/container/struct.rs b/crates/stackable-versioned-macros/src/codegen/container/struct.rs index e96f9912..cbb428c9 100644 --- a/crates/stackable-versioned-macros/src/codegen/container/struct.rs +++ b/crates/stackable-versioned-macros/src/codegen/container/struct.rs @@ -348,18 +348,24 @@ impl Struct { .then_some(quote! { , namespaced }); let crates = kubernetes_options.crates.to_token_stream(); - // TODO (@Techassi): This struct name should be defined once in a single place instead - // of constructing it in two different places which can lead to de-synchronization. - let status = kubernetes_options - .config_options - .experimental_conversion_tracking - .then(|| { + let status = match ( + kubernetes_options + .config_options + .experimental_conversion_tracking, + &kubernetes_options.status, + ) { + (true, _) => { + // TODO (@Techassi): This struct name should be defined once in a single place instead + // of constructing it in two different places which can lead to de-synchronization. let status_ident = format_ident!( "{struct_ident}StatusWithChangedValues", struct_ident = self.common.idents.kubernetes.as_ident() ); - quote! { , status = #status_ident } - }); + Some(quote! { , status = #status_ident }) + } + (_, Some(status_ident)) => Some(quote! { , status = #status_ident }), + (_, _) => None, + }; let shortnames: TokenStream = kubernetes_options .shortnames diff --git a/crates/stackable-versioned-macros/tests/inputs/k8s/pass/basic.rs b/crates/stackable-versioned-macros/tests/inputs/k8s/pass/basic.rs index 0b6b9bf5..a64ca4c9 100644 --- a/crates/stackable-versioned-macros/tests/inputs/k8s/pass/basic.rs +++ b/crates/stackable-versioned-macros/tests/inputs/k8s/pass/basic.rs @@ -8,6 +8,7 @@ use stackable_versioned::versioned; group = "stackable.tech", singular = "foo", plural = "foos", + status = FooStatus, namespaced, ) )] @@ -26,6 +27,11 @@ pub(crate) struct FooSpec { // --- fn main() {} +#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, schemars::JsonSchema)] +pub struct FooStatus { + is_foo: bool, +} + fn usize_to_u16(input: usize) -> u16 { input.try_into().unwrap() } diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@basic.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@basic.rs.snap index e30c2f3a..aa26c033 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@basic.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@basic.rs.snap @@ -20,7 +20,8 @@ pub(crate) mod v1alpha1 { kind = "Foo", singular = "foo", plural = "foos", - namespaced + namespaced, + status = FooStatus )] pub struct FooSpec { pub baz: bool, @@ -60,7 +61,8 @@ pub(crate) mod v1beta1 { kind = "Foo", singular = "foo", plural = "foos", - namespaced + namespaced, + status = FooStatus )] pub struct FooSpec { pub bah: u16, @@ -102,7 +104,8 @@ pub(crate) mod v1 { kind = "Foo", singular = "foo", plural = "foos", - namespaced + namespaced, + status = FooStatus )] pub struct FooSpec { pub bar: usize, From 365141bfcf233f6619975afcd9de73a0427fce2f Mon Sep 17 00:00:00 2001 From: Techassi Date: Mon, 26 May 2025 15:23:32 +0200 Subject: [PATCH 2/2] chore(stackable-versioned): Add changelog entry --- crates/stackable-versioned/CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/crates/stackable-versioned/CHANGELOG.md b/crates/stackable-versioned/CHANGELOG.md index 47db554d..07238274 100644 --- a/crates/stackable-versioned/CHANGELOG.md +++ b/crates/stackable-versioned/CHANGELOG.md @@ -26,6 +26,8 @@ All notable changes to this project will be documented in this file. ### Fixed +- Fix regression introduced in [#1033]. The `#[kube(status = ...)]` attribute is generated correctly + again ([#1046]). - Correctly handle fields added in later versions ([#1031]). ### Removed @@ -41,6 +43,7 @@ All notable changes to this project will be documented in this file. [#1033]: https://github.com/stackabletech/operator-rs/pull/1033 [#1038]: https://github.com/stackabletech/operator-rs/pull/1038 [#1041]: https://github.com/stackabletech/operator-rs/pull/1041 +[#1046]: https://github.com/stackabletech/operator-rs/pull/1046 ## [0.7.1] - 2025-04-02