diff --git a/.gitignore b/.gitignore index 4b5c0cb5b..315af31ca 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ dist/ *.egg-info/ hooks/*.pyc + +*.rpm +*.deb diff --git a/build_linux.sh b/build_linux.sh new file mode 100755 index 000000000..75ea6f68c --- /dev/null +++ b/build_linux.sh @@ -0,0 +1,71 @@ +#!/bin/sh + +BUILD_DIR=build +INSTALL_DIR=$BUILD_DIR/usr +BIN_DIR=$INSTALL_DIR/bin + +print_error() +{ + echo -e "\e[31m$1\e[0m" +} + +trap 'print_error "FAIL"; exit 1' ERR + +print_info() +{ + echo -e "\e[32m$1\e[0m" +} + +command_exists() +{ + command -v $1 > /dev/null 2>&1 +} + +fpm_build() +{ + print_info "Building $1..." + fpm -s dir -f -t $1 -n dvc -v $(python -c "import dvc; from dvc.main import VERSION; print(str(VERSION))") $INSTALL_DIR +} + +cleanup() +{ + print_info "Cleaning up..." + rm -rf build +} + +install_dependencies() +{ + print_info "Installing requirements..." + pip install -r requirements.txt + + print_info "Installing fpm..." + if command_exists dnf; then + sudo dnf install ruby-devel gcc make rpm-build + elif command_exists yum; then + sudo yum install ruby-devel gcc make rpm-build + elif command_exists apt-get; then + sudo apt-get install ruby ruby-dev rubygems build-essential + else + echo "Unable to install fpm dependencies" && exit 1 + fi + + gem install --no-ri --no-rdoc fpm + + print_info "Installing pyinstaller..." + pip install pyinstaller +} + +build_dvc() +{ + print_info "Building dvc binary..." + pyinstaller --onefile --additional-hooks-dir $(pwd)/hooks dvc/__main__.py --name dvc --distpath $BIN_DIR --specpath $BUILD_DIR +} + +cleanup +install_dependencies +build_dvc +fpm_build rpm +fpm_build deb +cleanup + +print_info "Successfully built dvc rpm and deb packages"