tools/ci/actions/check-changes-modified.sh
#!/usr/bin/env bash
#**************************************************************************
#*                                                                        *
#*                                 OCaml                                  *
#*                                                                        *
#*                 David Allsopp, OCaml Labs, Cambridge.                  *
#*                                                                        *
#*   Copyright 2021 David Allsopp Ltd.                                    *
#*                                                                        *
#*   All rights reserved.  This file is distributed under the terms of    *
#*   the GNU Lesser General Public License version 2.1, with the          *
#*   special exception on linking described in the file LICENSE.          *
#*                                                                        *
#**************************************************************************

set -e

# Hygiene Checks: check that Changes has been updated in PRs
# One of the following must be true:
#   - A commit in the PR alters the Changes file
#   - The no-change-entry-needed label is applied to the PR

API_URL="$1"
shift 1

AUTH="authorization: Bearer $GITHUB_TOKEN"

# We need all the commits in the PR to be available
. tools/ci/actions/deepen-fetch.sh

MSG='Check Changes has been updated'
COMMIT_RANGE="$MERGE_BASE..$PR_HEAD"

LABEL='no-change-entry-needed'
# Check if Changes has been updated in the PR
if ! git diff "$COMMIT_RANGE" --name-only --exit-code Changes > /dev/null; then
  echo -e "$MSG: \e[32mYES\e[0m"
elif curl --silent --header "$AUTH" "$API_URL/labels" | grep -q "$LABEL"; then
  echo -e "$MSG: \e[33mSKIP\e[0m"
else
  echo -e "$MSG: \e[31mNO\e[0m"
  cat <<"EOF"
------------------------------------------------------------------------
Most contributions should come with a message in the Changes file, as
described in our contributor documentation:

  https://github.com/ocaml/ocaml/blob/trunk/CONTRIBUTING.md#changelog

Some very minor changes (typo fixes for example) may not need
a Changes entry. In this case, you may explicitly disable this test by
using the "no-change-entry-needed" label on the github pull request.
------------------------------------------------------------------------
EOF
  exit 1
fi
