gm

command module
v0.13.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 2, 2023 License: Apache-2.0 Imports: 3 Imported by: 0

README

= gum
:linkattrs:
:project-owner: kordamp
:project-name:  gm

image:https://github.com/{project-owner}/{project-name}/workflows/Build/badge.svg["Build Status", link="https://github.com/{project-owner}/{project-name}/actions"]
image:https://goreportcard.com/badge/github.com/{project-owner}/{project-name}["GoReport Card", link="https://goreportcard.com/report/github.com/{project-owner}/{project-name}"]
image:https://img.shields.io/codecov/c/github/{project-owner}/{project-name}/master.svg["Coveralls", link="https://codecov.io/gh/{project-owner}/{project-name}"]
image:https://img.shields.io/github/v/release/{project-owner}/{project-name}["Release", link="https://github.com/{project-owner}/{project-name}/releases"]
image:https://snapcraft.io/gum/badge.svg["Snapcraft", link="https://snapcraft.io/gum"]
image:https://img.shields.io/github/downloads/{project-owner}/{project-name}/total?color=blue&logo=github["Downloads, link="https://github.com/{project-owner}/{project-name}/releases"]

---

Gum is a link:https://gradle.org[Gradle]/link:https:maven.apache.org[Maven]/link:https://github.com/sormuras/bach/[Bach]/link:https://github.com/jbangdev[JBang]/link:https://ant.apache.org/[Ant] wrapper written in link:https://golang.org/[Go], inspired in link:https://github.com/dougborg/gdub[https://github.com/dougborg/gdub] and
link:https://github.com/srs/gw[https://github.com/srs/gw].

Gum automatically detects if the project is Gradle, Maven, Bach, JBang or Ant based and runs the appropriate command. 
However in the case that Gum guesses wrong you canforce a specific build tool to be used. Similarly as gdub, Gum lets 
you invoke either Gradle, Maven, or Ant from anywhere within the project structure, not just the root directory.

== Usage

Gum supports the following flags

* *-ga* force Ant execution
* *-gb* force Bach execution
* *-gc* displays current configuration and quits
* *-gd* displays debug information
* *-gg* force Gradle build
* *-gh* displays help information
* *-gj* force JBang execution
* *-gm* force Maven build
* *-gn* executes nearest build file
* *-gq* run gm in quiet mode
* *-gr* do not replace goals/tasks
* *-gv* displays version information

Gum will execute the build based on the root build file unless *-gn* is specified, in which case the nearest build file 
will be selected. If a specific build file is given (*-b*, *--build-file* for Gradle; *-f*, *--file* for Maven, *-f*, 
*-file*, *-buildfile* for Ant) then  that file will be used instead.

Gum works by passing the given arguments to the resolved tool; it will replace common goal/task names following these mappings

|===
| Maven           | Gradle
| compile         | classes
| package         | assemble
| verify          | build
| verify          | check
| install         | publishToMavenLocal
| exec:java       | run
| dependency:tree | dependencies
|===

The following tasks are mapped from Gradle to Maven only

|===
| Gradle          | Maven
| jar             | package
| check           | verify
|===

You can skip these replacements by defining the *-gr* flag.

Gum can be used to run Maven and Gradle builds like so:

.Maven
[source]
----
$ gm build
----

Which results in the invocation of either *mvnw* or *mvn* with the *verify* goal as *build* gets replaced by *verify*.

.Gradle
[source]
----
$ gm verify
----

Which results in the invocation of either *gradlew* or *gradle* with the *build* goal as *verify* gets replaced with *build*.

.jbang

Gum will execute a given file (local or remote) if explicitly defined, otherwise scans the the current directory and executes the 
first file with `.java`,`.jsh`, `.jar` that's found (in that order) unless a different order were to be configured.

== Configuration

You may configure some aspects of Gum using a link:https://github.com/toml-lang/toml[TOML] based configuration file.
There are two possible locations for this file

* At the project's root directory. Must be named `.gm.toml`.
* At your home directory. For Linux/MacOS it's `$HOME/.gm.toml`, for Windows it's `%APPDATA\Gum\gm.toml`.

Settings at the project root override those at your home directory. The format is

[source,toml]
.gm.toml
----
[theme]
# valid values are [none, dark, light, custom]
name = "dark"
# if name = custom then you must define the following 5 entries
# color values follow https://github.com/gookit/color#use-a-256-color-style
# color values must be between 0 and 255
# first value is foreground
# second value is background
symbol = [125, 0]
section = [47, 0]
key = [130, 0]
boolean = [200, 0]
literal = [23, 0]

[general]
# same as passing -gq
quiet = false
# same as passing -gd
debug = false
# tool discovery order
# default order is the following
discovery = ["gradle", "maven", "ant", "bach", "jbang"]

[gradle]
# if goal/tasks should be replaced, same as passing -gr
replace = true
# if the default replace mappings should be used
defaults = true

# maven -> gradle mappings
[gradle.mappings]
compile = "classes"
"exec:java" = "run"

[maven]
# if goal/tasks should be replaced, same as passing -gr
replace = true
# if the default replace mappings should be used
defaults = true
# gives priority to mvnd over mvnw/mvn
mvnd = false

# gradle -> mappings
[maven.mappings]
build = "verify"

[jbang]
# source file discovery order
# default order is the following
discovery = [".java", ".jsh", ".jar"]

[bach]
# Bach version to use
version = "16.0.2"
----

== Installation

=== Homebrew

Use the kordamp/homebrew-tap

[source]
----
$ brew install kordamp/tap/gum
----

Or use the `upgrade` or `reinstall` commands if you have a previous installation of Gum in your system.

=== Snapcraft

[source]
----
$ sudo snap install --classic gum
----

== Scoop

[source]
----
$ scoop install main/gum
----

=== Manually

Download the pre-compiled binaries from the link:https://github.com/kordamp/gm/releases[releases page] and copy to the desired location.

=== Installing from Source

You need Go installed on your system, follow link:https://golang.org/dl/[this link] to download and install.
Once Go is installed you can invoke the following command to install Gum

[source,go]
----
go install github.com/kordamp/gm
----

Executables are installed in the directory named by the `GOBIN` environment
variable, which defaults to `$GOPATH/bin` or `$HOME/go/bin` if the `GOPATH`
environment variable is not set. Make sure that `$HOME/go/bin` is in your
`$PATH`. If `GOPATH` is defined then `$GOPATH/bin` must be in your `$PATH`.

=== Compiling from Source

You need Go installed on your system, follow link:https://golang.org/dl/[this link] to download and install.
Once Go is installed you can invoke the following command to install Gum

.Clone:
[source]
----
$ git clone https://github.com/kordamp/gm
$ cd gm
----

.Build:
[source]
----
$ make
----

.Verify:
[source]
----
$ ./gm -gv
----

.Test
[source]
----
$ go test -v ./...
----

== FAQ

=== Oh My ZSH incompatibility

If you try to execute `gm` you might get error messages like these:

* `not a git repository`
* `not something we can merge`

This happens, if you have link:https://ohmyz.sh/[oh-my-zsh] installed on your system. The _git plugin_ registers the alias `gm` for `git merge`. That overrides the `gm` command from Gum. To solve this problem, remove the _git plugin_ from the list of plugins to load in your `~/.zshrc` file.

==== Example

.Before
[source,properties]
----
plugins=(docker git sdk)
----

.After
[source,properties]
----
plugins=(docker sdk)
----

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL