--- /dev/null +++ b/.docker/Dockerfile-testnet.j2 @@ -0,0 +1,96 @@ +# ===== Rust builder ===== +FROM ubuntu:20.04 as rust-builder +LABEL maintainer="Unique.Network" + +#ARG RUST_TOOLCHAIN= + +#ENV RUST_TOOLCHAIN $RUST_TOOLCHAIN +ENV CARGO_HOME="/cargo-home" +ENV PATH="/cargo-home/bin:$PATH" +ENV TZ=UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt-get update && \ + apt-get install -y curl cmake pkg-config libssl-dev git clang llvm libudev-dev && \ + apt-get clean && \ + rm -r /var/lib/apt/lists/* + +RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain none + +RUN rustup toolchain uninstall $(rustup toolchain list) && \ + rustup toolchain install {{ RUST_TOOLCHAIN }} && \ + rustup default {{ RUST_TOOLCHAIN }} && \ + rustup target list --installed && \ + rustup show +RUN rustup target add wasm32-unknown-unknown --toolchain {{ RUST_TOOLCHAIN }} + +RUN mkdir /unique_parachain +WORKDIR /unique_parachain + + +# ===== BUILD ====== +FROM rust-builder as builder-unique + +ARG PROFILE=release +#ARG FEATURE= +#ARG BRANCH= + + +WORKDIR /unique_parachain + +RUN git clone -b {{ BRANCH }} https://github.com/UniqueNetwork/unique-chain.git && \ + cd unique-chain && \ + cargo build --features={{ FEATURE }} --$PROFILE + +# ===== BUILD POLKADOT ===== +FROM rust-builder as builder-polkadot + +#ARG POLKADOT_BUILD_BRANCH= +#ENV POLKADOT_BUILD_BRANCH $POLKADOT_BUILD_BRANCH + + +WORKDIR /unique_parachain + +RUN git clone -b {{ POLKADOT_BUILD_BRANCH }} --depth 1 https://github.com/paritytech/polkadot.git && \ + cd polkadot && \ + cargo build --release + +# ===== RUN ====== + +FROM ubuntu:20.04 + +#ARG POLKADOT_LAUNCH_BRANCH= +#ENV POLKADOT_LAUNCH_BRANCH $POLKADOT_LAUNCH_BRANCH + +RUN apt-get -y update && \ + apt-get -y install curl git && \ + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash && \ + export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + nvm install v16.16.0 && \ + nvm use v16.16.0 + +RUN git clone https://github.com/uniquenetwork/polkadot-launch -b {{ POLKADOT_LAUNCH_BRANCH }} + +RUN export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + cd /polkadot-launch && \ + npm install --global yarn && \ + yarn install + +COPY --from=builder-unique /unique_parachain/unique-chain/target/release/unique-collator /unique-chain/target/release/ +COPY --from=builder-polkadot /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/ + +EXPOSE 9844 +EXPOSE 9944 +EXPOSE 9933 +EXPOSE 9833 +EXPOSE 40333 +EXPOSE 30333 + +CMD export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + cd /polkadot-launch && \ + yarn start launch-config.json + + --- a/.docker/Dockerfile-xcm-2 +++ /dev/null @@ -1,150 +0,0 @@ -# ===== Rust builder ===== -FROM ubuntu:20.04 as rust-builder -LABEL maintainer="Unique.Network" - -#ARG RUST_TOOLCHAIN= - -#ENV RUST_TOOLCHAIN $RUST_TOOLCHAIN -ENV CARGO_HOME="/cargo-home" -ENV PATH="/cargo-home/bin:$PATH" -ENV TZ=UTC -RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone - -RUN apt-get update && \ - apt-get install -y curl cmake pkg-config libssl-dev git clang llvm libudev-dev && \ - apt-get clean && \ - rm -r /var/lib/apt/lists/* - -RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain none - -RUN rustup toolchain uninstall $(rustup toolchain list) && \ - rustup toolchain install {{ RUST_TOOLCHAIN }} && \ - rustup default {{ RUST_TOOLCHAIN }} && \ - rustup target list --installed && \ - rustup show -RUN rustup target add wasm32-unknown-unknown --toolchain {{ RUST_TOOLCHAIN }} - -RUN mkdir /unique_parachain -WORKDIR /unique_parachain - - -# ===== BUILD ====== -FROM rust-builder as builder-unique - -ARG PROFILE=release -#ARG FEATURE= -#ARG BRANCH= - -WORKDIR /unique_parachain - -COPY ./xcm-config/launch-config-xcm-{{ NETWORK }}.json ./launch-config-xcm-{{ NETWORK }}.json -COPY ./xcm-config/5validators.jsonnet ./5validators.jsonnet - -RUN git clone -b {{ BRANCH }} https://github.com/UniqueNetwork/unique-chain.git && \ - cd unique-chain && \ - cargo build --features={{ FEATURE }} --$PROFILE - -# ===== BUILD POLKADOT ===== -FROM rust-builder as builder-polkadot - -#ARG POLKADOT_BUILD_BRANCH= -#ENV POLKADOT_BUILD_BRANCH $POLKADOT_BUILD_BRANCH - - -WORKDIR /unique_parachain - -RUN git clone -b {{ POLKADOT_BUILD_BRANCH }} --depth 1 https://github.com/paritytech/polkadot.git && \ - cd polkadot && \ - cargo build --release - -# ===== BUILD ACALA ===== -FROM rust-builder as builder-acala - -#ARG ACALA_BUILD_BRANCH= -#ENV ACALA_BUILD_BRANCH $ACALA_BUILD_BRANCH - - -WORKDIR /unique_parachain - -RUN git clone -b {{ ACALA_BUILD_BRANCH }} --depth 1 https://github.com/AcalaNetwork/Acala.git && \ - cd Acala && \ - make init && \ - make build-release - -# ===== BUILD MOONBEAM ===== -FROM rust-builder as builder-moonbeam - -#ARG MOONBEAM_BUILD_BRANCH= -#ENV MOONBEAM_BUILD_BRANCH $MOONBEAM_BUILD_BRANCH - - -WORKDIR /unique_parachain - -RUN git clone -b {{ MOONBEAM_BUILD_BRANCH }} --depth 1 https://github.com/PureStake/moonbeam.git && \ - cd moonbeam && \ - cargo build --release - -# ===== BUILD CUMULUS ===== -FROM rust-builder as builder-cumulus - -#ARG CUMULUS_BUILD_BRANCH= -#ENV CUMULUS_BUILD_BRANCH $CUMULUS_BUILD_BRANCH - - -WORKDIR /unique_parachain - -RUN git clone -b {{ CUMULUS_BUILD_BRANCH }} --depth 1 https://github.com/paritytech/cumulus.git && \ - cd cumulus && \ - cargo build --release - -# ===== BUILD CHAINQL ===== -FROM rust-builder as builder-chainql - -RUN mkdir chainql -WORKDIR /chainql - -RUN git clone -b v0.1.0 --depth 1 https://github.com/CertainLach/chainql.git . && \ - cargo build --release - -# ===== RUN ====== - -FROM ubuntu:20.04 - -#ARG POLKADOT_LAUNCH_BRANCH= -#ENV POLKADOT_LAUNCH_BRANCH $POLKADOT_LAUNCH_BRANCH - -RUN apt-get -y update && \ - apt-get -y install curl git && \ - curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash && \ - export NVM_DIR="$HOME/.nvm" && \ - [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ - nvm install v16.16.0 && \ - nvm use v16.16.0 - -RUN git clone https://github.com/uniquenetwork/polkadot-launch -b {{ POLKADOT_LAUNCH_BRANCH }} - -RUN export NVM_DIR="$HOME/.nvm" && \ - [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ - cd /polkadot-launch && \ - npm install --global yarn && \ - yarn install - -COPY --from=builder-unique /unique_parachain/unique-chain/target/release/unique-collator /unique-chain/target/release/ -COPY --from=builder-unique /unique_parachain/launch-config-xcm-{{ NETWORK }}.json /polkadot-launch/ -COPY --from=builder-unique /unique_parachain/5validators.jsonnet /polkadot-launch/5validators.jsonnet -COPY --from=builder-polkadot /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/ -COPY --from=builder-moonbeam /unique_parachain/moonbeam/target/release/moonbeam /moonbeam/target/release/ -COPY --from=builder-cumulus /unique_parachain/cumulus/target/release/polkadot-parachain /cumulus/target/release/cumulus -COPY --from=builder-acala /unique_parachain/Acala/target/production/acala /acala/target/release/ -COPY --from=builder-chainql /chainql/target/release/chainql /chainql/target/release/ - -EXPOSE 9844 -EXPOSE 9944 -EXPOSE 9946 -EXPOSE 9947 -EXPOSE 9948 - -CMD export NVM_DIR="$HOME/.nvm" PATH="$PATH:/chainql/target/release" && \ - [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ - cd /polkadot-launch && \ - yarn start launch-config-xcm-{{ NETWORK }}.json --- /dev/null +++ b/.docker/Dockerfile-xcm.j2 @@ -0,0 +1,150 @@ +# ===== Rust builder ===== +FROM ubuntu:20.04 as rust-builder +LABEL maintainer="Unique.Network" + +#ARG RUST_TOOLCHAIN= + +#ENV RUST_TOOLCHAIN $RUST_TOOLCHAIN +ENV CARGO_HOME="/cargo-home" +ENV PATH="/cargo-home/bin:$PATH" +ENV TZ=UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt-get update && \ + apt-get install -y curl cmake pkg-config libssl-dev git clang llvm libudev-dev && \ + apt-get clean && \ + rm -r /var/lib/apt/lists/* + +RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain none + +RUN rustup toolchain uninstall $(rustup toolchain list) && \ + rustup toolchain install {{ RUST_TOOLCHAIN }} && \ + rustup default {{ RUST_TOOLCHAIN }} && \ + rustup target list --installed && \ + rustup show +RUN rustup target add wasm32-unknown-unknown --toolchain {{ RUST_TOOLCHAIN }} + +RUN mkdir /unique_parachain +WORKDIR /unique_parachain + + +# ===== BUILD ====== +FROM rust-builder as builder-unique + +ARG PROFILE=release +#ARG FEATURE= +#ARG BRANCH= + +WORKDIR /unique_parachain + +COPY ./xcm-config/launch-config-xcm-{{ NETWORK }}.json ./launch-config-xcm-{{ NETWORK }}.json +COPY ./xcm-config/5validators.jsonnet ./5validators.jsonnet + +RUN git clone -b {{ BRANCH }} https://github.com/UniqueNetwork/unique-chain.git && \ + cd unique-chain && \ + cargo build --features={{ FEATURE }} --$PROFILE + +# ===== BUILD POLKADOT ===== +FROM rust-builder as builder-polkadot + +#ARG POLKADOT_BUILD_BRANCH= +#ENV POLKADOT_BUILD_BRANCH $POLKADOT_BUILD_BRANCH + + +WORKDIR /unique_parachain + +RUN git clone -b {{ POLKADOT_BUILD_BRANCH }} --depth 1 https://github.com/paritytech/polkadot.git && \ + cd polkadot && \ + cargo build --release + +# ===== BUILD ACALA ===== +FROM rust-builder as builder-acala + +#ARG ACALA_BUILD_BRANCH= +#ENV ACALA_BUILD_BRANCH $ACALA_BUILD_BRANCH + + +WORKDIR /unique_parachain + +RUN git clone -b {{ ACALA_BUILD_BRANCH }} --depth 1 https://github.com/AcalaNetwork/Acala.git && \ + cd Acala && \ + make init && \ + make build-release + +# ===== BUILD MOONBEAM ===== +FROM rust-builder as builder-moonbeam + +#ARG MOONBEAM_BUILD_BRANCH= +#ENV MOONBEAM_BUILD_BRANCH $MOONBEAM_BUILD_BRANCH + + +WORKDIR /unique_parachain + +RUN git clone -b {{ MOONBEAM_BUILD_BRANCH }} --depth 1 https://github.com/PureStake/moonbeam.git && \ + cd moonbeam && \ + cargo build --release + +# ===== BUILD CUMULUS ===== +FROM rust-builder as builder-cumulus + +#ARG CUMULUS_BUILD_BRANCH= +#ENV CUMULUS_BUILD_BRANCH $CUMULUS_BUILD_BRANCH + + +WORKDIR /unique_parachain + +RUN git clone -b {{ CUMULUS_BUILD_BRANCH }} --depth 1 https://github.com/paritytech/cumulus.git && \ + cd cumulus && \ + cargo build --release + +# ===== BUILD CHAINQL ===== +FROM rust-builder as builder-chainql + +RUN mkdir chainql +WORKDIR /chainql + +RUN git clone -b v0.1.0 --depth 1 https://github.com/CertainLach/chainql.git . && \ + cargo build --release + +# ===== RUN ====== + +FROM ubuntu:20.04 + +#ARG POLKADOT_LAUNCH_BRANCH= +#ENV POLKADOT_LAUNCH_BRANCH $POLKADOT_LAUNCH_BRANCH + +RUN apt-get -y update && \ + apt-get -y install curl git && \ + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash && \ + export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + nvm install v16.16.0 && \ + nvm use v16.16.0 + +RUN git clone https://github.com/uniquenetwork/polkadot-launch -b {{ POLKADOT_LAUNCH_BRANCH }} + +RUN export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + cd /polkadot-launch && \ + npm install --global yarn && \ + yarn install + +COPY --from=builder-unique /unique_parachain/unique-chain/target/release/unique-collator /unique-chain/target/release/ +COPY --from=builder-unique /unique_parachain/launch-config-xcm-{{ NETWORK }}.json /polkadot-launch/ +COPY --from=builder-unique /unique_parachain/5validators.jsonnet /polkadot-launch/5validators.jsonnet +COPY --from=builder-polkadot /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/ +COPY --from=builder-moonbeam /unique_parachain/moonbeam/target/release/moonbeam /moonbeam/target/release/ +COPY --from=builder-cumulus /unique_parachain/cumulus/target/release/polkadot-parachain /cumulus/target/release/cumulus +COPY --from=builder-acala /unique_parachain/Acala/target/production/acala /acala/target/release/ +COPY --from=builder-chainql /chainql/target/release/chainql /chainql/target/release/ + +EXPOSE 9844 +EXPOSE 9944 +EXPOSE 9946 +EXPOSE 9947 +EXPOSE 9948 + +CMD export NVM_DIR="$HOME/.nvm" PATH="$PATH:/chainql/target/release" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + cd /polkadot-launch && \ + yarn start launch-config-xcm-{{ NETWORK }}.json --- a/.github/workflows/xcm-testnet.yml +++ b/.github/workflows/xcm-testnet.yml @@ -1,4 +1,4 @@ -name: upgrade nodata +name: xcm testnet # Controls when the action will run. on: @@ -30,7 +30,7 @@ name: Prepare execution matrix - runs-on: XL + runs-on: XL2 outputs: matrix: ${{ steps.create_matrix.outputs.matrix }} @@ -59,7 +59,7 @@ xcm-build: needs: prepare-execution-marix # The type of runner that the job will run on - runs-on: [XL] + runs-on: [XL2] timeout-minutes: 600 @@ -73,7 +73,7 @@ steps: - - name: Skip if pull request is in Draft + #- name: Skip if pull request is in Draft # `if: github.event.pull_request.draft == true` should be kept here, at # the step level, rather than at the job level. The latter is not # recommended because when the PR is moved from "Draft" to "Ready to @@ -88,8 +88,8 @@ # 4. Move it to "Ready for review"; now the workflow is passing (it was # skipped) and "Check reviews" is also passing (it won't be updated # until the workflow is finished) - if: github.event.pull_request.draft == true - run: exit 1 + # if: github.event.pull_request.draft == true + #run: exit 1 - name: Clean Workspace uses: AutoModality/action-clean@v1.1.0 @@ -102,18 +102,16 @@ - name: Read .env file uses: xom9ikk/dotenv@v1.0.2 - - name: Generate ENV related extend file for docker-compose + - name: Generate ENV related extend Dockerfile file uses: cuchi/jinja2-action@v1.2.0 with: - template: .docker/docker-compose.tmp-xcm.j2 - output_file: .docker/docker-compose-xcm.${{ matrix.network }}.yml + template: .docker/Dockerfile-xcm.j2 + output_file: .docker/Dockerfile-xcm.${{ matrix.network }}.yml variables: | - REPO_URL=${{ github.server_url }}/${{ github.repository }}.git RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} NETWORK=${{ matrix.network }} POLKADOT_BUILD_BRANCH=${{ env.POLKADOT_BUILD_BRANCH }} POLKADOT_LAUNCH_BRANCH=${{ env.POLKADOT_LAUNCH_BRANCH }} - MAINNET_BRANCH=${{ matrix.mainnet_branch }} FEATURE=${{ matrix.features }} RUNTIME=${{ matrix.runtime }} BRANCH=${{ github.head_ref }} @@ -121,14 +119,14 @@ MOONBEAM_BUILD_BRANCH=${{ env.MOONBEAM_BUILD_BRANCH }} CUMULUS_BUILD_BRANCH=${{ env.CUMULUS_BUILD_BRANCH }} - - name: Show build configuration - run: cat .docker/docker-compose-xcm.${{ matrix.network }}.yml + - name: Show build Dockerfile + run: cat .docker/Dockerfile-xcm.${{ matrix.network }}.yml - name: Show launch-config-xcm-${{ matrix.network }} configuration run: cat .docker/xcm-config/launch-config-xcm-${{ matrix.network }}.json - name: Build the stack - run: docker-compose -f ".docker/docker-compose-xcm.yml" -f ".docker/docker-compose-xcm.${{ matrix.network }}.yml" up -d --build + run: cd .docker/ && docker build --file ./Dockerfile-xcm.${{ matrix.network }}.yml --tag xcm-nodes-${{ matrix.network }} --tag uniquenetwork/xcm-${{ matrix.network }}-testnet-local:nightly-${{ github.head_ref }}-${{ github.sha }} --tag uniquenetwork/xcm-${{ matrix.network }}-testnet-local:latest . - name: Collect Docker Logs if: success() || failure() @@ -141,114 +139,14 @@ if: success() || failure() run: cat './xcm-build-logs.${{ matrix.features }}/xcm-nodes-${{ matrix.network }}.log' - - name: Stop running containers - if: always() # run this step always - run: docker-compose -f ".docker/docker-compose-xcm.yml" -f ".docker/docker-compose-xcm.${{ matrix.network }}.yml" down - - name: Log in to Docker Hub - uses: docker/login-action + uses: docker/login-action@v2.0.0 with: username: ${{ secrets.CORE_DOCKERHUB_USERNAME }} password: ${{ secrets.CORE_DOCKERHUB_TOKEN }} - - name: Tag docker image - run: docker tag xcm_nodes_${{ matrix.network }} uniquenetwork/xcm-${{ matrix.network }}-testnet-local:nightly-${{ github.head_ref }}-${{ github.sha }} - - - name: Push docker image + - name: Push docker version image run: docker push uniquenetwork/xcm-${{ matrix.network }}-testnet-local:nightly-${{ github.head_ref }}-${{ github.sha }} - testnet-build: - needs: prepare-execution-marix - # The type of runner that the job will run on - runs-on: [XL] - - timeout-minutes: 600 - - 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.prepare-execution-marix.outputs.matrix)}} - - steps: - - name: Skip if pull request is in Draft - # `if: github.event.pull_request.draft == true` should be kept here, at - # the step level, rather than at the job level. The latter is not - # recommended because when the PR is moved from "Draft" to "Ready to - # review" the workflow will immediately be passing (since it was skipped), - # even though it hasn't actually ran, since it takes a few seconds for - # the workflow to start. This is also disclosed in: - # https://github.community/t/dont-run-actions-on-draft-pull-requests/16817/17 - # That scenario would open an opportunity for the check to be bypassed: - # 1. Get your PR approved - # 2. Move it to Draft - # 3. Push whatever commits you want - # 4. Move it to "Ready for review"; now the workflow is passing (it was - # skipped) and "Check reviews" is also passing (it won't be updated - # until the workflow is finished) - if: github.event.pull_request.draft == true - run: exit 1 - - - 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@v1.0.2 - - - name: Generate ENV related extend file for docker-compose - uses: cuchi/jinja2-action@v1.2.0 - with: - template: .docker/docker-compose.tmp-testnet.j2 - output_file: .docker/docker-compose-testnet.${{ matrix.network }}.yml - variables: | - REPO_URL=${{ github.server_url }}/${{ github.repository }}.git - RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} - NETWORK=${{ matrix.network }} - POLKADOT_BUILD_BRANCH=${{ env.POLKADOT_BUILD_BRANCH }} - POLKADOT_LAUNCH_BRANCH=${{ env.POLKADOT_LAUNCH_BRANCH }} - MAINNET_BRANCH=${{ matrix.mainnet_branch }} - FEATURE=${{ matrix.features }} - RUNTIME=${{ matrix.runtime }} - BRANCH=${{ github.head_ref }} - - - name: Show build configuration - run: cat .docker/docker-compose-testnet.${{ matrix.network }}.yml - - - name: Build the stack - run: docker-compose -f ".docker/docker-compose-testnet.yml" -f ".docker/docker-compose-testnet.${{ matrix.network }}.yml" up -d --build - - - name: Collect Docker Logs - if: success() || failure() - uses: jwalton/gh-docker-logs@v2.2.0 - with: - dest: './testnet-build-logs.${{ matrix.features }}' - images: 'testnet_node_${{ matrix.network }}' - - - name: Show docker logs - if: success() || failure() - run: cat './testnet-build-logs.${{ matrix.features }}/testnet_node_${{ matrix.network }}.log' - - - name: Stop running containers - if: always() # run this step always - run: docker-compose -f ".docker/docker-compose-testnet.yml" -f ".docker/docker-compose-testnet.${{ matrix.network }}.yml" down - - - name: Log in to Docker Hub - uses: docker/login-action - with: - username: ${{ secrets.CORE_DOCKERHUB_USERNAME }} - password: ${{ secrets.CORE_DOCKERHUB_TOKEN }} - - - name: Tag docker image - run: docker tag testnet_node_${{ matrix.network }} uniquenetwork/${{ matrix.network }}-testnet-local:nightly-${{ github.head_ref }}-${{ github.sha }} - - - name: Push docker image - run: docker push uniquenetwork/${{ matrix.network }}-testnet-local:nightly-${{ github.head_ref }}-${{ github.sha }} - - + - name: Push docker image latest + run: docker push uniquenetwork/xcm-${{ matrix.network }}-testnet-local:latest