Release Runbook¶
Procedures for releasing DataEngineX to PyPI and rolling back.
Quick Links: Release to PyPI · Rollback · Domain & Org Setup
This runbook describes how to release dataenginex and roll back bad releases using the dev → main branch-based flow.
Release Flow¶
graph LR
Dev[dev branch] --> PR[PR: dev → main]
PR --> CI[CI passes]
CI --> Merge[Merge to main]
Merge --> VersionBump{Version bump<br/>in pyproject.toml?}
VersionBump -->|Yes| Tag[release-dataenginex.yml<br/>creates git tag + GitHub release]
Tag --> PyPI[pypi-publish.yml<br/>publishes to PyPI]
style PyPI fill:#d4edda
Pre-Release Checklist¶
- CI is green on
devbranch. CHANGELOG.mdis updated.- Version in root
pyproject.tomlis bumped (semver). - Tests pass locally:
uv run poe test. - Package builds cleanly:
uv build && twine check dist/*.
Release to PyPI¶
Trigger: Merge a PR from dev → main that contains a version bump in pyproject.toml.
# 1. Ensure dev is stable
gh pr checks <dev-pr-number>
# 2. Bump version in pyproject.toml (e.g., 0.6.0 → 0.7.0)
# Edit pyproject.toml: version = "0.7.0"
# 3. Commit version bump on dev
git add pyproject.toml CHANGELOG.md
git commit -m "chore: bump dataenginex to 0.7.0"
git push origin dev
# 4. Create promotion PR: dev → main
./scripts/promote.sh
# 5. Merge PR after CI passes
# release-dataenginex.yml automatically creates tag + GitHub release
# pypi-publish.yml automatically publishes to TestPyPI, then PyPI
Verify:
# Check release was created
gh release list
# Verify PyPI publication
pip install dataenginex==0.7.0 --dry-run
# Confirm package is importable
python -c "import dataenginex; print(dataenginex.__version__)"
Rollback¶
Yank a PyPI Release¶
PyPI does not support deletion, but a yanked release is skipped by pip install (unless explicitly requested):
Publish a Patch Release¶
# Fix the issue on dev
git checkout dev
# ... apply fix ...
# Bump to patch version (e.g., 0.7.1)
# Edit pyproject.toml: version = "0.7.1"
git add pyproject.toml
git commit -m "fix: <description of fix>"
git push origin dev
# Promote to main and release
./scripts/promote.sh
Revert a Git Tag¶
If the GitHub release was created but PyPI publish has not yet run (or failed):
# Delete tag locally and remotely
git tag -d dataenginex-v0.7.0
git push origin :refs/tags/dataenginex-v0.7.0
# Delete the GitHub release
gh release delete dataenginex-v0.7.0 --yes
Org + Domain Rollout (GitHub + Cloudflare)¶
Use this section for organization-level setup and domain cutover to thedataenginex.org.
GitHub Organization Setup¶
- Create/verify teams referenced in
CODEOWNERS: infra-teambackend-teamdata-team- Ensure each team has appropriate repo permissions.
- Enable branch/ruleset protections for
mainanddev: - Require pull request reviews
- Require status checks to pass before merge
- Enforce CODEOWNERS review where needed
- Enable Discussions for
TheDataEngineX/dataenginex. - Create at least one organization Project and define fields (status, priority, milestone).
- Configure project automation inputs:
- Variable
ORG_PROJECT_URL= full URL of the org project - Secret
ORG_PROJECT_TOKEN= PAT with project write access
GitHub Pages Setup (Docs)¶
Repository includes .github/workflows/docs-pages.yml.
- In repo settings, enable Pages and select GitHub Actions as source.
- Confirm
github-pagesenvironment is available. - Trigger workflow manually once (
Docs Pages Deploy) to bootstrap deployment. - Verify
site/CNAMEin artifact containsdocs.thedataenginex.org.
Cloudflare DNS Setup¶
Configure DNS records for thedataenginex.org:
docs.thedataenginex.org→ CNAME to<org-or-user>.github.ioapi.thedataenginex.org→ ingress/load balancer endpoint- Apex
thedataenginex.org: - CNAME flattening to chosen site host, or
- A/AAAA to website host
TLS / SSL¶
- Set Cloudflare SSL mode compatible with origin (recommended: Full / Full strict).
- Verify HTTPS for:
https://docs.thedataenginex.orghttps://api.thedataenginex.org
Fast 10–15 Minute Execution Checklist¶
- Pages source = GitHub Actions.
- Set
ORG_PROJECT_URL+ORG_PROJECT_TOKEN. - Configure Cloudflare DNS (
docs,api, apex). - Trigger workflows manually:
Docs Pages DeployProject Automation- Smoke checks:
- Docs URL resolves with HTTPS
- Test issue + PR auto-added to project
- Labels from
.github/labels.ymlare present (synced viasync-labels.yml)
Exact Post-Merge Verification Order¶
- Merge PR.
- Wait for
Docs Pages Deploysuccess. - Validate
https://docs.thedataenginex.org. - Open temporary test issue/PR and confirm project automation.
- Validate
https://api.thedataenginex.orgTLS/hostname routing. - Send controlled warning alert and verify
.orgsender/recipient behavior.
Rollback for Domain Cutover¶
- Revert Cloudflare DNS records to previous targets.
- Set DNS-only mode temporarily for diagnostics if needed.
- Re-run Pages deploy once DNS stabilizes.
Related Documentation¶
Deployment:
- CI/CD Pipeline - Complete automation guide
Operations:
- Observability - Monitor applications built on DEX
- SDLC - Development lifecycle