--- /dev/null +++ b/.docker/Dockerfile-chain-dev @@ -0,0 +1,35 @@ +FROM ubuntu:20.04 + +ENV DEBIAN_FRONTEND=noninteractive +ENV TZ=Etc/UTC + +RUN apt-get update && apt-get install -y git curl libssl-dev llvm pkg-config libclang-dev clang git make cmake + +ENV CARGO_HOME="/cargo-home" +ENV PATH="/cargo-home/bin:$PATH" + +RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain none + +ARG RUST_TOOLCHAIN=nightly-2022-04-07 +ARG BRANCH=develop +ARG REPO_URL=https://github.com/UniqueNetwork/unique-chain.git +ARG FEATURE= + +RUN rustup toolchain uninstall $(rustup toolchain list) && \ + rustup toolchain install $RUST_TOOLCHAIN && \ + rustup default $RUST_TOOLCHAIN && \ + rustup target add wasm32-unknown-unknown --toolchain $RUST_TOOLCHAIN + +RUN mkdir /dev_chain && git clone $REPO_URL /dev_chain && cd /dev_chain && git checkout $BRANCH +WORKDIR /dev_chain + +RUN cargo build --release + +EXPOSE 9844 +EXPOSE 9944 +EXPOSE 9933 +EXPOSE 9833 +EXPOSE 40333 +EXPOSE 30333 + +CMD cargo run --release $FEATURE -- --dev -linfo --unsafe-ws-external --rpc-cors=all --unsafe-rpc-external --- /dev/null +++ b/.docker/Dockerfile-parachain @@ -0,0 +1,114 @@ +# ===== Rust builder ===== +FROM phusion/baseimage:focal-1.1.0 as rust-builder +LABEL maintainer="Unique.Network" + +ARG RUST_TOOLCHAIN=nightly-2022-05-11 +#ARG RUST_C=1.62.0-nightly +ARG POLKA_VERSION=release-v0.9.24 +ARG UNIQUE_BRANCH=develop + +#ARG USER=*** +#ARG PASS=*** + + +ENV RUST_TOOLCHAIN $RUST_TOOLCHAIN +#ENV RUST_C $RUST_C +ENV POLKA_VERSION $POLKA_VERSION +ENV UNIQUE_BRANCH $UNIQUE_BRANCH + + +#RUN echo $RUST_TOOLCHAIN +#RUN echo $RUST_C +#RUN echo $POLKA_VERSION +#RUN echo $UNIQUE_BRANCH + +ENV CARGO_HOME="/cargo-home" +ENV PATH="/cargo-home/bin:$PATH" + +RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain none + +RUN apt-get update && \ + apt-get dist-upgrade -y -o Dpkg::Options::="--force-confold" && \ + apt-get install -y cmake pkg-config libssl-dev git clang + +RUN rustup toolchain uninstall $(rustup toolchain list) && \ + rustup toolchain install $RUST_TOOLCHAIN && \ + rustup default $RUST_TOOLCHAIN && \ + rustup target list --installed && \ + rustup show +RUN rustup target add wasm32-unknown-unknown --toolchain $RUST_TOOLCHAIN + +RUN cargo install cargo-chef + +RUN mkdir unique_parachain +WORKDIR /unique_parachain + +# ===== Chef ===== +FROM rust-builder as chef + +COPY . . +RUN cargo chef prepare --recipe-path recipe.json + +# ===== BUILD ====== +FROM rust-builder as builder + +RUN mkdir unique_parachain +WORKDIR /unique_parachain + +COPY --from=chef /unique_parachain/recipe.json recipe.json +ARG PROFILE=release +RUN cargo chef cook "--$PROFILE" --recipe-path recipe.json + +COPY . . +RUN cargo build "--$PROFILE" + # && \ + # cargo test + +# ===== BUILD POLKADOT ===== +FROM rust-builder as builder-polkadot + +RUN mkdir unique_parachain +WORKDIR /unique_parachain + +RUN git clone -b $POLKA_VERSION --depth 1 https://github.com/paritytech/polkadot.git && \ + cd polkadot && \ + git tag -n && \ + cargo build --release + +# ===== RUN ====== + +FROM phusion/baseimage:focal-1.1.0 + +ARG PROFILE=release + +RUN apt-get -y update && \ + apt-get -y upgrade && \ + apt-get -y install curl git && \ + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash && \ + export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + nvm install v15.5.0 && \ + nvm use v15.5.0 + +RUN git clone https://github.com/paritytech/polkadot-launch + +RUN export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + cd /polkadot-launch && \ + npm install --global yarn && \ + yarn + +COPY --from=builder /unique_parachain/target/$PROFILE/unique-collator /unique-chain/target/$PROFILE/ +COPY --from=builder-polkadot /unique_parachain/polkadot/target/$PROFILE/polkadot /polkadot/target/$PROFILE/ + +EXPOSE 9844 +EXPOSE 9944 +EXPOSE 9933 +EXPOSE 9833 +EXPOSE 40333 +EXPOSE 30333 + +CMD export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + cd /polkadot-launch && \ + yarn start launch-config.json --- /dev/null +++ b/.docker/Dockerfile-parachain-v2 @@ -0,0 +1,96 @@ +# ===== Rust builder ===== +FROM phusion/baseimage:focal-1.1.0 as rust-builder +LABEL maintainer="Unique.Network" + +ARG RUST_TOOLCHAIN={{ actual_toolchain }} +ARG POLKA_VERSION=release-v0.9.24 + + +ENV RUST_TOOLCHAIN $RUST_TOOLCHAIN +ENV POLKA_VERSION $POLKA_VERSION + +ENV CARGO_HOME="/cargo-home" +ENV PATH="/cargo-home/bin:$PATH" + +RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain none + +RUN apt-get update && \ + apt-get dist-upgrade -y -o Dpkg::Options::="--force-confold" && \ + apt-get install -y cmake pkg-config libssl-dev git clang + +RUN rustup toolchain uninstall $(rustup toolchain list) && \ + rustup toolchain install $RUST_TOOLCHAIN && \ + rustup default $RUST_TOOLCHAIN && \ + rustup target list --installed && \ + rustup show +RUN rustup target add wasm32-unknown-unknown --toolchain $RUST_TOOLCHAIN + +####works inside repo folder### + + +# ===== BUILD ====== +FROM rust-builder as builder-unique + +RUN mkdir unique_parachain +WORKDIR /unique_parachain + +ARG PROFILE='features=quartz-runtime --release' + +COPY . . +RUN cargo build --features=quartz-runtime --release + # && \ + # cargo test + +# ===== BUILD POLKADOT ===== +FROM rust-builder as builder-polkadot + +RUN mkdir unique_parachain +WORKDIR /unique_parachain + +RUN git clone -b $POLKA_VERSION --depth 1 https://github.com/paritytech/polkadot.git && \ + cd polkadot && \ + git tag -n && \ + cargo build --release + +# ===== RUN ====== + +FROM phusion/baseimage:focal-1.1.0 + +#ARG PROFILE='--features=quartz-runtime --release' + +RUN apt-get -y update && \ + apt-get -y upgrade && \ + apt-get -y install curl git && \ + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash && \ + export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + nvm install v15.5.0 && \ + nvm use v15.5.0 + +RUN git clone https://github.com/UniqueNetwork/polkadot-launch.git && \ + cd ./polkadot-launch && \ + git checkout feature/runtime-upgrade-testing + +RUN export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + cd /polkadot-launch && \ + npm install --global yarn && \ + yarn + +COPY --from=builder-unique /unique_parachain/target/release/unique-collator /unique-chain/target/release/ +COPY --from=builder-polkadot /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/ + +COPY ["./launch-config.json", "/polkadot-launch/launch-config.json"] + + +EXPOSE 9844 +EXPOSE 9944 +EXPOSE 9933 +EXPOSE 9833 +EXPOSE 40333 +EXPOSE 30333 + +CMD export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + cd /polkadot-launch && \ + yarn start launch-config.json --- /dev/null +++ b/.docker/docker-compose-dev.yaml @@ -0,0 +1,19 @@ +version: "3.5" + +services: + node-o: + build: + context: . + dockerfile: Dockerfile-chain-dev + image: node-o + container_name: node-o + expose: + - 9944 + - 9933 + ports: + - 127.0.0.1:9944:9944 + - 127.0.0.1:9933:9933 + logging: + options: + max-size: "1m" + max-file: "3" --- /dev/null +++ b/.docker/docker-compose-tests-parachain.yml @@ -0,0 +1,28 @@ +version: "3.5" + +services: + blockchain_nodes: + build: + context: ./ + dockerfile: Dockerfile-parachain + args: + - RUST_TOOLCHAIN=${RUST_TOOLCHAIN:?err} + - RUST_C=${RUST_C:?err} + - POLKA_VERSION=${POLKA_VERSION:?err} + - UNIQUE_BRANCH=${UNIQUE_BRANCH:?err} + volumes: + - ./launch-config.json:/polkadot-launch/launch-config.json + env_file: + - ./.env + + integration_tests: + build: + context: tests/ + dockerfile: Dockerfile-tests + environment: + RPC_URL: http://blockchain_nodes:9933/ + volumes: + - ./tests/src/config_docker.ts:/unique_parachain/src/config.ts + - /home/ubuntu/mochawesome-report:/unique_parachain/mochawesome-report + depends_on: + - blockchain_nodes --- /dev/null +++ b/.docker/docker-compose.tmp.j2 @@ -0,0 +1,13 @@ +version: "3.5" + +services: + node-o: + build: + args: + - "RUST_TOOLCHAIN={{ RUST_TOOLCHAIN }}" + - "BRANCH={{ BRANCH }}" + - "REPO_URL={{ REPO_URL }}" + - "FEATURE={{ FEATURE }}" + + command: cargo run --release $FEATURE -- --dev -linfo --unsafe-ws-external --rpc-cors=all --unsafe-rpc-external + --- a/.github/workflows/codestyle.yml +++ b/.github/workflows/codestyle.yml @@ -1,10 +1,16 @@ name: Code style -on: [push] +on: + pull_request: + branches: + - develop + types: + - opened + - edited jobs: rustfmt: - runs-on: ubuntu-20.04 + runs-on: self-hosted-ci steps: - uses: actions/checkout@v1 @@ -20,7 +26,7 @@ clippy: if: ${{ false }} - runs-on: ubuntu-20.04 + runs-on: self-hosted-ci steps: - uses: actions/checkout@v1 --- a/.github/workflows/node_build_test.yml +++ b/.github/workflows/node_build_test.yml @@ -1,44 +1,128 @@ name: Build & test -# Controls when the action will run. +# Controls when the action will run. on: # Triggers the workflow on push or pull request events but only for the master branch - push: - branches: [ develop ] - # pull_request: + #push: + # branches: [ develop ] + pull_request: + branches: + - develop + types: + - opened + - edited + - reopened + # pull_request: # branches: [ develop ] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: +#Define Workflow variables +env: + ubuntu_version: focal + chains_release_dir: /opt/runner/chains_release + opal_chain_workdir: ./src_opal_chain + quartz_chain_workdir: ./src_quartz_chain + unique_chain_workdir: ./src_unique_chain + src_repo_url: https://github.com/lzadjsf/unique-chain.git + RUST_TOOLCHAIN: nightly-2022-05-11 + REPO_URL: ${{ github.server_url }}/${{ github.repository }} + # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: + pre-requisites: + # The type of runner that the job will run on + runs-on: self-hosted-ci + + steps: + #runs ssh connection + - name: Install dependencies + run: | + sudo apt-get install git curl libssl-dev llvm pkg-config libclang-dev clang make cmake + sudo apt autoremove + curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain none + . $HOME/.cargo/env && cargo install --locked --git https://github.com/chevdor/subwasm + rustup toolchain install ${{ env.RUST_TOOLCHAIN }} + rustup default ${{ env.RUST_TOOLCHAIN }} + rustup target add wasm32-unknown-unknown --toolchain ${{ env.RUST_TOOLCHAIN }} + + build: # The type of runner that the job will run on - runs-on: ubuntu-20.04 + runs-on: self-hosted-ci + + needs: pre-requisites + name: Build Container, Spin it Up an test - # if: github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == true + continue-on-error: true #Do not stop testing of matrix runs failed. + + strategy: + matrix: + include: + - network: "Opal" + features: " " + - network: "Quartz" + features: "--features=quartz-runtime" + - network: "Unique" + features: "--features=unique-runtime" - # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 - - #runs ssh connection - - name: Go to server - uses: appleboy/ssh-action@master + - uses: actions/checkout@v3 + + - name: Generate ENV related extend file for docker-compose + uses: cuchi/jinja2-action@v1.2.0 + with: + template: .docker/docker-compose.tmp.j2 + output_file: .docker/docker-compose.${{ matrix.network }}.yml + variables: | + REPO_URL=${{ github.server_url }}/${{ github.repository }}.git + RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} + FEATURE=${{ matrix.features }} + BRANCH=${{ github.head_ref }} + + - name: Show temporary file + run: cat .docker/docker-compose.${{ matrix.network }}.yml + + - name: Build the stack + run: docker-compose -f ".docker/docker-compose-dev.yaml" -f ".docker/docker-compose.${{ matrix.network }}.yml" up -d --build + +# - name: "Build the Docker image with Feature: ${{ env.features }}" +# run: docker build -t build-${{ github.head_ref }} --file .docker/Dockerfile-chain-dev --build-arg REPO_URL=${{ github.server_url }}/${{ github.repository }}.git --build-arg RUST_TOOLCHAIN=${{ env.actual_toolchain }} --build-arg FEATURE="${{ env.features }}" --build-arg BRANCH=${{ github.head_ref }} --no-cache . + + - name: Wait + run: sleep 420s + + - name: Install node + uses: actions/setup-node@v1 with: - host: ${{ secrets.SERVER_IP }} - username: ${{ secrets.SERVER_USERNAME }} - key: ${{ secrets.KEY }} - port: ${{ secrets.SERVER_PORT }} - command_timeout: 300m - script: | - eval $(ssh-agent -s) - ssh-add /home/devops/.ssh/git_hub - git clone git@github.com:UniqueNetwork/unique-chain.git - cd unique-chain - git checkout develop - # git pull --all - chmod +x ci_node.sh - ./ci_node.sh - rm -rf /home/polkadot/unique-chain + node-version: 14.x + + - name: Install dependencies + run: | + cd tests + yarn install + yarn add mochawesome + yarn --pure-lockfile + + - name: Run tests + run: | + cd tests + ./scripts/ci-check-docker-state.sh + NOW=$(date +%s) && yarn test --reporter mochawesome --reporter-options reportFilename=test-${NOW} + env: + RPC_URL: http://127.0.0.1:9933/ + + - name: Test Report + uses: phoenix-actions/test-reporting@v8 + id: test-report # Set ID reference for step + if: success() || failure() # run this step even if previous step failed + with: + name: Tests ${{ matrix.network }} # Name of the check run which will be created + path: tests/mochawesome-report/test-*.json # Path to test results + reporter: mochawesome-json + fail-on-error: 'false' + + - name: Stop running containers + if: always() # run this step always + run: docker-compose -f ".docker/docker-compose-dev.yaml" -f ".docker/docker-compose.${{ matrix.network }}.yml" down --- a/.github/workflows/notify.yml +++ b/.github/workflows/notify.yml @@ -1,13 +1,17 @@ name: telegram message on: - push: - branches: [ develop ] + pull_request: + branches: + - develop + types: + - opened + - edited jobs: - build: - runs-on: ubuntu-latest - steps: + build: + runs-on: self-hosted-ci + steps: - uses: avkviring/telegram-github-action@v0.0.13 env: - telegram_to: ${{ secrets.TELEGRAM_TO }} + telegram_to: ${{ secrets.TELEGRAM_TO }} telegram_token: ${{ secrets.TELEGRAM_TOKEN }} event: ${{ toJson(github.event) }} --- a/.github/workflows/tests_codestyle.yml +++ b/.github/workflows/tests_codestyle.yml @@ -1,14 +1,19 @@ name: Tests code style -on: [push] - +on: + pull_request: + branches: + - develop + types: + - opened + - edited jobs: build: - runs-on: ubuntu-20.04 + runs-on: self-hosted-ci steps: - uses: actions/checkout@v2 - name: Install modules run: cd tests && yarn - name: Run ESLint - run: cd tests && yarn eslint --ext .ts,.js src/ \ No newline at end of file + run: cd tests && yarn eslint --ext .ts,.js src/