From 292951337b6d0270c7ebd94c427e1576716b2db6 Mon Sep 17 00:00:00 2001 From: Jayaram Kancherla Date: Wed, 10 Jul 2024 09:01:25 -0700 Subject: [PATCH 1/5] minimal changes --- .github/workflows/pages.yaml | 51 ---------------- .github/workflows/pypi-publish.yml | 62 ++++++++++++++++++++ .github/workflows/pypi-test.yml | 41 +++++++++++++ docs/conf.py | 27 ++++----- setup.cfg | 7 ++- setup.py | 7 +-- src/scimilarity/__init__.py | 1 - tox.ini | 93 ++++++++++++++++++++++++++++++ 8 files changed, 216 insertions(+), 73 deletions(-) delete mode 100644 .github/workflows/pages.yaml create mode 100644 .github/workflows/pypi-publish.yml create mode 100644 .github/workflows/pypi-test.yml create mode 100644 tox.ini diff --git a/.github/workflows/pages.yaml b/.github/workflows/pages.yaml deleted file mode 100644 index 3803607..0000000 --- a/.github/workflows/pages.yaml +++ /dev/null @@ -1,51 +0,0 @@ -# Build and deploy Sphinx docs to GitHub Pages -name: Pages -on: - push: - branches: ['main'] - workflow_dispatch: - -# Sets permissions of the GITHUB_TOKEN -permissions: - contents: read - pages: write - id-token: write - -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. -concurrency: - group: "pages" - cancel-in-progress: false - -jobs: - # Build job - build: - runs-on: ubuntu-latest - container: - image: ghcr.io/genentech/scimilarity:latest - steps: - - uses: actions/checkout@v3 - - name: Install dependencies - run: | - pip install -r docs/requirements.txt - - name: Setup Pages - id: pages - uses: actions/configure-pages@v3 - - name: Sphinx build - run: | - sphinx-build -b html docs _build - - name: Upload artifact - uses: actions/upload-pages-artifact@v2 - with: - path: ./_build - # Deployment job - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - needs: build - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v2 diff --git a/.github/workflows/pypi-publish.yml b/.github/workflows/pypi-publish.yml new file mode 100644 index 0000000..c1fbbaa --- /dev/null +++ b/.github/workflows/pypi-publish.yml @@ -0,0 +1,62 @@ +# This workflow will install Python dependencies, run tests and lint with a single version of Python +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions + +name: Publish to PyPI + +on: + push: + tags: "*" + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Set up Python 3.9 + uses: actions/setup-python@v4 + with: + python-version: 3.9 + + - name: Install System dependencies + run: | + sudo apt install pandoc + + - name: Install Python dependencies + run: | + python -m pip install --upgrade pip + pip install flake8 pytest tox + + # - name: Lint with flake8 + # run: | + # # stop the build if there are Python syntax errors or undefined names + # flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + # # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + # # flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + + # - name: Test with tox + # run: | + # tox + + - name: Build docs + run: | + tox -e docs + + - run: touch ./docs/_build/html/.nojekyll + + - name: GH Pages Deployment + uses: JamesIves/github-pages-deploy-action@4.1.3 + with: + branch: gh-pages # The branch the action should deploy to. + folder: ./docs/_build/html + clean: true # Automatically remove deleted files from the deploy branch + + - name: Build Project and Publish + run: | + python -m tox -e clean,build + + - name: Publish package + uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29 + with: + user: __token__ + password: ${{ secrets.PYPI_TOKEN }} diff --git a/.github/workflows/pypi-test.yml b/.github/workflows/pypi-test.yml new file mode 100644 index 0000000..6bc6f33 --- /dev/null +++ b/.github/workflows/pypi-test.yml @@ -0,0 +1,41 @@ +# # This workflow will install Python dependencies, run tests and lint with a single version of Python +# # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions + +# name: Test the library + +# on: +# push: +# branches: [main] +# pull_request: +# branches: [main] + +# jobs: +# build: +# runs-on: ubuntu-latest +# strategy: +# matrix: +# python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] + +# name: Python ${{ matrix.python-version }} +# steps: +# - uses: actions/checkout@v2 +# - name: Setup Python +# uses: actions/setup-python@v4 +# with: +# python-version: ${{ matrix.python-version }} +# cache: "pip" +# - name: Install dependencies +# run: | +# python -m pip install --upgrade pip +# pip install flake8 pytest tox + +# # - name: Lint with flake8 +# # run: | +# # # stop the build if there are Python syntax errors or undefined names +# # flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics +# # # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide +# # # flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + +# - name: Test with tox +# run: | +# tox diff --git a/docs/conf.py b/docs/conf.py index 76844a1..4391891 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -10,7 +10,6 @@ import os import sys - # -- Path setup -------------------------------------------------------------- __location__ = os.path.dirname(__file__) @@ -28,18 +27,20 @@ # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ["sphinx.ext.autodoc", - "sphinx.ext.intersphinx", - "sphinx.ext.todo", - "sphinx.ext.autosummary", - "sphinx.ext.viewcode", - "sphinx.ext.coverage", - "sphinx.ext.doctest", - "sphinx.ext.ifconfig", - "sphinx.ext.mathjax", - "sphinx.ext.napoleon", - "nbsphinx", - "sphinx_gallery.load_style"] +extensions = [ + "sphinx.ext.autodoc", + "sphinx.ext.intersphinx", + "sphinx.ext.todo", + "sphinx.ext.autosummary", + "sphinx.ext.viewcode", + "sphinx.ext.coverage", + "sphinx.ext.doctest", + "sphinx.ext.ifconfig", + "sphinx.ext.mathjax", + "sphinx.ext.napoleon", + "nbsphinx", + "sphinx_gallery.load_style", + ] # autodoc configuration autodoc_typehints = "description" diff --git a/setup.cfg b/setup.cfg index 7f8e311..fdf5c93 100644 --- a/setup.cfg +++ b/setup.cfg @@ -5,7 +5,6 @@ [metadata] name = scimilarity -version = 0.1.0 description = Single cell embedding into latent space and retrieving with kNN. author = Graham Heimberg, Tony Kuo, Nathaniel Diamant, Omar Salem, Héctor Corrada Bravo, Jason A. Vander Heiden author_email = heimberg@gene.com @@ -48,6 +47,7 @@ python_requires = >=3.7 # new major versions. This works if the required packages follow Semantic Versioning. # For more information, check out https://semver.org/. install_requires = + importlib-metadata; python_version<"3.8" anndata>=0.8.0 captum>=0.5.0 circlify>=0.14.0 @@ -65,7 +65,6 @@ install_requires = torch>=1.10.1 tqdm zarr>=2.6.1 - importlib-metadata; python_version<"3.8" [options.packages.find] where = src @@ -131,5 +130,7 @@ exclude = [pyscaffold] # PyScaffold's parameters when the project was created. # This will be used when updating. Do not change! -version = 4.2.1 +version = 4.5 package = scimilarity +extensions = + markdown diff --git a/setup.py b/setup.py index 75a802a..1546bea 100644 --- a/setup.py +++ b/setup.py @@ -2,18 +2,15 @@ Setup file for scimilarity. Use setup.cfg to configure your project. - This file was generated with PyScaffold 4.2.1. + This file was generated with PyScaffold 4.5. PyScaffold helps you to put up the scaffold of your new Python project. Learn more under: https://pyscaffold.org/ """ from setuptools import setup - if __name__ == "__main__": try: - setup( - setup_requires=["setuptools_scm"], - ) + setup(use_scm_version={"version_scheme": "no-guess-dev"}) except: # noqa print( "\n\nAn error occurred while building the project, " diff --git a/src/scimilarity/__init__.py b/src/scimilarity/__init__.py index 0c25a84..8deeaed 100644 --- a/src/scimilarity/__init__.py +++ b/src/scimilarity/__init__.py @@ -1,4 +1,3 @@ -import subprocess import sys if sys.version_info[:2] >= (3, 8): diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..69f8159 --- /dev/null +++ b/tox.ini @@ -0,0 +1,93 @@ +# Tox configuration file +# Read more under https://tox.wiki/ +# THIS SCRIPT IS SUPPOSED TO BE AN EXAMPLE. MODIFY IT ACCORDING TO YOUR NEEDS! + +[tox] +minversion = 3.24 +envlist = default +isolated_build = True + + +[testenv] +description = Invoke pytest to run automated tests +setenv = + TOXINIDIR = {toxinidir} +passenv = + HOME + SETUPTOOLS_* +extras = + testing +commands = + pytest {posargs} + + +# # To run `tox -e lint` you need to make sure you have a +# # `.pre-commit-config.yaml` file. See https://pre-commit.com +# [testenv:lint] +# description = Perform static analysis and style checks +# skip_install = True +# deps = pre-commit +# passenv = +# HOMEPATH +# PROGRAMDATA +# SETUPTOOLS_* +# commands = +# pre-commit run --all-files {posargs:--show-diff-on-failure} + + +[testenv:{build,clean}] +description = + build: Build the package in isolation according to PEP517, see https://github.com/pypa/build + clean: Remove old distribution files and temporary build artifacts (./build and ./dist) +# https://setuptools.pypa.io/en/stable/build_meta.html#how-to-use-it +skip_install = True +changedir = {toxinidir} +deps = + build: build[virtualenv] +passenv = + SETUPTOOLS_* +commands = + clean: python -c 'import shutil; [shutil.rmtree(p, True) for p in ("build", "dist", "docs/_build")]' + clean: python -c 'import pathlib, shutil; [shutil.rmtree(p, True) for p in pathlib.Path("src").glob("*.egg-info")]' + build: python -m build {posargs} +# By default, both `sdist` and `wheel` are built. If your sdist is too big or you don't want +# to make it available, consider running: `tox -e build -- --wheel` + + +[testenv:{docs,doctests,linkcheck}] +description = + docs: Invoke sphinx-build to build the docs + doctests: Invoke sphinx-build to run doctests + linkcheck: Check for broken links in the documentation +passenv = + SETUPTOOLS_* +setenv = + DOCSDIR = {toxinidir}/docs + BUILDDIR = {toxinidir}/docs/_build + docs: BUILD = html + doctests: BUILD = doctest + linkcheck: BUILD = linkcheck +deps = + -r {toxinidir}/docs/requirements.txt + # ^ requirements.txt shared with Read The Docs +commands = + sphinx-build --color -b {env:BUILD} -d "{env:BUILDDIR}/doctrees" "{env:DOCSDIR}" "{env:BUILDDIR}/{env:BUILD}" {posargs} + + +[testenv:publish] +description = + Publish the package you have been developing to a package index server. + By default, it uses testpypi. If you really want to publish your package + to be publicly accessible in PyPI, use the `-- --repository pypi` option. +skip_install = True +changedir = {toxinidir} +passenv = + # See: https://twine.readthedocs.io/en/latest/ + TWINE_USERNAME + TWINE_PASSWORD + TWINE_REPOSITORY + TWINE_REPOSITORY_URL +deps = twine +commands = + python -m twine check dist/* + python -m twine upload {posargs:--repository {env:TWINE_REPOSITORY:testpypi}} dist/* From a24f1d71a0d408895af35b5b3096a670a64f3070 Mon Sep 17 00:00:00 2001 From: Jayaram Kancherla Date: Wed, 10 Jul 2024 09:21:46 -0700 Subject: [PATCH 2/5] forgot to add this back --- .github/workflows/pages.yaml | 51 ++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 .github/workflows/pages.yaml diff --git a/.github/workflows/pages.yaml b/.github/workflows/pages.yaml new file mode 100644 index 0000000..a4b4c52 --- /dev/null +++ b/.github/workflows/pages.yaml @@ -0,0 +1,51 @@ +# Build and deploy Sphinx docs to GitHub Pages +name: Pages +on: + push: + branches: ['main'] + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Build job + build: + runs-on: ubuntu-latest + container: + image: ghcr.io/genentech/scimilarity:latest + steps: + - uses: actions/checkout@v3 + - name: Install dependencies + run: | + pip install -r docs/requirements.txt + - name: Setup Pages + id: pages + uses: actions/configure-pages@v3 + - name: Sphinx build + run: | + sphinx-build -b html docs _build + - name: Upload artifact + uses: actions/upload-pages-artifact@v2 + with: + path: ./_build + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 \ No newline at end of file From bdec2b7dde17e15d2fb48af6216336f5d6480998 Mon Sep 17 00:00:00 2001 From: Jason Vander Heiden Date: Wed, 10 Jul 2024 09:47:46 -0700 Subject: [PATCH 3/5] Comment out gh-pages deploy from publish action (should be covered by the pages action). --- .github/workflows/pypi-publish.yml | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/.github/workflows/pypi-publish.yml b/.github/workflows/pypi-publish.yml index c1fbbaa..bf9cd88 100644 --- a/.github/workflows/pypi-publish.yml +++ b/.github/workflows/pypi-publish.yml @@ -34,22 +34,23 @@ jobs: # # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide # # flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + # Skip docs build and deploy as this is handled in a separate action # - name: Test with tox # run: | # tox - - - name: Build docs - run: | - tox -e docs - - - run: touch ./docs/_build/html/.nojekyll - - - name: GH Pages Deployment - uses: JamesIves/github-pages-deploy-action@4.1.3 - with: - branch: gh-pages # The branch the action should deploy to. - folder: ./docs/_build/html - clean: true # Automatically remove deleted files from the deploy branch + # + # - name: Build docs + # run: | + # tox -e docs + # + # - run: touch ./docs/_build/html/.nojekyll + # + # - name: GH Pages Deployment + # uses: JamesIves/github-pages-deploy-action@4.1.3 + # with: + # branch: gh-pages # The branch the action should deploy to. + # folder: ./docs/_build/html + # clean: true # Automatically remove deleted files from the deploy branch - name: Build Project and Publish run: | From ed768e0e35cedfd8b034e4a00d2fb119f8ffe1f9 Mon Sep 17 00:00:00 2001 From: Jason Vander Heiden Date: Wed, 10 Jul 2024 10:14:34 -0700 Subject: [PATCH 4/5] Add an `on` to tests action --- .github/workflows/pypi-test.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/pypi-test.yml b/.github/workflows/pypi-test.yml index 6bc6f33..0aa48b7 100644 --- a/.github/workflows/pypi-test.yml +++ b/.github/workflows/pypi-test.yml @@ -1,21 +1,21 @@ -# # This workflow will install Python dependencies, run tests and lint with a single version of Python -# # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions + # This workflow will install Python dependencies, run tests and lint with a single version of Python + # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions -# name: Test the library +name: Test the library -# on: +on: workflow_dispatch # push: # branches: [main] # pull_request: # branches: [main] - +# # jobs: # build: # runs-on: ubuntu-latest # strategy: # matrix: # python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] - +# # name: Python ${{ matrix.python-version }} # steps: # - uses: actions/checkout@v2 @@ -28,14 +28,14 @@ # run: | # python -m pip install --upgrade pip # pip install flake8 pytest tox - +# # # - name: Lint with flake8 # # run: | # # # stop the build if there are Python syntax errors or undefined names # # flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # # # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide # # # flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - +# # - name: Test with tox # run: | # tox From 3b468666838e819dce8c05daccddb39fccbc0c5d Mon Sep 17 00:00:00 2001 From: Jason Vander Heiden Date: Wed, 10 Jul 2024 10:16:56 -0700 Subject: [PATCH 5/5] Uncomment jobs in tests action --- .github/workflows/pypi-test.yml | 62 ++++++++++++++++----------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/.github/workflows/pypi-test.yml b/.github/workflows/pypi-test.yml index 0aa48b7..806f184 100644 --- a/.github/workflows/pypi-test.yml +++ b/.github/workflows/pypi-test.yml @@ -8,34 +8,34 @@ on: workflow_dispatch # branches: [main] # pull_request: # branches: [main] -# -# jobs: -# build: -# runs-on: ubuntu-latest -# strategy: -# matrix: -# python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] -# -# name: Python ${{ matrix.python-version }} -# steps: -# - uses: actions/checkout@v2 -# - name: Setup Python -# uses: actions/setup-python@v4 -# with: -# python-version: ${{ matrix.python-version }} -# cache: "pip" -# - name: Install dependencies -# run: | -# python -m pip install --upgrade pip -# pip install flake8 pytest tox -# -# # - name: Lint with flake8 -# # run: | -# # # stop the build if there are Python syntax errors or undefined names -# # flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics -# # # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide -# # # flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics -# -# - name: Test with tox -# run: | -# tox + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] + + name: Python ${{ matrix.python-version }} + steps: + - uses: actions/checkout@v2 + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + cache: "pip" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install flake8 pytest tox + + # - name: Lint with flake8 + # run: | + # # stop the build if there are Python syntax errors or undefined names + # flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + # # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + # # flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + + - name: Test with tox + run: | + tox