Skip to content
This repository was archived by the owner on Sep 26, 2025. It is now read-only.

Commit 90fc807

Browse files
committed
fix(ci): install/upgrade cli from nhost/nhost version
1 parent af7e8c8 commit 90fc807

File tree

3 files changed

+55
-20
lines changed

3 files changed

+55
-20
lines changed

cmd/software/upgrade.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"os"
66
"runtime"
7+
"strings"
78

89
"github.com/nhost/cli/clienv"
910
"github.com/nhost/cli/software"
@@ -42,7 +43,14 @@ func commandUpgrade(cCtx *cli.Context) error {
4243

4344
ce.Infoln("Upgrading to %s...", latest.TagName)
4445

45-
want := fmt.Sprintf("cli-%s-%s-%s.tar.gz", latest.TagName, runtime.GOOS, runtime.GOARCH)
46+
version := latest.TagName
47+
s := strings.Split(latest.TagName, "@")
48+
49+
if len(s) == 2 { //nolint:mnd
50+
version = s[1]
51+
}
52+
53+
want := fmt.Sprintf("cli-%s-%s-%s.tar.gz", version, runtime.GOOS, runtime.GOARCH)
4654

4755
var url string
4856

get.sh

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ NC='\033[0m'
1818
# basic variables
1919
INSTALL_PATH=${INSTALL_PATH:-"/usr/local/bin"}
2020
NEED_SUDO=${NEED_SUDO:-1}
21-
REPO="nhost/cli"
21+
REPO="nhost/nhost"
2222

2323
# check for existing installation
2424
hasCli=$(which nhost)
@@ -38,12 +38,13 @@ if [ "$?" = "1" ]; then
3838
fi
3939

4040
# get release version
41-
release=${1:-latest}
42-
log "Getting $release version..."
43-
if [[ "$release" == "latest" ]]; then
44-
version=$(curl --silent "https://api.github.com/repos/$REPO/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
41+
version=${1:-latest}
42+
log "Getting $version version..."
43+
if [[ "$version" == "latest" ]]; then
44+
release=$(curl --silent https://api.github.com/repos/nhost/nhost/releases\?per_page=100 | grep tag_name | grep \"cli\@ | head -n 1 | sed 's/.*"tag_name": "\([^"]*\)".*/\1/')
45+
version=$( echo $release | sed 's/.*@//')
4546
else
46-
version=$(curl --silent "https://api.github.com/repos/nhost/cli/tags" | grep "name" | sed -E 's/.*"([^"]+)".*/\1/' | grep "^$release$")
47+
release="cli@$release"
4748
fi
4849

4950
# check version exists
@@ -96,14 +97,15 @@ suffix="-${platform}-${arch}"
9697

9798
if [[ "$platform" != 'windows' ]]; then
9899
extension=".tar.gz"
99-
else
100+
else
100101
extension='.zip'
101102
fi
102103

103104
# variables for install
104105
targetFile="cli-$version$suffix$extension"
105106

106-
url="https://github.com/${REPO}/releases/download/${version}/${targetFile}"
107+
encodedRelease=$(echo $release | sed 's/@/%40/g')
108+
url="https://github.com/${REPO}/releases/download/${encodedRelease}/${targetFile}"
107109

108110
# remove previous download
109111
if [ -e $targetFile ]; then
@@ -119,7 +121,7 @@ try chmod +x $targetFile
119121

120122
if [[ "$platform" != 'windows' ]]; then
121123
try tar -xvf $targetFile
122-
else
124+
else
123125
try unzip $targetFile
124126
fi
125127

software/sofware.go

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"fmt"
1010
"io"
1111
"net/http"
12+
"strings"
1213

1314
"golang.org/x/mod/semver"
1415
)
@@ -25,13 +26,45 @@ func NewManager() *Manager {
2526
}
2627
}
2728

29+
func (mgr *Manager) filterReleases(releases Releases, version string) Releases {
30+
if !strings.HasPrefix(version, "v") {
31+
version = "v" + version
32+
}
33+
34+
// filter pre-releases and older releases
35+
r := make(Releases, 0, len(releases))
36+
for _, release := range releases {
37+
s := strings.Split(release.TagName, "@")
38+
if len(s) != 2 { //nolint:mnd
39+
continue
40+
}
41+
42+
releaseName := s[0]
43+
releaseVersion := s[1]
44+
45+
if !strings.HasPrefix(releaseVersion, "v") {
46+
releaseVersion = "v" + releaseVersion
47+
}
48+
49+
if releaseName != "cli" ||
50+
release.Prerelease ||
51+
semver.Compare(version, releaseVersion) >= 0 {
52+
continue
53+
}
54+
55+
r = append(r, release)
56+
}
57+
58+
return r
59+
}
60+
2861
func (mgr *Manager) GetReleases(ctx context.Context, version string) (Releases, error) {
2962
var releases Releases
3063

3164
req, err := http.NewRequestWithContext(
3265
ctx,
3366
http.MethodGet,
34-
"https://api.github.com/repos/nhost/cli/releases?per_page=100",
67+
"https://api.github.com/repos/nhost/nhost/releases?per_page=100",
3568
nil,
3669
)
3770
if err != nil {
@@ -62,15 +95,7 @@ func (mgr *Manager) GetReleases(ctx context.Context, version string) (Releases,
6295
}
6396

6497
// filter pre-releases and older releases
65-
r := make(Releases, 0, len(releases))
66-
for _, release := range releases {
67-
switch {
68-
case release.Prerelease:
69-
case semver.Compare(version, release.TagName) >= 0:
70-
default:
71-
r = append(r, release)
72-
}
73-
}
98+
r := mgr.filterReleases(releases, version)
7499

75100
mgr.cache = r
76101

0 commit comments

Comments
 (0)