Race Condition Bug fixes #381
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Bittensor SDK Test | |
| permissions: | |
| pull-requests: write | |
| contents: read | |
| concurrency: | |
| group: e2e-sdk-${{ github.ref }} | |
| cancel-in-progress: true | |
| on: | |
| pull_request: | |
| branches: | |
| - main | |
| - staging | |
| types: [opened, synchronize, reopened, labeled, unlabeled] | |
| workflow_dispatch: | |
| inputs: | |
| bittensor_branch: | |
| description: "Optional: Bittensor branch to use instead of staging" | |
| required: false | |
| default: "staging" | |
| env: | |
| CARGO_TERM_COLOR: always | |
| VERBOSE: ${{ github.event.inputs.verbose }} | |
| BITTENSOR_BRANCH: ${{ github.event.inputs.bittensor_branch || 'staging' }} | |
| jobs: | |
| apply-label-to-new-pr: | |
| runs-on: ubuntu-latest | |
| if: ${{ github.event.pull_request.draft == false }} | |
| outputs: | |
| should_continue_sdk: ${{ steps.check.outputs.should_continue_sdk }} | |
| steps: | |
| - name: Check | |
| id: check | |
| run: | | |
| ACTION="${{ github.event.action }}" | |
| if [[ "$ACTION" == "opened" || "$ACTION" == "reopened" ]]; then | |
| echo "should_continue_sdk=true" >> $GITHUB_OUTPUT | |
| else | |
| echo "should_continue_sdk=false" >> $GITHUB_OUTPUT | |
| fi | |
| shell: bash | |
| - name: Add label | |
| if: steps.check.outputs.should_continue_sdk == 'true' | |
| uses: actions-ecosystem/action-add-labels@v1 | |
| with: | |
| github_token: ${{ secrets.GITHUB_TOKEN }} | |
| labels: run-bittensor-sdk-tests | |
| check-labels: | |
| needs: apply-label-to-new-pr | |
| runs-on: ubuntu-latest | |
| if: always() | |
| outputs: | |
| run-sdk-tests: ${{ steps.check-manual.outputs.run-sdk-tests || steps.get-labels-pr.outputs.run-sdk-tests }} | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v4 | |
| - name: Skip label check for manual runs | |
| id: check-manual | |
| if: ${{ github.event_name == 'workflow_dispatch' }} | |
| run: | | |
| echo "Manual workflow dispatch detected, skipping PR label check." | |
| echo "run-sdk-tests=true" >> $GITHUB_OUTPUT | |
| - name: Get labels from PR | |
| id: get-labels-pr | |
| if: ${{ github.event_name == 'pull_request' }} | |
| run: | | |
| sleep 5 | |
| LABELS=$(gh pr view ${{ github.event.pull_request.number }} --json labels --jq '.labels[].name') | |
| echo "Current labels: $LABELS" | |
| if echo "$LABELS" | grep -q "run-bittensor-sdk-tests"; then | |
| echo "run-sdk-tests=true" >> $GITHUB_ENV | |
| echo "run-sdk-tests=true" >> $GITHUB_OUTPUT | |
| else | |
| echo "run-sdk-tests=false" >> $GITHUB_ENV | |
| echo "run-sdk-tests=false" >> $GITHUB_OUTPUT | |
| fi | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| find-e2e-tests: | |
| needs: check-labels | |
| if: always() && needs.check-labels.outputs.run-sdk-tests == 'true' | |
| runs-on: ubuntu-latest | |
| outputs: | |
| test-files: ${{ steps.get-tests.outputs.test-files }} | |
| steps: | |
| - name: Research preparation | |
| working-directory: ${{ github.workspace }} | |
| run: git clone https://github.com/opentensor/bittensor.git | |
| - name: Verify and checkout Bittensor branch | |
| working-directory: ${{ github.workspace }}/bittensor | |
| run: | | |
| if ! git fetch origin $BITTENSOR_BRANCH; then | |
| echo "❌ Error: Branch '$BITTENSOR_BRANCH' does not exist in opentensor/bittensor." | |
| exit 1 | |
| fi | |
| git checkout FETCH_HEAD | |
| echo "✅ Using Bittensor branch: $BITTENSOR_BRANCH" | |
| - name: Install dependencies | |
| run: sudo apt-get install -y jq | |
| - name: Find e2e test files | |
| id: get-tests | |
| run: | | |
| test_files=$(find ${{ github.workspace }}/bittensor/tests/e2e_tests -name "test*.py" | jq -R -s -c 'split("\n") | map(select(. != ""))') | |
| echo "test-files=$test_files" >> $GITHUB_OUTPUT | |
| shell: bash | |
| pull-docker-image: | |
| needs: | |
| - check-labels | |
| - find-e2e-tests | |
| runs-on: ubuntu-latest | |
| if: always() && needs.check-labels.outputs.run-sdk-tests == 'true' | |
| steps: | |
| - name: Log in to GitHub Container Registry | |
| run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u $GITHUB_ACTOR --password-stdin | |
| - name: Pull Docker Image | |
| run: docker pull ghcr.io/opentensor/subtensor-localnet:devnet-ready | |
| - name: Save Docker Image to Cache | |
| run: docker save -o subtensor-localnet.tar ghcr.io/opentensor/subtensor-localnet:devnet-ready | |
| - name: Upload Docker Image as Artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: subtensor-localnet | |
| path: subtensor-localnet.tar | |
| run-e2e-tests: | |
| needs: | |
| - check-labels | |
| - find-e2e-tests | |
| - pull-docker-image | |
| if: always() && needs.check-labels.outputs.run-sdk-tests == 'true' | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| max-parallel: 16 | |
| matrix: | |
| rust-branch: | |
| - stable | |
| rust-target: | |
| - x86_64-unknown-linux-gnu | |
| os: | |
| - ubuntu-latest | |
| test-file: ${{ fromJson(needs.find-e2e-tests.outputs.test-files) }} | |
| env: | |
| RELEASE_NAME: development | |
| RUSTV: ${{ matrix.rust-branch }} | |
| RUST_BACKTRACE: full | |
| RUST_BIN_DIR: target/${{ matrix.rust-target }} | |
| TARGET: ${{ matrix.rust-target }} | |
| timeout-minutes: 60 | |
| name: "e2e tests: ${{ matrix.test-file }}" | |
| steps: | |
| - name: Check-out repository | |
| uses: actions/checkout@v4 | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update && | |
| sudo apt-get install -y clang curl libssl-dev llvm libudev-dev protobuf-compiler | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.13' | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v4 | |
| - name: Clone Bittensor SDK repo | |
| run: git clone https://github.com/opentensor/bittensor.git | |
| - name: Checkout Bittensor branch | |
| working-directory: ${{ github.workspace }}/bittensor | |
| run: | | |
| if ! git fetch origin $BITTENSOR_BRANCH; then | |
| echo "❌ Error: Branch '$BITTENSOR_BRANCH' does not exist in opentensor/bittensor." | |
| exit 1 | |
| fi | |
| git checkout FETCH_HEAD | |
| echo "✅ Using Bittensor branch: $BITTENSOR_BRANCH" | |
| - name: Install Bittensor SDK dependencies | |
| working-directory: ${{ github.workspace }}/bittensor | |
| run: uv pip install --system '.[dev]' | |
| - name: Clone async-substrate-interface repo | |
| run: git clone https://github.com/opentensor/async-substrate-interface.git | |
| - name: Checkout PR branch in async-substrate-interface | |
| working-directory: ${{ github.workspace }}/async-substrate-interface | |
| run: | | |
| git fetch origin ${{ github.event.pull_request.head.ref }} | |
| git checkout ${{ github.event.pull_request.head.ref }} | |
| echo "Current branch: $(git rev-parse --abbrev-ref HEAD)" | |
| - name: Install async-substrate-interface with dev dependencies | |
| working-directory: ${{ github.workspace }}/async-substrate-interface | |
| run: | | |
| uv pip uninstall --system async-substrate-interface || true | |
| uv pip install --system '.[dev]' | |
| - name: Download Cached Docker Image | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: subtensor-localnet | |
| - name: Load Docker Image | |
| run: docker load -i subtensor-localnet.tar | |
| - name: Run e2e tests | |
| run: pytest ${{ matrix.test-file }} -s | |
| run-integration-and-unit-test: | |
| needs: | |
| - check-labels | |
| if: always() && needs.check-labels.outputs.run-sdk-tests == 'true' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Check-out repository | |
| uses: actions/checkout@v4 | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update && | |
| sudo apt-get install -y clang curl libssl-dev llvm libudev-dev protobuf-compiler | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.13' | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v4 | |
| - name: Clone Bittensor SDK repo | |
| run: git clone https://github.com/opentensor/bittensor.git | |
| - name: Checkout Bittensor branch | |
| working-directory: ${{ github.workspace }}/bittensor | |
| run: | | |
| if ! git fetch origin $BITTENSOR_BRANCH; then | |
| echo "❌ Error: Branch '$BITTENSOR_BRANCH' does not exist in opentensor/bittensor." | |
| exit 1 | |
| fi | |
| git checkout FETCH_HEAD | |
| echo "✅ Using Bittensor branch: $BITTENSOR_BRANCH" | |
| - name: Install Bittensor SDK dependencies | |
| working-directory: ${{ github.workspace }}/bittensor | |
| run: uv pip install --system '.[dev]' | |
| - name: Clone async-substrate-interface repo | |
| run: git clone https://github.com/opentensor/async-substrate-interface.git | |
| - name: Checkout PR branch in async-substrate-interface | |
| working-directory: ${{ github.workspace }}/async-substrate-interface | |
| run: | | |
| git fetch origin ${{ github.event.pull_request.head.ref }} | |
| git checkout ${{ github.event.pull_request.head.ref }} | |
| echo "Current branch: $(git rev-parse --abbrev-ref HEAD)" | |
| - name: Install async-substrate-interface with dev dependencies | |
| working-directory: ${{ github.workspace }}/async-substrate-interface | |
| run: | | |
| uv pip uninstall --system async-substrate-interface || true | |
| uv pip install --system '.[dev]' | |
| - name: Run SDK integration tests | |
| run: pytest ${{ github.workspace }}/bittensor/tests/integration_tests | |
| - name: Run Bittensor SDK unit tests | |
| run: pytest ${{ github.workspace }}/bittensor/tests/unit_tests |