difftreelog
chore add xnft workflow
in: master
2 files changed
.github/workflows/ci-develop.ymldiffbeforeafterboth1# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2586869783/CI+Develop2# Workflow which controls starts nested workflows.3name: develop45# Triger: PR at 'develop' branch with following types of events.6on:7 pull_request:8 branches: [ 'develop' ]9 types: [ opened, reopened, synchronize, ready_for_review, converted_to_draft ]1011#Concurency group for control execution queue over github runners.12concurrency:13 group: ${{ github.workflow }}-${{ github.head_ref }}14 cancel-in-progress: true1516# List of a jobs included into Workflow.17jobs:1819 yarn-dev:20 if: github.event.pull_request.draft == false && !contains(github.event.pull_request.labels.*.name, 'CI-minimal')21 uses: ./.github/workflows/yarn-dev.yml22 secrets: inherit 2324 unit-test:25 if: github.event.pull_request.draft == false && !contains(github.event.pull_request.labels.*.name, 'CI-minimal')26 uses: ./.github/workflows/unit-test.yml27 secrets: inherit 2829 canary:30 if: github.event.pull_request.draft == false && contains(github.event.pull_request.labels.*.name, 'CI-canary')31 uses: ./.github/workflows/canary.yml32 secrets: inherit3334 xcm:35 if: github.event.pull_request.draft == false && contains(github.event.pull_request.labels.*.name, 'CI-xcm')36 uses: ./.github/workflows/xcm.yml37 secrets: inherit3839 xnft:40 if: github.event.pull_request.draft == false && contains(github.event.pull_request.labels.*.name, 'CI-xnft')41 uses: ./.github/workflows/xnft.yml42 secrets: inherit43 44 collator-selection:45 if: github.event.pull_request.draft == false && contains(github.event.pull_request.labels.*.name, 'CI-collator-selection')46 uses: ./.github/workflows/collator-selection.yml47 secrets: inherit 48 49 forkless-update-data:50 if: github.event.pull_request.draft == false && (contains(github.event.pull_request.labels.*.name, 'CI-forkless') || contains(github.event.pull_request.labels.*.name, 'CI-forkless-update-data'))51 uses: ./.github/workflows/forkless-update-data.yml52 secrets: inherit5354 forkless-update-no-data:55 if: github.event.pull_request.draft == false && (contains(github.event.pull_request.labels.*.name, 'CI-forkless') || contains(github.event.pull_request.labels.*.name, 'CI-forkless-update-no-data'))56 uses: ./.github/workflows/forkless-update-nodata.yml57 secrets: inherit5859 try-runtime:60 if: github.event.pull_request.draft == false && (contains(github.event.pull_request.labels.*.name, 'CI-forkless') || contains(github.event.pull_request.labels.*.name, 'CI-try-runtime'))61 uses: ./.github/workflows/try-runtime.yml62 secrets: inherit6364 node-only-update:65 if: github.event.pull_request.draft == false && contains(github.event.pull_request.labels.*.name, 'CI-node-only-update')66 uses: ./.github/workflows/node-only-update.yml67 secrets: inherit6869 governance:70 if: github.event.pull_request.draft == false && contains(github.event.pull_request.labels.*.name, 'CI-gov')71 uses: ./.github/workflows/governance.yml72 secrets: inherit7374 codestyle:75 if: github.event.pull_request.draft == false && !contains(github.event.pull_request.labels.*.name, 'CI-minimal')76 uses: ./.github/workflows/codestyle.yml77 secrets: inherit7879 polkadot-types:80 if: contains(github.event.pull_request.labels.*.name, 'CI-hotfix-types')81 uses: ./.github/workflows/polkadot-types.yml82 secrets: inherit.github/workflows/xnft.ymldiffbeforeafterboth--- /dev/null
+++ b/.github/workflows/xnft.yml
@@ -0,0 +1,215 @@
+name: xnft-testnet
+
+# Controls when the action will run.
+on:
+ workflow_call:
+
+ # Allows you to run this workflow manually from the Actions tab
+ workflow_dispatch:
+
+#Define Workflow variables
+env:
+ REPO_URL: ${{ github.server_url }}/${{ github.repository }}
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+ 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.1.0
+ 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@v4
+ id: create_matrix
+ with:
+ matrix: |
+ network {quartz}, relay_branch {${{ env.KUSAMA_MAINNET_BRANCH }}}, acala_version {${{ env.KARURA_BUILD_BRANCH }}}, runtest {quartz-karura}, runtime_features {quartz-runtime}
+
+ xnft:
+ 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
+ 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.1.0
+ with:
+ ref: ${{ github.head_ref }} #Checking out head commit
+
+ # Prepare SHA
+ - name: Prepare SHA
+ uses: ./.github/actions/prepare
+
+ - name: Read .env file
+ uses: xom9ikk/dotenv@v2
+
+ - name: Log in to Docker Hub
+ uses: docker/login-action@v2.1.0
+ with:
+ username: ${{ secrets.CORE_DOCKERHUB_USERNAME }}
+ password: ${{ secrets.CORE_DOCKERHUB_TOKEN }}
+
+ # Check POLKADOT version and build it if it doesn't exist in repository
+ - name: Generate ENV related extend Dockerfile file for POLKADOT
+ uses: cuchi/jinja2-action@v1.2.0
+ with:
+ template: .docker/Dockerfile-polkadot.j2
+ output_file: .docker/Dockerfile-polkadot.${{ matrix.relay_branch }}.yml
+ variables: |
+ RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}
+ POLKADOT_BUILD_BRANCH=${{ matrix.relay_branch }}
+
+ - name: Check if the dockerhub repository contains the needed version POLKADOT
+ run: |
+ # aquire token
+ TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'${{ secrets.CORE_DOCKERHUB_USERNAME }}'", "password": "'${{ secrets.CORE_DOCKERHUB_TOKEN }}'"}' https://hub.docker.com/v2/users/login/ | jq -r .token)
+ export TOKEN=$TOKEN
+
+ # Get TAGS from DOCKERHUB POLKADOT repository
+ POLKADOT_TAGS=$(curl -s -H "Authorization: JWT ${TOKEN}" https://hub.docker.com/v2/repositories/uniquenetwork/builder-polkadot/tags/?page_size=100 | jq -r '."results"[]["name"]')
+ # Show TAGS
+ echo "POLKADOT TAGS:"
+ echo $POLKADOT_TAGS
+ # Check correct version POLKADOT and build it if it doesn't exist in POLKADOT TAGS
+ if [[ ${POLKADOT_TAGS[*]} =~ (^|[[:space:]])"${{ matrix.relay_branch }}"($|[[:space:]]) ]]; then
+ echo "Repository has needed POLKADOT version";
+ docker pull uniquenetwork/builder-polkadot:${{ matrix.relay_branch }}
+ else
+ echo "Repository has not needed POLKADOT version, so build it";
+ cd .docker/ && docker build --file ./Dockerfile-polkadot.${{ matrix.relay_branch }}.yml --tag uniquenetwork/builder-polkadot:${{ matrix.relay_branch }} .
+ echo "Push needed POLKADOT version to the repository";
+ docker push uniquenetwork/builder-polkadot:${{ matrix.relay_branch }}
+ fi
+ shell: bash
+
+ # Check ACALA version and build it if it doesn't exist in repository
+ - name: Generate ENV related extend Dockerfile file for ACALA
+ uses: cuchi/jinja2-action@v1.2.0
+ with:
+ template: .docker/Dockerfile-acala.j2
+ output_file: .docker/Dockerfile-acala.${{ matrix.acala_version }}.yml
+ variables: |
+ RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}
+ ACALA_BUILD_BRANCH=${{ matrix.acala_version }}
+
+ - name: Check if the dockerhub repository contains the needed ACALA version
+ run: |
+ # aquire token
+ TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'${{ secrets.CORE_DOCKERHUB_USERNAME }}'", "password": "'${{ secrets.CORE_DOCKERHUB_TOKEN }}'"}' https://hub.docker.com/v2/users/login/ | jq -r .token)
+ export TOKEN=$TOKEN
+
+ # Get TAGS from DOCKERHUB repository
+ ACALA_TAGS=$(curl -s -H "Authorization: JWT ${TOKEN}" https://hub.docker.com/v2/repositories/uniquenetwork/builder-acala/tags/?page_size=100 | jq -r '."results"[]["name"]')
+ # Show TAGS
+ echo "ACALA TAGS:"
+ echo $ACALA_TAGS
+ # Check correct version ACALA and build it if it doesn't exist in ACALA TAGS
+ if [[ ${ACALA_TAGS[*]} =~ (^|[[:space:]])"${{ matrix.acala_version }}"($|[[:space:]]) ]]; then
+ echo "Repository has needed ACALA version";
+ docker pull uniquenetwork/builder-acala:${{ matrix.acala_version }}
+ else
+ echo "Repository has not needed ACALA version, so build it";
+ cd .docker/ && docker build --file ./Dockerfile-acala.${{ matrix.acala_version }}.yml --tag uniquenetwork/builder-acala:${{ matrix.acala_version }} .
+ echo "Push needed ACALA version to the repository";
+ docker push uniquenetwork/builder-acala:${{ matrix.acala_version }}
+ fi
+ shell: bash
+
+ - name: Build unique-chain
+ run: |
+ docker build --file .docker/Dockerfile-unique \
+ --build-arg RUNTIME_FEATURES=${{ matrix.runtime_features }} \
+ --build-arg RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} \
+ --tag uniquenetwork/ci-xnft-local:${{ matrix.network }}-${{ env.REF_SLUG }}-${{ env.BUILD_SHA }} \
+ .
+
+ - name: Push docker image version
+ run: docker push uniquenetwork/ci-xnft-local:${{ matrix.network }}-${{ env.REF_SLUG }}-${{ env.BUILD_SHA }}
+
+ - uses: actions/setup-node@v3.5.1
+ with:
+ node-version: 18
+
+ - name: Clone xnft-tests
+ run: git clone https://github.com/UniqueNetwork/xnft-tests.git
+
+ - name: Install baedeker
+ uses: UniqueNetwork/baedeker-action/setup@built
+
+ - name: Setup library
+ run: mkdir -p .baedeker/vendor/ && git clone https://github.com/UniqueNetwork/baedeker-library .baedeker/vendor/baedeker-library
+
+ - name: Start network
+ uses: UniqueNetwork/baedeker-action@built
+ id: bdk
+ with:
+ jpath: |
+ .baedeker/vendor
+ tla-str: |
+ relay_spec=${{ env.RELAY_CHAIN_TYPE }}-local
+ inputs: |
+ xnft-tests/.baedeker/testnets.jsonnet
+ snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/polkadot':{dockerImage:'uniquenetwork/builder-polkadot:${{ matrix.relay_branch }}'}})
+ snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'uniquenetwork/ci-xnft-local:${{ matrix.network }}-${{ env.REF_SLUG }}-${{ env.BUILD_SHA }}'}})
+ snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/acala':{dockerImage:'uniquenetwork/builder-acala:${{ matrix.acala_version }}'}})
+
+ - name: Yarn install
+ working-directory: xnft-tests
+ run: |
+ yarn install
+ yarn add mochawesome
+
+ - name: Run XNFT Tests
+ working-directory: xnft-tests
+ run: |
+ NOW=$(date +%s) && yarn ${{ matrix.runtest }} --reporter mochawesome --reporter-options reportFilename=test-${NOW}
+
+ - name: XNFT Tests Report
+ uses: phoenix-actions/test-reporting@v10
+ id: test-report
+ if: success() || failure()
+ with:
+ name: XNFT Tests ${{ matrix.network }}
+ path: tests/mochawesome-report/test-*.json
+ reporter: mochawesome-json
+ fail-on-error: 'false'
+
+ - name: Clean Workspace
+ if: always()
+ uses: AutoModality/action-clean@v1.1.0
+
+ - name: Remove builder cache
+ if: always()
+ run: |
+ docker system prune -a -f