{"id":13472002,"url":"https://github.com/zaquestion/lab","last_synced_at":"2025-10-23T14:48:43.663Z","repository":{"id":37548767,"uuid":"101533401","full_name":"zaquestion/lab","owner":"zaquestion","description":"Lab wraps Git or Hub, making it simple to clone, fork, and interact with repositories on GitLab","archived":false,"fork":false,"pushed_at":"2025-04-08T23:26:33.000Z","size":10722,"stargazers_count":1113,"open_issues_count":85,"forks_count":102,"subscribers_count":26,"default_branch":"master","last_synced_at":"2025-04-14T08:52:47.875Z","etag":null,"topics":["cli","fork","gitlab","gitlab-ci","gitlab-cli","golang","hacktoberfest","merge-request","snippets"],"latest_commit_sha":null,"homepage":"https://zaquestion.github.io/lab","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zaquestion.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"zaquestion","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":"zaquestion","issuehunt":null,"otechie":null,"custom":null}},"created_at":"2017-08-27T06:06:20.000Z","updated_at":"2025-04-08T23:26:37.000Z","dependencies_parsed_at":"2023-02-15T11:15:44.913Z","dependency_job_id":"6e5aa968-7f60-4d96-b4ea-48f72ca90ce8","html_url":"https://github.com/zaquestion/lab","commit_stats":{"total_commits":889,"total_committers":65,"mean_commits":"13.676923076923076","dds":0.7457817772778403,"last_synced_commit":"98c3f01c08e19bd5e6a89be1bca052d66dd0db3b"},"previous_names":[],"tags_count":38,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zaquestion%2Flab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zaquestion%2Flab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zaquestion%2Flab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zaquestion%2Flab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zaquestion","download_url":"https://codeload.github.com/zaquestion/lab/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254101558,"owners_count":22014908,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","fork","gitlab","gitlab-ci","gitlab-cli","golang","hacktoberfest","merge-request","snippets"],"created_at":"2024-07-31T16:00:51.024Z","updated_at":"2025-10-23T14:48:38.641Z","avatar_url":"https://github.com/zaquestion.png","language":"Go","readme":"\u003cp align=\"center\"\u003e\n    \u003cp align=\"center\"\u003e\n        git + \u003cimg src=\"https://user-images.githubusercontent.com/3167497/34473826-40b4987c-ef2c-11e7-90b9-5ff322c4966f.png\" width=\"100\" height=\"100\"\u003e = gitlab\n    \u003c/p\u003e\n    \u003cp align=\"center\"\u003e\n        \u003ca href=\"https://travis-ci.org/zaquestion/lab\"\u003e\n            \u003cimg src=\"https://travis-ci.org/zaquestion/lab.svg?branch=master\" alt=\"Build Status\"\u003e\n        \u003c/a\u003e\n        \u003ca href=\"https://goreportcard.com/report/github.com/zaquestion/lab\"\u003e\n            \u003cimg src=\"https://goreportcard.com/badge/github.com/zaquestion/lab\" alt=\"Go Report Card\"\u003e\n        \u003c/a\u003e\n        \u003ca href=\"https://codecov.io/gh/zaquestion/lab\"\u003e\n            \u003cimg src=\"https://codecov.io/gh/zaquestion/lab/branch/master/graph/badge.svg\" alt=\"codecov\"\u003e\n        \u003c/a\u003e\n        \u003ca href=\"https://gitter.im/labcli\"\u003e\n            \u003cimg src=\"https://badges.gitter.im/Join%20Chat.svg\" alt=\"Join the chat\"\u003e\n        \u003c/a\u003e\n    \u003c/p\u003e\n    \u003cp align=\"center\"\u003e\n        \u003ca href=\"https://liberapay.com/zaquestion/donate\"\u003e\n            \u003cimg src=\"https://liberapay.com/assets/widgets/donate.svg\" alt=\"Donate\"\u003e\n        \u003c/a\u003e\n    \u003c/p\u003e\n    \u003cp align=\"center\"\u003e\n        \u003cimg src=\"https://user-images.githubusercontent.com/1964720/42740177-6478d834-8858-11e8-9667-97f193ecb404.gif\" align=\"center\"\u003e\n    \u003c/p\u003e\n\u003c/p\u003e\n\n_lab_ interacts with repositories on GitLab, including creating/editing merge requests, issues, milestones, snippets\nand CI pipelines.\n\nThe development team has focused on keeping _lab_ a simple and intuitive command line interface for commands provided\nin the [GitLab API](https://docs.gitlab.com/ee/api/api_resources.html). _lab_'s aim is to provide GitLab users an\nexperience similar to the GitLab WebUI with respect to errors and messages.\n\n# Usage recommendation\n\nOne can use _lab_ as a Git alias, integrating seamlessly to their Git workflow.\n\n```\n$ cat ~/.gitconfig\n...\n[alias]\n    lab = \"!lab\"\n    lab-i = \"!lab issue\"\n    li = \"!lab issue\"\n\n$ git lab mr list\n$ git lab-i close\n$ git li create\n```\n\nAlso, _lab_ can be set as shell aliases:\n\n```bash\nalias mrlist=\"lab mr list\"\n```\n\n# Installation\n\nIn compilation-time, _lab_ depends only on other Go external modules, defined at go.mod. At runtime, _git_ is required\nas many git commands are used by _lab_ to retrieve local repository information.\n\n### Homebrew\n```\nbrew install lab\n```\n\n### NixOS\n```\nnix-env -f '\u003cnixpkgs\u003e' -iA gitAndTools.lab\n```\n\n### Scoop\n```\nscoop install lab\n```\n\n### Alpine\n```\napk add lab\n```\n\n### Bash\nIn case you don't want to install _lab_ using any of the above package managers you can use the Bash script available:\n\n\u003e :warning: The script will install _lab_ into `/usr/local/bin/`.\n\n```\ncurl -s https://raw.githubusercontent.com/zaquestion/lab/master/install.sh | sudo bash\n```\n\n\u003e :warning: Please take care when executing scripts in this fashion. Make sure you trust the developer providing the\n\u003e script and consider peeking at the install script itself (ours is pretty simple ;)\n\n### PreBuilt Binaries\n\nHead to the [releases](https://github.com/zaquestion/lab/releases) page and download your preferred release.\n\n### Source\n\nFor building _lab_ from source it's required [Go 1.17+](https://golang.org/doc/install). Older versions (ie. 1.15)\nmight still be able to build _lab_, but warnings related to unsupported `go.mod` format might be prompted.\n\n```\ngit clone git@github.com:zaquestion/lab\ncd lab\ngo install -ldflags \"-X \\\"main.version=$(git rev-parse --short=10 HEAD)\\\"\" .\n```\n\nor\n\n```\nmake install\n```\n\n# Configuration\n\n_lab_ needs your GitLab information in order to interact with to your GitLab instance. There are several ways to\nprovide this information to `lab`:\n\n### Fresh start\n\nWhen _lab_ is executed for the first time, no suitable configuration found, it will prompt for your GitLab information.\nFor example:\n\n```\n$ lab\nEnter default GitLab host (default: https://gitlab.com):\nEnter default GitLab token:\n```\n\nThese informations are going to be save it into `~/.config/lab/lab.toml` and won't be asked again.\nIn case multiple projects require different information (ie. _gitlab.com_ and a self-hosted GitLab service), using\ndifferent configuration files as explained in the section below.\n\n### Configuration file\n\nThe most common option is to use _lab_ configuration files, which can be placed in different places in an hierarchical\nstyle. The [Tom's Obvious, Minimal Language (TOML)](https://github.com/toml-lang/toml) is used for the configuration\nfile.\n\nWhen a local configuration file is present (`./lab.toml`), no other configuration file will be checked, this will be\nthe only one used for looking up required information.\n\nHowever, other two options are possible:\n\n1. User-specific: `~/.config/lab/lab.toml`\n2. Worktree-specific: `.git/lab/lab.toml`\n\nThese two files are merged before _lab_ runs, meaning that they're complementary to each other.  One thing is important\nto note though, options set in the worktree configuration file overrides (take precedence over) any value set in the\nuser-specific file.\n\nAn example of user-specific configurations can be found below. As seen in the example file below, any command options\nspecified by `--help` (for example `lab mr show --help`, or `lab issue edit --help`) can be set in the configuration\nfile using TOML format.\n\n```toml\n[core]\n  host = \"https://gitlab.com\"\n  token = \"1223334444555556789K\"\n  user = \"yourusername\"\n\n[mr_checkout]\n  force = true\n\n[mr_create]\n  force-linebreak = true\n  draft = true\n\n[mr_edit]\n  force-linebreak = true\n```\n\n### Local environment variables\n\nIf running _lab_ locally, the variables `LAB_CORE_HOST` and `LAB_CORE_TOKEN` can be used, preventing configuration file\ncreation/update. For example to use _gitlab.com_ do:\n\n```\nexport LAB_CORE_HOST=\"https://gitlab.com\"\n```\n\n### CI environment variables\n\nThe environment variables `CI_PROJECT_URL`, `CI_JOB_TOKEN` and `GITLAB_USER_LOGIN`, intended to be used in a CI\nenvironment, can be set to prevent any configuration file creation/update. Also, any of these take precedence over all\nother options.\n\n# Completions\n\n_lab_ provides completions for [Bash], [Elvish], [Fish], [Oil], [Powershell], [Xonsh] and [Zsh].\nScripts can be directly sourced (though using pre-generated versions is recommended to avoid shell startup delay):\n\n```sh\n# bash (~/.bashrc)\nsource \u003c(lab completion)\n\n# elvish (~/.elvish/rc.elv)\neval (lab completion|slurp)\n\n# fish (~/.config/fish/config.fish)\nlab completion | source\n\n# oil\nsource \u003c(lab completion)\n\n# powershell (~/.config/powershell/Microsoft.PowerShell_profile.ps1)\nSet-PSReadlineKeyHandler -Key Tab -Function MenuComplete\nlab completion | Out-String | Invoke-Expression\n\n# xonsh (~/.config/xonsh/rc.xsh)\nCOMPLETIONS_CONFIRM=True\nexec($(lab completion xonsh))\n\n# zsh (~/.zshrc)\nsource \u003c(lab completion zsh)\n```\n\n# Contributing\n\nWe welcome all contributors and their contributions to _lab_! See the [contribution guide](CONTRIBUTING.md).\n\n# What about [GLab](https://github.com/profclems/glab)?\n\nBoth [glab] and `lab` are open-source tools with the same goal of bringing GitLab to your command line and simplifying\nthe developer workflow. In many ways `lab` is to [hub], what [glab] is to [gh].\n\nIf you're looking for a tool like _hub_, less opinionated, that feels like using _git_ and allows you to interact with\nGitLab then _lab_ is for you. However, if you're looking for a more opinionated tool intended to simplify your GitLab\nworkflows, you might consider using [glab].\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://user-images.githubusercontent.com/2358914/34196973-420d389a-e519-11e7-92e6-3a1486d6b280.png\" align=\"center\"\u003e\u003c/p\u003e\n\n\u003cp xmlns:dct=\"http://purl.org/dc/terms/\"\u003e\n  \u003ca rel=\"license\"\n     href=\"http://creativecommons.org/publicdomain/zero/1.0/\"\u003e\n    \u003cimg src=\"https://licensebuttons.net/p/zero/1.0/88x31.png\" style=\"border-style: none;\" alt=\"CC0\" /\u003e\n  \u003c/a\u003e\n  \u003cbr /\u003e\n  To the extent possible under law,\n  \u003ca rel=\"dct:publisher\"\n     href=\"https://github.com/zaquestion/lab\"\u003e\n    \u003cspan property=\"dct:title\"\u003eZaq? Wiedmann\u003c/span\u003e\u003c/a\u003e\n  has waived all copyright and related or neighboring rights to\n  \u003cspan property=\"dct:title\"\u003eLab\u003c/span\u003e.\n  This work is published from:\n\u003cspan property=\"vcard:Country\" datatype=\"dct:ISO3166\"\n      content=\"US\" about=\"https://github.com/zaquestion/lab\"\u003e\n  United States\u003c/span\u003e.\n\u003c/p\u003e\n\n\n\n\n[Bash]:https://www.gnu.org/software/bash/\n[Elvish]:https://elv.sh/\n[Fish]:https://fishshell.com/\n[Oil]:http://www.oilshell.org/\n[Powershell]:https://microsoft.com/powershell\n[Xonsh]:https://xon.sh/\n[Zsh]:https://www.zsh.org/\n\n[gh]:https://github.com/cli/cli\n[hub]:https://github.com/github/hub\n[lab]:https://github.com/zaquestion/lab\n[glab]:https://github.com/profclems/glab\n","funding_links":["https://github.com/sponsors/zaquestion","https://liberapay.com/zaquestion","https://liberapay.com/zaquestion/donate"],"categories":["Go","Git interfaces","cli","Languages and frameworks"],"sub_categories":["Misc","Git"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzaquestion%2Flab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzaquestion%2Flab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzaquestion%2Flab/lists"}