139 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/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 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 <string>]" 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
 |