mirror of
https://oauth2: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@github.com/m1ngsama/TNT.git
synced 2026-06-26 10:54:38 +08:00
114 lines
2.8 KiB
Markdown
114 lines
2.8 KiB
Markdown
CI / RELEASE GUIDE
|
|
==================
|
|
|
|
AUTOMATIC TESTING
|
|
-----------------
|
|
Every push or PR automatically runs:
|
|
- Build on Ubuntu
|
|
- AddressSanitizer build
|
|
- Unit and integration 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
|