Skip to content

fix: live display formatting on macOS Terminal.app (#789) #2256

fix: live display formatting on macOS Terminal.app (#789)

fix: live display formatting on macOS Terminal.app (#789) #2256

name: E2E Subtensor Tests
concurrency:
group: e2e-subtensor-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
permissions:
pull-requests: read
contents: read
on:
push:
branches: [main, development, staging]
pull_request:
branches: [main, development, staging]
types: [ opened, synchronize, reopened, ready_for_review, labeled, unlabeled ]
workflow_dispatch:
inputs:
docker_image_tag:
description: "Docker image tag"
required: false
type: choice
default: "devnet-ready"
options:
- main
- testnet
- devnet
- devnet-ready
env:
CARGO_TERM_COLOR: always
jobs:
find-tests:
runs-on: ubuntu-latest
if: ${{ github.event_name != 'pull_request' || (github.event.pull_request.draft == false && (github.head_ref == '' || !startsWith(github.head_ref, 'changelog/'))) }}
outputs:
test-files: ${{ steps.get-tests.outputs.test-files }}
steps:
- name: Check-out repository under $GITHUB_WORKSPACE
uses: actions/checkout@v4
- name: Find test files
id: get-tests
run: |
test_files=$(find 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:
runs-on: ubuntu-latest
if: ${{ github.event_name != 'pull_request' || (github.event.pull_request.draft == false && (github.head_ref == '' || !startsWith(github.head_ref, 'changelog/'))) }}
outputs:
image-name: ${{ steps.set-image.outputs.image }}
steps:
- name: Install GitHub CLI
if: github.event_name == 'pull_request'
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: Set Docker image tag based on label or branch
id: set-image
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
echo "Event: $GITHUB_EVENT_NAME"
echo "Branch: $GITHUB_REF_NAME"
# Check if docker_image_tag input is provided (for workflow_dispatch)
if [[ "${GITHUB_EVENT_NAME}" == "workflow_dispatch" ]]; then
docker_tag_input="${{ github.event.inputs.docker_image_tag }}"
if [[ -n "$docker_tag_input" ]]; then
image="ghcr.io/opentensor/subtensor-localnet:${docker_tag_input}"
echo "Using Docker image tag from workflow_dispatch input: ${docker_tag_input}"
echo "✅ Final selected image: $image"
echo "image=$image" >> "$GITHUB_OUTPUT"
exit 0
fi
fi
echo "Reading labels ..."
if [[ "${GITHUB_EVENT_NAME}" == "pull_request" ]]; then
# Use GitHub CLI to read labels (works for forks too)
labels=$(gh pr view ${{ github.event.pull_request.number }} -R ${{ github.repository }} --json labels --jq '.labels[].name' || echo "")
echo "Found labels: $labels"
else
labels=""
fi
image=""
for label in $labels; do
echo "Found label: $label"
case "$label" in
"subtensor-localnet:main")
image="ghcr.io/opentensor/subtensor-localnet:main"
break
;;
"subtensor-localnet:testnet")
image="ghcr.io/opentensor/subtensor-localnet:testnet"
break
;;
"subtensor-localnet:devnet")
image="ghcr.io/opentensor/subtensor-localnet:devnet"
break
;;
esac
done
if [[ -z "$image" ]]; then
# fallback to default based on branch
if [[ "${GITHUB_EVENT_NAME}" == "pull_request" ]]; then
# For PR, use base branch (target branch)
base_branch="${{ github.event.pull_request.base.ref }}"
if [[ "$base_branch" == "main" ]]; then
image="ghcr.io/opentensor/subtensor-localnet:main"
else
image="ghcr.io/opentensor/subtensor-localnet:devnet-ready"
fi
else
# For workflow_dispatch or push, use current branch
if [[ "${GITHUB_REF_NAME}" == "main" ]]; then
image="ghcr.io/opentensor/subtensor-localnet:main"
else
image="ghcr.io/opentensor/subtensor-localnet:devnet-ready"
fi
fi
fi
echo "✅ Final selected image: $image"
echo "image=$image" >> "$GITHUB_OUTPUT"
- 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 ${{ steps.set-image.outputs.image }}
- name: Save Docker Image to Cache
run: docker save -o subtensor-localnet.tar ${{ steps.set-image.outputs.image }}
- name: Upload Docker Image as Artifact
uses: actions/upload-artifact@v4
with:
name: subtensor-localnet
path: subtensor-localnet.tar
run-e2e-tests:
name: ${{ matrix.test-file }} / Python ${{ matrix.python-version }}
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: 32 # Set the maximum number of parallel jobs (same as we have cores in SubtensorCI runner)
matrix:
os:
- ubuntu-latest
test-file: ${{ fromJson(needs.find-tests.outputs.test-files) }}
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
steps:
- name: Check-out repository
uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v4
with:
python-version: 3.13
- 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
env:
LOCALNET_IMAGE_NAME: ${{ needs.pull-docker-image.outputs.image-name }}
SKIP_PULL: "1"
run: |
uv run pytest ${{ matrix.test-file }} -s