11name : E2E Subtensor Tests
22
33concurrency :
4- group : e2e-subtensor-${{ github.ref }}
4+ group : e2e-subtensor-${{ github.event.pull_request.number || github. ref }}
55 cancel-in-progress : true
66
77on :
8- push :
9- branches :
10- - ' **'
118 pull_request :
129 branches :
1310 - ' **'
14- types : [ opened, synchronize, reopened, ready_for_review ]
11+ types : [ opened, synchronize, reopened, ready_for_review, labeled, unlabeled ]
1512
1613 workflow_dispatch :
1714 inputs :
2926 # Looking for e2e tests
3027 find-tests :
3128 runs-on : ubuntu-latest
32- if : ${{ github.event_name != 'pull_request' || github. event.pull_request.draft == false }}
29+ if : ${{ github.event.pull_request.draft == false }}
3330 outputs :
3431 test-files : ${{ steps.get-tests.outputs.test-files }}
3532 steps :
@@ -50,28 +47,61 @@ jobs:
5047 pull-docker-image :
5148 runs-on : ubuntu-latest
5249 outputs :
53- image-name : ${{ steps.set-output .outputs.image-name }}
50+ image-name : ${{ steps.set-image .outputs.image }}
5451 steps :
55- - name : Set Docker image tag based on branch
56- id : set-output
52+ - name : Set Docker image tag based on label or branch
53+ id : set-image
5754 run : |
58- ref="${{ github.ref_name }}"
59- if [[ "$ref" == "master" ]]; then
60- image="ghcr.io/opentensor/subtensor-localnet:main"
55+ echo "Event: $GITHUB_EVENT_NAME"
56+ echo "Branch: $GITHUB_REF_NAME"
57+
58+ echo "Reading labels ..."
59+ if [[ "${GITHUB_EVENT_NAME}" == "pull_request" ]]; then
60+ labels=$(jq -r '.pull_request.labels[].name' "$GITHUB_EVENT_PATH")
6161 else
62- image="ghcr.io/opentensor/subtensor-localnet:devnet-ready"
62+ labels=""
63+ fi
64+
65+ image=""
66+
67+ for label in $labels; do
68+ echo "Found label : $label"
69+ case "$label" in
70+ " subtensor-localnet:main" )
71+ image="ghcr.io/opentensor/subtensor-localnet:main"
72+ break
73+ ;;
74+ " subtensor-localnet:testnet" )
75+ image="ghcr.io/opentensor/subtensor-localnet:testnet"
76+ break
77+ ;;
78+ " subtensor-localnet:devnet" )
79+ image="ghcr.io/opentensor/subtensor-localnet:devnet"
80+ break
81+ ;;
82+ esac
83+ done
84+
85+ if [[ -z "$image" ]]; then
86+ # fallback to default based on branch
87+ if [[ "${GITHUB_REF_NAME}" == "master" ]]; then
88+ image="ghcr.io/opentensor/subtensor-localnet:main"
89+ else
90+ image="ghcr.io/opentensor/subtensor-localnet:devnet-ready"
91+ fi
6392 fi
64- echo "Using image: $image"
65- echo "image-name=$image" >> "$GITHUB_OUTPUT"
93+
94+ echo "✅ Final selected image : $image"
95+ echo "image=$image" >> "$GITHUB_OUTPUT"
6696
6797 - name : Log in to GitHub Container Registry
6898 run : echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u $GITHUB_ACTOR --password-stdin
6999
70100 - name : Pull Docker Image
71- run : docker pull ${{ steps.set-output .outputs.image-name }}
101+ run : docker pull ${{ steps.set-image .outputs.image }}
72102
73103 - name : Save Docker Image to Cache
74- run : docker save -o subtensor-localnet.tar ${{ steps.set-output .outputs.image-name }}
104+ run : docker save -o subtensor-localnet.tar ${{ steps.set-image .outputs.image }}
75105
76106 - name : Upload Docker Image as Artifact
77107 uses : actions/upload-artifact@v4
@@ -122,22 +152,21 @@ jobs:
122152 env :
123153 LOCALNET_IMAGE_NAME : ${{ needs.pull-docker-image.outputs.image-name }}
124154 run : |
125- set +e
126155 for i in 1 2 3; do
127- echo "🔁 Attempt $i: Running tests"
128- uv run pytest ${{ matrix.test-file }} -s
129- status=$?
130- if [ $status -eq 0 ]; then
156+ echo "::group::🔁 Test attempt $i"
157+ if uv run pytest ${{ matrix.test-file }} -s; then
131158 echo "✅ Tests passed on attempt $i"
132- break
159+ echo "::endgroup::"
160+ exit 0
133161 else
134162 echo "❌ Tests failed on attempt $i"
135- if [ $i -eq 3 ]; then
136- echo "Tests failed after 3 attempts"
137- exit 1
163+ echo "::endgroup::"
164+ if [ "$i" -lt 3 ]; then
165+ echo "Retrying..."
166+ sleep 5
138167 fi
139- echo "Retrying..."
140- sleep 5
141168 fi
142169 done
143170
171+ echo "Tests failed after 3 attempts"
172+ exit 1
0 commit comments