52 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| # A sample pre-build hook
 | |
| #
 | |
| # Checks:
 | |
| # 1. We have a clean checkout
 | |
| # 2. A remote is configured
 | |
| # 3. The branch has been pushed to the remote
 | |
| # 4. The version we are deploying matches the remote
 | |
| #
 | |
| # These environment variables are available:
 | |
| # KAMAL_RECORDED_AT
 | |
| # KAMAL_PERFORMER
 | |
| # KAMAL_VERSION
 | |
| # KAMAL_HOSTS
 | |
| # KAMAL_ROLES (if set)
 | |
| # KAMAL_DESTINATION (if set)
 | |
| 
 | |
| if [ -n "$(git status --porcelain)" ]; then
 | |
|   echo "Git checkout is not clean, aborting..." >&2
 | |
|   git status --porcelain >&2
 | |
|   exit 1
 | |
| fi
 | |
| 
 | |
| first_remote=$(git remote)
 | |
| 
 | |
| if [ -z "$first_remote" ]; then
 | |
|   echo "No git remote set, aborting..." >&2
 | |
|   exit 1
 | |
| fi
 | |
| 
 | |
| current_branch=$(git branch --show-current)
 | |
| 
 | |
| if [ -z "$current_branch" ]; then
 | |
|   echo "Not on a git branch, aborting..." >&2
 | |
|   exit 1
 | |
| fi
 | |
| 
 | |
| remote_head=$(git ls-remote $first_remote --tags $current_branch | cut -f1)
 | |
| 
 | |
| if [ -z "$remote_head" ]; then
 | |
|   echo "Branch not pushed to remote, aborting..." >&2
 | |
|   exit 1
 | |
| fi
 | |
| 
 | |
| if [ "$KAMAL_VERSION" != "$remote_head" ]; then
 | |
|   echo "Version ($KAMAL_VERSION) does not match remote HEAD ($remote_head), aborting..." >&2
 | |
|   exit 1
 | |
| fi
 | |
| 
 | |
| exit 0
 | 
