Skip to content

Commit deab219

Browse files
committed
ci: add GitHub Actions (tests, docs deploy, PyPI release) and release metadata
1 parent bf9d154 commit deab219

6 files changed

Lines changed: 136 additions & 1 deletion

File tree

‎.github/workflows/ci.yml‎

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [master]
6+
pull_request:
7+
branches: [master]
8+
9+
jobs:
10+
test:
11+
runs-on: ubuntu-latest
12+
strategy:
13+
matrix:
14+
python-version: ["3.10", "3.11", "3.12", "3.13"]
15+
16+
steps:
17+
- uses: actions/checkout@v4
18+
19+
- name: Install uv
20+
uses: astral-sh/setup-uv@v4
21+
22+
- name: Set up Python ${{ matrix.python-version }}
23+
run: uv python install ${{ matrix.python-version }}
24+
25+
- name: Install dependencies
26+
run: uv sync --extra dev
27+
28+
- name: Run tests
29+
run: uv run pytest -v --tb=short
30+
31+
docs:
32+
runs-on: ubuntu-latest
33+
needs: test
34+
if: github.ref == 'refs/heads/master' && github.event_name == 'push'
35+
36+
permissions:
37+
contents: write
38+
39+
steps:
40+
- uses: actions/checkout@v4
41+
42+
- name: Install uv
43+
uses: astral-sh/setup-uv@v4
44+
45+
- name: Set up Python
46+
run: uv python install 3.12
47+
48+
- name: Install dependencies
49+
run: uv sync --extra docs
50+
51+
- name: Deploy docs
52+
run: uv run mkdocs gh-deploy --force

‎.github/workflows/release.yml‎

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
name: Release to PyPI
2+
3+
on:
4+
push:
5+
tags:
6+
- "v*"
7+
8+
jobs:
9+
publish:
10+
runs-on: ubuntu-latest
11+
12+
permissions:
13+
id-token: write # trusted publishing
14+
15+
steps:
16+
- uses: actions/checkout@v4
17+
18+
- name: Install uv
19+
uses: astral-sh/setup-uv@v4
20+
21+
- name: Set up Python
22+
run: uv python install 3.12
23+
24+
- name: Build package
25+
run: uv build
26+
27+
- name: Publish to PyPI
28+
uses: pypa/gh-action-pypi-publish@release/v1

‎LICENSE‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2026 Fuzue Tech
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

‎docs/CNAME‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
densitree.fuzue.tech

‎mkdocs.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
site_name: densitree
22
site_description: "SPADE clustering for high-dimensional cytometry data in Python"
3-
site_url: https://densitree.readthedocs.io
3+
site_url: https://densitree.fuzue.tech
44
repo_url: https://github.com/fuzue/densitree
55
repo_name: fuzue/densitree
66

‎pyproject.toml‎

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,34 @@ build-backend = "hatchling.build"
55
[project]
66
name = "densitree"
77
version = "0.1.0"
8+
description = "Density-normalized clustering with minimum spanning tree construction for high-dimensional data"
9+
readme = "README.md"
10+
license = "MIT"
811
requires-python = ">=3.10"
12+
authors = [
13+
{ name = "Edgar Zanella Alvarenga", email = "edgar@fuzue.tech" },
14+
]
15+
keywords = [
16+
"clustering",
17+
"spade",
18+
"cytometry",
19+
"single-cell",
20+
"density",
21+
"spanning-tree",
22+
"machine-learning",
23+
]
24+
classifiers = [
25+
"Development Status :: 4 - Beta",
26+
"Intended Audience :: Science/Research",
27+
"License :: OSI Approved :: MIT License",
28+
"Programming Language :: Python :: 3",
29+
"Programming Language :: Python :: 3.10",
30+
"Programming Language :: Python :: 3.11",
31+
"Programming Language :: Python :: 3.12",
32+
"Programming Language :: Python :: 3.13",
33+
"Topic :: Scientific/Engineering :: Bio-Informatics",
34+
"Topic :: Scientific/Engineering :: Artificial Intelligence",
35+
]
936
dependencies = [
1037
"numpy>=1.24",
1138
"scipy>=1.10",
@@ -16,6 +43,12 @@ dependencies = [
1643
"pandas>=2.0",
1744
]
1845

46+
[project.urls]
47+
Homepage = "https://densitree.fuzue.tech"
48+
Documentation = "https://densitree.fuzue.tech"
49+
Repository = "https://github.com/fuzue/densitree"
50+
Issues = "https://github.com/fuzue/densitree/issues"
51+
1952
[project.optional-dependencies]
2053
dev = ["pytest>=7.4", "pytest-cov"]
2154
bench = ["readfcs>=2.0", "flowsom>=0.2", "leidenalg>=0.10", "igraph>=1.0", "tabulate"]

0 commit comments

Comments
 (0)