2021-06-21 08:03:10 +10:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
# Fail if any command fails
|
|
|
|
set -e
|
|
|
|
|
|
|
|
PROJECT=$1
|
|
|
|
VERSION=$2
|
2021-08-16 08:15:25 +10:00
|
|
|
NO_COMMIT=$3
|
2021-06-21 08:03:10 +10:00
|
|
|
|
|
|
|
# Sanity check that we actually have a version
|
|
|
|
if [ "$VERSION" = "" ]; then
|
2021-08-16 08:15:25 +10:00
|
|
|
echo "Usage $0 <project> <version> [--no-commit]"
|
2021-06-21 08:03:10 +10:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2021-06-21 08:07:06 +10:00
|
|
|
# Check the format of version
|
2022-01-02 05:55:37 +11:00
|
|
|
if echo "$VERSION" | grep -q -Ev "^[0-9]+\.[0-9]+\.[0-9]+$"; then
|
2021-06-21 08:07:47 +10:00
|
|
|
echo "Version must be of the form x.y.z, got $VERSION"
|
2021-06-21 08:07:06 +10:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2021-08-16 08:15:25 +10:00
|
|
|
# Check if no commit option is valid
|
2021-08-16 08:16:30 +10:00
|
|
|
if [ ! "$NO_COMMIT" = "" ] && [ ! "$NO_COMMIT" = "--no-commit" ]; then
|
2021-08-16 08:15:25 +10:00
|
|
|
echo "Must pass either no last argument or --no-commit"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2021-06-21 08:03:10 +10:00
|
|
|
# Set up $DIRECTORY and $TAGNAME
|
|
|
|
case "$PROJECT" in
|
|
|
|
agb)
|
|
|
|
DIRECTORY="agb"
|
|
|
|
TAGNAME="v$VERSION"
|
|
|
|
;;
|
2022-01-13 09:50:59 +11:00
|
|
|
agb-*)
|
|
|
|
if [ -f "$PROJECT/Cargo.toml" ]; then
|
|
|
|
DIRECTORY=$PROJECT
|
|
|
|
TAGNAME="$PROJECT/v$VERSION"
|
|
|
|
else
|
|
|
|
echo "Unknown project name $PROJECT"
|
|
|
|
exit 1
|
|
|
|
fi
|
2021-08-08 01:43:50 +10:00
|
|
|
;;
|
2021-06-21 08:03:10 +10:00
|
|
|
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
|
2022-01-02 05:55:37 +11:00
|
|
|
if [ -n "$(git status --porcelain)" ]; then
|
2021-06-21 08:03:10 +10:00
|
|
|
echo "Uncommitted changes, please commit first"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2021-08-16 08:15:25 +10:00
|
|
|
# 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
|
2021-06-21 08:04:56 +10:00
|
|
|
echo "You must be in the master branch before releasing"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2021-06-21 08:03:10 +10:00
|
|
|
# Update the version in Cargo.toml
|
2021-06-21 08:14:17 +10:00
|
|
|
sed -i -e "s/^version = \".*\"/version = \"$VERSION\"/" "$DIRECTORY/Cargo.toml"
|
2021-06-21 08:03:10 +10:00
|
|
|
|
|
|
|
# Also update the lock file
|
|
|
|
(cd "$DIRECTORY" && cargo update)
|
2022-03-29 08:14:09 +11:00
|
|
|
git add "$DIRECTORY/Cargo.toml" "$DIRECTORY/Cargo.lock" || echo "Failed to git add a file, continuing anyway"
|
2021-06-21 08:03:10 +10:00
|
|
|
|
|
|
|
if [ "$PROJECT" = "agb" ]; then
|
2022-01-01 23:32:03 +11:00
|
|
|
# also update the agb version in the template and the examples
|
2022-01-01 23:36:47 +11:00
|
|
|
sed -i -e "s/^agb = \".*\"/agb = \"$VERSION\"/" template/Cargo.toml
|
2021-06-21 08:03:10 +10:00
|
|
|
git add template/Cargo.toml
|
2022-01-01 23:32:03 +11:00
|
|
|
|
2022-01-13 09:23:23 +11:00
|
|
|
for EXAMPLE_TOML_FILE in examples/*/Cargo.toml book/games/*/Cargo.toml; do
|
|
|
|
EXAMPLE_DIR=$(dirname "$EXAMPLE_TOML_FILE")
|
2022-01-01 23:39:40 +11:00
|
|
|
sed -E -i -e "/agb =/ s/version = \"[^\"]+\"/version = \"$VERSION\"/" "$EXAMPLE_DIR/Cargo.toml"
|
2022-01-01 23:32:03 +11:00
|
|
|
(cd "$EXAMPLE_DIR" && cargo update)
|
2022-03-29 08:14:09 +11:00
|
|
|
git add "$EXAMPLE_DIR"/{Cargo.toml,Cargo.lock} || echo "Failed to git add a file, continuing anyway"
|
2022-01-01 23:32:03 +11:00
|
|
|
done
|
2021-08-16 08:12:18 +10:00
|
|
|
else
|
2021-08-16 08:18:55 +10:00
|
|
|
PROJECT_NAME_WITH_UNDERSCORES=$(echo -n "$PROJECT" | tr - _)
|
2022-01-13 09:04:39 +11:00
|
|
|
|
2022-01-13 09:11:05 +11:00
|
|
|
for CARGO_TOML_FILE in agb-*/Cargo.toml agb/Cargo.toml examples/*/Cargo.toml book/games/*/Cargo.toml; do
|
2022-01-13 09:04:39 +11:00
|
|
|
sed -i -E -e "s/($PROJECT_NAME_WITH_UNDERSCORES = .*version = \")[^\"]+(\".*)/\1$VERSION\2/" "$CARGO_TOML_FILE"
|
|
|
|
(cd "$(dirname "$CARGO_TOML_FILE")" && cargo generate-lockfile)
|
|
|
|
|
2022-03-29 08:14:09 +11:00
|
|
|
git add "$CARGO_TOML_FILE" "${CARGO_TOML_FILE/.toml/.lock}" || echo "Failed to git add a file, continuing anyway"
|
2022-01-13 09:04:39 +11:00
|
|
|
done
|
2021-06-21 08:03:10 +10:00
|
|
|
fi
|
|
|
|
|
2021-08-16 08:20:51 +10:00
|
|
|
# Sanity check to make sure the build works
|
2022-01-13 09:04:39 +11:00
|
|
|
for CARGO_TOML_FILE in agb-*/Cargo.toml agb/Cargo.toml; do
|
|
|
|
(cd "$(dirname "$CARGO_TOML_FILE")" && cargo test)
|
|
|
|
done
|
|
|
|
|
2022-01-13 09:23:23 +11:00
|
|
|
for EXAMPLE_TOML_FILE in examples/*/Cargo.toml book/games/*/Cargo.toml; do
|
|
|
|
EXAMPLE_DIR=$(dirname "$EXAMPLE_TOML_FILE")
|
2022-01-01 23:41:35 +11:00
|
|
|
(cd "$EXAMPLE_DIR" && cargo check --release)
|
|
|
|
done
|
2021-08-16 08:20:51 +10:00
|
|
|
|
2021-08-16 08:15:25 +10:00
|
|
|
if [ ! "$NO_COMMIT" = "--no-commit" ]; then
|
|
|
|
# Commit the Cargo.toml changes
|
|
|
|
git commit -m "Release $PROJECT v$VERSION"
|
2021-06-21 08:03:10 +10:00
|
|
|
|
2021-08-16 08:15:25 +10:00
|
|
|
# Tag the version
|
2022-01-02 05:55:37 +11:00
|
|
|
git tag -a "$TAGNAME" -m "$PROJECT - v$VERSION"
|
2021-06-21 08:03:10 +10:00
|
|
|
|
2021-08-16 08:15:25 +10:00
|
|
|
echo "Done! Push with"
|
|
|
|
echo "git push --atomic origin master $TAGNAME"
|
|
|
|
fi
|