Skip to content

Instantly share code, notes, and snippets.

@seliopou
Last active August 31, 2021 13:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save seliopou/2e4beefda48551cfe41ae2a46bcd3ce6 to your computer and use it in GitHub Desktop.
Save seliopou/2e4beefda48551cfe41ae2a46bcd3ce6 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
TMPFILE=$(mktemp)
trap "rm $TMPFILE" exit
set -x
set -e
error_and_exit() {
echo -e "$(basename $0): $1"
exit 1
}
if [ -z "$VERSION" ]; then
error_and_exit "VERSION environment variable must be set"
fi
if [ -z "$OPAM_REPOSITORY" ]; then
OPAM_REPOSITORY=../../../opam-repository
PACKAGES=$OPAM_REPOSITORY/packages
stat "$PACKAGES" &> /dev/null
if [ ! $? ]; then
error_and_exit "OPAM_REPOSITORY environment variable must be the path to an opam repository"
fi
fi
PROJECT_NAME=$(basename $(pwd))
BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ $BRANCH != "release" ]; then
error_and_exit "release must be done from \"release\" branch"
fi
prepare() {
local package_name=$1
local package=$PACKAGES/$package_name/$package_name.$VERSION
local archive="https://github.com/inhabitedtype/$PROJECT_NAME/archive/$VERSION.tar.gz"
local checksum
curl -L -f $archive 2>/dev/null > $TMPFILE
if [ $? != 0 ]; then
error_and_exit "source tarball does not exist"
fi
checksum=$(md5 -q < $TMPFILE)
mkdir -p $package
cat <(git show HEAD^:$package_name.opam) - <<EOF > $package/opam
url {
src: "$archive"
checksum: "md5=$checksum"
}
EOF
}
brand() {
echo $TMPFILE
for opam_file in *.opam; do
cat <<<"version: \"$VERSION\"" - $opam_file > $TMPFILE
cp $TMPFILE $opam_file
opam lint $opam_file || exit 1
done
git commit -a -m "release: $VERSION"
git tag $VERSION
git push -f origin release
git push --tags
}
release() {
brand
for opam_file in *.opam; do
name=${opam_file%%.opam}
prepare $name
(cd $PACKAGES && git add $name)
done
name=${PROJECT_NAME##ocaml-}
(cd $OPAM_REPOSITORY && git checkout -b "$name.$VERSION" master && git commit -m "+$name.$VERSION" && git push origin "$name.$VERSION")
}
release
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment