| Age | Commit message (Collapse) | Author |
|
|
|
Increase full sync recent-days window from 7 to 17 days.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
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>
|
|
|
|
|
|
|
|
|
|
|
|
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>
|
|
- 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>
|
|
|
|
|
|
GitHub\n\nfeat(version): bump to v0.9.0
|
|
|
|
- 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>
|
|
- 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>
|
|
|
|
- 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>
|
|
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>
|
|
- 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>
|
|
- 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>
|
|
- 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>
|
|
- 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>
|
|
- 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>
|
|
- 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>
|
|
- 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>
|
|
- 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>
|
|
- 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
|
|
- 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>
|
|
- 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>
|
|
- 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>
|
|
- 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>
|
|
|
|
|
|
- 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>
|
|
- 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>
|
|
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>
|
|
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>
|
|
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>
|