Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/zaquestion/lab

Lab wraps Git or Hub, making it simple to clone, fork, and interact with repositories on GitLab
https://github.com/zaquestion/lab

cli fork gitlab gitlab-ci gitlab-cli golang hacktoberfest merge-request snippets

Last synced: 6 days ago
JSON representation

Lab wraps Git or Hub, making it simple to clone, fork, and interact with repositories on GitLab

Awesome Lists containing this project

README

        



git + = gitlab




Build Status


Go Report Card


codecov


Join the chat




Donate




_lab_ interacts with repositories on GitLab, including creating/editing merge requests, issues, milestones, snippets
and CI pipelines.

The development team has focused on keeping _lab_ a simple and intuitive command line interface for commands provided
in the [GitLab API](https://docs.gitlab.com/ee/api/api_resources.html). _lab_'s aim is to provide GitLab users an
experience similar to the GitLab WebUI with respect to errors and messages.

# Usage recommendation

One can use _lab_ as a Git alias, integrating seamlessly to their Git workflow.

```
$ cat ~/.gitconfig
...
[alias]
lab = "!lab"
lab-i = "!lab issue"
li = "!lab issue"

$ git lab mr list
$ git lab-i close
$ git li create
```

Also, _lab_ can be set as shell aliases:

```bash
alias mrlist="lab mr list"
```

# Installation

In compilation-time, _lab_ depends only on other Go external modules, defined at go.mod. At runtime, _git_ is required
as many git commands are used by _lab_ to retrieve local repository information.

### Homebrew
```
brew install lab
```

### NixOS
```
nix-env -f '' -iA gitAndTools.lab
```

### Scoop
```
scoop install lab
```

### Alpine
```
apk add lab
```

### Bash
In case you don't want to install _lab_ using any of the above package managers you can use the Bash script available:

> :warning: The script will install _lab_ into `/usr/local/bin/`.

```
curl -s https://raw.githubusercontent.com/zaquestion/lab/master/install.sh | sudo bash
```

> :warning: Please take care when executing scripts in this fashion. Make sure you trust the developer providing the
> script and consider peeking at the install script itself (ours is pretty simple ;)

### PreBuilt Binaries

Head to the [releases](https://github.com/zaquestion/lab/releases) page and download your preferred release.

### Source

For building _lab_ from source it's required [Go 1.17+](https://golang.org/doc/install). Older versions (ie. 1.15)
might still be able to build _lab_, but warnings related to unsupported `go.mod` format might be prompted.

```
git clone [email protected]:zaquestion/lab
cd lab
go install -ldflags "-X \"main.version=$(git rev-parse --short=10 HEAD)\"" .
```

or

```
make install
```

# Configuration

_lab_ needs your GitLab information in order to interact with to your GitLab instance. There are several ways to
provide this information to `lab`:

### Fresh start

When _lab_ is executed for the first time, no suitable configuration found, it will prompt for your GitLab information.
For example:

```
$ lab
Enter default GitLab host (default: https://gitlab.com):
Enter default GitLab token:
```

These informations are going to be save it into `~/.config/lab/lab.toml` and won't be asked again.
In case multiple projects require different information (ie. _gitlab.com_ and a self-hosted GitLab service), using
different configuration files as explained in the section below.

### Configuration file

The most common option is to use _lab_ configuration files, which can be placed in different places in an hierarchical
style. The [Tom's Obvious, Minimal Language (TOML)](https://github.com/toml-lang/toml) is used for the configuration
file.

When a local configuration file is present (`./lab.toml`), no other configuration file will be checked, this will be
the only one used for looking up required information.

However, other two options are possible:

1. User-specific: `~/.config/lab/lab.toml`
2. Worktree-specific: `.git/lab/lab.toml`

These two files are merged before _lab_ runs, meaning that they're complementary to each other. One thing is important
to note though, options set in the worktree configuration file overrides (take precedence over) any value set in the
user-specific file.

An example of user-specific configurations can be found below. As seen in the example file below, any command options
specified by `--help` (for example `lab mr show --help`, or `lab issue edit --help`) can be set in the configuration
file using TOML format.

```toml
[core]
host = "https://gitlab.com"
token = "1223334444555556789K"
user = "yourusername"

[mr_checkout]
force = true

[mr_create]
force-linebreak = true
draft = true

[mr_edit]
force-linebreak = true
```

### Local environment variables

If running _lab_ locally, the variables `LAB_CORE_HOST` and `LAB_CORE_TOKEN` can be used, preventing configuration file
creation/update. For example to use _gitlab.com_ do:

```
export LAB_CORE_HOST="https://gitlab.com"
```

### CI environment variables

The environment variables `CI_PROJECT_URL`, `CI_JOB_TOKEN` and `GITLAB_USER_LOGIN`, intended to be used in a CI
environment, can be set to prevent any configuration file creation/update. Also, any of these take precedence over all
other options.

# Completions

_lab_ provides completions for [Bash], [Elvish], [Fish], [Oil], [Powershell], [Xonsh] and [Zsh].
Scripts can be directly sourced (though using pre-generated versions is recommended to avoid shell startup delay):

```sh
# bash (~/.bashrc)
source <(lab completion)

# elvish (~/.elvish/rc.elv)
eval (lab completion|slurp)

# fish (~/.config/fish/config.fish)
lab completion | source

# oil
source <(lab completion)

# powershell (~/.config/powershell/Microsoft.PowerShell_profile.ps1)
Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete
lab completion | Out-String | Invoke-Expression

# xonsh (~/.config/xonsh/rc.xsh)
COMPLETIONS_CONFIRM=True
exec($(lab completion xonsh))

# zsh (~/.zshrc)
source <(lab completion zsh)
```

# Contributing

We welcome all contributors and their contributions to _lab_! See the [contribution guide](CONTRIBUTING.md).

# What about [GLab](https://github.com/profclems/glab)?

Both [glab] and `lab` are open-source tools with the same goal of bringing GitLab to your command line and simplifying
the developer workflow. In many ways `lab` is to [hub], what [glab] is to [gh].

If you're looking for a tool like _hub_, less opinionated, that feels like using _git_ and allows you to interact with
GitLab then _lab_ is for you. However, if you're looking for a more opinionated tool intended to simplify your GitLab
workflows, you might consider using [glab].



CC0



To the extent possible under law,

Zaq? Wiedmann

has waived all copyright and related or neighboring rights to
Lab.
This work is published from:

United States
.

[Bash]:https://www.gnu.org/software/bash/
[Elvish]:https://elv.sh/
[Fish]:https://fishshell.com/
[Oil]:http://www.oilshell.org/
[Powershell]:https://microsoft.com/powershell
[Xonsh]:https://xon.sh/
[Zsh]:https://www.zsh.org/

[gh]:https://github.com/cli/cli
[hub]:https://github.com/github/hub
[lab]:https://github.com/zaquestion/lab
[glab]:https://github.com/profclems/glab