-
Notifications
You must be signed in to change notification settings - Fork 976
Maintainer's Guide
This page is intended for members of the satijalab organization.
Same as for contributors, except there's no need to fork your own copy of the repository since you should have write access.
One of the maintainer's main responsibilities is making sure that PRs are properly reviewed and merged. If a PR makes changes to the core package (i.e. any file not listed in ``) then the version must be bumped. Always rebase onto main before merging a PR to keep the Git history linear (you can generally do this in the GitHub UI).
When merging a pull request into main, be sure to always make a merge commit (do not squash merge).
Our release cycle follows a continuous delivery model backed by GitHub Actions. The main branch is always kept production‑ready, with automated checks running on every pull request & push. We cut releases when we decide there are sufficient new features and fixes merged, or on a regular schedule (e.g., quarterly). Each release goes through a dedicated branch and final preparation before publication, according to GitLab Flow.
On demand, we create minor release branches only when preparing a CRAN release. Each branch is named {MAJOR}.{MINOR}-stable (e.g. 5.2-stable) and is forked from main as late as possible to minimize maintenance.
Once a release branch is cut:
- Only serious bug fixes go into the branch (i.e., CRAN errors)
- Adopt an upstream-first policy: merge fixes into main first, then cherry-pick into the release branch to prevent regressions in future releases.
- After adding a fix to the stable branch, bump the patch version and create a corresponding Git tag (following Semantic Versioning).
git fetch origin
git checkout -b v{MAJOR}.{MINOR}-stable
git push origin v{MAJOR}.{MINOR}-stablegit checkout -b release/{major.minor.version}git push origin release/{major.minor.version}Use the following template for your PR description:
Final updates before submitting `Seurat` v{MAJOR}.{MINOR}.{PATCH} to CRAN 🚀
- [x] Bump version
- [x] Finalize changelog
- [ ] [Pre-Release Checks](https://github.com/satijalab/seurat/actions/workflows/release_checks.yaml)
- [ ] [Reverse Dependency Checks](https://github.com/satijalab/seurat/actions/workflows/reverse_dependency_checks.yaml)
- [ ] [win-builder](https://win-builder.r-project.org/) (R-release, R-devel, R-oldrel)
- [ ] [macOS builder](https://mac.r-project.org/macbuilder/submit.html) (R-release, R-devel)
- [ ] Update CRAN comments
Make sure to run this on the release branch.
Use the satijalab/seurat-ci:latest Docker image for a reproducible environment:
docker pull satijalab/seurat-ci:latest
docker run --rm -it -v .:/seurat satijalab/seurat-ci:latest bashFrom inside the container:
cd seurat/
installDeps.r -s
R CMD build .Submit package to the win-builder (R-release, R-devel, R-oldrel)
Submit package to the macOS builder (R-release, R-devel)
Make sure to do a squash merge.
git fetch origin
git checkout cran
git reset --hard v{MAJOR}.{MINOR}-stable
git push origin cran --force-with-lease
[Needs editing] Add link here, following https://github.com/satijalab/seurat-object/actions/workflows/documentation.yaml
Run the Documentation Action to rebuild the pkgdown site and deploy it the GitHub Pages. Make sure to select the Deploy to Pages option.