mirror of
https://github.com/tiennm99/goclaw.git
synced 2026-06-10 06:10:46 +00:00
5987349b0d
* fix(ci): skip CI condition in semantic-release for main branch go-semantic-release auto-detects the default branch from GitHub API (which is dev), but releases are cut from main. The CI condition rejects runs on non-default branches. Use --no-ci to bypass this check since the workflow already gates on push to main. * docs: document CI/CD pipelines, release flow, and v2.66.0 changelog - CLAUDE.md: add CI/CD & Releases section with workflow table, tag patterns, Docker variants, beta/desktop release commands - CONTRIBUTING.md: expand Releases section with standard (auto), beta (manual tag), and desktop release workflows - docs/17-changelog.md: add v2.66.0 entry covering IDOR fix, BytePlus provider, per-agent grants, beta pipeline, and CI fixes * fix(telegram): handle group-to-supergroup migration seamlessly When a Telegram group upgrades to a supergroup, the chat ID changes and all existing references become stale. This caused send failures (400), orphaned sessions, and required manual re-pairing. Add dual-path migration handling: - Proactive: intercept inbound MigrateToChatID before isServiceMessage - Reactive: detect 400 + MigrateToChatID on send, migrate DB, retry DB migration updates in a single transaction (scoped by tenant + channel): - paired_devices: sender_id, chat_id - sessions: session_key, user_id - channel_contacts: sender_id - channel_pending_messages: history_key Also invalidates in-memory caches (approvedGroups, pairingReplySent, groupHistory) and handles media sends via migration retry in Send().
3.6 KiB
3.6 KiB
Contributing to GoClaw
Branch Strategy
main (stable, protected — owner-only merge)
└── dev (default target for all PRs)
├── feat/xxx
├── fix/xxx
└── ...
Rules
- All PRs target
dev—mainis frozen for stable releases - Hotfixes — PR to
main, then cherry-pick todev - Releases — owner merges
dev→mainwhen stable - Direct push to
main— blocked (ruleset enforced)
Branch Naming
feat/description— new featuresfix/description— bug fixeshotfix/description— urgent production fixes (targetmain)refactor/description— code improvementsdocs/description— documentation changes
PR Guidelines
Before Submitting
go fix ./... # Apply Go upgrades
go build ./... # PG build check
go build -tags sqliteonly ./... # Desktop build check
go vet ./... # Static analysis
go test -race ./... # Tests with race detector
For web UI changes:
cd ui/web && pnpm build
PR Review Criteria
Based on our automated review checklist:
- Correctness: No logic errors, nil dereference, race conditions
- Security: Parameterized SQL, no hardcoded secrets, input validation
- Breaking changes: API contracts, DB migrations, config format
- Tenant isolation: All queries scoped by
tenant_id - i18n: User-facing strings in all 3 locales (en/vi/zh)
- SQLite parity: Changes compile with
-tags sqliteonly - Mobile UI:
h-dvhnoth-screen, 16px input fonts, safe areas
Commit Messages
Use conventional commits:
feat: add user preferences API
fix: prevent race condition in session cleanup
docs: update API reference for v2 endpoints
refactor: extract provider retry logic
Workflow
Developer Reviewer Owner
│ │ │
├─ create feat/xxx ──────────┤ │
├─ PR → dev ─────────────────┤ │
│ ├─ review + approve │
│ ├─ CI passes ──────────┤
│ │ ├─ merge to dev
│ │ │
│ │ (when stable) ├─ PR dev → main
│ │ ├─ merge → auto release
│ │ │ (semantic-release)
Releases
Standard (automatic)
Merge dev → main. go-semantic-release analyzes commit messages and auto-creates:
- GitHub Release with version tag (
vX.Y.Z) - Cross-platform binaries (linux/darwin × amd64/arm64)
- Docker images (4 variants: latest, base, full, otel + web)
- SHA256 checksums
- Discord notification
Beta (manual tag)
Push a beta tag from dev to create a prerelease:
# Standard beta — builds Docker + Linux binaries
git tag v2.67.0-beta.1
git push origin v2.67.0-beta.1
# Desktop beta — builds macOS .dmg + Windows .exe
git tag lite-v1.2.0-beta.1
git push origin lite-v1.2.0-beta.1
Beta releases are marked as prerelease on GitHub and use :beta rolling Docker tag.
Desktop / Lite
Push a lite-v* tag to build desktop apps:
git tag lite-v1.1.0
git push origin lite-v1.1.0
Tags with -beta or -rc suffix automatically create prereleases.