Skip to content
Snippets Groups Projects

Course homepage for TATA54, elementary number theory

Convert from org-mode, deploy to gitlab

This repo is supposed to use a gitlab CI script to run emacs in batch on incoming org-mode files, converting them to html files, placed in the top-level public directory. At the moment, I run the emacs script locally.

Homepage url

The pages are available at https://jansn19.gitlab-pages.liu.se/tata54-kurshemsida/

The yaml file for Gitlab CI

Third attempt

No automatic CI pipeline build of html,

image: busybox

pages:
  stage: deploy
  script:
  - echo 'Nothing to do...'
  artifacts:
    paths:
    - public
    expire_in: 1 day
  rules:
    - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH

publish.el script

;; publish.el --- Publish org-mode project on Gitlab Pages
;; Author: Rasmus, modified by Jan Snellman

(add-to-list 'load-path "/usr/share/emacs/site-lisp")

(defun get-latest-org ()
  "Download the latest Org if the shipped version is too old."
  (let* ((default-directory "/tmp/")
         (org-dir "/tmp/org-mode/")
         (dev-url "https://code.orgmode.org/bzg/org-mode/archive/master.tar.gz")
         (htmlize-url "https://raw.githubusercontent.com/hniksic/emacs-htmlize/master/htmlize.el")
         (devp (zerop (shell-command (concat "wget -q --spider " dev-url)))))
    (unless (file-directory-p org-dir)
      (url-copy-file
       (if devp dev-url "https://orgmode.org/org-latest.tar.gz")
       "org.tar.gz" t)
      (shell-command "tar xfz org.tar.gz;"))
    (unless (file-exists-p (concat org-dir "lisp/org-loaddefs.el"))
      (shell-command (concat (concat "cd " org-dir ";")
                             "make autoloads")))
    (unless (featurep 'htmlize)
      (url-copy-file htmlize-url (concat org-dir "lisp/htmlize.el") t))
    (add-to-list 'load-path (concat org-dir "lisp/"))
    (add-to-list 'load-path (concat org-dir "contrib/lisp/"))))

;; If you need the latest version of Org run this command
;; (get-latest-org)

;; You can also install Org via package.el.

;; (setq package-selected-packages '(org))
;; (package-initialize)
;; (package-install-selected-packages)

(require 'org)
(require 'ox-publish)

;; Disable time-stamps
;; (setq org-publish-use-timestamps-flag nil)

(setq user-full-name "Jan Snellman")
(setq user-mail-address "jan.snellman@liu.se")

(setq org-export-with-section-numbers nil
      org-export-with-smart-quotes t
      org-export-with-toc nil)

(setq org-html-divs '((preamble "header" "top")
                      (content "main" "content")
                      (postamble "footer" "postamble"))
      org-html-container-element "section"
      org-html-metadata-timestamp-format "%Y-%m-%d"
      org-html-checkbox-type 'html
      org-html-html5-fancy t
      org-html-doctype "html5")

(defvar site-attachments (regexp-opt '("jpg" "jpeg" "gif" "png" "svg"
                                       "ico" "cur" "css" "js" "woff" "html" "pdf")))

(defvar site-images (regexp-opt '("jpg" "jpeg" "gif" "png" "svg"
                                  "ico" )))


(setq org-publish-project-alist
      '(("tata54-org"
         :base-directory "./homepage"
         :base-extension "org"
         :recursive t
         :publishing-function org-html-publish-to-html
         :publishing-directory "./public"
         :exclude "public/"
         :auto-sitemap t
         :sitemap-filename "sitemap.org"
         :sitemap-title "Kurshemsida"
         :sitemap-file-entry-format "%d *%t*"
         :html-head-extra "<link rel=\"icon\" type=\"image/x-icon\" href=\"/favicon.ico\"/>"
         :auto-preamble nil
         :html-preamble "<div id=\"navbar\" style =\"text-align: center;\">
              <a href='https://liu.se'>LiU</a> -
              <a href='https://liu.se/organisation/liu/mai'>MAI</a> -
              <a href='https://liu.se/organisation/liu/mai'>Grundutbildning</a> -
              <a href='https://courses.mai.liu.se/Lists/html/'>Kurser</a> -
              <a href='index.html'>TATA54</a></div>"
         :sitemap-style list
         :sitemap-sort-files anti-chronologically)

        ;; ("tata54-static"
        ;;  :base-directory "./homepage"
        ;;  :exclude "public/"
        ;;  :base-extension site-attachments
        ;;  :publishing-directory "./public"
        ;;  :publishing-function org-publish-attachment
        ;;  :recursive t)

        ("tata54-literature"
         :base-directory "./homepage/literature"
         :exclude "public/"
         :base-extension "pdf"
         :publishing-directory "./public/literature"
         :publishing-function org-publish-attachment
         :recursive t)

        ("tata54-exams"
         :base-directory "./homepage/exams"
         :exclude "public/"
         :base-extension "pdf"
         :publishing-directory "./public/exams"
         :publishing-function org-publish-attachment
         :recursive t)

        ("tata54-lectures"
         :base-directory "./homepage/lectures"
         :exclude "public/"
         :base-extension "pdf"
         :publishing-directory "./public/lectures"
         :publishing-function org-publish-attachment
         :recursive t)

        ("tata54-labs"
         :base-directory "./homepage/labs"
         :exclude "public/"
         :base-extension "html\\|ipynb"
         :publishing-directory "./public/labs"
         :publishing-function org-publish-attachment
         :recursive t)

        ("tata54-images"
         :base-directory "./homepage/img"
         :exclude "public/"
         :base-extension  "png\\|svg\\|jpg\\|jpeg"
         :publishing-directory "./public/img"
         :publishing-function org-publish-attachment
         :recursive t)


        ("tata54" :components ("tata54-org"
                               "tata54-literature"
                               "tata54-exams"
                               "tata54-lectures"
                               "tata54-labs"
                               "tata54-images"))))

build.sh

#!/bin/sh
emacs --batch --no-init-file --load publish.el --funcall org-publish-all

Styling

At the moment we use a modified version of org-html-themes by Fabrice Niessen to provide the css and styling. There is an update_theme.sh which can be run after the org file describing the theme has been modified.