summaryrefslogtreecommitdiff
path: root/internal/cli
AgeCommit message (Collapse)Author
2026-03-28feat(sync): auto-sync full backups and showcase cgit linksv0.17.0Paul Buetow
2026-03-19chore(release): bump version to 0.15.7v0.15.7Paul Buetow
Increase full sync recent-days window from 7 to 17 days. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18feat(ai): add opencode as default AI tool for releases and showcasesv0.15.6Paul Buetow
Replace amp with opencode (local Ollama gpt-oss:120b) as the default AI tool. Opencode is tried first in both release notes generation and showcase summaries, with amp as the first fallback in the chain: opencode → amp → hexai → claude → aichat. Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-03-11feat(sync): enforce daily repo sync intervalsPaul Buetow
2026-03-11refactor(internal): extract sync and summary helpersPaul Buetow
2026-03-11fix(cli): return handler errors consistentlyPaul Buetow
2026-03-11feat(sync): randomize repository sync orderv0.14.0Paul Buetow
2026-02-22fix(cli): avoid dynamic format strings in PrintfPaul Buetow
2026-02-07feat(sync): add throttled sync modev0.12.0Paul Buetow
Introduce an opt-in throttle that skips inactive repos based on local activity and per-repo cooldowns, and bump the version to 0.12.0. Co-authored-by: Cursor <cursoragent@cursor.com>
2025-10-31feat: implement amp AI tool support and replace Taskfile with Magev0.10.0Paul Buetow
- Add amp as default AI tool for release notes and showcase generation - Fallback chain: amp → hexai → claude → aichat - Replace Taskfile.yaml with magefile.go for build automation - Update all documentation (README.md, AGENTS.md, doc/development.md) - Update version to 0.10.0 Amp-Thread-ID: https://ampcode.com/threads/T-735ba1e2-0255-4b43-8ed1-6c0d2f78301b Co-authored-by: Amp <amp@ampcode.com>
2025-09-08chore(version): bump to 0.9.2v0.9.2Paul Buetow
2025-08-31some fixesPaul Buetow
2025-08-19feat(sync): sync repository descriptions across Codeberg and ↵v0.9.0Paul Buetow
GitHub\n\nfeat(version): bump to v0.9.0
2025-08-16feat(release): add repo/tag skip_releases and logs; bump version to 0.8.7v0.8.7Paul Buetow
2025-07-19feat: add aichat support for showcase project descriptionsv0.8.1Paul Buetow
- Add --ai-tool flag to showcase command (default: claude) - Support aichat as alternative to claude for generating project summaries - When using aichat, read README.md and pipe it as input - Update documentation and examples - Bump version to 0.8.1 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19feat: add support for aichat as AI tool for release notesv0.8.0Paul Buetow
- Add --ai-tool flag to release and sync commands - Support both 'claude' and 'aichat' options (default: claude) - Update GenerateAIReleaseNotes to handle both tools - Add tool-specific error messages and hints - Update documentation with usage examples This allows users to choose between Claude CLI and aichat for generating AI-powered release notes. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-15add vibe coding infoPaul Buetow
2025-07-13fix: change default config path to ~/.config/gitsyncer/config.jsonPaul Buetow
- Add .json extension to default config path for clarity - Update all documentation and help text - Update config search paths to include the new default The new default path is ~/.config/gitsyncer/config.json (previously ~/.config/gitsyncer/config) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-13chore: bump version to 0.7.1v0.7.1Paul Buetow
Bug fixes and improvements: - Fix AI release notes now enabled by default - Add better error handling for Codeberg release creation - Add debugging for token loading in release management - Handle Gitea API "Release is has no Tag" error gracefully 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-13fix: update default config path to follow XDG Base Directory specPaul Buetow
- Change default config from ~/.gitsyncer.json to ~/.config/gitsyncer/config - Update all documentation and help text to reflect new path - LoadConfig still checks common locations for backward compatibility: - ./gitsyncer.json - ~/.config/gitsyncer/config (new default) - ~/.gitsyncer.json This follows the XDG Base Directory specification for better organization of configuration files. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-12feat: clear cache and track failed AI release note generationsPaul Buetow
- Clear cache entry when AI generation fails to allow retry - Track all failed generations for summary at end - Save cache immediately after clearing failed entry - Show helpful summary of failed releases at the end - Suggest running again to retry failed generations - Handle both GitHub and Codeberg org names in failure tracking 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-12feat: save AI release notes cache after each successful generationPaul Buetow
- Save cache immediately after each Claude CLI success - Prevents losing work if process is interrupted - Remove verbose save messages since saving more frequently - Show cache summary only at the end if new entries were added - More resilient to crashes or user interruptions 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-12feat: add persistent caching for AI release notesPaul Buetow
- Cache AI-generated release notes to .gitsyncer-ai-release-notes-cache.json - Persist cache between gitsyncer runs to avoid regenerating notes - Only cache when Claude CLI succeeds (not on failures) - Honor --force flag to regenerate notes ignoring cache - Display when using cached vs generating new notes - Save cache file in work directory for easy management 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-12feat: improve AI release notes generationPaul Buetow
- Display Claude CLI command being executed with prompt length - Cache AI-generated release notes to avoid regenerating for same tag - Use cached notes when creating/updating releases on different platforms - Show when falling back to different Claude models 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-12fix: make --check-releases scan all repositories in work directoryPaul Buetow
- Previously only checked repositories listed in config (which was empty) - Now scans all git repositories found in work directory - Removed duplicate code for checking public repositories 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-12fix: remove verbose token loading messagesPaul Buetow
- Only show warnings when no token is found at all - Silent token loading from files when successful 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-12feat: add AI-powered release notes generationPaul Buetow
- Add --ai-release-notes flag to generate prose release notes using Claude CLI - Add --update-releases flag to update existing releases with AI notes - Implement GetDiffBetweenTags to extract code changes between versions - Integrate Claude CLI for intelligent release note generation - Support fallback to multiple Claude models (sonnet-3.5, sonnet-4, default) - Always print release notes to stdout for visibility - Fix token loading messages to only show when falling back from config 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-12feat: add automatic release checking and creationPaul Buetow
- Add --check-releases flag for manual release checking - Enable automatic release checking after sync operations by default - Add --no-check-releases flag to disable automatic checking - Add --auto-create-releases flag for unattended release creation - Generate release notes from commit history - Support version tag formats: vX.Y.Z, vX.Y, vX, X.Y.Z, X.Y, X - Use tokens from gitsyncer config (with fallback to env vars and files) - Show release notes preview before creating releases - Group commits by type (features, fixes, other) in release notes
2025-07-09feat: add --batch-run flag for weekly automated syncPaul Buetow
- Add --batch-run flag that enables --full and --showcase - Implement state management to track last batch run timestamp - Enforce one-week minimum interval between batch runs - Save state to .gitsyncer-state.json in work directory - Show state file location in output messages - Bump version to 0.5.0 This feature enables automated weekly full synchronization from cron or shell scripts while preventing excessive API usage. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-07feat: add comprehensive showcase generation with metadata and imagesPaul Buetow
- Add --showcase flag to generate project showcases using Claude - Extract repository metadata (languages, commits, LOC, dates, license) - Support image extraction from README files (local and remote) - Add caching with --force flag to regenerate - Add exclude_from_showcase config option - Add standalone showcase mode (--showcase without sync) - Sort projects by recent activity (avg age of last 100 commits) - Output in Gemini Gemtext template format (.gmi.tpl) - Fix backup location fetching when --backup flag not set 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-03feat: add SSH backup locations with --backup flagv0.2.0Paul Buetow
- Add support for SSH backup locations (e.g., paul@server:git/) - Backup locations are one-way only (push only, never pull) - Automatic bare repository creation on SSH servers - Add --backup flag to opt-in to backup syncing - Backup locations are disabled by default for offline resilience - Update version to 0.2.0 This allows users to maintain private backups on home servers that may be offline without affecting regular sync operations. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-28feat: add --delete-repo command to delete repositories from all organizationsPaul Buetow
- Added --delete-repo flag that accepts a repository name - Implemented DeleteRepo() methods in both GitHub and Codeberg API clients - Created HandleDeleteRepo handler with interactive confirmation - Shows clear status of repository across all configured organizations - Requires user to type "yes" to confirm deletion - Provides detailed feedback on success/failure for each deletion - Updated documentation and usage help 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-27feat: implement --create-codeberg-reposPaul Buetow
2025-06-26add cleanPaul Buetow
2025-06-25feat: add configurable work directory with default ~/git/gitsyncer-workdirPaul Buetow
- Add work_dir field to configuration file - Set default work directory to ~/git/gitsyncer-workdir (avoiding conflict with source repo) - Support home directory expansion (~/) in work_dir config - Command-line --work-dir flag takes precedence over config file - Automatically create work directory if it doesn't exist 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24refactor: use value semantics for GitHub and Codeberg clientsPaul Buetow
- Changed github.NewClient() to return Client instead of *Client - Changed codeberg.NewClient() to return Client instead of *Client - Updated sync_handlers.go to handle value semantics properly - Both clients only contain immutable string fields, making value semantics more appropriate docs: add comprehensive documentation - Added doc/ directory with full documentation - Created architecture overview explaining system design - Added complete API reference for all packages, types, and functions - Created configuration guide with examples - Added usage examples and common workflows - Created development guide for contributors - Updated README with links to documentation 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24feat: add branch exclusion feature with regex patternsPaul Buetow
Users can now exclude branches from synchronization using regex patterns in the configuration file. This is useful for: - Excluding temporary or experimental branches - Skipping vendor or third-party branches - Ignoring deployment-specific branches Configuration example: ```json { "exclude_branches": [ "^codex/", // Exclude branches starting with "codex/" "^temp-", // Exclude branches starting with "temp-" "-wip$" // Exclude branches ending with "-wip" ] } ``` Features: - Regex pattern matching for flexible exclusion rules - Clear reporting of excluded branches during sync - Excluded branches are filtered from sync but still analyzed for abandonment - Invalid regex patterns are reported but don't stop sync The feature helps maintain cleaner synchronization by allowing users to ignore branches that shouldn't be synchronized across all repositories. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24feat: add abandoned branch detection and reportingPaul Buetow
Automatically detects and reports abandoned branches during sync operations: - Branches are considered abandoned if they have no commits for 6+ months - Only reports on active repositories (main/master updated within last year) - Shows individual reports during sync of each repository - Displays comprehensive summary after sync-all operations - Provides helpful cleanup commands for removing old branches This helps maintain cleaner repositories by identifying stale branches that may no longer be needed. Example output: 🔍 Abandoned branches in dtail: Main branch last updated: 2025-04-17 Found 1 abandoned branches (no commits for 6+ months): - develop (last commit: 2023-10-05, No commits for 628 days) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24refactor: break down large functions into smaller, focused onesPaul Buetow
Major refactoring to improve code maintainability: 1. Split main.go (481 lines → 72 lines) into internal/cli package: - flags.go: Command-line flag definitions and parsing - handlers.go: General command handlers (version, config, list operations) - sync_handlers.go: Sync-specific handlers for all sync operations 2. Refactored sync.go to extract logic into separate files: - git_operations.go: Git command helpers (merge, push, fetch, etc.) - repository_setup.go: Repository initialization and remote configuration - branch_sync.go: Branch synchronization helpers 3. Reduced function sizes to meet 30-line guideline: - syncBranch: 104 lines → 26 lines - SyncRepository: 97 lines → 44 lines - main(): 465 lines → 63 lines - getAllBranches: 32 lines → 9 lines All functionality remains the same, but the code is now more modular, testable, and easier to understand. Each function has a single, clear responsibility. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>