diff --git a/.circleci/config.yml b/.circleci/config.yml index 20be247938..132b18f67e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -196,8 +196,8 @@ jobs: - checkout - setup_remote_docker - run: - name: Build Docker artifact - demo - command: docker build --pull -t "cosmwasm/wasmd-demo:${CIRCLE_SHA1}" . + name: Build Docker artifact + command: docker build --pull -t "cosmwasm/wasmd:${CIRCLE_SHA1}" . - run: name: Push application Docker image to docker hub command: | @@ -216,13 +216,13 @@ jobs: - checkout - setup_remote_docker - run: - name: Build Docker artifact - demo - command: docker build --pull -t "cosmwasm/wasmd-demo:${CIRCLE_TAG}" . + name: Build Docker artifact + command: docker build --pull -t "cosmwasm/wasmd:${CIRCLE_TAG}" . - run: name: Push application Docker image to docker hub command: | docker login --password-stdin -u "$DOCKER_USER" \<<<"$DOCKER_PASS" - docker push "cosmwasm/wasmd-demo:${CIRCLE_TAG}" + docker push "cosmwasm/wasmd:${CIRCLE_TAG}" docker logout reproducible-builds: diff --git a/Dockerfile b/Dockerfile index 75b779492f..b6dc1444ff 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,28 +1,39 @@ -# Simple usage with a mounted data directory: -# > docker build -t gaia . -# > docker run -it -p 46657:46657 -p 46656:46656 -v ~/.wasmd:/root/.wasmd -v ~/.wasmcli:/root/.wasmcli gaia wasmd init -# > docker run -it -p 46657:46657 -p 46656:46656 -v ~/.wasmd:/root/.wasmd -v ~/.wasmcli:/root/.wasmcli gaia wasmd start -FROM golang:1.13-buster AS build-env - -# Install minimum necessary dependencies, build Cosmos SDK, remove packages -RUN apt update -RUN apt install -y curl git build-essential -# debug: for live editting in the image -RUN apt install -y vim - -# Set working directory for the build -WORKDIR /go/src/github.com/cosmwasm/wasmd - -# Add source files -COPY . . -# -RUN make tools -RUN make install - -# Install libgo_cosmwasm.so to a shared directory where it is readable by all users -# See https://github.com/CosmWasm/wasmd/issues/43#issuecomment-608366314 -# Note that CosmWasm gets turned into !cosm!wasm in the pkg/mod cache -RUN cp /go/pkg/mod/github.com/\!cosm\!wasm/go-cosmwasm@v*/api/libgo_cosmwasm.so /lib/x86_64-linux-gnu +# docker build . -t cosmwasm/wasm:latest +# docker run --rm -it cosmwasm/wasm:latest /bin/sh +FROM cosmwasm/go-ext-builder:0.8.2-alpine AS builder + +RUN apk add git +# without this, build with LEDGER_ENABLED=false +RUN apk add libusb-dev linux-headers + +# copy all code into /code +WORKDIR /code +COPY . /code + +# download all deps +RUN go mod download +# TODO: how to use this instead of hardcoding GO_COSMWASM +RUN basename $(ls -d /go/pkg/mod/github.com/\!cosm\!wasm/go-cosmwasm@v*) + +ENV GO_COSMWASM="v0.8.2-0.20200615221537-0fc920db0349" + +# build go-cosmwasm *.a and install it +WORKDIR /go/pkg/mod/github.com/\!cosm\!wasm/go-cosmwasm@${GO_COSMWASM} +RUN cargo build --release --features backtraces --example muslc +RUN mv /go/pkg/mod/github.com/\!cosm\!wasm/go-cosmwasm@${GO_COSMWASM}/target/release/examples/libmuslc.a /lib/libgo_cosmwasm_muslc.a +# I got errors from go mod verify (called from make build) if I didn't clean this up +RUN rm -rf /go/pkg/mod/github.com/\!cosm\!wasm/go-cosmwasm@${GO_COSMWASM}/target + +# build the go wasm binary +WORKDIR /code + +# force it to use static lib (from above) not standard libgo_cosmwasm.so file +RUN BUILD_TAGS=muslc make build + +FROM alpine:3.12 + +COPY --from=builder /code/build/wasmd /usr/bin/wasmd +COPY --from=builder /code/build/wasmcli /usr/bin/wasmcli COPY docker/* /opt/ RUN chmod +x /opt/*.sh @@ -36,4 +47,4 @@ EXPOSE 26656 # tendermint rpc EXPOSE 26657 -CMD ["wasmd"] +CMD ["/usr/bin/wasmd version"] \ No newline at end of file diff --git a/Dockerfile.alpine b/Dockerfile.alpine deleted file mode 100644 index 92d2a940a0..0000000000 --- a/Dockerfile.alpine +++ /dev/null @@ -1,50 +0,0 @@ -# docker build . -t wasm-alpine -f ./Dockerfile.alpine -# docker run --rm -it wasm-alpine /bin/sh -FROM cosmwasm/go-ext-builder:0.8.2-alpine AS builder - -RUN apk add git -# without this, build with LEDGER_ENABLED=false -RUN apk add libusb-dev linux-headers - -# copy all code into /code -WORKDIR /code -COPY . /code - -# download all deps -RUN go mod download -# TODO: how to use this instead of hardcoding GO_COSMWASM -RUN basename $(ls -d /go/pkg/mod/github.com/\!cosm\!wasm/go-cosmwasm@v*) - -ENV GO_COSMWASM="v0.8.2-0.20200615221537-0fc920db0349" - -# build go-cosmwasm *.a and install it -WORKDIR /go/pkg/mod/github.com/\!cosm\!wasm/go-cosmwasm@${GO_COSMWASM} -RUN cargo build --release --features backtraces --example muslc -RUN mv /go/pkg/mod/github.com/\!cosm\!wasm/go-cosmwasm@${GO_COSMWASM}/target/release/examples/libmuslc.a /lib/libgo_cosmwasm_muslc.a -# I got errors from go mod verify (called from make build) if I didn't clean this up -RUN rm -rf /go/pkg/mod/github.com/\!cosm\!wasm/go-cosmwasm@${GO_COSMWASM}/target - -# build the go wasm binary -WORKDIR /code - -# force it to use static lib (from above) not standard libgo_cosmwasm.so file -RUN BUILD_TAGS=muslc make build - -FROM alpine:3.12 - -COPY --from=builder /code/build/wasmd /usr/bin/wasmd -COPY --from=builder /code/build/wasmcli /usr/bin/wasmcli - -COPY docker/* /opt/ -RUN chmod +x /opt/*.sh - -WORKDIR /opt - -# rest server -EXPOSE 1317 -# tendermint p2p -EXPOSE 26656 -# tendermint rpc -EXPOSE 26657 - -CMD ["/usr/bin/wasmd version"] \ No newline at end of file diff --git a/Dockerfile.old b/Dockerfile.old new file mode 100644 index 0000000000..75b779492f --- /dev/null +++ b/Dockerfile.old @@ -0,0 +1,39 @@ +# Simple usage with a mounted data directory: +# > docker build -t gaia . +# > docker run -it -p 46657:46657 -p 46656:46656 -v ~/.wasmd:/root/.wasmd -v ~/.wasmcli:/root/.wasmcli gaia wasmd init +# > docker run -it -p 46657:46657 -p 46656:46656 -v ~/.wasmd:/root/.wasmd -v ~/.wasmcli:/root/.wasmcli gaia wasmd start +FROM golang:1.13-buster AS build-env + +# Install minimum necessary dependencies, build Cosmos SDK, remove packages +RUN apt update +RUN apt install -y curl git build-essential +# debug: for live editting in the image +RUN apt install -y vim + +# Set working directory for the build +WORKDIR /go/src/github.com/cosmwasm/wasmd + +# Add source files +COPY . . +# +RUN make tools +RUN make install + +# Install libgo_cosmwasm.so to a shared directory where it is readable by all users +# See https://github.com/CosmWasm/wasmd/issues/43#issuecomment-608366314 +# Note that CosmWasm gets turned into !cosm!wasm in the pkg/mod cache +RUN cp /go/pkg/mod/github.com/\!cosm\!wasm/go-cosmwasm@v*/api/libgo_cosmwasm.so /lib/x86_64-linux-gnu + +COPY docker/* /opt/ +RUN chmod +x /opt/*.sh + +WORKDIR /opt + +# rest server +EXPOSE 1317 +# tendermint p2p +EXPOSE 26656 +# tendermint rpc +EXPOSE 26657 + +CMD ["wasmd"] diff --git a/INTEGRATION.md b/INTEGRATION.md index 82f2830c03..0a4710f389 100644 --- a/INTEGRATION.md +++ b/INTEGRATION.md @@ -17,11 +17,16 @@ hardware it runs on. | v0.7 | v0.38 | | v0.8 | v0.38 | -We currently only support Intel/AMD64 CPUs and OSX or Linux (with glibc - not muslc like alpine). -This limit comes from the Rust dll we use to run the wasm code. There are open issues -for adding [ARM support](https://github.com/CosmWasm/go-cosmwasm/issues/53), -adding [Windows support](https://github.com/CosmWasm/go-cosmwasm/issues/28), -and [compiling static binaries](https://github.com/CosmWasm/go-cosmwasm/issues/45), so it works on both glibc and muslc systems. +We currently only support Intel/AMD64 CPUs and OSX or Linux. For Linux, the standard build +commands work for `glibc` systems (Ubuntu, Debian, CentOS, etc). If you wish to compile +for a `muslc` based system (like alpine), you need to compile a static library go-cosmwasm locally +and compile go with the `muslc` build tag. Or just use the [Dockerfile](./Dockerfile), +which builds a static go binary in an alpine system. + +This limit comes from the Rust dll we use to run the wasm code, which comes +from [`go-cosmwasm`](https://github.com/CosmWasm/go-cosmwasm). There are open issues +for adding [ARM support](https://github.com/CosmWasm/go-cosmwasm/issues/53), and +adding [Windows support](https://github.com/CosmWasm/go-cosmwasm/issues/28). However, these issues are not high on the roadmap and unless you are championing them, please count on the current limits for the near future. diff --git a/README.md b/README.md index 7f63760504..bc15596d07 100644 --- a/README.md +++ b/README.md @@ -49,13 +49,14 @@ If you want to deploy a whole cluster, [look at the network scripts](./networks/ We provide a docker image to help with test setups. There are two modes to use it -Build: `docker build -t cosmwasm/wasmd:manual .` or pull from dockerhub +Build: `docker build -t cosmwasm/wasmd:latest .` or pull from dockerhub ### Dev server Bring up a local node with a test account containing tokens -This is just designed for local testing/CI - DO NOT USE IN PRODUCTION +This is just designed for local testing/CI - do not use these scripts in production. +Very likely you will assign tokens to accounts whose mnemonics are public on github. ```sh docker volume rm -f wasmd_data diff --git a/go.mod b/go.mod index 941885c35b..aac2400860 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/CosmWasm/wasmd go 1.13 require ( - // Note: update ENV GO_COSMWASM in Dockerfile.alpine when updating this + // Note: update ENV GO_COSMWASM in Dockerfile when updating this github.com/CosmWasm/go-cosmwasm v0.8.2-0.20200615221537-0fc920db0349 github.com/btcsuite/btcd v0.0.0-20190807005414-4063feeff79a // indirect github.com/cosmos/cosmos-sdk v0.38.3