2020-09-17 12:25:34 -07:00
# Tahoe LFS Development and maintenance tasks
#
2008-04-10 16:47:52 -07:00
# NOTE: this Makefile requires GNU make
2007-07-11 13:39:55 -07:00
2020-09-17 11:54:49 -07: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 12:25:34 -07:00
# Local target variables
2007-01-31 19:12:33 -07:00
PYTHON = python
2008-09-11 22:09:19 -07:00
export PYTHON
2020-07-06 13:50:06 -04:00
PYFLAKES = flake8
2016-02-05 12:32:02 -08:00
export PYFLAKES
2022-02-14 11:10:56 -05:00
VIRTUAL_ENV = ./.tox/py37
2016-03-23 02:19:50 -07:00
SOURCES = src/allmydata static misc setup.py
2016-03-25 19:16:01 +00:00
APPNAME = tahoe-lafs
2020-09-27 13:43:41 -07:00
TEST_SUITE = allmydata
2008-01-22 17:42:54 -07:00
2020-09-17 12:25:34 -07:00
2020-09-17 12:36:55 -07:00
# Top-level, phony targets
2020-09-17 12:25:34 -07:00
2020-09-17 12:36:55 -07:00
.PHONY : default
2020-09-17 12:25:34 -07:00
default :
@echo "no default target"
2020-09-17 14:09:08 -07:00
.PHONY : test
## Run all tests and code reports
2020-09-27 10:12:02 -07:00
test : .tox /create -venvs .log
2020-09-25 10:04:10 -07:00
# Run codechecks first since it takes the least time to report issues early.
2022-02-15 14:33:00 -05:00
tox --develop -e codechecks
2020-09-25 10:04:10 -07:00
# Run all the test environments in parallel to reduce run-time
2022-02-14 11:10:56 -05:00
tox --develop -p auto -e 'py37'
2020-09-27 13:43:41 -07: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 14:10:23 -07:00
rm -f ./.coverage.*
2020-09-27 13:43:41 -07: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 11:20:44 -07:00
.PHONY : test -py 3-all
## Run all tests under Python 3
2020-09-27 10:12:02 -07:00
test-py3-all : .tox /create -venvs .log
2022-01-24 10:40:26 -05:00
tox --develop -e py37 allmydata
2020-09-17 14:09:08 -07:00
2012-01-12 13:06:54 -08: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 22:49:54 +01:00
.PHONY : make -version
2007-09-12 18:56:33 -07:00
make-version :
2012-01-12 13:06:54 -08:00
$( PYTHON) ./setup.py update_version
2007-09-12 18:56:33 -07:00
2014-10-06 23:46:29 +01:00
# Build OS X pkg packages.
2020-09-17 12:36:55 -07:00
.PHONY : build -osx -pkg
2016-03-17 22:23:39 -07:00
build-osx-pkg :
2015-03-24 16:41:43 +00:00
misc/build_helpers/build-osx-pkg.sh $( APPNAME)
2014-10-06 23:46:29 +01:00
2020-09-17 12:36:55 -07:00
.PHONY : test -osx -pkg
2015-03-21 14:09:33 -07:00
test-osx-pkg :
2014-10-07 01:40:19 +01:00
$( PYTHON) misc/build_helpers/test-osx-pkg.py
2020-09-17 12:36:55 -07:00
.PHONY : upload -osx -pkg
2015-03-20 10:52:48 -07:00
upload-osx-pkg :
2019-01-26 09:46:29 -05: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 10:52:48 -07:00
2014-09-08 22:49:54 +01:00
.PHONY : code -checks
2016-03-17 22:23:39 -07:00
#code-checks: build version-and-path check-interfaces check-miscaptures -find-trailing-spaces -check-umids pyflakes
2016-04-06 13:57:41 -10:00
code-checks : check -interfaces check -debugging check -miscaptures -find -trailing -spaces -check -umids pyflakes
.PHONY : check -interfaces
2020-09-17 12:33:13 -07:00
check-interfaces :
2016-04-06 13:57:41 -10:00
$( PYTHON) misc/coding_tools/check-interfaces.py 2>& 1 | tee violations.txt
@echo
2016-08-19 11:37:15 -06:00
.PHONY : check -debugging
check-debugging :
2016-04-06 13:57:41 -10:00
$( PYTHON) misc/coding_tools/check-debugging.py
2016-08-19 11:37:15 -06:00
@echo
2007-01-04 01:25:36 -07:00
2014-09-08 22:49:54 +01: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 22:49:54 +01:00
.PHONY : pyflakes
2006-12-14 04:05:22 -07:00
pyflakes :
2016-02-05 12:32:02 -08:00
$( PYFLAKES) $( SOURCES) | sort | uniq
2011-09-15 09:15:32 -07:00
@echo
2011-07-31 20:19:52 -07:00
2014-09-08 22:49:54 +01:00
.PHONY : check -umids
2010-08-04 00:10:42 -07: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 09:15:32 -07:00
@echo
2014-09-08 22:49:54 +01:00
.PHONY : -check -umids
2011-09-15 09:15:32 -07: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 09:15:32 -07:00
@echo
2006-12-14 04:05:22 -07:00
2014-09-08 22:49:54 +01:00
.PHONY : doc -checks
2012-06-23 23:23:19 +00:00
doc-checks : check -rst
2014-09-08 22:49:54 +01: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 22:49:54 +01:00
.PHONY : count -lines
2007-01-22 01:17:39 -07:00
count-lines :
2007-01-30 18:10:37 -07:00
@echo -n "files: "
2011-11-09 10:42:27 -08:00
@find src -name '*.py' | grep -v /build/ | wc -l
2007-01-22 01:17:39 -07:00
@echo -n "lines: "
2011-11-09 10:42:27 -08:00
@cat ` find src -name '*.py' | grep -v /build/` | wc -l
2007-01-22 01:17:39 -07:00
@echo -n "TODO: "
2011-11-09 10:42:27 -08: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 01:17:39 -07:00
2016-03-17 22:23:39 -07: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 11:10:56 -05:00
# developer. But as a hint, after running 'tox', ./.tox/py37/bin/python will
2016-03-17 22:23:39 -07:00
# probably work.
# src/allmydata/test/bench_dirnode.py
2008-06-18 13:15:55 -07: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-17 22:23:39 -07: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-02 22:32:55 -07:00
2014-09-08 22:49:54 +01:00
.PHONY : test -get -ignore
2012-01-06 16:48:47 -08:00
test-git-ignore :
$( MAKE)
$( PYTHON) misc/build_helpers/test-git-ignore.py
2014-09-08 22:49:54 +01:00
.PHONY : test -clean
2007-05-23 17:57:48 -07:00
test-clean :
2014-09-02 18:32:27 -07:00
find . | grep -vEe "allfiles.tmp|src/allmydata/_(version|appname).py" | sort >allfiles.tmp.old
2007-05-23 17:57:48 -07:00
$( MAKE)
2014-09-02 18:32:27 -07:00
$( MAKE) distclean
find . | grep -vEe "allfiles.tmp|src/allmydata/_(version|appname).py" | sort >allfiles.tmp.new
2007-05-23 17:57:48 -07:00
diff allfiles.tmp.old allfiles.tmp.new
2007-05-23 17:51:28 -07:00
2011-07-31 20:19:52 -07: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 19:50:49 +01: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 22:49:54 +01:00
.PHONY : clean
2007-09-12 16:02:53 -07:00
clean :
2021-10-15 11:46:34 -04:00
rm -rf build _trial_temp .built
2010-05-23 13:52:28 -07:00
rm -f ` find src *.egg -name '*.so' -or -name '*.pyc' `
2007-09-15 15:17:55 -07:00
rm -rf support dist
2011-01-18 18:50:53 -08:00
rm -rf ` ls -d *.egg | grep -vEe"setuptools-|setuptools_darcs-|darcsver-" `
2010-05-23 13:52:28 -07:00
rm -rf *.pyc
2014-10-03 21:07:14 +05:30
rm -f *.pkg
2006-12-14 03:59:51 -07:00
2014-09-08 22:49:54 +01:00
.PHONY : distclean
2020-12-01 09:52:38 -05:00
distclean : clean
2016-03-25 12:58:05 -07:00
rm -rf src/*.egg-info
2013-10-10 17:47:30 +01:00
rm -f src/allmydata/_version.py
rm -f src/allmydata/_appname.py
2020-09-17 14:09:08 -07:00
rm -rf ./.tox/
2013-10-10 17:47:30 +01:00
2014-09-08 22:49:54 +01:00
.PHONY : find -trailing -spaces
2007-11-05 21:32:08 -07:00
find-trailing-spaces :
2011-07-31 20:19:52 -07:00
$( PYTHON) misc/coding_tools/find-trailing-spaces.py -r $( SOURCES)
2011-09-15 09:15:32 -07:00
@echo
2014-09-08 22:49:54 +01:00
.PHONY : -find -trailing -spaces
2011-09-15 09:15:32 -07:00
-find-trailing-spaces :
-$( PYTHON) misc/coding_tools/find-trailing-spaces.py -r $( SOURCES)
@echo
2007-07-31 16:55:45 -07:00
2014-09-08 22:49:54 +01:00
.PHONY : fetch -and -unpack -deps
2008-09-17 13:01:19 -07:00
fetch-and-unpack-deps :
2016-03-22 14:10:08 -07:00
@echo "test-and-unpack-deps is obsolete"
2008-09-17 13:01:19 -07:00
2014-09-08 22:49:54 +01:00
.PHONY : test -desert -island
2008-09-17 13:01:19 -07:00
test-desert-island :
2016-03-22 14:10:08 -07:00
@echo "test-desert-island is obsolete"
2008-09-16 18:37:02 -07:00
2015-06-16 13:41:21 -07:00
.PHONY : test -pip -install
test-pip-install :
2016-03-22 14:10:08 -07:00
@echo "test-pip-install is obsolete"
2008-09-16 18:37:02 -07:00
2008-01-30 20:45:14 -07:00
# TARBALL GENERATION
2014-09-08 22:49:54 +01:00
.PHONY : tarballs
2018-03-27 14:34:32 -07:00
tarballs : # delegated to tox, so setup.py can update setuptools if needed
tox -e tarballs
2008-09-17 13:01:19 -07:00
2014-09-08 22:49:54 +01:00
.PHONY : upload -tarballs
2008-01-31 19:00:40 -07:00
upload-tarballs :
2016-03-30 15:58:01 -07: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 12:25:34 -07:00
# Real targets
src/allmydata/_version.py :
$( MAKE) make-version
2020-09-17 14:09:08 -07:00
2020-09-27 10:12:02 -07:00
.tox/create-venvs.log : tox .ini setup .py
2020-09-27 09:32:40 -07:00
tox --notest -p all | tee -a " $( @) "
2022-09-30 16:48:23 -06:00
2022-10-02 14:34:42 -06: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 16:48:23 -06:00
release :
@echo "Is checkout clean?"
git diff-files --quiet
git diff-index --quiet --cached HEAD --
2022-10-02 13:33:05 -06:00
@echo "Clean docs build area"
rm -rf docs/_build/
2022-09-30 16:48:23 -06: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 14:53:03 -06: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 16:48:23 -06: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 16:53:48 -06: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 16:48:23 -06:00
@echo "Build and sign source-dist"
python3 setup.py sdist
2022-09-30 16:53:48 -06: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 16:48:23 -06:00
2022-09-30 17:20:19 -06:00
# basically just a bare-minimum smoke-test that it installs and runs
2022-09-30 16:48:23 -06:00
release-test :
2022-09-30 16:53:48 -06: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 16:48:23 -06:00
virtualenv testmf_venv
2022-09-30 16:53:48 -06:00
testmf_venv/bin/pip install dist/tahoe_lafs-` git describe | cut -b 12-` -py3-none-any.whl
2022-09-30 17:20:19 -06:00
testmf_venv/bin/tahoe --version
2022-09-30 16:48:23 -06:00
rm -rf testmf_venv
release-upload :
2022-10-01 14:47:19 -06: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 16:53:48 -06: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