Merge pull request #8 from project-serum/armani/shebang

Run wholeshebang in CI
This commit is contained in:
Armani Ferrante 2020-09-21 14:37:02 -07:00 committed by GitHub
commit 27d6bdf70b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 154 additions and 19 deletions

View File

@ -1,14 +1,36 @@
language: minimal language: shell
os: linux
sudo: required _defaults: &defaults
cache:
services: directories:
- $TRAVIS_HOME/.cargo
- $TRAVIS_HOME/.rustup
- $TRAVIS_HOME/.cache
- $TRAVIS_BUILD_DIR/crank/target
- $TRAVIS_BUILD_DIR/dex/target
services:
- docker - docker
before_install:
before_install: - scripts/travis/run-docker.sh
- docker pull projectserum/development:latest install:
- docker run -it -d --name dev projectserum/development:latest bash - mkdir -p bin && ./bpf-sdk-install.sh bin
- docker exec dev git clone https://github.com/project-serum/serum-dex.git before_cache:
- scripts/travis/stop-docker.sh
script: - rm -rf "$TRAVIS_HOME/.cargo/registry/src"
- docker exec dev serum-dex/do.sh test dex jobs:
include:
- <<: *defaults
name: Unit tests
script:
- docker exec dev ./do.sh test dex
- <<: *defaults
name: Integration tests
language: node_js
node_js:
- "node"
script:
- npm install -g @solana/web3.js
- npx solana-localnet update
- npx solana-localnet up
- docker exec dev ./scripts/travis/e2e-tests.sh

View File

@ -14,6 +14,6 @@ development-push:
@docker push $(IMG_ORG)/development:$(IMG_VER) @docker push $(IMG_ORG)/development:$(IMG_VER)
development-shell: development-shell:
@docker run -ti --rm \ @docker run -ti --rm --net=host \
-v $(WORKDIR)/..:/workdir \ -v $(WORKDIR)/..:/workdir \
$(IMG_ORG)/development:$(IMG_VER) bash $(IMG_ORG)/development:$(IMG_VER) bash

View File

@ -3,14 +3,17 @@ FROM ubuntu:18.04
ARG DEBIAN_FRONTEND=noninteractive ARG DEBIAN_FRONTEND=noninteractive
ARG SOLANA_CHANNEL=v1.2.17 ARG SOLANA_CHANNEL=v1.2.17
ARG SOLANA_CLI=v1.3.9
ENV HOME="/root"
ENV PATH="${HOME}/.cargo/bin:${PATH}"
ENV PATH="${HOME}/.local/share/solana/install/active_release/bin:${PATH}"
# Install base utilities. # Install base utilities.
RUN mkdir -p /workdir && mkdir -p /tmp && \ RUN mkdir -p /workdir && mkdir -p /tmp && \
apt-get update -qq && apt-get upgrade -qq && apt-get install -qq \ apt-get update -qq && apt-get upgrade -qq && apt-get install -qq \
build-essential git curl build-essential git curl wget jq pkg-config python3-pip \
libssl-dev libudev-dev
ENV HOME="/root"
ENV PATH="${HOME}/.cargo/bin:${PATH}"
# Install rust. # Install rust.
RUN curl "https://sh.rustup.rs" -sfo rustup.sh && \ RUN curl "https://sh.rustup.rs" -sfo rustup.sh && \
@ -18,7 +21,9 @@ RUN curl "https://sh.rustup.rs" -sfo rustup.sh && \
rustup component add rustfmt clippy rustup component add rustfmt clippy
# Install Solana tools. # Install Solana tools.
RUN curl -L --retry 5 --retry-delay 2 -o bpf-sdk.tar.bz2 http://solana-sdk.s3.amazonaws.com/${SOLANA_CHANNEL}/bpf-sdk.tar.bz2 && \ RUN curl -sSf https://raw.githubusercontent.com/solana-labs/solana/${SOLANA_CLI}/install/solana-install-init.sh | sh -s - ${SOLANA_CLI} && \
# BPF sdk.
curl -L --retry 5 --retry-delay 2 -o bpf-sdk.tar.bz2 http://solana-sdk.s3.amazonaws.com/${SOLANA_CHANNEL}/bpf-sdk.tar.bz2 && \
rm -rf bpf-sdk && \ rm -rf bpf-sdk && \
mkdir -p bpf-sdk && \ mkdir -p bpf-sdk && \
tar jxf bpf-sdk.tar.bz2 && \ tar jxf bpf-sdk.tar.bz2 && \

46
scripts/travis/e2e-tests.sh Executable file
View File

@ -0,0 +1,46 @@
#!/bin/bash
set -euxo pipefail
CLUSTER=localnet
KEYPAIR_FILE=$HOME/.config/solana/id.json
CLUSTER_URL=http://localhost:8899
#
# Assumes the current working directory is top-level serum-dex dir.
#
main() {
#
# Create a keypair for the tests.
#
set +e
yes | solana-keygen new --outfile $KEYPAIR_FILE
#
# Fund the keypair.
#
yes | solana airdrop --url $CLUSTER_URL 100
set -e
#
# Run the tests.
#
dex_whole_shebang
}
dex_whole_shebang() {
#
# Build the program.
#
./do.sh build dex
#
# Deploy the program.
#
local dex_program_id="$(solana deploy --url ${CLUSTER_URL} dex/target/bpfel-unknown-unknown/release/serum_dex.so --use-deprecated-loader | jq .programId -r)"
#
# Run the whole-shebang.
#
pushd crank
cargo run -- $CLUSTER whole-shebang $KEYPAIR_FILE $dex_program_id
popd
}
main

42
scripts/travis/run-docker.sh Executable file
View File

@ -0,0 +1,42 @@
#!/bin/bash
set -euxo pipefail
main() {
docker pull projectserum/development:latest
#
# Bind the relevant host directories to the docker image so that the
# relevant files are synced.
#
docker volume create --driver local \
--opt type=none \
--opt device=$TRAVIS_HOME/.cargo \
--opt o=bind \
cargodir
docker volume create --driver local \
--opt type=none \
--opt device=$TRAVIS_HOME/.rustup \
--opt o=bind \
rustupdir
docker volume create --driver local \
--opt type=none \
--opt device=$TRAVIS_HOME/.cache \
--opt o=bind \
cachedir
docker volume create --driver local \
--opt type=none \
--opt device=$TRAVIS_BUILD_DIR \
--opt o=bind \
workdir
#
# Start the container.
#
docker run -it -d --net host --name dev \
-v cargodir:/root/.cargo \
-v rustupdir:/root/.rustup \
-v cachedir:/root/.cache \
-v workdir:/workdir \
projectserum/development:latest bash
}
main

20
scripts/travis/stop-docker.sh Executable file
View File

@ -0,0 +1,20 @@
#!/bin/bash
set -euxo pipefail
main() {
#
# Files created within a docker container can't be used outside
# by the host without root. So Change file permissions so that
# travis can create a cache archive.
#
sudo chown -R travis:travis $TRAVIS_HOME/.cargo
sudo chown -R travis:travis $TRAVIS_HOME/.rustup
sudo chown -R travis:travis $TRAVIS_HOME/.cache
sudo chown -R travis:travis $TRAVIS_BUILD_DIR/dex/target
sudo chown -R travis:travis $TRAVIS_BUILD_DIR/crank/target
docker stop dev
}
main