Build system: Add version parser, handle pre-releases differently

This commit is contained in:
Daniel Rudolf 2017-10-22 21:24:28 +02:00
parent 498961b0c6
commit 448fff4702
No known key found for this signature in database
GPG key ID: A061F02CD8DE4538
4 changed files with 102 additions and 84 deletions

View file

@ -1,29 +0,0 @@
#!/usr/bin/env bash
ARCHIVE="$1"
# create release archive
echo "Creating release archive '$ARCHIVE'..."
if [ -e "$ARCHIVE" ]; then
echo "Unable to create archive: File exists" >&2
exit 1
fi
INDEX_BACKUP="$(mktemp -u)"
mv index.php "$INDEX_BACKUP"
mv index.php.dist index.php
tar -czf "$ARCHIVE" \
README.md LICENSE.md CONTRIBUTING.md CHANGELOG.md \
composer.json composer.lock \
assets config content content-sample lib plugins themes vendor \
.htaccess index.php
EXIT=$?
mv index.php index.php.dist
mv "$INDEX_BACKUP" index.php
echo
[ $EXIT -eq 0 ] || exit 1

View file

@ -31,6 +31,7 @@ if [ "$DEPLOY_FULL" != "true" ]; then
echo
fi
. "$(dirname "$0")/functions/parse-version.sh.inc"
export PATH="$(dirname "$0")/tools:$PATH"
DEPLOYMENT_ID="${TRAVIS_TAG//\//_}"
@ -39,6 +40,12 @@ DEPLOYMENT_DIR="$TRAVIS_BUILD_DIR/_build/deploy-$DEPLOYMENT_ID.git"
[ -n "$DEPLOY_REPO_SLUG" ] || export DEPLOY_REPO_SLUG="$TRAVIS_REPO_SLUG"
[ -n "$DEPLOY_REPO_BRANCH" ] || export DEPLOY_REPO_BRANCH="gh-pages"
# parse version
if ! parse_version "$TRAVIS_TAG"; then
echo "Invalid version '$TRAVIS_TAG'; aborting..." >&2
exit 1
fi
# clone repo
github-clone.sh "$DEPLOYMENT_DIR" "https://github.com/$DEPLOY_REPO_SLUG.git" "$DEPLOY_REPO_BRANCH"
@ -50,7 +57,7 @@ github-setup.sh
# generate phpDocs
if [ "$DEPLOY_PHPDOC_RELEASES" == "true" ]; then
# get current Pico milestone
MILESTONE="Pico$([[ "$TRAVIS_TAG" =~ ^v([0-9]+\.[0-9]+)\. ]] && echo " ${BASH_REMATCH[1]}")"
MILESTONE="Pico $VERSION_MILESTONE"
# generate phpDocs
generate-phpdoc.sh \
@ -74,49 +81,52 @@ if [ "$DEPLOY_PHPDOC_RELEASES" == "true" ]; then
fi
fi
# update version badge
if [ "$DEPLOY_VERSION_BADGE" == "true" ]; then
generate-badge.sh \
"$DEPLOYMENT_DIR/badges/pico-version.svg" \
"release" "$TRAVIS_TAG" "blue"
# don't update version badge, version file and cloc statistics for pre-releases
if [ "$VERSION_STABILITY" != "stable" ]; then
# update version badge
if [ "$DEPLOY_VERSION_BADGE" == "true" ]; then
generate-badge.sh \
"$DEPLOYMENT_DIR/badges/pico-version.svg" \
"release" "$TRAVIS_TAG" "blue"
# commit version badge
echo "Committing version badge..."
git add "$DEPLOYMENT_DIR/badges/pico-version.svg"
git commit \
--message="Update version badge for $TRAVIS_TAG" \
"$DEPLOYMENT_DIR/badges/pico-version.svg"
echo
fi
# commit version badge
echo "Committing version badge..."
git add "$DEPLOYMENT_DIR/badges/pico-version.svg"
git commit \
--message="Update version badge for $TRAVIS_TAG" \
"$DEPLOYMENT_DIR/badges/pico-version.svg"
echo
fi
# update version file
if [ "$DEPLOY_VERSION_FILE" == "true" ]; then
update-version-file.sh \
"$DEPLOYMENT_DIR/_data/version.yml" \
"${TRAVIS_TAG#v}"
# update version file
if [ "$DEPLOY_VERSION_FILE" == "true" ]; then
update-version-file.sh \
"$DEPLOYMENT_DIR/_data/version.yml" \
"$VERSION_FULL"
# commit version file
echo "Committing version file..."
git add "$DEPLOYMENT_DIR/_data/version.yml"
git commit \
--message="Update version file for $TRAVIS_TAG" \
"$DEPLOYMENT_DIR/_data/version.yml"
echo
fi
# commit version file
echo "Committing version file..."
git add "$DEPLOYMENT_DIR/_data/version.yml"
git commit \
--message="Update version file for $TRAVIS_TAG" \
"$DEPLOYMENT_DIR/_data/version.yml"
echo
fi
# update cloc statistics
if [ "$DEPLOY_CLOC_STATS" == "true" ]; then
update-cloc-stats.sh \
"$DEPLOYMENT_DIR/_data/clocCore.yml" \
"$DEPLOYMENT_DIR/_data/clocRelease.yml"
# update cloc statistics
if [ "$DEPLOY_CLOC_STATS" == "true" ]; then
update-cloc-stats.sh \
"$DEPLOYMENT_DIR/_data/clocCore.yml" \
"$DEPLOYMENT_DIR/_data/clocRelease.yml"
# commit cloc statistics
echo "Commiting cloc statistics..."
git add "$DEPLOYMENT_DIR/_data/clocCore.yml" "$DEPLOYMENT_DIR/_data/clocRelease.yml"
git commit \
--message="Update cloc statistics for $TRAVIS_TAG" \
"$DEPLOYMENT_DIR/_data/clocCore.yml" "$DEPLOYMENT_DIR/_data/clocRelease.yml"
echo
# commit cloc statistics
echo "Commiting cloc statistics..."
git add "$DEPLOYMENT_DIR/_data/clocCore.yml" "$DEPLOYMENT_DIR/_data/clocRelease.yml"
git commit \
--message="Update cloc statistics for $TRAVIS_TAG" \
"$DEPLOYMENT_DIR/_data/clocCore.yml" "$DEPLOYMENT_DIR/_data/clocRelease.yml"
echo
fi
fi
# deploy

View file

@ -0,0 +1,44 @@
##
# Evaluates a version string
#
# @author Daniel Rudolf
# @link http://picocms.org
# @license http://opensource.org/licenses/MIT
#
parse_version() {
VERSION_FULL="$1"
if [ "${VERSION_FULL:0:1}" == "v" ]; then
VERSION_FULL="${VERSION_FULL:1}"
fi
if [[ "$VERSION_FULL" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)(-([0-9A-Za-z\.\-]+))?(\+([0-9A-Za-z\.\-]+))?$ ]]; then
VERSION_MAJOR="${BASH_REMATCH[1]}"
VERSION_MINOR="${BASH_REMATCH[2]}"
VERSION_PATCH="${BASH_REMATCH[3]}"
VERSION_SUFFIX="${BASH_REMATCH[5]}"
VERSION_BUILD="${BASH_REMATCH[7]}"
VERSION_STABILITY="stable"
if [[ "$VERSION_SUFFIX" =~ ^(dev|a|alpha|b|beta|RC)?([.-]?[0-9]+)?([.-](dev))?$ ]]; then
if [ "${BASH_REMATCH[1]}" == "dev" ] || [ "${BASH_REMATCH[4]}" == "dev" ]; then
VERSION_STABILITY="dev"
elif [ "${BASH_REMATCH[1]}" == "a" ] || [ "${BASH_REMATCH[1]}" == "alpha" ]; then
VERSION_STABILITY="alpha"
elif [ "${BASH_REMATCH[1]}" == "b" ] || [ "${BASH_REMATCH[1]}" == "beta" ]; then
VERSION_STABILITY="beta"
elif [ "${BASH_REMATCH[1]}" == "RC" ]; then
VERSION_STABILITY="RC"
fi
fi
VERSION_MILESTONE="$VERSION_MAJOR.$VERSION_MINOR"
VERSION_NAME="$VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH"
VERSION_ID="$VERSION_MAJOR$(printf '%02d' "$VERSION_MINOR")$(printf '%02d' "$VERSION_PATCH")"
return 0
else
return 1
fi
}

View file

@ -10,30 +10,22 @@
set -e
. "$(dirname "$0")/functions/parse-version.sh.inc"
# parameters
VERSION_FILE_PATH="$1" # target file path
VERSION_FULL="$2" # full version string (e.g. 1.0.0-beta.1+7b4ad7f)
VERSION_STRING="$2" # version string (e.g. 1.0.0-beta.1+7b4ad7f)
# print parameters
echo "Generating version file..."
printf 'VERSION_FILE_PATH="%s"\n' "$VERSION_FILE_PATH"
printf 'VERSION_FULL="%s"\n' "$VERSION_FULL"
printf 'VERSION_STRING="%s"\n' "$VERSION_STRING"
echo
# evaluate version constraint (see http://semver.org/)
printf 'Evaluating version constraint...\n'
if [[ "$VERSION_FULL" =~ ^([0-9]+)\.([0-9]{1,2})\.([0-9]{1,2})(-([0-9A-Za-z\.\-]+))?(\+([0-9A-Za-z\.\-]+))?$ ]]; then
VERSION_MAJOR="${BASH_REMATCH[1]}"
VERSION_MINOR="${BASH_REMATCH[2]}"
VERSION_PATCH="${BASH_REMATCH[3]}"
VERSION_SUFFIX="${BASH_REMATCH[5]}"
VERSION_BUILD="${BASH_REMATCH[7]}"
VERSION_MILESTONE="$VERSION_MAJOR.$VERSION_MINOR"
VERSION_NAME="$VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH"
VERSION_ID="$VERSION_MAJOR$(printf '%02d' "$VERSION_MINOR")$(printf '%02d' "$VERSION_PATCH")"
else
echo "Invalid version constraint; skipping..." >&2
# evaluate version string (see http://semver.org/)
printf 'Evaluating version string...\n'
if ! parse_version "$VERSION_STRING"; then
echo "Invalid version string; skipping..." >&2
exit 1
fi
@ -45,6 +37,7 @@ exec 3> "$VERSION_FILE_PATH"
printf 'full: %s\n' "$VERSION_FULL" >&3
printf 'name: %s\n' "$VERSION_NAME" >&3
printf 'milestone: %s\n' "$VERSION_MILESTONE" >&3
printf 'stability: %s\n' "$VERSION_STABILITY" >&3
printf 'id: %d\n' "$VERSION_ID" >&3
printf 'major: %d\n' "$VERSION_MAJOR" >&3
printf 'minor: %d\n' "$VERSION_MINOR" >&3