mirror of
https://github.com/ohwgiles/laminar.git
synced 2024-10-27 20:34:20 +00:00
examples: add git post-receive hook example
This commit is contained in:
parent
2de8b91ad2
commit
e67e0bc453
@ -198,6 +198,8 @@ This is what [git hooks](https://git-scm.com/book/gr/v2/Customizing-Git-Git-Hook
|
|||||||
LAMINAR_REASON="Push to git repository" laminarc queue example-build
|
LAMINAR_REASON="Push to git repository" laminarc queue example-build
|
||||||
```
|
```
|
||||||
|
|
||||||
|
For a more advanced example, see [examples/git-post-receive-hook-notes](https://github.com/ohwgiles/laminar/blob/master/examples/git-post-receive-hook-notes)
|
||||||
|
|
||||||
What if your git server is not the same machine as the laminar instance?
|
What if your git server is not the same machine as the laminar instance?
|
||||||
|
|
||||||
## Triggering on a remote laminar instance
|
## Triggering on a remote laminar instance
|
||||||
|
42
examples/git-post-receive-hook-notes
Executable file
42
examples/git-post-receive-hook-notes
Executable file
@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/bash -e
|
||||||
|
# Simple post-receive hook that triggers a laminar run
|
||||||
|
# for every commit pushed to every branch, and annotates
|
||||||
|
# the commit with the run number using a git note.
|
||||||
|
# On the cloned repository, useful config is
|
||||||
|
# git config --add remote.origin.fetch "+refs/notes/*:refs/notes/*"
|
||||||
|
# to automatically fetch all notes from the origin, and
|
||||||
|
# git config --add notes.displayRef "refs/notes/*"
|
||||||
|
# to display all notes in the git log by default
|
||||||
|
|
||||||
|
# The laminar job to trigger
|
||||||
|
LAMINAR_JOB=my-project
|
||||||
|
|
||||||
|
# Default notes ref is refs/notes/commits
|
||||||
|
NOTES_REF=refs/notes/ci
|
||||||
|
|
||||||
|
# For each ref pushed...
|
||||||
|
while read old new ref; do
|
||||||
|
# Skip tags, notes, etc. Only do heads.
|
||||||
|
# Extend this to only trigger on specific branches.
|
||||||
|
if [[ $ref != refs/heads/* ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
# Otherwise, for each new commit in the ref...
|
||||||
|
# (to only trigger on the newest, set commit=$new and delete the loop)
|
||||||
|
git rev-list $([[ $old =~ ^0+$ ]] && echo $new || echo $old..$new) | while read commit; do
|
||||||
|
# Queue the laminar run
|
||||||
|
run=$(laminarc queue $LAMINAR_JOB commit=$commit ref=$ref)
|
||||||
|
echo "Started Laminar $run for commit $commit to ref $ref"
|
||||||
|
|
||||||
|
# Add a git note about the run
|
||||||
|
blob=$(echo -n "Laminar-Run: $run" | git hash-object -w --stdin)
|
||||||
|
if last_note=$(git show-ref -s $NOTES_REF); then
|
||||||
|
git read-tree $last_note
|
||||||
|
p_arg=-p
|
||||||
|
fi
|
||||||
|
git update-index --add --cacheinfo 100644 $blob $commit
|
||||||
|
tree=$(git write-tree)
|
||||||
|
new_note=$(echo "Notes added by post-receive hook" | git commit-tree $tree $p_arg $last_note)
|
||||||
|
git update-ref $NOTES_REF $new_note $last_note
|
||||||
|
done
|
||||||
|
done
|
Loading…
Reference in New Issue
Block a user