2020-09-17 19:25:34 +00:00
# Tahoe LFS Development and maintenance tasks
#
2008-04-10 23:47:52 +00:00
# NOTE: this Makefile requires GNU make
2007-07-11 20:39:55 +00:00
2020-09-17 18:54:49 +00:00
### Defensive settings for make:
# https://tech.davis-hansson.com/p/make/
SHELL := bash
.ONESHELL :
.SHELLFLAGS := -xeu -o pipefail -c
.SILENT :
.DELETE_ON_ERROR :
MAKEFLAGS += --warn-undefined-variables
MAKEFLAGS += --no-builtin-rules
2020-09-17 19:25:34 +00:00
# Local target variables
2007-02-01 02:12:33 +00:00
PYTHON = python
2008-09-12 05:09:19 +00:00
export PYTHON
2020-07-06 17:50:06 +00:00
PYFLAKES = flake8
2016-02-05 20:32:02 +00:00
export PYFLAKES
2022-02-14 16:10:56 +00:00
VIRTUAL_ENV = ./.tox/py37
2016-03-23 09:19:50 +00:00
SOURCES = src/allmydata static misc setup.py
2016-03-25 19:16:01 +00:00
APPNAME = tahoe-lafs
2020-09-27 20:43:41 +00:00
TEST_SUITE = allmydata
2008-01-23 00:42:54 +00:00
2020-09-17 19:25:34 +00:00
2020-09-17 19:36:55 +00:00
# Top-level, phony targets
2020-09-17 19:25:34 +00:00
2020-09-17 19:36:55 +00:00
.PHONY : default
2020-09-17 19:25:34 +00:00
default :
@echo "no default target"
2020-09-17 21:09:08 +00:00
.PHONY : test
## Run all tests and code reports
2020-09-27 17:12:02 +00:00
test : .tox /create -venvs .log
2020-09-25 17:04:10 +00:00
# Run codechecks first since it takes the least time to report issues early.
2022-02-15 19:33:00 +00:00
tox --develop -e codechecks
2020-09-25 17:04:10 +00:00
# Run all the test environments in parallel to reduce run-time
2022-02-14 16:10:56 +00:00
tox --develop -p auto -e 'py37'
2020-09-27 20:43:41 +00:00
.PHONY : test -venv -coverage
## Run all tests with coverage collection and reporting.
test-venv-coverage :
# Special handling for reporting coverage even when the test run fails
2020-10-04 21:10:23 +00:00
rm -f ./.coverage.*
2020-09-27 20:43:41 +00:00
test_exit =
$( VIRTUAL_ENV) /bin/coverage run -m twisted.trial --rterrors --reporter= timing \
$( TEST_SUITE) || test_exit = " $$ ? "
$( VIRTUAL_ENV) /bin/coverage combine
$( VIRTUAL_ENV) /bin/coverage xml || true
$( VIRTUAL_ENV) /bin/coverage report
if [ ! -z " $$ test_exit " ] ; then exit " $$ test_exit " ; fi
2020-09-24 18:20:44 +00:00
.PHONY : test -py 3-all
## Run all tests under Python 3
2020-09-27 17:12:02 +00:00
test-py3-all : .tox /create -venvs .log
2022-01-24 15:40:26 +00:00
tox --develop -e py37 allmydata
2020-09-17 21:09:08 +00:00
2012-01-12 21:06:54 +00:00
# This is necessary only if you want to automatically produce a new
2014-09-30 03:54:55 +00:00
# _version.py file from the current git history (without doing a build).
2014-09-08 21:49:54 +00:00
.PHONY : make -version
2007-09-13 01:56:33 +00:00
make-version :
2012-01-12 21:06:54 +00:00
$( PYTHON) ./setup.py update_version
2007-09-13 01:56:33 +00:00
2014-10-06 22:46:29 +00:00
# Build OS X pkg packages.
2020-09-17 19:36:55 +00:00
.PHONY : build -osx -pkg
2016-03-18 05:23:39 +00:00
build-osx-pkg :
2015-03-24 16:41:43 +00:00
misc/build_helpers/build-osx-pkg.sh $( APPNAME)
2014-10-06 22:46:29 +00:00
2020-09-17 19:36:55 +00:00
.PHONY : test -osx -pkg
2015-03-21 21:09:33 +00:00
test-osx-pkg :
2014-10-07 00:40:19 +00:00
$( PYTHON) misc/build_helpers/test-osx-pkg.py
2020-09-17 19:36:55 +00:00
.PHONY : upload -osx -pkg
2015-03-20 17:52:48 +00:00
upload-osx-pkg :
2019-01-26 14:46:29 +00:00
# [Failure instance: Traceback: <class 'OpenSSL.SSL.Error'>: [('SSL routines', 'ssl3_read_bytes', 'tlsv1 alert unknown ca'), ('SSL routines', 'ssl3_write_bytes', 'ssl handshake failure')]
#
# @echo "uploading to ~tahoe-tarballs/OS-X-packages/ via flappserver"
# @if [ "X${BB_BRANCH}" = "Xmaster" ] || [ "X${BB_BRANCH}" = "X" ]; then \
# flappclient --furlfile ~/.tahoe-osx-pkg-upload.furl upload-file tahoe-lafs-*-osx.pkg; \
# else \
# echo not uploading tahoe-lafs-osx-pkg because this is not trunk but is branch \"${BB_BRANCH}\" ; \
# fi
2015-03-20 17:52:48 +00:00
2014-09-08 21:49:54 +00:00
.PHONY : code -checks
2016-03-18 05:23:39 +00:00
#code-checks: build version-and-path check-interfaces check-miscaptures -find-trailing-spaces -check-umids pyflakes
2016-04-06 23:57:41 +00:00
code-checks : check -interfaces check -debugging check -miscaptures -find -trailing -spaces -check -umids pyflakes
.PHONY : check -interfaces
2020-09-17 19:33:13 +00:00
check-interfaces :
2016-04-06 23:57:41 +00:00
$( PYTHON) misc/coding_tools/check-interfaces.py 2>& 1 | tee violations.txt
@echo
2016-08-19 17:37:15 +00:00
.PHONY : check -debugging
check-debugging :
2016-04-06 23:57:41 +00:00
$( PYTHON) misc/coding_tools/check-debugging.py
2016-08-19 17:37:15 +00:00
@echo
2007-01-04 08:25:36 +00:00
2014-09-08 21:49:54 +00:00
.PHONY : check -miscaptures
2011-10-07 07:41:21 +00:00
check-miscaptures :
$( PYTHON) misc/coding_tools/check-miscaptures.py $( SOURCES) 2>& 1 | tee miscaptures.txt
@echo
2014-09-08 21:49:54 +00:00
.PHONY : pyflakes
2006-12-14 11:05:22 +00:00
pyflakes :
2016-02-05 20:32:02 +00:00
$( PYFLAKES) $( SOURCES) | sort | uniq
2011-09-15 16:15:32 +00:00
@echo
2011-08-01 03:19:52 +00:00
2014-09-08 21:49:54 +00:00
.PHONY : check -umids
2010-08-04 07:10:42 +00:00
check-umids :
2012-07-01 20:17:11 +00:00
$( PYTHON) misc/coding_tools/check-umids.py ` find $( SOURCES) -name '*.py' -not -name 'old.py' `
2011-09-15 16:15:32 +00:00
@echo
2014-09-08 21:49:54 +00:00
.PHONY : -check -umids
2011-09-15 16:15:32 +00:00
-check-umids :
2012-07-01 20:17:11 +00:00
-$( PYTHON) misc/coding_tools/check-umids.py ` find $( SOURCES) -name '*.py' -not -name 'old.py' `
2011-09-15 16:15:32 +00:00
@echo
2006-12-14 11:05:22 +00:00
2014-09-08 21:49:54 +00:00
.PHONY : doc -checks
2012-06-23 23:23:19 +00:00
doc-checks : check -rst
2014-09-08 21:49:54 +00:00
.PHONY : check -rst
2012-06-23 23:23:19 +00:00
check-rst :
@for x in ` find *.rst docs -name "*.rst" ` ; do rst2html -v $$ { x} >/dev/null; done 2>& 1 | grep -v 'Duplicate implicit target name:'
@echo
2014-09-08 21:49:54 +00:00
.PHONY : count -lines
2007-01-22 08:17:39 +00:00
count-lines :
2007-01-31 01:10:37 +00:00
@echo -n "files: "
2011-11-09 18:42:27 +00:00
@find src -name '*.py' | grep -v /build/ | wc -l
2007-01-22 08:17:39 +00:00
@echo -n "lines: "
2011-11-09 18:42:27 +00:00
@cat ` find src -name '*.py' | grep -v /build/` | wc -l
2007-01-22 08:17:39 +00:00
@echo -n "TODO: "
2011-11-09 18:42:27 +00:00
@grep TODO ` find src -name '*.py' | grep -v /build/` | wc -l
@echo -n "XXX: "
@grep XXX ` find src -name '*.py' | grep -v /build/` | wc -l
2007-01-22 08:17:39 +00:00
2016-03-18 05:23:39 +00:00
# Here is a list of testing tools that can be run with 'python' from a
# virtualenv in which Tahoe has been installed. There used to be Makefile
# targets for each, but the exact path to a suitable python is now up to the
2022-02-14 16:10:56 +00:00
# developer. But as a hint, after running 'tox', ./.tox/py37/bin/python will
2016-03-18 05:23:39 +00:00
# probably work.
# src/allmydata/test/bench_dirnode.py
2008-06-18 20:15:55 +00:00
# The check-grid target also uses a pre-established client node, along with a
# long-term directory that contains some well-known files. See the docstring
# in src/allmydata/test/check_grid.py to see how to set this up.
2016-03-18 05:23:39 +00:00
##.PHONY: check-grid
##check-grid: .built
## if [ -z '$(TESTCLIENTDIR)' ]; then exit 1; fi
## $(TAHOE) @src/allmydata/test/check_grid.py $(TESTCLIENTDIR) bin/tahoe
2007-11-03 05:32:55 +00:00
2014-09-08 21:49:54 +00:00
.PHONY : test -get -ignore
2012-01-07 00:48:47 +00:00
test-git-ignore :
$( MAKE)
$( PYTHON) misc/build_helpers/test-git-ignore.py
2014-09-08 21:49:54 +00:00
.PHONY : test -clean
2007-05-24 00:57:48 +00:00
test-clean :
2014-09-03 01:32:27 +00:00
find . | grep -vEe "allfiles.tmp|src/allmydata/_(version|appname).py" | sort >allfiles.tmp.old
2007-05-24 00:57:48 +00:00
$( MAKE)
2014-09-03 01:32:27 +00:00
$( MAKE) distclean
find . | grep -vEe "allfiles.tmp|src/allmydata/_(version|appname).py" | sort >allfiles.tmp.new
2007-05-24 00:57:48 +00:00
diff allfiles.tmp.old allfiles.tmp.new
2007-05-24 00:51:28 +00:00
2011-08-01 03:19:52 +00:00
# It would be nice if 'make clean' deleted any automatically-generated
# _version.py too, so that 'make clean; make all' could be useable as a
# "what the heck is going on, get me back to a clean state', but we need
2013-10-10 18:50:49 +00:00
# 'make clean' to work on non-checkout trees without destroying useful information.
# Use 'make distclean' instead to delete all generated files.
2014-09-08 21:49:54 +00:00
.PHONY : clean
2007-09-12 23:02:53 +00:00
clean :
2021-10-15 15:46:34 +00:00
rm -rf build _trial_temp .built
2010-05-23 20:52:28 +00:00
rm -f ` find src *.egg -name '*.so' -or -name '*.pyc' `
2007-09-15 22:17:55 +00:00
rm -rf support dist
2011-01-19 02:50:53 +00:00
rm -rf ` ls -d *.egg | grep -vEe"setuptools-|setuptools_darcs-|darcsver-" `
2010-05-23 20:52:28 +00:00
rm -rf *.pyc
2014-10-03 15:37:14 +00:00
rm -f *.pkg
2006-12-14 10:59:51 +00:00
2014-09-08 21:49:54 +00:00
.PHONY : distclean
2020-12-01 14:52:38 +00:00
distclean : clean
2016-03-25 19:58:05 +00:00
rm -rf src/*.egg-info
2013-10-10 16:47:30 +00:00
rm -f src/allmydata/_version.py
rm -f src/allmydata/_appname.py
2020-09-17 21:09:08 +00:00
rm -rf ./.tox/
2013-10-10 16:47:30 +00:00
2014-09-08 21:49:54 +00:00
.PHONY : find -trailing -spaces
2007-11-06 04:32:08 +00:00
find-trailing-spaces :
2011-08-01 03:19:52 +00:00
$( PYTHON) misc/coding_tools/find-trailing-spaces.py -r $( SOURCES)
2011-09-15 16:15:32 +00:00
@echo
2014-09-08 21:49:54 +00:00
.PHONY : -find -trailing -spaces
2011-09-15 16:15:32 +00:00
-find-trailing-spaces :
-$( PYTHON) misc/coding_tools/find-trailing-spaces.py -r $( SOURCES)
@echo
2007-07-31 23:55:45 +00:00
2014-09-08 21:49:54 +00:00
.PHONY : fetch -and -unpack -deps
2008-09-17 20:01:19 +00:00
fetch-and-unpack-deps :
2016-03-22 21:10:08 +00:00
@echo "test-and-unpack-deps is obsolete"
2008-09-17 20:01:19 +00:00
2014-09-08 21:49:54 +00:00
.PHONY : test -desert -island
2008-09-17 20:01:19 +00:00
test-desert-island :
2016-03-22 21:10:08 +00:00
@echo "test-desert-island is obsolete"
2008-09-17 01:37:02 +00:00
2015-06-16 20:41:21 +00:00
.PHONY : test -pip -install
test-pip-install :
2016-03-22 21:10:08 +00:00
@echo "test-pip-install is obsolete"
2008-09-17 01:37:02 +00:00
2008-01-31 03:45:14 +00:00
# TARBALL GENERATION
2014-09-08 21:49:54 +00:00
.PHONY : tarballs
2018-03-27 21:34:32 +00:00
tarballs : # delegated to tox, so setup.py can update setuptools if needed
tox -e tarballs
2008-09-17 20:01:19 +00:00
2014-09-08 21:49:54 +00:00
.PHONY : upload -tarballs
2008-02-01 02:00:40 +00:00
upload-tarballs :
2016-03-30 22:58:01 +00:00
@if [ " X ${ BB_BRANCH } " = "Xmaster" ] || [ " X ${ BB_BRANCH } " = "X" ] ; then for f in dist/*; do flappclient --furlfile ~/.tahoe-tarball-upload.furl upload-file $$ f; done ; else echo not uploading tarballs because this is not trunk but is branch \" ${ BB_BRANCH } \" ; fi
2020-09-17 19:25:34 +00:00
# Real targets
src/allmydata/_version.py :
$( MAKE) make-version
2020-09-17 21:09:08 +00:00
2020-09-27 17:12:02 +00:00
.tox/create-venvs.log : tox .ini setup .py
2020-09-27 16:32:40 +00:00
tox --notest -p all | tee -a " $( @) "
2022-09-30 22:48:23 +00:00
2022-10-02 20:34:42 +00:00
# to make a new release:
# - create a ticket for the release in Trac
# - ensure local copy is up-to-date
# - create a branch like "XXXX.release" from up-to-date master
# - in the branch, run "make release"
# - run "make release-test"
# - perform any other sanity-checks on the release
# - run "make release-upload"
# Note that several commands below hard-code "meejah"; if you are
# someone else please adjust them.
2022-09-30 22:48:23 +00:00
release :
@echo "Is checkout clean?"
git diff-files --quiet
git diff-index --quiet --cached HEAD --
2022-10-02 19:33:05 +00:00
@echo "Clean docs build area"
rm -rf docs/_build/
2022-09-30 22:48:23 +00:00
@echo "Install required build software"
python3 -m pip install --editable .[ build]
@echo "Test README"
python3 setup.py check -r -s
@echo "Update NEWS"
python3 -m towncrier build --yes --version ` python3 misc/build_helpers/update-version.py --no-tag`
git add -u
git commit -m "update NEWS for release"
2022-10-02 20:53:03 +00:00
# note that this always bumps the "middle" number, e.g. from 1.17.1 -> 1.18.0
# and produces a tag into the Git repository
2022-09-30 22:48:23 +00:00
@echo "Bump version and create tag"
python3 misc/build_helpers/update-version.py
@echo "Build and sign wheel"
python3 setup.py bdist_wheel
2022-09-30 22:53:48 +00:00
gpg --pinentry= loopback -u meejah@meejah.ca --armor --detach-sign dist/tahoe_lafs-` git describe | cut -b 12-` -py3-none-any.whl
ls dist/*` git describe | cut -b 12-` *
2022-09-30 22:48:23 +00:00
@echo "Build and sign source-dist"
python3 setup.py sdist
2022-09-30 22:53:48 +00:00
gpg --pinentry= loopback -u meejah@meejah.ca --armor --detach-sign dist/tahoe-lafs-` git describe | cut -b 12-` .tar.gz
ls dist/*` git describe | cut -b 12-` *
2022-09-30 22:48:23 +00:00
2022-09-30 23:20:19 +00:00
# basically just a bare-minimum smoke-test that it installs and runs
2022-09-30 22:48:23 +00:00
release-test :
2022-09-30 22:53:48 +00:00
gpg --verify dist/tahoe-lafs-` git describe | cut -b 12-` .tar.gz.asc
gpg --verify dist/tahoe_lafs-` git describe | cut -b 12-` -py3-none-any.whl.asc
2022-09-30 22:48:23 +00:00
virtualenv testmf_venv
2022-09-30 22:53:48 +00:00
testmf_venv/bin/pip install dist/tahoe_lafs-` git describe | cut -b 12-` -py3-none-any.whl
2022-09-30 23:20:19 +00:00
testmf_venv/bin/tahoe --version
2022-09-30 22:48:23 +00:00
rm -rf testmf_venv
release-upload :
2022-10-01 20:47:19 +00:00
scp dist/*` git describe | cut -b 12-` * meejah@tahoe-lafs.org:/home/source/downloads
git push origin_push tahoe-lafs-` git describe | cut -b 12-`
2022-09-30 22:53:48 +00:00
twine upload dist/tahoe_lafs-` git describe | cut -b 12-` -py3-none-any.whl dist/tahoe_lafs-` git describe | cut -b 12-` -py3-none-any.whl.asc dist/tahoe-lafs-` git describe | cut -b 12-` .tar.gz dist/tahoe-lafs-` git describe | cut -b 12-` .tar.gz.asc