# 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. **Cache** -- load your cache to make things super quick 1. project cache has a TTL, or you can load it manually 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. Run `gpm cache load` (if aliases is in-place, otherwise `gitlab-project-manager cache load`) ### Config Sample ```yaml gitlabHost: https://gitlab.sweetwater.com gitlabToken: logLevel: info cache: ttl: 168h load: ownerOnly: false ``` ## TODO - [ ] Fix NPE when cache is reset or project for whatever reason leaves an orphaned alias - [ ] Add config setters and getters - [ ] Add TTL check to cache load, and add -f / --force flag to re-build regardless - [ ] For each project loaded, check if it is the same, and do nothing - [ ] prevents clobbering cache on a partial update - [ ] track already loaded projects to diff after load - [ ] should prune missing after the load is complete - [ ] Add open command - [ ] config should exist for editor (vim, code, etc..) - [ ] Update README for shell completion, aliases, usage - [ ] Make a Makefile - [ ] Add git repo status to project go (up-to-date, pending commits, etc..) - [x] Update `gpm project show` with pterm box like `gpm project list` - [ ] Build pipeline, and link to gitlab registry for a release binary - [ ] Brew package and GitHub - [x] Merge aliases together for same project when selecting - [x] If after merging there is only one project, go there by default