diff --git a/CHANGELOG.md b/CHANGELOG.md index 69d3897..61b9822 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 \ No newline at end of file +## [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 \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md index 471a4ff..d5ad8b9 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -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 @@ -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) diff --git a/README.md b/README.md index 2645a03..14b0c8e 100644 --- a/README.md +++ b/README.md @@ -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! @@ -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 @@ -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: diff --git a/Sources/nnex/Commands/Main/nnex.swift b/Sources/nnex/Commands/Main/nnex.swift index bfabc3e..321d748 100644 --- a/Sources/nnex/Commands/Main/nnex.swift +++ b/Sources/nnex/Commands/Main/nnex.swift @@ -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,