From: Rasmus <rasmus@gmx.us>
To: emacs-orgmode@gnu.org
Subject: Re: run shell command after publishing project
Date: Tue, 19 Dec 2017 12:37:10 +0100 [thread overview]
Message-ID: <87r2rrt0d5.fsf@gmx.us> (raw)
In-Reply-To: CAN_Dec_eF7Dt-aexcGaULSJnuj=uQH4Y7OaM0RwZFF4qz2GV2Q@mail.gmail.com
Hi,
Matt Price <moptop99@gmail.com> 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!
prev parent reply other threads:[~2017-12-19 11:37 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-08 19:28 run shell command after publishing project Matt Price
2017-12-08 19:58 ` Kaushal Modi
2017-12-08 21:37 ` Matt Price
2017-12-08 22:19 ` Kaushal Modi
2017-12-18 22:21 ` Matt Price
2017-12-19 11:37 ` Rasmus [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87r2rrt0d5.fsf@gmx.us \
--to=rasmus@gmx.us \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.