when:
- event: ["push", "pull_request"]
branch: master
engine: microvm
image: nixos
dependencies:
- git
- bash
# The default clone is depth 1 (single SHA), which is enough for a push but not
# for computing a pull-request commit range. Fetch some history so we can find
# the merge-base with the target branch.
clone:
depth: 100
steps:
- name: lint commit messages
command: |
set -eu
lint=.tangled/hooks/commit-msg-lint.sh
chmod +x "$lint"
kind="${TANGLED_PIPELINE_KIND:-push}"
head="${TANGLED_COMMIT_SHA:-HEAD}"
# For a pull request, lint every commit between the target branch and the
# PR head. For a push, only the tip SHA is known, so lint just that.
if [ "$kind" = "pull_request" ]; then
base_branch="${TANGLED_PR_TARGET_BRANCH:-${TANGLED_REPO_DEFAULT_BRANCH:-master}}"
git fetch --depth=100 origin "$base_branch"
base="$(git merge-base FETCH_HEAD "$head" || true)"
if [ -n "$base" ]; then
exec "$lint" --range "$base" "$head"
fi
echo "commit-lint: no merge-base with $base_branch; linting tip only" >&2
fi
exec "$lint" --rev "$head"