Skip to content

CI/CD & Releases

import { Aside } from ‘@astrojs/starlight/components’;

Orimora uses GitHub Actions for continuous integration and Coolify webhooks for continuous deployment. Releases follow Semantic Versioning.

main ← production-ready, tagged releases
dev ← integration branch, all feature work merges here first
feature/*, fix/*, chore/* ← short-lived branches from dev
BranchPurposeMerges into
mainStable releases, deployed to production
devIntegration and testingmain (via PR)
feature/<name>New featuresdev
fix/<name>Bug fixesdev (or main for hotfixes)
chore/<name>Tooling, dependency updatesdev
hotfix/<name>Critical production fixesmain directly

Runs on every push to main/dev and on every PR targeting those branches.

JobWhat it does
Lint & Typecheckoxlint, prettier --check, svelte-check
Unit Testsvitest run with PostgreSQL + Redis services
Production Buildvite build — verifies the app compiles
Docker BuildBuilds the Docker image (dry run, no push)
Security Audityarn audit --level moderate

All jobs must pass before a PR can be merged.

Release Pipeline (.github/workflows/release.yml)

Section titled “Release Pipeline (.github/workflows/release.yml)”

Triggered by pushing a version tag (v*).

StepWhat it does
Build Docker imageMulti-arch (linux/amd64 + linux/arm64)
Push to GHCRghcr.io/defcon1702/orimora:<version> + :latest
Create GitHub ReleaseAuto-generated release notes
Terminal window
# 1. On dev branch, update version
yarn version --new-version 0.2.0
# 2. Update CHANGELOG.md
# 3. Create PR: dev → main
gh pr create --title "Release v0.2.0" --body "..."
# 4. After merge, tag and push
git checkout main && git pull
git tag v0.2.0
git push origin v0.2.0

The tag push triggers the release workflow automatically.

Orimora follows Semantic Versioning (vMAJOR.MINOR.PATCH):

  • MAJOR — breaking API or schema changes
  • MINOR — new features, backwards-compatible
  • PATCH — bug fixes

Pre-release versions use suffixes: v0.1.0-beta.1, v0.1.0-rc.1.

Coolify listens for GitHub webhooks and triggers a build+deploy when:

  • A push lands on the configured branch (main)
  • The changed files match the Watch Paths (if configured)

No additional CI/CD configuration is needed for deployment — Coolify handles the Docker build and rolling restart.

All commits follow Conventional Commits:

feat: add tag filtering to sidebar
fix: prevent duplicate document creation
refactor: extract search into dedicated service
test: add permission check unit tests
docs: update deployment guide
chore: upgrade drizzle-orm

Breaking changes use ! and a BREAKING CHANGE: footer:

feat!: change document API response format
BREAKING CHANGE: documents.list now returns paginated wrapper