Skip to content
Snippets Groups Projects
Select Git revision
  • 1ac07b8c5f647c60c6987b1628a9b30173c775b7
  • master default
  • 10-move-old-data-instead-of-removing
3 results

build.sh

Blame
  • Dmytro Bogatov's avatar
    Dmytro Bogatov authored
    01f78d0a
    History
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    build.sh 6.34 KiB
    #!/bin/bash
    set -e
    
    # Ensure that the CWD is set to script's location
    cd "${0%/*}"
    CWD=$(pwd)
    
    ## TASKS
    
    ### DOCUMENTATION START
    
    install-node-tools () {
    
    	cd $CWD
    
    	echo "Installing node modules... Requires Yarn or MPM"
    
    	if hash yarn 2>/dev/null; then
            yarn --ignore-engines > /dev/null
        else
    		npm install > /dev/null
        fi
    }
    
    clean-doc-folder () {
    
    	echo "Cleaning doc folder..."
    
    	rm -rf documentation/out
    }
    
    # Should be run in a MkDocs container
    gen-articles-docs () { 
    
    	cd $CWD
    
    	echo "Generating articles based documentation... Requires MkDocs (provides mcdocs and pip extensions)"
    	
    	rm -rf documentation/out/articles
    	mkdir -p documentation/out/articles
    	
    	cd articles
    	mkdocs build > /dev/null
    	cd ..
    	
    	mv articles/site/* documentation/out/articles
    }
    
    gen-server-docs () { 
    
    	cd $CWD
    
    	echo "Generating server side code documentation... Requires Doxygen"
    	
    	rm -rf documentation/out/doxygen
    	mkdir -p documentation/out/doxygen
    	doxygen Doxyfile > /dev/null
    }
    
    gen-client-docs () { 
    
    	cd $CWD
    
    	echo "Generating client side code documentation... Requires TypeDoc (Installed by Yarn or NPM)"
    	
    	rm -rf documentation/out/typedoc
    	mkdir -p documentation/out/typedoc
    	
    	$(npm bin)/typedoc --logger none client/ts/ > /dev/null
    	
    	printf "\n"
    }
    
    gen-api-docs () {
    
    	cd $CWD
    
    	echo "Generating API documentation... Requires Spectacle (Installed by NPM)"
    	
    	rm -rf documentation/out/swagger
    	mkdir -p documentation/out/swagger
    	
    	$(npm bin)/spectacle api.yml -t documentation/out/swagger > /dev/null
    }
    
    merge-docs () {
    
    	cd $CWD
    
    	echo "Merging documentation..."
    
    	mv documentation/out/doxygen/html/* documentation/out/doxygen
    	rm -rf documentation/out/doxygen/html
    
    	mv documentation/out/articles/* documentation/out
    	rm -rf documentation/out/articles
    }
    
    ### DOCUMENTATION END
    
    install-client-libs () {
    
    	cd $CWD/client
    
    	echo "Installing front-end libraries... Requires Yarn"
    	yarn --ignore-engines > /dev/null
    
    }
    
    install-typings () {
    
    	cd $CWD
    
    	echo "Installing TypeScript typings... Requires Typings (Installed by Yarn)"
    	mkdir -p client/typings
    	$(yarn bin)/typings install > /dev/null
    
    }
    
    generate-client-bundle () {
    
    	cd $CWD
    
    	echo "Bundling front-end libraries... Requires Webpack (Installed by Yarn)"
    	rm -rf src/web/wwwroot/{js,css}/*
    
    	$(yarn bin)/webpack --context client/ --env prod --config client/webpack.config.js --output-path src/web/wwwroot/js > /dev/null
    
    	mkdir -p src/web/wwwroot/css/
    	mv src/web/wwwroot/js/app.min.css src/web/wwwroot/css/
    	rm src/web/wwwroot/js/less.*
    
    }
    
    restore-dotnet () {
    
    	cd $CWD/src
    
    	echo "Restoring .NET dependencies... Requires .NET SDK"
    	dotnet restore daemons/daemons.csproj > /dev/null
    	dotnet restore web/web.csproj > /dev/null
    }
    
    build-dotnet () {
    
    	cd $CWD/src
    
    	echo "Building and publishing .NET app... Requires .NET SDK"
    	dotnet publish -c release daemons/daemons.csproj > /dev/null
    	dotnet publish -c release web/web.csproj > /dev/null
    }
    
    move-static-files () {
    
    	cd $CWD
    
    	echo "Moving static files..."
    
    	mkdir -p documentation/out/
    	cp deploy.sh documentation/out/
    	chmod -x documentation/out/deploy.sh
    }
    
    build-ping-server () {
    	cd $CWD/ping
    
    	echo "Building ping server..."
    
    	go build -o bin/ping main/main.go 
    }
    
    build-dev-client () {
    
    	cd $CWD
    
    	echo "Cleaning dist/"
    	rm -rf client/dist/
    
    	echo "Copying source files"
    	mkdir -p client/dist/{ts,less}
    	cp -R client/ts/* client/dist/ts/
    	cp -R client/less/* client/dist/less/
    
    	echo "Bundling front-end libraries... Requires Webpack (Installed globally)"
    	webpack --env dev --display-error-details --output-path client/dist/ts --config client/webpack.config.js --context client/
    
    	echo "Copying generated code"
    	mkdir -p src/web/wwwroot/js/ts
    	cp -R client/dist/ts/* src/web/wwwroot/js/ts/
    	cp client/dist/ts/app.css src/web/wwwroot/css/app.css
    
    	echo "Removing temporary directory"
    	rm -rf client/dist/
    
    	echo "Done!"
    }
    
    build-docker-images () {
    
    	cd $CWD
    
    	if [ -z "$DOTNET_TAG" ]; then
    		DOTNET_TAG="local"
    	fi
    
    	echo "Building web-$DOTNET_TAG"
    	docker build -f src/web/Dockerfile -t dbogatov/status-site:web-$DOTNET_TAG src/web/
    
    	echo "Building daemons-$DOTNET_TAG"
    	docker build -f src/daemons/Dockerfile -t dbogatov/status-site:daemons-$DOTNET_TAG src/daemons/
    
    	echo "Building docs-$DOTNET_TAG"
    	docker build -f documentation/Dockerfile -t dbogatov/status-site:docs-$DOTNET_TAG documentation/
    
    	echo "Building nginx-$DOTNET_TAG"
    	docker build -f nginx/Dockerfile -t dbogatov/status-site:nginx-$DOTNET_TAG nginx/
    
    	echo "Building ping-$DOTNET_TAG"
    	docker build -f ping/Dockerfile -t dbogatov/status-site:ping-$DOTNET_TAG ping/
    
    	echo "Done!"
    }
    
    push-docker-images () {
    
    	if [ -z "$DOTNET_TAG" ]; then
    		DOTNET_TAG="local"
    	fi
    
    	echo "Pushing web-$DOTNET_TAG"
    	docker push dbogatov/status-site:web-$DOTNET_TAG
    
    	echo "Pushing daemons-$DOTNET_TAG"
    	docker push dbogatov/status-site:daemons-$DOTNET_TAG
    
    	echo "Pushing docs-$DOTNET_TAG"
    	docker push dbogatov/status-site:docs-$DOTNET_TAG
    
    	echo "Pushing nginx-$DOTNET_TAG"
    	docker push dbogatov/status-site:nginx-$DOTNET_TAG
    
    	echo "Pushing ping-$DOTNET_TAG"
    	docker push dbogatov/status-site:ping-$DOTNET_TAG
    
    	echo "Done!"
    }
    
    build-for-compose () {
    	build-dotnet
    	build-docker-images
    }
    
    ## DEBIAN PACKAGE
    
    build-debian-package () {
    	
    	cd $CWD/debian
    
    	echo "(Re)creating a temporary directory for building..."
    	rm -rf build/
    	mkdir -p build/status-ctl/
    
    	echo "Copying .jar file, wrapper and scripts..."
    	cp status-ctl.sh build/status-ctl/
    	cp ../src/appsettings.production.yml build/status-ctl/
    	cp ../docker-compose.yml build/status-ctl/
    	cp ../.env.example build/status-ctl/.env
    	cp -r Makefile debian/ build/status-ctl
    
    	printf "\n\nDOTNET_TAG=master" >> build/status-ctl/.env
    
    	echo "Building debian package..."
    	cd build/status-ctl
    	debuild -us -uc
    	
    	echo "Cleaning tmp files..."
    	cd ../..
    	rm -rf build/status-ctl
    
    	echo "Done!"
    }
    
    ## APP BUILDERS
    
    build-app () {
    
    	install-node-tools
    	install-client-libs
    
    	install-typings
    	generate-client-bundle
    	restore-dotnet
    
    	build-dotnet
    
    	echo "Build app completed!"
    }
    
    build-docs () {
    
    	install-node-tools
    	clean-doc-folder
    
    	gen-articles-docs &
    	gen-server-docs &
    	gen-client-docs &
    	gen-api-docs &
    
    	wait
    
    	merge-docs
    
    	move-static-files
    
    	echo "Build docs completed!"
    
    }
    
    usage () { 
    	echo "Usage: $0 [-d -f <string>]" 1>&2 
    }
    
    while getopts "f:d" o; do
    	case "${o}" in
    		f)
    			eval $OPTARG
    			exit 0
    			;;
    		d)
    			build-dev-client
    			exit 0
    			;;
    		h)
    			usage
    			exit 0
    			;;
    		*)
    			usage
    			exit 1
    			;;
    	esac
    done
    shift $((OPTIND-1))
    
    build-app