git-project-manager/README.md
2023-12-12 16:30:33 -05:00

3.3 KiB

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
    2. you only need to update it if there are new projects the cache is unaware of
  2. Add -- find your project, give it any extra aliases you want
    1. run gpm project add (or padd if using the provided shell defaults)
  3. Go -- go to your project, fuzzy searching by alias
    1. clones your project if that's never been done
    2. the provided pgo func makes it easy
  4. Open -- rather than simply changing directories to a project, open it in your IDE
  5. 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
    2. match your alias exactly (or have only one result) and you go there right away
    3. positive reinforcement given for solid alias behavior
    4. manage aliases using gpm alias add or gpm alias delete
  6. List -- get a list of your configured projects any time with plist
  7. Reward -- buy the author a beer, because this thing is a time saver

Installing

  1. Install into your go path by running go install .
  2. Copy contrib/gpm_func_omz.zsh into your ~/.oh-my-zsh/custom/ path, or just source from your bashrc/zshrc
  3. Generate config file: gpm config gen --write
    1. You can run this any time to update settings
  4. Run gpm cache load (if aliases is in-place, otherwise gitlab-project-manager cache load)

Config Sample

gitlabHost: https://gitlab.sweetwater.com
gitlabToken: <your token here>
logLevel: info
cache:
  ttl: 168h
  load:
    ownerOnly: false

TODO

  • Fix initial setup requiring project path, and set https:// as default for gitlab host
  • 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
  • Add fzf to plist / gpm projects list
  • Make a Makefile
  • Add git repo status to project go (up-to-date, pending commits, etc..)
  • 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
  • Merge aliases together for same project when selecting
    • If after merging there is only one project, go there by default