You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
225 lines
6.4 KiB
225 lines
6.4 KiB
#
|
|
# 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 && python ./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 <version>
|
|
#
|
|
# 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 <version>
|
|
#
|
|
# 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 <version>
|
|
#
|
|
# 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 <version>
|
|
#
|
|
# 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 <version>
|
|
#
|
|
# 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
|
|
}
|
|
|