You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
boundary/.circleci/pre-commit

46 lines
1.7 KiB

#!/usr/bin/env bash
set -euo pipefail
# Check .circleci/config.yml is up to date and valid, and that all changes are
# included together in this commit.
# Fail early if we accidentally used '.yaml' instead of '.yml'
if ! git diff --name-only --cached --exit-code -- '.circleci/***.yaml'; then
echo "ERROR: File(s) with .yaml extension detected. Please rename them .yml instead."
exit 1
fi
# Succeed early if no changes to yml files in .circleci/ are currently staged.
# make ci-verify is slow so we really don't want to run it unnecessarily.
if git diff --name-only --cached --exit-code -- '.circleci/***.yml'; then
exit 0
fi
# Make sure to add no explicit output before this line, as it would just be noise
# for those making non-circleci changes.
echo "==> Verifying config changes in .circleci/"
echo "--> OK: All files are .yml not .yaml"
# Ensure commit includes _all_ files in .circleci/
# So not only are the files up to date, but we are also committing them in one go.
if ! git diff --name-only --exit-code -- '.circleci/***.yml'; then
echo "ERROR: Some .yml diffs in .circleci/ are staged, others not."
echo "Please commit the entire .circleci/ directory together, or omit it altogether."
exit 1
fi
# Even untracked yml or yaml files will get baked into the output.
# This is a loose check on _any_ untracked files in .circleci/ for simplicity.
if [ -n "$(git ls-files --others --exclude-standard '.circleci/')" ]; then
echo "ERROR: You have untracked files in .circleci/ please add or delete them."
exit 1
fi
echo "--> OK: All .yml files in .circleci are staged."
if ! make -C .circleci ci-verify; then
echo "ERROR: make ci-verify failed"
exit 1
fi
echo "--> OK: make ci-verify succeeded."