Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/TekWizely/bingo
The missing package manager for golang binaries (its homebrew for "go install")
https://github.com/TekWizely/bingo
golang golang-binaries golang-tools honest-run installing-binaries package-manager runfile
Last synced: 8 days ago
JSON representation
The missing package manager for golang binaries (its homebrew for "go install")
- Host: GitHub
- URL: https://github.com/TekWizely/bingo
- Owner: TekWizely
- License: mit
- Created: 2020-02-16T01:12:29.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2021-08-25T01:52:27.000Z (about 3 years ago)
- Last Synced: 2024-08-02T15:55:16.100Z (3 months ago)
- Topics: golang, golang-binaries, golang-tools, honest-run, installing-binaries, package-manager, runfile
- Homepage:
- Size: 44.9 KB
- Stars: 179
- Watchers: 4
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Bingo: The missing package manager for golang binaries
(its *homebrew* for "go install")
![GitHub repo size](https://img.shields.io/github/repo-size/TekWizely/bingo)
[![All Contributors](https://img.shields.io/badge/all_contributors-0-orange.svg?style=flat-square)](#contributors-)
![GitHub stars](https://img.shields.io/github/stars/TekWizely/bingo?style=social)
![GitHub forks](https://img.shields.io/github/forks/TekWizely/bingo?style=social)
![Twitter Follow](https://img.shields.io/twitter/follow/TekWizely?style=social)Do you love the simplicity of being able to download & compile golang applications with `go install`, but wish it were easier to manage the compiled binaries?
Bingo makes installing and managing `go install`\-based packages a lot easier.
#### Features
* Keeps a link between the installed binary and the source package
* Can update / uninstall binaries using the name of the binary (i.e `bingo update goimports`)
* Can install binaries to a location of your choice
* Can control the name of the installed binary
* Can install multiple versions of the same package (using different names for the binaries)
* Each binary's source packages are isolated and managed in their own separate `$GOROOT`#### TOC
- [Using](#using)
- [Installing](#installing)
- [Work Folders](#work-folders)
- [Contributing](#contributing)
- [Contact](#contact)
- [License](#license)--------
## Using- [Compiling + Installing Binaries](#compiling--installing-binaries)
- [Compiling 'Complicated' Packages](#compiling-complicated-packages)
- [Specifying Package Version](#specifying-package-version)
- [Binary Naming](#binary-naming)
- [Using Go Get](#using-go-get)
- [Listing Installed Binaries](#listing-installed-binaries)
- [Displaying A Binary's Associated Package](#displaying-a-binarys-associated-package)
- [Updating Binaries](#updating-binaries)
- [Uninstalling Binaries / Packages](#uninstalling-binaries--packages)------------------------------------
#### Compiling + Installing BinariesTo install a binary with bingo, use the golang application's full package path, same as you would with `"go install"`.
_hello example_
```
$ bingo install github.com/golang/example/helloInstalling binary hello from package github.com/golang/example/hello
Downloading & compiling package (folder: '~/.bingo/pkg/hello')
go: downloading github.com/golang/example v0.0.0-20170904185048-46695d81d1fa
go: found github.com/golang/example/hello in github.com/golang/example v0.0.0-20170904185048-46695d81d1fa
Installing binary (file: '~/.bingo/bin/hello')
Done$ ~/.bingo/bin/hello
Hello, Go examples!
```##### Compiling 'Complicated' Packages
*TBD*Currently, bingo only supports packages which can be directly downloaded + compiled + installed via `go install` (or [go get](#using-go-get) for pre v1.16).
Packages that require a more complex build process are not supported at this time.
##### Installation Folder
See the [Work Folders](#work-folders) section for details on configuring the various folders needed by bingo, including which folder to install binaries in.
##### Specifying Package Version
You can specify which version of a package to install.
###### '@version' Syntax
_install example using @version syntax_
```
$ bingo install github.com/golang/example/[email protected]
```###### '--version' Option
_install example using --version option_
```
$ bingo install --version v1.2.3 github.com/golang/example/hello
```##### Binary Naming
By default, the installed binary will be named after the last folder element in its package path.
As you saw above, installing the `github.com/golang/example/hello` package installed a binary named `hello`.
You can override this behavior and specify the binary name at the time of installation:
_install hello example as 'foo'_
```
$ bingo install -n foo -q github.com/golang/example/hello$ ~/.bingo/bin/foo
Hello, Go examples!
```##### Using Go Get
By default, bingo uses `go install` to download + compile + install packages.
If you're using a version of go prior to v1.16, you can instruct bingo to use `go get`:
_install example using --useget option_
```
$ bingo install --useget github.com/golang/example/hello
```_install example using BINGO_USE_GET variable_
```
$ BINGO_USE_GET=1 bingo install github.com/golang/example/hello
```**NOTE:** Both of these work for the `bingo update` command as well.
#### Listing Installed Binaries
To see a list of installed binaries, use the `installed` command:
```
$ bingo installed -pBingo-managed binaries (folder: '~/.bingo/bin')
- foo github.com/golang/example/hello
- hello github.com/golang/example/hello
```##### Per-Binary Isolation
As you see above, installing the hello example as `foo` did not interfere with the example installed as `hello`.
Each installed binary is managed in a separate `$GOROOT`, even if it is has the same package path as another binary.
#### Displaying A Binary's Associated Package
If you need a reminder of which package a binary was compiled/installed from, you can use the `package` command:
```
$ bingo package hellogithub.com/golang/example/hello
```#### Updating Binaries
To update an installed binary, use the `update` command:
```
$ bingo update helloUpdating hello package github.com/golang/example/hello
go: found github.com/golang/example/hello in github.com/golang/example v0.0.0-20170904185048-46695d81d1fa
Done
```*NOTE*: By default, the resulting package version will be determined by Go's version resolution rules.
##### Specifying Package Version
You can specify which version of a package to update to.
*NOTE*: The target version does not have to be newer than the existing version. i.e you can update to an older version of the package.
###### '@version' Syntax
_update example using @version syntax_
```
$ bingo update [email protected]
```###### '--version' Option
_update example using --version option_
```
$ bingo update --version v1.2.3 hello
```#### Uninstalling Binaries / Packages
Use the `uninstall` command to uninstall binaries:
```
$ bingo uninstall fooUninstalling binary foo from package github.com/golang/example/hello
Removing binary (file: '~/.bingo/bin/foo')
Removing package (folder: '~/.bingo/pkg/foo')
Done$ bingo installed -q
hello
```*NOTE*: Uninstalling a binary also removes the associated package folder.
---------------
## Requirements#### Run
Bingo exists as a Runfile, and requires the Run tool to operate:
* https://github.com/TekWizely/run
#### Bash
Bingo (currently) uses `bash` for its command scripts.
#### Readlink
Bingo uses symbolic links to associate binaries to their packages.
The scripts use `readlink` to resolve symbolic links.
-------------
## Installing### Releases
See the [Releases](https://github.com/TekWizely/bingo/releases) page for downloadable archives of versioned releases.
#### Brew Core
TBD#### Brew Tap
In addition to working on brew core support, I have also created a tap to ensure the latest version is always available:
* https://github.com/TekWizely/homebrew-tap
_install bingo directly from tap_
```
$ brew install tekwizely/tap/bingo
```_install tap to track updates_
```
$ brew tap tekwizely/tap$ brew install bingo
```---------------
## Work Folders
Bingo requires the following work folders:| Folder | Description
|----------------|------------
| Bin Folder | Where compiled binaries are installed. This folder should be in your `$PATH`. This _can_ be a "shared" folder that also contains non-bingo binaries.
| Package Folder | Where packages are downloaded / compiled. This should NOT be a "shared" folder.
| Cache Folder | Where to store Go cache files. This _might_ work as a shared folder but has not been tested.### Configuring Work Folders via Shell Variables
#### Individual
Each of these folders can be individually configured via shell variables:
* `$BINGO_BIN`
* `$BINGO_PKG`
* `$BINGO_CACHE`#### Fallback: `$BINGO_HOME`
If the `$BINGO_HOME` variable is defined, bingo will use it as a fall-back for any folder that is not individually configured, i.e:
* `$BINGO_HOME/bin`
* `$BINGO_HOME/pkg`
* `$BINGO_HOME/cache`#### Default: `$HOME/.bingo`
As a final default, bingo will use $HOME/.bingo i.e:
* `$HOME/.bingo/bin`
* `$HOME/.bingo/pkg`
* `$HOME/.bingo/cache`---------------
## ContributingTo contribute to Bingo, follow these steps:
1. Fork this repository.
2. Create a branch: `git checkout -b `.
3. Make your changes and commit them: `git commit -m ''`
4. Push to the original branch: `git push origin /`
5. Create the pull request.Alternatively see the GitHub documentation on [creating a pull request](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request).
----------
## ContactIf you want to contact me you can reach me at [email protected].
----------
## LicenseThe `tekwizely/bingo` project is released under the [MIT](https://opensource.org/licenses/MIT) License. See `LICENSE` file.