Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
e437b7f
Merge pull request #2947 from opentensor/release/9.8.0
basfroman Jul 8, 2025
e07cd11
Merge branch 'master' into release/9.8.1
ibraheem-abe Jul 9, 2025
d26b319
Merge pull request #2954 from opentensor/release/9.8.1
basfroman Jul 9, 2025
0cacd34
Merge branch 'master' into release/9.8.2
ibraheem-abe Jul 10, 2025
71d74f1
Merge pull request #2963 from opentensor/release/9.8.2
basfroman Jul 10, 2025
a77bcaf
Merge branch 'master' into release/9.8.3
ibraheem-abe Jul 18, 2025
b0fe401
Merge branch 'staging' into release/9.8.3
thewhaleking Jul 18, 2025
5322803
Revert "Merge pull request #2975 from opentensor/fix/roman/fix-after-…
thewhaleking Jul 18, 2025
55d2611
Merge pull request #2982 from opentensor/release/9.8.3
thewhaleking Jul 18, 2025
1dc8d82
Merge pull request #3013 from opentensor/release/9.9.0
thewhaleking Aug 12, 2025
49547ed
add `test_axon_async`
Aug 27, 2025
2ad1613
improve `tests/e2e_tests/test_commit_reveal.py`
Aug 27, 2025
546ccf4
add async version of `tests/e2e_tests/utils/chain_interactions.py` fu…
Aug 27, 2025
f19e6ba
add `raise_error=True` to `_do_commit_weights`. `subtensor.commit_wei…
Aug 28, 2025
c856df7
add async tests in `tests/e2e_tests/test_commit_weights.py`
Aug 28, 2025
8aedf60
improve `tests/e2e_tests/test_commitment.py`
Aug 28, 2025
e75fa81
update `SubtensorApi`
Aug 28, 2025
b85d6f8
add async functions to `chain_interactions.py`
Aug 28, 2025
97ad3d8
add async tests to `tests/e2e_tests/test_delegate.py`
Aug 28, 2025
ec3da56
add async tests to `tests/e2e_tests/test_dendrite.py`
Aug 28, 2025
1d10850
improve deps and version
Aug 28, 2025
c47fa43
CHANGELOG.md
Aug 28, 2025
c6d0db2
Update `SubtensorApi`
Aug 28, 2025
e6e83d8
add async e2e tests in `tests/e2e_tests/test_hotkeys.py`
Aug 28, 2025
fea35b0
Merge pull request #3031 from opentensor/changelog/9.10.0
basfroman Aug 28, 2025
d9c6e16
`actions/checkout@v4` should take all commits history
Aug 28, 2025
42d593d
Checkout PR head instead of merge
Aug 28, 2025
cbdb352
Merge pull request #3032 from opentensor/release/9.10.0
basfroman Aug 28, 2025
b15a106
Merge pull request #3034 from opentensor/master
basfroman Aug 29, 2025
85eb48d
add lost data
Aug 29, 2025
59f86a9
Merge pull request #3035 from opentensor/fix/roman/fix-forced-data
basfroman Aug 29, 2025
fdbaeb0
Merge branch 'staging' into test/roman/add-async-e2e-tests
Aug 29, 2025
6095490
Merge pull request #3036 from opentensor/master
basfroman Aug 29, 2025
7be45bd
Merge branch 'staging' into test/roman/add-async-e2e-tests
Aug 29, 2025
4031a22
improve `SubtensorApi`
Aug 29, 2025
991a01a
`legacy_methods=False` for all tests
Aug 29, 2025
f99c372
apply related changes to test utils
Aug 29, 2025
12d6540
apply related changes to `chain_interactions.py`
Aug 29, 2025
6a0a5ab
apply SubtensorApi changes to updated tess
Aug 29, 2025
3caaf29
oops
Aug 29, 2025
eb4800d
async test for `tests/e2e_tests/test_incentive.py`
Aug 29, 2025
b84cd2c
ruff
Aug 29, 2025
09ff34f
async e2e test for `tests/e2e_tests/test_incentive.py`
Aug 29, 2025
1082f6d
improve `chain_interactions.py`
Aug 29, 2025
e012d7b
async test for `tests/e2e_tests/test_liquid_alpha.py`
Aug 29, 2025
5c6a4bd
ruff
Aug 29, 2025
5bb4d52
logging
Aug 29, 2025
adc3065
async test for `tests/e2e_tests/test_liquidity.py`
Aug 29, 2025
f0e509d
async test for `tests/e2e_tests/test_metagraph.py`
Aug 29, 2025
c4bbca1
async test for `tests/e2e_tests/test_neuron_certificate.py`
Aug 29, 2025
0d356fc
async test for `tests/e2e_tests/test_reveal_commitments.py`
Aug 29, 2025
0959525
async test for `tests/e2e_tests/test_root_set_weights.py`
Aug 29, 2025
ac6fa82
async test for `tests/e2e_tests/test_set_subnet_identity_extrinsic.py`
Aug 29, 2025
411ec3a
async test for `tests/e2e_tests/test_set_weights.py`
Aug 29, 2025
5e5deaa
async test for `tests/e2e_tests/test_stake_fee.py`
Aug 29, 2025
887bd78
logging
Aug 29, 2025
9331b99
improve SubtensorApi
Aug 29, 2025
87ea711
async tests for `tests/e2e_tests/test_staking.py`
Aug 29, 2025
dba02e4
async tests for `tests/e2e_tests/test_subnets.py`
Aug 29, 2025
b58c58b
async tests for `tests/e2e_tests/test_subtensor_functions.py`
Aug 30, 2025
1c5988b
async tests for `tests/e2e_tests/test_transfer.py`
Aug 30, 2025
06b77c6
update `commit_weights_extrinsic` extrinsic and subtensor call with `…
Aug 30, 2025
bbd9d49
fix unit tests
Aug 30, 2025
39d8db9
remove testing py3.9 since GH actions matrix has a limit as 256 items
Aug 30, 2025
2f459c8
split job for a few ones with different python versions
Aug 30, 2025
2c1b812
try to add reusable workflow
Aug 30, 2025
c45d05c
indent fix
Aug 30, 2025
72847c5
remove secrets from reusable workflow
Aug 30, 2025
1de47ec
done back
Aug 30, 2025
7ab9c2f
names
Aug 30, 2025
4eb9a9b
names
Aug 30, 2025
43ee5d9
names
Aug 30, 2025
8da1331
names again
Aug 30, 2025
5e7d144
convert `async_subtensor` fixture to real async fixture
Aug 30, 2025
96f2968
testing update for main and reusable workflows
Aug 30, 2025
a4ff770
secret
Aug 30, 2025
fb1a4a7
run-e2e-3-9
Aug 30, 2025
575fa0d
run-e2e-3-9
Aug 30, 2025
ec8f4ab
remove needs from pull-docker-image (save time)
Aug 30, 2025
f8c7690
try
Aug 30, 2025
1e3082c
try
Aug 30, 2025
3df041e
matrix.label
Aug 30, 2025
976ebf7
multy matrix
Aug 30, 2025
602a176
multy matrix py
Aug 30, 2025
32a9109
avoid uv loop issue with python 3.9
Aug 30, 2025
3049701
remove commented code from workflow, rollback uv run
Aug 30, 2025
d3e1e01
try to handle loop issue
Aug 30, 2025
a1d15fc
pytest.ini update
Aug 30, 2025
55425f9
pytest.ini update + integration
Aug 30, 2025
3525eb8
pytest.ini
Aug 30, 2025
9f2e9d1
set raise_error=True for `reveal_weights`
Aug 30, 2025
91ca87c
unit test + pytest.ini
Aug 30, 2025
edf96e5
`functools.partial` + `asyncio.gather` breaks the loop for py3.9-11. …
Aug 30, 2025
879df0e
add powerful runner for child workflow
Aug 30, 2025
d9d1067
use both runners
Aug 30, 2025
c9172c3
nope
Aug 30, 2025
834e197
`asyncio.gather` causes ASI to return a `RuntimeError` when calling a…
Sep 2, 2025
41088c2
update tests
Sep 2, 2025
8e66f56
while we support python 3.9 then `asyncio.gather` will break group re…
Sep 2, 2025
3585428
remove py3.9 support
Sep 2, 2025
ea37fb5
bring back gather logic
Sep 2, 2025
88281e6
quotes
Sep 2, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions .github/workflows/_run-e2e-single.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: Run Single E2E Test with multiple Python versions

on:
workflow_call:
inputs:
nodeid:
required: true
type: string
image-name:
required: true
type: string

jobs:
run-e2e:
name: "${{ matrix.python-version }}"
runs-on: ubuntu-latest
timeout-minutes: 45

strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13"]

steps:
- name: Check-out repository
uses: actions/checkout@v4

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install uv
uses: astral-sh/setup-uv@v4

- name: Install dependencies
run: uv sync --extra dev --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 test with retry
env:
PY_VERSION: ${{ matrix.python-version }}
LOCALNET_IMAGE_NAME: ${{ inputs.image-name }}
run: |
for i in 1 2 3; do
echo "::group::🔁 Test attempt $i"
if uv run pytest "${{ inputs.nodeid }}" -s; then
echo "✅ Tests passed on attempt $i"
echo "::endgroup::"
exit 0
else
echo "❌ Tests failed on attempt $i"
echo "::endgroup::"
if [ "$i" -lt 3 ]; then
echo "Retrying..."
sleep 5
fi
fi

done
echo "Tests failed after 3 attempts"
exit 1
2 changes: 1 addition & 1 deletion .github/workflows/compatibility.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:

strategy:
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
python-version: ["3.10", "3.11", "3.12", "3.13"]

steps:
- uses: actions/checkout@v4
Expand Down
68 changes: 12 additions & 56 deletions .github/workflows/e2e-subtensor-tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ jobs:

# Pull docker image
pull-docker-image:
needs: find-tests
runs-on: ubuntu-latest
outputs:
image-name: ${{ steps.set-image.outputs.image }}
Expand Down Expand Up @@ -129,63 +128,20 @@ jobs:
path: subtensor-localnet.tar

# Job to run tests in parallel
run-fast-blocks-e2e-test:
name: "${{ matrix.test.label }} / Py ${{ matrix.python-version }}"
# Since GH Actions matrix has a limit of 256 jobs, we need to split the tests into multiple jobs with different
# Python versions. To reduce DRY we use reusable workflow.

e2e-test:
name: ${{ matrix.label }}
needs:
- find-tests
- pull-docker-image
runs-on: ubuntu-latest
timeout-minutes: 45
strategy:
fail-fast: false # Allow other matrix jobs to run even if this job fails
max-parallel: 64 # Set the maximum number of parallel jobs (same as we have cores in ubuntu-latest runner)
fail-fast: false
matrix:
os:
- ubuntu-latest
test: ${{ fromJson(needs.find-tests.outputs.test-files) }}
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
steps:
- name: Check-out repository
uses: actions/checkout@v4

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install uv
uses: astral-sh/setup-uv@v4

- name: install dependencies
run: uv sync --extra dev --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 tests with retry
env:
LOCALNET_IMAGE_NAME: ${{ needs.pull-docker-image.outputs.image-name }}
run: |
for i in 1 2 3; do
echo "::group::🔁 Test attempt $i"
if uv run pytest "${{ matrix.test.nodeid }}" -s; then
echo "✅ Tests passed on attempt $i"
echo "::endgroup::"
exit 0
else
echo "❌ Tests failed on attempt $i"
echo "::endgroup::"
if [ "$i" -lt 3 ]; then
echo "Retrying..."
sleep 5
fi
fi
done

echo "Tests failed after 3 attempts"
exit 1
include: ${{ fromJson(needs.find-tests.outputs.test-files) }}
uses: ./.github/workflows/_run-e2e-single.yaml
with:
nodeid: ${{ matrix.nodeid }}
image-name: ${{ needs.pull-docker-image.outputs.image-name }}
secrets: inherit
5 changes: 2 additions & 3 deletions .github/workflows/flake8-and-mypy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
fail-fast: false
max-parallel: 5
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
python-version: ["3.10", "3.11", "3.12", "3.13"]

steps:
- name: Checkout repository
Expand All @@ -42,8 +42,7 @@ jobs:
python -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip
# needed for Python 3.9 compatibility
python -m pip install uv>=0.8.8
python -m pip install uv==0.8.14
python -m uv sync --extra dev --active

- name: Flake8
Expand Down
4 changes: 1 addition & 3 deletions .github/workflows/monitor_requirements_size_master.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
python-version: ["3.10", "3.11", "3.12", "3.13"]
outputs:
py39: ${{ steps.set-output.outputs.py39 }}
py310: ${{ steps.set-output.outputs.py310 }}
Expand Down Expand Up @@ -47,7 +47,6 @@ jobs:
VERSION=${{ matrix.python-version }}
echo "Detected size: $SIZE MB for Python $VERSION"
case "$VERSION" in
3.9) echo "py39=$SIZE" >> $GITHUB_OUTPUT ;;
3.10) echo "py310=$SIZE" >> $GITHUB_OUTPUT ;;
3.11) echo "py311=$SIZE" >> $GITHUB_OUTPUT ;;
3.12) echo "py312=$SIZE" >> $GITHUB_OUTPUT ;;
Expand All @@ -64,7 +63,6 @@ jobs:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const sizes = {
"3.9": "${{ needs.measure-venv.outputs.py39 || 'N/A' }}",
"3.10": "${{ needs.measure-venv.outputs.py310 || 'N/A' }}",
"3.11": "${{ needs.measure-venv.outputs.py311 || 'N/A' }}",
"3.12": "${{ needs.measure-venv.outputs.py312 || 'N/A' }}",
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/nightly-e2e-tests-subtensor-main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ jobs:
os:
- ubuntu-latest
test-file: ${{ fromJson(needs.find-tests.outputs.test-files) }}
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
python-version: ["3.10", "3.11", "3.12", "3.13"]
steps:
- name: Check-out repository
uses: actions/checkout@v4
Expand Down Expand Up @@ -191,7 +191,7 @@ jobs:
os:
- ubuntu-latest
test-file: ${{ fromJson(needs.find-tests.outputs.test-files) }}
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
python-version: ["3.10", "3.11", "3.12", "3.13"]
steps:
- name: Check-out repository
uses: actions/checkout@v4
Expand Down Expand Up @@ -266,7 +266,7 @@ jobs:
os:
- ubuntu-latest
test-file: ${{ fromJson(needs.find-tests.outputs.test-files) }}
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
python-version: ["3.10", "3.11", "3.12", "3.13"]

steps:
- name: Check-out repository
Expand Down Expand Up @@ -342,7 +342,7 @@ jobs:
os:
- ubuntu-latest
test-file: ${{ fromJson(needs.find-tests.outputs.test-files) }}
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
python-version: ["3.10", "3.11", "3.12", "3.13"]

steps:
- name: Check-out repository
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
python-version: '3.11'

- name: Install dependencies
run: |
Expand Down
7 changes: 3 additions & 4 deletions .github/workflows/unit-and-integration-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
fail-fast: false
max-parallel: 5
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
python-version: ["3.10", "3.11", "3.12", "3.13"]

steps:
- name: Checkout repository
Expand All @@ -39,8 +39,7 @@ jobs:
python -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip
# needed for Python 3.9 compatibility
python -m pip install uv>=0.8.8
python -m pip install uv>=0.8.14
python -m uv sync --extra dev --active

- name: Unit tests
Expand All @@ -57,4 +56,4 @@ jobs:
PYTHONUNBUFFERED: "1"
run: |
source venv/bin/activate
python -m uv run pytest -n 2 tests/integration_tests/ --reruns 3
python -m uv run pytest -n 2 tests/integration_tests/ --reruns 3
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
# Changelog

## 9.10.0 /2025-08-28

## What's Changed
* Fixes broken e2e tests by @thewhaleking in https://github.com/opentensor/bittensor/pull/3020
* Add async crv4 e2e test by @basfroman in https://github.com/opentensor/bittensor/pull/3022
* Use `TimelockedWeightCommits` instead of `CRV3WeightCommitsV2` by @basfroman in https://github.com/opentensor/bittensor/pull/3023
* fix: reflect correct return types for get_delegated by @Arthurdw in https://github.com/opentensor/bittensor/pull/3016
* Fix `flaky` e2e test (tests.e2e_tests.test_staking.test_safe_staking_scenarios) by @basfroman in https://github.com/opentensor/bittensor/pull/3025
* Separation of test modules into separate text elements as independent matrix elements by @basfroman in https://github.com/opentensor/bittensor/pull/3027
* Improve `move_stake` extrinsic (add `move_all_stake` parameter) by @basfroman in https://github.com/opentensor/bittensor/pull/3028
* Fix tests related with disabled `sudo_set_commit_reveal_weights_enabled` by @basfroman in https://github.com/opentensor/bittensor/pull/3026


**Full Changelog**: https://github.com/opentensor/bittensor/compare/v9.9.0...v9.10.0

## 9.9.0 /2025-08-11

## What's Changed
Expand Down
Loading
Loading