Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 74 additions & 33 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,56 +7,97 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.10.0] - 2025-09-10
## [0.9.2] - 2025-09-10

### Added
- AI-powered release notes generation using Claude Code CLI
- Configuration option to enable/disable AI release functionality
- Comprehensive test suite reorganization and base classes for shared folder management
- New `nnex config set-ai-release-enabled` and `nnex config show-ai-release-enabled` commands
- Changelog guidelines documentation for consistent release notes

### Changed
- Test infrastructure improved to use `xcodebuild` instead of `swift test` for SwiftData compatibility
- Publish workflow now includes optional AI-generated release notes as fourth option
- Test suite architecture consolidated with shared patterns and utilities
- Enhanced mock shell command mapping for better test reliability
- Project changelog documentation

### Fixed
- Flaky tests related to temporary folder cleanup in publish tests
- Formula path update restored in PublishInfoLoader for proper Homebrew integration
- Test environment issues with proper mock factory parameter passing

### Security
- Removed unused AI changelog generator functionality to reduce attack surface
- Formula path update in publish workflow for proper Homebrew integration

## [0.9.1] - 2025-09-02

### Fixed
- Test hang bug with comprehensive error handling improvements in ProjectBuilder
- Application hang during project building operations

## [0.9.0] - 2025-08-26

### Added
- Binary archiving with tar.gz compression for releases
- Binary stripping functionality to reduce executable size
- Comprehensive execution manager architecture for build, publish, and create-tap operations
- Executable name resolution service for automatic binary naming
- Binary copy utilities with desktop and custom output location support
- Enhanced SwiftData test isolation with unique stores per test

### Changed
- Major folder reorganization with improved separation between Commands, Core, Domain, and Infrastructure layers
- Build command moved from `BuildExecutable/` to `BuildCommand/` folder structure
- All helper classes reorganized into appropriate domain layers (Handlers, Services, Utilities)
- Consistent manager pattern implementation across all major commands
- Enhanced test architecture with better mock factory support

### Fixed
- Binary uploading to ensure consistent SHA256 between formula and GitHub releases
- GitHub release creation workflow with proper tar.gz asset handling
- Test suite reliability with improved SwiftData context management
- CreateTap command functionality and associated test coverage
- CreateTap command functionality

### Security
- Binary stripping removes debug symbols reducing attack surface

## [0.8.12] - 2025-08-25

### Added
- Binary stripping functionality to reduce executable size

## [0.8.11] - 2025-08-25

### Fixed
- Binary uploading to ensure consistent SHA256 between formula and GitHub releases

## [0.8.10] - 2025-08-25

### Added
- Binary archiving with tar.gz compression format

## [0.8.9] - 2025-08-25

### Fixed
- GitHub release creation workflow with proper binary uploading

## [0.8.8] - 2025-08-25

### Added
- Support for uploading multiple binaries in single GitHub release

### Security
- Binary stripping removes debug symbols reducing attack surface
## [0.8.7] - 2025-08-16

### Fixed
- Auto version incrementing bug

## [0.8.6] - 2025-08-16

### Added
- Auto version incrementing with commit and push during publish workflow

## [0.8.5] - 2025-08-11

### Added
- Automatic version incrementing functionality

## [0.8.4] - 2025-08-11

### Added
- Archive command for macOS binary packaging
- Formula name sanitation for proper Homebrew formula generation

## [0.8.3] - 2025-07-13

### Added
- Version command to display current tool version
- Enhanced build command with improved error handling

## [0.8.2] - 2025-04-27

### Fixed
- Formula path synchronization bug during publish workflow

## [0.8.1] - 2025-04-27

### Fixed
- Project folder path consistency issues

## [0.8.0] - 2025-04-21

### Added
- Enhanced build command functionality
35 changes: 4 additions & 31 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,39 +112,13 @@ The tool supports multiple build configurations:
- macOS 14+ minimum deployment target
- Swift 6.0+ required
- Requires Homebrew and GitHub CLI (`gh`) for full functionality
- Optional: Claude Code CLI for AI release notes generation

## AI Integration

### AI Release Notes
The publish workflow includes optional AI-powered release notes generation using Claude Code:

- **Enable AI**: Configure `aiReleaseEnabled` in app settings to show AI option
- **Automatic generation**: AI analyzes git history and project context to create release notes
- **Integration**: Uses `claude code edit` command to generate markdown files
- **Conditional UI**: AI option only appears in picker when feature is enabled
- **Fallback handling**: Graceful degradation when Claude Code CLI unavailable

### AI Architecture
- `AIReleaseNotesHandler`: Core AI functionality for release notes generation
- `ReleaseNotesHandler`: Orchestrates all release notes options including AI
- Conditional enum cases: `NoteContentType.aiGenerated` only available when enabled
- Error handling: `ReleaseNotesError.missingAIRequirements` for validation
- Testing: Comprehensive coverage of AI scenarios in `ReleaseNotesHandlerTests`

## Recent Improvements

### September 2025 - AI Release Notes Integration
- **AI-powered release notes**: Integrated AI release notes generation into the publish workflow
- **Conditional feature availability**: AI options only appear when `aiReleaseEnabled` is configured
- **Comprehensive testing**: Added complete test coverage for AI functionality scenarios
- **Clean architecture**: AI integration follows existing dependency injection patterns

### Key AI Features
- Four release notes options: Direct input, file path, create new file, and AI generation
- AI option uses Claude Code to generate release notes from git history and project context
- Backward compatibility maintained - existing workflows unchanged when AI disabled
- Error handling for missing AI requirements (release number, project path, shell)
### September 2025 - Documentation and Maintenance
- **Project changelog**: Added comprehensive changelog documentation with complete project history
- **Test infrastructure**: Improved test suite reliability and organization
- **Documentation updates**: Updated project documentation and removed unused features

### August 2024 - Architecture Refactoring
- **Improved folder organization**: Clear separation between Commands, Core, Domain, and Infrastructure layers
Expand All @@ -156,7 +130,6 @@ The publish workflow includes optional AI-powered release notes generation using
- Test infrastructure improved with `@MainActor` pattern for SwiftData compatibility
- Fixed test environment issues with proper mock factory parameter passing
- All execution managers now have comprehensive unit test coverage
- Removed legacy `AIChangeLogGenerator` functionality from publish workflow

### Known Issues
- SwiftData may show "Unable to determine Bundle Name" errors at the end of test runs (tests still execute successfully)
Expand Down
28 changes: 1 addition & 27 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,13 @@ With a single command, **nnex** handles it all:
- ✅ Create a new Homebrew tap if needed.
- ✅ Create a GitHub release and attach the binary asset.
- ✅ Generate and upload a Homebrew formula to your Homebrew tap.
- ✅ AI-powered release notes generation (optional).

Instead of manually managing taps and formulae, let **nnex** do the heavy lifting for you.
**nnex** also supports importing your own Homebrew taps to leverage existing setups.

**nnex** requires both **Homebrew** and the **GitHub CLI (gh)** to function properly. Please ensure they are installed and configured on your system before using **nnex** (you'll be prompted to install them if you use **nnex** without them).

For AI-powered release notes generation, **Claude Code CLI** is also required and can be enabled in app settings.

**Stability Notice (v0.9.1)**
**Stability Notice (v0.9.2)**
`nnex` is functional and ready to use, but its features and API may evolve as it becomes more flexible and robust.
Breaking changes are possible before reaching v1.0.0.
Your feedback and suggestions are welcome as the project continues to improve!
Expand Down Expand Up @@ -85,19 +82,6 @@ If a required option is not specified, `nnex` will prompt you to enter it intera

If both `--notes` and `--notes-file` are provided, the command will throw an error since they are mutually exclusive.

#### AI Release Notes
When enabled in app settings, the publish command offers an additional AI-powered option for generating release notes:

- **Automatic Generation**: AI analyzes git history, commits, and project context
- **Claude Code Integration**: Uses the Claude Code CLI to create comprehensive release notes
- **Smart Parsing**: Can extract existing release notes from CHANGELOG.md if available
- **Fallback Support**: Gracefully handles missing dependencies or configuration

To enable AI release notes:
1. Install Claude Code CLI
2. Configure `aiReleaseEnabled` setting in the app
3. During publish, select "Generate with AI" from the release notes options

For more details and advanced usage, refer to the [Command Reference](./docs/COMMANDS.md).

## Config Commands
Expand All @@ -121,16 +105,6 @@ To set the default binary build type:
nnex config set-build-type release
```

To enable AI-powered release notes generation:
```bash
nnex config set-ai-release-enabled true
```

To check if AI release notes are enabled:
```bash
nnex config show-ai-release-enabled
```

## Contributing

Contributions are welcome! If you'd like to improve a command, add new integrations, or fix bugs:
Expand Down
2 changes: 1 addition & 1 deletion Sources/nnex/Commands/Main/nnex.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import ArgumentParser
struct Nnex: ParsableCommand {
static let configuration = CommandConfiguration(
abstract: "Utility to manage swift command line tools and streamline distrubution with Homebrew.",
version: "v0.10.0",
version: "v0.9.2",
subcommands: [
Brew.self,
Build.self,
Expand Down