#!/usr/bin/env bash # Fail if any command fails set -e PROJECT=$1 VERSION=$2 NO_COMMIT=$3 # Sanity check that we actually have a version if [ "$VERSION" = "" ]; then echo "Usage $0 [--no-commit]" exit 1 fi # Check the format of version if [ ! "$(echo "$VERSION" | grep -E "^[0-9]+\.[0-9]+\.[0-9]+$")" ]; then echo "Version must be of the form x.y.z, got $VERSION" exit 1 fi # Check if no commit option is valid if [ ! "$NO_COMMIT" = "" ] && [ ! "$NO_COMMIT" = "--no-commit" ]; then echo "Must pass either no last argument or --no-commit" exit 1 fi # Set up $DIRECTORY and $TAGNAME case "$PROJECT" in agb) DIRECTORY="agb" TAGNAME="v$VERSION" ;; agb-image-converter) DIRECTORY="agb-image-converter" TAGNAME="agb-image-converter/v$VERSION" ;; agb-sound-converter) DIRECTORY="agb-sound-converter" TAGNAME="agb-sound-converter/v$VERSION" ;; agb-macros) DIRECTORY="agb-macros" TAGNAME="agb-macros/v$VERSION" ;; mgba-test-runner) DIRECTORY="mgba-test-runner" TAGNAME="mgba-test-runner/v$VERSION" ;; *) echo "Unknown project name $PROJECT" exit 1 ;; esac # Check that no out-standing changes in git if [ ! -z "$(git status --porcelain)" ]; then echo "Uncommitted changes, please commit first" exit 1 fi # Check that we are in the master branch, but only if actually committing if [ ! "$NO_COMMIT" = "--no-commit" ] && [ "$(git symbolic-ref --short HEAD)" != "master" ]; then echo "You must be in the master branch before releasing" exit 1 fi # Update the version in Cargo.toml sed -i -e "s/^version = \".*\"/version = \"$VERSION\"/" "$DIRECTORY/Cargo.toml" # Also update the lock file (cd "$DIRECTORY" && cargo update) git add "$DIRECTORY/Cargo.toml" "$DIRECTORY/Cargo.lock" if [ "$PROJECT" = "agb" ]; then # also update the agb version in the template sed -i -e "s/^agb = \".*\"/agb = \"$VERSION\"/" template/Cargo.toml git add template/Cargo.toml else PROJECT_NAME_WITH_UNDERSCORES=$(echo -n "$PROJECT" | tr - _) sed -i -E -e "s/($PROJECT_NAME_WITH_UNDERSCORES = .*version = \")[^\"]+(\".*)/\1$VERSION\2/" agb/Cargo.toml (cd agb && cargo update) git add agb/Cargo.toml agb/Cargo.lock fi # Sanity check to make sure the build works (cd agb && cargo test) (cd agb-image-converter && cargo test) (cd agb-sound-converter && cargo test) (cd agb-macros && cargo test) if [ ! "$NO_COMMIT" = "--no-commit" ]; then # Commit the Cargo.toml changes git commit -m "Release $PROJECT v$VERSION" # Tag the version git tag -a $TAGNAME -m "$PROJECT - v$VERSION" echo "Done! Push with" echo "git push --atomic origin master $TAGNAME" fi