[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] run shell command after publishing project

From: Rasmus
Subject: Re: [O] run shell command after publishing project
Date: Tue, 19 Dec 2017 12:37:10 +0100
User-agent: Emacs Gnus


Matt Price <address@hidden> writes:

> I'm setting up a new workflow using Kauhsal's ox-hugo.  I keep all my
> course materials in a few org files & publish to hugo-flavoured markdown.
> My source materials live in one git repo, and my website in another.  After
> exporting any of my my courses to the local hugo directory, I'd like to run
> a shell script that I'll keep in my org-files directory.

Do you mean commit or publish instead of export?  Otherwise you might have
to keep track of whether you are exporting to buffer as a buffer still has
a default-directory.  It would be easier to publish.

> That script
> - cds to the website repo directory, commits changes to the website master
> branch, - runs hugo,
> - switches to the "public" directory of compiled html pages, which has a
> worktree checked out to  the  gh-pages branch,
> - commits changes there as well, and then
> - pushes both branches to github.
> The script seems to work OK, and now I would like to run it every time I
> export from the appropriate projects. Is there a good way for me to do
> this? I guess a hook that only runs under certain conditions?

That is a sane approach with github pages, indeed.

I did something similar when I used github pages, but with ox-publish.  My
‘:preparation-function’ was

(defun project-prep-function ()
  (or (zerop (shell-command (format "cd %s && git checkout master" 
      (error (format "error checking out master in %s" project-main-dir))))

And my ‘:completion-function’ was as follows where ‘project-tmp-dir’ the

(defun project-completion-function ()
  (let ((cd (format "cd %s && " project-main-dir)))
    (shell-command (concat cd "git commit -am \"auto-check-in\""))
    (or (zerop (shell-command (concat cd "git checkout gh-pages")))
        (error (format "error checking out gh-pages in %s" project-main-dir)))
    (or (zerop (shell-command (format "mv %s/*.html %s"
                                      project-tmp-dir project-main-dir)))
        (error "error moving files"))
    (or (zerop (shell-command
                (concat cd "git add *.html && git commit -am 'updated html'")))
        (error "error adding html files"))
    (or (zerop (shell-command
                (concat cd "git push origin gh-pages")))
        (warn "error pushing gh-pages"))
    (or (zerop (shell-command (concat cd "git checkout master")))
(error "error checking out master"))))

> If I can get this to work, and then also auto export every time I commit
> the org-files to master (maybe with a post-commit git hook of ~emacsclient
> -e '(org-publish-project "course1"~ ?), then I will maybe be almost happy!

If you use ox-publish you could auto-commit whenever you publish a
project.  But I guess you could also use a hook.  I use this to publish:

    emacs --batch --no-init-file --load publish.el --funcall org-publish-all

I do it via Gitlab CI, though, as I only want to keep track of source

    - emacs --batch --no-init-file --load publish.el --funcall org-publish-all
      - public


Enough with the blah blah!

reply via email to

[Prev in Thread] Current Thread [Next in Thread]