git-site-gen AKA gsg
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
- Show last time site was generated in top level index
- Links to view raw files (cannot be used with cURL as pages are rendered as HTML)
TODO:
- User-agent detection for
curl http://link | bash
use cases (stretch)
- 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 (Partially implemented)
- HTML based syntax highlighting for files
- File history
- Display/browse branches
- More efficient/faster detection of binary files
Layout
- 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
How to use
- Clone this repo and run the install script ( must have also cloned/installed aforementioned Shellex dep )
- 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
- 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