diff options
| -rwxr-xr-x | build-apk.sh | 14 | ||||
| -rwxr-xr-x | build.sh | 39 | ||||
| -rwxr-xr-x | prepare_release.sh | 51 | ||||
| -rwxr-xr-x | version_metadata.sh | 89 |
4 files changed, 119 insertions, 74 deletions
diff --git a/build-apk.sh b/build-apk.sh index 43c9eabaef..0c98439138 100755 --- a/build-apk.sh +++ b/build-apk.sh @@ -31,11 +31,19 @@ if [[ "$BUILD_TYPE" == "debug" || "$(git describe)" != "$PRODUCT_VERSION" ]]; th echo "Modifying product version to $PRODUCT_VERSION" fi -cd "$SCRIPT_DIR/android" +pushd "$SCRIPT_DIR/android" ./gradlew --console plain clean -mkdir -p "${SCRIPT_DIR}/android/build/extraJni" +mkdir -p "build/extraJni" +popd -cd "$SCRIPT_DIR" +function restore_metadata_backups() { + pushd "$SCRIPT_DIR" + ./version_metadata.sh restore-backup + popd +} +trap 'restore_metadata_backups' EXIT + +./version_metadata.sh inject $PRODUCT_VERSION ARCHITECTURES="aarch64 armv7 x86_64 i686" for ARCHITECTURE in $ARCHITECTURES; do @@ -63,22 +63,16 @@ else fi echo "Building Mullvad VPN $PRODUCT_VERSION" -SEMVER_VERSION=$(echo $PRODUCT_VERSION | sed -Ee 's/($|-.*)/.0\1/g') function restore_metadata_backups() { pushd "$SCRIPT_DIR" + echo "Restoring version metadata files..." + ./version_metadata.sh restore-backup if [[ "$BUILD_MODE" == "dev" ]]; then mv gui/electron-builder.yml.bak gui/electron-builder.yml || true fi - mv gui/package.json.bak gui/package.json || true mv gui/package-lock.json.bak gui/package-lock.json || true mv Cargo.lock.bak Cargo.lock || true - mv mullvad-daemon/Cargo.toml.bak mullvad-daemon/Cargo.toml || true - mv mullvad-cli/Cargo.toml.bak mullvad-cli/Cargo.toml || true - mv mullvad-problem-report/Cargo.toml.bak mullvad-problem-report/Cargo.toml || true - mv talpid-openvpn-plugin/Cargo.toml.bak talpid-openvpn-plugin/Cargo.toml || true - mv android/build.gradle.bak android/build.gradle || true - mv dist-assets/windows/version.h.bak dist-assets/windows/version.h || true popd } trap 'restore_metadata_backups' EXIT @@ -92,35 +86,11 @@ if [[ "$BUILD_MODE" == "dev" ]]; then echo "compression: store" >> gui/electron-builder.yml fi +echo "Updating version in metadata files..." cp gui/package-lock.json gui/package-lock.json.bak -sed -i.bak -Ee "s/\"version\": \"[^\"]+\",/\"version\": \"$SEMVER_VERSION\",/g" \ - gui/package.json - cp Cargo.lock Cargo.lock.bak -sed -i.bak \ - -Ee "s/^version = \"[^\"]+\"\$/version = \"$SEMVER_VERSION\"/g" \ - mullvad-daemon/Cargo.toml \ - mullvad-cli/Cargo.toml \ - mullvad-problem-report/Cargo.toml \ - talpid-openvpn-plugin/Cargo.toml - -cp android/build.gradle android/build.gradle.bak -sed -i.bak -Ee "s/versionName \"[^\"]+\"/versionName \"$PRODUCT_VERSION\"/g" \ - android/build.gradle +./version_metadata.sh inject $PRODUCT_VERSION -SEMVER_ARRAY=($(echo $SEMVER_VERSION | sed -Ee 's/[.-]+/ /g')) -SEMVER_MAJOR=${SEMVER_ARRAY[0]} -SEMVER_MINOR=${SEMVER_ARRAY[1]} -SEMVER_PATCH=${SEMVER_ARRAY[2]} - -cp dist-assets/windows/version.h dist-assets/windows/version.h.bak - -cat <<EOF > dist-assets/windows/version.h -#define MAJOR_VERSION $SEMVER_MAJOR -#define MINOR_VERSION $SEMVER_MINOR -#define PATCH_VERSION $SEMVER_PATCH -#define PRODUCT_VERSION "$PRODUCT_VERSION" -EOF ################################################################################ # Compile and link all binaries. @@ -213,6 +183,7 @@ esac popd +SEMVER_VERSION=$(echo $PRODUCT_VERSION | sed -Ee 's/($|-.*)/.0\1/g') for semver_path in dist/*$SEMVER_VERSION*; do product_path=$(echo $semver_path | sed -Ee "s/$SEMVER_VERSION/$PRODUCT_VERSION/g") echo "Moving $semver_path -> $product_path" diff --git a/prepare_release.sh b/prepare_release.sh index fdf73ff5d6..b55744403a 100755 --- a/prepare_release.sh +++ b/prepare_release.sh @@ -10,52 +10,25 @@ if [[ "$#" != "1" ]]; then echo "For example: '2018.1-beta3' for a beta release, or '2018.6' for a stable one." exit 1 fi -VERSION=$1 - -# Regex that only matches valid Mullvad VPN versions. It also captures -# relevant values into capture groups, read out via BASH_REMATCH[x] -VERSION_REGEX="^20([0-9]{2})\.([1-9][0-9]?)(-beta([1-9][0-9]?))?$" -if [[ ! $VERSION =~ $VERSION_REGEX ]]; then - echo "Invalid version format. Please specify version as:" - echo "<YEAR>.<NUMBER>[-beta<NUMBER>]" - exit 1 -fi -VERSION_YEAR=$(printf "%02d" ${BASH_REMATCH[1]}) -VERSION_NUMBER=$(printf "%02d" ${BASH_REMATCH[2]}) -VERSION_PATCH="00" -VERSION_BETA=$(printf "%02d" ${BASH_REMATCH[4]:-99}) -ANDROID_VERSION_CODE=${VERSION_YEAR}${VERSION_NUMBER}${VERSION_PATCH}${VERSION_BETA} - -SEMVER_VERSION=$(echo $VERSION | sed -Ee 's/($|-.*)/.0\1/g') +PRODUCT_VERSION=$1 if [[ $(git diff --shortstat 2> /dev/null | tail -n1) != "" ]]; then echo "Dirty working directory! Will not accept that for an official release." exit 1 fi -if [[ $(grep $VERSION CHANGELOG.md) == "" ]]; then - echo "It looks like you did not add $VERSION to the changelog?" +if [[ $(grep $PRODUCT_VERSION CHANGELOG.md) == "" ]]; then + echo "It looks like you did not add $PRODUCT_VERSION to the changelog?" echo "Please make sure the changelog is up to date and correct before you proceed." exit 1 fi echo "Updating version in metadata files..." -sed -i.bak -Ee "s/\"version\": \"[^\"]+\",/\"version\": \"$SEMVER_VERSION\",/g" \ - gui/package.json -sed -i.bak -Ee "s/^version = \"[^\"]+\"\$/version = \"$SEMVER_VERSION\"/g" \ - mullvad-daemon/Cargo.toml \ - mullvad-cli/Cargo.toml \ - mullvad-problem-report/Cargo.toml - -sed -i.bak -Ee "s/versionCode [0-9]+/versionCode $ANDROID_VERSION_CODE/g" \ - android/build.gradle -sed -i.bak -Ee "s/versionName \"[^\"]+\"/versionName \"$VERSION\"/g" \ - android/build.gradle - +./version_metadata.sh inject $PRODUCT_VERSION echo "Syncing Cargo.lock with new version numbers" source env.sh "" -cargo build +cargo +stable build (cd gui/ && npm install) || exit 1 @@ -66,21 +39,25 @@ git commit -S -m "Updating version in package files" \ mullvad-daemon/Cargo.toml \ mullvad-cli/Cargo.toml \ mullvad-problem-report/Cargo.toml \ - Cargo.lock + talpid-openvpn-plugin/Cargo.toml \ + Cargo.lock \ + android/build.gradle \ + dist-assets/windows/version.h -echo "Tagging current git commit with release tag $VERSION..." -git tag -s $VERSION -m $VERSION +echo "Tagging current git commit with release tag $PRODUCT_VERSION..." +git tag -s $PRODUCT_VERSION -m $PRODUCT_VERSION +./version_metadata.sh delete-backup echo "===================================================" echo "DONE preparing for a release! Now do the following:" echo " 1. Push the commit and tag created by this script" echo " after you have verified they are correct" echo " $ git push" -echo " $ git push origin $VERSION" +echo " $ git push origin $PRODUCT_VERSION" echo " 2. On each platform where you want to create a" echo " release artifact, check out the tag and build:" echo " $ git fetch" -echo " $ git checkout $VERSION" +echo " $ git checkout $PRODUCT_VERSION" echo " $ ./build.sh" echo "===================================================" diff --git a/version_metadata.sh b/version_metadata.sh new file mode 100755 index 0000000000..eae33eafa6 --- /dev/null +++ b/version_metadata.sh @@ -0,0 +1,89 @@ +#!/usr/bin/env bash +# +# Can inject correctly formatted version strings/numbers in all the various +# project metadata files. Can also back them up and restore them. + +set -eu + +# Regex that only matches valid Mullvad VPN versions. It also captures +# relevant values into capture groups, read out via BASH_REMATCH[x]. +VERSION_REGEX="^20([0-9]{2})\.([1-9][0-9]?)(-beta([1-9][0-9]?))?(-dev-[0-9a-f]+)?$" + +case "$1" in + "inject") + PRODUCT_VERSION=$2 + if [[ ! $PRODUCT_VERSION =~ $VERSION_REGEX ]]; then + echo "Invalid version format. Please specify version as:" + echo "<YEAR>.<NUMBER>[-beta<NUMBER>]" + exit 1 + fi + + VERSION_YEAR=$(printf "%02d" ${BASH_REMATCH[1]}) + VERSION_NUMBER=$(printf "%02d" ${BASH_REMATCH[2]}) + VERSION_PATCH="00" # Not used for now. + VERSION_BETA=$(printf "%02d" ${BASH_REMATCH[4]:-99}) + ANDROID_VERSION_CODE=${VERSION_YEAR}${VERSION_NUMBER}${VERSION_PATCH}${VERSION_BETA} + + SEMVER_VERSION=$(echo $PRODUCT_VERSION | sed -Ee 's/($|-.*)/.0\1/g') + SEMVER_MAJOR="20${BASH_REMATCH[1]}" + SEMVER_MINOR=${BASH_REMATCH[2]} + SEMVER_PATCH="0" + + # Electron GUI + sed -i.bak -Ee "s/\"version\": \"[^\"]+\",/\"version\": \"$SEMVER_VERSION\",/g" \ + gui/package.json + + # Rust crates + sed -i.bak -Ee "s/^version = \"[^\"]+\"\$/version = \"$SEMVER_VERSION\"/g" \ + mullvad-daemon/Cargo.toml \ + mullvad-cli/Cargo.toml \ + mullvad-problem-report/Cargo.toml \ + talpid-openvpn-plugin/Cargo.toml + + # Windows C++ + cp dist-assets/windows/version.h dist-assets/windows/version.h.bak + cat <<EOF > dist-assets/windows/version.h +#define MAJOR_VERSION $SEMVER_MAJOR +#define MINOR_VERSION $SEMVER_MINOR +#define PATCH_VERSION $SEMVER_PATCH +#define PRODUCT_VERSION "$PRODUCT_VERSION" +EOF + + # Android + cp android/build.gradle android/build.gradle.bak + sed -i -Ee "s/versionCode [0-9]+/versionCode $ANDROID_VERSION_CODE/g" \ + android/build.gradle + sed -i -Ee "s/versionName \"[^\"]+\"/versionName \"$PRODUCT_VERSION\"/g" \ + android/build.gradle + ;; + "restore-backup") + # Electron GUI + mv gui/package.json.bak gui/package.json || true + # Rust crates + mv mullvad-daemon/Cargo.toml.bak mullvad-daemon/Cargo.toml || true + mv mullvad-cli/Cargo.toml.bak mullvad-cli/Cargo.toml || true + mv mullvad-problem-report/Cargo.toml.bak mullvad-problem-report/Cargo.toml || true + mv talpid-openvpn-plugin/Cargo.toml.bak talpid-openvpn-plugin/Cargo.toml || true + # Windows C++ + mv dist-assets/windows/version.h.bak dist-assets/windows/version.h || true + # Android + mv android/build.gradle.bak android/build.gradle || true + ;; + "delete-backup") + # Electron GUI + rm gui/package.json.bak || true + # Rust crates + rm mullvad-daemon/Cargo.toml.bak || true + rm mullvad-cli/Cargo.toml.bak || true + rm mullvad-problem-report/Cargo.toml.bak || true + rm talpid-openvpn-plugin/Cargo.toml.bak || true + # Windows C++ + rm dist-assets/windows/version.h.bak || true + # Android + rm android/build.gradle.bak || true + ;; + *) + echo "Invalid command. Use inject or restore" + exit 1 + ;; +esac
\ No newline at end of file |
