aboutsummaryrefslogtreecommitdiff
;; SPDX-License-Identifier: CC0-1.0

;; Copyright (C) 2022 Wojtek Kosior <koszko@koszko.org>
;;
;; Available under the terms of Creative Commons Zero v1.0 Universal.

(define-module (koszko-org-website))

(use-modules
 (ice-9 rdelim)
 (ice-9 regex))

(define %source-dir
  (let* ((this-file (search-path %load-path "koszko-org-website.scm"))
         (proj-dir (dirname (dirname this-file))))
    (if (absolute-file-name? proj-dir)
        proj-dir
        (string-append (getcwd) "/" proj-dir))))

;; The PKG-INFO file is generated when running `python3 -m build -s` or similar.
;; It is also automatically included in the source release tarballs.
(define %pkg-info-path
  (string-append %source-dir "/src/koszko_org_website.egg-info/PKG-INFO"))

(define %website-version
  (if (access? %pkg-info-path R_OK)
      (call-with-input-file %pkg-info-path
        (lambda (port)
          (let ((process-line
                 (lambda (self-ref)
                   (let ((match-result
                          (string-match "^Version: (.*)" (read-line port))))
                     (if match-result (match:substring match-result 1)
                         (self-ref self-ref))))))
            (process-line process-line))))
      "unknown"))

(define source-tarball-name
  (string-append "koszko_org_website-" %website-version ".tar.gz"))

(use-modules
 (guix packages)
 (guix gexp)
 (guix build-system python)
 ((guix licenses) #:prefix license:)
 (gnu packages python-build)
 (gnu packages python-web)
 (gnu packages python-xyz)
 (gnu packages python-check))

(define-public koszko-org-website
  (package
    (name "koszko-org-website")
    (version %website-version)
    (source
     ;; setuptools_scm makes it impossible to build directly from git
     ;; checkout. We instead build from source tarball generated under ./dist/.
     (local-file (string-append %source-dir "/dist/" source-tarball-name)))
    (build-system python-build-system)
    (arguments
     `(#:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'replace-wsgi.py
           (lambda* (#:key inputs outputs #:allow-other-keys)
             ;; In the wsgi.py file, embed the PYTHONPATH containing both the
             ;; dependencies and the python modules of this package. This will
             ;; make them available at runtime.
             (let ((pythonpath
                    (string-append (getenv "GUIX_PYTHONPATH")
                                   ":"
                                   (site-packages inputs outputs))))
               (substitute* "wsgi.py"
                 (("^from .* import .*" import-line)
                  (string-append
                   "# Make Guix-installed dependencies visible to Python.\n"
                   "import sys\n"
                   "sys.path.extend('" pythonpath "'.split(':'))\n"
                   "\n"
                   import-line))))))
         (add-after 'install 'install-wsgi-script
           (lambda* (#:key inputs outputs #:allow-other-keys)
             (let* ((out (assoc-ref outputs "out"))
                    (share-dir (string-append out "/share/koszko-org-website")))
               (mkdir-p share-dir)
               (copy-file "wsgi.py" (string-append share-dir "/wsgi.py"))))))))
    (propagated-inputs
     (list python-flask))
    (native-inputs
     (list python-setuptools-scm
           python-babel
           python-pypa-build
           python-mypy))
    (home-page "https://git.koszko.org/koszko-org-website")
    (synopsis "koszko.org website")
    (description "This is the packaging of the website at https://koszko.org.")
    (license (list license:cc0
                   license:cc-by3.0
                   (license:non-copyleft
                    "file://LICENSES/LicenseRef-Yahoo-BSD-3.txt")
                   (license:x11-style
                    "file://LICENSES/LicenseRef-Normalize-CSS-MIT.txt")
                   (license:fsdg-compatible
                    "file://LICENSES/LicenseRef-no-facebook.txt")))))