All Projects → yonaskolb → Mint

yonaskolb / Mint

Licence: mit
A package manager that installs and runs executable Swift packages

Programming Languages

swift
15916 projects
Makefile
30231 projects

Projects that are alternatives of or similar to Mint

Fdroidclient
Android client application.
Stars: ✭ 477 (-72.74%)
Mutual labels:  installer, package-manager
Projeny
A project and package manager for Unity
Stars: ✭ 656 (-62.51%)
Mutual labels:  package-manager, dependency-manager
Npq
🎖safely* install packages with npm or yarn by auditing them as part of your install process
Stars: ✭ 513 (-70.69%)
Mutual labels:  command-line-tool, package-manager
Poet
Poet helps you declare, manage and install dependencies of Python projects, ensuring you have the right stack everywhere.
Stars: ✭ 312 (-82.17%)
Mutual labels:  package-manager, dependency-manager
Qdd
Download JavaScript Dependencies, really fast
Stars: ✭ 47 (-97.31%)
Mutual labels:  installer, package-manager
Athens
A Go module datastore and proxy
Stars: ✭ 3,736 (+113.49%)
Mutual labels:  package-manager, dependency-manager
Cpm.cmake
📦 CMake's missing package manager. A small CMake script for setup-free, cross-platform, reproducible dependency management.
Stars: ✭ 560 (-68%)
Mutual labels:  package-manager, dependency-manager
scoop-viewer
A gui client for scoop.
Stars: ✭ 76 (-95.66%)
Mutual labels:  package-manager, installer
Bpkg
Lightweight bash package manager
Stars: ✭ 1,601 (-8.51%)
Mutual labels:  installer, package-manager
Peru
a generic package manager, for including other people's code in your projects
Stars: ✭ 913 (-47.83%)
Mutual labels:  package-manager, dependency-manager
G
Simple go version manager, gluten-free
Stars: ✭ 307 (-82.46%)
Mutual labels:  installer, dependency-manager
Cmake Get
Get dependencies with cmake
Stars: ✭ 59 (-96.63%)
Mutual labels:  package-manager, dependency-manager
aplus
Aplus Command Line Tool
Stars: ✭ 71 (-95.94%)
Mutual labels:  installer, command-line-tool
Cget
C++ package retrieval
Stars: ✭ 370 (-78.86%)
Mutual labels:  package-manager, dependency-manager
flatn
flat node dependencies
Stars: ✭ 18 (-98.97%)
Mutual labels:  package-manager, dependency-manager
Patch Package
Fix broken node modules instantly 🏃🏽‍♀️💨
Stars: ✭ 6,062 (+246.4%)
Mutual labels:  package-manager, dependency-manager
melody
📦 Fast and reliable dependency management for Go ♫
Stars: ✭ 79 (-95.49%)
Mutual labels:  package-manager, dependency-manager
vintage
[UNMAINTED] command-line tool to check for outdated Swift Package Manager dependencies
Stars: ✭ 33 (-98.11%)
Mutual labels:  dependency-manager, command-line-tool
Composer
Dependency Manager for PHP
Stars: ✭ 25,994 (+1385.37%)
Mutual labels:  package-manager, dependency-manager
Github
a module for building, searching, installing, managing, and mining Stata packages from GitHub
Stars: ✭ 56 (-96.8%)
Mutual labels:  installer, package-manager

Mint 🌱

Swift Versions Platforms Git Version License

A package manager that installs and runs Swift command line tool packages.

$ mint run realm/[email protected]

This would install and run SwiftLint version 0.40.3

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.

  • easily run a specific version of a package
  • link a package globally
  • builds are cached by version
  • use different versions of a package side by side
  • easily run the latest version of a package
  • distribute your own packages without recipes and formulas
  • specify a list of versioned packages in a Mintfile for easy use

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 package via SPM and lets you run multiple versions of that package, which are installed and cached in a central place.

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 Package Manager Tools -> SPMT -> Spearmint -> Mint! 🌱😄

Mint: a place where something is produced or manufactured

Installing

Make sure Xcode 10.2 is installed first.

Homebrew

$ brew install mint

Make

$ git clone https://github.com/yonaskolb/Mint.git
$ cd Mint
$ make

Using Mint itself!

Install
$ git clone https://github.com/yonaskolb/Mint.git
$ cd Mint
$ swift run mint install yonaskolb/mint
Update
$ mint install yonaskolb/mint

Swift Package Manager

Use CLI

$ 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.15.0"),

And then import wherever needed: import MintKit

Road to 1.0

Until 1.0 is reached, minor versions will be breaking.

Usage

Run mint help to see usage instructions.

  • install: Installs a package, so it can be run with run later, and also links that version globally
  • run: Runs a package. This will install it first if it isn't already installed, though won't link it globally. It's useful for running a certain version.
  • list: Lists all currently installed packages and versions.
  • which: Print the path to an installed package executable.
  • uninstall: Uninstalls a package by name.
  • bootstrap: Installs all the packages in your Mintfile, by default, without linking them globally

Package reference

run and install commands require a package reference parameter. This can be a shorthand for a github repo (mint install realm/SwiftLint) or a fully qualified git path (mint install https://github.com/realm/SwiftLint.git). In the case of run you can also just pass the name of the repo if it is already installed (run swiftlint) or in the Mintfile. 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.

Examples

$ mint run yonaskolb/[email protected] # run the only executable
$ mint run yonaskolb/[email protected] --spec spec.yml # pass some arguments
$ mint run yonaskolb/[email protected] xcodegen --spec spec.yml # specify a specific executable
$ mint run --executable xcodegen yonaskolb/[email protected] --spec spec.yml # specify a specific executable in case the first argument is the same name as the executable
$ mint install yonaskolb/[email protected] --no-link # installs a certain version but doesn't link it globally
$ mint install yonaskolb/XcodeGen # install newest tag
$ mint install yonaskolb/XcodeGen@master --force #reinstall the master branch
$ mint run yonaskolb/[email protected] # run 2.18.0
$ mint run XcodeGen # use newest tag and find XcodeGen in installed packages

Linking

By default Mint symlinks your installs into ~/.mint/bin on mint install, unless --no-link is passed. This means a package will be accessible from anywhere, and you don't have to prepend commands with mint run package, as long as you add ~/.mint/bin to your $PATH. Note that only one linked version can be used at a time. If you need to run a specific older version use mint run.

Mintfile

A Mintfile can specify a list of versioned packages. It makes installing and running these packages easy, as the specific repos and versions are centralized.

Simply place this file in the directory you're running Mint in. The format of the Mintfile is simply a list of packages in the same form as the usual package parameter:

Then you can simply run a package using:

mint run xcodegen

Note that mint will find the version declared in your Mintfile and run that version, even if you have multiple versions installed.

Or install all the packages (without linking them globally) in one go with:

mint bootstrap

If you prefer to link them globally, do such with:

mint bootstrap --link

Advanced

  • You can use --silent in mint run to silence any output from mint itself. Useful if forwarding output somewhere else.
  • You can set MINT_PATH and MINT_LINK_PATH envs to configure where mint caches builds, and where it symlinks global installs. These default to ~/.mint and ~/.mint/bin respectively
  • You can use mint install --force to reinstall a package even if it's already installed. This shouldn't be required unless you are pointing at a branch and want to update it.

Linux

Mint works on Linux but has some limitations:

  • linux doesn't support building with a statically linked version of Swift. This means when a new version of swift comes out the old installs won't work on linux.
  • Linux is case sensitive so you must specify the correct case for repo urls as well as executables.

Support

If your Swift command line tool builds with the Swift Package Manager than it will automatically install and run with mint!

Make sure you have defined an executable product type in the products list within your Package.swift.

let package = Package(
    name: "Foo",
    products: [
        .executable(name: "foo", targets: ["Foo"]),
    ],
    targets: [
      .target(name: "Foo"),
      ...
    ]
)

You can then add this to the Installing section in your readme:

### [Mint](https://github.com/yonaskolb/mint)
```
$ mint install github_name/repo_name
```

Resources

Since Swift 5.3 resources are now built into the Swift Package manager, so if you're targetting that version or above the Package.resources file is no longer necessary https://github.com/apple/swift-evolution/blob/master/proposals/0271-package-manager-resources.md

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:

MyFiles
MyOtherFiles

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 packages 🌱

Feel free to add your own!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].