Since Pico depends on PicoDeprecated, and PicoDeprecated depends on Pico, a chicken-egg-problem arises: When pushing a new tag for Pico, GitHub Actions will try to build this new release by downloading the matching version of PicoDeprecated from Packagist. Since we didn't release a new version of PicoDeprecated yet, this will fail. So we need to push PicoDeprecated's tag first. Doing so yields GitHub Actions trying to build PicoDeprecated's new release - by trying to download the matching version of Pico from Packagist, which doesn't exist yet. Thus builds will always fail - unless you push both tags at the exact same time, and unless you send some prayers that GitHub Actions delays building until Packagist picks up the new releases. The simplest solution is not to use GitHub Actions to publish new releases, but letting the user to do it instead. With this changeset this is as simple as `make publish version=v3.0.0`. The 'deploy-release' GitHub workflow now just updates the website and is triggered by publishing the GitHub release, not the tag. This additionally allows the user to perform some manual tests before publication. The build script now depends on GitHub CLI (`gh`), see https://cli.github.com/. You must setup authentication first (`gh auth login`).
487 lines
17 KiB
Bash
Executable File
487 lines
17 KiB
Bash
Executable File
#!/bin/bash
|
|
# Pico -- build.sh
|
|
# Builds a new Pico release and creates release archives.
|
|
#
|
|
# This file is part of Pico, a stupidly simple, blazing fast, flat file CMS.
|
|
# Visit us at https://picocms.org/ for more info.
|
|
#
|
|
# Copyright (c) 2017 Daniel Rudolf <https://www.daniel-rudolf.de>
|
|
#
|
|
# This work is licensed under the terms of the MIT license.
|
|
# For a copy, see LICENSE file or <https://opensource.org/licenses/MIT>.
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
# License-Filename: LICENSE
|
|
|
|
set -eu -o pipefail
|
|
export LC_ALL=C
|
|
|
|
# env variables
|
|
PHP="${PHP:-php}"
|
|
export -n PHP
|
|
|
|
COMPOSER="${COMPOSER:-composer}"
|
|
export -n COMPOSER
|
|
|
|
if ! which "$PHP" > /dev/null; then
|
|
echo "Missing script dependency: php" >&2
|
|
exit 1
|
|
elif ! which "$COMPOSER" > /dev/null; then
|
|
echo "Missing script dependency: composer" >&2
|
|
exit 1
|
|
elif ! which "git" > /dev/null; then
|
|
echo "Missing script dependency: git" >&2
|
|
exit 1
|
|
elif ! which "gh" > /dev/null; then
|
|
echo "Missing script dependency: gh" >&2
|
|
exit 1
|
|
elif ! which "rsync" > /dev/null; then
|
|
echo "Missing script dependency: rsync" >&2
|
|
exit 1
|
|
elif ! which "jq" > /dev/null; then
|
|
echo "Missing script dependency: jq" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# parameters
|
|
BUILD_NAME="pico"
|
|
BUILD_PROJECT="picocms/pico"
|
|
BUILD_VERSION=
|
|
|
|
PICO_COMPOSER_NAME="pico-composer"
|
|
PICO_COMPOSER_PROJECT="picocms/pico-composer"
|
|
PICO_COMPOSER_DIR=
|
|
|
|
PICO_THEME_NAME="pico-theme"
|
|
PICO_THEME_PROJECT="picocms/pico-theme"
|
|
PICO_THEME_DIR=
|
|
|
|
PICO_DEPRECATED_NAME="pico-deprecated"
|
|
PICO_DEPRECATED_PROJECT="picocms/pico-deprecated"
|
|
PICO_DEPRECATED_DIR=
|
|
|
|
PHP_VERSION="7.2"
|
|
|
|
# options
|
|
VERSION=
|
|
PUBLISH=
|
|
NOCHECK=
|
|
NOCLEAN=
|
|
|
|
while [ $# -gt 0 ]; do
|
|
if [ "$1" == "--help" ]; then
|
|
echo "Usage:"
|
|
echo " build.sh [OPTIONS]... [VERSION]"
|
|
echo
|
|
echo "Builds a new Pico release and creates release archives."
|
|
echo
|
|
echo "Help options:"
|
|
echo " --help display this help and exit"
|
|
echo
|
|
echo "Application options:"
|
|
echo " --publish create GitHub release and upload artifacts"
|
|
echo " --pico-composer PATH path to a local copy of '$PICO_COMPOSER_PROJECT'"
|
|
echo " --pico-theme PATH path to a local copy of '$PICO_THEME_PROJECT'"
|
|
echo " --pico-deprecated PATH path to a local copy of '$PICO_DEPRECATED_PROJECT'"
|
|
echo " --no-check skip version checks for dev builds"
|
|
echo " --no-clean don't remove build dir on exit"
|
|
echo
|
|
echo "You must run this script from within Pico's source directory. Please note"
|
|
echo "that this script will perform a large number of strict sanity checks before"
|
|
echo "building a new non-development version of Pico. VERSION must start with 'v'."
|
|
exit 0
|
|
elif [ "$1" == "--publish" ]; then
|
|
PUBLISH="y"
|
|
shift
|
|
elif [ "$1" == "--no-check" ]; then
|
|
NOCHECK="y"
|
|
shift
|
|
elif [ "$1" == "--no-clean" ]; then
|
|
NOCLEAN="y"
|
|
shift
|
|
elif [ "$1" == "--pico-composer" ] && [ $# -ge 2 ]; then
|
|
PICO_COMPOSER_DIR="$2"
|
|
shift 2
|
|
elif [ "$1" == "--pico-theme" ] && [ $# -ge 2 ]; then
|
|
PICO_THEME_DIR="$2"
|
|
shift 2
|
|
elif [ "$1" == "--pico-deprecated" ] && [ $# -ge 2 ]; then
|
|
PICO_DEPRECATED_DIR="$2"
|
|
shift 2
|
|
elif [ -z "$VERSION" ] && [ "${1:0:1}" == "v" ]; then
|
|
VERSION="$1"
|
|
shift
|
|
else
|
|
echo "Unknown option: $1" >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
# check options and current working dir
|
|
if [ ! -f "./composer.json" ] || [ ! -f "./lib/Pico.php" ]; then
|
|
echo "You must run this from within Pico's source directory" >&2
|
|
exit 1
|
|
elif [ "$(git rev-parse --is-inside-work-tree 2> /dev/null)" != "true" ]; then
|
|
echo "You must run this from within a non-bare Git repository" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ -n "$PICO_COMPOSER_DIR" ]; then
|
|
if [ ! -f "$PICO_COMPOSER_DIR/composer.json" ] || [ ! -f "$PICO_COMPOSER_DIR/index.php" ]; then
|
|
echo "You must pass a source directory of '$PICO_COMPOSER_PROJECT' as '--pico-composer': $PICO_COMPOSER_DIR" >&2
|
|
exit 1
|
|
elif [ "$(git -C "$PICO_COMPOSER_DIR" rev-parse --is-inside-work-tree 2> /dev/null)" != "true" ]; then
|
|
echo "You must pass a non-bare Git repository as '--pico-composer': $PICO_COMPOSER_DIR" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ -n "$PICO_THEME_DIR" ]; then
|
|
if [ ! -f "$PICO_THEME_DIR/composer.json" ] || [ ! -f "$PICO_THEME_DIR/pico-theme.yml" ]; then
|
|
echo "You must pass a source directory of '$PICO_THEME_PROJECT' as '--pico-theme': $PICO_THEME_DIR" >&2
|
|
exit 1
|
|
elif [ "$(git -C "$PICO_THEME_DIR" rev-parse --is-inside-work-tree 2> /dev/null)" != "true" ]; then
|
|
echo "You must pass a non-bare Git repository as '--pico-theme': $PICO_THEME_DIR" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ -n "$PICO_DEPRECATED_DIR" ]; then
|
|
if [ ! -f "$PICO_DEPRECATED_DIR/composer.json" ] || [ ! -f "$PICO_DEPRECATED_DIR/PicoDeprecated.php" ]; then
|
|
echo "You must pass a source directory of '$PICO_DEPRECATED_PROJECT' as '--pico-deprecated': $PICO_DEPRECATED_DIR" >&2
|
|
exit 1
|
|
elif [ "$(git -C "$PICO_DEPRECATED_DIR" rev-parse --is-inside-work-tree 2> /dev/null)" != "true" ]; then
|
|
echo "You must pass a non-bare Git repository as '--pico-deprecated': $PICO_DEPRECATED_DIR" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# parse version
|
|
function parse_version {
|
|
VERSION_FULL="${1#v}"
|
|
|
|
if ! [[ "$VERSION_FULL" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)(-([0-9A-Za-z\.\-]+))?(\+([0-9A-Za-z\.\-]+))?$ ]]; then
|
|
return 1
|
|
fi
|
|
|
|
VERSION_MAJOR="${BASH_REMATCH[1]}"
|
|
VERSION_MINOR="${BASH_REMATCH[2]}"
|
|
VERSION_PATCH="${BASH_REMATCH[3]}"
|
|
VERSION_SUFFIX="${BASH_REMATCH[5]}"
|
|
|
|
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
|
|
}
|
|
|
|
BUILD_VERSION="v$("$PHP" -r 'require("./lib/Pico.php"); echo Pico::VERSION;')"
|
|
|
|
if ! parse_version "$BUILD_VERSION"; then
|
|
echo "Unable to build Pico: Invalid Pico version '$BUILD_VERSION'" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$VERSION" ]; then
|
|
GIT_LOCAL_HEAD="$(git rev-parse HEAD)"
|
|
GIT_LOCAL_BRANCH="$(git rev-parse --abbrev-ref HEAD)"
|
|
DATETIME="$(date -u +'%Y%m%dT%H%M%SZ')"
|
|
|
|
VERSION="v$VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH"
|
|
[ -z "$VERSION_SUFFIX" ] || VERSION+="-$VERSION_SUFFIX"
|
|
[ "$VERSION_STABILITY" == "dev" ] || VERSION+="-dev"
|
|
VERSION+="+git.$GIT_LOCAL_HEAD.$DATETIME"
|
|
|
|
if ! parse_version "$VERSION"; then
|
|
echo "Unable to build Pico: Invalid build version '$VERSION'" >&2
|
|
exit 1
|
|
fi
|
|
|
|
DEPENDENCY_VERSION="dev-$GIT_LOCAL_BRANCH"
|
|
else
|
|
if ! parse_version "$VERSION"; then
|
|
echo "Unable to build Pico: Invalid build version '$VERSION'" >&2
|
|
exit 1
|
|
fi
|
|
|
|
DEPENDENCY_VERSION=
|
|
if [ "$VERSION_STABILITY" == "dev" ]; then
|
|
DEPENDENCY_VERSION="$(jq -r --arg ALIAS "$VERSION_MAJOR.$VERSION_MINOR.x-dev" \
|
|
'.extra."branch-alias"|to_entries|map(select(.value==$ALIAS).key)[0]//empty' \
|
|
"composer.json")"
|
|
fi
|
|
|
|
if [ -z "$DEPENDENCY_VERSION" ]; then
|
|
DEPENDENCY_VERSION="$VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH"
|
|
[ -z "$VERSION_SUFFIX" ] || DEPENDENCY_VERSION+="-$VERSION_SUFFIX"
|
|
[ "$VERSION_STABILITY" == "stable" ] || DEPENDENCY_VERSION+="@$VERSION_STABILITY"
|
|
fi
|
|
fi
|
|
|
|
# build checks
|
|
if [ "$VERSION_STABILITY" != "dev" ]; then
|
|
GIT_LOCAL_CLEAN="$(git status --porcelain)"
|
|
GIT_LOCAL_HEAD="$(git rev-parse HEAD)"
|
|
GIT_LOCAL_TAG="$(git rev-parse --verify "refs/tags/$VERSION" 2> /dev/null || true)"
|
|
GIT_REMOTE="$(git 'for-each-ref' --format='%(upstream:remotename)' "$(git symbolic-ref -q HEAD)")"
|
|
GIT_REMOTE_TAG="$(git ls-remote "${GIT_REMOTE:-origin}" "refs/tags/$VERSION" 2> /dev/null | cut -f 1 || true)"
|
|
PHP_VERSION_LOCAL="$("$PHP" -r 'echo PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION;')"
|
|
|
|
if [ "$VERSION" != "$BUILD_VERSION" ]; then
|
|
echo "Unable to build Pico: Building $VERSION, but Pico indicates $BUILD_VERSION" >&2
|
|
exit 1
|
|
elif [ -n "$GIT_LOCAL_CLEAN" ]; then
|
|
echo "Unable to build Pico: Building $VERSION, but the working tree is not clean" >&2
|
|
exit 1
|
|
elif [ -z "$GIT_LOCAL_TAG" ]; then
|
|
echo "Unable to build Pico: Building $VERSION, but no matching local Git tag was found" >&2
|
|
exit 1
|
|
elif [ "$GIT_LOCAL_HEAD" != "$GIT_LOCAL_TAG" ]; then
|
|
echo "Unable to build Pico: Building $VERSION, but the matching Git tag is not checked out" >&2
|
|
exit 1
|
|
elif [ -z "$GIT_REMOTE_TAG" ]; then
|
|
echo "Unable to build Pico: Building $VERSION, but no matching remote Git tag was found" >&2
|
|
exit 1
|
|
elif [ "$GIT_LOCAL_TAG" != "$GIT_REMOTE_TAG" ]; then
|
|
echo "Unable to build Pico: Building $VERSION, but the matching local and remote Git tags differ" >&2
|
|
exit 1
|
|
elif [ "$PHP_VERSION_LOCAL" != "$PHP_VERSION" ]; then
|
|
echo "Unable to build Pico: Refusing to build Pico with PHP $PHP_VERSION_LOCAL, expecting PHP $PHP_VERSION" >&2
|
|
exit 1
|
|
elif [ -n "$PICO_COMPOSER_DIR" ] || [ -n "$PICO_THEME_DIR" ] || [ -n "$PICO_DEPRECATED_DIR" ]; then
|
|
echo "Unable to build Pico: Refusing to build a non-dev version with local dependencies" >&2
|
|
exit 1
|
|
fi
|
|
else
|
|
if [ -z "$NOCHECK" ] && [[ "$VERSION" != "$BUILD_VERSION"* ]]; then
|
|
echo "Unable to build Pico: Building $VERSION, but Pico indicates $BUILD_VERSION" >&2
|
|
exit 1
|
|
elif [ -n "$PUBLISH" ]; then
|
|
echo "Unable to build Pico: Refusing to publish a dev version" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# build in progress...
|
|
APP_DIR="$PWD"
|
|
|
|
BUILD_DIR="$(mktemp -d)"
|
|
[ -n "$NOCLEAN" ] || trap "rm -rf ${BUILD_DIR@Q}" ERR EXIT
|
|
|
|
echo "Building Pico $BUILD_VERSION ($VERSION)..."
|
|
[ -z "$NOCLEAN" ] || echo "Build directory: $BUILD_DIR"
|
|
echo
|
|
|
|
# prepare dev versions of components
|
|
if [ "$VERSION_STABILITY" == "dev" ]; then
|
|
# copy dev version of Pico
|
|
echo "Creating clean working tree copy of '$BUILD_PROJECT'..."
|
|
rsync -a \
|
|
--exclude="/.build" \
|
|
--exclude="/.git" \
|
|
--exclude="/.github" \
|
|
--exclude="/assets/.gitignore" \
|
|
--exclude="/config/.gitignore" \
|
|
--exclude="/content/.gitignore" \
|
|
--exclude="/plugins/.gitignore" \
|
|
--exclude="/themes/.gitignore" \
|
|
--exclude="/.gitattributes" \
|
|
--exclude="/.gitignore" \
|
|
--exclude="/.phpcs.xml" \
|
|
--exclude="/.phpdoc.xml" \
|
|
--exclude-from=<(git ls-files --exclude-standard -oi --directory) \
|
|
./ "$BUILD_DIR/$BUILD_NAME/"
|
|
|
|
# copy dev version of Composer starter project
|
|
if [ -n "$PICO_COMPOSER_DIR" ]; then
|
|
echo "Creating clean working tree copy of '$PICO_COMPOSER_PROJECT'..."
|
|
rsync -a \
|
|
--exclude="/.git" \
|
|
--exclude="/assets/.gitignore" \
|
|
--exclude="/config/.gitignore" \
|
|
--exclude="/content/.gitignore" \
|
|
--exclude="/plugins/.gitignore" \
|
|
--exclude="/themes/.gitignore" \
|
|
--exclude="/.gitattributes" \
|
|
--exclude="/.gitignore" \
|
|
--exclude-from=<(git -C "$PICO_COMPOSER_DIR" ls-files --exclude-standard -oi --directory) \
|
|
"$PICO_COMPOSER_DIR/" "$BUILD_DIR/$PICO_COMPOSER_NAME/"
|
|
fi
|
|
|
|
# copy dev version of default theme
|
|
if [ -n "$PICO_THEME_DIR" ]; then
|
|
echo "Creating clean working tree copy of '$PICO_THEME_PROJECT'..."
|
|
rsync -a \
|
|
--exclude="/.git" \
|
|
--exclude="/.github" \
|
|
--exclude="/.gitattributes" \
|
|
--exclude="/.gitignore" \
|
|
--exclude-from=<(git -C "$PICO_THEME_DIR" ls-files --exclude-standard -oi --directory) \
|
|
"$PICO_THEME_DIR/" "$BUILD_DIR/$PICO_THEME_NAME/"
|
|
fi
|
|
|
|
# copy dev version of PicoDeprecated
|
|
if [ -n "$PICO_DEPRECATED_DIR" ]; then
|
|
echo "Creating clean working tree copy of '$PICO_DEPRECATED_PROJECT'..."
|
|
rsync -a \
|
|
--exclude="/.build" \
|
|
--exclude="/.git" \
|
|
--exclude="/.github" \
|
|
--exclude="/.gitattributes" \
|
|
--exclude="/.gitignore" \
|
|
--exclude="/.phpcs.xml" \
|
|
--exclude-from=<(git -C "$PICO_DEPRECATED_DIR" ls-files --exclude-standard -oi --directory) \
|
|
"$PICO_DEPRECATED_DIR/" "$BUILD_DIR/$PICO_DEPRECATED_NAME/"
|
|
fi
|
|
|
|
echo
|
|
fi
|
|
|
|
# download Composer starter project
|
|
if [ "$VERSION_STABILITY" != "dev" ] || [ -z "$PICO_COMPOSER_DIR" ]; then
|
|
PICO_COMPOSER_VERSION="$DEPENDENCY_VERSION"
|
|
[[ "$PICO_COMPOSER_VERSION" == "dev-"* ]] || PICO_COMPOSER_VERSION="$VERSION_MAJOR.$VERSION_MINOR"
|
|
|
|
echo "Setting up Pico's Composer starter project (version '$PICO_COMPOSER_VERSION')..."
|
|
"$COMPOSER" create-project --no-install "$PICO_COMPOSER_PROJECT" \
|
|
"$BUILD_DIR/$PICO_COMPOSER_NAME" \
|
|
"$PICO_COMPOSER_VERSION"
|
|
echo
|
|
fi
|
|
|
|
# switch to build dir...
|
|
cd "$BUILD_DIR/$PICO_COMPOSER_NAME"
|
|
|
|
# inject local component copies
|
|
if [ "$VERSION_STABILITY" == "dev" ]; then
|
|
function composer_repo_config {
|
|
jq -nc --arg PACKAGE "$1" --arg VERSION "$2" --arg URL "$3" \
|
|
'{"type": "path", "url": $URL, options: {"symlink": false, "versions": {($PACKAGE): $VERSION}}}'
|
|
}
|
|
|
|
echo "Adding Composer repository for '$BUILD_PROJECT'..."
|
|
"$COMPOSER" config repositories."$BUILD_NAME" \
|
|
"$(composer_repo_config "$BUILD_PROJECT" "$DEPENDENCY_VERSION" "$BUILD_DIR/$BUILD_NAME")"
|
|
|
|
if [ -n "$PICO_THEME_DIR" ]; then
|
|
echo "Adding Composer repository for '$PICO_THEME_PROJECT'..."
|
|
"$COMPOSER" config repositories."$PICO_THEME_NAME" \
|
|
"$(composer_repo_config "$PICO_THEME_PROJECT" "$DEPENDENCY_VERSION" "$BUILD_DIR/$PICO_THEME_NAME")"
|
|
fi
|
|
|
|
if [ -n "$PICO_DEPRECATED_DIR" ]; then
|
|
echo "Adding Composer repository for '$PICO_DEPRECATED_PROJECT'..."
|
|
"$COMPOSER" config repositories."$PICO_DEPRECATED_NAME" \
|
|
"$(composer_repo_config "$PICO_DEPRECATED_PROJECT" "$DEPENDENCY_VERSION" "$BUILD_DIR/$PICO_DEPRECATED_NAME")"
|
|
fi
|
|
|
|
echo
|
|
fi
|
|
|
|
# update build version constraints
|
|
echo "Updating Composer dependency version constraints..."
|
|
"$COMPOSER" require --no-update \
|
|
"$BUILD_PROJECT $DEPENDENCY_VERSION" \
|
|
"$PICO_THEME_PROJECT $DEPENDENCY_VERSION" \
|
|
"$PICO_DEPRECATED_PROJECT $DEPENDENCY_VERSION"
|
|
echo
|
|
|
|
# set minimum stability
|
|
if [ "$VERSION_STABILITY" != "stable" ]; then
|
|
echo "Setting minimum stability to '$VERSION_STABILITY'..."
|
|
"$COMPOSER" config "minimum-stability" "$VERSION_STABILITY"
|
|
"$COMPOSER" config "prefer-stable" "true"
|
|
echo
|
|
fi
|
|
|
|
# install dependencies
|
|
echo "Installing Composer dependencies..."
|
|
"$COMPOSER" install --no-dev --optimize-autoloader
|
|
echo
|
|
|
|
# prepare release
|
|
echo "Replacing 'index.php'..."
|
|
cp "vendor/$BUILD_PROJECT/index.php.dist" index.php
|
|
|
|
echo "Adding 'README.md', 'CONTRIBUTING.md', 'CHANGELOG.md', 'SECURITY.md'..."
|
|
cp "vendor/$BUILD_PROJECT/README.md" README.md
|
|
cp "vendor/$BUILD_PROJECT/CONTRIBUTING.md" CONTRIBUTING.md
|
|
cp "vendor/$BUILD_PROJECT/CHANGELOG.md" CHANGELOG.md
|
|
cp "vendor/$BUILD_PROJECT/SECURITY.md" SECURITY.md
|
|
|
|
echo "Removing '.git' directory..."
|
|
rm -rf .git
|
|
|
|
echo "Removing '.git' directories of dependencies..."
|
|
find vendor/ -type d -path 'vendor/*/*/.git' -print0 | xargs -0 rm -rf
|
|
|
|
echo "Removing '.git' directories of plugins and themes..."
|
|
find themes/ -type d -path 'themes/*/.git' -print0 | xargs -0 rm -rf
|
|
find plugins/ -type d -path 'plugins/*/.git' -print0 | xargs -0 rm -rf
|
|
|
|
echo "Removing 'index.php' and 'index.php.dist' from 'vendor/$BUILD_PROJECT'"
|
|
rm -f "vendor/$BUILD_PROJECT/index.php"
|
|
rm -f "vendor/$BUILD_PROJECT/index.php.dist"
|
|
|
|
echo
|
|
|
|
# restore composer.json
|
|
echo "Restoring Composer dependency version constraints..."
|
|
"$COMPOSER" require --no-update \
|
|
"$BUILD_PROJECT ^$VERSION_MAJOR.$VERSION_MINOR" \
|
|
"$PICO_THEME_PROJECT ^$VERSION_MAJOR.$VERSION_MINOR" \
|
|
"$PICO_DEPRECATED_PROJECT ^$VERSION_MAJOR.$VERSION_MINOR"
|
|
|
|
if [ "$VERSION_STABILITY" == "dev" ]; then
|
|
echo "Removing Composer repositories..."
|
|
"$COMPOSER" config --unset repositories."$BUILD_NAME"
|
|
|
|
if [ -n "$PICO_THEME_DIR" ]; then
|
|
"$COMPOSER" config --unset repositories."$PICO_THEME_NAME"
|
|
fi
|
|
if [ -n "$PICO_DEPRECATED_DIR" ]; then
|
|
"$COMPOSER" config --unset repositories."$PICO_DEPRECATED_NAME"
|
|
fi
|
|
fi
|
|
|
|
echo
|
|
|
|
# create release archives
|
|
ARCHIVE_FILENAME="$BUILD_NAME-release-$VERSION"
|
|
|
|
echo "Creating release archive '$ARCHIVE_FILENAME.tar.gz'..."
|
|
find . -mindepth 1 -maxdepth 1 -printf '%f\0' \
|
|
| xargs -0 -- tar -czf "$APP_DIR/$ARCHIVE_FILENAME.tar.gz" --
|
|
|
|
echo "Creating release archive '$ARCHIVE_FILENAME.zip'..."
|
|
zip -q -r "$APP_DIR/$ARCHIVE_FILENAME.zip" .
|
|
|
|
echo
|
|
|
|
# publish release
|
|
if [ -n "$PUBLISH" ]; then
|
|
# switch to app dir
|
|
cd "$APP_DIR"
|
|
|
|
# create GitHub release and upload release archives
|
|
echo "Creating GitHub release and uploading release archives..."
|
|
|
|
GITHUB_PRERELEASE=
|
|
[ "$VERSION_STABILITY" == "stable" ] || GITHUB_PRERELEASE="--prerelease"
|
|
|
|
gh release create "$VERSION" \
|
|
--title "Version $VERSION_FULL" \
|
|
--generate-notes \
|
|
"$GITHUB_PRERELEASE" \
|
|
"$APP_DIR/$ARCHIVE_FILENAME.tar.gz" \
|
|
"$APP_DIR/$ARCHIVE_FILENAME.zip"
|
|
fi
|