#!/usr/bin/env sh set -e untracked="(untracked)" REPO=$(cd $(dirname $0); pwd) COMMIT_SHA=$(git rev-parse --short HEAD) ASSETS="false" BINARY="false" RELEASE="" debugInfo () { echo "Repo: $REPO" echo "Build assets: $ASSETS" echo "Build binary: $BINARY" echo "Release: $RELEASE" } buildAssets () { cd $REPO rm -rf frontend/dist rm -f http/rice-box.go cd $REPO/frontend if [ "$CI" = "true" ]; then npm ci else npm install fi npm run lint npm run build } buildBinary () { if ! [ -x "$(command -v rice)" ]; then go install github.com/GeertJohan/go.rice/rice fi cd $REPO/http rm -rf rice-box.go rice embed-go cd $REPO go build -a -o filebrowser -ldflags "-s -w -X github.com/filebrowser/filebrowser/v2/version.CommitSHA=$COMMIT_SHA" } release () { cd $REPO echo "๐Ÿ‘€ Checking semver format" if [ $# -ne 1 ]; then echo "โŒ This release script requires a single argument corresponding to the semver to be released. See semver.org" exit 1 fi GREP="grep" if [ -x "$(command -v ggrep)" ]; then GREP="ggrep" fi semver=$(echo "$1" | $GREP -P '^v(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)') if [ $? -ne 0 ]; then echo "โŒ Not valid semver format. See semver.org" exit 1 fi echo "๐Ÿงผ Tidying up go modules" go mod tidy echo "๐Ÿ‘ Fetching 'master' on 'frontend' and creating new tag" cd frontend git fetch --all git checkout master git tag $semver git push --tags cd .. echo "๐Ÿ‘ Creating a new commit for the new release" git commit --allow-empty -am "chore: version $semver" git tag "$1" git push git push --tags origin echo "๐Ÿ“ฆ Done! $semver released." } usage() { echo "Usage: $0 [-a] [-c] [-b] [-r ]" 1>&2; exit 1; } DEBUG="false" while getopts "bacr:d" o; do case "${o}" in b) ASSETS="true" BINARY="true" ;; a) ASSETS="true" ;; c) BINARY="true" ;; r) RELEASE=${OPTARG} ;; d) DEBUG="true" ;; *) usage ;; esac done shift $((OPTIND-1)) if [ "$DEBUG" = "true" ]; then debugInfo fi if [ "$ASSETS" = "true" ]; then buildAssets fi if [ "$BINARY" = "true" ]; then buildBinary fi if [ "$RELEASE" != "" ]; then release $RELEASE fi