[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 |
Hi,
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 ()
(interactive)
(or (zerop (shell-command (format "cd %s && git checkout master"
project-main-dir)))
(error (format "error checking out master in %s" project-main-dir))))
And my ‘:completion-function’ was as follows where ‘project-tmp-dir’ the
‘:publishing-directory’.
(defun project-completion-function ()
(interactive)
(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
files.
pages:
script:
- emacs --batch --no-init-file --load publish.el --funcall org-publish-all
artifacts:
paths:
- public
Rasmus
--
Enough with the blah blah!