Browse Source

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

Daniel Rudolf 7 years ago
parent
commit
448fff4702

+ 0 - 29
_build/create-release-archive.sh

@@ -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

+ 52 - 42
_build/deploy-release.sh

@@ -31,6 +31,7 @@ if [ "$DEPLOY_FULL" != "true" ]; then
     echo
     echo
 fi
 fi
 
 
+. "$(dirname "$0")/functions/parse-version.sh.inc"
 export PATH="$(dirname "$0")/tools:$PATH"
 export PATH="$(dirname "$0")/tools:$PATH"
 
 
 DEPLOYMENT_ID="${TRAVIS_TAG//\//_}"
 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_SLUG" ] || export DEPLOY_REPO_SLUG="$TRAVIS_REPO_SLUG"
 [ -n "$DEPLOY_REPO_BRANCH" ] || export DEPLOY_REPO_BRANCH="gh-pages"
 [ -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
 # clone repo
 github-clone.sh "$DEPLOYMENT_DIR" "https://github.com/$DEPLOY_REPO_SLUG.git" "$DEPLOY_REPO_BRANCH"
 github-clone.sh "$DEPLOYMENT_DIR" "https://github.com/$DEPLOY_REPO_SLUG.git" "$DEPLOY_REPO_BRANCH"
 
 
@@ -50,7 +57,7 @@ github-setup.sh
 # generate phpDocs
 # generate phpDocs
 if [ "$DEPLOY_PHPDOC_RELEASES" == "true" ]; then
 if [ "$DEPLOY_PHPDOC_RELEASES" == "true" ]; then
     # get current Pico milestone
     # get current Pico milestone
-    MILESTONE="Pico$([[ "$TRAVIS_TAG" =~ ^v([0-9]+\.[0-9]+)\. ]] && echo " ${BASH_REMATCH[1]}")"
+    MILESTONE="Pico $VERSION_MILESTONE"
 
 
     # generate phpDocs
     # generate phpDocs
     generate-phpdoc.sh \
     generate-phpdoc.sh \
@@ -74,49 +81,52 @@ if [ "$DEPLOY_PHPDOC_RELEASES" == "true" ]; then
     fi
     fi
 fi
 fi
 
 
-# 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
+# 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
 
 
-# update version file
-if [ "$DEPLOY_VERSION_FILE" == "true" ]; then
-    update-version-file.sh \
-        "$DEPLOYMENT_DIR/_data/version.yml" \
-        "${TRAVIS_TAG#v}"
-
-    # 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 version file
+    if [ "$DEPLOY_VERSION_FILE" == "true" ]; then
+        update-version-file.sh \
+            "$DEPLOYMENT_DIR/_data/version.yml" \
+            "$VERSION_FULL"
 
 
-# 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 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"
+
+        # 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
 fi
 
 
 # deploy
 # deploy

+ 44 - 0
_build/tools/functions/parse-version.sh.inc

@@ -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
+}

+ 9 - 16
_build/tools/update-version-file.sh

@@ -10,30 +10,22 @@
 
 
 set -e
 set -e
 
 
+. "$(dirname "$0")/functions/parse-version.sh.inc"
+
 # parameters
 # parameters
 VERSION_FILE_PATH="$1"  # target file path
 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
 # print parameters
 echo "Generating version file..."
 echo "Generating version file..."
 printf 'VERSION_FILE_PATH="%s"\n' "$VERSION_FILE_PATH"
 printf 'VERSION_FILE_PATH="%s"\n' "$VERSION_FILE_PATH"
-printf 'VERSION_FULL="%s"\n' "$VERSION_FULL"
+printf 'VERSION_STRING="%s"\n' "$VERSION_STRING"
 echo
 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
     exit 1
 fi
 fi
 
 
@@ -45,6 +37,7 @@ exec 3> "$VERSION_FILE_PATH"
 printf 'full: %s\n' "$VERSION_FULL" >&3
 printf 'full: %s\n' "$VERSION_FULL" >&3
 printf 'name: %s\n' "$VERSION_NAME" >&3
 printf 'name: %s\n' "$VERSION_NAME" >&3
 printf 'milestone: %s\n' "$VERSION_MILESTONE" >&3
 printf 'milestone: %s\n' "$VERSION_MILESTONE" >&3
+printf 'stability: %s\n' "$VERSION_STABILITY" >&3
 printf 'id: %d\n' "$VERSION_ID" >&3
 printf 'id: %d\n' "$VERSION_ID" >&3
 printf 'major: %d\n' "$VERSION_MAJOR" >&3
 printf 'major: %d\n' "$VERSION_MAJOR" >&3
 printf 'minor: %d\n' "$VERSION_MINOR" >&3
 printf 'minor: %d\n' "$VERSION_MINOR" >&3