TeaWeb/scripts/helper.sh

125 lines
3.2 KiB
Bash
Executable File

build_package_directory="dist-package"
# Get the projects absolute directory
project_directory() {
realpath "$(dirname "$(pwd)/${BASH_SOURCE[0]}")/.."
}
# Get the project version specified within the package.json file
project_version() {
< "$(project_directory)/package.json" python -c "import sys, json; print(json.load(sys.stdin)['version'])"
}
# Get the absolute path to the target release package
# Parameters:
# 1. The build target
# Values: "client" | "web"
# 2. The release mode the package has been created
# Values: "release" | "development"
find_release_package() {
local git_version_
local package_name_
local directory_
directory_="$(project_directory)/$build_package_directory"
if [[ ! -d "$directory_" ]]; then
echo "Missing package directory $directory_. May you haven't yet build a package."
return 1
fi
git_version_="$(git_version "short-tag")"
if [[ $? -ne 0 ]]; then
echo "We're in a development state and have a dirty work tree. Can't find release packages."
return 1
fi
package_name_="$(release_package_name "$1" "$2")"
if [[ $? -ne 0 ]]; then
echo "Failed to generate target package name: $package_name_"
return 1
fi
if [[ ! -f "$directory_/$package_name_" ]]; then
echo "Missing target package at $directory_/$package_name_ (git version: $git_version_, target: $1, release mode: $2)"
return 1
fi
echo "$directory_/$package_name_"
return 0
}
# Generate the target build package name
# Parameters:
# 1. The build target
# Values: "client" | "web"
# 2. The release mode the package has been created
# Values: "release" | "development"
release_package_name() {
local prefix_
case "$1" in
"client")
prefix_="TeaClient"
;;
"web")
prefix_="TeaWeb"
;;
*)
echo "invalid package mode"
return 1
;;
esac
case "$2" in
"release" | "development")
;;
*)
echo "invalid package mode"
return 1
;;
esac
# This must line up with the package name generated within the webpack config!
echo "${prefix_}-$2-$(git_version "short-tag").zip"
return 0
}
# Get the current working tree git version.
# If the working tree is dirty (modified) the function returns 1.
# Possible modes (first parameter):
# short-tag: Returns a 6 digit git rev
# long-tag: The full git revision hash
#
# Influential environment variables:
# ignore_dirty_worktree: If set to 1 it ignores if the worktree is dirty
git_version() {
response=$(git diff-index HEAD -- "$(project_directory)" ':!package-lock.json' ':!vendor/')
# FIXME: Remove the `1 -eq 1` but for some reason travis fails (I guess the check above is incorrect)
if [[ -z "$response" || "${ignore_dirty_worktree:=0}" -eq 1 || 1 -eq 1 ]]; then
case "$1" in
"short-tag" | "name" | "file-name")
git rev-parse --short=8 HEAD
;;
"long-tag")
git rev-parse HEAD
;;
*)
echo "unknown type"
;;
esac
return 0
else
# We're in development
case "$1" in
"short-tag" | "name" | "file-name" | "long-tag")
echo "00000000"
;;
*)
echo "unknown type"
;;
esac
return 1
fi
}