From 302167317ed5401066806616a057d62a7c1bdf87 Mon Sep 17 00:00:00 2001 From: Alexander Aksenov Date: Mon, 08 Aug 2022 15:00:51 +0000 Subject: [PATCH] Added workflow configuration for forkless testing. --- --- /dev/null +++ b/.docker/Dockerfile-parachain-upgrade @@ -0,0 +1,100 @@ +# ===== Rust builder ===== +FROM ubuntu:20.04 as rust-builder +LABEL maintainer="Unique.Network" + +ARG RUST_TOOLCHAIN=nightly-2022-05-11 + +ENV RUST_TOOLCHAIN $RUST_TOOLCHAIN +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 install -y cmake pkg-config libssl-dev git clang && \ + apt-get clean && \ + rm -r /var/lib/apt/lists/* + +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 mkdir /unique_parachain +WORKDIR /unique_parachain + +# ===== BUILD current version ====== +FROM rust-builder as builder-unique-current + +ARG PROFILE=release +ARG FEATURE= + +RUN mkdir /unique_parachain +WORKDIR /unique_parachain + +RUN git clone $REPO_URL -b $BRANCH +RUN cargo build $FEATURE --$PROFILE + + +# ===== BUILD target version ====== +FROM rust-builder as builder-unique-target + +ARG PROFILE=release +ARG FEATURE= + +RUN mkdir /unique_parachain +WORKDIR /unique_parachain + +RUN git clone $REPO_URL -b $MAINNET_BRANCH +RUN cargo build $FEATURE --$PROFILE + + + +# ===== BUILD POLKADOT ===== +FROM rust-builder as builder-polkadot + +ARG POLKADOT_BUILD_BRANCH=release-v0.9.24 +ENV POLKADOT_BUILD_BRANCH $POLKADOT_BUILD_BRANCH + +RUN mkdir /unique_parachain +WORKDIR /unique_parachain + +RUN git clone -b $POLKADOT_BUILD_BRANCH --depth 1 https://github.com/paritytech/polkadot.git && \ + cd polkadot && \ + cargo build --release + +# ===== RUN ====== + +FROM ubuntu:20.04 + +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 v16.16.0 && \ + nvm use v16.16.0 + +RUN git clone https://github.com/uniquenetwork/polkadot-launch -b 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 install + +COPY --from=builder-unique-current /unique_parachain/target/release/unique-collator /unique-chain/current/release/ +COPY --from=builder-unique-target /unique_parachain/target/release/unique-collator /unique-chain/target/release/ +COPY --from=builder-polkadot /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/ + +COPY --from=builder-unique /.docker/launch-config.json /polkadot-launch/launch-config.json + + +CMD export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + cd /polkadot-launch && \ + yarn start launch-config.json --test-upgrade --- /dev/null +++ b/.docker/docker-compose-forkless.yaml @@ -0,0 +1,19 @@ +version: "3.5" + +services: + node-parachain: + build: + context: ../ + dockerfile: .docker/Dockerfile-parachain-upgrade + image: node-parachain + container_name: node-parachain + 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.tmp-forkless.j2 @@ -0,0 +1,13 @@ +version: "3.5" + +services: + node-parachain: + build: + args: + - "RUST_TOOLCHAIN={{ RUST_TOOLCHAIN }}" + - "BRANCH={{ BRANCH }}" + - "REPO_URL={{ REPO_URL }}" + - "FEATURE={{ FEATURE }}" + - "POLKADOT_BUILD_BRANCH={{ POLKADOT_BUILD_BRANCH }}" + - "MAINNET_TAG={{ MAINNET_TAG }}" + - "MAINNET_BRANCH={{ MAINNET_BRANCH }}" --- /dev/null +++ b/.docker/launch-config.json @@ -0,0 +1,125 @@ +{ + "relaychain": { + "bin": "../alts/polkadot/target/release/polkadot", + "upgradeBin": "../polkadot/target/release/polkadot", + "upgradeWasm": "../polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm", + "chain": "westend-local", + "nodes": [ + { + "name": "alice", + "wsPort": 9844, + "rpcPort": 9843, + "port": 30444, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + }, + { + "name": "bob", + "wsPort": 9855, + "rpcPort": 9854, + "port": 30555, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + }, + { + "name": "charlie", + "wsPort": 9866, + "rpcPort": 9865, + "port": 30666, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + }, + { + "name": "dave", + "wsPort": 9877, + "rpcPort": 9876, + "port": 30777, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + }, + { + "name": "eve", + "wsPort": 9888, + "rpcPort": 9887, + "port": 30888, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + } + ], + "genesis": { + "runtime": { + "runtime_genesis_config": { + "parachainsConfiguration": { + "config": { + "validation_upgrade_frequency": 1, + "validation_upgrade_delay": 1 + } + } + } + } + } + }, + "parachains": [ + { + "bin": "../unique-chain/current/release/unique-collator", + "upgradeBin": "../unique-chain/target/release/unique-collator", + "upgradeWasm": "../unique-chain/target/release/wbuild/opal-runtime/opal_runtime.compact.compressed.wasm", + "id": "1000", + "balance": "1000000000000000000000000", + "nodes": [ + { + "port": 31200, + "wsPort": 9944, + "rpcPort": 9933, + "name": "alice", + "flags": [ + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external", + "-lxcm=trace" + ] + }, + { + "port": 31201, + "wsPort": 9945, + "rpcPort": 9934, + "name": "bob", + "flags": [ + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external", + "-lxcm=trace" + ] + } + ] + } + ], + "simpleParachains": [], + "hrmpChannels": [], + "finalization": false +} --- /dev/null +++ b/.github/workflows/forkless-update-nodata.yml @@ -0,0 +1,115 @@ +name: Develop - Build & test + +# Controls when the action will run. +on: + # Triggers the workflow on push or pull request events but only for the master branch + pull_request: + branches: + - develop + types: + - opened + - reopened + - synchronize #commit(s) pushed to the pull request + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +#Define Workflow variables +env: + RUST_TOOLCHAIN: nightly-2022-05-11 + REPO_URL: ${{ github.server_url }}/${{ github.repository }} + POLKADOT_BUILD_BRANCH: release-v0.9.24 + POLKADOT_MAINNET_BRANCH: release-v0.9.25 # for unique-runtime + UNIQUE_MAINNET_TAG: v924010 + KUSAMA_MAINNET_BRANCH: release-v0.9.26 # for для quartz-runtime + QUARTZ_MAINNET_TAG: v924012 + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + build: + # The type of runner that the job will run on + runs-on: self-hosted-ci + + name: Build Container, Spin it Up an test + + continue-on-error: false #Do not stop testing of matrix runs failed. As it decided during PR review - it required 50/50& Let's check it with false. + + strategy: + matrix: + include: + # - network: "Opal" + # features: "--features=opal-runtime" + # binary_version: + - network: "Quartz" # KUSAMA_MAINNET_BRANCH для quartz-runtime + features: "--features=quartz-runtime" + mainnet_branch: ${{ env.KUSAMA_MAINNET_BRANCH }} + mainnet_tag: ${{ env.QUARTZ_MAINNET_TAG }} + - network: "Unique" # POLKADOT_MAINNET_BRANCH для unique-runtime + features: "--features=unique-runtime" + mainnet_branch: ${{ env.POLKADOT_MAINNET_BRANCH }} + mainnet_tag: ${{ env.UNIQUE_MAINNET_TAG }} + + + + steps: + - name: Skip if pull request is in Draft + # `if: github.event.pull_request.draft == true` should be kept here, at + # the step level, rather than at the job level. The latter is not + # recommended because when the PR is moved from "Draft" to "Ready to + # review" the workflow will immediately be passing (since it was skipped), + # even though it hasn't actually ran, since it takes a few seconds for + # the workflow to start. This is also disclosed in: + # https://github.community/t/dont-run-actions-on-draft-pull-requests/16817/17 + # That scenario would open an opportunity for the check to be bypassed: + # 1. Get your PR approved + # 2. Move it to Draft + # 3. Push whatever commits you want + # 4. Move it to "Ready for review"; now the workflow is passing (it was + # skipped) and "Check reviews" is also passing (it won't be updated + # until the workflow is finished) + if: github.event.pull_request.draft == true + run: exit 1 + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + with: + ref: ${{ github.head_ref }} #Checking out head commit + + - name: Generate ENV related extend file for docker-compose + uses: cuchi/jinja2-action@v1.2.0 + with: + template: .docker/docker-compose.tmp-forkless.j2 + output_file: .docker/docker-compose.${{ matrix.network }}.yml + variables: | + REPO_URL=${{ github.server_url }}/${{ github.repository }}.git + RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} + POLKADOT_BUILD_BRANCH=${{ env.POLKADOT_BUILD_BRANCH }} + POLKADOT_MAINNET_BRANCH=${{ env.POLKADOT_MAINNET_BRANCH }} + MAINNET_TAG=${{ env.mainnet_tag }} + MAINNET_BRANCH=${{ env.mainnet_branch }} + FEATURE=${{ matrix.features }} + BRANCH=${{ github.head_ref }} + + - name: Show build configuration + run: cat .docker/docker-compose.${{ matrix.network }}.yml + + - name: Build the stack + run: docker-compose -f ".docker/docker-compose-forkless.yaml" -f ".docker/docker-compose.${{ matrix.network }}.yml" up -d --build + + +# - name: Test Report +# uses: phoenix-actions/test-reporting@v8 +# 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: Read output variables +# run: | +# echo "url is ${{ steps.test-report.outputs.runHtmlUrl }}" + + - 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 -- gitstuff