# StartOS Version Bump Guide This document explains how to bump the StartOS version across the entire codebase. ## Overview When bumping from version `X.Y.Z-alpha.N` to `X.Y.Z-alpha.N+1`, you need to update files in multiple locations across the repository. The `// VERSION_BUMP` comment markers indicate where changes are needed. ## Files to Update ### 1. Core Rust Crate Version **File: `core/Cargo.toml`** Update the version string (line ~18): ```toml version = "0.4.0-alpha.15" # VERSION_BUMP ``` **File: `core/Cargo.lock`** This file is auto-generated. After updating `Cargo.toml`, run: ```bash cd core cargo check ``` This will update the version in `Cargo.lock` automatically. ### 2. Create New Version Migration Module **File: `core/src/version/vX_Y_Z_alpha_N+1.rs`** Create a new version file by copying the previous version and updating: ```rust use exver::{PreReleaseSegment, VersionRange}; use super::v0_3_5::V0_3_0_COMPAT; use super::{VersionT, v0_4_0_alpha_14}; // Update to previous version use crate::prelude::*; lazy_static::lazy_static! { static ref V0_4_0_alpha_15: exver::Version = exver::Version::new( [0, 4, 0], [PreReleaseSegment::String("alpha".into()), 15.into()] // Update number ); } #[derive(Clone, Copy, Debug, Default)] pub struct Version; impl VersionT for Version { type Previous = v0_4_0_alpha_14::Version; // Update to previous version type PreUpRes = (); async fn pre_up(self) -> Result { Ok(()) } fn semver(self) -> exver::Version { V0_4_0_alpha_15.clone() // Update version name } fn compat(self) -> &'static VersionRange { &V0_3_0_COMPAT } #[instrument(skip_all)] fn up(self, _db: &mut Value, _: Self::PreUpRes) -> Result { // Add migration logic here if needed Ok(Value::Null) } fn down(self, _db: &mut Value) -> Result<(), Error> { // Add rollback logic here if needed Ok(()) } } ``` ### 3. Update Version Module Registry **File: `core/src/version/mod.rs`** Make changes in **5 locations**: #### Location 1: Module Declaration (~line 57) Add the new module after the previous version: ```rust mod v0_4_0_alpha_14; mod v0_4_0_alpha_15; // Add this ``` #### Location 2: Current Type Alias (~line 59) Update the `Current` type and move the `// VERSION_BUMP` comment: ```rust pub type Current = v0_4_0_alpha_15::Version; // VERSION_BUMP ``` #### Location 3: Version Enum (~line 175) Remove `// VERSION_BUMP` from the previous version, add new variant, add comment: ```rust V0_4_0_alpha_14(Wrapper), V0_4_0_alpha_15(Wrapper), // VERSION_BUMP Other(exver::Version), ``` #### Location 4: as_version_t() Match (~line 233) Remove `// VERSION_BUMP`, add new match arm, add comment: ```rust Self::V0_4_0_alpha_14(v) => DynVersion(Box::new(v.0)), Self::V0_4_0_alpha_15(v) => DynVersion(Box::new(v.0)), // VERSION_BUMP Self::Other(v) => { ``` #### Location 5: as_exver() Match (~line 284, inside #[cfg(test)]) Remove `// VERSION_BUMP`, add new match arm, add comment: ```rust Version::V0_4_0_alpha_14(Wrapper(x)) => x.semver(), Version::V0_4_0_alpha_15(Wrapper(x)) => x.semver(), // VERSION_BUMP Version::Other(x) => x.clone(), ``` ### 4. SDK TypeScript Version **File: `sdk/package/lib/StartSdk.ts`** Update the OSVersion constant (~line 64): ```typescript export const OSVersion = testTypeVersion("0.4.0-alpha.15"); ``` ### 5. Web UI Package Version **File: `web/package.json`** Update the version field: ```json { "name": "startos-ui", "version": "0.4.0-alpha.15", ... } ``` **File: `web/package-lock.json`** This file is auto-generated, but it's faster to update manually. Find all instances of "startos-ui" and update the version field. ## Verification Step ``` make ``` ## VERSION_BUMP Comment Pattern The `// VERSION_BUMP` comment serves as a marker for where to make changes next time: - Always **remove** it from the old location - **Add** the new version entry - **Move** the comment to mark the new location This pattern helps you quickly find all the places that need updating in the next version bump. ## Summary Checklist - [ ] Update `core/Cargo.toml` version - [ ] Create new `core/src/version/vX_Y_Z_alpha_N+1.rs` file - [ ] Update `core/src/version/mod.rs` in 5 locations - [ ] Run `cargo check` to update `core/Cargo.lock` - [ ] Update `sdk/package/lib/StartSdk.ts` OSVersion - [ ] Update `web/package.json` and `web/package-lock.json` version - [ ] Verify all changes compile/build successfully ## Migration Logic The `up()` and `down()` methods in the version file handle database migrations: - **up()**: Migrates the database from the previous version to this version - **down()**: Rolls back from this version to the previous version - **pre_up()**: Runs before migration, useful for pre-migration checks or data gathering If no migration is needed, return `Ok(Value::Null)` for `up()` and `Ok(())` for `down()`. For complex migrations, you may need to: 1. Update `type PreUpRes` to pass data between `pre_up()` and `up()` 2. Implement database transformations in the `up()` method 3. Implement reverse transformations in `down()` for rollback support