name: Compatibility Tests on: schedule: - cron: "0 8 7 * 2" push: branches: - main ### For debugging purposes - uncomment below to run on all PRs pull_request: branches: "*" env: JEST_ENV: prod jobs: docker-build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Build docker image run: docker build . matrix-compatibility-test: name: cxg:${{ matrix.cellxgene_build }} os:${{ matrix.os }} py:${{ matrix.python-version }} anndata:${{ matrix.anndata_version || 'latest' }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: # note: The `macos-latest` is latest Catalina version, and not Big Sur. So we explicitly ask for Big Sur (`macos-11`) os: [ubuntu-latest, macos-latest, macos-13] python-version: ["3.10", "3.11", "3.12"] cellxgene_build: [main, latest] # add anndata pinned version test for subset of matrix configurations, # in order to reduce matrix cross-product explosion include: - python-version: 3.12 cellxgene_build: latest # TODO: dynamically use the literal version in requirements.txt, # to avoid having to update this in manually in the future # TODO: Do not bother running this if anndata latest version # matches this pinned version, to avoid a redundant test anndata_version: "==0.10.9" steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Cache env vars run: echo "PIP_CACHE=`python -m pip cache dir`" >> $GITHUB_ENV - name: Cache env vars (MacOS) if: startsWith(matrix.os, 'macos') run: echo "BREW_CACHE=`brew --cache`" >> $GITHUB_ENV # FIXME: Only working for Linux - name: Python cache uses: actions/cache@v4 with: path: ${{ env.PIP_CACHE }} key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements*.txt') }} restore-keys: | ${{ runner.os }}-pip- - name: Node cache uses: actions/cache@v4 with: path: ~/.npm key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node- - name: Brew cache (MacOS) if: startsWith(matrix.os, 'macos') uses: actions/cache@v4 with: path: ${{ env.BREW_CACHE }} key: ${{ runner.os }}-brew- - name: Install dependencies (Ubuntu Linux) if: startsWith(matrix.os, 'ubuntu') run: | sudo apt-get update sudo apt-get install -y libhdf5-serial-dev - name: Install dependencies (MacOS) if: startsWith(matrix.os, 'macos') run: brew install hdf5 - name: Install cellxgene from `main` branch if: matrix.cellxgene_build == 'main' run: | pip install -r server/requirements-dev.txt make pydist install-dist - name: Install cellxgene from latest release (pypi.org) if: matrix.cellxgene_build == 'latest' run: | pip install --upgrade cellxgene # install the additional dev requirements on top of what is in the # cellxgene pip package, which are needed for testing, but otherwise # keep same pip pkg versions as in the cxg release sed -i'' -e 's/-r requirements.txt//' server/requirements-dev.txt pip install -r server/requirements-dev.txt pip install --force-reinstall numpy==2.0.1 numba>=0.60.0 pandas - name: Install anndata version per matrix variable run: pip install anndata${{ matrix.anndata_version }} - name: Install node run: make dev-env-client # Run different types of test separately, to facilitate troubleshooting - name: Unit Tests - client run: make unit-test-client - name: Unit Tests - server run: make unit-test-server - name: Smoke Tests run: make smoke-test # FIXME: Fails intermittently. See https://app.zenhub.com/workspaces/single-cell-5e2a191dad828d52cc78b028/issues/chanzuckerberg/cellxgene/2415 # - name: Smoke Tests with Annotations # run: make smoke-test-annotations