From dc4a3da0cd97aa3e66e2cec950447a4155615f42 Mon Sep 17 00:00:00 2001 From: AlexSanchez-bit Date: Wed, 7 Jan 2026 11:54:49 -0500 Subject: [PATCH] feat[installer](version): added --prerelease command to install latest pre release versions --- installer/config/const.go | 1 + installer/main.go | 8 +++++ installer/updater/versions.go | 55 ++++++++++++++++++++++++++++++----- 3 files changed, 56 insertions(+), 8 deletions(-) diff --git a/installer/config/const.go b/installer/config/const.go index 6ed360efe..b152300ed 100644 --- a/installer/config/const.go +++ b/installer/config/const.go @@ -14,6 +14,7 @@ const ( HealthEndpoint = "/api/v1/health" LogCollectorEndpoint = "/api/v1/logcollectors/upload" GetLatestVersionEndpoint = "/api/v1/versions/latest" + GetLatestPreReleaseVersionsEndpoint = "/api/v1/versions/latest-prerelease" GitHubReleasesURL = "https://github.com/utmstack/UTMStack/releases/download/%s/installer" diff --git a/installer/main.go b/installer/main.go index 6a346514c..15708e79b 100644 --- a/installer/main.go +++ b/installer/main.go @@ -48,6 +48,14 @@ func main() { os.Exit(1) } + case "--prerelease": + updater.PreReleaseVersion=true + err := Install("") + if err != nil { + fmt.Printf("\nerror installing UTMStack: %v", err) + os.Exit(1) + } + default: help() } diff --git a/installer/updater/versions.go b/installer/updater/versions.go index 45948c29d..aaa689f4e 100644 --- a/installer/updater/versions.go +++ b/installer/updater/versions.go @@ -19,6 +19,7 @@ var ( version = VersionFile{} versionOnce sync.Once SpecificVersion string // Version specified via command line flag + PreReleaseVersion bool = false ) func GetVersion() (VersionFile, error) { @@ -31,15 +32,29 @@ func GetVersion() (VersionFile, error) { version.Changelog = "" version.Edition = "community" } else if config.ConnectedToInternet { - latestVersion, errFetch := fetchLatestVersionFromCM() - if errFetch != nil { - config.Logger().Info("Could not fetch latest version from CM, using installer version: %v", errFetch) - version.Version = config.INSTALLER_VERSION - version.Changelog = "" - } else { - version.Version = latestVersion.Version - version.Changelog = latestVersion.Changelog + if PreReleaseVersion{ + latestVersion, errFetch := fetchLatestPreReleaseVersionFromCM() + if errFetch != nil { + config.Logger().Info("Could not fetch latest pre release version from CM, using installer version: %v", errFetch) + version.Version = config.INSTALLER_VERSION + version.Changelog = "" + } else { + version.Version = latestVersion.Version + version.Changelog = latestVersion.Changelog + } + }else{ + + latestVersion, errFetch := fetchLatestVersionFromCM() + if errFetch != nil { + config.Logger().Info("Could not fetch latest version from CM, using installer version: %v", errFetch) + version.Version = config.INSTALLER_VERSION + version.Changelog = "" + } else { + version.Version = latestVersion.Version + version.Changelog = latestVersion.Changelog + } } + version.Edition = "community" } else { versionFromTar, errB := ExtractVersionFromFolder(config.ImagesPath) @@ -241,3 +256,27 @@ func fetchLatestVersionFromCM() (*VersionDTO, error) { return &resp, nil } + + + +func fetchLatestPreReleaseVersionFromCM() (*VersionDTO, error) { + url := fmt.Sprintf("%s%s", config.GetCMServer(), config.GetLatestPreReleaseVersionsEndpoint) + + resp, status, err := utils.DoReq[VersionDTO]( + url, + nil, + http.MethodGet, + nil, + nil, + ) + + if err != nil { + return nil, fmt.Errorf("error fetching latest version: %v", err) + } + + if status != http.StatusOK { + return nil, fmt.Errorf("unexpected status code: %d", status) + } + + return &resp, nil +}