#!/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_ROLE (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