From e9039029e234457da8ca0b730a21464b0cd82ebf Mon Sep 17 00:00:00 2001 From: Chris Jordan Date: Thu, 9 Jul 2026 08:06:30 -0400 Subject: [PATCH 1/4] testing an increased timeout for the "Run python tests (include browser tests)" --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4bbcf69fd5..e0a950a42c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -163,7 +163,7 @@ jobs: run: uvx nox -s test -- --skip-browser-tests if: ${{ runner.os != 'Linux' }} - name: Run python tests (include browser tests) - run: uvx nox -s test_xvfb -- --browser firefox + run: uvx nox -s test_xvfb -- --browser firefox --timeout=120 if: ${{ runner.os == 'Linux' }} # Verify that editable install works - name: Test in editable form From c42e9c98eb183a2eae6b1452d648965508004023 Mon Sep 17 00:00:00 2001 From: Chris Jordan Date: Thu, 9 Jul 2026 08:16:20 -0400 Subject: [PATCH 2/4] removed non-failing jobs for debugging --- .github/workflows/build.yml | 340 ---------------------- .github/workflows/build_docs_preview.yml | 33 --- .github/workflows/build_preview.yml | 32 -- .github/workflows/deploy_docs_preview.yml | 75 ----- .github/workflows/deploy_preview.yml | 75 ----- 5 files changed, 555 deletions(-) delete mode 100644 .github/workflows/build_docs_preview.yml delete mode 100644 .github/workflows/build_preview.yml delete mode 100644 .github/workflows/deploy_docs_preview.yml delete mode 100644 .github/workflows/deploy_preview.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e0a950a42c..4e6333faed 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,108 +22,6 @@ env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" jobs: - client: - strategy: - matrix: - os: - - "ubuntu-latest" - - "windows-2025-vs2026" - - "macos-latest" - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v6 - with: - # Need full history to determine version number. - fetch-depth: 0 - - uses: actions/setup-node@v6 - with: - node-version: 24.x - cache: "npm" - cache-dependency-path: | - package-lock.json - # uv required for javascript tests - - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 - with: - enable-cache: false - # go needed for fake_gcs_server used by the javascript tests - - name: Setup go - uses: actions/setup-go@v6 - with: - go-version: "stable" - cache: false - - run: npm ci - - run: npm run format:fix - - name: Check for dirty working directory - run: git diff --exit-code - - run: npm run lint:check - - name: Typecheck with TypeScript - run: npm run typecheck - - name: Build client bundles - run: | - build_info="{'tag':'$(git describe --always --tags)', 'url':'https://github.com/google/neuroglancer/commit/$(git rev-parse HEAD)', 'timestamp':'$(date)'}" - npm run build -- --no-typecheck --no-lint --define NEUROGLANCER_BUILD_INFO="${build_info}" - echo $build_info > ./dist/client/version.json - shell: bash - - name: Build Python client bundles - run: npm run build-python -- --no-typecheck --no-lint - - run: npm run build-package - - name: Run JavaScript tests (including WebGL) - run: npm test - if: ${{ runner.os != 'macOS' }} - - name: Run JavaScript tests (excluding WebGL) - run: npm test -- --project node - if: ${{ runner.os == 'macOS' }} - - name: Run JavaScript benchmarks - run: npm run benchmark - - name: Upload NPM package as artifact - uses: actions/upload-artifact@v7 - with: - name: npm-package - path: dist/package - if: ${{ runner.os == 'Linux' }} - - name: Upload client as artifact - uses: actions/upload-artifact@v7 - with: - name: client - path: dist/client - if: ${{ runner.os == 'Linux' }} - - name: Upload Python client static as artifact - uses: actions/upload-artifact@v7 - with: - name: python-client-static - path: python/neuroglancer/static/client - if: ${{ runner.os == 'Linux' }} - example-project-test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v6 - - name: Install pnpm - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8 - with: - version: 10 - - uses: actions/setup-node@v6 - with: - node-version: 24.x - cache: "pnpm" - cache-dependency-path: | - examples/**/pnpm-lock.yaml - - uses: actions/setup-node@v6 - with: - node-version: 24.x - cache: "npm" - cache-dependency-path: | - package-lock.json - - run: npm ci - - run: npm run example-project-test -- --reporter=html - - name: Upload report and built clients - uses: actions/upload-artifact@v7 - if: ${{ !cancelled() }} - with: - name: example-project-test-results - path: | - playwright-report/ - examples/*/*/dist/ - # Builds Python package and runs Python tests # # On ubuntu-latest, this also runs browser-based tests. On Mac OS and @@ -168,241 +66,3 @@ jobs: # Verify that editable install works - name: Test in editable form run: uvx nox -s test_editable - - python-build-package: - strategy: - matrix: - include: - - os: "ubuntu-latest" - cibw_build: "*" - wheel_identifier: "linux" - - os: "windows-2025-vs2026" - cibw_build: "*" - wheel_identifier: "windows" - - os: "macos-14" - cibw_build: "*_x86_64" - wheel_identifier: "macos_x86_64" - - os: "macos-14" - cibw_build: "*_arm64" - wheel_identifier: "macos_arm64" - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v6 - with: - # Need full history to determine version number. - fetch-depth: 0 - - uses: actions/setup-node@v6 - with: - node-version: 24.x - cache: "npm" - - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 - with: - enable-cache: false - version: "0.11.6" - - name: Get uv cache dir - id: uv-cache - run: | - echo "dir=$(uv cache dir)" >> "$GITHUB_OUTPUT" - - run: npm ci - - run: | - build_info="{'tag':'$(git describe --always --tags)', 'url':'https://github.com/google/neuroglancer/commit/$(git rev-parse HEAD)', 'timestamp':'$(date)'}" - npm run build-python -- --no-typecheck --no-lint --define NEUROGLANCER_BUILD_INFO="${build_info}" - shell: bash - - name: Check for dirty working directory - run: git diff --exit-code - - name: Build Python source distribution (sdist) - run: uv build --sdist - if: ${{ runner.os == 'Linux' }} - - name: Build Python wheels - run: uvx nox -s cibuildwheel - env: - # On Linux, share uv cache with manylinux docker containers - CIBW_ENVIRONMENT_LINUX: UV_CACHE_DIR=/host${{ steps.uv-cache.outputs.dir }} - CIBW_BEFORE_ALL_LINUX: /project/python/build_tools/cibuildwheel_linux_cache_setup.sh /host${{ steps.uv-cache.outputs.dir }} - CIBW_BUILD: ${{ matrix.cibw_build }} - # cryptography>=49 dropped macOS x86_64 wheels (48.x shipped universal2), - # forcing a source build that can't cross-compile openssl on the arm64 - # runner. CIBW_TEST_ENVIRONMENT_MACOS injects UV_CONSTRAINT into the - # cibuildwheel test subprocess (where uv pip install resolves deps), - # capping the transitive cryptography version for x86_64 test installs only. - CIBW_TEST_ENVIRONMENT_MACOS: ${{ matrix.wheel_identifier == 'macos_x86_64' && format('UV_CONSTRAINT={0}/python/build_tools/macos-x86_64-test-constraints.txt', github.workspace) || '' }} - - name: Upload wheels as artifacts - uses: actions/upload-artifact@v7 - with: - name: python-wheels-${{ matrix.wheel_identifier }} - path: | - dist/*.whl - dist/*.tar.gz - - docs: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v6 - - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 - with: - enable-cache: false - - name: Setup Graphviz - uses: ts-graphviz/setup-graphviz@b1de5da23ed0a6d14e0aeee8ed52fdd87af2363c # v2.0.2 - with: - macos-skip-brew-update: "true" - - name: Build docs - run: uvx nox -s docs - - name: Upload docs as artifact - uses: actions/upload-artifact@v7 - with: - name: docs - path: | - dist/docs - - publish: - # Only publish package on push to tag. - if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') }} - runs-on: ubuntu-latest - needs: - - "client" - - "python-build-package" - steps: - - uses: actions/checkout@v6 - - name: Use Node.js - uses: actions/setup-node@v6 - with: - node-version: 24.x - registry-url: "https://registry.npmjs.org" - - uses: actions/download-artifact@v8 - with: - pattern: python-wheels-* - path: dist - merge-multiple: true - - uses: actions/download-artifact@v8 - with: - name: npm-package - path: npm-package - - name: Publish to PyPI (main server) - uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0 - with: - user: __token__ - password: ${{ secrets.pypi_token }} - - name: Publish to NPM registry - run: npm publish - working-directory: npm-package - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - deploy: - # Only deploy on push to master branch. - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} - runs-on: ubuntu-latest - needs: - - "client" - - "docs" - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-node@v6 - with: - node-version: "24.18.0" - - uses: actions/download-artifact@v8 - with: - name: client - path: dist/client - - uses: actions/download-artifact@v8 - with: - name: python-client-static - path: python/neuroglancer/static/client - - name: Publish client to Firebase hosting - uses: FirebaseExtended/action-hosting-deploy@500ac625ca2dd40cbd15f7659af953801858032a # v0.11.0 - with: - firebaseServiceAccount: "${{ secrets.FIREBASE_HOSTING_SERVICE_ACCOUNT_KEY }}" - projectId: neuroglancer-demo - channelId: live - target: app - - uses: actions/download-artifact@v8 - with: - name: docs - path: dist/docs - - name: Publish docs to Firebase hosting - uses: FirebaseExtended/action-hosting-deploy@500ac625ca2dd40cbd15f7659af953801858032a # v0.11.0 - with: - firebaseServiceAccount: "${{ secrets.FIREBASE_HOSTING_SERVICE_ACCOUNT_KEY }}" - projectId: neuroglancer-demo - channelId: live - target: docs - - name: Prepare App Engine deployment - run: | - mkdir appengine-deploy - mkdir appengine-deploy/public - mkdir appengine-deploy/public/python - cp -r dist/client/* appengine-deploy/public/ - cp -r python/neuroglancer/static/client/* appengine-deploy/public/python/ - cat > appengine-deploy/public/fafb.html < - neuroglancer - - Redirecting to https://fafb-dot-neuroglancer-demo.appspot.com - - - - EOF - cat > appengine-deploy/app.yaml <> $GITHUB_OUTPUT - env: - GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}" - - uses: FirebaseExtended/action-hosting-deploy@500ac625ca2dd40cbd15f7659af953801858032a # v0.11.0 - id: deploy - with: - repoToken: "${{ secrets.GITHUB_TOKEN }}" - firebaseServiceAccount: "${{ secrets.FIREBASE_HOSTING_SERVICE_ACCOUNT_KEY }}" - expires: 30d - channelId: "pr${{ steps.pr-id.outputs.pr-id }}" - projectId: neuroglancer-demo - target: docs - - name: "Update commit status" - uses: actions/github-script@v9 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - const expires = new Date("${{ steps.deploy.outputs.expire_time }}"); - const commitId = "${{ github.event.workflow_run.head_commit.id }}"; - await github.rest.repos.createCommitStatus({ - context: "docs-preview", - owner: context.repo.owner, - repo: context.repo.repo, - sha: commitId, - state: "success", - target_url: "${{ steps.deploy.outputs.details_url }}", - description: `Preview created, expires at: ${expires.toISOString()}`, - }); diff --git a/.github/workflows/deploy_preview.yml b/.github/workflows/deploy_preview.yml deleted file mode 100644 index 778ce36fe1..0000000000 --- a/.github/workflows/deploy_preview.yml +++ /dev/null @@ -1,75 +0,0 @@ -name: Deploy preview - -on: - workflow_run: - workflows: ["Build preview"] - types: [completed] - -env: - FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" - -jobs: - deploy: - runs-on: ubuntu-latest - permissions: - statuses: write - if: ${{ github.event.workflow_run.conclusion == 'success' }} - steps: - - name: "Create commit status" - uses: actions/github-script@v9 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - const commitId = "${{ github.event.workflow_run.head_commit.id }}"; - await github.rest.repos.createCommitStatus({ - context: "client-preview", - owner: context.repo.owner, - repo: context.repo.repo, - sha: commitId, - state: "pending", - description: `Creating preview`, - target_url: `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`, - }); - - uses: actions/checkout@v6 - - uses: actions/setup-node@v6 - with: - node-version: "24.18.0" - - uses: actions/download-artifact@v8 - with: - name: client - path: dist/client - github-token: "${{ secrets.GITHUB_TOKEN }}" - run-id: "${{ github.event.workflow_run.id }}" - - name: Get PR ID - # https://github.com/orgs/community/discussions/25220#discussioncomment-7532132 - id: pr-id - run: | - PR_ID=$(gh run view -R ${{ github.repository }} ${{ github.event.workflow_run.id }} | grep -oP '#[0-9]+ . ${{ github.event.workflow_run.id }}' | grep -oP '#[0-9]+' | cut -c 2-) - echo "pr-id=${PR_ID}" >> $GITHUB_OUTPUT - env: - GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}" - - uses: FirebaseExtended/action-hosting-deploy@500ac625ca2dd40cbd15f7659af953801858032a # v0.11.0 - id: deploy - with: - repoToken: "${{ secrets.GITHUB_TOKEN }}" - firebaseServiceAccount: "${{ secrets.FIREBASE_HOSTING_SERVICE_ACCOUNT_KEY }}" - expires: 30d - channelId: "pr${{ steps.pr-id.outputs.pr-id }}" - projectId: neuroglancer-demo - target: app - - name: "Update commit status" - uses: actions/github-script@v9 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - const expires = new Date("${{ steps.deploy.outputs.expire_time }}"); - const commitId = "${{ github.event.workflow_run.head_commit.id }}"; - await github.rest.repos.createCommitStatus({ - context: "client-preview", - owner: context.repo.owner, - repo: context.repo.repo, - sha: commitId, - state: "success", - target_url: "${{ steps.deploy.outputs.details_url }}", - description: `Preview created, expires at: ${expires.toISOString()}`, - }); From bc78535cc0da775dd2a0d9854282640de307e5c5 Mon Sep 17 00:00:00 2001 From: Chris Jordan Date: Thu, 9 Jul 2026 11:19:25 -0400 Subject: [PATCH 3/4] add 3 min timeout to failing step --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4e6333faed..506337bd12 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -61,6 +61,7 @@ jobs: run: uvx nox -s test -- --skip-browser-tests if: ${{ runner.os != 'Linux' }} - name: Run python tests (include browser tests) + timeout-minutes: 3 run: uvx nox -s test_xvfb -- --browser firefox --timeout=120 if: ${{ runner.os == 'Linux' }} # Verify that editable install works From 06c5d93f20cde109475d5bfe787eb8d7a5ac2ce9 Mon Sep 17 00:00:00 2001 From: Chris Jordan Date: Fri, 10 Jul 2026 07:21:28 -0400 Subject: [PATCH 4/4] restict to only testing ubuntu --- .github/workflows/build.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 506337bd12..a4e6d6e129 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -35,8 +35,6 @@ jobs: - "3.13" os: - "ubuntu-latest" - - "windows-2025-vs2026" - - "macos-latest" runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v6