Files
buildbot/Makefile
Terence D. Honles eea04bb2cf fix import of buildbot.www.ldapuserinfo.py failing if ldap3 is not available
The tests master/buildbot/test/unit/www/test_ldapuserinfo.py require
ldap3 or they will fail with an import error. This change allows the
import to happen and will throw the error only if LdapUserInfo is used
and ldap3 is not available.
2021-04-24 23:14:43 +03:00

172 lines
5.7 KiB
Makefile

# developer utilities
DOCKERBUILD := docker build --build-arg http_proxy=$$http_proxy --build-arg https_proxy=$$https_proxy
ROOT_DIR := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
.PHONY: docs pylint flake8 virtualenv
VENV_NAME := .venv$(VENV_PY_VERSION)
PIP ?= $(ROOT_DIR)/$(VENV_NAME)/bin/pip
PYTHON ?= $(ROOT_DIR)/$(VENV_NAME)/bin/python
VENV_PY_VERSION ?= python3
WWW_PKGS := www/base www/console_view www/grid_view www/waterfall_view www/wsgi_dashboards www/badges
WWW_EX_PKGS := www/nestedexample www/codeparameter
WWW_DEP_PKGS := www/guanlecoja-ui www/data_module
ALL_PKGS := master worker pkg $(WWW_PKGS)
WWW_PKGS_FOR_UNIT_TESTS := $(filter-out www/badges, $(WWW_DEP_PKGS) $(WWW_PKGS))
ALL_PKGS_TARGETS := $(addsuffix _pkg,$(ALL_PKGS))
.PHONY: $(ALL_PKGS_TARGETS)
# build rst documentation
docs:
$(MAKE) -C master/docs dev
@echo "You can now open master/docs/_build/html/index.html"
docs-towncrier:
if command -v towncrier >/dev/null 2>&1 ;\
then \
towncrier --draft | grep 'No significant changes.' || yes n | towncrier ;\
fi
docs-spelling:
$(MAKE) -C master/docs SPHINXOPTS=-W spelling
docs-linkcheck:
$(MAKE) -C master/docs SPHINXOPTS=-q linkcheck
docs-release: docs-towncrier
$(MAKE) -C master/docs
docs-release-spelling: docs-towncrier
$(MAKE) -C master/docs SPHINXOPTS=-W spelling
# pylint the whole sourcecode (validate.sh will do that as well, but only process the modified files)
pylint:
$(MAKE) -C master pylint; master_res=$$?; \
$(MAKE) -C worker pylint; worker_res=$$?; \
if [ $$master_res != 0 ] || [ $$worker_res != 0 ]; then exit 1; fi
# flake8 the whole sourcecode (validate.sh will do that as well, but only process the modified files)
flake8:
$(MAKE) -C master flake8
$(MAKE) -C worker flake8
flake8 --config=common/flake8rc www/*/buildbot_*/
flake8 --config=common/flake8rc www/*/setup.py
flake8 --config=common/flake8rc common/*.py
frontend_deps: $(VENV_NAME)
$(PIP) install -e pkg
$(PIP) install mock wheel buildbot
cd www/build_common; yarn install --pure-lockfile
for i in $(WWW_DEP_PKGS); \
do (cd $$i; yarn install --pure-lockfile; yarn run build); done
frontend_tests: frontend_deps
for i in $(WWW_PKGS); \
do (cd $$i; yarn install --pure-lockfile); done
for i in $(WWW_PKGS_FOR_UNIT_TESTS); \
do (cd $$i; yarn run build-dev || exit 1; yarn run test || exit 1) || exit 1; done
frontend_tests_headless: frontend_deps
for i in $(WWW_PKGS); \
do (cd $$i; yarn install --pure-lockfile); done
for i in $(WWW_PKGS_FOR_UNIT_TESTS); \
do (cd $$i; yarn run build-dev || exit 1; yarn run test --browsers BBChromeHeadless || exit 1) || exit 1; done
# rebuild front-end from source
frontend: frontend_deps
for i in pkg $(WWW_PKGS); do $(PIP) install -e $$i || exit 1; done
# build frontend wheels for installation elsewhere
frontend_wheels: frontend_deps
for i in pkg $(WWW_PKGS); \
do (cd $$i; $(PYTHON) setup.py bdist_wheel || exit 1) || exit 1; done
# do installation tests. Test front-end can build and install for all install methods
frontend_install_tests: frontend_deps
trial pkg/test_buildbot_pkg.py
# upgrade FE dependencies
frontend_yarn_upgrade:
for i in $(WWW_PKGS) $(WWW_EX_PKGS) $(WWW_DEP_PKGS); \
do (cd $$i; echo $$i; rm -rf yarn.lock; yarn install || echo $$i failed); done
# install git hooks for validating patches at commit time
hooks:
cp common/hooks/* `git rev-parse --git-dir`/hooks
rmpyc:
find master worker \( -name '*.pyc' -o -name '*.pyo' \) -exec rm -v {} \;
isort:
isort -rc worker master
git diff --name-only --stat "HEAD" | grep '.py$$' | xargs autopep8 -i
git add -u
docker: docker-buildbot-worker docker-buildbot-master
echo done
docker-buildbot-worker:
$(DOCKERBUILD) -t buildbot/buildbot-worker:master worker
docker-buildbot-master:
$(DOCKERBUILD) -t buildbot/buildbot-master:master master
$(VENV_NAME):
virtualenv -p $(VENV_PY_VERSION) $(VENV_NAME)
$(PIP) install -U pip setuptools
# helper for virtualenv creation
virtualenv: $(VENV_NAME) # usage: make virtualenv VENV_PY_VERSION=python3.4
$(PIP) install -r requirements-minimal.txt \
packaging towncrier
@echo now you can type following command to activate your virtualenv
@echo . $(VENV_NAME)/bin/activate
TRIALOPTS?=buildbot
.PHONY: trial
trial: virtualenv
. $(VENV_NAME)/bin/activate && trial $(TRIALOPTS)
release_notes: $(VENV_NAME)
test ! -z "$(VERSION)" # usage: make release_notes VERSION=0.9.2
yes | towncrier --version $(VERSION) --date `date -u +%F`
git commit -m "Release notes for $(VERSION)"
$(ALL_PKGS_TARGETS): cleanup_for_tarballs frontend_deps
. $(VENV_NAME)/bin/activate && ./common/maketarball.sh $(patsubst %_pkg,%,$@)
cleanup_for_tarballs:
find master pkg worker www -name VERSION -exec rm {} \;
rm -rf dist
mkdir dist
.PHONY: cleanup_for_tarballs
tarballs: $(ALL_PKGS_TARGETS)
.PHONY: tarballs
# helper for release creation
release: virtualenv
test ! -z "$(VERSION)" # usage: make release VERSION=0.9.2
test -d "../bbdocs/.git" # make release should be done with bbdocs populated at the same level as buildbot dir
GPG_TTY=`tty` git tag -a -sf v$(VERSION) -m "TAG $(VERSION)"
git push buildbot "v$(VERSION)" # tarballs are made by circleci.yml, and create a github release
export VERSION=$(VERSION) ; . .venv/bin/activate && make docs-release
rm -rf ../bbdocs/docs/$(VERSION) # in case of re-run
cp -r master/docs/_build/html ../bbdocs/docs/$(VERSION)
cd ../bbdocs && git pull
. .venv/bin/activate && cd ../bbdocs && make && git add docs && git commit -m $(VERSION) && git push
@echo When tarballs have been generated by circleci:
@echo make finishrelease
finishrelease:
rm -rf dist
python3 ./common/download_release.py
rm -rf ./dist/v*
twine upload --sign dist/*
pyinstaller: virtualenv
$(PIP) install pyinstaller
$(VENV_NAME)/bin/pyinstaller -F pyinstaller/buildbot-worker.spec