#!/bin/bash set -euo pipefail BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD) # Test if all is clean. if [ -n "$(git status --porcelain)" ]; then echo "Working dir is not clean!" exit 1 fi if ! [[ "$BRANCH_NAME" =~ ^master ]]; then echo "Not on a master branch!" exit 1 fi if [[ "$(git rev-parse "$BRANCH_NAME")" != "$(git rev-parse "$(git rev-parse --abbrev-ref --symbolic-full-name @{u})")" ]]; then echo "branch unsynced!" exit 1 fi # Make sure we have the latest info. git pull opam update iris-dev echo echo "## Updating opam file" # Find out about auto-opam dependencies. VERSION_REGEX='dev\.[0-9]{4}-[0-9]{2}-[0-9]{2}\.[0-9]+\.[0-9a-f]{8}' DEPS=$(cat opam | egrep "\"coq-[a-z0-9-]+\" *\\{ \\(= \"$VERSION_REGEX\"") # Find latest version for each of them. for DEP in $(echo "$DEPS" | egrep -o 'coq-[a-z0-9-]+'); do LATEST=$(opam show "$DEP" -f all-versions | tr -s '[:blank:]' '\n' | tail -n 1) echo "Latest version of $DEP is $LATEST" # edit opam file sed -E -i "s/(\"$DEP\" *\\{ \\(= )\"$VERSION_REGEX\"/\\1\"$LATEST\"/" opam done # See if that changed anything if ! [ -n "$(git status --porcelain)" ]; then echo "Everything up-to-date already, nothing to do!" exit 0 fi echo echo "## Testing opam file" # Test if this is installable. # Of course, this being opam, doing the test is quite annoying: we have to ensure that opam # actually reads the updated deps file. make build-dep/opam opam update --development -y if ! make build-dep OPAMFLAGS="--dry-run -y"; then echo "opam failed, dependencies are likely bogus" exit 1 fi # Create a commit. echo git commit -am "update dependencies" git show # Ask user to push read -p "Do you want me to push this change? (y/N) " ANSWER if [[ "$ANSWER" == y* ]]; then git push fi