fix: live display formatting on macOS Terminal.app (#789) #2256
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: 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 |