emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
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!

      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

  List information: https://www.orgmode.org/

* 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 public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).