From 86c2530b0f6916f29dfeb1aa033582838a7fe739 Mon Sep 17 00:00:00 2001 From: Лач Date: Sun, 28 Jun 2020 20:37:53 +0000 Subject: [PATCH] ci: build wasm on ci --- --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ .idea .vscode + +cache --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,57 @@ -image: "rustlang/rust:nightly" +variables: + CARGO_HOME: $CI_PROJECT_DIR/cache + +stages: + - prepare + - build + +build-container: + image: docker:19.03.11 + stage: prepare + services: + - docker:19.03.11-dind + before_script: + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + script: + - docker build -t $CI_REGISTRY_IMAGE:build . + - docker push $CI_REGISTRY_IMAGE:build -test:cargo: +test-library: + image: $CI_REGISTRY_IMAGE:build + stage: build script: - - rustc --version && cargo --version - - cargo test --all --verbose + - make test + cache: + key: test + paths: + - ./cache + +build-linux: + image: $CI_REGISTRY_IMAGE:build + stage: build + script: + - make build-native + cache: + key: linux + paths: + - ./cache + - ./target + artifacts: + paths: + - ./target/release/jrsonnet + expire_in: 30 days + +build-wasm: + image: $CI_REGISTRY_IMAGE:build + stage: build + script: + - make build-wasi + cache: + key: wasm + paths: + - ./cache + - ./target + artifacts: + paths: + - ./target/wasm32-wasi/release/jsonnet.wasm + expire_in: 30 days --- a/Makefile +++ b/Makefile @@ -1,10 +1,7 @@ -jsonnet-cpp: - git clone https://github.com/google/jsonnet jsonnet-cpp - -.ONESHELL: -test-examples: jsonnet-cpp - cargo build --release - export JSONNET_BIN="$(PWD)/target/release/jsonnet" - export EXAMPLES_DIR="$(PWD)/jsonnet-cpp/examples/" - cd ./jsonnet-cpp/examples/ - ./check.sh +.PHONY: test build build-wasi +test: + cargo test +build: + RUSTFLAGS="-Zmutable-noalias=yes -C link-arg=-s" cargo build --release -p jrsonnet +build-wasi: + cd ./bindings/ && cargo build --release -p jsonnet --target wasm32-wasi --- /dev/null +++ b/build/Dockerfile @@ -0,0 +1,12 @@ +FROM alpine:edge + +RUN apk add --no-cache \ + gcc \ + make \ + g++ \ + curl \ + cmake \ + clang \ + linux-headers +RUN apk add --no-cache rustup && rustup-init --default-toolchain nightly -y -t wasm32-wasi +ENV PATH /root/.rustup/toolchains/nightly-x86_64-unknown-linux-musl/bin/:/root/.cargo/bin/:${PATH} --- /dev/null +++ b/build/make-docker.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +export DOCKER_BUILDKIT=1 +docker build -t jrsonnet -f build/Dockerfile build/ +docker run --rm -it -v $PWD:/build -e CARGO_HOME=/build/cache jrsonnet:latest ash -c "cd /build&&make $@" --- /dev/null +++ b/build/run-docker.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +export DOCKER_BUILDKIT=1 +docker build -t jrsonnet -f build/Dockerfile build/ +docker run --rm -it -v $PWD:/build -e CARGO_HOME=/build/cache jrsonnet:latest ash -c "cd /build&&$@" -- gitstuff