Skip to content

Commit afccabc

Browse files
yuichi10catto
authored andcommitted
fix(1163): Reduce api call (#13)
1 parent a47692a commit afccabc

File tree

3 files changed

+36
-17
lines changed

3 files changed

+36
-17
lines changed

screwdriver.yaml

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1-
workflow:
2-
- deploy
3-
41
shared:
52
image: golang
63
environment:
74
GOPATH: /sd/workspace
85

96
jobs:
107
main:
8+
requires: [~commit, ~pr]
119
steps:
1210
- get: go get -t ./...
1311
- vet: go vet ./...
@@ -16,6 +14,7 @@ jobs:
1614
- build: go build -a -o sd-step
1715

1816
deploy:
17+
requires: main
1918
steps:
2019
- setup-ci: git clone https://github.com/screwdriver-cd/toolbox.git ci
2120
- get: go get -t ./...

sd-step.go

+33-13
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"errors"
55
"fmt"
66
"io"
7+
"io/ioutil"
78
"os"
89
"os/exec"
910
"os/user"
@@ -77,16 +78,22 @@ func execHab(pkgName string, pkgVersion string, habChannel string, command []str
7778
return verErr
7879
}
7980

80-
installCmd := []string{habPath, "pkg", "install", pkg, "-c", habChannel, ">/dev/null"}
81-
if u, userErr := user.Current(); userErr != nil || u.Uid != "0" {
82-
// execute sudo command if not root user
83-
installCmd = append([]string{"sudo"}, installCmd...)
84-
}
81+
// Check if the desired version of the package exists
82+
checkCmd := habPath + " pkg path " + pkg + " >/dev/null 2>&1"
83+
checkCmdResult := runCommand(checkCmd, output)
84+
85+
if checkCmdResult != nil {
86+
installCmd := []string{habPath, "pkg", "install", pkg, "-c", habChannel, ">/dev/null"}
87+
if u, userErr := user.Current(); userErr != nil || u.Uid != "0" {
88+
// execute sudo command if not root user
89+
installCmd = append([]string{"sudo"}, installCmd...)
90+
}
8591

86-
unwrappedInstallCommand := strings.Join(installCmd, " ")
87-
installErr := runCommand(unwrappedInstallCommand, output)
88-
if installErr != nil {
89-
return installErr
92+
unwrappedInstallCommand := strings.Join(installCmd, " ")
93+
installErr := runCommand(unwrappedInstallCommand, output)
94+
if installErr != nil {
95+
return installErr
96+
}
9097
}
9198

9299
execCmd := []string{habPath, "pkg", "exec", pkg}
@@ -109,7 +116,15 @@ func getPackageVersion(depot hab.Depot, pkgName, pkgVerExp string, habChannel st
109116

110117
foundVersions, err := depot.PackageVersionsFromName(pkgName, habChannel)
111118
if err != nil {
112-
return "", fmt.Errorf("Failed to fetch package versions: %v", err)
119+
fmt.Fprintf(os.Stderr, "ERROR: Unable to access to Habitat depot API. %v\n"+
120+
"Trying to fetch versions from installed packages...\n", err)
121+
dirs, err := ioutil.ReadDir("/hab/pkgs/" + pkgName)
122+
if err != nil {
123+
return "", errors.New("The specified version not found")
124+
}
125+
for _, dir := range dirs {
126+
foundVersions = append(foundVersions, dir.Name())
127+
}
113128
}
114129

115130
var versions []*semver.Version
@@ -143,6 +158,8 @@ func main() {
143158

144159
var pkgVerExp string
145160
var habChannel string
161+
var pkgVersion string
162+
var err error
146163

147164
app := cli.NewApp()
148165
app.Name = "sd-step"
@@ -182,10 +199,13 @@ func main() {
182199
pkgName := c.Args().Get(0)
183200

184201
depot := hab.New(habDepotURL)
185-
pkgVersion, err := getPackageVersion(depot, pkgName, pkgVerExp, habChannel)
186202

187-
if err != nil {
188-
failureExit(fmt.Errorf("Failed to get package version: %v", err))
203+
if pkgVerExp != "" {
204+
pkgVersion, err = getPackageVersion(depot, pkgName, pkgVerExp, habChannel)
205+
206+
if err != nil {
207+
failureExit(fmt.Errorf("Failed to get package version: %v", err))
208+
}
189209
}
190210

191211
err = execHab(pkgName, pkgVersion, habChannel, c.Args().Tail(), os.Stdout)

sd-step_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ func TestGetPackageVersions(t *testing.T) {
146146
foundVersions: []string{"0.0.1", "0.1.0", "1.1.9", "1.2.1", "1.2.2", "1.3.0", "2.0.0"},
147147
expectedVersion: "",
148148
depotError: errors.New("depot error"),
149-
expectedError: errors.New("Failed to fetch package versions: depot error"),
149+
expectedError: errors.New("The specified version not found"),
150150
},
151151
{
152152
versionExpression: "~1.2.0",

0 commit comments

Comments
 (0)