mirror of
				https://github.com/ohwgiles/laminar.git
				synced 2025-06-13 12:54:29 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			43 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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
 |