ohmyzsh/plugins/glab/glab.plugin.zsh
Amaan Mujawar 316882dcc1
feat(glab-plugin): enhance GitLab CLI support with additional helpers and aliases
- Added merge request helpers:
  - `glmr-checkout`: checkout MR branch locally
  - `glmr-merge`: merge MR and optionally remove source branch
  - `glmr-list`: list MRs assigned to the current user

- Added issue helpers:
  - `glissue-close`: close an issue
  - `glissue-list`: list open issues assigned to the current user

- Added CI/CD helpers:
  - `glci-retry`: retry a failed pipeline
  - `glci-latest`: view the latest pipeline
  - `glci-status`: open pipeline in browser

- Added repository helpers:
  - `glrepo-clone`: clone a repository
  - `glrepo-list`: list repositories user is a member of
  - `glrepo-open`: open repository in browser
  - `glrepo-starred`: list starred repositories

- Added release helpers:
  - `glrelease-create`: create a release with title and tag

- Added search helper:
  - `glsearch`: search for merge requests and issues by keyword

- Updated README.md:
  - Documented new aliases and helper functions
  - Added usage examples and environment variable notes

This PR improves developer productivity by providing convenient shortcuts and web integrations for managing GitLab repositories, merge requests, issues, pipelines, and releases directly from the terminal.

Closes #13054
2025-09-16 20:02:48 +01:00

138 lines
2.8 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Oh My Zsh plugin for GitLab CLI (glab)
# --- Environment setup ---
# Load GITLAB_HOST and GITLAB_TOKEN from ~/.netrc if not already set
if [ -z "$GITLAB_HOST" ] || [ -z "$GITLAB_TOKEN" ]; then
if [ -f "$HOME/.netrc" ]; then
__glab_machine=$(awk '/^machine/{print $2; exit}' "$HOME/.netrc")
__glab_pass=$(awk -v host="$__glab_machine" '$2==host{getline; getline; if($1=="password") print $2}' "$HOME/.netrc")
if [ -n "$__glab_machine" ] && [ -n "$__glab_pass" ]; then
export GITLAB_HOST="$__glab_machine"
export GITLAB_TOKEN="$__glab_pass"
fi
fi
fi
unset __glab_machine __glab_pass
# --- Completions ---
if command -v glab >/dev/null 2>&1; then
eval "$(glab completion -s zsh 2>/dev/null || true)"
fi
# --- Aliases ---
alias gl='glab'
alias glmr='glab mr'
alias glissue='glab issue'
alias glrepo='glab repo'
alias glci='glab ci'
alias glprj='glab project'
alias glrelease='glab release'
# --- Merge Request Helper Functions ---
# Open a merge request in browser
glmr-open() {
glab mr view --web "$@"
}
# Checkout a merge request branch locally
glmr-checkout() {
glab mr checkout "$1"
}
# Merge a merge request
glmr-merge() {
glab mr merge "$1" --remove-source-branch
}
# List merge requests assigned to me
glmr-list() {
glab mr list --assignee "@me" "$@"
}
# --- Issue Helper Functions ---
# Create a new issue with optional title
glissue-new() {
if [ $# -eq 0 ]; then
glab issue create
else
glab issue create -t "$*"
fi
}
# Close an issue
glissue-close() {
glab issue close "$1"
}
# List open issues assigned to me
glissue-list() {
glab issue list --assignee "@me" --state opened "$@"
}
# --- CI/CD Helper Functions ---
# Show current CI pipeline status in browser
glci-status() {
glab ci view --web "$@"
}
# Retry a pipeline
glci-retry() {
glab ci retry "$1"
}
# View the latest pipeline
glci-latest() {
latest_id=$(glab ci list --limit 1 --json id -q '.[0].id')
glab ci view "$latest_id"
}
# --- Repository Helper Functions ---
# Clone a project
glrepo-clone() {
glab repo clone "$1"
}
# List all projects Im a member of
glrepo-list() {
glab repo list --membership "$@"
}
# Open a repository in browser
glrepo-open() {
glab repo view --web "$@"
}
# List starred projects
glrepo-starred() {
glab repo list --starred "$@"
}
# --- Release Helper Functions ---
# Create a release: glrelease-create "Title" "Tag"
glrelease-create() {
glab release create -t "$1" "$2"
}
# --- Search Helper Function ---
# Search merge requests and issues
glsearch() {
echo "Merge Requests:"
glab mr list --search "$1"
echo ""
echo "Issues:"
glab issue list --search "$1"
}
# --- Optional Auto-completion for Custom Commands ---
# Example: completion for glmr-open
_glmr_open_completion() {
_arguments "1:merge-request ID:_glab_mr"
}
compdef _glmr_open_completion glmr-open