Saibal Roy · Open-source projects

How I publish open source on GitHub

This is the checklist I follow before and after a repository goes public. A checklist is easy to write, so each practice links to where it actually lives in docling-batch-extract, my first project built this way, and says in a few lines how to set it up.

Items marked Done are in place today. Items marked Next are the gaps I know about. I keep both on the page, because a list with no gaps usually isn't honest.

Last checked against the live repositories: 9 October 2026, release v0.1.0. Settings marked "all three" are also on this site's repository and on the private repository behind saibalroy.com.

1. Confidential data stays out

The project started from real client documents, so this comes first. Memory isn't a control; the repository itself has to refuse the data.

2. Repository basics

What someone sees in the first minute decides whether they trust the rest.

3. Security settings

Most of these are switches in the repository settings. They cost nothing and are easy to forget.

4. CI and releases

Reliability you can prove: nothing is called done until a check says so.

5. Documentation and discovery

If people can't find it or read it, the rest doesn't matter.

The checklist for my next project

The short version, in the order I do it.

  1. Ignore rules for every kind of private data, plus a CI step that fails if any of it is committed.
  2. Synthetic or openly licensed test files only; record the license next to them.
  3. README, LICENSE, CHANGELOG with a written public contract, SECURITY.md, CLAUDE.md, and a prompts.md that improves itself.
  4. Description, website link and topics in the About box; a 1280 x 640 social preview image.
  5. Private vulnerability reporting, secret scanning, push protection, Dependabot alerts and security updates.
  6. Nightly Dependabot updates: patch and minor merge themselves after CI, majors wait for me.
  7. Read-only default workflow token; a permissions block in every workflow.
  8. Actions pinned to commit hashes, enforced in the settings; dependencies pinned to the latest stable or LTS release.
  9. Rulesets: no deletion or force pushes on main; pull requests need CI to pass.
  10. CI with lint, the data guard and an end-to-end run on the one supported platform.
  11. A go-ahead gate that rehearses a fresh install at the target size before any release.
  12. A release workflow that checks tag, version and dated changelog agree, then runs CI again.
  13. Documentation built strictly and link-checked locally before Pages publishes it.
  14. A search for client identifiers and local paths before every commit and release.
  15. Wiki and Projects off, merged branches deleted; the repository featured on my profile and on this site.