151 lines
6.2 KiB
Markdown
151 lines
6.2 KiB
Markdown
# GitLab Project Manager
|
|
|
|
## Purpose
|
|
|
|
The goal of this utility is to provide a fuzzy-find method of locating, cloning,
|
|
and using GitLab projects -- along with your preferred aliases, autocompletion,
|
|
and shortcuts.
|
|
|
|
## Functionality
|
|
|
|
Fuzzy as F_ck. This program will try like hell to help you find a project,
|
|
and once you've found it, will remember your preference along with whatever crazy
|
|
thing your lizard brain wants to call it.
|
|
|
|
Do you think of a project called terraform as infra-stuff? No problem, just let
|
|
gpm know that and it'll remember.
|
|
|
|
The basic workflow looks like this:
|
|
|
|
1. **Config** -- generate a config file
|
|
1. **Cache** -- load your cache to make things super quick
|
|
1. you only need to update it if there are new projects the cache is unaware of
|
|
1. **Add** -- find your project, give it any extra aliases you want
|
|
1. run `gpm project add` (or `padd` if using the provided shell defaults)
|
|
1. **Go** -- go to your project, fuzzy searching by alias
|
|
1. clones your project if that's never been done
|
|
1. the provided `pgo` func makes it easy
|
|
1. **Open** -- rather than simply changing directories to a project, open it in your IDE
|
|
1. **Manage** -- fine-tune your aliases, making it easy to nail them without fuzzy stuff
|
|
1. if you are lazy in your aliases, you'll be fuzzy finding a lot
|
|
1. match your alias exactly (or have only one result) and you go there right away
|
|
1. positive reinforcement given for solid alias behavior
|
|
1. manage aliases using `gpm alias add` or `gpm alias delete`
|
|
1. **List** -- get a list of your configured projects any time with `plist`
|
|
1. **Reward** -- buy the author a beer, because this thing is a time saver
|
|
|
|
## Installing
|
|
|
|
1. Install into your go path by running `go install .`
|
|
1. Copy `contrib/gpm_func_omz.zsh` into your `~/.oh-my-zsh/custom/` path, or just source from your bashrc/zshrc
|
|
1. Generate config file: `gpm config gen --write`
|
|
1. You can run this any time to update settings
|
|
1. It will only add one GitLab, so update the file for multiple
|
|
1. Run `gpm cache load` (if aliases is in-place, otherwise `gitlab-project-manager cache load`)
|
|
|
|
### Config Sample
|
|
```yaml
|
|
remotes:
|
|
- host: https://github.com/rdmcguire # add user for multiple keys
|
|
token: <your token here>
|
|
name: github-rdmcguire
|
|
type: "github" # github, gitlab, gitea supported
|
|
cloneProto: ssh
|
|
logLevel: info
|
|
cache:
|
|
ttl: 168h
|
|
load:
|
|
ownerOnly: false # if true, only owned projects will be indexed
|
|
```
|
|
## Usage
|
|
|
|
### Global Flags
|
|
|
|
- The `--remote` flag limits all subcommands to one or more specified remotes
|
|
- The `--logLevel [debug|error|info|warn]` flag sets logging, but is permanent in the config file
|
|
|
|
### Basic Usage
|
|
|
|
Basic usage to prepare your cache, add a project alias (or aliases), and use a project:
|
|
|
|
1. `gpm cache load`
|
|
1. `gpm project add`
|
|
1. select with fuzzy search, add extra aliases if preferred
|
|
1. `gpm project [go|open] <optional-fuzzy-search-term>`
|
|
1. Open will launch your editor, go will change directories, cloning if necessary
|
|
|
|
### Cache Management
|
|
|
|
```shell
|
|
% gitlab-project-manager cache -h
|
|
Contains sub-commands for managing project cache.
|
|
The project cache keeps this speedy, without smashing against the GitLab
|
|
API every time a new project is added / searched for
|
|
|
|
Usage:
|
|
gitlab-project-manager cache [command]
|
|
|
|
Aliases:
|
|
cache, a, ln
|
|
|
|
Available Commands:
|
|
clear Clear GitLab Project Cache
|
|
dump Dump GitLab project cache
|
|
load Load GitLab Project Cache
|
|
unlock unlock GitLab project cache
|
|
|
|
Flags:
|
|
-h, --help help for cache
|
|
--ttl duration Duration before cache is re-built in go time.Duration format (default 48h0m0s)
|
|
|
|
Global Flags:
|
|
--config string config file (default is ~/.config/gitlab-project-manager.yaml)
|
|
--logLevel string Default log level -- info, warn, error, debug (default "info")
|
|
--projectPath string Sets a path for local clones of projects
|
|
--remote strings Specify remotes by host for any sub-command. Provide multiple times or comma delimited.
|
|
|
|
Use "gitlab-project-manager cache [command] --help" for more information about a command.
|
|
```
|
|
|
|
- To update your cache, run `gpm cache load`. You can also specify one or more remotes
|
|
with `--remote [host]` either multiple times or comma delimited. Command completion works.
|
|
- To view basic cache stats, run `gpm cache dump`
|
|
- To dump cache projects and any aliases that are set, run `gpm cache dump -f` optionally filtering with `--remote` flags
|
|
|
|
## TODO
|
|
|
|
- [ ] Don't check remote up unless necessary (project list shouldn't require it)
|
|
- [ ] Rename to git-project-manager
|
|
- [ ] Move module from gitlab.sweetwater.com to github.com/rdmcguire
|
|
- [ ] Add flag for clone timeout for large repos
|
|
- [ ] Add `gpm cache prune` command
|
|
- [ ] Fix NPE when cache is reset or project for whatever reason leaves an orphaned alias
|
|
- [ ] Add TTL check to cache load, and add -f / --force flag to re-build regardless
|
|
- [ ] Update README for shell completion, aliases, usage
|
|
- [ ] Make a Makefile
|
|
- [ ] Add git repo status to project go (up-to-date, pending commits, etc..)
|
|
- [ ] Build pipeline, and link to gitlab registry for a release binary
|
|
- [ ] Add GitHub remote
|
|
- [ ] Package for homebrew
|
|
- [x] Make generic, this is any git remote, not just GitLab
|
|
- [x] Add Gitea support
|
|
- [x] Add GitHub support
|
|
- [x] Remove separate gitlab/gitea logic and keys, stop supporting legacy keys
|
|
- [x] Rename --gitlab flag to --remote
|
|
- [x] Add option to select individual remote for `gpm cache load`
|
|
- [x] Use multi-gitlab by default in config init
|
|
- [x] Update docs for multi-gitlab
|
|
- [x] Remove all references to old keys
|
|
- [x] Add auto-completion helper for --gitlab flag
|
|
- [x] Fix initial setup requiring project path, and set https:// as default for gitlab host
|
|
- [x] Add config setters and getters
|
|
- [x] For each project loaded, check if it is the same, and do nothing
|
|
- [x] prevents clobbering cache on a partial update
|
|
- [x] track already loaded projects to diff after load
|
|
- [x] Add open command
|
|
- [x] config should exist for editor (vim, code, etc..)
|
|
- [x] Add fzf to `plist` / `gpm projects list`
|
|
- [x] Update `gpm project show` with pterm box like `gpm project list`
|
|
- [x] Merge aliases together for same project when selecting
|
|
- [x] If after merging there is only one project, go there by default
|