#variant (2020-08)

https://github.com/mumoshu/variant

Discuss variant (the “Universal CLI”) https://github.com/mumoshu/variant

Archive: https://archive.sweetops.com/variant/

2020-08-13

johncblandii (Cloud Posse) avatar
johncblandii (Cloud Posse)

@mumoshu any thoughts on this error? (see first comment)

This was working fine and is now failing with no changes to the variant files or the build approach.

johncblandii (Cloud Posse) avatar
johncblandii (Cloud Posse)
Step 6/45 : RUN wget <https://github.com/mumoshu/variant2/releases/download/v${VARIANT_VERSION}/variant_${VARIANT_VERSION}_linux_amd64.tar.gz> &&     tar -zvxf variant*.tar.gz variant &&     mv variant /usr/local/bin/variant2 &&     rm -f variant*.tar.gz
 ---> Running in 39ac904d79b3
Connecting to [github.com](http://github\.com) (140.82.114.4:443)
Connecting to [github-production-release-asset-2e65be.s3.amazonaws.com](http://github\-production\-release\-asset\-2e65be\.s3\.amazonaws\.com) (52.217.101.12:443)
saving to 'variant_0.28.0_linux_amd64.tar.gz'
variant_0.28.0_linux   5% |*                               |  662k  0:00:17 ETA
variant_0.28.0_linux  40% |*************                   | 5116k  0:00:02 ETA
variant_0.28.0_linux  99% |******************************* | 12.1M  0:00:00 ETA
variant_0.28.0_linux 100% |********************************| 12.2M  0:00:00 ETA
'variant_0.28.0_linux_amd64.tar.gz' saved
variant
Removing intermediate container 39ac904d79b3
 ---> e0541f921166
Step 7/45 : COPY cli .
 ---> bfb966dc9ef4
Step 8/45 : ARG CGO_ENABLED=1
 ---> Running in 47b7cdef1c39
Removing intermediate container 47b7cdef1c39
 ---> 09c2051f78b8
Step 9/45 : RUN make build
 ---> Running in bfddcfae3b86
variant2 export binary /usr/cli nbo
go: creating new go.mod: module cli
go: finding module for package [github.com/mumoshu/variant2](http://github\.com/mumoshu/variant2)
go: downloading [github.com/mumoshu/variant2](http://github\.com/mumoshu/variant2) v0.33.0
go: found [github.com/mumoshu/variant2> in <http://github.com/mumoshu/variant2|github.com/mumoshu/variant2](http://github\.com/mumoshu/variant2) v0.33.0
go: downloading [github.com/mattn/go-isatty](http://github\.com/mattn/go\-isatty) v0.0.12
go: downloading [github.com/hashicorp/hcl](http://github\.com/hashicorp/hcl) v1.0.0
go: downloading [github.com/spf13/cobra](http://github\.com/spf13/cobra) v0.0.5
go: downloading [github.com/nlopes/slack](http://github\.com/nlopes/slack) v0.6.0
go: downloading [github.com/variantdev/mod](http://github\.com/variantdev/mod) v0.18.0
go: downloading [github.com/google/go-cmp](http://github\.com/google/go\-cmp) v0.4.0
go: downloading [github.com/kr/text](http://github\.com/kr/text) v0.1.0
go: downloading [github.com/hashicorp/go-multierror](http://github\.com/hashicorp/go\-multierror) v1.0.0
go: downloading [github.com/pkg/errors](http://github\.com/pkg/errors) v0.9.1
go: downloading [github.com/variantdev/vals](http://github\.com/variantdev/vals) v0.4.0
go: downloading [github.com/AlecAivazis/survey/v2](http://github\.com/AlecAivazis/survey/v2) v2.0.5
go: downloading [github.com/zclconf/go-cty](http://github\.com/zclconf/go\-cty) v1.2.1
go: downloading [gopkg.in/yaml.v3](http://gopkg\.in/yaml\.v3) v3.0.0-20200313102051-9f266ea9e77c
go: downloading [github.com/rs/xid](http://github\.com/rs/xid) v1.2.1
go: downloading [github.com/hashicorp/hcl/v2](http://github\.com/hashicorp/hcl/v2) v2.3.0
go: downloading [github.com/spf13/pflag](http://github\.com/spf13/pflag) v1.0.5
go: downloading [github.com/imdario/mergo](http://github\.com/imdario/mergo) v0.3.8
go: downloading [github.com/heroku/docker-registry-client](http://github\.com/heroku/docker\-registry\-client) v0.0.0-20190909225348-afc9e1acc3d5
go: downloading [github.com/hashicorp/terraform](http://github\.com/hashicorp/terraform) v0.12.18
go: downloading [github.com/go-logr/logr](http://github\.com/go\-logr/logr) v0.1.0
go: downloading [k8s.io/klog](http://k8s\.io/klog) v1.0.0
go: downloading [github.com/twpayne/go-vfs](http://github\.com/twpayne/go\-vfs) v1.3.6
go: downloading [github.com/kballard/go-shellquote](http://github\.com/kballard/go\-shellquote) v0.0.0-20180428030007-95032a82bc51
go: downloading [golang.org/x/sys](http://golang\.org/x/sys) v0.0.0-20200331124033-c3d80250170d
go: downloading [github.com/evanphx/json-patch](http://github\.com/evanphx/json\-patch) v4.5.0+incompatible
go: downloading [github.com/Masterminds/semver](http://github\.com/Masterminds/semver) v1.5.0
go: downloading [github.com/hashicorp/errwrap](http://github\.com/hashicorp/errwrap) v1.0.0
go: downloading [github.com/hashicorp/golang-lru](http://github\.com/hashicorp/golang\-lru) v0.5.4
go: downloading [github.com/aws/aws-sdk-go](http://github\.com/aws/aws\-sdk\-go) v1.29.34
go: downloading [github.com/xeipuuv/gojsonschema](http://github\.com/xeipuuv/gojsonschema) v1.2.0
go: downloading [github.com/gorilla/websocket](http://github\.com/gorilla/websocket) v1.4.0
go: downloading [github.com/docker/distribution](http://github\.com/docker/distribution) v2.7.1+incompatible
go: downloading [github.com/variantdev/dag](http://github\.com/variantdev/dag) v0.0.0-20191028002400-bb0b3c785363
go: downloading [google.golang.org/genproto](http://google\.golang\.org/genproto) v0.0.0-20200403120447-c50568487044
go: downloading [github.com/hashicorp/go-getter](http://github\.com/hashicorp/go\-getter) v1.4.1
go: downloading [github.com/apparentlymart/go-textseg](http://github\.com/apparentlymart/go\-textseg) v1.0.0
go: downloading [cloud.google.com/go](http://cloud\.google\.com/go) v0.56.0
go: downloading [github.com/mgutz/ansi](http://github\.com/mgutz/ansi) v0.0.0-20170206155736-9520e82c474b
go: downloading [github.com/google/go-github](http://github\.com/google/go\-github) v17.0.0+incompatible
go: downloading [github.com/k-kinzal/aliases](http://github\.com/k\-kinzal/aliases) v0.5.1
go: downloading [github.com/zclconf/go-cty-yaml](http://github\.com/zclconf/go\-cty\-yaml) v1.0.1
go: downloading [github.com/opencontainers/image-spec](http://github\.com/opencontainers/image\-spec) v1.0.1
go: downloading [github.com/google/go-github/v27](http://github\.com/google/go\-github/v27) v27.0.6
go: downloading [github.com/mattn/go-colorable](http://github\.com/mattn/go\-colorable) v0.1.4
go: downloading [golang.org/x/oauth2](http://golang\.org/x/oauth2) v0.0.0-20200107190931-bf48bf16ab8d
go: downloading [github.com/docker/libtrust](http://github\.com/docker/libtrust) v0.0.0-20160708172513-aabc10ec26b7
go: downloading [github.com/iancoleman/strcase](http://github\.com/iancoleman/strcase) v0.0.0-20191112232945-16388991a334
go: downloading [github.com/opencontainers/go-digest](http://github\.com/opencontainers/go\-digest) v1.0.0-rc1
go: downloading [github.com/sirupsen/logrus](http://github\.com/sirupsen/logrus) v1.4.2
go: downloading [github.com/hashicorp/vault](http://github\.com/hashicorp/vault) v1.2.3
go: downloading [go.mozilla.org/sops](http://go\.mozilla\.org/sops) v0.0.0-20190611200209-e9e1e87723c8
go: downloading [github.com/Masterminds/sprig](http://github\.com/Masterminds/sprig) v2.22.0+incompatible
go: downloading [github.com/xeipuuv/gojsonreference](http://github\.com/xeipuuv/gojsonreference) v0.0.0-20180127040603-bd5ef7bd5415
go: downloading [gopkg.in/yaml.v2](http://gopkg\.in/yaml\.v2) v2.2.8
go: downloading [github.com/fatih/color](http://github\.com/fatih/color) v1.9.0
go: downloading [github.com/mitchellh/go-wordwrap](http://github\.com/mitchellh/go\-wordwrap) v1.0.0
go: downloading [github.com/google/uuid](http://github\.com/google/uuid) v1.1.1
go: downloading [github.com/huandu/xstrings](http://github\.com/huandu/xstrings) v1.3.0
go: downloading [golang.org/x/crypto](http://golang\.org/x/crypto) v0.0.0-20200214034016-1d94cc7ab1c6
go: downloading [github.com/ulikunitz/xz](http://github\.com/ulikunitz/xz) v0.5.6
go: downloading [github.com/bgentry/go-netrc](http://github\.com/bgentry/go\-netrc) v0.0.0-20140422174119-9fd32a8b3d3d
go: downloading [gopkg.in/go-playground/validator.v9](http://gopkg\.in/go\-playground/validator\.v9) v9.31.0
go: downloading [github.com/mozilla-services/yaml](http://github\.com/mozilla\-services/yaml) v0.0.0-20180922153656-28ffe5d0cafb
go: downloading [github.com/hashicorp/go-cleanhttp](http://github\.com/hashicorp/go\-cleanhttp) v0.5.1
go: downloading [github.com/apparentlymart/go-cidr](http://github\.com/apparentlymart/go\-cidr) v1.0.1
go: downloading [github.com/googleapis/gax-go](http://github\.com/googleapis/gax\-go) v2.0.0+incompatible
go: downloading [github.com/googleapis/gax-go/v2](http://github\.com/googleapis/gax\-go/v2) v2.0.5
go: downloading [google.golang.org/grpc](http://google\.golang\.org/grpc) v1.28.0
go: downloading [github.com/creasty/defaults](http://github\.com/creasty/defaults) v1.3.0
go: downloading [github.com/Masterminds/goutils](http://github\.com/Masterminds/goutils) v1.1.0
go: downloading [github.com/mitchellh/go-homedir](http://github\.com/mitchellh/go\-homedir) v1.1.0
go: downloading [github.com/hashicorp/go-safetemp](http://github\.com/hashicorp/go\-safetemp) v1.0.0
go: downloading [github.com/leodido/go-urn](http://github\.com/leodido/go\-urn) v1.2.0
go: downloading [github.com/golang/protobuf](http://github\.com/golang/protobuf) v1.3.5
go: downloading [github.com/hashicorp/vault/api](http://github\.com/hashicorp/vault/api) v1.0.5-0.20190909201928-35325e2c3262
go: downloading [cloud.google.com/go/storage](http://cloud\.google\.com/go/storage) v1.6.0
go: downloading [google.golang.org/api](http://google\.golang\.org/api) v0.20.0
go: downloading [github.com/hashicorp/go-uuid](http://github\.com/hashicorp/go\-uuid) v1.0.1
go: downloading [golang.org/x/net](http://golang\.org/x/net) v0.0.0-20200324143707-d3edc9973b7e
go: downloading [github.com/hashicorp/vault/sdk](http://github\.com/hashicorp/vault/sdk) v0.1.14-0.20190909201848-e0fbf9b652e2
go: downloading [github.com/go-playground/universal-translator](http://github\.com/go\-playground/universal\-translator) v0.17.0
go: downloading [golang.org/x/time](http://golang\.org/x/time) v0.0.0-20191024005414-555d28b269f0
go: downloading [github.com/hashicorp/go-version](http://github\.com/hashicorp/go\-version) v1.2.0
go: downloading [github.com/mitchellh/copystructure](http://github\.com/mitchellh/copystructure) v1.0.0
go: downloading [github.com/xeipuuv/gojsonpointer](http://github\.com/xeipuuv/gojsonpointer) v0.0.0-20190905194746-02993c407bfb
go: downloading [github.com/PaesslerAG/jsonpath](http://github\.com/PaesslerAG/jsonpath) v0.1.1
go: downloading [gopkg.in/square/go-jose.v2](http://gopkg\.in/square/go\-jose\.v2) v2.3.1
go: downloading [github.com/Azure/azure-sdk-for-go](http://github\.com/Azure/azure\-sdk\-for\-go) v36.2.0+incompatible
go: downloading [github.com/mitchellh/go-testing-interface](http://github\.com/mitchellh/go\-testing\-interface) v1.0.0
go: downloading [github.com/mitchellh/mapstructure](http://github\.com/mitchellh/mapstructure) v1.1.2
go: downloading [github.com/fujiwara/tfstate-lookup](http://github\.com/fujiwara/tfstate\-lookup) v0.0.4
go: downloading [github.com/hashicorp/go-retryablehttp](http://github\.com/hashicorp/go\-retryablehttp) v0.5.4
go: downloading [github.com/bmatcuk/doublestar](http://github\.com/bmatcuk/doublestar) v1.1.5
go: downloading [golang.org/x/text](http://golang\.org/x/text) v0.3.2
go: downloading [github.com/go-playground/locales](http://github\.com/go\-playground/locales) v0.13.0
go: downloading [github.com/tidwall/gjson](http://github\.com/tidwall/gjson) v1.3.5
go: downloading [github.com/hashicorp/go-rootcerts](http://github\.com/hashicorp/go\-rootcerts) v1.0.1
go: downloading [go.opencensus.io](http://go\.opencensus\.io) v0.22.3
go: downloading [github.com/hashicorp/go-sockaddr](http://github\.com/hashicorp/go\-sockaddr) v1.0.2
go: downloading [github.com/golang/groupcache](http://github\.com/golang/groupcache) v0.0.0-20200121045136-8c9f03a8e57e
go: downloading [github.com/pierrec/lz4](http://github\.com/pierrec/lz4) v2.2.6+incompatible
go: downloading [github.com/tidwall/match](http://github\.com/tidwall/match) v1.0.1
go: downloading [github.com/agext/levenshtein](http://github\.com/agext/levenshtein) v1.2.2
go: downloading [github.com/golang/snappy](http://github\.com/golang/snappy) v0.0.1
go: downloading [github.com/google/go-querystring](http://github\.com/google/go\-querystring) v1.0.0
go: downloading [github.com/itchyny/gojq](http://github\.com/itchyny/gojq) v0.9.0
go: downloading [github.com/mitchellh/reflectwalk](http://github\.com/mitchellh/reflectwalk) v1.0.0
go: downloading [github.com/PaesslerAG/gval](http://github\.com/PaesslerAG/gval) v1.0.1
go: downloading [github.com/goware/prefixer](http://github\.com/goware/prefixer) v0.0.0-20160118172347-395022866408
go: downloading [github.com/alecthomas/participle](http://github\.com/alecthomas/participle) v0.4.2-0.20191220090139-9fbceec1d131
go: downloading [github.com/pbnjay/strptime](http://github\.com/pbnjay/strptime) v0.0.0-20140226051138-5c05b0d668c9
go: downloading [github.com/tidwall/pretty](http://github\.com/tidwall/pretty) v1.0.0
go: downloading [github.com/howeyc/gopass](http://github\.com/howeyc/gopass) v0.0.0-20170109162249-bf9dde6d0d2c
go: downloading [go.mozilla.org/gopgagent](http://go\.mozilla\.org/gopgagent) v0.0.0-20170926210634-4d7ea76ff71a
go: downloading [github.com/lestrrat-go/strftime](http://github\.com/lestrrat\-go/strftime) v1.0.1
go: downloading [github.com/ryanuber/go-glob](http://github\.com/ryanuber/go\-glob) v1.0.0
go: downloading [github.com/jmespath/go-jmespath](http://github\.com/jmespath/go\-jmespath) v0.0.0-20180206201540-c2b33e8439af
go: downloading [github.com/lib/pq](http://github\.com/lib/pq) v1.2.0
go: downloading [github.com/Azure/go-autorest](http://github\.com/Azure/go\-autorest) v13.2.0+incompatible
go: downloading [github.com/Azure/go-autorest/autorest](http://github\.com/Azure/go\-autorest/autorest) v0.9.2
go: downloading [github.com/Azure/go-autorest/tracing](http://github\.com/Azure/go\-autorest/tracing) v0.5.0
go: downloading [github.com/Azure/go-autorest/autorest/azure/auth](http://github\.com/Azure/go\-autorest/autorest/azure/auth) v0.4.0
go: downloading [github.com/Azure/go-autorest/autorest/validation](http://github\.com/Azure/go\-autorest/autorest/validation) v0.2.0
go: downloading [github.com/Azure/go-autorest/autorest/date](http://github\.com/Azure/go\-autorest/autorest/date) v0.2.0
go: downloading [github.com/Azure/go-autorest/autorest/to](http://github\.com/Azure/go\-autorest/autorest/to) v0.3.0
go: downloading [github.com/Azure/go-autorest/autorest/adal](http://github\.com/Azure/go\-autorest/autorest/adal) v0.8.1-0.20191028180845-3492b2aff503
go: downloading [github.com/Azure/go-autorest/logger](http://github\.com/Azure/go\-autorest/logger) v0.1.0
go: downloading [github.com/dimchansky/utfbom](http://github\.com/dimchansky/utfbom) v1.1.0
go: downloading [github.com/Azure/go-autorest/autorest/azure/cli](http://github\.com/Azure/go\-autorest/autorest/azure/cli) v0.3.0
go: downloading [github.com/dgrijalva/jwt-go](http://github\.com/dgrijalva/jwt\-go) v3.2.0+incompatible

\# cli
./main.go:2536:9: undefined: variant.MustEval
Error: command "sh -c cd /tmp/variant-cli778896582; go mod init cli && go build -o /usr/cli/nbo /tmp/variant-cli778896582": exit status 2
make: *** [Makefile:4: build] Error 1
The command '/bin/sh -c make build' returned a non-zero code: 2
make[1]: *** [docker/build] Error 2
make: *** [build] Error 2
mumoshu avatar
mumoshu

Thanks for reporting. Seems like a regression introduced by recent change. I’ll investigate further and add regression test for that later!

johncblandii (Cloud Posse) avatar
johncblandii (Cloud Posse)

i’m curious why it’d be a problem since we’re downloading a specific version

mumoshu avatar
mumoshu

ah, im in doubt that go build is actually download the latest version of variant2

johncblandii (Cloud Posse) avatar
johncblandii (Cloud Posse)

gotcha

johncblandii (Cloud Posse) avatar
johncblandii (Cloud Posse)

this is the docker build, btw.


\# Builder for the nbo CLI
ARG VARIANT_VERSION=0.28.0

FROM golang:alpine3.11 as cli

RUN apk add -u make

WORKDIR /usr/cli


\# Install variant
ARG VARIANT_VERSION
RUN wget <https://github.com/mumoshu/variant2/releases/download/v${VARIANT_VERSION}/variant_${VARIANT_VERSION}_linux_amd64.tar.gz> && \
    tar -zvxf variant*.tar.gz variant && \
    mv variant /usr/local/bin/variant2 && \
    rm -f variant*.tar.gz


\# Copy the cli directory
COPY cli .

ARG CGO_ENABLED=1
RUN make build
mumoshu avatar
mumoshu

ideally export binary should produce go.mod that locks the depended variant2 to the specific version

johncblandii (Cloud Posse) avatar
johncblandii (Cloud Posse)

make build is:

build:
	variant2 export binary $(CURDIR) nbo
johncblandii (Cloud Posse) avatar
johncblandii (Cloud Posse)

< yes

mumoshu avatar
mumoshu

a workaround is to do variant2 export go, update/add go.sum and then go build -o nbo $(CURDIR)

mumoshu avatar
mumoshu

and your go.sum should contain something like the below to work:

module ....
require (
	[github.com/mumoshu/variant2](http://github\.com/mumoshu/variant2) vx.y.z
)

where vx.y.z should be replaced with the exact version of variant2 you want

johncblandii (Cloud Posse) avatar
johncblandii (Cloud Posse)

doesn’t export go.sum

johncblandii (Cloud Posse) avatar
johncblandii (Cloud Posse)

just a main.go

mumoshu avatar
mumoshu

yes. i think i missed implementing it, which is why variant2 export binary broke due to recent api changes in variant2

johncblandii (Cloud Posse) avatar
johncblandii (Cloud Posse)

let me see if 0.33.0 works w/ the cli

johncblandii (Cloud Posse) avatar
johncblandii (Cloud Posse)

it definitely built just fine. let me run the unit tests to validate it

mumoshu avatar
mumoshu

thx for confirming!

anyway, i’ll enhance export binary to also write go.sum. i’ll also see if i can bring back the old API MustEval to future versions of variant2

johncblandii (Cloud Posse) avatar
johncblandii (Cloud Posse)

oddly the tests fail all the time now

johncblandii (Cloud Posse) avatar
johncblandii (Cloud Posse)

even went back to the original 0.28.0 and they fail there too. very odd

1
mumoshu avatar
mumoshu

how the test failures look like?

mumoshu avatar
mumoshu

how are you running tests?

johncblandii (Cloud Posse) avatar
johncblandii (Cloud Posse)

ahh…nm. this is likely due to this docker build

:--1:1
johncblandii (Cloud Posse) avatar
johncblandii (Cloud Posse)

ok…going back to testing versions real quick. tests run fine in this build now

johncblandii (Cloud Posse) avatar
johncblandii (Cloud Posse)

well…all tests pass in 0.33.0 so an upgrade may be enough to address this for now

johncblandii (Cloud Posse) avatar
johncblandii (Cloud Posse)
0.28.0 / `variant export binary` builds fail without changes to the CLI code · Issue #22 · mumoshu/variant2

@mumoshu thoughts on the cause and a solution: ideally export binary should produce go.mod that locks the depended variant2 to the specific version yes. i think i missed implementing it, which is w…

mumoshu avatar
mumoshu

thanks!

:--1:1
    keyboard_arrow_up