#!/bin/bash # We'd like to run the pre-commit hooks only on files that are being modified by # this merge request, however `CI_MERGE_REQUEST_TARGET_BRANCH_SHA` is a'premium' # feature according to GitLab... so this is a workaround for extracting the hash CI_MERGE_REQUEST_TARGET_BRANCH_NAME="${1:-master}" # Set to master or 1st input CI_COMMIT_SHA=$(git rev-parse HEAD) export CI_MERGE_REQUEST_TARGET_BRANCH_SHA=$(git ls-remote origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME | cut -d$'\t' -f1) FILES=$(git diff $CI_COMMIT_SHA $CI_MERGE_REQUEST_TARGET_BRANCH_SHA --name-only | tr '\n' ' ') echo "Running pre-commit on diff from $CI_COMMIT_SHA to $CI_MERGE_REQUEST_TARGET_BRANCH_SHA ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME)" # Pass list of modified files to pre-commit so that it only checks them echo $FILES | xargs pre-commit run --color=always --files