123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- #! /bin/sh
- #
- # Release script for Calamares
- #
- # This attempts to perform the different steps of the RELEASE.md
- # document automatically. It's not tested on other machines or
- # setups other than [ade]'s development VM.
- #
- # Assumes that the version in CMakeLists.txt has been bumped,
- # and that a release of that version is desired.
- #
- # None of the "update stuff" is done by this script; in preparation
- # for the release, you should have already done:
- # - updating the version
- # - pulling translations
- # - updating the language list
- # - switching to the right branch
- #
- # You can influence the script a little with environment variables:
- # - BUILD_DEFAULT set to false to avoid first build with gcc
- # - BUILD_CLANG set to false to avoid second build with clang
- # - BUILD_ONLY set to true to break after building
- test -d .git || { echo "Not at top-level." ; exit 1 ; }
- test -d src/modules || { echo "No src/modules." ; exit 1 ; }
- which cmake > /dev/null 2>&1 || { echo "No cmake(1) available." ; exit 1 ; }
- test -z "$BUILD_DEFAULT" && BUILD_DEFAULT=true
- test -z "$BUILD_CLANG" && BUILD_CLANG=true
- test -z "$BUILD_ONLY" && BUILD_ONLY=false
- ### Setup
- #
- #
- BUILDDIR=$(mktemp -d --suffix=-build --tmpdir=.)
- ### Build with default compiler
- #
- #
- if test "x$BUILD_DEFAULT" = "xtrue" ; then
- rm -rf "$BUILDDIR"
- mkdir "$BUILDDIR" || { echo "Could not create build directory." ; exit 1 ; }
- ( cd "$BUILDDIR" && cmake .. && make -j4 ) || { echo "Could not perform test-build in $BUILDDIR." ; exit 1 ; }
- ( cd "$BUILDDIR" && make test ) || { echo "Tests failed in $BUILDDIR." ; exit 1 ; }
- fi
- ### Build with clang
- #
- #
- if test "x$BUILD_CLANG" = "xtrue" ; then
- if which clang++ > /dev/null 2>&1 ; then
- # Do build again with clang
- rm -rf "$BUILDDIR"
- mkdir "$BUILDDIR" || { echo "Could not create build directory." ; exit 1 ; }
- ( cd "$BUILDDIR" && CC=clang CXX=clang++ cmake .. && make -j4 ) || { echo "Could not perform test-build in $BUILDDIR." ; exit 1 ; }
- ( cd "$BUILDDIR" && make test ) || { echo "Tests failed in $BUILDDIR." ; exit 1 ; }
- fi
- fi
- if test "x$BUILD_ONLY" = "xtrue" ; then
- echo "Builds completed, release stopped. Build remains in $BUILDDIR."
- exit 1
- fi
- ### Get version number for this release
- #
- #
- V=$( cd "$BUILDDIR" && make show-version | grep ^CALAMARES_VERSION | sed s/^[A-Z_]*=// )
- test -n "$V" || { echo "Could not obtain version." ; exit 1 ; }
- ### Create signed tag
- #
- # This is the signing key ID associated with the GitHub account adriaandegroot,
- # which is used to create all "verified" tags in the Calamares repo.
- KEY_ID="128F00873E05AF1D"
- git tag -u "$KEY_ID" -m "Release v$V" "v$V" || { echo "Could not sign tag v$V." ; exit 1 ; }
- ### Create the tarball
- #
- #
- TAR_V="calamares-$V"
- TAR_FILE="$TAR_V.tar.gz"
- git archive -o "$TAR_FILE" --prefix "$TAR_V/" "v$V" || { echo "Could not create tarball." ; exit 1 ; }
- test -f "$TAR_FILE" || { echo "Tarball was not created." ; exit 1 ; }
- SHA256=$(sha256sum "$TAR_FILE" | cut -d" " -f1)
- ### Build the tarball
- #
- #
- D=$(date +%Y%m%d-%H%M%S)
- TMPDIR=$(mktemp -d --suffix="-calamares-$D")
- test -d "$TMPDIR" || { echo "Could not create tarball-build directory." ; exit 1 ; }
- tar xzf "$TAR_FILE" -C "$TMPDIR" || { echo "Could not unpack tarball." ; exit 1 ; }
- test -d "$TMPDIR/$TAR_V" || { echo "Tarball did not contain source directory." ; exit 1 ; }
- ( cd "$TMPDIR/$TAR_V" && cmake . && make -j4 && make test ) || { echo "Tarball build failed." ; exit 1 ; }
- ### Cleanup
- #
- rm -rf "$BUILDDIR" # From test-builds
- rm -rf "$TMPDIR" # From tarball
- ### Print subsequent instructions
- #
- #
- cat <<EOF
- # Next steps for this release:
- git push --tags
- gpg -s -u $KEY_ID --detach --armor $TAR_FILE # Sign the tarball
- # Upload tarball $TAR_FILE and the signature $TAR_FILE.asc
- # Announce via https://github.com/calamares/calamares/releases/new
- # SHA256: $SHA256
- EOF
- exit 0
|