depp

No frills static page generator for Git repositories

git clone https://git.8pit.net/depp.git

commits

2024-12-08 README.md: Punctuation Sören Tempel
2024-12-03 gitweb: Change log order Sören Tempel
2024-12-03 Merge branch 'incremental-rebuild' Sören Tempel
2024-11-30 Move ReadState error handling from gitweb/ to depp Sören Tempel
2024-11-30 gitweb: Make code for detecting dead parent directories more robust Sören Tempel

Clone the repository to access all 280 commits.

README

No frills static page generator for Git repositories.

Motivation

Contrary to existing static page generator approaches, this software does not strive to be a fully featured git browser for the web. Instead, the idea is to provide a quick overview for a given repository, thereby allowing users to decide whether it is interesting enough to be cloned. As such, this software does intentionally not provide a web frontend for existing tools like git-log(1), git-blame(1), et cetera. If more information is needed, the user should simply clone the repository and use git(1) as usual.

Further, this page generator is entirely written in Go using the pure Go Git library go-git instead of libgit2 to interact with Git repositories. Thereby, allowing the implementation to be compiled as a single statically linked binary while also embedding all HTML and CSS files into the binary through Go’s embed package.

Features

Status

I use this for my own Git server. I am presently not aware of any bugs and consider it mostly finished software. As I use it myself, I am committed to maintaining it for the foreseeable future.

Installation

Installation requires a Go toolchain. Assuming a supported Go is available, the software can be installed either via go install or make. Both methods will install two binaries: depp for generating HTML files on a per-repository basis and depp-index which can optionally be used to generate an HTML index page for listing all hosted git repositories. Both commands are further described in the provided man page, a usage example is provided below.

go install

To install to the program using go install run the following command:

$ go install github.com/nmeum/depp/...@latest

Note that this will not install additional documentation files, e.g. man pages.

make

Clone the repository manually and ran the following commands:

$ make
$ sudo make install

This is the preferred method when packaging this software for a distribution.

Usage

Assuming you have a web server serving files located at /var/www/htdocs/git.example.org, you want 10 commits on the index page, and the repository can be cloned via git://example.org/foo.git:

$ depp -c 10 -u git://example.org/foo.git \
    -d /var/www/htdocs/git.example.org/foo \
    <path to git repository to generate pages for>

To automate this process, create a post-receive hook for your repository on your git server, see githooks(5) for more information. Keep in mind that the repository page itself only needs to be regenerated if the default branch is pushed, since only the default branch is considered by depp. As such, an exemplary post-receive hook may look as follows:

#!/bin/sh

repo=$(git rev-parse --absolute-git-dir)
name=${repo##*/}

rebuild=0
defref=$(git symbolic-ref HEAD)
while read local_ref local_sha remote_ref remote_sha; do
    if [ "${remote_ref}" = "${defref}" ]; then
        rebuild=1
        break
    fi
done

# Only rebuild the HTML if the default ref was pushed.
[ ${rebuild} -eq 1 ] || exit 0

depp -u "git://git.example.org/${name}" \
    -d "/var/www/htdocs/git.example.org/${name}" .

If usage of deep-index is also desired, the index page can either be rebuild as part of the post-receive hook or in a separate cronjob.

README Rendering

Rendering README files written in a chosen markup language (e.g. markdown) is supported. This is achieved by including an executable file called git-render-readme in the bare Git repository. When executed, this file receives the README content on standard input and must write plain HTML to standard output.

As an example, consider the following git-render-readme script which uses the markdown(1) program provided by the discount Markdown implementation:

#!/bin/sh
exec markdown -f autolink

License

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.