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 dd6ae4ba5f417eec64c8c7b1db7a418a082c38f3 Author: Michele Sciabarra <[email protected]> AuthorDate: Mon Jul 22 10:40:52 2024 +0200 task deps fixed and old utils removed --- TODO.txt | 20 +- Taskfile.yml | 42 ++-- build.sh | 22 -- go.mod | 107 +-------- go.sum | 641 +------------------------------------------------ task.go | 2 +- tools/deploy.go | 510 --------------------------------------- tools/deploy_test.go | 245 ------------------- tools/js.go | 55 ----- tools/mkdirs.go | 67 ------ tools/realpath.go | 72 ------ tools/scan.go | 283 ---------------------- tools/scan_test.go | 256 -------------------- tools/tools.go | 44 +--- tools/util.go | 73 ------ tools/wsk.go | 5 +- tools/zipf.go | 250 ------------------- tools/zipf_test.go | 61 ----- validate/Taskfile.yaml | 116 --------- validate/validate.sh | 42 ---- 20 files changed, 51 insertions(+), 2862 deletions(-) diff --git a/TODO.txt b/TODO.txt index 0a4850d..069b826 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,18 +1,18 @@ -- recompile +* recompile +* upgrade task and sh +- udpdate wsk and task -- upgrade task and sh - -rm -Rvf sh task -git submodule update --init --recursive -cd task -git remote add upstream https://github.com/go-task/task -git fetch --all -git rebase v3.38.0 +- remove old stuff +js (goja&c) +mkdir +realpath +zipf +deploy +someutils - apply diff one by one to sh and task -- use coreutils and remove someutils - run tests and subtests - move everything in the ops package and add cmd/ops/main.go diff --git a/Taskfile.yml b/Taskfile.yml index 0fb8810..5d41f6a 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -19,61 +19,49 @@ version: "3" vars: BRANCH: main - BASEVER: "0.1-dev" + BASEVER: "0.1-snapshot" VERSION: sh: git describe --tags --abbrev=0 2>/dev/null || git rev-parse --short HEAD - S: "" DEBUG: "" tasks: - default: - - task -l - - - cli-ver: - - task: update-runtimes - - git tag -d $(git tag) - - git tag -f {{.BASEVER}}.$(date +%y%m%d%H%M){{.S}} - - git tag + default: task -l setup: { silent:true } - update-runtimes: + cli-tag: + desc: tag the cli to generate the build - > curl -sL https://raw.githubusercontent.com/apache/openserverless-task/{{.BRANCH}}/runtimes.json | jq '{"runtimes": .runtimes}' >runtimes.json - - | - if ! git diff --exit-code runtimes.json - then git add runtimes.json - git commit -m "update runtimes" - fi + - git add runtimes.json + - git tag -d $(git tag) + - git tag -f {{.BASEVER}}.$(date +%y%m%d%H%M){{.S}} + - git tag + build: - desc: build nuv locally - cmds: - - task: update-runtimes - - go build {{.DEBUG}} -ldflags "-X main.NuvVersion={{.VERSION}} -X main.NuvBranch={{.BRANCH}}" -o bin/nuv + desc: build ops locally + - go build {{.DEBUG}} -ldflags "-X main.NuvVersion={{.VERSION}} -X main.NuvBranch={{.BASEVER}}" -o bin/nuv sources: - "*.go" - "tools/*.go" generates: - - bin/nuv + - ops debug: cmds: - task: build vars: DEBUG: "-gcflags '-l -N'" - - dlv exec ./bin/nuv -- {{.CLI_ARGS}} + - dlv exec ./ops -- {{.CLI_ARGS}} install: - desc: install nuv using a local folder for binaries + desc: install ops in usr/local/bin deps: - build - dir: bin cmds: - - ./nuv getall - - sudo rm -f /usr/bin/nuv /usr/local/bin/nuv + - sudo cp ops /usr/local/bin - sudo ln -sf $PWD/{{OS}}/{{ARCH}}/nuv /usr/local/bin/nuv - sudo ln -sf $PWD/{{OS}}/{{ARCH}}/nuv /usr/bin/nuv diff --git a/build.sh b/build.sh deleted file mode 100755 index f0c64b4..0000000 --- a/build.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -go build -o bin/nuv -cd bin -cp nuv nuv.exe -./nuv build diff --git a/go.mod b/go.mod index 8b11bf3..27b5af3 100644 --- a/go.mod +++ b/go.mod @@ -5,121 +5,40 @@ go 1.21.0 toolchain go1.21.11 require ( - github.com/apache/openwhisk-client-go v0.0.0-20230421081559-13fc65f65684 github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 github.com/go-git/go-git/v5 v5.9.0 - github.com/go-task/task/v3 v3.38.0 github.com/itchyny/gojq v0.12.13 github.com/mitchellh/go-homedir v1.1.0 github.com/nicksnyder/go-i18n v1.10.1 github.com/nuvolaris/envsubst/cmd/envsubstmain v0.0.0-20230603163828-10ca029cdb58 github.com/nuvolaris/goawk v1.21.1-0.20230314201833-d0931fd55c2c - github.com/nuvolaris/goja/gojamain v0.0.0-20231014103102-50b9dd76d9a9 - github.com/nuvolaris/gron v0.0.0-20231020134423-84e679ea6aad - github.com/nuvolaris/someutils v0.0.0-20230406090008-39e94b70e1ae - github.com/nuvolaris/task/v3 v3.30.2-nuv.2309151614 github.com/stretchr/testify v1.9.0 - mvdan.cc/sh/v3 v3.8.0 ) require ( github.com/Ladicle/tabwriter v1.0.0 // indirect + github.com/Masterminds/semver/v3 v3.2.1 // indirect github.com/alecthomas/chroma/v2 v2.14.0 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/dlclark/regexp2 v1.11.0 // indirect github.com/dominikbraun/graph v0.23.0 // indirect + github.com/fatih/color v1.17.0 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/go-task/template v0.0.0-20240602015157-960e6f576656 // indirect -) - -require ( - dario.cat/mergo v1.0.0 // indirect - github.com/Masterminds/semver/v3 v3.2.1 // indirect - github.com/Masterminds/sprig v2.22.0+incompatible // indirect - github.com/cyphar/filepath-securejoin v0.2.4 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/jessevdk/go-flags v1.5.0 // indirect - github.com/klauspost/cpuid/v2 v2.2.5 // indirect - github.com/mitchellh/copystructure v1.2.0 // indirect - github.com/mitchellh/reflectwalk v1.0.2 // indirect - github.com/nuvolaris/goja v0.0.0-20231014102242-ba65db3f805b // indirect - github.com/nuvolaris/goja_nodejs v0.0.0-20231014102937-c453e3fed097 // indirect - github.com/nuvolaris/openwhisk-cli/commands v0.0.0-20240322185850-dd1d7107d5b6 - github.com/nuvolaris/openwhisk-cli/wski18n v0.0.0-20240322185850-dd1d7107d5b6 - github.com/nuvolaris/sh/v3 v3.7.1-nuv.2309151614 // indirect - github.com/nwidger/jsoncolor v0.0.0-20170215171346-75a6de4340e5 // indirect - github.com/pkg/errors v0.9.1 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/remeh/sizedwaitgroup v1.0.0 // indirect - github.com/tidwall/gjson v1.14.0 // indirect - github.com/tidwall/match v1.1.1 // indirect - github.com/tidwall/pretty v1.2.0 // indirect - github.com/tidwall/sjson v1.2.4 // indirect - github.com/zeebo/xxh3 v1.0.2 // indirect - golang.org/x/mod v0.14.0 // indirect - golang.org/x/tools v0.17.0 // indirect -) - -require ( - github.com/Masterminds/goutils v1.1.1 // indirect - github.com/Masterminds/semver v1.5.0 - github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect - github.com/a8m/envsubst v1.4.2 // indirect - github.com/acomagu/bufpipe v1.0.4 // indirect - github.com/alessio/shellescape v1.4.2 // indirect - github.com/cenkalti/backoff/v4 v4.2.1 - github.com/cloudflare/circl v1.3.3 // indirect - github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 // indirect - github.com/danieljoos/wincred v1.2.0 // indirect - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/dlclark/regexp2 v1.11.0 // indirect - github.com/emirpasic/gods v1.18.1 // indirect - github.com/fatih/color v1.17.0 // indirect - github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 // indirect - github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect - github.com/go-git/go-billy/v5 v5.5.0 // indirect - github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect - github.com/go-task/slim-sprig v2.20.0+incompatible // indirect - github.com/godbus/dbus/v5 v5.1.0 // indirect - github.com/google/go-querystring v1.1.0 // indirect - github.com/google/pprof v0.0.0-20230912144702-c363fe2c2ed8 // indirect - github.com/google/uuid v1.3.1 - github.com/h2non/filetype v1.1.3 - github.com/hokaccha/go-prettyjson v0.0.0-20211117102719-0474bc63780f // indirect - github.com/huandu/xstrings v1.4.0 // indirect - github.com/imdario/mergo v0.3.16 // indirect - github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/itchyny/timefmt-go v0.1.5 // indirect - github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/joho/godotenv v1.5.1 // indirect - github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/laher/uggo v0.0.0-20140418102112-0ad25fe11c5b // indirect + github.com/klauspost/cpuid/v2 v2.0.9 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.20 - github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-zglob v0.0.4 // indirect github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect - github.com/nuvolaris/go-replace v0.0.0-20230515190028-12766da1824c - github.com/nuvolaris/jj v0.0.0-20231020143327-10b90948a5d2 - github.com/pelletier/go-toml v1.9.5 // indirect - github.com/pjbgf/sha1cd v0.3.0 // indirect - github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 - github.com/radovskyb/watcher v1.0.7 - github.com/rivo/uniseg v0.4.4 // indirect + github.com/radovskyb/watcher v1.0.7 // indirect github.com/sajari/fuzzy v1.0.0 // indirect - github.com/sergi/go-diff v1.3.1 // indirect - github.com/skeema/knownhosts v1.2.0 // indirect - github.com/spf13/cobra v1.7.0 // indirect - github.com/spf13/pflag v1.0.5 - github.com/xanzy/ssh-agent v0.3.3 // indirect - github.com/zalando/go-keyring v0.2.3 - golang.org/x/crypto v0.18.0 // indirect - golang.org/x/exp v0.0.0-20230905200255-921286631fa9 - golang.org/x/net v0.20.0 // indirect + github.com/sciabarracom/sh/v3 v3.8.1-0.20240719132627-8b997d445efa // indirect + github.com/sciabarracom/task/v3 v3.38.1-0.20240719132837-9f75ee2eb9d9 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/zeebo/xxh3 v1.0.2 // indirect golang.org/x/sync v0.7.0 // indirect golang.org/x/sys v0.21.0 // indirect - golang.org/x/term v0.21.0 - golang.org/x/text v0.14.0 // indirect - gopkg.in/warnings.v0 v0.1.2 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect - gopkg.in/yaml.v3 v3.0.1 + golang.org/x/term v0.21.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 2dc68e5..0be5594 100644 --- a/go.sum +++ b/go.sum @@ -1,691 +1,64 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= -dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Ladicle/tabwriter v1.0.0 h1:DZQqPvMumBDwVNElso13afjYLNp0Z7pHqHnu0r4t9Dg= github.com/Ladicle/tabwriter v1.0.0/go.mod h1:c4MdCjxQyTbGuQO/gvqJ+IA/89UEwrsD6hUCW98dyp4= -github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= -github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= -github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60= -github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= -github.com/a8m/envsubst v1.4.2 h1:4yWIHXOLEJHQEFd4UjrWDrYeYlV7ncFWJOCBRLOZHQg= -github.com/a8m/envsubst v1.4.2/go.mod h1:MVUTQNGQ3tsjOOtKCNd+fl8RzhsXcDvvAEzkhGtlsbY= -github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= -github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= -github.com/alecthomas/assert/v2 v2.7.0 h1:QtqSACNS3tF7oasA8CU6A6sXZSBDqnm7RfpLl9bZqbE= -github.com/alecthomas/assert/v2 v2.7.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= github.com/alecthomas/chroma/v2 v2.14.0 h1:R3+wzpnUArGcQz7fCETQBzO5n9IMNi13iIs46aU4V9E= github.com/alecthomas/chroma/v2 v2.14.0/go.mod h1:QolEbTfmUHIMVpBqxeDnNBj2uoeI4EbYP4i6n68SG4I= -github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= -github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alessio/shellescape v1.4.2 h1:MHPfaU+ddJ0/bYWpgIeUnQUqKrlJ1S7BfEYPM4uEoM0= -github.com/alessio/shellescape v1.4.2/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30= -github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= -github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= -github.com/apache/openwhisk-client-go v0.0.0-20220811044404-a6921af2f086/go.mod h1:SAQU4bHGJ0sg6c1vQ8ojmQKXgGaneVnexWX4+2/KMr8= -github.com/apache/openwhisk-client-go v0.0.0-20230421081559-13fc65f65684 h1:HXPx8GrCpQq7BtoCoyDjMcMLrBowaAyMai7+TuIMzFQ= -github.com/apache/openwhisk-client-go v0.0.0-20230421081559-13fc65f65684/go.mod h1:SAQU4bHGJ0sg6c1vQ8ojmQKXgGaneVnexWX4+2/KMr8= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= -github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= -github.com/chzyer/readline v1.5.0/go.mod h1:x22KAscuvRqlLoK9CsoYsmxoXZMMFVyOl86cAH8qUic= -github.com/chzyer/test v0.0.0-20210722231415-061457976a23/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= -github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= -github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 h1:tuijfIjZyjZaHq9xDUh0tNitwXshJpbLkqMOJv4H3do= -github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21/go.mod h1:po7NpZ/QiTKzBKyrsEAxwnTamCoh8uDk/egRpQ7siIc= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0= -github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= -github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= -github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= -github.com/danieljoos/wincred v1.2.0 h1:ozqKHaLK0W/ii4KVbbvluM91W2H3Sh0BncbUNPS7jLE= -github.com/danieljoos/wincred v1.2.0/go.mod h1:FzQLLMKBFdvu+osBrnFODiv32YGwCfx0SkRa/eYHgec= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 h1:bWDMxwH3px2JBh6AyO7hdCn/PkvCZXii8TGj7sbtEbQ= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dominikbraun/graph v0.23.0 h1:TdZB4pPqCLFxYhdyMFb1TBdFxp8XLcJfTTBQucVPgCo= github.com/dominikbraun/graph v0.23.0/go.mod h1:yOjYyogZLY1LSG9E33JWZJiq5k83Qy2C6POAuiViluc= -github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= -github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= -github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= -github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= -github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= -github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 h1:Mn26/9ZMNWSw9C9ERFA1PUxfmGpolnw2v0bKOREu5ew= -github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I= -github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= -github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= -github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= -github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= -github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= -github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f h1:Pz0DHeFij3XFhoBRGUDPzSJ+w2UcK5/0JvF8DRI58r8= -github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= -github.com/go-git/go-git/v5 v5.9.0 h1:cD9SFA7sHVRdJ7AYck1ZaAa/yeuBvGPxwXDL8cxrObY= github.com/go-git/go-git/v5 v5.9.0/go.mod h1:RKIqga24sWdMGZF+1Ekv9kylsDz6LzdTSI2s/OsZWE0= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= -github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v2.20.0+incompatible h1:4Xh3bDzO29j4TWNOI+24ubc0vbVFMg2PMnXKxK54/CA= -github.com/go-task/slim-sprig v2.20.0+incompatible/go.mod h1:N/mhXZITr/EQAOErEHciKvO1bFei2Lld2Ym6h96pdy0= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= -github.com/go-task/task/v3 v3.38.0 h1:O7kgA6BfwktXHPrheByQO46p3teKtRuq1EpGnFxNzbo= -github.com/go-task/task/v3 v3.38.0/go.mod h1:UzLDHoXTKNAtWwFP3WVsfMhlSw3K8i9KNzEO9kCHix8= github.com/go-task/template v0.0.0-20240602015157-960e6f576656 h1:knZZ4zVdTBQnevBz0zSES++4Mr7wr+cHopLvHabIgkA= github.com/go-task/template v0.0.0-20240602015157-960e6f576656/go.mod h1:RgwRaZK+kni/hJJ7/AaOE2lPQFPbAdji/DyhC6pxo4k= -github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= -github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= -github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20230207041349-798e818bf904/go.mod h1:uglQLonpP8qtYCYyzA+8c/9qtqgA3qsXGYqCPKARAFg= -github.com/google/pprof v0.0.0-20230912144702-c363fe2c2ed8 h1:gpptm606MZYGaMHMsB4Srmb6EbW/IVHnt04rcMXnkBQ= -github.com/google/pprof v0.0.0-20230912144702-c363fe2c2ed8/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= -github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/h2non/filetype v1.1.3 h1:FKkx9QbD7HR/zjK1Ia5XiBsq9zdLi5Kf3zGyFTAFkGg= -github.com/h2non/filetype v1.1.3/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= -github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= -github.com/hokaccha/go-prettyjson v0.0.0-20210113012101-fb4e108d2519/go.mod h1:pFlLw2CfqZiIBOx6BuCeRLCrfxBJipTY0nIOF/VbGcI= -github.com/hokaccha/go-prettyjson v0.0.0-20211117102719-0474bc63780f h1:7LYC+Yfkj3CTRcShK0KOL/w6iTiKyqqBA9a41Wnggw8= -github.com/hokaccha/go-prettyjson v0.0.0-20211117102719-0474bc63780f/go.mod h1:pFlLw2CfqZiIBOx6BuCeRLCrfxBJipTY0nIOF/VbGcI= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU= -github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/ianlancetaylor/demangle v0.0.0-20220319035150-800ac71e25c2/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= -github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= -github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= -github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/itchyny/gojq v0.12.13 h1:IxyYlHYIlspQHHTE0f3cJF0NKDMfajxViuhBLnHd/QU= github.com/itchyny/gojq v0.12.13/go.mod h1:JzwzAqenfhrPUuwbmEz3nu3JQmFLlQTQMUcOdnu/Sf4= -github.com/itchyny/timefmt-go v0.1.5 h1:G0INE2la8S6ru/ZI5JecgyzbbJNs5lG1RcBqa7Jm6GE= -github.com/itchyny/timefmt-go v0.1.5/go.mod h1:nEP7L+2YmAbT2kZ2HfSs1d8Xtw9LY8D2stDBckWakZ8= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= -github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= -github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= -github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/laher/uggo v0.0.0-20140418102112-0ad25fe11c5b h1:hiAgMroreX8L9Gm2SsTdv9ApADQPShh9D3Di9xpp2Kg= -github.com/laher/uggo v0.0.0-20140418102112-0ad25fe11c5b/go.mod h1:WytauZxw3kbZhQVPJN2INZlGCNCKWn3iy4VqJvNo2pI= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.4/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= -github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= -github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-zglob v0.0.4 h1:LQi2iOm0/fGgu80AioIJ/1j9w9Oh+9DZ39J4VAGzHQM= github.com/mattn/go-zglob v0.0.4/go.mod h1:MxxjyoXXnMxfIpxTK2GAkw1w8glPsQILx3N5wrKakiY= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= -github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4= github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= -github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nicksnyder/go-i18n v1.10.1 h1:isfg77E/aCD7+0lD/D00ebR2MV5vgeQ276WYyDaCRQc= github.com/nicksnyder/go-i18n v1.10.1/go.mod h1:e4Di5xjP9oTVrC6y3C7C0HoSYXjSbhh/dU0eUV32nB4= -github.com/nuvolaris/envsubst/cmd/envsubstmain v0.0.0-20230603163828-10ca029cdb58 h1:/6bwyZSQx3Q+Gl/02wTw6tonDzQRXOSeQSyzjrM8/VY= github.com/nuvolaris/envsubst/cmd/envsubstmain v0.0.0-20230603163828-10ca029cdb58/go.mod h1:scN6eGT0YjABIs2bLh+CfWdOFZgmkefhv0pA9RBCEaM= -github.com/nuvolaris/go-replace v0.0.0-20230515190028-12766da1824c h1:t8yjSIjJBa2EX6DHOnwzf0fBycFNXYyy4H44zvdAXtc= -github.com/nuvolaris/go-replace v0.0.0-20230515190028-12766da1824c/go.mod h1:kFS/W+mpp+bqCLVdldEq2EMZa0YttGz+QEHE+0HXags= -github.com/nuvolaris/goawk v1.21.1-0.20230314201833-d0931fd55c2c h1:L9HLHEk9rLllwSYyzg8fu7ScPfCX773sWu55TzavywQ= github.com/nuvolaris/goawk v1.21.1-0.20230314201833-d0931fd55c2c/go.mod h1:/9Rq7gSfPOW2G7aq2Rii4kbNl9o3GJSGvBjikGMs74I= -github.com/nuvolaris/goja v0.0.0-20230527133949-2939724446aa/go.mod h1:g4ZsIVZINTllHjERZs7Ys/5dVuxuJSbio9d9zwHQK6U= -github.com/nuvolaris/goja v0.0.0-20230825100449-967811910c6d/go.mod h1:dA/ZvN0NzL92yvJaKW5XKWNVKJCzgD8Dm+tUWRMUIEQ= -github.com/nuvolaris/goja v0.0.0-20231014102242-ba65db3f805b h1:SIyOXKeBgPPsZIXXZhUkWhNCJsSnnaC2196oVjMufFo= -github.com/nuvolaris/goja v0.0.0-20231014102242-ba65db3f805b/go.mod h1:0X/rEcYXw/QtEGpDouhr05xYz9OXH+BV/31Zuj7jnPk= -github.com/nuvolaris/goja/gojamain v0.0.0-20231014103102-50b9dd76d9a9 h1:UsPQF+5D/VZfGftdzRlaOqLvCBRE0mnNe5BnmZs2I5o= -github.com/nuvolaris/goja/gojamain v0.0.0-20231014103102-50b9dd76d9a9/go.mod h1:pi8nHIKxRrxvKDsAIR6yUxAudHZu3gKLkZE2sCG/HCE= -github.com/nuvolaris/goja_nodejs v0.0.0-20230527135110-3aa37178bb6c/go.mod h1:3j67oDWJ3d1Zut6OfpmPuBwDH+L2bzyWCeYqvGMAi20= -github.com/nuvolaris/goja_nodejs v0.0.0-20230826135643-676d5429636c/go.mod h1:bik1pvnsEagEp/uCTjjKUHVWPyuy53ETukJZVuaSG2U= -github.com/nuvolaris/goja_nodejs v0.0.0-20231014102937-c453e3fed097 h1:cHspcFB5uEQvORg1yE/+TK7n2OTgIjlSEr5FW41KWxE= -github.com/nuvolaris/goja_nodejs v0.0.0-20231014102937-c453e3fed097/go.mod h1:bik1pvnsEagEp/uCTjjKUHVWPyuy53ETukJZVuaSG2U= -github.com/nuvolaris/gron v0.0.0-20231020134423-84e679ea6aad h1:HM0XUN8Euf/cougdYRNlga/dZUIi0TiI931IbqxzoRk= -github.com/nuvolaris/gron v0.0.0-20231020134423-84e679ea6aad/go.mod h1:5Hm1DZ5jqgtsL9ZjkS7ucgNX1ho6ZBt3uQVZG21OGV8= -github.com/nuvolaris/jj v0.0.0-20231020143327-10b90948a5d2 h1:Ak5YABP9NDvXG/jFxnshxUd1AwUe494gEpzRUSFcbYc= -github.com/nuvolaris/jj v0.0.0-20231020143327-10b90948a5d2/go.mod h1:oSVih0wbKnbe39U7qzSrwEiNGrWLlIyqrUY+qz9ZIQY= -github.com/nuvolaris/openwhisk-cli/commands v0.0.0-20240322185850-dd1d7107d5b6 h1:O0iVYcww+EQZVrBdjECS4/wlFoD6fOKSWmwuQm4TcGw= -github.com/nuvolaris/openwhisk-cli/commands v0.0.0-20240322185850-dd1d7107d5b6/go.mod h1:aXJusnuxBX3WRX7aLrFPInwOrhAS31reOm+bHPYaDIs= -github.com/nuvolaris/openwhisk-cli/wski18n v0.0.0-20240322185850-dd1d7107d5b6 h1:GEJ1MNUb/NGQyYwDDe7ovhMXTY5gLmjmYludmnat9FM= -github.com/nuvolaris/openwhisk-cli/wski18n v0.0.0-20240322185850-dd1d7107d5b6/go.mod h1:x57w2QArhPOdDEibanGlaQlYA/1PP4RNe5e21b+R9XA= -github.com/nuvolaris/openwhisk-wskdeploy v0.0.0-20230916104531-c4bc982185e9 h1:CXCPlchX/Dq2BzaiuGnK9t2wR5z5UWQJF0IHcfIyxac= -github.com/nuvolaris/openwhisk-wskdeploy v0.0.0-20230916104531-c4bc982185e9/go.mod h1:Rx9BGhPmwoWToPAVFr/12P3W0JRYlxCH/xzCz6NeOQo= -github.com/nuvolaris/sh/v3 v3.7.1-nuv.2309151614 h1:euD81WMIiFpBUfEUw7S8ODZ65zNwaM75dGUiyCK9+20= -github.com/nuvolaris/sh/v3 v3.7.1-nuv.2309151614/go.mod h1:DcwU5rXy89zU8ppNuTaSvGxX2T0lW3RjUqboNuVyT7o= -github.com/nuvolaris/someutils v0.0.0-20230406090008-39e94b70e1ae h1:r/98Ma2fvAFYBEQC2OqKsD4tI7r75N7YzhWv2ievhRA= -github.com/nuvolaris/someutils v0.0.0-20230406090008-39e94b70e1ae/go.mod h1:27LYTtM+ymckYJ+I+C5Tg6/ir+QyBQZVNN6TvlNQ1zA= -github.com/nuvolaris/task/v3 v3.30.2-nuv.2309151614 h1:zwuGDvIpuzvGvFJCMPeCmt7cUqgTSSwkZFnQRDM+Bi4= -github.com/nuvolaris/task/v3 v3.30.2-nuv.2309151614/go.mod h1:jq1DGrJssGJpZF7acN3Taem7Hizry9BXMV+BLoSeFi4= -github.com/nwidger/jsoncolor v0.0.0-20170215171346-75a6de4340e5 h1:d+C3xJdxZT7wNlxqEwbXn3R355CwAhYBL9raVNfSnK0= -github.com/nwidger/jsoncolor v0.0.0-20170215171346-75a6de4340e5/go.mod h1:GYFm0zZgTNeoK1QxuIofRDasy2ibmaJZhZLzwsMXUF4= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= -github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= -github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= -github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/radovskyb/watcher v1.0.7 h1:AYePLih6dpmS32vlHfhCeli8127LzkIgwJGcwwe8tUE= github.com/radovskyb/watcher v1.0.7/go.mod h1:78okwvY5wPdzcb1UYnip1pvrZNIVEIh/Cm+ZuvsUYIg= -github.com/remeh/sizedwaitgroup v1.0.0 h1:VNGGFwNo/R5+MJBf6yrsr110p0m4/OX4S3DCy7Kyl5E= -github.com/remeh/sizedwaitgroup v1.0.0/go.mod h1:3j2R4OIe/SeS6YDhICBy22RWjJC5eNCJ1V+9+NVNYlo= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= -github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= -github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sajari/fuzzy v1.0.0 h1:+FmwVvJErsd0d0hAPlj4CxqxUtQY/fOoY0DwX4ykpRY= github.com/sajari/fuzzy v1.0.0/go.mod h1:OjYR6KxoWOe9+dOlXeiCJd4dIbED4Oo8wpS89o0pwOo= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= -github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/skeema/knownhosts v1.2.0 h1:h9r9cf0+u7wSE+M183ZtMGgOJKiL96brpaz5ekfJCpM= -github.com/skeema/knownhosts v1.2.0/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.5.1/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= -github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= -github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/sciabarracom/sh/v3 v3.8.1-0.20240719132627-8b997d445efa h1:RjRrFB6D7FBeEejUWMhW7DzgvK56W7BeCeJbPzbPfgc= +github.com/sciabarracom/sh/v3 v3.8.1-0.20240719132627-8b997d445efa/go.mod h1:CeMVr3PRLhlUrS+VPLTp8dS5/6xNzmmX0h/WVHRR6DA= +github.com/sciabarracom/task/v3 v3.38.1-0.20240719132837-9f75ee2eb9d9 h1:K7t33j3GcsrmEt1IY7AauJLk4WqdFwnySnshyKNOOCU= +github.com/sciabarracom/task/v3 v3.38.1-0.20240719132837-9f75ee2eb9d9/go.mod h1:EKgm7X+Z2VMiSBz17FWJq7C653d+hac/5+utpMDO+EE= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= -github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/tidwall/gjson v1.12.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/gjson v1.14.0 h1:6aeJ0bzojgWLa82gDQHcx3S0Lr/O51I9bJ5nv6JFx5w= -github.com/tidwall/gjson v1.14.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= -github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= -github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tidwall/sjson v1.2.4 h1:cuiLzLnaMeBhRmEv00Lpk3tkYrcxpmbU81tAY4Dw0tc= -github.com/tidwall/sjson v1.2.4/go.mod h1:098SZ494YoMWPmMO6ct4dcFnqxwj9r/gF0Etp19pSNM= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= -github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/zalando/go-keyring v0.2.3 h1:v9CUu9phlABObO4LPWycf+zwMG7nlbb3t/B5wa97yms= -github.com/zalando/go-keyring v0.2.3/go.mod h1:HL4k+OXQfJUWaMnqyuSOc0drfGPX2b51Du6K+MRgZMk= -github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ= -github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= -golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= -golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210304203436-1243437a8ec7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= -golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -mvdan.cc/sh/v3 v3.8.0 h1:ZxuJipLZwr/HLbASonmXtcvvC9HXY9d2lXZHnKGjFc8= -mvdan.cc/sh/v3 v3.8.0/go.mod h1:w04623xkgBVo7/IUK89E0g8hBykgEpN0vgOj3RJr6MY= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/task.go b/task.go index e8aec03..58dd17f 100644 --- a/task.go +++ b/task.go @@ -21,7 +21,7 @@ import ( "os" "path" - "github.com/nuvolaris/task/v3/cmd/taskmain" + "github.com/sciabarracom/task/v3/cmd/taskmain" ) var taskDryRun = false diff --git a/tools/deploy.go b/tools/deploy.go deleted file mode 100644 index 39ed655..0000000 --- a/tools/deploy.go +++ /dev/null @@ -1,510 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -package tools - -import ( - "bufio" - "flag" - "fmt" - "log" - "os" - "os/exec" - "path/filepath" - "strings" - "time" - - "github.com/mitchellh/go-homedir" - "github.com/radovskyb/watcher" -) - -type deployCtx struct { - path string - dryRun bool - packageCmdExecuted map[string]bool -} - -func DeployTool() error { - flag := flag.NewFlagSet("deploy", flag.ExitOnError) - flag.Usage = func() { - fmt.Println(`Command to deploy Nuvolaris projects. Must be given the path of a valid project (containing 'packages'). - -Usage: - nuv -deploy [-s <string> | --single <string>] [-d | --dry-run] <path> - nuv -deploy [-w | --watch] [-d | --dry-run] <path> - -Options: - -s, --single <string> Deploy a single action with the given path, either a single file or a directory. - -w, --watch Watch for changes and deploy automatically. - -d, --dry-run Do not deploy, just print the deployment plan. - -h, --help Show this help message.`) - } - - var watchFlag bool - var singleFlag string - var helpFlag bool - var dryRunFlag bool - flag.StringVar(&singleFlag, "s", "", "Deploy a single action with the given path, either a single file or a directory.") - flag.StringVar(&singleFlag, "single", "", "Deploy a single action with the given path, either a single file or a directory.") - flag.BoolVar(&helpFlag, "h", false, "Show this help message") - flag.BoolVar(&helpFlag, "help", false, "Show this help message") - flag.BoolVar(&dryRunFlag, "d", false, "Do not deploy, just print the deployment plan.") - flag.BoolVar(&dryRunFlag, "dry-run", false, "Do not deploy, just print the deployment plan.") - flag.BoolVar(&watchFlag, "w", false, "Watch for changes and deploy automatically.") - flag.BoolVar(&watchFlag, "watch", false, "Watch for changes and deploy automatically.") - - // Parse command line flags - err := flag.Parse(os.Args[2:]) - if err != nil { - return err - } - - if flag.NArg() != 1 || helpFlag { - flag.Usage() - return nil - } - - path, err := homedir.Expand(flag.Arg(0)) - if err != nil { - return err - } - - var absPath string - if filepath.IsLocal(path) { - absPath = filepath.Join(os.Getenv("NUV_PWD"), path) - } else { - absPath = path - } - - os.Setenv("NUV_PWD", absPath) - - ctx := deployCtx{ - path: os.Getenv("NUV_PWD"), - packageCmdExecuted: make(map[string]bool), - dryRun: dryRunFlag, - } - - // if there is not "packages" folder from where deploy was called, abort - if !exists(filepath.Join(ctx.path, "packages")) { - return fmt.Errorf("no 'packages' folder found in the current directory") - } - - if singleFlag != "" { - action := singleFlag - if !strings.HasPrefix(action, "packages") { - action = filepath.Join("packages", action) - if !exists(filepath.Join(ctx.path, action)) { - return fmt.Errorf("action %s not found: must be either a file or a directory under packages", action) - } - } - return deploy(ctx, action) - } - - if watchFlag { - err = scan(ctx) - if err != nil { - return err - } - - err = watch(ctx) - return err - } - - err = scan(ctx) - if err != nil { - return err - } - - return nil -} - -var supportedMains = []string{"__main__.py", "index.js", "main.js", "main.go"} - -func deploy(ctx deployCtx, actionPath string) error { - fullPath := filepath.Join(ctx.path, actionPath) - if !exists(fullPath) { - return fmt.Errorf("action %s not found: must be either a file or a directory", actionPath) - } - log.Println("***", filepath.Base(actionPath)) - - action, err := checkActionDir(ctx.path, actionPath) - if err != nil { - return err - } - - sp := splitPath(action) - if len(sp) > 3 { - action, err = buildAction(ctx, sp[1], sp[2]) - if err != nil { - return err - } - } - - return deployAction(ctx, action) -} - -func checkActionDir(rootPath string, actionPath string) (string, error) { - fullPath := filepath.Join(rootPath, actionPath) - isActionDir := false - isActionDirSupported := false - if fileInfo, err := os.Stat(fullPath); err == nil && fileInfo.Mode().IsDir() { - isActionDir = true - for _, start := range supportedMains { - sub := filepath.Join(actionPath, start) - if exists(filepath.Join(rootPath, sub)) { - actionPath = sub - isActionDirSupported = true - break - } - } - } - if isActionDir && !isActionDirSupported { - return "", fmt.Errorf("action %s is a directory but does not contain a supported main file", actionPath) - } - return actionPath, nil -} - -func deployAction(ctx deployCtx, artifact string) error { - sp := splitPath(artifact) - nameType := strings.Split(sp[len(sp)-1], ".") - name := nameType[0] - typ := nameType[1] - packageName := filepath.Base(filepath.Dir(artifact)) - - deployPackage(ctx, packageName) - - var toInspect []string - if typ == "zip" { - base := filepath.Join(ctx.path, artifact[:len(artifact)-4]) - - // TODO: add support for other languages - toInspect = []string{filepath.Join(base, "/__main__.py"), filepath.Join(base, "/index.js")} - } else { - toInspect = []string{artifact} - } - - args := extractArgs(toInspect) - - action := packageName + "/" + name // the action name, it's not a file path - if packageName == "packages" { - action = name - } - - cmd := []string{"nuv", "action", "update", action, artifact} - cmd = append(cmd, args...) - if !ctx.dryRun { - - execCmd := exec.Command("nuv", cmd[1:]...) - execCmd.Stderr = os.Stderr - execCmd.Stdout = os.Stdout - err := execCmd.Run() - if err != nil { - return fmt.Errorf("error deploying action %s: %v", action, err) - } - } else { - log.Println("Would run:", strings.Join(cmd, " ")) - } - - return nil -} - -func deployPackage(ctx deployCtx, pkg string) { - // package args - ppath := filepath.Join(ctx.path, "packages", pkg+".args") - pargs := extractArgs([]string{ppath}) - cmd := []string{"nuv", "package", "update", pkg} - - cmd = append(cmd, pargs...) - - cmdToSave := strings.Join(cmd, " ") - if _, ok := ctx.packageCmdExecuted[cmdToSave]; !ok { - if !ctx.dryRun { - execCmd := exec.Command("nuv", cmd[1:]...) - execCmd.Stderr = os.Stderr - execCmd.Stdout = os.Stdout - err := execCmd.Run() - if err != nil { - log.Println("Error deploying package", pkg, err) - } - } else { - log.Println("Would run:", strings.Join(cmd, " ")) - } - - ctx.packageCmdExecuted[cmdToSave] = true - } -} - -func extractArgs(files []string) []string { - res := []string{} - for _, file := range files { - if exists(file) { - f, err := os.Open(file) - if err != nil { - log.Println("Error opening file", file, err) - continue - } - defer f.Close() - - scanner := bufio.NewScanner(f) - for scanner.Scan() { - line := scanner.Text() - if strings.HasPrefix(line, "#-") { - res = append(res, strings.TrimSpace(line[1:])) - } - if strings.HasPrefix(line, "//-") { - res = append(res, strings.TrimSpace(line[2:])) - } - } - - if err := scanner.Err(); err != nil { - log.Println("Error reading file", file, err) - } - } - } - // for each string, split by space and add to args - args := []string{} - for _, arg := range res { - args = append(args, strings.Split(arg, " ")...) - } - return args -} - -func buildAction(ctx deployCtx, pkg string, action string) (string, error) { - if !ctx.dryRun { - cmd := exec.Command("nuv", "ide", "util", "action", fmt.Sprintf("A=%s/%s", pkg, action)) - cmd.Stderr = os.Stderr - cmd.Stdout = os.Stdout - err := cmd.Run() - if err != nil { - return "", fmt.Errorf("error building action %s/%s: %v", pkg, action, err) - } - } else { - log.Println("Would run: nuv ide util action A=" + pkg + "/" + action) - } - return fmt.Sprintf("packages/%s/%s.zip", pkg, action), nil -} - -func exists(file string) bool { - _, err := os.Stat(file) - return !os.IsNotExist(err) -} - -func splitPath(path string) []string { - if path == "" { - return []string{} - } - dir, last := filepath.Split(filepath.Clean(path)) - if dir == "." || dir == "/" || dir == "" { - return []string{last} - } - return append(splitPath(dir), last) -} - -// region: scan - -// scan scans the packages and deployments. -func scan(ctx deployCtx) error { - wd, _ := os.Getwd() - _ = os.Chdir(ctx.path) - defer func() { - _ = os.Chdir(wd) - }() - - // First look for requirements.txt and build the venv (add in set) - deployments := make(map[string]bool) - packages := make(map[string]bool) - - log.Println(">>> Scan:") - pyGlob := filepath.Join("packages", "*", "*", "requirements.txt") - jsGlob := filepath.Join("packages", "*", "*", "package.json") - reqs, _ := filepath.Glob(pyGlob) - reqs2, _ := filepath.Glob(jsGlob) - reqs = append(reqs, reqs2...) - - for _, req := range reqs { - log.Println(">", req) - sp := splitPath(req) - action, err := buildZip(ctx, sp[1], sp[2]) - if err != nil { - return fmt.Errorf("error building zip for %s/%s: %v", sp[1], sp[2], err) - } - deployments[action] = true - packages[sp[1]] = true - } - - pyMainGlob := filepath.Join("packages", "*", "*", "__main__.py") - jsMainGlob := filepath.Join("packages", "*", "*", "index.js") - mains, _ := filepath.Glob(pyMainGlob) - pymains, _ := filepath.Glob(jsMainGlob) - mains = append(mains, pymains...) - for _, main := range mains { - log.Println(">", main) - sp := splitPath(main) - action, err := buildAction(ctx, sp[1], sp[2]) - if err != nil { - return fmt.Errorf("error building action %s/%s: %v", sp[1], sp[2], err) - } - deployments[action] = true - packages[sp[1]] = true - } - - pySinglesGlob := filepath.Join("packages", "*", "*.py") - jsSinglesGlob := filepath.Join("packages", "*", "*.js") - singles, _ := filepath.Glob(pySinglesGlob) - jsSingles, _ := filepath.Glob(jsSinglesGlob) - singles = append(singles, jsSingles...) - for _, single := range singles { - log.Println(">", single) - sp := splitPath(single) - deployments[single] = true - packages[sp[1]] = true - } - - if len(deployments) == 0 && len(packages) == 0 { - log.Println("Nothing to do") - return nil - } - - log.Println(">>> Deploying:") - - for p := range packages { - log.Println("%", p) - deployPackage(ctx, p) - } - - for a := range deployments { - log.Println("^", a) - err := deployAction(ctx, a) - if err != nil { - return err - } - } - - return nil -} - -func buildZip(ctx deployCtx, pkg string, action string) (string, error) { - if !ctx.dryRun { - cmd := exec.Command("nuv", "ide", "util", "zip", fmt.Sprintf("A=%s/%s", pkg, action)) - cmd.Stderr = os.Stderr - cmd.Stdout = os.Stdout - err := cmd.Run() - if err != nil { - return "", fmt.Errorf("error building zip %s/%s: %v", pkg, action, err) - } - } else { - log.Println("Would run: nuv ide util zip A=" + pkg + "/" + action) - } - - return fmt.Sprintf("packages/%s/%s.zip", pkg, action), nil -} - -// endregion - -// region: watch - -var SKIPDIR = []string{"virtualenv", "node_modules", "__pycache__"} - -func watch(ctx deployCtx) error { - log.Println(">>> Watching:", filepath.Join(ctx.path, "packages")) - - w := watcher.New() - - err := w.AddRecursive(filepath.Join(ctx.path, "packages")) - if err != nil { - return err - } - - w.IgnoreHiddenFiles(true) - // SetMaxEvents to 1 to allow at most 1 event's to be received - // on the Event channel per watching cycle. - // - // If SetMaxEvents is not set, the default is to send all events. - // w.SetMaxEvents(1) - - watcherEvent := &watcherEvent{ - lastModified: make(map[string]time.Time), - } - - go func() { - for { - select { - case event := <-w.Event: - watcherEvent.changeHandler(ctx, event) - case err := <-w.Error: - log.Println(err) - case <-w.Closed: - return - } - } - }() - - // Start the watching process - it'll check for changes every 100ms. - if err := w.Start(time.Millisecond * 100); err != nil { - return err - } - - return nil -} - -type watcherEvent struct { - lastModified map[string]time.Time -} - -func (w *watcherEvent) changeHandler(ctx deployCtx, event watcher.Event) { - if event.Op != watcher.Write { - return // only handle write events - } - if event.IsDir() { - return // skip directories - } - - src := event.Path - if !exists(src) { - return // no missing files - } - - for _, dir := range splitPath(src)[:len(splitPath(src))-1] { - for _, skip := range SKIPDIR { // no generated directories - if dir == skip { - return - } - } - } - - if strings.HasSuffix(src, ".zip") { - return // no generated files - } - - // cache last modified to do only once (mod time of file) - f, _ := os.Stat(src) - cur := f.ModTime() - lastMod, ok := w.lastModified[src] - if ok && lastMod.Equal(cur) { - return - } - w.lastModified[src] = cur - - log.Println("Changed:", src) - // remove the ctx.path prefix - err := deploy(ctx, strings.TrimPrefix(src, ctx.path+"/")) - if err != nil { - log.Println("Error deploying action", src, err) - } -} - -// endregion diff --git a/tools/deploy_test.go b/tools/deploy_test.go deleted file mode 100644 index 7136969..0000000 --- a/tools/deploy_test.go +++ /dev/null @@ -1,245 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -package tools - -import ( - "fmt" - "log" - "os" - "path/filepath" - "strings" - "testing" - - "github.com/stretchr/testify/require" -) - -func TestExtractArgs(t *testing.T) { - // Prepare a temporary test file - tmpDir := t.TempDir() - file, err := os.CreateTemp(tmpDir, "testfile*.txt") - if err != nil { - t.Fatal(err) - } - - content := `#-arg1 -//-arg2 -other content -#-arg3 -//-arg4` - - _, _ = file.WriteString(content) - file.Close() - - // Test cases - tests := []struct { - name string - files []string - expected []string - }{ - { - name: "Extract args from existing file", - files: []string{file.Name()}, - expected: []string{"-arg1", "-arg2", "-arg3", "-arg4"}, - }, - { - name: "Extract args from non-existing file", - files: []string{"non_existing_file.txt"}, - expected: []string{}, - }, - } - - // Run tests - for _, tc := range tests { - t.Run(tc.name, func(t *testing.T) { - result := extractArgs(tc.files) - require.Equal(t, tc.expected, result) - }) - } -} - -func TestDeployPackage(t *testing.T) { - // create a testpkg.args file - tmpDir := t.TempDir() - //create packages folder - _ = os.MkdirAll(tmpDir+"/packages", 0755) - file, err := os.Create(filepath.Join(tmpDir, "packages", "testpkg1.args")) - if err != nil { - t.Fatal(err) - } - - content := `#-arg1 -//-arg2 -other content -#-arg3 -//-arg4` - - _, _ = file.WriteString(content) - file.Close() - - // Test cases - tests := []struct { - name string - ctx deployCtx - pkg string - expectedExecuted map[string]bool - expectedLog string - }{ - { - name: "Deploy package with no args", - ctx: deployCtx{packageCmdExecuted: make(map[string]bool), dryRun: true, path: "."}, - pkg: "testpkg", - expectedExecuted: map[string]bool{ - "nuv package update testpkg": true, - }, - expectedLog: "Would run: nuv package update testpkg\n", - }, - { - name: "Deploy package with args", - ctx: deployCtx{packageCmdExecuted: make(map[string]bool), dryRun: true, path: tmpDir}, - pkg: "testpkg1", - expectedExecuted: map[string]bool{ - fmt.Sprintf("nuv package update %s -arg1 -arg2 -arg3 -arg4", "testpkg1"): true, - }, - expectedLog: fmt.Sprintf("Would run: nuv package update %s -arg1 -arg2 -arg3 -arg4\n", "testpkg1"), - }, - } - - // Original log output - originalLogOutput := log.Writer() - defer func() { log.SetOutput(originalLogOutput) }() - - // Buffer to capture log output - var logOutput strings.Builder - log.SetOutput(&logOutput) - - // Run tests - for _, tc := range tests { - t.Run(tc.name, func(t *testing.T) { - deployPackage(tc.ctx, tc.pkg) - // Check if the command was executed - require.Equal(t, tc.expectedExecuted, tc.ctx.packageCmdExecuted, "Expected number of executed commands does not match") - require.Contains(t, logOutput.String(), tc.expectedLog, "Log output does not match") - // Reset log output buffer - logOutput.Reset() - }) - } -} - -func TestDeployAction(t *testing.T) { - // create temp index.js with some args - tmpDir := t.TempDir() - _ = os.Mkdir(filepath.Join(tmpDir, "packages"), 0755) - _ = os.Mkdir(filepath.Join(tmpDir, "packages", "packageName"), 0755) - _ = os.Mkdir(filepath.Join(tmpDir, "packages", "packageName", "action"), 0755) - file, err := os.Create(filepath.Join(tmpDir, "packages", "packageName", "action", "index.js")) - if err != nil { - t.Fatal(err) - } - - content := `#--kind nodejs:20` - - _, _ = file.WriteString(content) - - // Test cases - tests := []struct { - name string - ctx deployCtx - artifact string - dryRun bool - expectedExecuted bool - expectedLog string - }{ - { - name: "Deploy action from zip file", - ctx: deployCtx{dryRun: true, path: tmpDir, packageCmdExecuted: make(map[string]bool)}, - artifact: "packages/packageName/action.zip", - expectedLog: "nuv action update packageName/action packages/packageName/action.zip --kind nodejs:20", - }, - { - name: "Deploy action from non-zip file", - ctx: deployCtx{dryRun: true, path: ".", packageCmdExecuted: make(map[string]bool)}, - artifact: "packages/packageName/index.js", - expectedLog: "nuv action update packageName/index packages/packageName/index.js", - }, - } - - for _, tc := range tests { - t.Run(tc.name, func(t *testing.T) { - // Original log output - originalLogOutput := log.Writer() - defer func() { log.SetOutput(originalLogOutput) }() - - // Buffer to capture log output - var logOutput strings.Builder - log.SetOutput(&logOutput) - - err := deployAction(tc.ctx, tc.artifact) - - // Assertions - require.NoError(t, err, "Error deploying action") - require.Contains(t, logOutput.String(), tc.expectedLog, "Log output does not match") - // Reset log output buffer - logOutput.Reset() - }) - } -} -func TestSplitPath(t *testing.T) { - tests := []struct { - name string - path string - expected []string - }{ - { - name: "Split empty path", - path: "", - expected: []string{}, - }, - { - name: "Split path with single directory", - path: "dir1", - expected: []string{"dir1"}, - }, - { - name: "Split path with multiple directories", - path: "dir1/dir2/dir3", - expected: []string{"dir1", "dir2", "dir3"}, - }, - { - name: "Split path with leading slash", - path: "/dir1/dir2/dir3", - expected: []string{"dir1", "dir2", "dir3"}, - }, - { - name: "Split path with trailing slash", - path: "dir1/dir2/dir3/", - expected: []string{"dir1", "dir2", "dir3"}, - }, - { - name: "Split path with leading and trailing slash", - path: "/dir1/dir2/dir3/", - expected: []string{"dir1", "dir2", "dir3"}, - }, - } - - for _, tc := range tests { - t.Run(tc.name, func(t *testing.T) { - result := splitPath(tc.path) - require.Equal(t, tc.expected, result) - }) - } -} diff --git a/tools/js.go b/tools/js.go deleted file mode 100644 index da1ac56..0000000 --- a/tools/js.go +++ /dev/null @@ -1,55 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -package tools - -import ( - "flag" - "fmt" - "os" - - "github.com/mattn/go-isatty" - goja "github.com/nuvolaris/goja/gojamain" -) - -func jsToolMain() error { - flag := flag.NewFlagSet("js", flag.ExitOnError) - flag.Usage = func() { - fmt.Println(`nuv -js - -Usage: - nuv -js FILE.js - -Interpret and run Javascript code.`) - } - - // Parse command line flags - err := flag.Parse(os.Args[1:]) - if err != nil { - return err - } - - // Check if input is from terminal and not from a pipe - isTerminal := isatty.IsTerminal(os.Stdin.Fd()) || isatty.IsCygwinTerminal(os.Stdin.Fd()) - // if no input file and no input from pipe, print help message - if isTerminal && flag.NArg() == 0 { - flag.Usage() - return nil - } - - return goja.GojaMain() -} diff --git a/tools/mkdirs.go b/tools/mkdirs.go deleted file mode 100644 index 7e108ad..0000000 --- a/tools/mkdirs.go +++ /dev/null @@ -1,67 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -package tools - -import ( - "flag" - "fmt" - "os" -) - -func Mkdirs() error { - flag.Usage = printMkdirsHelp - // Define command line flags - helpFlag := flag.Bool("h", false, "Print help message") - parentFlag := flag.Bool("p", false, "Create parent directories") - - // Parse command line flags - flag.Parse() - - // Print help message if -h flag is provided - if *helpFlag { - flag.Usage() - return nil - } - - // Get the list of directories to create from the remaining command line arguments - dirs := flag.Args() - if len(dirs) == 0 { - flag.Usage() - } - - // Create each directory, with or without parent directories - for _, dir := range dirs { - if *parentFlag { - err := os.MkdirAll(dir, 0755) - if err != nil { - return err - } - } else { - err := os.Mkdir(dir, 0755) - if err != nil { - return err - } - } - } - return nil -} - -func printMkdirsHelp() { - fmt.Println("Usage: mkdir [-h] [-p] DIRECTORY...") - fmt.Println("Create one or more directories.") -} diff --git a/tools/realpath.go b/tools/realpath.go deleted file mode 100644 index 312509a..0000000 --- a/tools/realpath.go +++ /dev/null @@ -1,72 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -package tools - -import ( - "errors" - "flag" - "fmt" - "os" - "path/filepath" - - "github.com/mitchellh/go-homedir" -) - -func realpathTool() error { - flags := flag.NewFlagSet("realpath", flag.ExitOnError) - flags.Usage = func() { - fmt.Println("Usage: nuv -realpath <path>") - fmt.Println() - fmt.Println("Options:") - flags.PrintDefaults() - } - - showHelp := flags.Bool("h", false, "Show help") - - // Parse command-line arguments - if err := flags.Parse(os.Args[1:]); err != nil { - return err - } - - if *showHelp { - flags.Usage() - return nil - } - - if flags.NArg() != 1 { - flags.Usage() - return errors.New("no path provided") - } - - path, err := homedir.Expand(flags.Arg(0)) - if err != nil { - return err - } - - var absPath string - if filepath.IsLocal(path) { - absPath = filepath.Join(os.Getenv("NUV_PWD"), path) - } else { - absPath = path - } - - absPath = filepath.Clean(absPath) - fmt.Println(absPath) - - return nil -} diff --git a/tools/scan.go b/tools/scan.go deleted file mode 100644 index 98963c8..0000000 --- a/tools/scan.go +++ /dev/null @@ -1,283 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -package tools - -import ( - "errors" - "flag" - "fmt" - "io/fs" - "os" - "os/exec" - "path/filepath" - "strings" - "sync" -) - -const actionsFolder = "actions" - -// The scan tool visits a folder and creates an action plan to execute the given cmd (called cmdPlan). -// The cmd is the given nuv command to run, and the args is an array of arrays. -// Each entry is one execution instance, which holds the folder path (first arg) and files names (the rest). -// The plan is then executed by running the cmd once for each entry of args (so args.length times) -// in the form of `cmd args[i][0] args[i][1] ... args[i][n]` for each i in args. -type cmdPlan struct { - par bool - dryRun bool - cmd []string - args [][]string -} - -func (p *cmdPlan) apply() error { - var ars []string - if len(p.cmd) > 1 { - ars = append(ars, p.cmd[1:]...) - } - - if p.par { - var wg sync.WaitGroup - for _, args := range p.args { - wg.Add(1) - go func(args []string) { - if p.dryRun { - fmt.Println(strings.Join(append(p.cmd, args...), " ")) - } else { - cmd := exec.Command(p.cmd[0], append(ars, args...)...) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - if err := cmd.Run(); err != nil { - fmt.Println(err) - } - } - wg.Done() - }(args) - } - wg.Wait() - return nil - } - - // run sequentially - for _, args := range p.args { - if p.dryRun { - fmt.Println(strings.Join(append(p.cmd, args...), " ")) - continue - } - cmd := exec.Command(p.cmd[0], append(ars, args...)...) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - if err := cmd.Run(); err != nil { - return err - } - } - return nil -} - -func (p *cmdPlan) setCmd(cmd []string) { - p.cmd = cmd -} -func (p *cmdPlan) appendArg(args []string) { - p.args = append(p.args, args) -} - -func scanTool() error { - flag := flag.NewFlagSet("scan", flag.ExitOnError) - flag.Usage = func() { - fmt.Println(`Scan tool - -The scan tool runs a command on an 'actions' folder and on all its sub-folders, recursively. -If the 'actions' folder does not exist in the path used, the tool stops. - -In the 'actions' folder, the tool invokes the given nuv command with the following arguments: - - the absolute path of the folder it is processing - - all the files in the folder that matches the glob (none by default, use '*' to select all) - -You can pass a glob pattern with the -g flag to filter the files used as input. - -Usage: - nuv -scan [options] <nuv cmd> [args...] - -Example: - nuv -scan -g "*" nuv -js script.js - -This results in running the script.js file on the ./actions folder and all subdirectories. -For example, if $NUV_PWD/actions contains a subfolder called 'i-am-sub' with a file called 'bar.js', -the following commands are executed: - - - nuv -js script.js ./actions - - nuv -js script.js ./actions/i-am-sub bar.js - -Options:`) - flag.PrintDefaults() - fmt.Println() - } - - var ( - helpFlag bool - dirFlag string - globFlag string - parallelFlag bool - dryRunFlag bool - ) - - // flag.BoolVar(&helpFlag, "h", false, "show help") - flag.BoolVar(&helpFlag, "help", false, "show help") - // flag.StringVar(&dirFlag, "d", getCurrentDir(), "directory to scan (default: $NUV_PWD)") - flag.StringVar(&dirFlag, "dir", os.Getenv("NUV_PWD"), "directory to scan (default: $NUV_PWD)") - // flag.StringVar(&globFlag, "g", "", "glob pattern to filter files (default: no files are passed to the nuv command)") - flag.StringVar(&globFlag, "glob", "", "glob pattern between quotes to filter files (default: none -> no files are passed to the nuv command)") - flag.BoolVar(&dryRunFlag, "dry-run", false, "print the plan without executing it") - // flag.BoolVar(¶llelFlag, "p", false, "run in parallel (default: false)") - flag.BoolVar(¶llelFlag, "par", false, "run in parallel (default: false)") - - if err := flag.Parse(os.Args[1:]); err != nil { - return err - } - - if helpFlag { - flag.Usage() - return nil - } - - args := flag.Args() - if len(args) < 1 { - flag.Usage() - return errors.New("missing required nuv command") - } - - p, err := filepath.Abs(dirFlag) - if err != nil { - return err - } - - plan, err := buildCmdPlan(p, args, globFlag) - if err != nil { - return err - } - - plan.par = parallelFlag - plan.dryRun = dryRunFlag - - return plan.apply() -} - -func buildCmdPlan(scanPath string, cmd []string, glob string) (*cmdPlan, error) { - // check if actions folder exists - if err := checkActionsFolderExists(scanPath); err != nil { - return nil, err - } - - dirs, err := getAllDirs(filepath.Join(scanPath, actionsFolder)) - if err != nil { - return nil, err - } - - plan := &cmdPlan{} - plan.setCmd(cmd) - - for _, dir := range dirs { - files := make([]string, 0) - - if len(glob) > 0 { - fls, err := getAllFiles(dir) - if err != nil { - return nil, err - } - - if len(fls) > 0 { - files, err = filterFiles(fls, glob) - if err != nil { - return nil, err - } - } - } - - plan.appendArg(append([]string{dir}, files...)) - } - - return plan, nil -} - -func filterFiles(files []string, glob string) ([]string, error) { - filtered := make([]string, 0) - - if len(glob) == 0 { - return filtered, nil - } - - for _, file := range files { - matched, err := filepath.Match(glob, file) - if err != nil { - return filtered, err - } - - if matched { - filtered = append(filtered, file) - } - } - - return filtered, nil -} - -func getAllDirs(rootDir string) ([]string, error) { - var dirs []string - - err := filepath.WalkDir(rootDir, func(path string, d fs.DirEntry, err error) error { - if err != nil { - return err - } - - if d.IsDir() { - dirs = append(dirs, path) - } - - return nil - }) - - return dirs, err -} - -func getAllFiles(dir string) ([]string, error) { - var files []string - - children, err := os.ReadDir(dir) - if err != nil { - return files, err - } - - for _, child := range children { - if !child.IsDir() { - files = append(files, child.Name()) - } - } - - return files, err -} - -func checkActionsFolderExists(path string) error { - info, err := os.Stat(filepath.Join(path, actionsFolder)) - if os.IsNotExist(err) { - return fmt.Errorf("%s folder not found in %s", actionsFolder, path) - } - if err != nil { - return err - } - if !info.IsDir() { - return fmt.Errorf("%s in %s is not a folder", actionsFolder, path) - } - return nil -} diff --git a/tools/scan_test.go b/tools/scan_test.go deleted file mode 100644 index 2d46712..0000000 --- a/tools/scan_test.go +++ /dev/null @@ -1,256 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -package tools - -import ( - "os" - "path/filepath" - "testing" - - "github.com/stretchr/testify/require" -) - -func Test_buildActionPlan(t *testing.T) { - cmd := []string{"nuv", "-js", "script.js"} - - t.Run("returns error if no actions folder", func(t *testing.T) { - tempDir := t.TempDir() - _, err := buildCmdPlan(tempDir, cmd, "") - if err == nil { - t.Error("expected error, got nil") - } - }) - - t.Run("returns one arg cmd plan if empty folder", func(t *testing.T) { - tempDir := t.TempDir() - _ = os.Mkdir(filepath.Join(tempDir, actionsFolder), 0755) - - expectedPath := filepath.Join(tempDir, actionsFolder) - - plan, err := buildCmdPlan(tempDir, cmd, "") - require.NoError(t, err) - require.Len(t, plan.args, 1) - require.Len(t, plan.args[0], 1) - require.Equal(t, expectedPath, plan.args[0][0]) - }) - - t.Run("returns one arg cmd plan if folder with one file", func(t *testing.T) { - tempDir := t.TempDir() - actionsDir := filepath.Join(tempDir, actionsFolder) - _ = os.Mkdir(actionsDir, 0755) - _ = os.WriteFile(filepath.Join(actionsDir, "file.js"), []byte("test"), 0644) - - expectedPath := filepath.Join(tempDir, actionsFolder) - - plan, err := buildCmdPlan(tempDir, cmd, "*") - require.NoError(t, err) - require.Len(t, plan.args, 1) - require.Len(t, plan.args[0], 2) - require.Equal(t, expectedPath, plan.args[0][0]) - require.Equal(t, "file.js", plan.args[0][1]) - }) - - t.Run("returns plan if folder with multiple subfolders and files", func(t *testing.T) { - tempDir := t.TempDir() - actionsDir := filepath.Join(tempDir, actionsFolder) - _ = os.Mkdir(actionsDir, 0755) - _ = os.WriteFile(filepath.Join(actionsDir, "file.js"), []byte("test"), 0644) - _ = os.Mkdir(filepath.Join(actionsDir, "subdir1"), 0755) - _ = os.WriteFile(filepath.Join(actionsDir, "subdir1", "file1.js"), []byte("test"), 0644) - _ = os.Mkdir(filepath.Join(actionsDir, "subdir2"), 0755) - _ = os.WriteFile(filepath.Join(actionsDir, "subdir2", "file2.js"), []byte("test"), 0644) - _ = os.Mkdir(filepath.Join(actionsDir, "subdir3"), 0755) - - // Expected args: - // /actions file.js - // /actions/subdir1 file1.js - // /actions/subdir2 file2.js - // /actions/subdir3 - - plan, err := buildCmdPlan(tempDir, cmd, "*") - - require.NoError(t, err) - require.Len(t, plan.args, 4) - require.Len(t, plan.args[0], 2) - require.Len(t, plan.args[1], 2) - require.Len(t, plan.args[2], 2) - require.Len(t, plan.args[3], 1) - require.Equal(t, filepath.Join(tempDir, actionsFolder), plan.args[0][0]) - require.Equal(t, "file.js", plan.args[0][1]) - require.Equal(t, filepath.Join(tempDir, actionsFolder, "subdir1"), plan.args[1][0]) - require.Equal(t, "file1.js", plan.args[1][1]) - require.Equal(t, filepath.Join(tempDir, actionsFolder, "subdir2"), plan.args[2][0]) - require.Equal(t, "file2.js", plan.args[2][1]) - require.Equal(t, filepath.Join(tempDir, actionsFolder, "subdir3"), plan.args[3][0]) - }) - - t.Run("returns plan if folder with multiple subfolders and files and pattern", func(t *testing.T) { - tempDir := t.TempDir() - actionsDir := filepath.Join(tempDir, actionsFolder) - _ = os.Mkdir(actionsDir, 0755) - _ = os.WriteFile(filepath.Join(actionsDir, "file.js"), []byte("test"), 0644) - _ = os.Mkdir(filepath.Join(actionsDir, "subdir1"), 0755) - _ = os.WriteFile(filepath.Join(actionsDir, "subdir1", "file1.js"), []byte("test"), 0644) - _ = os.Mkdir(filepath.Join(actionsDir, "subdir2"), 0755) - _ = os.WriteFile(filepath.Join(actionsDir, "subdir2", "file2.py"), []byte("test"), 0644) - _ = os.Mkdir(filepath.Join(actionsDir, "subdir3"), 0755) - - // Expected args: - // /actions file.js - // /actions/subdir1 file1.js - // /actions/subdir2 - // /actions/subdir3 - - plan, err := buildCmdPlan(tempDir, cmd, "*.js") - - require.NoError(t, err) - require.Len(t, plan.args, 4) - require.Len(t, plan.args[0], 2) - require.Len(t, plan.args[1], 2) - require.Len(t, plan.args[2], 1) - require.Len(t, plan.args[3], 1) - require.Equal(t, filepath.Join(tempDir, actionsFolder), plan.args[0][0]) - require.Equal(t, "file.js", plan.args[0][1]) - require.Equal(t, filepath.Join(tempDir, actionsFolder, "subdir1"), plan.args[1][0]) - require.Equal(t, "file1.js", plan.args[1][1]) - require.Equal(t, filepath.Join(tempDir, actionsFolder, "subdir2"), plan.args[2][0]) - require.Equal(t, filepath.Join(tempDir, actionsFolder, "subdir3"), plan.args[3][0]) - }) -} - -func Test_filterFiles(t *testing.T) { - - testCases := []struct { - name string - pattern string - expected []string - }{ - { - name: "returns all files if pattern is *", - pattern: "*", - expected: []string{ - "file1.js", - "file2.py", - "file3.go", - }, - }, - { - name: "returns no files if pattern is empty", - pattern: "", - expected: []string{}, - }, - { - name: "returns all .js files if pattern is *.js", - pattern: "*.js", - expected: []string{ - "file1.js", - }, - }, - } - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - files := []string{ - "file1.js", - "file2.py", - "file3.go", - } - - filtered, err := filterFiles(files, tc.pattern) - require.NoError(t, err) - require.Equal(t, tc.expected, filtered) - }) - } -} - -func Test_checkActionsFolder(t *testing.T) { - t.Run("returns error if actions folder does not exist", func(t *testing.T) { - tmpDir := t.TempDir() - err := checkActionsFolderExists(tmpDir) - require.Error(t, err) - }) - - t.Run("returns error if actions folder is not a folder", func(t *testing.T) { - tmpDir := t.TempDir() - actionsFile := filepath.Join(tmpDir, actionsFolder) - _, err := os.Create(actionsFile) - require.NoError(t, err) - err = checkActionsFolderExists(tmpDir) - require.Error(t, err) - }) - - t.Run("returns nil if actions folder exists", func(t *testing.T) { - tmpDir := t.TempDir() - actionsFile := filepath.Join(tmpDir, actionsFolder) - err := os.Mkdir(actionsFile, 0755) - require.NoError(t, err) - err = checkActionsFolderExists(tmpDir) - require.NoError(t, err) - }) -} - -func Test_getAllDirs(t *testing.T) { - // Create a temporary directory for testing - tempDir := t.TempDir() - - expectedDirs := []string{tempDir} - - // Create some subdirectories inside the temporary directory - subDirs := []string{"dir1", "dir2", "dir3"} - subSubDirs := []string{"subdir1", "subdir2", "subdir3"} - for i, dir := range subDirs { - tDir := filepath.Join(tempDir, dir) - tSubDir := filepath.Join(tDir, subSubDirs[i]) - expectedDirs = append(expectedDirs, tDir) - expectedDirs = append(expectedDirs, tSubDir) - err := os.Mkdir(filepath.Join(tempDir, dir), 0755) - - require.NoError(t, err) - err = os.Mkdir(tSubDir, 0755) - - require.NoError(t, err) - } - - dirs, err := getAllDirs(tempDir) - require.NoError(t, err) - - // Verify that the expected directories are present - require.Equal(t, len(expectedDirs), len(dirs)) - - require.ElementsMatch(t, expectedDirs, dirs) -} - -func Test_getAllFiles(t *testing.T) { - tempDir := t.TempDir() - - expectedFiles := []string{"file1", "file2", "file3"} - - // Create some files inside the temporary directory - for _, file := range expectedFiles { - f, err := os.Create(filepath.Join(tempDir, file)) - f.Close() - require.NoError(t, err) - } - - files, err := getAllFiles(tempDir) - require.NoError(t, err) - - // Verify that the expected files are present - require.Equal(t, len(expectedFiles), len(files)) - require.ElementsMatch(t, expectedFiles, files) -} diff --git a/tools/tools.go b/tools/tools.go index edfdb4d..11975fa 100644 --- a/tools/tools.go +++ b/tools/tools.go @@ -33,14 +33,13 @@ import ( // available in taskfiles // note some of them are implemented in main.go (config, retry) var tools = []string{ - "awk", "die", "jq", "js", - "envsubst", "wsk", "mkdir", + "awk", "die", "jq", + "envsubst", "wsk", "filetype", "random", "datefmt", "config", "retry", "urlenc", "replace", "base64", "validate", "echoif", "echoifempty", "echoifexists", - "realpath", "zipf", "needupdate", - "gron", "jj", "deploy", + "needupdate", "gron", "jj", "deploy", } // not available in taskfiles @@ -49,9 +48,6 @@ var extraTools = []string{ } func IsTool(name string) bool { - if IsUtil(name) { - return true - } for _, s := range tools { if s == name { return true @@ -74,9 +70,6 @@ func GetNuvCmd() string { } func RunTool(name string, args []string) (int, error) { - if IsUtil(name) { - return RunUtil(name, args) - } switch name { case "wsk": //fmt.Println("=== wsk ===") @@ -93,21 +86,11 @@ func RunTool(name string, args []string) (int, error) { case "jq": os.Args = append([]string{"gojq"}, args...) return gojq.Run(), nil - case "js": - os.Args = append([]string{"goja"}, args...) - if err := jsToolMain(); err != nil { - return 1, err - } case "envsubst": os.Args = append([]string{"envsubst"}, args...) if err := envsubst.EnvsubstMain(); err != nil { return 1, err } - case "mkdir": - os.Args = append([]string{"mkdir"}, args...) - if err := Mkdirs(); err != nil { - return 1, err - } case "filetype": os.Args = append([]string{"mkdir"}, args...) if err := Filetype(); err != nil { @@ -145,11 +128,6 @@ func RunTool(name string, args []string) (int, error) { if err := validateTool(); err != nil { return 1, err } - case "scan": - os.Args = append([]string{"scan"}, args...) - if err := scanTool(); err != nil { - return 1, err - } case "echoif": os.Args = append([]string{"echoif"}, args...) if err := echoIfTool(); err != nil { @@ -165,16 +143,6 @@ func RunTool(name string, args []string) (int, error) { if err := echoIfExistsTool(); err != nil { return 1, err } - case "realpath": - os.Args = append([]string{"realpath"}, args...) - if err := realpathTool(); err != nil { - return 1, err - } - - case "zipf": - if err := zipfTool(args); err != nil { - return 1, err - } case "needupdate": if err := needUpdateTool(args); err != nil { @@ -189,12 +157,6 @@ func RunTool(name string, args []string) (int, error) { os.Args = append([]string{"jj"}, args...) return jj.JJMain() - case "deploy": - if err := DeployTool(); err != nil { - return 1, err - } - } - return 0, nil } diff --git a/tools/util.go b/tools/util.go deleted file mode 100644 index 5c37e32..0000000 --- a/tools/util.go +++ /dev/null @@ -1,73 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package tools - -import ( - "fmt" - "os" - "os/exec" - - "github.com/nuvolaris/someutils" - "github.com/nuvolaris/someutils/some" -) - -var Utils = []string{ - "basename", "cat", "cp", "dirname", - "gunzip", "gzip", "head", - "ls", "mv", "pwd", "rm", "sleep", - "tail", "tar", "tee", "touch", "tr", - "unzip", "wc", "which", "zip", -} - -func IsUtil(name string) bool { - some.Init() - for _, s := range Utils { - if s == name { - return true - } - } - return false -} - -func RunUtil(name string, args []string) (int, error) { - if IsUtil(name) { - full := append([]string{name}, args...) - var err error - var code int - if useCoreutils() { - code, err = runCoreUtils(full) - } else { - err, code = someutils.Call(name, full) - } - return code, err - } - return 1, fmt.Errorf("command %s not found", name) -} - -func useCoreutils() bool { - return os.Getenv("NUV_USE_COREUTILS") != "" -} - -func runCoreUtils(full []string) (int, error) { - cmd := exec.Command("coreutils", full...) - cmd.Stdin = os.Stdin - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - err := cmd.Run() - code := cmd.ProcessState.ExitCode() - return code, err -} diff --git a/tools/wsk.go b/tools/wsk.go index d8cb40a..b6ba551 100644 --- a/tools/wsk.go +++ b/tools/wsk.go @@ -24,8 +24,8 @@ import ( "github.com/apache/openwhisk-client-go/whisk" goi18n "github.com/nicksnyder/go-i18n/i18n" - "github.com/nuvolaris/openwhisk-cli/commands" - "github.com/nuvolaris/openwhisk-cli/wski18n" + "github.com/sciabarracom/openwhisk-cli/commands" + "github.com/sciabarracom/openwhisk-cli/wski18n" ) // prepare wsk execution @@ -49,7 +49,6 @@ func Wsk(command []string, args ...string) error { // set wsk variable //setWskEnvVariable(false) - //debug("WSK_CONFIG_FILE=" + os.Getenv("WSK_CONFIG_FILE")) // compose the command diff --git a/tools/zipf.go b/tools/zipf.go deleted file mode 100644 index 7652558..0000000 --- a/tools/zipf.go +++ /dev/null @@ -1,250 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -package tools - -import ( - "archive/zip" - "bytes" - "flag" - "fmt" - "io" - "log" - "os" - "os/exec" - "path/filepath" - "regexp" - "strings" -) - -func zipfTool(args []string) error { - flag := flag.NewFlagSet("zipf", flag.ExitOnError) - flag.Usage = func() { - fmt.Println(`nuv -zipf - -Zip an action folder. -If the folder contains a main file, the output file is <folder>.<ext>.zip where the extension is the extension of the main file. - -You can specify the output file with the -o option to override the default name. - -You can pass a command with the -x option. -The command is a shell command that is executed on the zipped folder and its output is saved as the output file. - -N.B.: The zip file is saved in the same parent folder of the input folder. - -Usage: - nuv -zipf <folder> [-o <zipfile>] [-x <command>] - -Options:`) - flag.PrintDefaults() - } - - out := flag.String("o", "", "override output file name (default is <folder>[.<ext>].zip)") - cmd := flag.String("x", "", "command to execute on the zipped folder") - help := flag.Bool("h", false, "print this help") - - err := flag.Parse(args) - if err != nil { - return err - } - - if *help { - flag.Usage() - return nil - } - - if flag.NArg() != 1 { - flag.Usage() - return fmt.Errorf("invalid number of arguments") - } - - dir := flag.Arg(0) - if *out == "" { - *out, err = generateOutputFileName(dir) - if err != nil { - return err - } - } - - *out = filepath.Join(filepath.Dir(dir), *out) - - buf, err := Zip(dir) - if err != nil { - return err - } - - if *cmd == "" { - err = os.WriteFile(*out, buf, 0644) - if err != nil { - return err - } - log.Println(*out) - return nil - } - - stdout, err := runCommandWithStdin(*cmd, buf) - if err != nil { - return err - } - - err = os.WriteFile(*out, stdout, 0644) - if err != nil { - return err - } - log.Println(*out) - return nil -} - -func runCommandWithStdin(cmd string, stdin []byte) ([]byte, error) { - c := exec.Command(cmd) - c.Stdin = bytes.NewReader(stdin) - c.Stdout = os.Stdout - c.Stderr = os.Stderr - err := c.Run() - if err != nil { - return nil, err - } - // return stdout - return c.Output() -} - -// GenerateOutputFileName generates the name of the zipped folder -// If the output file is not specified, the output file is `<folder>.<ext>` where the extension can be: -// -// - `.js.zip` if there is a `main.js` in the `<folder>` -// - `.py.zip` if there is a `__main__.py` in the `<folder> -// - `.go.zip` if there is a `main.go` in the `<folder>` -// - `php.zip` if there is a `main.pho` in the `<folder>` -// - `.java.zip` if there is a `Main.java` in the folder -// -// in general, look for a file with this regexp: `^.*[mM]ain.**\.(.*)$` and use the extension of the main file -// if no main found use just `.zip` -func generateOutputFileName(folder string) (string, error) { - // List of possible main file extensions and their corresponding output extensions - mainFileExtensions := map[string]string{ - ".js": ".js.zip", - ".py": ".py.zip", - ".go": ".go.zip", - ".php": ".php.zip", - ".java": ".java.zip", - } - - // Compile the regular expression pattern - mainFilePattern := regexp.MustCompile(`^.*[mM]ain.*\.(.*)$`) - - // Check if any file in the folder matches the regexp for main files - dirEntries, err := os.ReadDir(folder) - if err != nil { - return "", err - } - - for _, dirEntry := range dirEntries { - fullPath := filepath.Join(folder, dirEntry.Name()) - - if !dirEntry.IsDir() && isRegularFile(fullPath) && mainFilePattern.MatchString(dirEntry.Name()) { - ext := filepath.Ext(dirEntry.Name()) - outputExt, ok := mainFileExtensions[ext] - if ok { - // remove the extension from the main file name - return filepath.Base(folder) + outputExt, nil - } - } - } - - // If no main file was found, use ".zip" as the default extension - return filepath.Base(folder) + ".zip", nil -} - -func isRegularFile(path string) bool { - info, err := os.Lstat(path) - if err != nil { - return false - } - return info.Mode().IsRegular() -} - -// Zip a directory -func Zip(dir string) ([]byte, error) { - buf := new(bytes.Buffer) - zwr := zip.NewWriter(buf) - dir = filepath.Clean(dir) - err := filepath.Walk(dir, func(filePath string, info os.FileInfo, err error) error { - - // trim the relevant part of the path - relPath := strings.TrimPrefix(filePath, dir) - if relPath == "" { - return nil - } - relPath = relPath[1:] - if err != nil { - return err - } - - // create a proper entry - isLink := (info.Mode() & os.ModeSymlink) == os.ModeSymlink - header := &zip.FileHeader{ - Name: relPath, - Method: zip.Deflate, - } - if isLink { - header.SetMode(0755 | os.ModeSymlink) - w, err := zwr.CreateHeader(header) - if err != nil { - return err - } - ln, err := os.Readlink(filePath) - if err != nil { - return err - } - _, err = w.Write([]byte(ln)) - if err != nil { - return err - } - } else if info.IsDir() { - header.Name = relPath + "/" - header.SetMode(0755) - _, err := zwr.CreateHeader(header) - if err != nil { - return err - } - } else if info.Mode().IsRegular() { - header.SetMode(0755) - w, err := zwr.CreateHeader(header) - if err != nil { - return err - } - fsFile, err := os.Open(filePath) - if err != nil { - return err - } - defer fsFile.Close() - _, err = io.Copy(w, fsFile) - if err != nil { - return err - } - } - return nil - }) - if err != nil { - return nil, err - } - err = zwr.Close() - if err != nil { - return nil, err - } - return buf.Bytes(), nil -} diff --git a/tools/zipf_test.go b/tools/zipf_test.go deleted file mode 100644 index 6b07592..0000000 --- a/tools/zipf_test.go +++ /dev/null @@ -1,61 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -package tools - -import ( - "testing" -) - -func TestGenerateOutputFileName(t *testing.T) { - t.Run("NoMainFiles", func(t *testing.T) { - // Test case where there are no main files in the folder - result, err := generateOutputFileName("testdata/no_main_files/") - if err != nil { - t.Errorf("Unexpected error: %v", err) - } - expected := "no_main_files.zip" - if result != expected { - t.Errorf("Expected: %s, but got: %s", expected, result) - } - }) - - t.Run("JavaScriptMainFile", func(t *testing.T) { - // Test case where there is a JavaScript main file - result, err := generateOutputFileName("testdata/js_main/") - if err != nil { - t.Errorf("Unexpected error: %v", err) - } - expected := "js_main.js.zip" - if result != expected { - t.Errorf("Expected: %s, but got: %s", expected, result) - } - }) - - // t.Run("PythonMainFile", func(t *testing.T) { - // // Test case where there is a Python main file - // result, err := generateOutputFileName("testdata/py_main/") - // if err != nil { - // t.Errorf("Unexpected error: %v", err) - // } - // expected := "py_main.py.zip" - // if result != expected { - // t.Errorf("Expected: %s, but got: %s", expected, result) - // } - // }) - -} diff --git a/validate/Taskfile.yaml b/validate/Taskfile.yaml deleted file mode 100644 index 87cf9ff..0000000 --- a/validate/Taskfile.yaml +++ /dev/null @@ -1,116 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -version: '3' - -vars: - VER: - sh: git describe --tags --abbrev=0 2>/dev/null || git rev-parse --short HEAD - -tasks: - default: task --list-all - - pre: - - docker login - - validate: - silent: true - cmds: - - echo === "{{.IMG}}" - - > - cat validate.sh - | docker run -i "{{.IMG}}" - env VER="{{.VER}}" EXT="{{.EXT}}" ARCH={{ARCH}} bash - - - ro9: - - task: validate - vars: - EXT: ".rpm" - IMG: "rockylinux:9" - - ubi9: - - task: validate - vars: - EXT: ".rpm" - IMG: "registry.access.redhat.com/ubi9/ubi:latest" - - ostumble: - - task: validate - vars: - EXT: ".rpm" - IMG: "opensuse/tumbleweed:latest" - - ub22: - - task: validate - vars: - EXT: ".deb" - IMG: "ubuntu:22.04" - - de12: - - task: validate - vars: - EXT: ".deb" - IMG: "debian:12" - - ro8: - - task: validate - vars: - EXT: "_redhat8.rpm" - IMG: "rockylinux:8" - - ubi8: - - task: validate - vars: - EXT: "_redhat8.rpm" - IMG: "registry.access.redhat.com/ubi8/ubi:latest" - - os15: - - task: validate - vars: - EXT: "_redhat8.rpm" - IMG: "opensuse/leap:latest" - ub20: - - task: validate - vars: - EXT: "_ubuntu20.deb" - IMG: "ubuntu:20.04" - - de11: - - task: validate - vars: - EXT: "_ubuntu20.deb" - IMG: "debian:11" - - osleap: - - task: validate - vars: - EXT: "_redhat8.rpm" - IMG: "opensuse/leap:latest" - - - all: - - task: pre - - task: ub22 - - task: ub20 - - task: ubi9 - - task: ubi8 - - task: de12 - - task: de11 - - task: ro9 - - task: ro8 - - task: osleap - - task: ostumble diff --git a/validate/validate.sh b/validate/validate.sh deleted file mode 100644 index afa65b1..0000000 --- a/validate/validate.sh +++ /dev/null @@ -1,42 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -#VER=3.0.1-beta.2310151130 -#EXT=.rpm - -URL=https://github.com/nuvolaris/nuv/releases/download/$VER/nuv_${VER}_${ARCH}${EXT} >nuv${EXT} -echo $(basename $URL) - -case "$EXT" in - *.deb) - apt-get update >/dev/null 2>/dev/null && apt-get install -y curl >/dev/null 2>/dev/null - export INST="dpkg -i" - ;; - *.rpm) - export INST="rpm -i" - ;; -esac - -curl -sL "$URL" >nuv${EXT} -$INST "nuv${EXT}" >/dev/null 2>/dev/null -nuv -v >/dev/null 2>/dev/null - -if nuv -info | grep "NUV_VERSION: $VER" -then exit 0 -else exit 1 -fi -
