Skip to content
Snippets Groups Projects

update-deps.sh

  • Clone with SSH
  • Clone with HTTPS
  • Embed
  • Share
    The snippet can be accessed without any authentication.
    Authored by Ralf Jung
    Edited
    update-deps.sh 1.76 KiB
    #!/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
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Finish editing this message first!
    Please register or to comment