BlueOS icon indicating copy to clipboard operation
BlueOS copied to clipboard

frontend: version-chooser: update bootstrap when changing BlueOS to a stable

Open nicoschmdt opened this issue 3 months ago • 1 comments

fix: #2896

Summary by Sourcery

Automatically update the bootstrap version to match semver-stable BlueOS tags without forcing a page reload and make bootstrap reload behavior configurable.

Bug Fixes:

  • Ensure the bootstrap version is updated when switching to a stable BlueOS tag
  • Prevent unconditional page reload after setting the bootstrap version

Enhancements:

  • Add an optional reload parameter to setBootstrapVersion to control window reload
  • Introduce isStable helper to detect semver-compliant stable tags

nicoschmdt avatar Nov 03 '25 17:11 nicoschmdt

Reviewer's guide (collapsed on small PRs)

Reviewer's Guide

Parameterize bootstrap update to avoid redundant reloads, auto-update bootstrap on stable version selection, and add stable-version detection.

Sequence diagram for stable version selection and bootstrap update

sequenceDiagram
  participant User
  participant VersionChooser
  participant Backend
  participant Browser

  User->>VersionChooser: Selects a version (setVersion)
  VersionChooser->>VersionChooser: Checks if tag is stable (isStable)
  alt Tag is stable
    VersionChooser->>Backend: POST /bootstrap/current (setBootstrapVersion, reload=false)
  end
  VersionChooser->>Backend: POST /version/current
  Backend-->>VersionChooser: Responds
  VersionChooser->>VersionChooser: Show success message
  VersionChooser->>Browser: Reload page (if reload=true in setBootstrapVersion)

Class diagram for updated VersionChooser methods

classDiagram
  class VersionChooser {
    +async setBootstrapVersion(version: string, reload = true)
    +async setVersion(args: string | string[])
    +isStable(tag: string): boolean
    +isBeingDeleted(image: Version)
    -updating_bootstrap: boolean
    -deleting: string
  }

  class VCU {
    +isSemVer(tag: string): boolean
  }

  VersionChooser --> VCU: uses

File-Level Changes

Change Details Files
Make bootstrap update reload behavior configurable
  • Added optional reload parameter to setBootstrapVersion (defaulting to true)
  • Conditionally wrapped window.location.reload in a reload check
core/frontend/src/components/version-chooser/VersionChooser.vue
Auto-update bootstrap when switching to stable versions
  • In setVersion, detect stable tags via isStable
  • Invoke setBootstrapVersion(tag, false) before posting new version for stable tags
core/frontend/src/components/version-chooser/VersionChooser.vue
Add isStable helper for semantic-version checks
  • Added isStable method verifying semver format and excluding 'beta' tags
core/frontend/src/components/version-chooser/VersionChooser.vue

Assessment against linked issues

Issue Objective Addressed Explanation
https://github.com/bluerobotics/BlueOS/issues/2896 Automatically update bootstrap when switching to a stable BlueOS version.

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an issue from a review comment by replying to it. You can also reply to a review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull request title to generate a title at any time. You can also comment @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in the pull request body to generate a PR summary at any time exactly where you want it. You can also comment @sourcery-ai summary on the pull request to (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the pull request to resolve all Sourcery comments. Useful if you've already addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull request to dismiss all existing Sourcery reviews. Especially useful if you want to start fresh with a new review - don't forget to comment @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

  • Contact our support team for questions or feedback.
  • Visit our documentation for detailed guides and information.
  • Keep in touch with the Sourcery team by following us on X/Twitter, LinkedIn or GitHub.

sourcery-ai[bot] avatar Nov 03 '25 17:11 sourcery-ai[bot]