# git-site-gen AKA gsg # * Tool used to generate a bare bones, pure HTML static website from information availble in a git project dir. See: . * Inspired by the much better/full-featured cgit. * See gsgd for git hooks based calls to gsgd: * Not sure if this will be widely useful, mostly written for learning purposes. ## Design Goals ## * General purpose/easy to use * Easy to hack/customize * Small library dependency footprint ## Features ## DONE: * Generate top level index with links to all projects * Generate project specific index with links to git log/diffs and file content of repo * Extremely basic markdown parser (only supports headings, non nested bullets, backticks code blocks, links and strikethru) * Line numbers for file browsing * Diff highlighting for log * Show git:// address for cloning (configurable via config file) * Support detection of misconfig of config file (pretty basic at this stage) * Detects binary files TODO: * Get diff stat for top of log index links * Code needs to be more robust / handle failure cases * Need to recurse git home, right now will only pull dirs in root of git home * README.md markdown renderer/parser / display in project index (Halfway / in progress) * (Stretch Goal) HTML based syntax highlighting for files * View history of files * Add support for displaying difference branches * Figure out more efficient/faster detection of binary files ## Framework Plans ## * gsg -- Perl script to generate the site, uses modules below * Gsg::Gather.pm -- module to assemble data structures from git trees that need to be obtained as part of generating the site * Gsg::Html.pm -- probably a bad name, used for writing HTML files and/or editing text in other data structures with html content * Gsg::MdParse.pm -- module for parsing markdown. Likely a fools errand to be writing this myself but I'd like to try * Gsg::ConfigParse.pm -- module to parse gsg config, might be overkill to have it's own module * gsg.config -- Config file that gsg reads to inform behavior (git repos dir, what to include/exclude, etc) ## Deps/Compatibility ## * Linux only (will probably work on BSD?) * Shellex.pm ( ) * git * Perl Log4Perl (packaged by most Linux distros) * Perl GetOpt (packaged by most Linux distros) * Assumes git directories are suffixed with ".git" ## How to use ## 1. Clone this repo and run the install script ( must have also cloned/installed aforementioned Shellex dep ) 2. Edit the config file with your desired params or create one and pass it in with `gsg --config-file $path_to_config` , delete any that you are not using 3. Run ./gsg ## Contributions/Issues/Bugs ## Reach out to me at via email at pm dot me, spesk@. If it turns out that people actually want to use this I'll move it to another git host that provides more features for a collaborative workflow. ## License ## GPLv3 - see LICENSE.md