This is an automated email from the ASF dual-hosted git repository. msciabarra pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/openserverless-cli.git
commit 0d14d6d7bf7bbb90fc079ed9e153451bc68b8151 Author: Michele Sciabarra <[email protected]> AuthorDate: Mon Aug 5 12:16:47 2024 +0200 patching sh for ops --- .gitignore | 23 ++++++++++---------- .gitmodules | 28 ++++++++++++++++++++++++ .goreleaser.yaml | 3 +++ Taskfile.yml | 2 +- _patches/README.md | 2 +- _patches/awk | 1 + _patches/builtin_extra.go | 15 +++++++------ _patches/envsubst | 1 + _patches/jq | 1 + _patches/patch-sh.sh | 14 +++++++++--- _patches/patch-task.sh | 2 +- _patches/sh | 1 + _patches/task | 1 + _patches/wsk | 1 + _patches/wskdeploy | 1 + go.mod | 2 +- go.sum | 4 ++-- preflight.go | 5 ----- prereq.go | 55 ++++++++++++++++++++++++++++++----------------- prereq_test.go | 2 ++ 20 files changed, 111 insertions(+), 53 deletions(-) diff --git a/.gitignore b/.gitignore index 56b2779..aa81092 100644 --- a/.gitignore +++ b/.gitignore @@ -19,26 +19,25 @@ .git-hooks/ .vscode/ .task/ -attic/ -_* -ops -!ops/ .latestcheck .test_fail_then_succeed -cookie.txt -actions.zip -nix/result .direnv/ +cookie.txt +attic/ +*.zip +_* +7* +!cmd/ops/ +ops tests/bats/ tests/test_helper/bats-assert/ tests/test_helper/bats-support/ +tests/prereq/olaris/bin +tests/coreutils* +tests/7z* +!_patch _patch/task _patch/gosh _patch/wsk _patch/openwhisk-wskdeploy _patch/openwhisk-cli -tests/prereq/olaris/bin -dist/ -tests/coreutils* -tests/7z* -7* diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..bfa876e --- /dev/null +++ b/.gitmodules @@ -0,0 +1,28 @@ +[submodule "sh"] + path = _patches/sh + url = https://github.com/sciabarracom/sh + branch = openserverless +[submodule "task"] + path = _patches/task + url = https://github.com/sciabarracom/task + branch = openserverless +[submodule "wskdeploy"] + path = _patches/wskdeploy + url = https://github.com/sciabarracom/openwhisk-wskdeploy + branch = openserverless +[submodule "wsk"] + path = _patches/wsk + url = https://github.com/sciabarracom/openwhisk-cli + branch = openserverless +[submodule "modules/jq"] + path = _patches/jq + url = https://github.com/nuvolaris/gojq + branch = openserverless +[submodule "modules/awk"] + path = _patches/awk + url = https://github.com/nuvolaris/goawk + branch = openserverless +[submodule "modules/envsubst"] + path = _patches/envsubst + url = https://github.com/nuvolaris/envsubst + branch = openserverless diff --git a/.goreleaser.yaml b/.goreleaser.yaml index e24e977..303a997 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -29,6 +29,9 @@ builds: goarch: - amd64 - arm64 + ignore: + - goos: windows + goarch: arm64 archives: - id: default diff --git a/Taskfile.yml b/Taskfile.yml index 0d0c57c..55cfc4f 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -90,7 +90,7 @@ tasks: desc: unit test (use F=-v to verbose) cmds: - rm -Rf ~/.ops - - go clean -testcache + - go clean -testcache -cache - go test -count=1 {{.F}} github.com/apache/openserverless-cli - go test -count=1 {{.F}} github.com/apache/openserverless-cli/config - go test -count=1 {{.F}} github.com/apache/openserverless-cli/tools diff --git a/_patches/README.md b/_patches/README.md index f02d061..db944d7 100644 --- a/_patches/README.md +++ b/_patches/README.md @@ -1,4 +1,4 @@ -# Patches: +# Patches to the tools - changes to mvdan/sh: - rename to sciabarracom/sh diff --git a/_patches/awk b/_patches/awk new file mode 160000 index 0000000..d0931fd --- /dev/null +++ b/_patches/awk @@ -0,0 +1 @@ +Subproject commit d0931fd55c2c3eadaacbea1ba3684dde951d2159 diff --git a/_patches/builtin_extra.go b/_patches/builtin_extra.go index c42e0ac..43fa5b8 100644 --- a/_patches/builtin_extra.go +++ b/_patches/builtin_extra.go @@ -54,7 +54,7 @@ func isBuiltin(name string) bool { if isTools(name) { return true } - return IsBuiltin1(name) + return isBuiltin_orig(name) } func (r *Runner) builtinCode(ctx context.Context, pos syntax.Pos, name string, args []string) int { @@ -65,19 +65,20 @@ func (r *Runner) builtinCode(ctx context.Context, pos syntax.Pos, name string, a cmd = append(cmd, name) } args = append(cmd, args...) - fmt.Printf("%v\n", args) - r.exitShell(ctx, 1) + if os.Getenv("TRACE") != "" { + fmt.Printf("%v\n", args) + } r.exec(ctx, args) return r.exit } if isTools(name) { args = append([]string{os.Getenv("OPS_CMD"), "-" + name}, args...) - fmt.Printf("%v\n", args) - r.exitShell(ctx, 1) + if os.Getenv("TRACE") != "" { + fmt.Printf("%v\n", args) + } r.exec(ctx, args) return r.exit - } - return r.BuiltinCode1(ctx, pos, name, args) + return r.builtinCode_orig(ctx, pos, name, args) } diff --git a/_patches/envsubst b/_patches/envsubst new file mode 160000 index 0000000..10ca029 --- /dev/null +++ b/_patches/envsubst @@ -0,0 +1 @@ +Subproject commit 10ca029cdb58695b98d525e833ba6dced90b5dcf diff --git a/_patches/jq b/_patches/jq new file mode 160000 index 0000000..54b7644 --- /dev/null +++ b/_patches/jq @@ -0,0 +1 @@ +Subproject commit 54b764416b6984bf36b79c42d8ccafa1ed1638df diff --git a/_patches/patch-sh.sh b/_patches/patch-sh.sh index abc830a..76b6040 100644 --- a/_patches/patch-sh.sh +++ b/_patches/patch-sh.sh @@ -21,21 +21,29 @@ cd "$(dirname $0)" go clean -cache -modcache -testcache HERE=$PWD STAG="v3.8.0" -DTAG="v3.8.2" +DTAG="v3.8.3" cd sh +git reset --hard git checkout "$STAG" -B openserverless cp $HERE/builtin_extra.go interp/builtin_extra.go git add interp/builtin_extra.go -sed -i -e 's!) builtinCode(!) BuiltinCode1(!' -e 's!func isBuiltin!func IsBuiltin1!' interp/builtin.go +sed -i -e 's!) builtinCode(!) builtinCode_orig(!' -e 's!func isBuiltin!func isBuiltin_orig!' interp/builtin.go find . \( -name \*.go -o -name go.mod \) | while read file do echo $file sed -i 's!mvdan.cc/sh!github.com/sciabarracom/sh!' $file done go clean -modcache -cache -testcache -fuzzcache go mod tidy + +#echo >>go.mod "replace github.com/sciabarracom/sh/v3/interp => ./interp" +#echo >>go.mod "replace github.com/sciabarracom/sh/v3/syntax => ./syntax" +#go build ./cmd/gosh +# +#exit + git commit -m "patching sh for ops" -a git tag $DTAG git push -f origin-auth openserverless --tags VER=$(git rev-parse --short HEAD) GOBIN=$HERE go install github.com/sciabarracom/sh/v3/cmd/gosh@$VER - +OPS_CMD=$(which ops) OPS_TOOLS="jq awk" OPS_COREUTILS="ls cp mv" TRACE=1 ./gosh diff --git a/_patches/patch-task.sh b/_patches/patch-task.sh index 5589c1e..ba78c5c 100644 --- a/_patches/patch-task.sh +++ b/_patches/patch-task.sh @@ -21,7 +21,7 @@ cd "$(dirname $0)" HERE=$PWD SHVER=$(git ls-remote https://github.com/sciabarracom/sh | awk '/refs\/heads\/openserverless/{print $1}') STAG="v3.38.0" -DTAG="v3.38.9" +DTAG="v3.38.10" cd taskfile go clean -cache -modcache git checkout "$STAG" -B openserverless diff --git a/_patches/sh b/_patches/sh new file mode 160000 index 0000000..f3da214 --- /dev/null +++ b/_patches/sh @@ -0,0 +1 @@ +Subproject commit f3da214dce8792e875c56f647f3d4900100def11 diff --git a/_patches/task b/_patches/task new file mode 160000 index 0000000..781bf85 --- /dev/null +++ b/_patches/task @@ -0,0 +1 @@ +Subproject commit 781bf859e75a764fc76f59f76f830ec8e7d7003d diff --git a/_patches/wsk b/_patches/wsk new file mode 160000 index 0000000..39db77e --- /dev/null +++ b/_patches/wsk @@ -0,0 +1 @@ +Subproject commit 39db77e21ff61258d72baa48e4ccbb66005cf44b diff --git a/_patches/wskdeploy b/_patches/wskdeploy new file mode 160000 index 0000000..67c642d --- /dev/null +++ b/_patches/wskdeploy @@ -0,0 +1 @@ +Subproject commit 67c642d0ac144727e9cd80efdea1d73cea04dce2 diff --git a/go.mod b/go.mod index f9561ae..b9f5af0 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,7 @@ require ( github.com/nuvolaris/jj v0.0.0-20231020143327-10b90948a5d2 github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c github.com/sciabarracom/openwhisk-cli v1.2.1 - github.com/sciabarracom/sh/v3 v3.8.2 + github.com/sciabarracom/sh/v3 v3.8.3 github.com/sciabarracom/task/v3 v3.38.9 github.com/stretchr/testify v1.9.0 github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 diff --git a/go.sum b/go.sum index 72a88e3..7c90fc2 100644 --- a/go.sum +++ b/go.sum @@ -343,8 +343,8 @@ github.com/sciabarracom/openwhisk-cli v1.2.1 h1:XVEAidwhmoOpvjKkqcIfGzLQwe850K5E github.com/sciabarracom/openwhisk-cli v1.2.1/go.mod h1:KIF6FPfQ6d2mNSEFP7oiz49iHxjDCeFTnCS7XwHAlUI= github.com/sciabarracom/openwhisk-wskdeploy v1.2.1 h1:t5hgca9OFEO39t4OqIxcWybYRjyBW7jDhg54eLar29U= github.com/sciabarracom/openwhisk-wskdeploy v1.2.1/go.mod h1:bWjrIOIAzt8AcPqiJ0mWEecUxXbT4bY4ysMlJO6/q78= -github.com/sciabarracom/sh/v3 v3.8.2 h1:ZAdlsq2d1UnvdbnOgENhZ/bTqKdwEM89ftX7kokVFnI= -github.com/sciabarracom/sh/v3 v3.8.2/go.mod h1:CeMVr3PRLhlUrS+VPLTp8dS5/6xNzmmX0h/WVHRR6DA= +github.com/sciabarracom/sh/v3 v3.8.3 h1:5afHdZzNkW5vgUMP7gHUpBYHezn3BoQsyNgKXKdTpkM= +github.com/sciabarracom/sh/v3 v3.8.3/go.mod h1:CeMVr3PRLhlUrS+VPLTp8dS5/6xNzmmX0h/WVHRR6DA= github.com/sciabarracom/task/v3 v3.38.9 h1:LozhBEsGQGYKJCAhOE+0s22IF92DATMNDU/RMzpbSCw= github.com/sciabarracom/task/v3 v3.38.9/go.mod h1:V88FdSzukQ90H9nzqexBsmBRXpoEpJGsVPMoOnkAsWc= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= diff --git a/preflight.go b/preflight.go index 522e757..c4cbacd 100644 --- a/preflight.go +++ b/preflight.go @@ -45,11 +45,6 @@ func preflightChecks() error { preflight.check(checkInstalled("curl")) preflight.check(checkInstalled("ssh")) - if getOS() != "windows" { - preflight.check(checkInstalled("grep")) - preflight.check(checkInstalled("xz")) - preflight.check(checkInstalled("gunzip")) - } return preflight.err } diff --git a/prereq.go b/prereq.go index 9a80db8..4ccfd3d 100644 --- a/prereq.go +++ b/prereq.go @@ -175,53 +175,67 @@ func touchAndClean(dir string, name string, version string) error { // download a prerequisite func downloadPrereq(name string, task PrereqTask) error { + + // names and version + // xname = executeable name + // vname = versioned executable name version, ok := task.Vars["VERSION"] if !ok { + trace("return because no version for ", name) return nil } + xname := addExeExt(name) + vname := xname + "-" + version + // ensure bindir bindir, err := EnsureBindir() if err != nil { return err } // check if file and version exists - vname := name + "-" + version trace("checking", vname, version) - if exists(bindir, name) { - // check if there is an inconsistency in the versions - if exists(bindir, vname) { - trace("already downloaded", vname) + if exists(bindir, vname) { + trace("already downloaded", vname) + return nil + } + + // checking different versions of the same file + oldver, seen := PrereqSeenMap[name] + if seen { + if oldver == version { + trace("same version again", vname) return nil } - oldver, seen := PrereqSeenMap[name] - if seen { - if oldver == version { - trace("same version again", vname) - return nil - } - return fmt.Errorf("WARNING: %s prerequisite found twice with different versions!\nPrevious version: %s, ignoring %s", name, oldver, version) - } + return fmt.Errorf("WARNING: %s prerequisite found twice with different versions!\nPrevious version: %s, ignoring %s", name, oldver, version) } + PrereqSeenMap[name] = version if taskDryRun { fmt.Printf("downloading %s %s\n", name, version) touch(bindir, name) - touchAndClean(bindir, name, version) } else { fmt.Printf("ensuring prerequisite %s %s\n", name, version) execPrereqTask(bindir, name) // check if file and version exists - // fixing the name for windows adding .exe - name = addExeExt(name) - if !exists(bindir, name) { + if !exists(bindir, xname) { return fmt.Errorf("failed to download %s version %s", name, version) } + // check if a file is zero length and remove in this case + fileInfo, err := os.Stat(joinpath(bindir, xname)) + if err != nil { + return fmt.Errorf("failed to download %s version %s", name, version) + } + if fileInfo.Size() == 0 { + trace("removing the empty file ", xname) + err := os.Remove(joinpath(bindir, xname)) + if err != nil { + return fmt.Errorf("cannot remove empty %s ", xname) + } + } } - - PrereqSeenMap[name] = version - return touchAndClean(bindir, name, version) + return touchAndClean(bindir, xname, version) } // ensure prereq are satified looking at the prereq.yml @@ -237,6 +251,7 @@ func ensurePrereq(root string) error { trace("ensurePrereq in", root) prereq, err := loadPrereq(root) for task := range prereq.Tasks { + trace("prereq", task) err = downloadPrereq(task, prereq.Tasks[task]) if err != nil { fmt.Printf("error in prereq %s: %v\n", task, err) diff --git a/prereq_test.go b/prereq_test.go index bacea9b..62de7f4 100644 --- a/prereq_test.go +++ b/prereq_test.go @@ -113,6 +113,8 @@ func Example_ensurePrereq() { bindir, err := EnsureBindir() if err == nil { RemoveAll(bindir) + } else { + fmt.Printf("ERROR CANNOT REMOVE DIR %v\n", err) } dir := joinpath(joinpath(workDir, "tests"), "prereq") fmt.Println(ensurePrereq(dir))
