git-project-manager/README.md

90 lines
3.9 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
gitlabs:
- Host: https://gitlab.sweetwater.com
Token: <your token here>
Name: Sweetwater GitLab
logLevel: info
cache:
ttl: 168h
load:
ownerOnly: false
```
## TODO
- [ ] Make generic, this is any git remote, not just GitLab
- [x] Add Gitea support
- [ ] Add GitHub support
- [x] Remove separate gitlab/gitea logic and keys, stop supporting legacy keys
- [x] Rename --gitlab flag to --remote
- [ ] Option to prune missing after the load is complete
- [ ] Add flag for clone timeout for large repos
- [ ] 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
- [ ] Brew package and GitHub
- [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