summaryrefslogtreecommitdiff
path: root/haunt/publisher/sourcehut.scm
diff options
context:
space:
mode:
Diffstat (limited to 'haunt/publisher/sourcehut.scm')
-rw-r--r--haunt/publisher/sourcehut.scm58
1 files changed, 58 insertions, 0 deletions
diff --git a/haunt/publisher/sourcehut.scm b/haunt/publisher/sourcehut.scm
new file mode 100644
index 0000000..035d399
--- /dev/null
+++ b/haunt/publisher/sourcehut.scm
@@ -0,0 +1,58 @@
+;;; Haunt --- Static site generator for GNU Guile
+;;; Copyright © 2023 Filip Lajszczak <filip@lajszczak.dev>
+;;;
+;;; This file is part of Haunt.
+;;;
+;;; Haunt 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.
+;;;
+;;; Haunt 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 Haunt. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+;; Sourcehut publisher.
+;;
+;;; Code:
+
+(define-module (haunt publisher sourcehut)
+ #:use-module (haunt config)
+ #:use-module (haunt publisher)
+ #:use-module (haunt site)
+ #:export (sourcehut-publisher))
+
+(define* (sourcehut-publisher #:key
+ (name %default-publisher-name)
+ ;; TODO: Factor out some helper for this.
+ (hut (if (file-exists? %hut) %hut "hut"))
+ (tar (if (file-exists? %tar) %tar "tar")))
+ "Return a new publisher named NAME that publishes a site to
+Sourcehut pages."
+ (define (publish site)
+ (let ((tarball (string-append (or (getenv "TMPDIR") "/tmp")
+ "/haunt-publish-sourcehut-"
+ (number->string (current-time))
+ ".tar.gz")))
+ (dynamic-wind
+ (lambda () #t)
+ (lambda ()
+ (run-command tar
+ "--directory" (site-absolute-build-directory site)
+ "--create" "--gzip"
+ "--file" tarball
+ ".")
+ (run-command hut "pages"
+ "publish"
+ "--domain" (site-domain site)
+ tarball))
+ (lambda ()
+ (when (file-exists? tarball)
+ (delete-file tarball))))))
+ (make-publisher name publish))