mirror of https://github.com/cloudreve/Cloudreve
				
				
				
			
		
			
				
	
	
		
			125 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			125 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
#!/bin/bash
 | 
						|
 | 
						|
REPO=$(cd $(dirname $0); pwd)
 | 
						|
COMMIT_SHA=$(git rev-parse --short HEAD)
 | 
						|
VERSION=$(git describe --tags)
 | 
						|
ASSETS="false"
 | 
						|
BINARY="false"
 | 
						|
RELEASE="false"
 | 
						|
 | 
						|
debugInfo () {
 | 
						|
  echo "Repo:           $REPO"
 | 
						|
  echo "Build assets:   $ASSETS"
 | 
						|
  echo "Build binary:   $BINARY"
 | 
						|
  echo "Release:        $RELEASE"
 | 
						|
  echo "Version:        $VERSION"
 | 
						|
}
 | 
						|
 | 
						|
buildAssets () {
 | 
						|
  cd $REPO
 | 
						|
  rm -rf assets/build
 | 
						|
  rm -f statik/statik.go
 | 
						|
 | 
						|
  cd $REPO/assets
 | 
						|
 | 
						|
  yarn install
 | 
						|
  yarn run build
 | 
						|
 | 
						|
  if ! [ -x "$(command -v statik)" ]; then
 | 
						|
    export CGO_ENABLED=0
 | 
						|
    go get github.com/rakyll/statik
 | 
						|
  fi
 | 
						|
 | 
						|
  cd $REPO
 | 
						|
  statik -src=assets/build/  -include=*.html,*.js,*.json,*.css,*.png,*.svg,*.ico -f
 | 
						|
}
 | 
						|
 | 
						|
buildBinary () {
 | 
						|
  cd $REPO
 | 
						|
  go build -a -o cloudreve -ldflags " -X 'github.com/HFO4/cloudreve/pkg/conf.BackendVersion=$VERSION' -X 'github.com/HFO4/cloudreve/pkg/conf.LastCommit=$COMMIT_SHA'"
 | 
						|
}
 | 
						|
 | 
						|
_build() {
 | 
						|
    local osarch=$1
 | 
						|
    IFS=/ read -r -a arr <<<"$osarch"
 | 
						|
    os="${arr[0]}"
 | 
						|
    arch="${arr[1]}"
 | 
						|
    gcc="${arr[2]}"
 | 
						|
 | 
						|
    # Go build to build the binary.
 | 
						|
    export GOOS=$os
 | 
						|
    export GOARCH=$arch
 | 
						|
    export CC=$gcc
 | 
						|
    export CGO_ENABLED=1
 | 
						|
 | 
						|
    out="release/cloudreve_${VERSION}_${os}_${arch}"
 | 
						|
    go build -a -o "${out}" -ldflags " -X 'github.com/HFO4/cloudreve/pkg/conf.BackendVersion=$VERSION' -X 'github.com/HFO4/cloudreve/pkg/conf.LastCommit=$COMMIT_SHA'"
 | 
						|
 | 
						|
    if [ "$os" = "windows" ]; then
 | 
						|
      mv $out release/cloudreve.exe
 | 
						|
      zip -j -q "${out}.zip" release/cloudreve.exe
 | 
						|
      rm -f "release/cloudreve.exe"
 | 
						|
    else
 | 
						|
      mv $out release/cloudreve
 | 
						|
      tar -zcvf "${out}.tar.gz" -C release cloudreve
 | 
						|
      rm -f "release/cloudreve"
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
release(){
 | 
						|
  cd $REPO
 | 
						|
  ## List of architectures and OS to test coss compilation.
 | 
						|
  SUPPORTED_OSARCH="linux/amd64/gcc linux/arm/arm-linux-gnueabihf-gcc windows/amd64/x86_64-w64-mingw32-gcc"
 | 
						|
 | 
						|
  echo "Release builds for OS/Arch/CC: ${SUPPORTED_OSARCH}"
 | 
						|
  for each_osarch in ${SUPPORTED_OSARCH}; do
 | 
						|
      _build "${each_osarch}"
 | 
						|
  done
 | 
						|
}
 | 
						|
 | 
						|
usage() {
 | 
						|
  echo "Usage: $0 [-a] [-c] [-b] [-r]" 1>&2;
 | 
						|
  exit 1;
 | 
						|
}
 | 
						|
 | 
						|
while getopts "bacr:d" o; do
 | 
						|
  case "${o}" in
 | 
						|
    b)
 | 
						|
      ASSETS="true"
 | 
						|
      BINARY="true"
 | 
						|
      ;;
 | 
						|
    a)
 | 
						|
      ASSETS="true"
 | 
						|
      ;;
 | 
						|
    c)
 | 
						|
      BINARY="true"
 | 
						|
      ;;
 | 
						|
    r)
 | 
						|
      # ASSETS="true"
 | 
						|
      RELEASE="true"
 | 
						|
      ;;
 | 
						|
    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" = "true" ]; then
 | 
						|
  release
 | 
						|
fi |