A package manager that installs and runs Swift command line tool packages.
$ mint run realm/SwiftLint@0.22.0 swiftlint
This would install and run SwiftLint version 0.22.0
Mint is designed to be used with Swift command line tools that build with the Swift Package Manager. It makes installing, running and distributing these tools much easier.
- ✅ builds are cached globally by version
- ✅ easily run a specific version of a tool
- ✅ use different versions of a tool side by side
- ✅ easily run the latest version of a tool
- ✅ distribute your own tools without recipes and formulas
Homebrew is a popular method of distributing Swift executables, but that requires creating a formula and then maintaining that formula. Running specific versions of homebrew installations can also be tricky as only one global version is installed at any one time. Mint installs your tool via SPM and lets you run multiple versions of that tool, which are globally installed and cached on demand.
If your Swift executable package builds with SPM, then it can be run with Mint! See Support for details.
Why is it called Mint?
Swift Packager Manager Tools -> SPMT -> Spearmint -> Mint! 🌱😄
Mint: a place where something is produced or manufactured
Make sure Xcode 9 is installed first.
$ brew tap yonaskolb/Mint https://github.com/yonaskolb/Mint.git $ brew install mint
$ git clone https://github.com/yonaskolb/Mint.git $ cd Mint $ make
Swift Package Manager
$ git clone https://github.com/yonaskolb/Mint.git $ cd Mint $ swift run mint
Use as dependency
Add the following to your Package.swift file's dependencies:
.package(url: "https://github.com/yonaskolb/Mint.git", from: "0.1.0"),
And then import wherever needed:
mint to see usage instructions.
$ mint Usage: mint [command] Available Commands: install Install a package run Run a package update Update a package list List all installed packages Use "mint [command] --help" for more information about a command.
- Install: Installs a package. If it is already installed this won't do anything
- Run: Runs a package. This will install if first if it doesn't exist
- Update: Installs a package while enforcing an update and rebuild. Shouldn't be required unless you are pointing at a branch and want to update.
These commands all have 1 or 2 arguments:
- repo (required): This can be a shorthand for a github repo
install realm/SwiftLintor a fully qualified git path
install https://github.com/realm/SwiftLint.git. In the case of
runyou can also just pass the name of the repo if it is already installed
run swiftlint. This will do a lookup of all installed packages. An optional version can be specified by appending
@version, otherwise the newest tag or master will be used. Note that if you don't specify a version, the current tags must be loaded remotely each time.
- command (optional): The command to install or run. This defaults to the the last path in the repo (so for
realm/swiftlintit will be
swiftlint). In the case of
runyou can also pass any arguments to the command but make sure the whole thing is surrounded by quotes eg
mint run realm/swiftlint "swiftlint --path source"
$ mint install yonaskolb/XcodeGen@1.2.4 "XcodeGen --spec spec.yml" # pass some arguments $ mint install yonaskolb/XcodeGen@1.2.4 # use version 1.2.4 $ mint install yonaskolb/XcodeGen # use newest tag $ mint run yonaskolb/XcodeGen@1.2.4 # run 1.2.4 $ mint run XcodeGen # use newest tag and find XcodeGen in installed tools
If your Swift command line tool builds with the Swift Package Manager than it will automatically install and run with mint! You can add this to your
Installing section in the readme:
### [Mint](https://github.com/yonaskolb/mint) ``` $ mint run github_name/repo_name ```
If your executable name is different from your repo name then you will need to append the name to the above command
The Swift Package Manager doesn't yet have a way of specifying resources directories. If your tool requires access to resources from the repo you require a custom
Package.resources file. This is a plain text file that lists the resources directories on different lines:
If this file is found in you repo, then all those directories will be copied into the same path as the executable.
A list of popular Mint compatible tools 🌱
mint run or
mint install with the following:
- $ mint run realm/SwiftLint swiftlint
- $ mint run JohnSundell/Marathon
- $ mint run yonaskolb/XcodeGen
- $ mint run yonaskolb/SwagGen
- $ mint run Carthage/Carthage
- $ mint run krzysztofzablocki/Sourcery
Feel free to add your own!
Help us keep the lights on
0.6.1 - Dec 1, 2017
- Fixed calculation of latest version #30
- Integrated SwiftPM for versioning, more integrations will follow #30
0.6.0 - Nov 30, 2017
- Fixed issues on case‐sensitive file systems #19 @SDGGiesbrecht
- Fixed updating branches and packages without checked in
- Package repos are now checked out fresh on each install #24
- If not passing a version, tags are now fetched remotely #24
- Clones are now shallow #28
mint listcommand for listing all installed package versions #25
0.5.0 - Oct 13, 2017
- BREAKING: Changed version from the second argument to an @ suffix on the repo
0.4.1 - Oct 3, 2017
- Fixed installing a package without tags when version isn't specified #7 by @orta
0.4.0 - Oct 1, 2017
- Fixed permission issues in High Sierra