diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7946639b..f862343e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -9,6 +9,7 @@ on: - 'contracts/**' - 'tests/**' - 'Cargo.*' + - '.github/**' env: CARGO_TERM_COLOR: always @@ -23,7 +24,7 @@ jobs: uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: 1.66.1 # stable + toolchain: 1.68.0 # stable override: true - uses: Swatinem/rust-cache@v1 # Set up Node environment @@ -48,7 +49,7 @@ jobs: uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: 1.66.1 # stable + toolchain: 1.68.0 # stable components: rustfmt, clippy - uses: Swatinem/rust-cache@v1 # Run lint diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..4c6f78e2 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +FROM rust:1.68.0 +LABEL description="Container for builds" + +ENV RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static +ENV RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup + +RUN apt-get update && apt-get install -y git less vim clang + +RUN rustup default 1.68.0 +RUN rustup target add wasm32-unknown-unknown + +# Cargo files are needed to install and cache dependencies +ADD contracts/linear/Cargo.toml . +ADD Cargo.lock . + +# a trick to run cargo build +RUN mkdir -p src && echo "fn main() {}" > src/lib.rs && \ + RUSTFLAGS="-C link-arg=-s" cargo build -p linear --target wasm32-unknown-unknown --release && \ + rm Cargo.toml && \ + rm -rf ./src/ target/release/deps/my-project* target/release/my-project* diff --git a/README.md b/README.md index 7bac312b..dd7c99d0 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,8 @@ In order to use it, run `npm i` first. - `git push origin release/v1.0.x` - Create a PR from the release branch - Once the PR is merged, publish a new release on GitHub +- Build release artifacts to deploy: + - `make release` ## Manage diff --git a/makefile b/makefile index 57ea841d..6fc4ddf6 100644 --- a/makefile +++ b/makefile @@ -2,13 +2,18 @@ RFLAGS="-C link-arg=-s" all: linear -linear: contracts/linear +release: + $(call docker_build) + mkdir -p res + cp target/wasm32-unknown-unknown/release/linear.wasm ./res/linear.wasm + +linear: contracts/linear check-rustc-version rustup target add wasm32-unknown-unknown RUSTFLAGS=$(RFLAGS) cargo build -p linear --target wasm32-unknown-unknown --release mkdir -p res cp target/wasm32-unknown-unknown/release/linear.wasm ./res/linear.wasm -linear_test: contracts/linear +linear_test: contracts/linear check-rustc-version rustup target add wasm32-unknown-unknown RUSTFLAGS=$(RFLAGS) cargo build -p linear --target wasm32-unknown-unknown --features "test" mkdir -p res @@ -77,3 +82,22 @@ test-mock-fungible-token: mock-fungible-token @mkdir -p ./tests/compiled-contracts/ cp ./res/mock_fungible_token.wasm ./tests/compiled-contracts/mock_fungible_token.wasm cd tests && npx near-workspaces-ava __tests__/mock-fungible-token/**.ts --verbose + +check-rustc-version: + @RUSTC_VERSION=$$(rustc --version | awk '{print $$2}'); \ + if [ "$$RUSTC_VERSION" != "1.68.0" ]; then \ + echo "Error: Rustc version is $$RUSTC_VERSION but 1.68.0 is required." && exit 1; \ + else \ + echo "Rustc version $$RUSTC_VERSION is installed."; \ + fi + +define docker_build + docker build -t near-builder:1.68.0 . + docker run \ + --mount type=bind,source=${PWD},target=/host \ + --cap-add=SYS_PTRACE --security-opt seccomp=unconfined \ + -w /host \ + -e RUSTFLAGS=$(RFLAGS) \ + -i -t near-builder:1.68.0 \ + make +endef