diff --git a/bin/core/src/api/execute/build.rs b/bin/core/src/api/execute/build.rs index 200a80b89..23edd9515 100644 --- a/bin/core/src/api/execute/build.rs +++ b/bin/core/src/api/execute/build.rs @@ -79,7 +79,9 @@ impl Resolve for State { let _action_guard = action_state.update(|state| state.building = true)?; - build.config.version.increment(); + if build.config.auto_increment_version { + build.config.version.increment(); + } update.version = build.config.version; update_update(update.clone()).await?; diff --git a/bin/migrator/src/legacy/v0/build.rs b/bin/migrator/src/legacy/v0/build.rs index 0cc993c7f..0416c9add 100644 --- a/bin/migrator/src/legacy/v0/build.rs +++ b/bin/migrator/src/legacy/v0/build.rs @@ -212,6 +212,7 @@ impl TryFrom for monitor_client::entities::build::Build { builder_id: String::new(), skip_secret_interp: value.skip_secret_interp, version: value.version.into(), + auto_increment_version: true, image_name: Default::default(), image_tag: Default::default(), git_provider: String::from("github.com"), diff --git a/bin/migrator/src/legacy/v1_11/build.rs b/bin/migrator/src/legacy/v1_11/build.rs index 320f09d03..0782c8646 100644 --- a/bin/migrator/src/legacy/v1_11/build.rs +++ b/bin/migrator/src/legacy/v1_11/build.rs @@ -139,6 +139,7 @@ impl From minor: value.version.minor, patch: value.version.patch, }, + auto_increment_version: true, image_name: Default::default(), image_tag: Default::default(), git_provider: String::from("github.com"), diff --git a/bin/migrator/src/legacy/v1_6/build.rs b/bin/migrator/src/legacy/v1_6/build.rs index 61142c288..e0344059a 100644 --- a/bin/migrator/src/legacy/v1_6/build.rs +++ b/bin/migrator/src/legacy/v1_6/build.rs @@ -124,6 +124,7 @@ impl From minor: value.version.minor, patch: value.version.patch, }, + auto_increment_version: true, image_name: Default::default(), image_tag: Default::default(), git_provider: String::from("github.com"), diff --git a/client/core/rs/src/entities/build.rs b/client/core/rs/src/entities/build.rs index 146079a90..be559109a 100644 --- a/client/core/rs/src/entities/build.rs +++ b/client/core/rs/src/entities/build.rs @@ -92,6 +92,13 @@ pub struct BuildConfig { #[builder(default)] pub version: Version, + /// Whether to automatically increment the patch on every build. + /// Default is `true` + #[serde(default = "default_auto_increment_version")] + #[builder(default = "default_auto_increment_version()")] + #[partial_default(default_auto_increment_version())] + pub auto_increment_version: bool, + /// An alternate name for the image pushed to the repository. /// If this is empty, it will use the build name. /// @@ -256,6 +263,10 @@ impl BuildConfig { } } +fn default_auto_increment_version() -> bool { + true +} + fn default_git_provider() -> String { String::from("github.com") } @@ -286,6 +297,7 @@ impl Default for BuildConfig { builder_id: Default::default(), skip_secret_interp: Default::default(), version: Default::default(), + auto_increment_version: default_auto_increment_version(), image_name: Default::default(), image_tag: Default::default(), git_provider: default_git_provider(), diff --git a/client/core/ts/src/types.ts b/client/core/ts/src/types.ts index 014f8ef65..b7b92d60d 100644 --- a/client/core/ts/src/types.ts +++ b/client/core/ts/src/types.ts @@ -374,6 +374,11 @@ export interface BuildConfig { builder_id?: string; /** The current version of the build. */ version?: Version; + /** + * Whether to automatically increment the patch on every build. + * Default is `true` + */ + auto_increment_version: boolean; /** * An alternate name for the image pushed to the repository. * If this is empty, it will use the build name. diff --git a/frontend/src/components/config/index.tsx b/frontend/src/components/config/index.tsx index 7b746bb6e..6580333ca 100644 --- a/frontend/src/components/config/index.tsx +++ b/frontend/src/components/config/index.tsx @@ -284,8 +284,8 @@ export const ConfigAgain = < case "string": return ( set({ [key]: value } as Partial)} disabled={disabled} diff --git a/frontend/src/components/config/util.tsx b/frontend/src/components/config/util.tsx index 415f415e2..639dfe705 100644 --- a/frontend/src/components/config/util.tsx +++ b/frontend/src/components/config/util.tsx @@ -97,6 +97,9 @@ export const ConfigInput = ({ placeholder, onChange, onBlur, + className, + inputLeft, + inputRight, }: { label: string; boldLabel?: boolean; @@ -106,17 +109,36 @@ export const ConfigInput = ({ placeholder?: string; onChange?: (value: string) => void; onBlur?: (value: string) => void; + className?: string; + inputLeft?: ReactNode; + inputRight?: ReactNode; }) => ( - onChange && onChange(e.target.value)} - onBlur={(e) => onBlur && onBlur(e.target.value)} - placeholder={placeholder} - disabled={disabled} - /> + {inputLeft || inputRight ? ( +
+ {inputLeft} + onChange && onChange(e.target.value)} + onBlur={(e) => onBlur && onBlur(e.target.value)} + placeholder={placeholder} + disabled={disabled} + /> + {inputRight} +
+ ) : ( + onChange && onChange(e.target.value)} + onBlur={(e) => onBlur && onBlur(e.target.value)} + placeholder={placeholder} + disabled={disabled} + /> + )}
); @@ -250,7 +272,7 @@ export const ProviderSelector = ({ onBlur={() => setCustomMode(false)} onKeyDown={(e) => { if (e.key === "Enter") { - setCustomMode(false) + setCustomMode(false); } }} autoFocus diff --git a/frontend/src/components/resources/build/config.tsx b/frontend/src/components/resources/build/config.tsx index 15ea74a5a..9a97278f7 100644 --- a/frontend/src/components/resources/build/config.tsx +++ b/frontend/src/components/resources/build/config.tsx @@ -2,6 +2,7 @@ import { Config } from "@components/config"; import { AccountSelectorConfig, AddExtraArgMenu, + ConfigInput, ConfigItem, ImageRegistryConfig, InputList, @@ -68,49 +69,24 @@ export const BuildConfig = ({ label: "Version", labelHidden: true, components: { - version: (version, set) => { - const { major, minor, patch } = version ?? { - major: 0, - minor: 0, - patch: 0, - }; + version: (_version, set) => { + const version = + typeof _version === "object" + ? `${_version.major}.${_version.major}.${_version.patch}` + : _version; return ( - -
-
- v{major}.{minor}.{patch} -
- {!disabled && ( - - )} - {!disabled && ( - - )} -
-
+ placeholder="0.0.0" + value={version} + onChange={(version) => set({ version: version as any })} + disabled={disabled} + boldLabel + /> ); }, + auto_increment_version: true, }, }, {