TNT/docs/CICD.md

2.8 KiB

CI / RELEASE GUIDE

AUTOMATIC TESTING

Every push or PR automatically runs:

  • Build on Ubuntu
  • AddressSanitizer build
  • Unit and strict integration tests
  • Per-IP concurrency and connection-rate limit tests
  • Release/package preflight (make release-check)

Check status: https://github.com/m1ngsama/TNT/actions

Production deployment is intentionally manual. The CI workflow must not SSH into production or restart services on push.

CREATING RELEASES

  1. Update version metadata:

    • include/common.h
    • tnt.1
    • docs/CHANGELOG.md
    • packaging/arch/PKGBUILD
    • packaging/homebrew/tnt-chat.rb
  2. Run the local preflight: make release-check

  3. Replace package checksum placeholders and run: make release-check-strict

  4. Create and push tag: git tag v1.0.0 git push origin v1.0.0

  5. GitHub Actions automatically:

    • Builds binaries (Linux/macOS, AMD64/ARM64)
    • Creates a draft release
    • Uploads binaries
    • Generates one checksums.txt file
    • Verifies that artifact architecture matches the asset name
  6. Review the draft release, smoke-test downloaded assets, then publish it manually from GitHub.

  7. Release appears at: https://github.com/m1ngsama/TNT/releases

DEPLOYING TO SERVERS

Deployments are operator-driven:

  1. Build and test locally or in a temporary server directory.
  2. Back up the installed binary.
  3. Install the new binary.
  4. Restart the service.
  5. Run black-box checks (health, stats --json, users --json, support, and a post/tail smoke test).

The installer can still be used manually on a server: curl -sSL https://raw.githubusercontent.com/m1ngsama/TNT/main/install.sh | sh

PRODUCTION SETUP (systemd)

  1. Install binary (see above)

  2. Setup service: sudo useradd -r -s /bin/false tnt sudo mkdir -p /var/lib/tnt sudo chown tnt:tnt /var/lib/tnt sudo cp tnt.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now tnt

  3. Check status: sudo systemctl status tnt sudo journalctl -u tnt -f

UPDATING SERVERS

Manual binary replacement pattern: backup=/usr/local/bin/tnt.bak-$(date +%Y%m%d%H%M%S) sudo cp -a /usr/local/bin/tnt "$backup" sudo install -m 755 ./tnt /usr/local/bin/tnt sudo systemctl restart tnt

PLATFORMS SUPPORTED

✓ Linux AMD64 (x86_64) ✓ Linux ARM64 (aarch64) ✓ macOS Intel (x86_64) ✓ macOS Apple Silicon (arm64)

EXAMPLE WORKFLOW

Local development

make && make asan && make release-check ./tnt

Create release

git tag v1.0.1 git push origin v1.0.1

Wait 5 minutes for builds

Deploy to production manually after validation

ssh server "sudo install -m 755 /tmp/tnt-build/tnt /usr/local/bin/tnt" ssh server "sudo systemctl restart tnt" ssh -p 2222 server health