# # This is a script containing functions that are used as build rules. You can # use the Simple Little Automator (https://github.com/fboender/sla.git) to run # these rules, or you can run them directly in your shell: # # $ bash -c ". build.sla && test" # PROG="scriptform" test () { # Run tests # Runs unit, integration, linting and code quality tests. ROOTDIR="$(pwd)" # Unit / integration tests cd test && /usr/bin/env python3 ./test.py # Code quality linting (flake8) cd $ROOTDIR # E402 == module level import not at top of file cd src && flake8 --extend-ignore=E402 *.py || true # Code quality linting (pylint) cd $ROOTDIR cd src && pylint --reports=n -dR -d subprocess-popen-preexec-fn -d invalid-name -d star-args -d no-member *.py || true cd $ROOTDIR } clean () { # Clean the repo of artifacts rm -rf $PROG.spec rm -rf *.tar.gz rm -rf *.zip rm -rf *.deb rm -rf rel_deb rm -rf rel_bin rm -rf scriptform-* rm -rf doc/manual.html rm -rf doc/MANUAL.html rm -rf examples/megacorp_acc/megacorp.db rm -rf examples/megacorp_acc/.coverage rm -rf examples/megacorp_acc/htmlcov find ./ -name "*.log" -delete find ./ -name "*.pyc" -delete rm -f test/data.csv rm -f test/data.raw rm -f test/.coverage rm -rf test/htmlcov rm -rf dist/ rm -rf build } doc () { # Generate documentation cat doc/header.html > doc/MANUAL.html markdown_py doc/MANUAL.md >> doc/MANUAL.html cat doc/footer.html >> doc/MANUAL.html cat doc/header.html > README.html markdown_py README.md >> README.html cat doc/footer.html >> README.html T_DOC_BUILT=1 } _release_check() { # Verify and prepare for release # Only run this rule once if [ -z "$RELEASE_CHECK_DONE" ]; then RELEASE_CHECK_DONE=1 # Prepare project for release clean doc # Check that REL_VERSION is set if [ ! -z "$1" ]; then REL_VERSION="$1" shift else echo "REL_VERSION not set. Aborting" >&2 exit 1 fi fi } release_src () { # Build source (tar.gz) release # Usage: sla release_src # # Example: # sla release_src 9.99 _release_check "$*" # Prepare source rm -rf "$PROG-$REL_VERSION" mkdir "$PROG-$REL_VERSION" cp src/*.py "$PROG-$REL_VERSION/" mv "$PROG-$REL_VERSION/scriptform.py" "$PROG-$REL_VERSION/$PROG" cp LICENSE "$PROG-$REL_VERSION/" cp README.md "$PROG-$REL_VERSION/" cp contrib/release_Makefile "$PROG-$REL_VERSION/Makefile" cp doc/MANUAL.html "$PROG-$REL_VERSION/MANUAL.html" # Bump version numbers find "$PROG-$REL_VERSION/" -type f -print0 | xargs -0 sed -i "s/%%VERSION%%/$REL_VERSION/g" # Create archives zip -q -r "$PROG-$REL_VERSION.zip" "$PROG-$REL_VERSION" tar -czf "$PROG-$REL_VERSION.tar.gz" "$PROG-$REL_VERSION" } release_deb () { # Build deb release # Usage: sla release_deb # # Example: # sla release_deb 9.99 _release_check "$*" if [ -z "$RELEASE_DEB_DONE" ]; then mkdir -p "rel_deb/usr/bin" mkdir -p "rel_deb/usr/lib/$PROG" mkdir -p "rel_deb/usr/share/doc/$PROG" mkdir -p "rel_deb/usr/share/man/man1" # Copy the source to the release directory structure. cp LICENSE "rel_deb/usr/share/doc/$PROG" cp README.md "rel_deb/usr/share/doc/$PROG" cp doc/MANUAL.md "rel_deb/usr/share/doc/$PROG" cp README.html "rel_deb/usr/share/doc/$PROG" cp doc/MANUAL.html "rel_deb/usr/share/doc/$PROG" cp -ar examples "rel_deb/usr/share/doc/$PROG" cp src/*.py "rel_deb/usr/lib/$PROG/" ln -s "/usr/lib/$PROG/scriptform.py" "rel_deb/usr/bin/$PROG" cp contrib/scriptform.init.d_debian "rel_deb/usr/share/doc/$PROG" cp contrib/scriptform.init.d_redhat "rel_deb/usr/share/doc/$PROG" cp contrib/scriptform.service "rel_deb/usr/share/doc/$PROG" cp -ar contrib/debian/DEBIAN "rel_deb/" # Bump version numbers find rel_deb/ -type f -print0 | xargs -0 sed -i "s/%%VERSION%%/$REL_VERSION/g" # Create debian pacakge fakeroot dpkg-deb --build rel_deb > /dev/null mv rel_deb.deb "$PROG-$REL_VERSION.deb" # Cleanup rm -rf rel_deb rm -rf "$PROG-$REL_VERSION" RELEASE_DEB_DONE=1 fi } release_rpm () { # Build rpm release # Usage: sla release_rpm # # Example: # sla release_rpm 9.99 _release_check "$*" release_deb alien -r -g -v scriptform-$REL_VERSION.deb sed -i 's#%dir "/"##' scriptform-$REL_VERSION/scriptform-$REL_VERSION-2.spec sed -i 's#%dir "/usr/"##' scriptform-$REL_VERSION/scriptform-$REL_VERSION-2.spec sed -i 's#%dir "/usr/bin/"##' scriptform-$REL_VERSION/scriptform-$REL_VERSION-2.spec sed -i 's#%dir "/usr/lib/"##' scriptform-$REL_VERSION/scriptform-$REL_VERSION-2.spec sed -i 's#%dir "/usr/share/"##' scriptform-$REL_VERSION/scriptform-$REL_VERSION-2.spec sed -i 's#%dir "/usr/share/doc/"##' scriptform-$REL_VERSION/scriptform-$REL_VERSION-2.spec sed -i 's#%dir "/usr/share/man/"##' scriptform-$REL_VERSION/scriptform-$REL_VERSION-2.spec sed -i 's#%dir "/usr/share/man/man1/"##' scriptform-$REL_VERSION/scriptform-$REL_VERSION-2.spec pushd . cd scriptform-$REL_VERSION/ FULLPATH="$(pwd)" rpmbuild --quiet --target=noarch --buildroot "$FULLPATH" -bb scriptform-$REL_VERSION-2.spec popd } release_bin () { # Build standalone binary release # Usage: sla release_bin # # Example: # sla release_bin 9.99 _release_check "$*" rm -rf dist/scriptform/ # Create copy and bump version numbers cp -ar src/ rel_bin/ find rel_bin/ -type f -print0 | xargs -0 sed -i "s/%%VERSION%%/$REL_VERSION/g" # Generate binary pyinstaller --strip --onefile rel_bin/scriptform.py # Generate tarball mv dist $PROG-$REL_VERSION-bin64 cp contrib/scriptform.service $PROG-$REL_VERSION-bin64 tar -czf $PROG-$REL_VERSION-bin64.tar.gz $PROG-$REL_VERSION-bin64 # Cleanup rm -rf $PROG-$REL_VERSION-bin64 rm -rf $PROG.spec rm -rf build rm -rf rel_bin } release () { # Build all releases # Usage: sla release # # Builds the debian, rpm packages, source release and standalone binary. # # Example: # sla release 9.99 _release_check "$*" release_src release_deb release_rpm release_bin }