summaryrefslogtreecommitdiff
path: root/etc
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2020-08-13 19:21:14 +0200
committerJonas Smedegaard <dr@jones.dk>2020-08-13 19:21:14 +0200
commit95862f2b20c81294413824ec2dd00f9b17905994 (patch)
tree828217c395c60630070510ee247e323861260b86 /etc
initial commit
Diffstat (limited to 'etc')
-rw-r--r--etc/apache2/conf-available/local-cgit-legacy.conf157
-rw-r--r--etc/apache2/conf-available/local-cgit.conf28
-rw-r--r--etc/cgitrc29
-rw-r--r--etc/uwsgi/apps-available/local-git.ini25
4 files changed, 239 insertions, 0 deletions
diff --git a/etc/apache2/conf-available/local-cgit-legacy.conf b/etc/apache2/conf-available/local-cgit-legacy.conf
new file mode 100644
index 0000000..3a0f593
--- /dev/null
+++ b/etc/apache2/conf-available/local-cgit-legacy.conf
@@ -0,0 +1,157 @@
+# Based on http://www.clearchain.com/blog/posts/cgit-upgrade-gitweb-retired
+#
+# Redirects mapping gitweb -> cgit
+#
+# Gitweb uses get targets seperated by ;
+#
+# /?...;...;...
+#
+# p = Project
+# a = Action like (
+# blob,
+# blob_plain,
+# commitdiff,
+# commit,
+# history,
+# log,
+# rss|atom,
+# shortlog,
+# summary,
+# tag,
+# tree,
+# snapshot
+# )
+# h = SHA Hash
+# hb= SHA Hash Tree Base
+# f= file/dir
+# sf= snapshot format
+#
+# Cgit uses the following:
+#
+# /project/action/?...
+#
+# action ( commit, log, diff, tree, tag, patch )
+#
+# id = SHA Hash
+# id2 = SHA Hash
+# h = head
+#
+# Translation rules
+#
+# Project is a straight redirect
+# ---
+# /?p=(.+)\.git; /$1/
+#
+# Action requires a mapping
+# ---
+# a=(blob|tree) /tree/
+# a=(blobdiff|commitdiff) /diff/
+# a=commit /commit/
+# a=(summary) /
+# a=(shortlog|log|history) /log/
+# a=tag /tag/
+# a=blob_plain /blob/
+# a=rss|atom /atom
+#
+# Targets require mapping
+# ---
+# h=(.+) id=$1
+# f=(.+) /$1
+# hb=(.+) id2=$1
+#
+# Now putting it all together
+#
+RewriteEngine On
+
+# blob
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blob;h=([^;]+);hb=([^;]+);f=([^;]+)
+RewriteRule ^/$ /%1.git/tree/%5?id=%3;id2=%4 [R=permanent,L,NE,QSD]
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blob;f=([^;]+);h=([^;]+);hb=([^;]+)
+RewriteRule ^/$ /%1.git/tree/%3?id=%4;id2=%5 [R=permanent,L,NE,QSD]
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blob;hb=([^;]+);f=([^;]+)
+RewriteRule ^/$ /%1.git/tree/%4?id=%3 [R=permanent,L,NE,QSD]
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blob;f=([^;]+)
+RewriteRule ^/$ /%1.git/tree/%3 [R=permanent,L,NE,QSD]
+
+# tree
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=tree;h=([^;]+);hb=([^;]+);f=([^;]+)
+RewriteRule ^/$ /%1.git/tree/%5?id=%4 [R=permanent,L,NE,QSD]
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=tree;hb=([^;]+);f=([^;]+)
+RewriteRule ^/$ /%1.git/tree/%4?id=%3 [R=permanent,L,NE,QSD]
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=tree;h=([^;]+);hb=([^;]+)
+RewriteRule ^/$ /%1.git/tree/?id=%4 [R=permanent,L,NE,QSD]
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=tree;hb=([^;]+)
+RewriteRule ^/$ /%1.git/tree/?id=%3 [R=permanent,L,NE,QSD]
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=tree
+RewriteRule ^/$ /%1.git/tree/? [R=permanent,L,NE,QSD]
+
+# commitdiff
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blobdiff;h=([^;]+);hp=([^;]+);hb=([^;]+);f=([^;]+)
+RewriteRule ^/$ /%1.git/diff/%6?id2=%4;id=%3;id3=%5 [R=permanent,L,NE,QSD]
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=commitdiff;h=([^;]+);hp=([^;]+)
+RewriteRule ^/$ /%1.git/diff/?id=%4;id2=%3 [R=permanent,L,NE,QSD]
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=commitdiff;h=([^;]+)
+RewriteRule ^/$ /%1.git/diff/?id=%3 [R=permanent,L,NE,QSD]
+
+# commit
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=commit;h=([^;]+)
+RewriteRule ^/$ /%1.git/commit/?id=%3 [R=permanent,L,NE,QSD]
+
+# shortlog
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=shortlog;h=([^;]+)
+RewriteRule ^/$ /%1.git/log/?id=%3 [R=permanent,L,NE,QSD]
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=shortlog
+RewriteRule ^/$ /%1.git/log/? [R=permanent,L,NE,QSD]
+
+# log
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=log;h=([^;]+)
+RewriteRule ^/$ /%1.git/log/?id=%3 [R=permanent,L,NE,QSD]
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=log
+RewriteRule ^/$ /%1.git/log [R=permanent,L,NE,QSD]
+
+# history
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=history;h=([^;]+);hb=([^;]+);f=([^;]+)
+RewriteRule ^/$ /%1.git/log/%5?id=%4 [R=permanent,L,NE,QSD]
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=history;f=([^;]+);h=([^;]+);hb=([^;]+)
+RewriteRule ^/$ /%1.git/log/%3?id=%4 [R=permanent,L,NE,QSD]
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=history;f=([^;]+);h=([^;]+)
+RewriteRule ^/$ /%1.git/log/%3?id=%4 [R=permanent,L,NE,QSD]
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=history;h=([^;]+);hb=([^;]+)
+RewriteRule ^/$ /%1.git/log/?id=%4 [R=permanent,L,NE,QSD]
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=history;hb=([^;]+);f=([^;]+)
+RewriteRule ^/$ /%1.git/log/%4?id=%3 [R=permanent,L,NE,QSD]
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=history;hb=([^;]+)
+RewriteRule ^/$ /%1.git/log/?id=%3 [R=permanent,L,NE,QSD]
+
+# tag
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=tag;h=([^;]+)
+RewriteRule ^/$ /%1.git/tag/?id=%4 [R=permanent,L,NE,QSD]
+
+# blob_plain
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blob_plain;h=([^;]+);f=([^;]+)
+RewriteRule ^/$ /%1.git/blob/%4?id=%3 [R=permanent,L,NE,QSD]
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blob_plain;f=([^;]+);hb=([^;]+)
+RewriteRule ^/$ /%1.git/plain/%3?id2=%4 [R=permanent,L,NE,QSD]
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blob_plain;f=([^;]+)
+RewriteRule ^/$ /%1.git/plain/%3 [R=permanent,L,NE,QSD]
+
+# rss|atom
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=(rss|atom);h=refsheads/([^;]+)
+RewriteRule ^/$ /%1.git/atom?h=%4 [R=permanent,L,NE,QSD]
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=(rss|atom)
+RewriteRule ^/$ /%1.git/atom [R=permanent,L,NE,QSD]
+
+# snapshot
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=snapshot;h=([^;]+);sf=([^;]+)
+RewriteRule ^/$ /%1.git/snapshot/%3.tar.gz [R=permanent,L,NE,QSD]
+
+# summary
+RewriteCond %{QUERY_STRING} p=([^;]+)(\.git)(;a=summary)?$
+RewriteRule ^/$ /%1 [R=permanent,L,NE,QSD]
+
+# Failsafes in case nothing above matches,
+# try at least to put the person in the project, else root of cgit
+RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?.*
+RewriteRule ^/$ /%1 [R=temp,L,NE,QSD]
+RewriteCond %{QUERY_STRING} .+
+RewriteRule ^/.+ / [R=temp,L,NE,QSD]
diff --git a/etc/apache2/conf-available/local-cgit.conf b/etc/apache2/conf-available/local-cgit.conf
new file mode 100644
index 0000000..f307242
--- /dev/null
+++ b/etc/apache2/conf-available/local-cgit.conf
@@ -0,0 +1,28 @@
+Define FEATUREWEBROOT /usr/local/share/feature/source-hosting/web/
+
+AddDefaultCharset UTF-8
+
+<Directory /usr/share/cgit>
+ Options None
+ AllowOverride None
+ Require all granted
+</Directory>
+
+<Directory ${FEATUREWEBROOT}>
+ Options None
+ AllowOverride None
+ Require all granted
+</Directory>
+
+Alias /cgit-css/ /usr/share/cgit/
+Alias /favicon.ico /usr/share/cgit/favicon.ico
+Alias /robots.txt /usr/share/cgit/robots.txt
+
+Alias /cgit-feature/ ${FEATUREWEBROOT}
+
+# this requires cgit config: enable-index-links=1
+RedirectMatch permanent ^/([^./]+)\.git(/.*) /$1$2
+
+<LocationMatch ^/(?![^./]+\.git/|cgit-css/.*|cgit-local/.*|favicon\.ico|robots\.txt|\.well-known/acme-challenge/)>
+ ProxyPass unix:/run/uwsgi/app/local-git/socket|uwsgi://local-git
+</LocationMatch>
diff --git a/etc/cgitrc b/etc/cgitrc
new file mode 100644
index 0000000..003d7a2
--- /dev/null
+++ b/etc/cgitrc
@@ -0,0 +1,29 @@
+#
+# cgit config
+# see cgitrc(5) for details
+
+# Depends: cmark highlight
+
+css=/cgit-feature/feature.css
+logo=/cgit-css/cgit.png
+
+remove-suffix=1
+
+clone-url=git://$HTTP_HOST/$CGIT_REPO_URL https://$HTTP_HOST$SCRIPT_NAME/$CGIT_REPO_URL http://$HTTP_HOST$SCRIPT_NAME/$CGIT_REPO_URL
+
+# (ab)use source filter to parse markdown as html,
+# with line-numbered + highlighted plaintext only as fallback
+# TODO: add anchor to line-numbering:
+# <li style='list-style-type:none'><a id='n2' href='#n2'>2</a>
+# TODO: hide anchor except in :hover mode:
+# <li><a id='n2' href='#n2'>ยง</a>
+enable-tree-linenumbers=0
+source-filter=/usr/local/share/feature/source-hosting/script/syntax-highlighting.sh
+
+about-filter=/usr/local/share/feature/source-hosting/script/about-formatting.sh
+readme=:README.md
+
+cache-size=1000
+
+# must be last!
+scan-path=$DOCUMENT_ROOT
diff --git a/etc/uwsgi/apps-available/local-git.ini b/etc/uwsgi/apps-available/local-git.ini
new file mode 100644
index 0000000..7fcaf54
--- /dev/null
+++ b/etc/uwsgi/apps-available/local-git.ini
@@ -0,0 +1,25 @@
+[uwsgi]
+
+# serve via uwsgi protocol to frontend webserver
+# * load CGI plugin as default modifier1 to ease frontend setup
+# * load uGreen for cheap concurrency
+plugins = 0:cgi,ugreen
+
+ini = :app
+#ini = :static
+
+[app]
+
+async = 1000
+ugreen = true
+offload-threads = 5
+
+cgi = /=/usr/lib/cgit/cgit.cgi
+
+[static]
+
+# serve static files directly (even better: serve by frontend webserver)
+check-static-docroot = 1
+static-map = /cgit-css/=/usr/share/cgit/
+static-map = /favicon.ico=/usr/share/cgit/favicon.ico
+static-map = /robots.txt=/usr/share/cgit/robots.txt