# 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: 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