Skip to content

Fix/weights mismatch #2885

Fix/weights mismatch

Fix/weights mismatch #2885

name: Bittensor Bittensor E2E Test
permissions:
pull-requests: write
contents: read
concurrency:
group: e2e-cli-${{ github.ref }}
cancel-in-progress: true
on:
pull_request:
branches: ["*"]
types: [opened, synchronize, reopened, labeled, unlabeled]
workflow_dispatch:
inputs:
verbose:
description: "Output more information when triggered manually"
required: false
default: ""
env:
CARGO_TERM_COLOR: always
VERBOSE: ${{ github.event.inputs.verbose }}
jobs:
check-label:
runs-on: [self-hosted, type-ccx13]
outputs:
skip-bittensor-e2e-tests: ${{ steps.get-labels.outputs.skip-bittensor-e2e-tests }}
steps:
- name: Install dependencies
run: |
sudo DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a apt-get update
sudo DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a apt-get install -y --no-install-recommends -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" gh jq
- name: Check out repository
uses: actions/checkout@v4
with:
repository: ${{ github.event.pull_request.head.repo.full_name }}
ref: ${{ github.event.pull_request.head.ref }}
- name: Get labels from PR
id: get-labels
run: |
LABELS=$(gh pr -R ${{ github.repository }} view ${{ github.event.pull_request.number }} --json labels --jq '.labels[].name')
echo "Current labels: $LABELS"
if echo "$LABELS" | grep -q "skip-bittensor-e2e-tests"; then
echo "skip-bittensor-e2e-tests=true" >> $GITHUB_OUTPUT
else
echo "skip-bittensor-e2e-tests=false" >> $GITHUB_OUTPUT
fi
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
find-btcli-e2e-tests:
needs: check-label
if: needs.check-label.outputs.skip-bittensor-e2e-tests == 'false'
runs-on: [self-hosted, type-ccx13]
outputs:
test-files: ${{ steps.get-btcli-tests.outputs.test-files }}
steps:
- name: Install dependencies
run: |
sudo DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a apt-get update
sudo DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a apt-get install -y --no-install-recommends -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" jq
- name: Research preparation
working-directory: ${{ github.workspace }}
run: git clone https://github.com/opentensor/btcli.git
- name: Checkout
working-directory: ${{ github.workspace }}/btcli
run: git checkout staging
- name: Find e2e test files
id: get-btcli-tests
run: |
test_files=$(find ${{ github.workspace }}/btcli/tests/e2e_tests -name "test*.py" | jq -R -s -c 'split("\n") | map(select(. != ""))')
echo "test-files=$test_files" >> $GITHUB_OUTPUT
shell: bash
find-sdk-e2e-tests:
needs: check-label
if: needs.check-label.outputs.skip-bittensor-e2e-tests == 'false'
runs-on: [self-hosted, type-ccx13]
outputs:
test-files: ${{ steps.get-sdk-tests.outputs.test-files }}
steps:
- name: Install dependencies
run: |
sudo DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a apt-get update
sudo DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a apt-get install -y --no-install-recommends -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" jq
- name: Research preparation
working-directory: ${{ github.workspace }}
run: git clone https://github.com/opentensor/bittensor.git
- name: Checkout
working-directory: ${{ github.workspace }}/bittensor
run: git checkout staging
- name: Find e2e test files
id: get-sdk-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
build-image-with-current-branch:
needs: check-label
if: needs.check-label.outputs.skip-bittensor-e2e-tests == 'false'
runs-on: [self-hosted, type-ccx33]
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
repository: ${{ github.event.pull_request.head.repo.full_name }}
ref: ${{ github.event.pull_request.head.ref }}
- name: Patch non-fast-runtime node
run: |
chmod +x ./scripts/localnet_patch.sh
./scripts/localnet_patch.sh
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build Docker Image
run: docker build -f Dockerfile-localnet -t localnet .
- name: Save Docker Image as Tar
run: docker save -o subtensor-localnet.tar localnet
- name: Upload Docker Image as Artifact
uses: actions/upload-artifact@v4
with:
name: subtensor-localnet
path: subtensor-localnet.tar
# main btcli job
run-btcli-e2e-tests:
needs:
- check-label
- find-btcli-e2e-tests
- build-image-with-current-branch
if: needs.check-label.outputs.skip-bittensor-e2e-tests == 'false'
runs-on: [self-hosted, type-ccx13]
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-btcli-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: "cli: ${{ matrix.test-file }}"
steps:
- name: Check-out repository
uses: actions/checkout@v4
with:
repository: ${{ github.event.pull_request.head.repo.full_name }}
ref: ${{ github.event.pull_request.head.ref }}
- name: Install uv
uses: astral-sh/setup-uv@v5
with:
enable-cache: 'false'
- name: Create Python virtual environment
working-directory: ${{ github.workspace }}
run: uv venv --seed ${{ github.workspace }}/venv
- name: Clone Bittensor CLI repo
working-directory: ${{ github.workspace }}
run: git clone https://github.com/opentensor/btcli.git
- name: Setup Bittensor-cli from cloned repo
working-directory: ${{ github.workspace }}/btcli
run: |
source ${{ github.workspace }}/venv/bin/activate
git checkout staging
git fetch origin staging
uv run --active pip install --upgrade pip
uv run --active pip install '.[dev]'
uv run --active pip install pytest
- 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: Retag Docker Image
run: docker tag localnet ghcr.io/opentensor/subtensor-localnet:devnet-ready
- name: Run with retry
working-directory: ${{ github.workspace }}/btcli
run: |
source ${{ github.workspace }}/venv/bin/activate
export SKIP_PULL=1
set +e
for i in 1 2; do
echo "πŸ” Attempt $i: Running tests"
uv run pytest ${{ matrix.test-file }} -s
status=$?
if [ $status -eq 0 ]; then
echo "βœ… Tests passed on attempt $i"
break
else
echo "❌ Tests failed on attempt $i"
if [ $i -eq 2 ]; then
echo "πŸ”₯ Tests failed after 2 attempts"
exit 1
fi
echo "πŸ•’ Retrying..."
sleep 5
fi
done
# main sdk job
run-sdk-e2e-tests:
needs:
- check-label
- find-sdk-e2e-tests
- build-image-with-current-branch
if: needs.check-label.outputs.skip-bittensor-e2e-tests == 'false'
runs-on: [self-hosted, type-ccx13]
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-sdk-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: "sdk: ${{ matrix.test-file }}"
steps:
- name: Check-out repository
uses: actions/checkout@v4
with:
repository: ${{ github.event.pull_request.head.repo.full_name }}
ref: ${{ github.event.pull_request.head.ref }}
- name: Install uv
uses: astral-sh/setup-uv@v5
with:
enable-cache: 'false'
- name: Create Python virtual environment
working-directory: ${{ github.workspace }}
run: uv venv --seed ${{ github.workspace }}/venv
- name: Clone Bittensor SDK repo
working-directory: ${{ github.workspace }}
run: git clone https://github.com/opentensor/bittensor.git
- name: Setup Bittensor SDK from cloned repo
working-directory: ${{ github.workspace }}/bittensor
run: |
source ${{ github.workspace }}/venv/bin/activate
git checkout staging
git fetch origin staging
uv run --active pip install --upgrade pip
uv run --active pip install '.[dev]'
uv run --active pip install pytest
- 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: Retag Docker Image
run: docker tag localnet ghcr.io/opentensor/subtensor-localnet:devnet-ready
- name: Run with retry
working-directory: ${{ github.workspace }}/bittensor
run: |
source ${{ github.workspace }}/venv/bin/activate
export SKIP_PULL=1
set +e
for i in 1 2; do
echo "πŸ” Attempt $i: Running tests"
uv run pytest ${{ matrix.test-file }} -s
status=$?
if [ $status -eq 0 ]; then
echo "βœ… Tests passed on attempt $i"
break
else
echo "❌ Tests failed on attempt $i"
if [ $i -eq 2 ]; then
echo "πŸ”₯ Tests failed after 2 attempts"
exit 1
fi
echo "πŸ•’ Retrying..."
sleep 5
fi
done