{"id":26931434,"url":"https://github.com/nikolainobadi/nnex","last_synced_at":"2026-05-16T22:04:56.443Z","repository":{"id":285481271,"uuid":"951559801","full_name":"nikolainobadi/nnex","owner":"nikolainobadi","description":"Utility to manage swift executables and streamline distribution with Homebrew","archived":false,"fork":false,"pushed_at":"2025-04-01T00:43:07.000Z","size":968,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-01T01:31:31.621Z","etag":null,"topics":["command-line-tool","macos","swift","swiftdata","swiftdata-example","swiftpackage","testing"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nikolainobadi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-19T21:53:40.000Z","updated_at":"2025-04-01T00:37:46.000Z","dependencies_parsed_at":"2025-04-01T01:41:47.867Z","dependency_job_id":null,"html_url":"https://github.com/nikolainobadi/nnex","commit_stats":null,"previous_names":["nikolainobadi/nnex"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikolainobadi%2Fnnex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikolainobadi%2Fnnex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikolainobadi%2Fnnex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikolainobadi%2Fnnex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nikolainobadi","download_url":"https://codeload.github.com/nikolainobadi/nnex/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246769914,"owners_count":20830771,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["command-line-tool","macos","swift","swiftdata","swiftdata-example","swiftpackage","testing"],"created_at":"2025-04-02T07:17:24.328Z","updated_at":"2026-05-16T22:04:56.437Z","avatar_url":"https://github.com/nikolainobadi.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# nnex\n\n![Build Status](https://github.com/nikolainobadi/nnex/actions/workflows/ci.yml/badge.svg)\n![Swift Version](https://badgen.net/badge/swift/6.0%2B/purple)\n![Platform](https://img.shields.io/badge/platform-macOS%2014-blue)\n![License](https://img.shields.io/badge/license-MIT-lightgray)\n\n**nnex** is a command-line tool that streamlines the distribution of Swift command-line executables via **Homebrew**.\nWith a single command, **nnex** handles it all:\n\n- ✅ Build optimized universal binaries for ARM and Intel architectures.\n- ✅ Strip symbols to reduce binary size.\n- ✅ Create a new Homebrew tap if needed.\n- ✅ Create a GitHub release and attach the binary asset.\n- ✅ Generate and upload a Homebrew formula to your Homebrew tap.\n\nInstead of manually managing taps and formulae, let **nnex** do the heavy lifting for you.\n**nnex** also supports importing your own Homebrew taps to leverage existing setups.\n\n**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).\n\nIf you're curious about some of the struggles I went through to get SwiftData to work in a standalone Swift Package and in a CI workflow, I wrote an article outlining my journey that you can [check out here.](https://medium.com/@nikolai.nobadi/integrating-swiftdata-into-standalone-swift-packages-6cbcb45e5893)\n\n## Table of Contents\n- [Installation](#installation)\n- [Commands](#commands)\n  - [Brew Commands](#brew-commands)\n    - [Publish](#publish)\n  - [Config Commands](#config-commands)\n- [Contributing](#contributing)\n- [License](#license)\n- [Acknowledgements](#acknowledgements)\n\n## Installation\nInstall **nnex** with Homebrew\n\n```bash\nbrew tap nikolainobadi/nntools\nbrew install nnex\n```\n\nAlternatively, you can install it directly:\n```bash\nbrew install nikolainobadi/tap/nnex\n```\n\n## Commands\n**nnex** utilizes three subcommands: `Brew`, `Build`, and `Config`.\n\n- **Brew commands** are used to interact with Homebrew and GitHub\n- **Build commands** handle local binary building\n- **Config commands** are used to set preferences\n\nThe tool follows a clean architecture with separation of concerns between command parsing, business logic, and infrastructure.\n\n## Brew Commands\n\n### Publish\nThe `publish` command is the most important command in **nnex**. It allows you to build a binary, create a new GitHub release, upload the binary, and optionally publish a Homebrew formula. This command streamlines the entire process of distributing your executable.\n\n![Publish Command Demo](Resources/nnex-publish-demo.gif)\n\n#### Basic Usage:\n```swift\nnnex brew publish\n```\nThis command runs in the current directory and prompts you for any missing information.\n\nTo streamline the command and skip interactive prompts, include version, notes/notes-file, and a commit-message in the command.\n\n```bash\nnnex brew publish --version 1.0.0 --notes-file MyReleaseNotes.md --commit-message \"Updated the formula for MyCoolTool\" --skip-tests\n```\n\nIf a required option is not specified, `nnex` will prompt you to enter it interactively.\n\nIf both `--notes` and `--notes-file` are provided, the command will throw an error since they are mutually exclusive.\n\nFor more details and advanced usage, refer to the [Command Reference](./docs/COMMANDS.md).\n\n## Config Commands\nTo configure where any new Homebrew taps are created:\n```bash\nnnex config set-list-path /path/to/tap/folder\n```\n\nTo display the current tap list folder path:\n```bash\nnnex config show-list-path\n```\n\nTo open the tap list folder in Finder:\n```bash\nnnex config open-list-folder\n```\n\nTo set the default binary build type:\n```bash\nnnex config set-build-type release\n```\n\n## Contributing\n\nContributions are welcome! If you'd like to improve a command, add new integrations, or fix bugs:\n\n1. Fork the repo\n2. Create a new branch\n3. Submit a PR with a clear description\n\nIssues and suggestions are also welcome via [GitHub Issues](https://github.com/nikolainobadi/nnex/issues).\n\n## Acknowledgements\n\n### Third-Party Libraries\n\n#### My Libraries\n- [SwiftPickerKit](https://github.com/nikolainobadi/SwiftPickerKit) - Interactive command-line selection interfaces\n- [NnGitKit](https://github.com/nikolainobadi/NnGitKit) - Git operations wrapper (GitShellKit)\n- [NnShellKit](https://github.com/nikolainobadi/NnShellKit) - Shell command execution utilities\n- [NnSwiftDataKit](https://github.com/nikolainobadi/NnSwiftDataKit) - SwiftData utilities and extensions\n\n#### External Libraries\n- [Swift Argument Parser](https://github.com/apple/swift-argument-parser) - Command-line argument parsing\n- [Files](https://github.com/JohnSundell/Files) - File system operations\n\n## License\n\n`nnex` is available under the MIT license. See the [LICENSE](LICENSE) file for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnikolainobadi%2Fnnex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnikolainobadi%2Fnnex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnikolainobadi%2Fnnex/lists"}