#!/bin/bash # # This script is used to build and deploy the binary from the current version on github # Usage ./scripts/release_binary.sh # set -e VERSION="$1" USER="$2" TOKEN="$3" function usage() { echo "Usage: $0 " echo "Hint: " echo " - Make sure there is outstanding changes in the current directory" echo " - Make sure the requested version does not exist yet" echo " - You may visit https://help.github.com/articles/creating-an-access-token-for-command-line-use/ to generate your Github Token" } # # Validate input # if [ -z "$VERSION" ]; then echo "Missing version" >&2 usage exit 1 fi if [ -z "$USER" ]; then echo "Missing github user" >&2 usage exit 1 fi if [ -z "$TOKEN" ]; then echo "Missing github token" >&2 usage exit 1 fi # # Validate repository # if [ -n "$(git status --porcelain)" ] then echo "Working repository is not clean. Please commit or stage any pending changes." >&2 usage exit 1 fi CURRENTTAG=$(git describe --tag --exact-match 2>/dev/null || echo "") if [ "${CURRENTTAG}" != "${VERSION}" ] then if [ -n "${CURRENTTAG}" ] then echo "The current commit is already tagged with ${CURRENTTAG} which is not the requested release ${VERSION}" >&2 usage exit 1 fi if git rev-parse refs/tags/${VERSION} &>/dev/null then echo "The requested version ${VERSION} already exists" >&2 usage exit 1 fi fi # # Release # PROJECT_NAME=$(git remote -v | grep 'github.*push' | awk '{split($2, a, "/"); split(a[2], b, "."); print b[1]}') echo "Releasing ${PROJECT_NAME} version ${VERSION}..." git tag -m "Releasing ${PROJECT_NAME} version ${VERSION}" "${VERSION}" git push --tags git push cd /tmp mkdir -p ${PROJECT_NAME}-bin cd ${PROJECT_NAME}-bin curl -sS https://getcomposer.org/installer | php # FIXME: this will require the release to already be uploaded on packagist.org cat > composer.json << EOF { "name": "Example Application", "description": "This is an example of OVH APIs wrapper usage", "require": { "ovh/ovh": "${VERSION}" } } EOF php composer.phar install cat > script.php << EOF get("/me"); print_r( $me ); } catch ( Exception $ex ) { print_r( $ex->getMessage() ); } EOF ID=$(curl https://api.github.com/repos/ovh/${PROJECT_NAME}/releases/tags/v${VERSION} -u "${USER}:${TOKEN}" | jq -r '.id') zip -r ${PROJECT_NAME}-${VERSION}-with-dependencies.zip . curl -X POST -d @${PROJECT_NAME}-${VERSION}-with-dependencies.zip -H "Content-Type: application/zip" "https://uploads.github.com/repos/ovh/${PROJECT_NAME}/releases/${ID}/assets?name=${PROJECT_NAME}-${VERSION}-with-dependencies.zip" -i -u "${USER}:${TOKEN}" rm ${PROJECT_NAME}-${VERSION}-with-dependencies.zip tar -czf ${PROJECT_NAME}-${VERSION}-with-dependencies.tar.gz . curl -X POST -d @${PROJECT_NAME}-${VERSION}-with-dependencies.tar.gz -H "Content-Type: application/gzip" "https://uploads.github.com/repos/ovh/${PROJECT_NAME}/releases/${ID}/assets?name=${PROJECT_NAME}-${VERSION}-with-dependencies.tar.gz" -i -u "${USER}:${TOKEN}" rm -f ${PROJECT_NAME}-${VERSION}-with-dependencies.tar.gz