From 1139d7d5caff04b7367cb3734bf8886e0e047868 Mon Sep 17 00:00:00 2001 From: ut-akuznetsov <59873862+ut-akuznetsov@users.noreply.github.com> Date: Tue, 08 Nov 2022 09:49:38 +0000 Subject: [PATCH] Merge pull request #685 from UniqueNetwork/feature/ci-refactoring Feature/ci refactoring --- --- a/.docker/Dockerfile-chain-dev +++ b/.docker/Dockerfile-chain-dev @@ -1,15 +1,15 @@ FROM ubuntu:20.04 -ARG RUST_TOOLCHAIN= -ARG FEATURE= +ARG RUST_TOOLCHAIN +ARG NETWORK ENV DEBIAN_FRONTEND=noninteractive ENV TZ=Etc/UTC -ENV FEATURE=$FEATURE +ENV NETWORK=$NETWORK ENV CARGO_HOME="/cargo-home" ENV PATH="/cargo-home/bin:$PATH" -RUN echo "$FEATURE\n" && echo "$RUST_TOOLCHAIN\n" +RUN echo "$NETWORK\n" && echo "$RUST_TOOLCHAIN\n" RUN apt-get update && apt-get install -y git curl libssl-dev llvm pkg-config libclang-dev clang git make cmake protobuf-compiler @@ -26,6 +26,6 @@ WORKDIR /dev_chain RUN cargo build --release -RUN echo "$FEATURE" +RUN echo "$NETWORK" -CMD cargo run --release --features=$FEATURE -- --dev -linfo --unsafe-ws-external --rpc-cors=all --unsafe-rpc-external +CMD cargo run --release --features=${NETWORK}-runtime -- --dev -linfo --unsafe-ws-external --rpc-cors=all --unsafe-rpc-external --- a/.docker/Dockerfile-chain-dev-unit +++ b/.docker/Dockerfile-chain-dev-unit @@ -10,8 +10,8 @@ RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain none -ARG RUST_TOOLCHAIN= -ARG FEATURE= +ARG RUST_TOOLCHAIN +ARG NETWORK RUN rustup toolchain uninstall $(rustup toolchain list) && \ rustup toolchain install $RUST_TOOLCHAIN && \ --- a/.docker/Dockerfile-parachain +++ b/.docker/Dockerfile-parachain @@ -6,8 +6,8 @@ LABEL maintainer="Unique.Network" ARG RUST_TOOLCHAIN= +ENV RUST_TOOLCHAIN $RUST_TOOLCHAIN -ENV RUST_TOOLCHAIN $RUST_TOOLCHAIN ENV CARGO_HOME="/cargo-home" ENV PATH="/cargo-home/bin:$PATH" ENV TZ=UTC @@ -35,21 +35,22 @@ FROM rust-builder as builder-unique ARG PROFILE=release -ARG FEATURE= -ARG REPO_URL= -ARG BRANCH= +ARG NETWORK +ARG REPO_URL +ARG BRANCH + +RUN echo "NETWORK="${NETWORK} WORKDIR /unique_parachain RUN git clone $REPO_URL -b $BRANCH . && \ - cargo build --features=$FEATURE --$PROFILE + cargo build --features=${NETWORK}-runtime --$PROFILE # ===== RUN ====== FROM ubuntu:20.04 -ARG POLKADOT_BUILD_BRANCH= -ENV POLKADOT_BUILD_BRANCH $POLKADOT_BUILD_BRANCH +ARG POLKADOT_LAUNCH_BRANCH= RUN apt-get -y update && \ apt-get -y install curl git && \ @@ -59,7 +60,7 @@ nvm install v16.16.0 && \ nvm use v16.16.0 -RUN git clone https://github.com/uniquenetwork/polkadot-launch -b unique-network +RUN git clone https://github.com/uniquenetwork/polkadot-launch -b ${POLKADOT_LAUNCH_BRANCH} RUN export NVM_DIR="$HOME/.nvm" && \ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ @@ -75,5 +76,4 @@ CMD export NVM_DIR="$HOME/.nvm" && \ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ cd /polkadot-launch && \ - yarn start launch-config.json - + yarn start launch-config.json \ No newline at end of file --- a/.docker/Dockerfile-parachain-node-only +++ b/.docker/Dockerfile-parachain-node-only @@ -35,34 +35,32 @@ FROM rust-builder as builder-unique-current ARG PROFILE=release -ARG FEATURE= -ARG MAINNET_BRANCH= -ARG REPO_URL= +ARG NETWORK +ARG MAINNET_BRANCH +ARG REPO_URL WORKDIR /unique_parachain RUN git clone $REPO_URL -b $MAINNET_BRANCH . && \ - cargo build --features=$FEATURE --$PROFILE + cargo build --features=${NETWORK}-runtime --$PROFILE # ===== BUILD target version ====== FROM rust-builder as builder-unique-target ARG PROFILE=release -ARG FEATURE= +ARG NETWORK COPY . /unique_parachain WORKDIR /unique_parachain -RUN cargo build --features=$FEATURE --$PROFILE +RUN cargo build --features=${NETWORK}-runtime --$PROFILE # ===== RUN ====== FROM ubuntu:20.04 -ARG RUNTIME= -ENV RUNTIME $RUNTIME -ARG POLKADOT_BUILD_BRANCH= -ENV POLKADOT_BUILD_BRANCH $POLKADOT_BUILD_BRANCH +ARG NETWORK +ARG POLKADOT_LAUNCH_BRANCH RUN apt-get -y update && \ apt-get -y install curl git && \ @@ -72,7 +70,7 @@ nvm install v16.16.0 && \ nvm use v16.16.0 -RUN git clone https://github.com/uniquenetwork/polkadot-launch -b unique-network +RUN git clone https://github.com/uniquenetwork/polkadot-launch -b ${POLKADOT_LAUNCH_BRANCH} RUN export NVM_DIR="$HOME/.nvm" && \ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ @@ -80,12 +78,11 @@ npm install --global yarn && \ yarn install -RUN echo "$RUNTIME" -RUN echo "$POLKADOT_BUILD_BRANCH" +RUN echo "$NETWORK" 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-unique-target /unique_parachain/target/release/wbuild/"$RUNTIME"-runtime/"$RUNTIME"_runtime.compact.compressed.wasm /unique-chain/target/release/wbuild/"$RUNTIME"-runtime/"$RUNTIME"_runtime.compact.compressed.wasm +COPY --from=builder-unique-target /unique_parachain/target/release/wbuild/"$NETWORK"-runtime/"$NETWORK"_runtime.compact.compressed.wasm /unique-chain/target/release/wbuild/"$NETWORK"-runtime/"$NETWORK"_runtime.compact.compressed.wasm COPY --from=polkadot /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/ COPY --from=polkadot /unique_parachain/polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm /polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm @@ -94,5 +91,3 @@ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ cd /polkadot-launch && \ yarn start launch-config.json --test-upgrade-parachains -w -n - - --- a/.docker/Dockerfile-parachain-upgrade +++ b/.docker/Dockerfile-parachain-upgrade @@ -34,36 +34,31 @@ FROM rust-builder as builder-unique-current ARG PROFILE=release -ARG FEATURE= -ARG MAINNET_BRANCH= -ARG REPO_URL= +ARG NETWORK +ARG MAINNET_BRANCH +ARG REPO_URL WORKDIR /unique_parachain RUN git clone $REPO_URL -b $MAINNET_BRANCH . && \ - cargo build --features=$FEATURE --$PROFILE + cargo build --features=${NETWORK}-runtime --$PROFILE # ===== BUILD target version ====== FROM rust-builder as builder-unique-target ARG PROFILE=release -ARG FEATURE= -ARG BRANCH= -ARG REPO_URL= +ARG NETWORK COPY . /unique_parachain WORKDIR /unique_parachain -RUN cargo build --features=$FEATURE --$PROFILE +RUN cargo build --features=${NETWORK}-runtime --$PROFILE # ===== RUN ====== - FROM ubuntu:20.04 -ARG RUNTIME= -ENV RUNTIME $RUNTIME -ARG POLKADOT_BUILD_BRANCH= -ENV POLKADOT_BUILD_BRANCH $POLKADOT_BUILD_BRANCH +ARG NETWORK +ARG POLKADOT_LAUNCH_BRANCH RUN apt-get -y update && \ apt-get -y install curl git && \ @@ -73,7 +68,7 @@ nvm install v16.16.0 && \ nvm use v16.16.0 -RUN git clone https://github.com/uniquenetwork/polkadot-launch -b unique-network +RUN git clone https://github.com/uniquenetwork/polkadot-launch -b ${POLKADOT_LAUNCH_BRANCH} RUN export NVM_DIR="$HOME/.nvm" && \ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ @@ -81,12 +76,11 @@ npm install --global yarn && \ yarn install -RUN echo "$RUNTIME" -RUN echo "$POLKADOT_BUILD_BRANCH" +RUN echo "$NETWORK" 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-unique-target /unique_parachain/target/release/wbuild/"$RUNTIME"-runtime/"$RUNTIME"_runtime.compact.compressed.wasm /unique-chain/target/release/wbuild/"$RUNTIME"-runtime/"$RUNTIME"_runtime.compact.compressed.wasm +COPY --from=builder-unique-target /unique_parachain/target/release/wbuild/"$NETWORK"-runtime/"$NETWORK"_runtime.compact.compressed.wasm /unique-chain/target/release/wbuild/"$NETWORK"-runtime/"$NETWORK"_runtime.compact.compressed.wasm COPY --from=polkadot /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/ COPY --from=polkadot /unique_parachain/polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm /polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm --- a/.docker/Dockerfile-parachain-upgrade-data +++ b/.docker/Dockerfile-parachain-upgrade-data @@ -34,38 +34,35 @@ FROM rust-builder as builder-unique-current ARG PROFILE=release -ARG FEATURE= -ARG MAINNET_BRANCH= -ARG REPO_URL= +ARG NETWORK +ARG MAINNET_BRANCH +ARG REPO_URL WORKDIR /unique_parachain RUN git clone $REPO_URL -b $MAINNET_BRANCH . && \ - cargo build --features=$FEATURE --$PROFILE + cargo build --features=${NETWORK}-runtime --$PROFILE # ===== BUILD target version ====== FROM rust-builder as builder-unique-target ARG PROFILE=release -ARG FEATURE= -ARG BRANCH= -ARG REPO_URL= +ARG NETWORK +ARG BRANCH +ARG REPO_URL COPY . /unique_parachain WORKDIR /unique_parachain -RUN cargo build --features=$FEATURE --$PROFILE +RUN cargo build --features=${NETWORK}-runtime --$PROFILE # ===== RUN ====== - FROM ubuntu:20.04 -ARG RUNTIME= -ENV RUNTIME $RUNTIME -ARG REPLICA_FROM= -ENV REPLICA_FROM=$REPLICA_FROM -ARG POLKADOT_BUILD_BRANCH= -ENV POLKADOT_BUILD_BRANCH $POLKADOT_BUILD_BRANCH +ARG NETWORK +ARG REPLICA_FROM +ENV REPLICA_FROM=${REPLICA_FROM} +ARG POLKADOT_LAUNCH_BRANCH RUN apt-get -y update && \ apt-get -y install curl git && \ @@ -75,7 +72,7 @@ nvm install v16.16.0 && \ nvm use v16.16.0 -RUN git clone https://github.com/uniquenetwork/polkadot-launch.git -b unique-network +RUN git clone https://github.com/uniquenetwork/polkadot-launch.git -b ${POLKADOT_LAUNCH_BRANCH} RUN export NVM_DIR="$HOME/.nvm" && \ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ @@ -83,13 +80,12 @@ npm install --global yarn && \ yarn install -RUN echo "$RUNTIME" +RUN echo "$NETWORK" RUN echo "$REPLICA_FROM" -RUN echo "$POLKADOT_BUILD_BRANCH" 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-unique-target /unique_parachain/target/release/wbuild/"$RUNTIME"-runtime/"$RUNTIME"_runtime.compact.compressed.wasm /unique-chain/target/release/wbuild/"$RUNTIME"-runtime/"$RUNTIME"_runtime.compact.compressed.wasm +COPY --from=builder-unique-target /unique_parachain/target/release/wbuild/"$NETWORK"-runtime/"$NETWORK"_runtime.compact.compressed.wasm /unique-chain/target/release/wbuild/"$NETWORK"-runtime/"$NETWORK"_runtime.compact.compressed.wasm COPY --from=uniquenetwork/builder-chainql:latest /chainql/target/release/chainql /chainql/target/release/ --- a/.docker/Dockerfile-testnet.j2 +++ b/.docker/Dockerfile-testnet.j2 @@ -33,7 +33,7 @@ RUN git clone -b {{ BRANCH }} https://github.com/UniqueNetwork/unique-chain.git && \ cd unique-chain && \ - cargo build --features={{ FEATURE }} --$PROFILE + cargo build --features={{ NETWORK }}-runtime --$PROFILE # ===== RUN ====== --- a/.docker/Dockerfile-try-runtime +++ b/.docker/Dockerfile-try-runtime @@ -2,7 +2,7 @@ FROM ubuntu:20.04 as rust-builder LABEL maintainer="Unique.Network" -ARG RUST_TOOLCHAIN= +ARG RUST_TOOLCHAIN ENV RUST_TOOLCHAIN $RUST_TOOLCHAIN ENV CARGO_HOME="/cargo-home" @@ -33,17 +33,17 @@ FROM rust-builder as builder-unique ARG PROFILE=release -ARG FEATURE= -ARG REPLICA_FROM= -ENV FEATURE $FEATURE +ARG NETWORK +ARG REPLICA_FROM +ENV NETWORK $NETWORK ENV REPLICA_FROM $REPLICA_FROM COPY . /unique_parachain WORKDIR /unique_parachain -RUN echo "Requested features: $FEATURE\n" && \ +RUN echo "Requested features: ${NETWORK}-runtime\n" && \ echo "Fork from: $REPLICA_FROM\n" && \ - cargo build --features=$FEATURE --release + cargo build --features=try-runtime,${NETWORK}-runtime --release -CMD cargo run --features=try-runtime,$FEATURE --release -- try-runtime --no-spec-check-panic on-runtime-upgrade live --uri $REPLICA_FROM +CMD cargo run --features=try-runtime,${NETWORK}-runtime --release -- try-runtime --no-spec-check-panic on-runtime-upgrade live --uri $REPLICA_FROM --- a/.docker/Dockerfile-xcm.j2 +++ b/.docker/Dockerfile-xcm.j2 @@ -37,7 +37,7 @@ RUN git clone -b {{ BRANCH }} https://github.com/UniqueNetwork/unique-chain.git && \ cd unique-chain && \ - cargo build --features={{ FEATURE }} --$PROFILE + cargo build --features={{ NETWORK }}-runtime --$PROFILE # ===== RUN ====== --- a/.docker/docker-compose-dev.yaml +++ /dev/null @@ -1,9 +0,0 @@ -version: "3.5" - -services: - node-dev: - build: - context: ../ - dockerfile: .docker/Dockerfile-chain-dev - image: node-dev - container_name: node-dev --- a/.docker/docker-compose-forkless.yml +++ /dev/null @@ -1,24 +0,0 @@ -version: "3.5" - -services: - node-parachain: - build: - context: ../ - dockerfile: .docker/Dockerfile-parachain-upgrade - image: node-parachain - container_name: node-parachain - volumes: - - type: bind - source: ./launch-config-forkless.json - target: /polkadot-launch/launch-config.json - read_only: true - expose: - - 9944 - - 9933 - ports: - - 127.0.0.1:9944:9944 - - 127.0.0.1:9933:9933 - logging: - options: - max-size: "1m" - max-file: "3" --- a/.docker/docker-compose-master.yml +++ /dev/null @@ -1,19 +0,0 @@ -version: "3.5" - -services: - blockchain_nodes: - build: - context: ../ - dockerfile: .docker/Dockerfile-parachain - image: blockchain_nodes - container_name: blockchain_nodes - expose: - - 9944 - - 9933 - ports: - - 127.0.0.1:9944:9944 - - 127.0.0.1:9933:9933 - logging: - options: - max-size: "1m" - max-file: "3" --- a/.docker/docker-compose-try-runtime.yml +++ /dev/null @@ -1,19 +0,0 @@ -version: "3.5" - -services: - try-runtime: - build: - context: ../ - dockerfile: .docker/Dockerfile-try-runtime - image: try-runtime - container_name: try-runtime - expose: - - 9944 - - 9933 - ports: - - 127.0.0.1:9944:9944 - - 127.0.0.1:9933:9933 - logging: - options: - max-size: "1m" - max-file: "3" --- a/.docker/docker-compose.tmp-dev.j2 +++ b/.docker/docker-compose.tmp-dev.j2 @@ -5,9 +5,11 @@ build: args: - "RUST_TOOLCHAIN={{ RUST_TOOLCHAIN }}" - - "FEATURE={{ FEATURE }}" + - "NETWORK={{ NETWORK }}" context: ../ dockerfile: .docker/Dockerfile-chain-dev + image: node-dev + container_name: node-dev expose: - 9944 - 9933 @@ -18,4 +20,4 @@ options: max-size: "1m" max-file: "3" - command: cargo run --release --features={{ FEATURE }} -- --dev -linfo --unsafe-ws-external --rpc-cors=all --unsafe-rpc-external + command: cargo run --release --features={{ NETWORK }}-runtime -- --dev -linfo --unsafe-ws-external --rpc-cors=all --unsafe-rpc-external --- a/.docker/docker-compose.tmp-forkless-data.j2 +++ b/.docker/docker-compose.tmp-forkless-data.j2 @@ -7,9 +7,9 @@ - "RUST_TOOLCHAIN={{ RUST_TOOLCHAIN }}" - "BRANCH={{ BRANCH }}" - "REPO_URL={{ REPO_URL }}" - - "FEATURE={{ FEATURE }}" - - "RUNTIME={{ RUNTIME }}" + - "NETWORK={{ NETWORK }}" - "POLKADOT_BUILD_BRANCH={{ POLKADOT_BUILD_BRANCH }}" + - "POLKADOT_LAUNCH_BRANCH={{ POLKADOT_LAUNCH_BRANCH }}" - "MAINNET_TAG={{ MAINNET_TAG }}" - "MAINNET_BRANCH={{ MAINNET_BRANCH }}" - "REPLICA_FROM={{ REPLICA_FROM }}" --- a/.docker/docker-compose.tmp-forkless-nodata.j2 +++ b/.docker/docker-compose.tmp-forkless-nodata.j2 @@ -7,9 +7,9 @@ - "RUST_TOOLCHAIN={{ RUST_TOOLCHAIN }}" - "BRANCH={{ BRANCH }}" - "REPO_URL={{ REPO_URL }}" - - "FEATURE={{ FEATURE }}" - - "RUNTIME={{ RUNTIME }}" + - "NETWORK={{ NETWORK }}" - "POLKADOT_BUILD_BRANCH={{ POLKADOT_BUILD_BRANCH }}" + - "POLKADOT_LAUNCH_BRANCH={{ POLKADOT_LAUNCH_BRANCH }}" - "MAINNET_TAG={{ MAINNET_TAG }}" - "MAINNET_BRANCH={{ MAINNET_BRANCH }}" context: ../ --- a/.docker/docker-compose.tmp-master.j2 +++ /dev/null @@ -1,11 +0,0 @@ -version: "3.5" - -services: - blockchain_nodes: - build: - args: - - "RUST_TOOLCHAIN={{ RUST_TOOLCHAIN }}" - - "BRANCH={{ BRANCH }}" - - "REPO_URL={{ REPO_URL }}" - - "FEATURE={{ FEATURE }}" - - "POLKADOT_BUILD_BRANCH={{ POLKADOT_BUILD_BRANCH }}" --- a/.docker/docker-compose.tmp-node.j2 +++ b/.docker/docker-compose.tmp-node.j2 @@ -7,9 +7,9 @@ - "RUST_TOOLCHAIN={{ RUST_TOOLCHAIN }}" - "BRANCH={{ BRANCH }}" - "REPO_URL={{ REPO_URL }}" - - "FEATURE={{ FEATURE }}" - - "RUNTIME={{ RUNTIME }}" + - "NETWORK={{ NETWORK }}" - "POLKADOT_BUILD_BRANCH={{ POLKADOT_BUILD_BRANCH }}" + - "POLKADOT_LAUNCH_BRANCH={{ POLKADOT_LAUNCH_BRANCH }}" - "MAINNET_TAG={{ MAINNET_TAG }}" - "MAINNET_BRANCH={{ MAINNET_BRANCH }}" context: ../ --- /dev/null +++ b/.docker/docker-compose.tmp-try-runtime.j2 @@ -0,0 +1,23 @@ +version: "3.5" + +services: + try-runtime: + build: + context: ../ + dockerfile: .docker/Dockerfile-try-runtime + args: + - "RUST_TOOLCHAIN={{ RUST_TOOLCHAIN }}" + - "NETWORK={{ NETWORK }}" + - "REPLICA_FROM={{ REPLICA_FROM }}" + image: try-runtime + container_name: try-runtime + expose: + - 9944 + - 9933 + ports: + - 127.0.0.1:9944:9944 + - 127.0.0.1:9933:9933 + logging: + options: + max-size: "1m" + max-file: "3" --- a/.docker/docker-compose.tmp-unit.j2 +++ b/.docker/docker-compose.tmp-unit.j2 @@ -7,7 +7,9 @@ dockerfile: .docker/Dockerfile-chain-dev-unit args: - "RUST_TOOLCHAIN={{ RUST_TOOLCHAIN }}" - - "FEATURE={{ FEATURE }}" + - "NETWORK={{ NETWORK }}" + image: node-dev + container_name: node-dev logging: options: max-size: "1m" --- a/.docker/docker-compose.try-runtime.j2 +++ /dev/null @@ -1,10 +0,0 @@ -version: "3.5" - -services: - try-runtime: - build: - args: - - "RUST_TOOLCHAIN={{ RUST_TOOLCHAIN }}" - - "FEATURE={{ FEATURE }}" - - "REPLICA_FROM={{ REPLICA_FROM }}" - --- a/.docker/forkless-config/launch-config-forkless-data.j2 +++ b/.docker/forkless-config/launch-config-forkless-data.j2 @@ -88,14 +88,13 @@ { "bin": "/unique-chain/current/release/unique-collator", "upgradeBin": "/unique-chain/target/release/unique-collator", - "upgradeWasm": "/unique-chain/target/release/wbuild/{{ FEATURE }}/{{ RUNTIME }}_runtime.compact.compressed.wasm", + "upgradeWasm": "/unique-chain/target/release/wbuild/{{ NETWORK }}-runtime/{{ NETWORK }}_runtime.compact.compressed.wasm", "id": "1000", "balance": "1000000000000000000000000", "chainRawInitializer": [ "chainql", - "--ext-str=REPLICA_FROM", "--tla-code=rawSpec=import '${rawSpec}'", - "--tla-code=forkFrom=std.extVar('REPLICA_FROM')", + "--tla-str=forkFrom={{ REPLICA_FROM }}", "fork.jsonnet" ], "nodes": [ --- a/.docker/forkless-config/launch-config-forkless-nodata.j2 +++ b/.docker/forkless-config/launch-config-forkless-nodata.j2 @@ -88,7 +88,7 @@ { "bin": "/unique-chain/current/release/unique-collator", "upgradeBin": "/unique-chain/target/release/unique-collator", - "upgradeWasm": "/unique-chain/target/release/wbuild/{{ FEATURE }}/{{ RUNTIME }}_runtime.compact.compressed.wasm", + "upgradeWasm": "/unique-chain/target/release/wbuild/{{ NETWORK }}-runtime/{{ NETWORK }}_runtime.compact.compressed.wasm", "id": "1000", "balance": "1000000000000000000000000", "nodes": [ --- a/.docker/forkless-config/launch-config-node-update-only-v3.j2 +++ b/.docker/forkless-config/launch-config-node-update-only-v3.j2 @@ -88,7 +88,7 @@ { "bin": "/unique-chain/current/release/unique-collator", "upgradeBin": "/unique-chain/target/release/unique-collator", - "upgradeWasm": "/unique-chain/target/release/wbuild/{{ FEATURE }}/{{ RUNTIME }}_runtime.compact.compressed.wasm", + "upgradeWasm": "/unique-chain/target/release/wbuild/{{ NETWORK }}-runtime/{{ NETWORK }}_runtime.compact.compressed.wasm", "id": "1000", "balance": "1000000000000000000000000", "nodes": [ --- a/.env +++ b/.env @@ -5,18 +5,19 @@ STATEMINT_BUILD_BRANCH=release-parachains-v9271 ACALA_BUILD_BRANCH=2.9.6 MOONBEAM_BUILD_BRANCH=v0.26.1 -UNIQUE_MAINNET_TAG=v924010-old-tests-fixes +UNIQUE_MAINNET_BRANCH=v924010-old-tests-fixes UNIQUE_REPLICA_FROM=wss://eu-ws.unique.network:443 KUSAMA_MAINNET_BRANCH=release-v0.9.30 STATEMINE_BUILD_BRANCH=parachains-v9271 KARURA_BUILD_BRANCH=release-karura-2.9.5 MOONRIVER_BUILD_BRANCH=v0.26.1 -QUARTZ_MAINNET_TAG=quartz-v924012-2-old-tests-fixes +QUARTZ_MAINNET_BRANCH=quartz-v924012-2-old-tests-fixes QUARTZ_REPLICA_FROM=wss://eu-ws-quartz.unique.network:443 UNQWND_MAINNET_BRANCH=release-v0.9.30 WESTMINT_BUILD_BRANCH=parachains-v9290 -OPAL_MAINNET_TAG=quartz-v924012-2-old-tests-fixes +OPAL_MAINNET_BRANCH=quartz-v924012-2-old-tests-fixes OPAL_REPLICA_FROM=wss://eu-ws-opal.unique.network:443 + POLKADOT_LAUNCH_BRANCH=unique-network --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -5,7 +5,7 @@ market-e2e-test: name: market e2e tests - uses: ./.github/workflows/market-test_v2.yml + uses: ./.github/workflows/market-test.yml secrets: inherit --- a/.github/workflows/ci-develop.yml +++ b/.github/workflows/ci-develop.yml @@ -16,14 +16,13 @@ # List of a jobs included into Workflow. jobs: - yarn-test-dev: + yarn-dev: if: github.event.pull_request.draft == false # Conditional check for draft per job. - uses: ./.github/workflows/dev-build-tests_v2.yml - + uses: ./.github/workflows/yarn-dev.yml unit-test: if: github.event.pull_request.draft == false # Conditional check for draft per job. - uses: ./.github/workflows/unit-test_v2.yml + uses: ./.github/workflows/unit-test.yml canary: if: ${{ (github.event.pull_request.draft == false && contains( github.event.pull_request.labels.*.name, 'canary')) }} # Conditional check for draft & labels per job. @@ -41,16 +40,12 @@ node-only-update: if: ${{ (github.event.pull_request.draft == false && contains( github.event.pull_request.labels.*.name, 'node-only-update')) }} # Conditional check for draft & labels per job. - uses: ./.github/workflows/node-only-update_v2.yml + uses: ./.github/workflows/node-only-update.yml - parallel_and_sequential_tests: + integration: if: ${{ (github.event.pull_request.draft == false && contains( github.event.pull_request.labels.*.name, 'integration')) }} # Conditional check for draft & labels per job. uses: ./.github/workflows/integration-tests.yml codestyle: if: github.event.pull_request.draft == false # Conditional check for draft per job. - uses: ./.github/workflows/codestyle_v2.yml - - yarn_eslint: - if: github.event.pull_request.draft == false # Conditional check for draft per job. - uses: ./.github/workflows/test_codestyle_v2.yml + uses: ./.github/workflows/codestyle.yml --- a/.github/workflows/ci-master.yml +++ b/.github/workflows/ci-master.yml @@ -17,21 +17,25 @@ jobs: unit-test: - uses: ./.github/workflows/unit-test_v2.yml + uses: ./.github/workflows/unit-test.yml node-only-update: - uses: ./.github/workflows/node-only-update_v2.yml + uses: ./.github/workflows/node-only-update.yml forkless: uses: ./.github/workflows/forkless.yml - canary: - uses: ./.github/workflows/canary.yml - secrets: inherit # pass all secrets from initial workflow to nested + # canary: + # uses: ./.github/workflows/canary.yml + # secrets: inherit # pass all secrets from initial workflow to nested xcm: uses: ./.github/workflows/xcm.yml secrets: inherit # pass all secrets from initial workflow to nested + # testnet: + # uses: ./.github/workflows/testnet-build.yml + # secrets: inherit # pass all secrets from initial workflow to nested + codestyle: - uses: ./.github/workflows/codestyle_v2.yml + uses: ./.github/workflows/codestyle.yml --- /dev/null +++ b/.github/workflows/codestyle.yml @@ -0,0 +1,55 @@ +# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2586837012/Code+style+testing +# Nested workflow for checks related to formatting Rust code + +name: codestyle + +# Triger: only call from main workflow(re-usable workflows) +on: + workflow_call: + +jobs: + rustfmt: + runs-on: [ self-hosted-ci ] + steps: + - uses: actions/checkout@v3 + - name: Install latest nightly + uses: actions-rs/toolchain@v1 + with: + toolchain: nightly + default: true + target: wasm32-unknown-unknown + components: rustfmt, clippy + - name: Run cargo fmt + run: cargo fmt -- --check # In that mode it returns only exit code. + - name: Cargo fmt state + if: success() + run: echo "Nothing to do. Command 'cargo fmt -- --check' returned exit code 0." + + yarn_eslint: + runs-on: [ self-hosted-ci ] + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 16 + - name: Install modules + run: cd tests && yarn + - name: Run ESLint + run: cd tests && yarn eslint --ext .ts,.js src/ + + clippy: + if: ${{ false }} + runs-on: [ self-hosted-ci ] + steps: + - uses: actions/checkout@v3 + - name: Install substrate dependencies + run: sudo apt-get install libssl-dev pkg-config libclang-dev clang protobuf-compiler + - name: Install latest nightly + uses: actions-rs/toolchain@v1 + with: + toolchain: nightly + default: true + target: wasm32-unknown-unknown + components: rustfmt, clippy + - name: Run cargo check + run: cargo clippy -- -Dwarnings --- a/.github/workflows/codestyle_v2.yml +++ /dev/null @@ -1,47 +0,0 @@ -# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2586837012/Code+style+testing -# Nested workflow for checks related to formatting Rust code - -name: cargo fmt - -# Triger: only call from main workflow(re-usable workflows) -on: - workflow_call: - -jobs: - rustfmt: - runs-on: self-hosted-ci - - steps: - - uses: actions/checkout@v3 - - name: Install latest nightly - uses: actions-rs/toolchain@v1 - with: - toolchain: nightly - default: true - target: wasm32-unknown-unknown - components: rustfmt, clippy - - name: Run cargo fmt - run: cargo fmt -- --check # In that mode it returns only exit code. - - name: Cargo fmt state - if: success() - run: echo "Nothing to do. Command 'cargo fmt -- --check' returned exit code 0." - - - clippy: - if: ${{ false }} - runs-on: self-hosted-ci - - steps: - - - uses: actions/checkout@v3 - - name: Install substrate dependencies - run: sudo apt-get install libssl-dev pkg-config libclang-dev clang protobuf-compiler - - name: Install latest nightly - uses: actions-rs/toolchain@v1 - with: - toolchain: nightly - default: true - target: wasm32-unknown-unknown - components: rustfmt, clippy - - name: Run cargo check - run: cargo clippy -- -Dwarnings --- a/.github/workflows/dev-build-tests_v2.yml +++ /dev/null @@ -1,101 +0,0 @@ -# Integration test in --dev mode -# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2586411104/Integration+tests -name: yarn test dev - -# Triger: only call from main workflow(re-usable workflows) -on: - workflow_call: - - - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - - dev_build_int_tests: - # The type of runner that the job will run on - runs-on: [self-hosted-ci,medium] - timeout-minutes: 1380 - - name: ${{ matrix.network }} - - continue-on-error: true #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: "opal-runtime" - - network: "quartz" - features: "quartz-runtime" - - network: "unique" - features: "unique-runtime" - - steps: - - - name: Clean Workspace - uses: AutoModality/action-clean@v1.1.0 - - # 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: Read .env file - uses: xom9ikk/dotenv@v2 - - - name: Generate ENV related extend file for docker-compose - uses: cuchi/jinja2-action@v1.2.0 - with: - template: .docker/docker-compose.tmp-dev.j2 - output_file: .docker/docker-compose.${{ matrix.network }}.yml - variables: | - RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} - FEATURE=${{ matrix.features }} - - - - name: Show build configuration - 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 --remove-orphans - - - uses: actions/setup-node@v3 - with: - node-version: 16 - - - name: Run tests - working-directory: tests - run: | - yarn install - yarn add mochawesome - node scripts/readyness.js - echo "Ready to start tests" - yarn polkadot-types - 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 - if: success() || failure() # run this step even if previous step failed - with: - name: int test results - ${{ 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 - - - name: Remove builder cache - if: always() # run this step always - run: | - docker builder prune -f -a - docker system prune -f - docker image prune -f -a --- a/.github/workflows/execution-matrix.yml +++ b/.github/workflows/execution-matrix.yml @@ -36,7 +36,7 @@ id: create_matrix with: matrix: | - network {opal}, runtime {opal}, features {opal-runtime}, mainnet_branch {${{ env.OPAL_MAINNET_TAG }}}, replica_from_address {${{ env.OPAL_REPLICA_FROM }}} - network {quartz}, runtime {quartz}, features {quartz-runtime}, mainnet_branch {${{ env.QUARTZ_MAINNET_TAG }}}, replica_from_address {${{ env.QUARTZ_REPLICA_FROM }}} - network {unique}, runtime {unique}, features {unique-runtime}, mainnet_branch {${{ env.UNIQUE_MAINNET_TAG }}}, replica_from_address {${{ env.UNIQUE_REPLICA_FROM }}} + network {opal}, mainnet_branch {${{ env.OPAL_MAINNET_BRANCH }}}, replica_from_address {${{ env.OPAL_REPLICA_FROM }}} + network {quartz}, mainnet_branch {${{ env.QUARTZ_MAINNET_BRANCH }}}, replica_from_address {${{ env.QUARTZ_REPLICA_FROM }}} + network {unique}, mainnet_branch {${{ env.UNIQUE_MAINNET_BRANCH }}}, replica_from_address {${{ env.UNIQUE_REPLICA_FROM }}} --- /dev/null +++ b/.github/workflows/forkless-update-data.yml @@ -0,0 +1,169 @@ +# Forkless update with data replication +# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2586869792/Forkless+update+with+data + +# Triger: only call from main workflow(re-usable workflows) +on: + workflow_call: + + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + + execution-marix: + + name: Prepare execution matrix + + runs-on: self-hosted-ci + outputs: + matrix: ${{ steps.create_matrix.outputs.matrix }} + + steps: + + - name: Clean Workspace + uses: AutoModality/action-clean@v1.1.0 + + # 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: Read .env file + uses: xom9ikk/dotenv@v2 + + - name: Create Execution matrix + uses: CertainLach/create-matrix-action@v3 + id: create_matrix + with: + matrix: | + network {opal}, mainnet_branch {${{ env.OPAL_MAINNET_BRANCH }}}, replica_from_address {${{ env.OPAL_REPLICA_FROM }}} + network {quartz}, mainnet_branch {${{ env.QUARTZ_MAINNET_BRANCH }}}, replica_from_address {${{ env.QUARTZ_REPLICA_FROM }}} + network {unique}, mainnet_branch {${{ env.UNIQUE_MAINNET_BRANCH }}}, replica_from_address {${{ env.UNIQUE_REPLICA_FROM }}} + + forkless-update-data: + needs: execution-marix + # The type of runner that the job will run on + runs-on: [self-hosted-ci,large] + timeout-minutes: 1380 + + name: ${{ matrix.network }}-data + strategy: + matrix: + include: ${{fromJson(needs.execution-marix.outputs.matrix)}} + + continue-on-error: true #Do not stop testing of matrix runs failed. As it decided during PR review - it required 50/50& Let's check it with false. + + steps: + - name: Clean Workspace + uses: AutoModality/action-clean@v1.1.0 + + # 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: Read .env file + uses: xom9ikk/dotenv@v2 + + - name: Generate ENV related extend file for docker-compose + uses: cuchi/jinja2-action@v1.2.0 + with: + template: .docker/docker-compose.tmp-forkless-data.j2 + output_file: .docker/docker-compose-forkless-data.${{ 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_LAUNCH_BRANCH=${{ env.POLKADOT_LAUNCH_BRANCH }} + POLKADOT_MAINNET_BRANCH=${{ env.POLKADOT_MAINNET_BRANCH }} + MAINNET_TAG=${{ matrix.mainnet_tag }} + MAINNET_BRANCH=${{ matrix.mainnet_branch }} + NETWORK=${{ matrix.network }} + BRANCH=${{ github.head_ref }} + REPLICA_FROM=${{ matrix.replica_from_address }} + + - name: Show build configuration + run: cat .docker/docker-compose-forkless-data.${{ matrix.network }}.yml + + - name: Generate launch-config-forkless-data.json + uses: cuchi/jinja2-action@v1.2.0 + with: + template: .docker/forkless-config/launch-config-forkless-data.j2 + output_file: .docker/launch-config-forkless-data.json + variables: | + NETWORK=${{ matrix.network }} + REPLICA_FROM=${{ matrix.replica_from_address }} + + - name: Show launch-config-forkless configuration + run: cat .docker/launch-config-forkless-data.json + + - name: Build the stack + run: docker-compose -f ".docker/docker-compose-forkless-data.${{ matrix.network }}.yml" up -d --build --force-recreate --timeout 300 + + - name: Check if docker logs consist logs related to Runtime Upgrade testing. + if: success() + run: | + counter=160 + function check_container_status { + docker inspect -f {{.State.Running}} node-parachain + } + function do_docker_logs { + docker logs --details node-parachain 2>&1 + } + function is_started { + if [ "$(check_container_status)" == "true" ]; then + echo "Container: node-parachain RUNNING"; + echo "Check Docker logs" + DOCKER_LOGS=$(do_docker_logs) + if [[ ${DOCKER_LOGS} = *"🛸 PARACHAINS' RUNTIME UPGRADE TESTING COMPLETE 🛸"* ]];then + echo "🛸 PARACHAINS' RUNTIME UPGRADE TESTING COMPLETE 🛸" + return 0 + elif [[ ${DOCKER_LOGS} = *"🚧 PARACHAINS' RUNTIME UPGRADE TESTING FAILED 🚧"* ]];then + echo "🚧 PARACHAINS' RUNTIME UPGRADE TESTING FAILED 🚧" + return 1 + else + echo "Message not found in logs output, repeating..." + return 1 + fi + else + echo "Container node-parachain not RUNNING" + echo "Halting all future checks" + exit 1 + fi + exit 0 + } + while ! is_started; do + echo "Waiting for special message in log files " + sleep 30s + counter=$(( $counter - 1 )) + echo "Counter: $counter" + if [ "$counter" -gt "0" ]; then + continue + else + break + fi + done + echo "Halting script" + exit 0 + shell: bash + + - name: Collect Docker Logs + if: success() || failure() + uses: jwalton/gh-docker-logs@v2.2.0 + with: + dest: './forkless-parachain-upgrade-data-logs.${{ matrix.features }}' + images: 'node-parachain' + + - name: Show Docker logs + if: success() || failure() + run: cat './forkless-parachain-upgrade-data-logs.${{ matrix.features }}/node-parachain.log' + + - name: Stop running containers + if: always() # run this step always + run: docker-compose -f ".docker/docker-compose-forkless-data.${{ matrix.network }}.yml" down --volumes + + - name: Remove builder cache + if: always() # run this step always + run: | + docker builder prune -f -a + docker system prune -f + docker image prune -f -a --- a/.github/workflows/forkless-update-data_v2.yml +++ /dev/null @@ -1,171 +0,0 @@ -# Forkless update with data replication -# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2586869792/Forkless+update+with+data - -# Triger: only call from main workflow(re-usable workflows) -on: - workflow_call: - - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - - execution-marix: - - name: Prepare execution matrix - - runs-on: self-hosted-ci - outputs: - matrix: ${{ steps.create_matrix.outputs.matrix }} - - steps: - - - name: Clean Workspace - uses: AutoModality/action-clean@v1.1.0 - - # 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: Read .env file - uses: xom9ikk/dotenv@v2 - - - name: Create Execution matrix - uses: CertainLach/create-matrix-action@v3 - id: create_matrix - with: - matrix: | - network {opal}, runtime {opal}, features {opal-runtime}, mainnet_branch {${{ env.OPAL_MAINNET_TAG }}}, replica_from_address {${{ env.OPAL_REPLICA_FROM }}} - network {quartz}, runtime {quartz}, features {quartz-runtime}, mainnet_branch {${{ env.QUARTZ_MAINNET_TAG }}}, replica_from_address {${{ env.QUARTZ_REPLICA_FROM }}} - network {unique}, runtime {unique}, features {unique-runtime}, mainnet_branch {${{ env.UNIQUE_MAINNET_TAG }}}, replica_from_address {${{ env.UNIQUE_REPLICA_FROM }}} - - forkless-update-data: - needs: execution-marix - # The type of runner that the job will run on - runs-on: [self-hosted-ci,large] - timeout-minutes: 1380 - - name: ${{ matrix.network }}-data - strategy: - matrix: - include: ${{fromJson(needs.execution-marix.outputs.matrix)}} - - continue-on-error: true #Do not stop testing of matrix runs failed. As it decided during PR review - it required 50/50& Let's check it with false. - - - steps: - - name: Clean Workspace - uses: AutoModality/action-clean@v1.1.0 - - # 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: Read .env file - uses: xom9ikk/dotenv@v2 - - - name: Generate ENV related extend file for docker-compose - uses: cuchi/jinja2-action@v1.2.0 - with: - template: .docker/docker-compose.tmp-forkless-data.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=${{ matrix.mainnet_tag }} - MAINNET_BRANCH=${{ matrix.mainnet_branch }} - FEATURE=${{ matrix.features }} - RUNTIME=${{ matrix.runtime }} - BRANCH=${{ github.head_ref }} - REPLICA_FROM=${{ matrix.replica_from_address }} - - - name: Show build configuration - run: cat .docker/docker-compose.${{ matrix.network }}.yml - - - name: Generate launch-config-forkless-data.json - uses: cuchi/jinja2-action@v1.2.0 - with: - template: .docker/forkless-config/launch-config-forkless-data.j2 - output_file: .docker/launch-config-forkless-data.json - variables: | - FEATURE=${{ matrix.features }} - RUNTIME=${{ matrix.runtime }} - - - name: Show launch-config-forkless configuration - run: cat .docker/launch-config-forkless-data.json - - - - name: Build the stack - run: docker-compose -f ".docker/docker-compose-forkless.yml" -f ".docker/docker-compose.${{ matrix.network }}.yml" up -d --build --force-recreate --timeout 300 - - - name: Check if docker logs consist logs related to Runtime Upgrade testing. - if: success() - run: | - counter=160 - function check_container_status { - docker inspect -f {{.State.Running}} node-parachain - } - function do_docker_logs { - docker logs --details node-parachain 2>&1 - } - function is_started { - if [ "$(check_container_status)" == "true" ]; then - echo "Container: node-parachain RUNNING"; - echo "Check Docker logs" - DOCKER_LOGS=$(do_docker_logs) - if [[ ${DOCKER_LOGS} = *"🛸 PARACHAINS' RUNTIME UPGRADE TESTING COMPLETE 🛸"* ]];then - echo "🛸 PARACHAINS' RUNTIME UPGRADE TESTING COMPLETE 🛸" - return 0 - elif [[ ${DOCKER_LOGS} = *"🚧 PARACHAINS' RUNTIME UPGRADE TESTING FAILED 🚧"* ]];then - echo "🚧 PARACHAINS' RUNTIME UPGRADE TESTING FAILED 🚧" - return 1 - else - echo "Message not found in logs output, repeating..." - return 1 - fi - else - echo "Container node-parachain not RUNNING" - echo "Halting all future checks" - exit 1 - fi - exit 0 - } - while ! is_started; do - echo "Waiting for special message in log files " - sleep 30s - counter=$(( $counter - 1 )) - echo "Counter: $counter" - if [ "$counter" -gt "0" ]; then - continue - else - break - fi - done - echo "Halting script" - exit 0 - shell: bash - - - name: Collect Docker Logs - if: success() || failure() - uses: jwalton/gh-docker-logs@v2.2.0 - with: - dest: './forkless-parachain-upgrade-data-logs.${{ matrix.features }}' - images: 'node-parachain' - - - name: Show Docker logs - if: success() || failure() - run: cat './forkless-parachain-upgrade-data-logs.${{ matrix.features }}/node-parachain.log' - - - name: Stop running containers - if: always() # run this step always - run: docker-compose -f ".docker/docker-compose-forkless.yml" -f ".docker/docker-compose.${{ matrix.network }}.yml" down --volumes - - - name: Remove builder cache - if: always() # run this step always - run: | - docker builder prune -f -a - docker system prune -f - docker image prune -f -a --- /dev/null +++ b/.github/workflows/forkless-update-nodata.yml @@ -0,0 +1,218 @@ +# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2586837021/Forkless+update+without+data +# Forkless update without data replication + +# Triger: only call from main workflow(re-usable workflows) +on: + workflow_call: + + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + execution-marix: + + name: Prepare execution matrix + + runs-on: self-hosted-ci + outputs: + matrix: ${{ steps.create_matrix.outputs.matrix }} + + steps: + + - name: Clean Workspace + uses: AutoModality/action-clean@v1.1.0 + + # 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: Read .env file + uses: xom9ikk/dotenv@v2 + + - name: Create Execution matrix + uses: CertainLach/create-matrix-action@v3 + id: create_matrix + with: + matrix: | + network {opal}, mainnet_branch {${{ env.OPAL_MAINNET_BRANCH }}} + network {quartz}, mainnet_branch {${{ env.QUARTZ_MAINNET_BRANCH }}} + network {unique}, mainnet_branch {${{ env.UNIQUE_MAINNET_BRANCH }}} + + + forkless-update-nodata: + needs: execution-marix + # The type of runner that the job will run on + runs-on: [self-hosted-ci,large] + + timeout-minutes: 1380 + + name: ${{ matrix.network }}-nodata + + continue-on-error: true #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: ${{fromJson(needs.execution-marix.outputs.matrix)}} + + steps: + - name: Clean Workspace + uses: AutoModality/action-clean@v1.1.0 + + # 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: Read .env file + uses: xom9ikk/dotenv@v2 + + - name: Generate ENV related extend file for docker-compose + uses: cuchi/jinja2-action@v1.2.0 + with: + template: .docker/docker-compose.tmp-forkless-nodata.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_LAUNCH_BRANCH=${{ env.POLKADOT_LAUNCH_BRANCH }} + POLKADOT_MAINNET_BRANCH=${{ env.POLKADOT_MAINNET_BRANCH }} + MAINNET_TAG=${{ matrix.mainnet_tag }} + MAINNET_BRANCH=${{ matrix.mainnet_branch }} + NETWORK=${{ matrix.network }} + BRANCH=${{ github.head_ref }} + + - name: Show build configuration + run: cat .docker/docker-compose.${{ matrix.network }}.yml + + - name: Generate launch-config-forkless-nodata.json + uses: cuchi/jinja2-action@v1.2.0 + with: + template: .docker/forkless-config/launch-config-forkless-nodata.j2 + output_file: .docker/launch-config-forkless-nodata.json + variables: | + NETWORK=${{ matrix.network }} + + - name: Show launch-config-forkless configuration + run: cat .docker/launch-config-forkless-nodata.json + + - uses: actions/setup-node@v3 + with: + node-version: 16 + + - name: Build the stack + run: docker-compose -f ".docker/docker-compose.${{ matrix.network }}.yml" up -d --build --force-recreate --timeout 300 + + - name: Check if docker logs consist logs related to Runtime Upgrade testing. + if: success() + run: | + counter=160 + function check_container_status { + docker inspect -f {{.State.Running}} node-parachain + } + function do_docker_logs { + docker logs --details node-parachain 2>&1 + } + function is_started { + if [ "$(check_container_status)" == "true" ]; then + echo "Container: node-parachain RUNNING"; + echo "Check Docker logs" + DOCKER_LOGS=$(do_docker_logs) + if [[ ${DOCKER_LOGS} = *"🛸 PARACHAINS' RUNTIME UPGRADE TESTING COMPLETE 🛸"* ]];then + echo "🛸 PARACHAINS' RUNTIME UPGRADE TESTING COMPLETE 🛸" + return 0 + elif [[ ${DOCKER_LOGS} = *"🚧 PARACHAINS' RUNTIME UPGRADE TESTING FAILED 🚧"* ]];then + echo "🚧 PARACHAINS' RUNTIME UPGRADE TESTING FAILED 🚧" + return 1 + else + echo "Message not found in logs output, repeating..." + return 1 + fi + else + echo "Container node-parachain not RUNNING" + echo "Halting all future checks" + exit 1 + fi + exit 0 + } + while ! is_started; do + echo "Waiting for special message in log files " + sleep 30s + counter=$(( $counter - 1 )) + echo "Counter: $counter" + if [ "$counter" -gt "0" ]; then + continue + else + break + fi + done + echo "Halting script" + exit 0 + shell: bash + + - name: Collect Docker Logs + if: success() || failure() + uses: jwalton/gh-docker-logs@v2.2.0 + with: + dest: './forkless-parachain-upgrade-nodata-logs.${{ matrix.features }}' + images: 'node-parachain' + + - name: Show docker logs + if: success() || failure() + run: cat './forkless-parachain-upgrade-nodata-logs.${{ matrix.features }}/node-parachain.log' + + - name: Run Parallel tests + working-directory: tests + run: | + yarn install + yarn add mochawesome + node scripts/readyness.js + echo "Ready to start tests" + yarn polkadot-types + NOW=$(date +%s) && yarn testParallel --reporter mochawesome --reporter-options reportFilename=test-parallel-${NOW} + env: + RPC_URL: http://127.0.0.1:9933/ + + - name: Test Report Parallel + uses: phoenix-actions/test-reporting@v8 + id: test-report-parallel + if: success() || failure() # run this step even if previous step failed + with: + name: Report Parallel tests results - ${{ matrix.network }} # Name of the check run which will be created + path: tests/mochawesome-report/test-parallel-*.json # Path to test results + reporter: mochawesome-json + fail-on-error: 'false' + + - name: Run Sequential tests + working-directory: tests + if: success() || failure() + run: | + yarn install + yarn add mochawesome + node scripts/readyness.js + echo "Ready to start tests" + yarn polkadot-types + NOW=$(date +%s) && yarn testSequential --reporter mochawesome --reporter-options reportFilename=test-sequential-${NOW} + env: + RPC_URL: http://127.0.0.1:9933/ + + - name: Test Report Sequential + uses: phoenix-actions/test-reporting@v8 + id: test-report-sequential + if: success() || failure() # run this step even if previous step failed + with: + name: Report Sequential tests results - ${{ matrix.network }} # Name of the check run which will be created + path: tests/mochawesome-report/test-sequential-*.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.${{ matrix.network }}.yml" down + + - name: Remove builder cache + if: always() # run this step always + run: | + docker builder prune -f -a + docker system prune -f + docker image prune -f -a --- a/.github/workflows/forkless-update-nodata_v2.yml +++ /dev/null @@ -1,219 +0,0 @@ -# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2586837021/Forkless+update+without+data -# Forkless update without data replication - -# Triger: only call from main workflow(re-usable workflows) -on: - workflow_call: - - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - execution-marix: - - name: Prepare execution matrix - - runs-on: self-hosted-ci - outputs: - matrix: ${{ steps.create_matrix.outputs.matrix }} - - steps: - - - name: Clean Workspace - uses: AutoModality/action-clean@v1.1.0 - - # 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: Read .env file - uses: xom9ikk/dotenv@v2 - - - name: Create Execution matrix - uses: CertainLach/create-matrix-action@v3 - id: create_matrix - with: - matrix: | - network {opal}, runtime {opal}, features {opal-runtime}, mainnet_branch {${{ env.OPAL_MAINNET_TAG }}} - network {quartz}, runtime {quartz}, features {quartz-runtime}, mainnet_branch {${{ env.QUARTZ_MAINNET_TAG }}} - network {unique}, runtime {unique}, features {unique-runtime}, mainnet_branch {${{ env.UNIQUE_MAINNET_TAG }}} - - - forkless-update-nodata: - needs: execution-marix - # The type of runner that the job will run on - runs-on: [self-hosted-ci,large] - - timeout-minutes: 1380 - - name: ${{ matrix.network }}-nodata - - continue-on-error: true #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: ${{fromJson(needs.execution-marix.outputs.matrix)}} - - steps: - - name: Clean Workspace - uses: AutoModality/action-clean@v1.1.0 - - # 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: Read .env file - uses: xom9ikk/dotenv@v2 - - - name: Generate ENV related extend file for docker-compose - uses: cuchi/jinja2-action@v1.2.0 - with: - template: .docker/docker-compose.tmp-forkless-nodata.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=${{ matrix.mainnet_tag }} - MAINNET_BRANCH=${{ matrix.mainnet_branch }} - FEATURE=${{ matrix.features }} - RUNTIME=${{ matrix.runtime }} - BRANCH=${{ github.head_ref }} - - - name: Show build configuration - run: cat .docker/docker-compose.${{ matrix.network }}.yml - - - name: Generate launch-config-forkless-nodata.json - uses: cuchi/jinja2-action@v1.2.0 - with: - template: .docker/forkless-config/launch-config-forkless-nodata.j2 - output_file: .docker/launch-config-forkless-nodata.json - variables: | - FEATURE=${{ matrix.features }} - RUNTIME=${{ matrix.runtime }} - - - name: Show launch-config-forkless configuration - run: cat .docker/launch-config-forkless-nodata.json - - - uses: actions/setup-node@v3 - with: - node-version: 16 - - - name: Build the stack - run: docker-compose -f ".docker/docker-compose-forkless.yml" -f ".docker/docker-compose.${{ matrix.network }}.yml" up -d --build --force-recreate --timeout 300 - - - name: Check if docker logs consist logs related to Runtime Upgrade testing. - if: success() - run: | - counter=160 - function check_container_status { - docker inspect -f {{.State.Running}} node-parachain - } - function do_docker_logs { - docker logs --details node-parachain 2>&1 - } - function is_started { - if [ "$(check_container_status)" == "true" ]; then - echo "Container: node-parachain RUNNING"; - echo "Check Docker logs" - DOCKER_LOGS=$(do_docker_logs) - if [[ ${DOCKER_LOGS} = *"🛸 PARACHAINS' RUNTIME UPGRADE TESTING COMPLETE 🛸"* ]];then - echo "🛸 PARACHAINS' RUNTIME UPGRADE TESTING COMPLETE 🛸" - return 0 - elif [[ ${DOCKER_LOGS} = *"🚧 PARACHAINS' RUNTIME UPGRADE TESTING FAILED 🚧"* ]];then - echo "🚧 PARACHAINS' RUNTIME UPGRADE TESTING FAILED 🚧" - return 1 - else - echo "Message not found in logs output, repeating..." - return 1 - fi - else - echo "Container node-parachain not RUNNING" - echo "Halting all future checks" - exit 1 - fi - exit 0 - } - while ! is_started; do - echo "Waiting for special message in log files " - sleep 30s - counter=$(( $counter - 1 )) - echo "Counter: $counter" - if [ "$counter" -gt "0" ]; then - continue - else - break - fi - done - echo "Halting script" - exit 0 - shell: bash - - - name: Collect Docker Logs - if: success() || failure() - uses: jwalton/gh-docker-logs@v2.2.0 - with: - dest: './forkless-parachain-upgrade-nodata-logs.${{ matrix.features }}' - images: 'node-parachain' - - - name: Show docker logs - if: success() || failure() - run: cat './forkless-parachain-upgrade-nodata-logs.${{ matrix.features }}/node-parachain.log' - - - name: Run Parallel tests - working-directory: tests - run: | - yarn install - yarn add mochawesome - node scripts/readyness.js - echo "Ready to start tests" - yarn polkadot-types - NOW=$(date +%s) && yarn testParallel --reporter mochawesome --reporter-options reportFilename=test-parallel-${NOW} - env: - RPC_URL: http://127.0.0.1:9933/ - - - name: Test Report Parallel - uses: phoenix-actions/test-reporting@v8 - id: test-report-parallel - if: success() || failure() # run this step even if previous step failed - with: - name: Report Parallel tests results - ${{ matrix.network }} # Name of the check run which will be created - path: tests/mochawesome-report/test-parallel-*.json # Path to test results - reporter: mochawesome-json - fail-on-error: 'false' - - - name: Run Sequential tests - working-directory: tests - if: success() || failure() - run: | - yarn install - yarn add mochawesome - node scripts/readyness.js - echo "Ready to start tests" - yarn polkadot-types - NOW=$(date +%s) && yarn testSequential --reporter mochawesome --reporter-options reportFilename=test-sequential-${NOW} - env: - RPC_URL: http://127.0.0.1:9933/ - - - name: Test Report Sequential - uses: phoenix-actions/test-reporting@v8 - id: test-report-sequential - if: success() || failure() # run this step even if previous step failed - with: - name: Report Sequential tests results - ${{ matrix.network }} # Name of the check run which will be created - path: tests/mochawesome-report/test-sequential-*.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-forkless.yml" -f ".docker/docker-compose.${{ matrix.network }}.yml" down - - - name: Remove builder cache - if: always() # run this step always - run: | - docker builder prune -f -a - docker system prune -f - docker image prune -f -a --- a/.github/workflows/forkless.yml +++ b/.github/workflows/forkless.yml @@ -9,12 +9,12 @@ forkless-update-data: name: with data - uses: ./.github/workflows/forkless-update-data_v2.yml + uses: ./.github/workflows/forkless-update-data.yml forkless-update-no-data: name: no data - uses: ./.github/workflows/forkless-update-nodata_v2.yml + uses: ./.github/workflows/forkless-update-nodata.yml try-runtime: name: try-runtime - uses: ./.github/workflows/try-runtime_v2.yml + uses: ./.github/workflows/try-runtime.yml --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -35,16 +35,14 @@ id: create_matrix with: matrix: | - network {opal}, runtime {opal}, features {opal-runtime}, mainnet_branch {${{ env.OPAL_MAINNET_TAG }}} - network {quartz}, runtime {quartz}, features {quartz-runtime}, mainnet_branch {${{ env.QUARTZ_MAINNET_TAG }}} - network {unique}, runtime {unique}, features {unique-runtime}, mainnet_branch {${{ env.UNIQUE_MAINNET_TAG }}} + network {opal}, mainnet_branch {${{ env.OPAL_MAINNET_BRANCH }}} + network {quartz}, mainnet_branch {${{ env.QUARTZ_MAINNET_BRANCH }}} + network {unique}, mainnet_branch {${{ env.UNIQUE_MAINNET_BRANCH }}} parallel-test: needs: nodes-execution-matrix # The type of runner that the job will run on runs-on: [self-hosted-ci,large] - - timeout-minutes: 1380 @@ -78,11 +76,11 @@ REPO_URL=${{ github.server_url }}/${{ github.repository }}.git RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} POLKADOT_BUILD_BRANCH=${{ env.POLKADOT_BUILD_BRANCH }} + POLKADOT_LAUNCH_BRANCH=${{ env.POLKADOT_LAUNCH_BRANCH }} POLKADOT_MAINNET_BRANCH=${{ env.POLKADOT_MAINNET_BRANCH }} MAINNET_TAG=${{ matrix.mainnet_tag }} MAINNET_BRANCH=${{ matrix.mainnet_branch }} - FEATURE=${{ matrix.features }} - RUNTIME=${{ matrix.runtime }} + NETWORK=${{ matrix.network }} BRANCH=${{ github.head_ref }} - name: Show build configuration @@ -94,8 +92,7 @@ template: .docker/forkless-config/launch-config-node-update-only-v3.j2 output_file: .docker/launch-config-forkless-nodata.json variables: | - FEATURE=${{ matrix.features }} - RUNTIME=${{ matrix.runtime }} + NETWORK=${{ matrix.network }} - name: Show launch-config-forkless configuration run: cat .docker/launch-config-forkless-nodata.json @@ -105,7 +102,7 @@ node-version: 16 - name: Build the stack - run: docker-compose -f ".docker/docker-compose-forkless.yml" -f ".docker/docker-compose.node.${{ matrix.network }}.yml" up -d --build --remove-orphans --force-recreate --timeout 300 + run: docker-compose -f ".docker/docker-compose.node.${{ matrix.network }}.yml" up -d --build --remove-orphans --force-recreate --timeout 300 # 🚀 POLKADOT LAUNCH COMPLETE 🚀 - name: Check if docker logs consist messages related to testing of Node Parachain Upgrade. @@ -177,7 +174,7 @@ - name: Stop running containers if: always() # run this step always - run: docker-compose -f ".docker/docker-compose-forkless.yml" -f ".docker/docker-compose.node.${{ matrix.network }}.yml" down --volumes + run: docker-compose -f ".docker/docker-compose.node.${{ matrix.network }}.yml" down --volumes - name: Remove builder cache if: always() # run this step always @@ -227,11 +224,11 @@ REPO_URL=${{ github.server_url }}/${{ github.repository }}.git RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} POLKADOT_BUILD_BRANCH=${{ env.POLKADOT_BUILD_BRANCH }} + POLKADOT_LAUNCH_BRANCH=${{ env.POLKADOT_LAUNCH_BRANCH }} POLKADOT_MAINNET_BRANCH=${{ env.POLKADOT_MAINNET_BRANCH }} MAINNET_TAG=${{ matrix.mainnet_tag }} MAINNET_BRANCH=${{ matrix.mainnet_branch }} - FEATURE=${{ matrix.features }} - RUNTIME=${{ matrix.runtime }} + NETWORK=${{ matrix.network }} BRANCH=${{ github.head_ref }} - name: Show build configuration @@ -243,8 +240,7 @@ template: .docker/forkless-config/launch-config-node-update-only-v3.j2 output_file: .docker/launch-config-forkless-nodata.json variables: | - FEATURE=${{ matrix.features }} - RUNTIME=${{ matrix.runtime }} + NETWORK=${{ matrix.network }} - name: Show launch-config-forkless configuration run: cat .docker/launch-config-forkless-nodata.json @@ -254,7 +250,7 @@ node-version: 16 - name: Build the stack - run: docker-compose -f ".docker/docker-compose-forkless.yml" -f ".docker/docker-compose.node.${{ matrix.network }}.yml" up -d --build --remove-orphans --force-recreate --timeout 300 + run: docker-compose -f ".docker/docker-compose.node.${{ matrix.network }}.yml" up -d --build --remove-orphans --force-recreate --timeout 300 # 🚀 POLKADOT LAUNCH COMPLETE 🚀 - name: Check if docker logs consist messages related to testing of Node Parachain Upgrade. @@ -325,7 +321,7 @@ - name: Stop running containers if: always() # run this step always - run: docker-compose -f ".docker/docker-compose-forkless.yml" -f ".docker/docker-compose.node.${{ matrix.network }}.yml" down --volumes + run: docker-compose -f ".docker/docker-compose.node.${{ matrix.network }}.yml" down --volumes - name: Remove builder cache if: always() # run this step always --- /dev/null +++ b/.github/workflows/market-test.yml @@ -0,0 +1,187 @@ +# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2586509375/Market+e2e+test +# Nested workflow for lunching Market e2e tests from external repository https://github.com/UniqueNetwork/market-e2e-tests + +name: market api tests + +# Controls when the action will run. +on: + workflow_call: + + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + + market_test: + # The type of runner that the job will run on + runs-on: [self-hosted-ci,large] + timeout-minutes: 360 + + name: ${{ matrix.network }} + + continue-on-error: true #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" + + steps: + - name: Clean Workspace + uses: AutoModality/action-clean@v1.1.0 + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: Checkout master repo + uses: actions/checkout@master + with: + ref: ${{ github.head_ref }} #Checking out head commit + + - name: Checkout Market e2e tests + uses: actions/checkout@v3 + with: + repository: 'UniqueNetwork/market-e2e-tests' + ssh-key: ${{ secrets.GH_PAT }} + path: 'qa-tests' + ref: 'master' + + - name: Read .env file + uses: xom9ikk/dotenv@v2 + + - name: Copy qa-tests/.env.example to qa-tests/.env + working-directory: qa-tests + run: cp .env.docker .env + + - name: Generate ENV related extend file for docker-compose + uses: cuchi/jinja2-action@v1.2.0 + with: + template: qa-tests/.docker/docker-compose.tmp-market.j2 + output_file: qa-tests/.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_LAUNCH_BRANCH=${{ env.POLKADOT_LAUNCH_BRANCH }} + NETWORK=${{ matrix.network }} + BRANCH=${{ github.head_ref }} + + + - name: Show build configuration + working-directory: qa-tests + run: cat .docker/docker-compose.${{ matrix.network }}.yml + + - name: Start node-parachain + working-directory: qa-tests + run: docker-compose -f ".docker/docker-compose.market.yml" -f ".docker/docker-compose.${{ matrix.network }}.yml" up -d --build --remove-orphans --force-recreate node-parachain + + - uses: actions/setup-node@v3 + with: + node-version: 16.17 + + - name: Setup TypeScript + working-directory: qa-tests + run: | + npm install -g ts-node + npm install + + - name: Copy qa-tests/.env.docker to qa-tests/.env + working-directory: qa-tests + run: | + rm -rf .env + cp .env.docker .env + +# Temporary disable node readyness check. Have to dig into the script logic. +# - name: Wait for chain up and running +# working-directory: tests +# run: | +# yarn install +# node scripts/readyness.js +# echo "Ready to start tests" +# env: +# RPC_URL: http://127.0.0.1:9933/ + + - name: Wait for chain up and running + run: | + sleep 1200s + echo "Ready to start Market e2e tests" + + - name: Show content of .env file and Generate accounts + working-directory: qa-tests + run: | + cat .env + ts-node ./src/scripts/create-market-accounts.ts + + - name: Copy qa-tests/.env to qa-tests/.env.docker + working-directory: qa-tests + run: | + rm -rf .env.docker + cp .env .env.docker + + - name: Get chain logs + if: always() # run this step always + run: | + docker exec node-parachain cat /polkadot-launch/9944.log + docker exec node-parachain cat /polkadot-launch/9945.log + docker exec node-parachain cat /polkadot-launch/alice.log + docker exec node-parachain cat /polkadot-launch/eve.log + docker exec node-parachain cat /polkadot-launch/dave.log + docker exec node-parachain cat /polkadot-launch/charlie.log + + - name: Deploy contracts + run: | + cd qa-tests + ts-node ./src/scripts/deploy-contract.ts + + - name: Timeout for debug + if: failure() + run: sleep 300s + + - name: Import test data + working-directory: qa-tests + run: ts-node ./src/scripts/create-test-collections.ts + + - name: Show content of qa-test .env + working-directory: qa-tests + run: cat .env + + - name: Read qa -test .env file Before market start + uses: xom9ikk/dotenv@v2 + with: + path: qa-tests/ + + - name: local-market:start + run: docker-compose -f "qa-tests/.docker/docker-compose.market.yml" -f "qa-tests/.docker/docker-compose.${{ matrix.network }}.yml" up -d --build + + - name: Wait for market readyness + working-directory: qa-tests + run: src/scripts/wait-market-ready.sh + shell: bash + + - name: Install dependecies + working-directory: qa-tests + run: | + npm ci + npm install -D @playwright/test + npx playwright install-deps + npx playwright install + + - name: Show content of qa-test .env + working-directory: qa-tests + run: cat .env + + - name: Test API interface + working-directory: qa-tests + run: | + npx playwright test --workers=3 --quiet .*.api.test.ts --reporter=github --config playwright.config.ts + + - name: Timeout for debug + if: failure() + run: sleep 300s + + - name: Stop running containers + if: always() # run this step always + run: docker-compose -f "qa-tests/.docker/docker-compose.market.yml" -f "qa-tests/.docker/docker-compose.${{ matrix.network }}.yml" down --volumes + + - name: Remove builder cache + if: always() # run this step always + run: | + docker builder prune -f + docker system prune -f --- a/.github/workflows/market-test_v2.yml +++ /dev/null @@ -1,187 +0,0 @@ -# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2586509375/Market+e2e+test -# Nested workflow for lunching Market e2e tests from external repository https://github.com/UniqueNetwork/market-e2e-tests - -name: market api tests - -# Controls when the action will run. -on: - workflow_call: - - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - - market_test: - # The type of runner that the job will run on - runs-on: [self-hosted-ci,large] - timeout-minutes: 360 - - name: ${{ matrix.network }} - - continue-on-error: true #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: "opal-runtime" - - steps: - - name: Clean Workspace - uses: AutoModality/action-clean@v1.1.0 - - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - name: Checkout master repo - uses: actions/checkout@master - with: - ref: ${{ github.head_ref }} #Checking out head commit - - - name: Checkout Market e2e tests - uses: actions/checkout@v3 - with: - repository: 'UniqueNetwork/market-e2e-tests' - ssh-key: ${{ secrets.GH_PAT }} - path: 'qa-tests' - ref: 'master' - - - name: Read .env file - uses: xom9ikk/dotenv@v2 - - - name: Copy qa-tests/.env.example to qa-tests/.env - working-directory: qa-tests - run: cp .env.docker .env - - - name: Generate ENV related extend file for docker-compose - uses: cuchi/jinja2-action@v1.2.0 - with: - template: qa-tests/.docker/docker-compose.tmp-market.j2 - output_file: qa-tests/.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 }} - FEATURE=${{ matrix.features }} - BRANCH=${{ github.head_ref }} - - - - name: Show build configuration - working-directory: qa-tests - run: cat .docker/docker-compose.${{ matrix.network }}.yml - - - name: Start node-parachain - working-directory: qa-tests - run: docker-compose -f ".docker/docker-compose.market.yml" -f ".docker/docker-compose.${{ matrix.network }}.yml" up -d --build --remove-orphans --force-recreate node-parachain - - - uses: actions/setup-node@v3 - with: - node-version: 16.17 - - - name: Setup TypeScript - working-directory: qa-tests - run: | - npm install -g ts-node - npm install - - - name: Copy qa-tests/.env.docker to qa-tests/.env - working-directory: qa-tests - run: | - rm -rf .env - cp .env.docker .env - -# Temporary disable node readyness check. Have to dig into the script logic. -# - name: Wait for chain up and running -# working-directory: tests -# run: | -# yarn install -# node scripts/readyness.js -# echo "Ready to start tests" -# env: -# RPC_URL: http://127.0.0.1:9933/ - - - name: Wait for chain up and running - run: | - sleep 1200s - echo "Ready to start Market e2e tests" - - - name: Show content of .env file and Generate accounts - working-directory: qa-tests - run: | - cat .env - ts-node ./src/scripts/create-market-accounts.ts - - - name: Copy qa-tests/.env to qa-tests/.env.docker - working-directory: qa-tests - run: | - rm -rf .env.docker - cp .env .env.docker - - - name: Get chain logs - if: always() # run this step always - run: | - docker exec node-parachain cat /polkadot-launch/9944.log - docker exec node-parachain cat /polkadot-launch/9945.log - docker exec node-parachain cat /polkadot-launch/alice.log - docker exec node-parachain cat /polkadot-launch/eve.log - docker exec node-parachain cat /polkadot-launch/dave.log - docker exec node-parachain cat /polkadot-launch/charlie.log - - - name: Deploy contracts - run: | - cd qa-tests - ts-node ./src/scripts/deploy-contract.ts - - - name: Timeout for debug - if: failure() - run: sleep 300s - - - name: Import test data - working-directory: qa-tests - run: ts-node ./src/scripts/create-test-collections.ts - - - name: Show content of qa-test .env - working-directory: qa-tests - run: cat .env - - - name: Read qa -test .env file Before market start - uses: xom9ikk/dotenv@v2 - with: - path: qa-tests/ - - - name: local-market:start - run: docker-compose -f "qa-tests/.docker/docker-compose.market.yml" -f "qa-tests/.docker/docker-compose.${{ matrix.network }}.yml" up -d --build - - - name: Wait for market readyness - working-directory: qa-tests - run: src/scripts/wait-market-ready.sh - shell: bash - - - name: Install dependecies - working-directory: qa-tests - run: | - npm ci - npm install -D @playwright/test - npx playwright install-deps - npx playwright install - - - name: Show content of qa-test .env - working-directory: qa-tests - run: cat .env - - - name: Test API interface - working-directory: qa-tests - run: | - npx playwright test --workers=8 --quiet .*.api.test.ts --reporter=github --config playwright.config.ts - - - name: Timeout for debug - if: failure() - run: sleep 300s - - - name: Stop running containers - if: always() # run this step always - run: docker-compose -f "qa-tests/.docker/docker-compose.market.yml" -f "qa-tests/.docker/docker-compose.${{ matrix.network }}.yml" down --volumes - - - name: Remove builder cache - if: always() # run this step always - run: | - docker builder prune -f - docker system prune -f --- /dev/null +++ b/.github/workflows/node-only-update.yml @@ -0,0 +1,372 @@ +# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2586837028/Nodes+only+update +# Node only update with restart polkadot-launch process. + +name: nodes-only update + +# Triger: only call from main workflow(re-usable workflows) +on: + workflow_call: + + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + + nodes-execution-matrix: + + name: execution matrix + + runs-on: self-hosted-ci + outputs: + matrix: ${{ steps.create_matrix.outputs.matrix }} + + steps: + + - name: Clean Workspace + uses: AutoModality/action-clean@v1.1.0 + + # 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: Read .env file + uses: xom9ikk/dotenv@v2 + + - name: Create Execution matrix + uses: CertainLach/create-matrix-action@v3 + id: create_matrix + with: + matrix: | + network {opal}, mainnet_branch {${{ env.OPAL_MAINNET_BRANCH }}} + network {quartz}, mainnet_branch {${{ env.QUARTZ_MAINNET_BRANCH }}} + network {unique}, mainnet_branch {${{ env.UNIQUE_MAINNET_BRANCH }}} + + + + nodes-only-update: + needs: nodes-execution-matrix + # The type of runner that the job will run on + runs-on: [self-hosted-ci,large] + + timeout-minutes: 2880 # 48 hours for execution jobs. + + name: ${{ matrix.network }} + + continue-on-error: true #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: ${{fromJson(needs.nodes-execution-matrix.outputs.matrix)}} + + steps: + + - name: Clean Workspace + uses: AutoModality/action-clean@v1.1.0 + + # 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: Read .env file + uses: xom9ikk/dotenv@v2 + + - name: Generate ENV related extend file for docker-compose + uses: cuchi/jinja2-action@v1.2.0 + with: + template: .docker/docker-compose.tmp-node.j2 + output_file: .docker/docker-compose.node.${{ 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_LAUNCH_BRANCH=${{ env.POLKADOT_LAUNCH_BRANCH }} + POLKADOT_MAINNET_BRANCH=${{ env.POLKADOT_MAINNET_BRANCH }} + MAINNET_TAG=${{ matrix.mainnet_tag }} + MAINNET_BRANCH=${{ matrix.mainnet_branch }} + NETWORK=${{ matrix.network }} + BRANCH=${{ github.head_ref }} + + - name: Show build configuration + run: cat .docker/docker-compose.node.${{ matrix.network }}.yml + + - name: Generate launch-config-forkless-nodata.json + uses: cuchi/jinja2-action@v1.2.0 + with: + template: .docker/forkless-config/launch-config-forkless-nodata.j2 + output_file: .docker/launch-config-forkless-nodata.json + variables: | + NETWORK=${{ matrix.network }} + + - name: Show launch-config-forkless configuration + run: cat .docker/launch-config-forkless-nodata.json + + - uses: actions/setup-node@v3 + with: + node-version: 16 + + - name: Build the stack + run: docker-compose -f ".docker/docker-compose.node.${{ matrix.network }}.yml" up -d --build --remove-orphans --force-recreate --timeout 300 + + # 🚀 POLKADOT LAUNCH COMPLETE 🚀 + - name: Check if docker logs consist messages related to testing of Node Parachain Upgrade. + if: success() + run: | + counter=160 + function check_container_status { + docker inspect -f {{.State.Running}} node-parachain + } + function do_docker_logs { + docker logs --details node-parachain 2>&1 + } + function is_started { + if [ "$(check_container_status)" == "true" ]; then + echo "Container: node-parachain RUNNING"; + echo "Check Docker logs" + DOCKER_LOGS=$(do_docker_logs) + if [[ ${DOCKER_LOGS} = *"POLKADOT LAUNCH COMPLETE"* ]];then + echo "🚀 POLKADOT LAUNCH COMPLETE 🚀" + return 0 + else + echo "Message not found in logs output, repeating..." + return 1 + fi + else + echo "Container node-parachain NOT RUNNING" + echo "Halting all future checks" + exit 1 + fi + echo "something goes wrong" + exit 1 + } + while ! is_started; do + echo "Waiting for special message in log files " + sleep 30s + counter=$(( $counter - 1 )) + echo "Counter: $counter" + if [ "$counter" -gt "0" ]; then + continue + else + break + fi + done + echo "Halting script" + exit 0 + shell: bash + + - name: Checkout at '${{ matrix.mainnet_branch }}' branch + uses: actions/checkout@master + with: + ref: ${{ matrix.mainnet_branch }} #Checking out head commit + path: ${{ matrix.mainnet_branch }} + + - name: Run tests before Node Parachain upgrade + working-directory: ${{ matrix.mainnet_branch }}/tests + run: | + yarn install + yarn add mochawesome + node scripts/readyness.js + echo "Ready to start tests" + yarn polkadot-types + NOW=$(date +%s) && yarn test --reporter mochawesome --reporter-options reportFilename=test-before-${NOW} + env: + RPC_URL: http://127.0.0.1:9933/ + + - name: Upload Test Report Before Node upgrade + uses: phoenix-actions/test-reporting@v8 + id: test-report-before + if: success() || failure() # run this step even if previous step failed + with: + name: Tests before node upgrade ${{ matrix.network }} # Name of the check run which will be created + path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-before-*.json # Path to test results + reporter: mochawesome-json + fail-on-error: 'false' + + # TODO uncomment thease steps after the merge + #- name: Run Parallel tests before Node Parachain upgrade + # working-directory: ${{ matrix.mainnet_branch }}/tests + # run: | + # yarn install + # yarn add mochawesome + # echo "Ready to start tests" + # yarn polkadot-types + # NOW=$(date +%s) && yarn testParallel --reporter mochawesome --reporter-options reportFilename=test-parallel-${NOW} + # env: + # RPC_URL: http://127.0.0.1:9933/ + + #- name: Upload Parallel Test Report Before Node upgrade + # uses: phoenix-actions/test-reporting@v8 + # id: test-parallel-report-before + # if: success() || failure() # run this step even if previous step failed + # with: + # name: Tests before node upgrade ${{ matrix.network }} # Name of the check run which will be created + # path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-parallel-*.json # Path to test results + # reporter: mochawesome-json + # fail-on-error: 'false' + + # - name: Run Sequential tests before Node Parachain upgrade + # if: success() || failure() + # working-directory: ${{ matrix.mainnet_branch }}/tests + # run: NOW=$(date +%s) && yarn testSequential --reporter mochawesome --reporter-options reportFilename=test-sequential-${NOW} + # env: + # RPC_URL: http://127.0.0.1:9933/ + + # - name: Upload Sequential Test Report Before Node upgrade + # uses: phoenix-actions/test-reporting@v8 + # id: test-sequential-report-before + # if: success() || failure() # run this step even if previous step failed + # with: + # name: Tests before node upgrade ${{ matrix.network }} # Name of the check run which will be created + # path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-sequential-*.json # Path to test results + # reporter: mochawesome-json + # fail-on-error: 'false' + + - name: Send SIGUSR1 to polkadot-launch process + if: success() || failure() + run: | + #Get PID of polkadot-launch + ContainerID=$(docker ps -aqf "name=node-parachain") + PID=$(docker exec node-parachain pidof 'polkadot-launch') + sleep 30s + echo -e "Show logs of node-parachain container.\n" + docker logs ${ContainerID} + echo -e "\n" + echo -e "Restart polkadot-launch process: $PID\n" + docker exec node-parachain kill -SIGUSR1 ${PID} + echo "SIGUSR1 sent to Polkadot-launch PID: $PID" + docker logs ${ContainerID} + + - name: Get chain logs in case of docker image crashed after Polkadot Launch restart + if: failure() # run this step only at failure + run: | + docker exec node-parachain cat /polkadot-launch/9944.log + docker exec node-parachain cat /polkadot-launch/9945.log + docker exec node-parachain cat /polkadot-launch/alice.log + docker exec node-parachain cat /polkadot-launch/eve.log + docker exec node-parachain cat /polkadot-launch/dave.log + docker exec node-parachain cat /polkadot-launch/charlie.log + + - name: Check if docker logs consist messages related to testing of Node Parachain Upgrade. + if: success() + run: | + counter=160 + function check_container_status { + docker inspect -f {{.State.Running}} node-parachain + } + function do_docker_logs { + docker logs --details node-parachain 2>&1 + } + function is_started { + if [ "$(check_container_status)" == "true" ]; then + echo "Container: node-parachain RUNNING"; + echo "Check Docker logs" + DOCKER_LOGS=$(do_docker_logs) + if [[ ${DOCKER_LOGS} = *"All parachain collators restarted with the new binaries."* ]];then + echo "🌗 All parachain collators restarted with the new binaries." + return 0 + else + echo "Message not found in logs output, repeating..." + return 1 + fi + else + echo "Container node-parachain NOT RUNNING" + echo "Halting all future checks" + exit 1 + fi + echo "something goes wrong" + exit 1 + } + while ! is_started; do + echo "Waiting for special message in log files " + sleep 30s + counter=$(( $counter - 1 )) + echo "Counter: $counter" + if [ "$counter" -gt "0" ]; then + continue + else + break + fi + done + echo "Halting script" + exit 0 + shell: bash + + ## TODO: Remove next two blocks before switch to Parrallel & Sequental tests. Uncoment commented blocks. + - name: Run tests after Node Parachain upgrade + working-directory: ${{ matrix.mainnet_branch }}/tests + run: | + yarn install + yarn add mochawesome + node scripts/readyness.js + echo "Ready to start tests" + yarn polkadot-types + NOW=$(date +%s) && yarn test --reporter mochawesome --reporter-options reportFilename=test-after-${NOW} + env: + RPC_URL: http://127.0.0.1:9933/ + + - name: Test Report After Node upgrade + uses: phoenix-actions/test-reporting@v8 + id: test-report-after + if: success() || failure() # run this step even if previous step failed + with: + name: Tests after node upgrade ${{ matrix.network }} # Name of the check run which will be created + path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-after-*.json # Path to test results + reporter: mochawesome-json + fail-on-error: 'false' + + # TODO uncomment thease steps after the merge + #- name: Run Parallel tests after Node Parachain upgrade + # working-directory: ${{ matrix.mainnet_branch }}/tests + # run: | + # yarn install + # yarn add mochawesome + # node scripts/readyness.js + # echo "Ready to start tests" + # yarn polkadot-types + # NOW=$(date +%s) && yarn testParallel --reporter mochawesome --reporter-options reportFilename=test-parallel-${NOW} + # env: + # RPC_URL: http://127.0.0.1:9933/ + + #- name: Test Report Parallel After Node upgrade + # uses: phoenix-actions/test-reporting@v8 + # id: test-report-parallel-after + # if: success() || failure() # run this step even if previous step failed + # with: + # name: Tests after node upgrade ${{ matrix.network }} # Name of the check run which will be created + # path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-parallel-*.json # Path to test results + # reporter: mochawesome-json + # fail-on-error: 'false' + + #- name: Run Sequential tests after Node Parachain upgrade + # if: success() || failure() + # working-directory: ${{ matrix.mainnet_branch }}/tests + # run: NOW=$(date +%s) && yarn testSequential --reporter mochawesome --reporter-options reportFilename=test-sequential-${NOW} + # env: + # RPC_URL: http://127.0.0.1:9933/ + + #- name: Upload Sequential Test Report After Node upgrade + # uses: phoenix-actions/test-reporting@v8 + # id: test-sequential-report-after + # if: success() || failure() # run this step even if previous step failed + # with: + # name: Tests before node upgrade ${{ matrix.network }} # Name of the check run which will be created + # path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-sequential-*.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.node.${{ matrix.network }}.yml" down --volumes + + - name: Remove builder cache + if: always() # run this step always + run: | + docker builder prune -f -a + docker system prune -f + docker image prune -f -a + + - name: Remove repo at the end + if: always() # run this step always + run: | + ls -ls ./ --- a/.github/workflows/node-only-update_v2.yml +++ /dev/null @@ -1,373 +0,0 @@ -# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2586837028/Nodes+only+update -# Node only update with restart polkadot-launch process. - -name: nodes-only update - -# Triger: only call from main workflow(re-usable workflows) -on: - workflow_call: - - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - - nodes-execution-matrix: - - name: execution matrix - - runs-on: self-hosted-ci - outputs: - matrix: ${{ steps.create_matrix.outputs.matrix }} - - steps: - - - name: Clean Workspace - uses: AutoModality/action-clean@v1.1.0 - - # 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: Read .env file - uses: xom9ikk/dotenv@v2 - - - name: Create Execution matrix - uses: CertainLach/create-matrix-action@v3 - id: create_matrix - with: - matrix: | - network {opal}, runtime {opal}, features {opal-runtime}, mainnet_branch {${{ env.OPAL_MAINNET_TAG }}} - network {quartz}, runtime {quartz}, features {quartz-runtime}, mainnet_branch {${{ env.QUARTZ_MAINNET_TAG }}} - network {unique}, runtime {unique}, features {unique-runtime}, mainnet_branch {${{ env.UNIQUE_MAINNET_TAG }}} - - - - nodes-only-update: - needs: nodes-execution-matrix - # The type of runner that the job will run on - runs-on: [self-hosted-ci,large] - - timeout-minutes: 2880 # 48 hours for execution jobs. - - name: ${{ matrix.network }} - - continue-on-error: true #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: ${{fromJson(needs.nodes-execution-matrix.outputs.matrix)}} - - steps: - - - name: Clean Workspace - uses: AutoModality/action-clean@v1.1.0 - - # 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: Read .env file - uses: xom9ikk/dotenv@v2 - - - name: Generate ENV related extend file for docker-compose - uses: cuchi/jinja2-action@v1.2.0 - with: - template: .docker/docker-compose.tmp-node.j2 - output_file: .docker/docker-compose.node.${{ 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=${{ matrix.mainnet_tag }} - MAINNET_BRANCH=${{ matrix.mainnet_branch }} - FEATURE=${{ matrix.features }} - RUNTIME=${{ matrix.runtime }} - BRANCH=${{ github.head_ref }} - - - name: Show build configuration - run: cat .docker/docker-compose.node.${{ matrix.network }}.yml - - - name: Generate launch-config-forkless-nodata.json - uses: cuchi/jinja2-action@v1.2.0 - with: - template: .docker/forkless-config/launch-config-forkless-nodata.j2 - output_file: .docker/launch-config-forkless-nodata.json - variables: | - FEATURE=${{ matrix.features }} - RUNTIME=${{ matrix.runtime }} - - - name: Show launch-config-forkless configuration - run: cat .docker/launch-config-forkless-nodata.json - - - uses: actions/setup-node@v3 - with: - node-version: 16 - - - name: Build the stack - run: docker-compose -f ".docker/docker-compose-forkless.yml" -f ".docker/docker-compose.node.${{ matrix.network }}.yml" up -d --build --remove-orphans --force-recreate --timeout 300 - - # 🚀 POLKADOT LAUNCH COMPLETE 🚀 - - name: Check if docker logs consist messages related to testing of Node Parachain Upgrade. - if: success() - run: | - counter=160 - function check_container_status { - docker inspect -f {{.State.Running}} node-parachain - } - function do_docker_logs { - docker logs --details node-parachain 2>&1 - } - function is_started { - if [ "$(check_container_status)" == "true" ]; then - echo "Container: node-parachain RUNNING"; - echo "Check Docker logs" - DOCKER_LOGS=$(do_docker_logs) - if [[ ${DOCKER_LOGS} = *"POLKADOT LAUNCH COMPLETE"* ]];then - echo "🚀 POLKADOT LAUNCH COMPLETE 🚀" - return 0 - else - echo "Message not found in logs output, repeating..." - return 1 - fi - else - echo "Container node-parachain NOT RUNNING" - echo "Halting all future checks" - exit 1 - fi - echo "something goes wrong" - exit 1 - } - while ! is_started; do - echo "Waiting for special message in log files " - sleep 30s - counter=$(( $counter - 1 )) - echo "Counter: $counter" - if [ "$counter" -gt "0" ]; then - continue - else - break - fi - done - echo "Halting script" - exit 0 - shell: bash - - - name: Checkout at '${{ matrix.mainnet_branch }}' branch - uses: actions/checkout@master - with: - ref: ${{ matrix.mainnet_branch }} #Checking out head commit - path: ${{ matrix.mainnet_branch }} - - - name: Run tests before Node Parachain upgrade - working-directory: ${{ matrix.mainnet_branch }}/tests - run: | - yarn install - yarn add mochawesome - node scripts/readyness.js - echo "Ready to start tests" - yarn polkadot-types - NOW=$(date +%s) && yarn test --reporter mochawesome --reporter-options reportFilename=test-before-${NOW} - env: - RPC_URL: http://127.0.0.1:9933/ - - - name: Upload Test Report Before Node upgrade - uses: phoenix-actions/test-reporting@v8 - id: test-report-before - if: success() || failure() # run this step even if previous step failed - with: - name: Tests before node upgrade ${{ matrix.network }} # Name of the check run which will be created - path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-before-*.json # Path to test results - reporter: mochawesome-json - fail-on-error: 'false' - - # TODO uncomment thease steps after the merge - #- name: Run Parallel tests before Node Parachain upgrade - # working-directory: ${{ matrix.mainnet_branch }}/tests - # run: | - # yarn install - # yarn add mochawesome - # echo "Ready to start tests" - # yarn polkadot-types - # NOW=$(date +%s) && yarn testParallel --reporter mochawesome --reporter-options reportFilename=test-parallel-${NOW} - # env: - # RPC_URL: http://127.0.0.1:9933/ - - #- name: Upload Parallel Test Report Before Node upgrade - # uses: phoenix-actions/test-reporting@v8 - # id: test-parallel-report-before - # if: success() || failure() # run this step even if previous step failed - # with: - # name: Tests before node upgrade ${{ matrix.network }} # Name of the check run which will be created - # path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-parallel-*.json # Path to test results - # reporter: mochawesome-json - # fail-on-error: 'false' - - # - name: Run Sequential tests before Node Parachain upgrade - # if: success() || failure() - # working-directory: ${{ matrix.mainnet_branch }}/tests - # run: NOW=$(date +%s) && yarn testSequential --reporter mochawesome --reporter-options reportFilename=test-sequential-${NOW} - # env: - # RPC_URL: http://127.0.0.1:9933/ - - # - name: Upload Sequential Test Report Before Node upgrade - # uses: phoenix-actions/test-reporting@v8 - # id: test-sequential-report-before - # if: success() || failure() # run this step even if previous step failed - # with: - # name: Tests before node upgrade ${{ matrix.network }} # Name of the check run which will be created - # path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-sequential-*.json # Path to test results - # reporter: mochawesome-json - # fail-on-error: 'false' - - - name: Send SIGUSR1 to polkadot-launch process - if: success() || failure() - run: | - #Get PID of polkadot-launch - ContainerID=$(docker ps -aqf "name=node-parachain") - PID=$(docker exec node-parachain pidof 'polkadot-launch') - sleep 30s - echo -e "Show logs of node-parachain container.\n" - docker logs ${ContainerID} - echo -e "\n" - echo -e "Restart polkadot-launch process: $PID\n" - docker exec node-parachain kill -SIGUSR1 ${PID} - echo "SIGUSR1 sent to Polkadot-launch PID: $PID" - docker logs ${ContainerID} - - - name: Get chain logs in case of docker image crashed after Polkadot Launch restart - if: failure() # run this step only at failure - run: | - docker exec node-parachain cat /polkadot-launch/9944.log - docker exec node-parachain cat /polkadot-launch/9945.log - docker exec node-parachain cat /polkadot-launch/alice.log - docker exec node-parachain cat /polkadot-launch/eve.log - docker exec node-parachain cat /polkadot-launch/dave.log - docker exec node-parachain cat /polkadot-launch/charlie.log - - - name: Check if docker logs consist messages related to testing of Node Parachain Upgrade. - if: success() - run: | - counter=160 - function check_container_status { - docker inspect -f {{.State.Running}} node-parachain - } - function do_docker_logs { - docker logs --details node-parachain 2>&1 - } - function is_started { - if [ "$(check_container_status)" == "true" ]; then - echo "Container: node-parachain RUNNING"; - echo "Check Docker logs" - DOCKER_LOGS=$(do_docker_logs) - if [[ ${DOCKER_LOGS} = *"All parachain collators restarted with the new binaries."* ]];then - echo "🌗 All parachain collators restarted with the new binaries." - return 0 - else - echo "Message not found in logs output, repeating..." - return 1 - fi - else - echo "Container node-parachain NOT RUNNING" - echo "Halting all future checks" - exit 1 - fi - echo "something goes wrong" - exit 1 - } - while ! is_started; do - echo "Waiting for special message in log files " - sleep 30s - counter=$(( $counter - 1 )) - echo "Counter: $counter" - if [ "$counter" -gt "0" ]; then - continue - else - break - fi - done - echo "Halting script" - exit 0 - shell: bash - - ## TODO: Remove next two blocks before switch to Parrallel & Sequental tests. Uncoment commented blocks. - - name: Run tests after Node Parachain upgrade - working-directory: ${{ matrix.mainnet_branch }}/tests - run: | - yarn install - yarn add mochawesome - node scripts/readyness.js - echo "Ready to start tests" - yarn polkadot-types - NOW=$(date +%s) && yarn test --reporter mochawesome --reporter-options reportFilename=test-after-${NOW} - env: - RPC_URL: http://127.0.0.1:9933/ - - - name: Test Report After Node upgrade - uses: phoenix-actions/test-reporting@v8 - id: test-report-after - if: success() || failure() # run this step even if previous step failed - with: - name: Tests after node upgrade ${{ matrix.network }} # Name of the check run which will be created - path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-after-*.json # Path to test results - reporter: mochawesome-json - fail-on-error: 'false' - - # TODO uncomment thease steps after the merge - #- name: Run Parallel tests after Node Parachain upgrade - # working-directory: ${{ matrix.mainnet_branch }}/tests - # run: | - # yarn install - # yarn add mochawesome - # node scripts/readyness.js - # echo "Ready to start tests" - # yarn polkadot-types - # NOW=$(date +%s) && yarn testParallel --reporter mochawesome --reporter-options reportFilename=test-parallel-${NOW} - # env: - # RPC_URL: http://127.0.0.1:9933/ - - #- name: Test Report Parallel After Node upgrade - # uses: phoenix-actions/test-reporting@v8 - # id: test-report-parallel-after - # if: success() || failure() # run this step even if previous step failed - # with: - # name: Tests after node upgrade ${{ matrix.network }} # Name of the check run which will be created - # path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-parallel-*.json # Path to test results - # reporter: mochawesome-json - # fail-on-error: 'false' - - #- name: Run Sequential tests after Node Parachain upgrade - # if: success() || failure() - # working-directory: ${{ matrix.mainnet_branch }}/tests - # run: NOW=$(date +%s) && yarn testSequential --reporter mochawesome --reporter-options reportFilename=test-sequential-${NOW} - # env: - # RPC_URL: http://127.0.0.1:9933/ - - #- name: Upload Sequential Test Report After Node upgrade - # uses: phoenix-actions/test-reporting@v8 - # id: test-sequential-report-after - # if: success() || failure() # run this step even if previous step failed - # with: - # name: Tests before node upgrade ${{ matrix.network }} # Name of the check run which will be created - # path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-sequential-*.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-forkless.yml" -f ".docker/docker-compose.node.${{ matrix.network }}.yml" down --volumes - - - name: Remove builder cache - if: always() # run this step always - run: | - docker builder prune -f -a - docker system prune -f - docker image prune -f -a - - - name: Remove repo at the end - if: always() # run this step always - run: | - ls -ls ./ --- a/.github/workflows/test_codestyle_v2.yml +++ /dev/null @@ -1,24 +0,0 @@ -# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2586804253/Yarn+eslint -# Yarn Eslint over tests -# -name: yarn eslint - -# Triger: only call from main workflow(re-usable workflows) -on: - workflow_call: - -jobs: - code_style: - runs-on: [ self-hosted-ci ] - - steps: - - uses: actions/checkout@v3 - - - uses: actions/setup-node@v3 - with: - node-version: 16 - - - name: Install modules - run: cd tests && yarn - - name: Run ESLint - run: cd tests && yarn eslint --ext .ts,.js src/ --- a/.github/workflows/testnet-build.yml +++ b/.github/workflows/testnet-build.yml @@ -1,17 +1,9 @@ -name: testnet-build +name: testnet-image-build # 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: - - master - types: - - opened - - reopened - - synchronize #commit(s) pushed to the pull request - - ready_for_review - + workflow_call: + # Allows you to run this workflow manually from the Actions tab workflow_dispatch: @@ -19,10 +11,6 @@ env: REPO_URL: ${{ github.server_url }}/${{ github.repository }} -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: @@ -52,9 +40,9 @@ id: create_matrix with: matrix: | - network {opal}, runtime {opal}, features {opal-runtime} - network {quartz}, runtime {quartz}, features {quartz-runtime} - network {unique}, runtime {unique}, features {unique-runtime} + network {opal} + network {quartz} + network {unique} testnet-build: needs: prepare-execution-marix @@ -97,8 +85,7 @@ NETWORK=${{ matrix.network }} POLKADOT_BUILD_BRANCH=${{ env.POLKADOT_BUILD_BRANCH }} POLKADOT_LAUNCH_BRANCH=${{ env.POLKADOT_LAUNCH_BRANCH }} - FEATURE=${{ matrix.features }} - RUNTIME=${{ matrix.runtime }} + NETWORK=${{ matrix.network }} BRANCH=${{ github.head_ref }} - name: Show build configuration --- /dev/null +++ b/.github/workflows/try-runtime.yml @@ -0,0 +1,100 @@ +# Try-runtime checks +# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2587656213/Try+runtime + +# Triger: only call from main workflow(re-usable workflows) +on: + workflow_call: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + prepare-execution-marix: + + name: Prepare execution matrix + + runs-on: self-hosted-ci + outputs: + matrix: ${{ steps.create_matrix.outputs.matrix }} + + steps: + + - name: Clean Workspace + uses: AutoModality/action-clean@v1.1.0 + + # 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: Read .env file + uses: xom9ikk/dotenv@v2 + + - name: Create Execution matrix + uses: CertainLach/create-matrix-action@v3 + id: create_matrix + with: + matrix: | + network {opal}, replica_from_address {${{ env.OPAL_REPLICA_FROM }}} + network {quartz}, replica_from_address {${{ env.QUARTZ_REPLICA_FROM }}} + network {unique}, replica_from_address {${{ env.UNIQUE_REPLICA_FROM }}} + + try-runtime: + needs: prepare-execution-marix + + # The type of runner that the job will run on + runs-on: [self-hosted-ci] + continue-on-error: true #Do not stop testing of matrix runs failed. As it decided during PR review - it required 50/50& Let's check it with false. + + name: ${{ matrix.network }}-try-runtime + strategy: + matrix: + include: ${{fromJson(needs.prepare-execution-marix.outputs.matrix)}} + + steps: + + - name: Clean Workspace + uses: AutoModality/action-clean@v1.1.0 + + # 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: Read .env file + uses: xom9ikk/dotenv@v2 + + - name: Generate ENV related extend file for docker-compose + uses: cuchi/jinja2-action@v1.2.0 + with: + template: .docker/docker-compose.tmp-try-runtime.j2 + output_file: .docker/docker-compose.try-runtime.${{ matrix.network }}.yml + variables: | + RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} + NETWORK=${{ matrix.network }} + REPLICA_FROM=${{ matrix.replica_from_address }} + + - name: Show build configuration + run: cat .docker/docker-compose.try-runtime.${{ matrix.network }}.yml + + - name: Build the stack + run: docker-compose -f ".docker/docker-compose.try-runtime.${{ matrix.network }}.yml" up --build --force-recreate --timeout 300 --remove-orphans --exit-code-from try-runtime + + - name: Collect Docker Logs + if: success() || failure() + uses: jwalton/gh-docker-logs@v2.2.0 + with: + dest: './try-runtime-logs.${{ matrix.network }}' + images: 'try-runtime' + + - name: Show docker logs + run: cat './try-runtime-logs.${{ matrix.network }}/try-runtime.log' + + - name: Stop running containers + if: always() # run this step always + run: docker-compose -f ".docker/docker-compose.try-runtime.${{ matrix.network }}.yml" down + + - name: Remove builder cache + if: always() # run this step always + run: | + docker builder prune -f -a + docker system prune -f + docker image prune -f -a --- a/.github/workflows/try-runtime_v2.yml +++ /dev/null @@ -1,79 +0,0 @@ -# Try-runtime checks -# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2587656213/Try+runtime - -# Triger: only call from main workflow(re-usable workflows) -on: - workflow_call: - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - try-runtime: - # The type of runner that the job will run on - runs-on: self-hosted-ci - - name: ${{ matrix.network }}-try-runtime - - continue-on-error: true #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: opal-runtime - replica_from_address: wss://eu-ws-opal.unique.network:443 - - network: quartz - features: quartz-runtime - replica_from_address: wss://eu-ws-quartz.unique.network:443 - - network: unique - features: unique-runtime - replica_from_address: wss://eu-ws.unique.network:443 - - steps: - - - name: Clean Workspace - uses: AutoModality/action-clean@v1.1.0 - - # 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: Read .env file - uses: xom9ikk/dotenv@v2 - - - name: Generate ENV related extend file for docker-compose - uses: cuchi/jinja2-action@v1.2.0 - with: - template: .docker/docker-compose.try-runtime.j2 - output_file: .docker/docker-compose.try-runtime.${{ matrix.network }}.yml - variables: | - RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} - FEATURE=${{ matrix.features }} - REPLICA_FROM=${{ matrix.replica_from_address }} - - - name: Show build configuration - run: cat .docker/docker-compose.try-runtime.${{ matrix.network }}.yml - - - name: Build the stack - run: docker-compose -f ".docker/docker-compose-try-runtime.yml" -f ".docker/docker-compose.try-runtime.${{ matrix.network }}.yml" up --build --force-recreate --timeout 300 --remove-orphans --exit-code-from try-runtime - - - name: Collect Docker Logs - if: success() || failure() - uses: jwalton/gh-docker-logs@v2.2.0 - with: - dest: './try-runtime-logs.${{ matrix.network }}' - images: 'try-runtime' - - - name: Show docker logs - run: cat './try-runtime-logs.${{ matrix.network }}/try-runtime.log' - - - name: Stop running containers - if: always() # run this step always - run: docker-compose -f ".docker/docker-compose-try-runtime.yml" -f ".docker/docker-compose.try-runtime.${{ matrix.network }}.yml" down - - - name: Remove builder cache - if: always() # run this step always - run: | - docker builder prune -f -a - docker system prune -f - docker image prune -f -a --- /dev/null +++ b/.github/workflows/unit-test.yml @@ -0,0 +1,60 @@ +# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2586738699/Unit+Tests +# Re-Usable Workflow for lanching Unit tests +name: unit tests + +# Controls when the action will run. +# Triger: only call from main workflow(re-usable workflows) +on: + workflow_call: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + + unit_tests: + # The type of runner that the job will run on + runs-on: [self-hosted-ci,medium] + timeout-minutes: 1380 + + name: ${{ github.base_ref }} + + continue-on-error: true #Do not stop testing of matrix runs failed. As it decided during PR review - it required 50/50& Let's check it with false. + + + steps: + + - name: Clean Workspace + uses: AutoModality/action-clean@v1.1.0 + + # 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: Read .env file + uses: xom9ikk/dotenv@v2 + + - name: Generate ENV related extend file for docker-compose + uses: cuchi/jinja2-action@v1.2.0 + with: + template: .docker/docker-compose.tmp-unit.j2 + output_file: .docker/docker-compose.unit.yml + variables: | + RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} + + + - name: Show build configuration + run: cat .docker/docker-compose.unit.yml + + - name: Build the stack + run: docker-compose -f ".docker/docker-compose.unit.yml" up --build --force-recreate --timeout 300 --remove-orphans --exit-code-from node-dev + + - name: Stop running containers + if: always() # run this step always + run: docker-compose -f ".docker/docker-compose.unit.yml" down + + - name: Remove builder cache + if: always() # run this step always + run: | + docker builder prune -f -a + docker system prune -f + docker image prune -f -a --- a/.github/workflows/unit-test_v2.yml +++ /dev/null @@ -1,60 +0,0 @@ -# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2586738699/Unit+Tests -# Re-Usable Workflow for lanching Unit tests -name: unit tests - -# Controls when the action will run. -# Triger: only call from main workflow(re-usable workflows) -on: - workflow_call: - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - - unit_tests: - # The type of runner that the job will run on - runs-on: [self-hosted-ci,medium] - timeout-minutes: 1380 - - name: ${{ github.base_ref }} - - continue-on-error: true #Do not stop testing of matrix runs failed. As it decided during PR review - it required 50/50& Let's check it with false. - - - steps: - - - name: Clean Workspace - uses: AutoModality/action-clean@v1.1.0 - - # 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: Read .env file - uses: xom9ikk/dotenv@v2 - - - name: Generate ENV related extend file for docker-compose - uses: cuchi/jinja2-action@v1.2.0 - with: - template: .docker/docker-compose.tmp-unit.j2 - output_file: .docker/docker-compose.unit.yml - variables: | - RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} - - - - name: Show build configuration - run: cat .docker/docker-compose.unit.yml - - - name: Build the stack - run: docker-compose -f ".docker/docker-compose-dev.yaml" -f ".docker/docker-compose.unit.yml" up --build --force-recreate --timeout 300 --remove-orphans --exit-code-from node-dev - - - name: Stop running containers - if: always() # run this step always - run: docker-compose -f ".docker/docker-compose-dev.yaml" -f ".docker/docker-compose.unit.yml" down - - - name: Remove builder cache - if: always() # run this step always - run: | - docker builder prune -f -a - docker system prune -f - docker image prune -f -a --- a/.github/workflows/xcm.yml +++ b/.github/workflows/xcm.yml @@ -40,9 +40,9 @@ id: create_matrix with: matrix: | - network {opal}, runtime {opal}, features {opal-runtime}, acala_version {${{ env.ACALA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONBEAM_BUILD_BRANCH }}}, cumulus_version {${{ env.WESTMINT_BUILD_BRANCH }}}, runtest {testXcmOpal} - network {quartz}, runtime {quartz}, features {quartz-runtime}, acala_version {${{ env.KARURA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONRIVER_BUILD_BRANCH }}}, cumulus_version {${{ env.STATEMINE_BUILD_BRANCH }}}, runtest {testXcmQuartz} - network {unique}, runtime {unique}, features {unique-runtime}, acala_version {${{ env.ACALA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONBEAM_BUILD_BRANCH }}}, cumulus_version {${{ env.STATEMINT_BUILD_BRANCH }}}, runtest {testXcmUnique} + network {opal}, acala_version {${{ env.ACALA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONBEAM_BUILD_BRANCH }}}, cumulus_version {${{ env.WESTMINT_BUILD_BRANCH }}}, runtest {testXcmOpal} + network {quartz}, acala_version {${{ env.KARURA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONRIVER_BUILD_BRANCH }}}, cumulus_version {${{ env.STATEMINE_BUILD_BRANCH }}}, runtest {testXcmQuartz} + network {unique}, acala_version {${{ env.ACALA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONBEAM_BUILD_BRANCH }}}, cumulus_version {${{ env.STATEMINT_BUILD_BRANCH }}}, runtest {testXcmUnique} xcm-build: @@ -229,9 +229,7 @@ RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} NETWORK=${{ matrix.network }} POLKADOT_BUILD_BRANCH=${{ env.POLKADOT_BUILD_BRANCH }} - POLKADOT_LAUNCH_BRANCH=${{ env.POLKADOT_LAUNCH_BRANCH }} - FEATURE=${{ matrix.features }} - RUNTIME=${{ matrix.runtime }} + POLKADOT_LAUNCH_BRANCH=${{ env.POLKADOT_LAUNCH_BRANCH }} BRANCH=${{ github.head_ref }} ACALA_BUILD_BRANCH=${{ matrix.acala_version }} MOONBEAM_BUILD_BRANCH=${{ matrix.moonbeam_version }} --- /dev/null +++ b/.github/workflows/yarn-dev.yml @@ -0,0 +1,98 @@ +# Integration test in --dev mode +# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2586411104/Integration+tests +name: yarn dev + +# Triger: only call from main workflow(re-usable workflows) +on: + workflow_call: + + + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + + dev_build_int_tests: + # The type of runner that the job will run on + runs-on: [self-hosted-ci,medium] + timeout-minutes: 1380 + + name: ${{ matrix.network }} + + continue-on-error: true #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" + - network: "quartz" + - network: "unique" + + steps: + + - name: Clean Workspace + uses: AutoModality/action-clean@v1.1.0 + + # 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: Read .env file + uses: xom9ikk/dotenv@v2 + + - name: Generate ENV related extend file for docker-compose + uses: cuchi/jinja2-action@v1.2.0 + with: + template: .docker/docker-compose.tmp-dev.j2 + output_file: .docker/docker-compose.${{ matrix.network }}.yml + variables: | + RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} + NETWORK=${{ matrix.network }} + + + - name: Show build configuration + run: cat .docker/docker-compose.${{ matrix.network }}.yml + + - name: Build the stack + run: docker-compose -f ".docker/docker-compose.${{ matrix.network }}.yml" up -d --build --remove-orphans + + - uses: actions/setup-node@v3 + with: + node-version: 16 + + - name: Run tests + working-directory: tests + run: | + yarn install + yarn add mochawesome + node scripts/readyness.js + echo "Ready to start tests" + yarn polkadot-types + 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 + if: success() || failure() # run this step even if previous step failed + with: + name: int test results - ${{ 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.${{ matrix.network }}.yml" down + + - name: Remove builder cache + if: always() # run this step always + run: | + docker builder prune -f -a + docker system prune -f + docker image prune -f -a --- /dev/null +++ b/tests/src/block-production.seqtest.ts @@ -0,0 +1,43 @@ +// Copyright 2019-2022 Unique Network (Gibraltar) Ltd. +// This file is part of Unique Network. + +// Unique Network is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Unique Network is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Unique Network. If not, see . + +import {ApiPromise} from '@polkadot/api'; +import {expect, itSub} from './util'; + +const BLOCK_TIME_MS = 12000; +const TOLERANCE_MS = 3000; + +/* eslint no-async-promise-executor: "off" */ +function getBlocks(api: ApiPromise): Promise { + return new Promise(async (resolve, reject) => { + const blockNumbers: number[] = []; + setTimeout(() => reject('Block production test failed due to timeout.'), BLOCK_TIME_MS + TOLERANCE_MS); + const unsubscribe = await api.rpc.chain.subscribeNewHeads((head: any) => { + blockNumbers.push(head.number.toNumber()); + if(blockNumbers.length >= 2) { + unsubscribe(); + resolve(blockNumbers); + } + }); + }); +} + +describe('Block Production smoke test', () => { + itSub('Node produces new blocks', async ({helper}) => { + const blocks: number[] | undefined = await getBlocks(helper.getApi()); + expect(blocks[0]).to.be.lessThan(blocks[1]); + }); +}); --- a/tests/src/block-production.test.ts +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2019-2022 Unique Network (Gibraltar) Ltd. -// This file is part of Unique Network. - -// Unique Network is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Unique Network is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Unique Network. If not, see . - -import {ApiPromise} from '@polkadot/api'; -import {expect, itSub} from './util'; - -const BLOCK_TIME_MS = 12000; -const TOLERANCE_MS = 3000; - -/* eslint no-async-promise-executor: "off" */ -function getBlocks(api: ApiPromise): Promise { - return new Promise(async (resolve, reject) => { - const blockNumbers: number[] = []; - setTimeout(() => reject('Block production test failed due to timeout.'), BLOCK_TIME_MS + TOLERANCE_MS); - const unsubscribe = await api.rpc.chain.subscribeNewHeads((head: any) => { - blockNumbers.push(head.number.toNumber()); - if(blockNumbers.length >= 2) { - unsubscribe(); - resolve(blockNumbers); - } - }); - }); -} - -describe('Block Production smoke test', () => { - itSub('Node produces new blocks', async ({helper}) => { - const blocks: number[] | undefined = await getBlocks(helper.getApi()); - expect(blocks[0]).to.be.lessThan(blocks[1]); - }); -}); -- gitstuff