mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-01-21 07:55:00 +00:00
Tests: - Running 'make build install' remove the module loading include file for ttrss. - TT-RSS is no longer available in apps page. - Installing Tor works. Onion header is set correctly. Re-running app setup works. - RSS Bridge's description is updated as expected. Links work. Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org> Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
251 lines
7.2 KiB
Makefile
251 lines
7.2 KiB
Makefile
DJANGO_ADMIN := django-admin
|
|
INSTALL := install
|
|
PYTHON := python3
|
|
PYTEST_ARGS :=
|
|
CP_ARGS := --no-dereference --preserve=mode,timestamps --reflink=auto
|
|
|
|
ENABLED_APPS_PATH := $(DESTDIR)/usr/share/freedombox/modules-enabled
|
|
|
|
DISABLED_APPS_TO_REMOVE := \
|
|
apps \
|
|
coquelicot \
|
|
diaspora \
|
|
monkeysphere \
|
|
owncloud \
|
|
system \
|
|
xmpp \
|
|
disks \
|
|
udiskie \
|
|
restore \
|
|
repro \
|
|
tahoe \
|
|
mldonkey \
|
|
i2p \
|
|
ttrss
|
|
|
|
APP_FILES_TO_REMOVE := $(foreach app,$(DISABLED_APPS_TO_REMOVE),$(ENABLED_APPS_PATH)/$(app))
|
|
|
|
REMOVED_FILES := \
|
|
$(DESTDIR)/etc/apt/preferences.d/50freedombox3.pref \
|
|
$(DESTDIR)/etc/apache2/sites-available/plinth.conf \
|
|
$(DESTDIR)/etc/apache2/sites-available/plinth-ssl.conf \
|
|
$(DESTDIR)/etc/security/access.d/10freedombox-performance.conf \
|
|
$(DESTDIR)/etc/security/access.d/10freedombox-security.conf
|
|
|
|
DIRECTORIES_TO_CREATE := \
|
|
$(DESTDIR)/var/lib/plinth \
|
|
$(DESTDIR)/var/lib/plinth/sessions
|
|
|
|
STATIC_FILES_DIRECTORY := $(DESTDIR)/usr/share/plinth/static
|
|
BIN_DIR := $(DESTDIR)/usr/bin
|
|
LIB_DIR := $(DESTDIR)/usr/lib
|
|
|
|
FIND_ARGS := \
|
|
-not -iname "*.log" \
|
|
-not -iname "*.pid" \
|
|
-not -iname "*.py.bak" \
|
|
-not -iname "*.pyc" \
|
|
-not -iname "*.pytest_cache" \
|
|
-not -iname "*.sqlite3" \
|
|
-not -iname "*.swp" \
|
|
-not -iname "\#*" \
|
|
-not -iname ".*" \
|
|
-not -iname "sessionid*" \
|
|
-not -iname "~*" \
|
|
-not -iname "django-secret.key" \
|
|
-not -iwholename "*/.mypy_cache/*"
|
|
|
|
|
|
ROOT_DATA_FILES := $(shell find data -type f $(FIND_ARGS))
|
|
MODULE_DATA_FILES := $(shell find $(wildcard plinth/modules/*/data) -type f $(FIND_ARGS))
|
|
|
|
update-translations:
|
|
$(DJANGO_ADMIN) makemessages --all --domain django --keep-pot \
|
|
--verbosity=1 --ignore conftest.py --ignore doc --ignore build \
|
|
--ignore htmlcov --ignore screenshots --ignore debian --ignore \
|
|
actions --ignore preseed --ignore static --ignore data \
|
|
--settings plinth.settings --pythonpath .
|
|
|
|
configure:
|
|
# Nothing to do
|
|
|
|
build:
|
|
# Compile translations
|
|
$(DJANGO_ADMIN) compilemessages --verbosity=1
|
|
|
|
# Build documentation
|
|
$(MAKE) -C doc -j 8
|
|
|
|
# Build .whl package
|
|
rm -f dist/plinth-*.whl
|
|
$(PYTHON) -m build --no-isolation --skip-dependency-check --wheel
|
|
|
|
install:
|
|
# Drop removed apps
|
|
rm -f $(APP_FILES_TO_REMOVE)
|
|
|
|
# Drop removed configuration files
|
|
rm -f $(REMOVED_FILES)
|
|
|
|
# Create data directories
|
|
for directory in $(DIRECTORIES_TO_CREATE) ; do \
|
|
$(INSTALL) -d $$directory ; \
|
|
done
|
|
|
|
# Python package
|
|
temp=$$(mktemp -d) && \
|
|
lib_dir=$$($(PYTHON) -c 'import sysconfig; print(sysconfig.get_paths(scheme="deb_system")["purelib"])') && \
|
|
$(PYTHON) -m pip install dist/plinth-*.whl --break-system-packages \
|
|
--no-deps --no-compile --no-warn-script-location \
|
|
--ignore-installed --target=$${temp} && \
|
|
$(INSTALL) -d $(DESTDIR)$${lib_dir} && \
|
|
rm -rf $(DESTDIR)$${lib_dir}/plinth $(DESTDIR)$${lib_dir}/plinth*.dist-info && \
|
|
mv $${temp}/plinth $${temp}/plinth*.dist-info $(DESTDIR)$${lib_dir} && \
|
|
rm -f $(DESTDIR)$${lib_dir}/plinth*.dist-info/COPYING.md && \
|
|
rm -f $(DESTDIR)$${lib_dir}/plinth*.dist-info/direct_url.json && \
|
|
$(INSTALL) -D -t $(BIN_DIR) bin/plinth
|
|
$(INSTALL) -D -t $(LIB_DIR)/freedombox bin/freedombox-privileged
|
|
$(INSTALL) -D -t $(BIN_DIR) bin/freedombox-cmd
|
|
|
|
# Static web server files
|
|
rm -rf $(STATIC_FILES_DIRECTORY)
|
|
$(INSTALL) -d $(STATIC_FILES_DIRECTORY)
|
|
cp $(CP_ARGS) --recursive static/* $(STATIC_FILES_DIRECTORY)
|
|
|
|
# System data files
|
|
for file in $(ROOT_DATA_FILES) ; do \
|
|
target=$$(dirname $(DESTDIR)$$(echo $${file} | sed -e 's|^data||')) ; \
|
|
$(INSTALL) --directory --mode=755 $${target} ; \
|
|
cp $(CP_ARGS) $${file} $${target} ; \
|
|
done
|
|
for file in $(MODULE_DATA_FILES) ; do \
|
|
target=$$(dirname $(DESTDIR)$$(echo $${file} | sed -e 's|^plinth/modules/[^/]*/data||')) ; \
|
|
$(INSTALL) --directory --mode=755 $${target} ; \
|
|
cp $(CP_ARGS) $${file} $${target} ; \
|
|
done
|
|
|
|
# Documentation
|
|
$(MAKE) -C doc install
|
|
|
|
check: check-type check-code check-doc check-tests
|
|
|
|
# Run the main test suite
|
|
check-tests:
|
|
$(PYTHON) -m pytest $(PYTEST_ARGS)
|
|
|
|
# Tests with coverage report
|
|
check-tests-cov:
|
|
$(PYTHON) -m pytest $(PYTEST_ARGS) --cov=plinth \
|
|
--cov-report=html:./htmlcov --cov-report=term
|
|
|
|
# Code quality checking using flake8
|
|
check-code:
|
|
$(PYTHON) -m flake8 plinth container
|
|
|
|
# Static type checking using mypy
|
|
check-type:
|
|
$(PYTHON) -m mypy .
|
|
|
|
# Use doctest for check the wikiparser in doc directory
|
|
check-doc:
|
|
$(PYTHON) -m doctest doc/scripts/wikiparser.py
|
|
|
|
clean:
|
|
make -C doc clean
|
|
rm -rf Plinth.egg-info
|
|
find plinth/locale -name *.mo -delete
|
|
|
|
define DEVELOP_SERVICE_CONF
|
|
[Service]
|
|
Environment=FREEDOMBOX_DEVELOP=1
|
|
Environment=PYTHONPATH=/freedombox/
|
|
endef
|
|
export DEVELOP_SERVICE_CONF
|
|
|
|
define DEVELOP_LOGS_SCRIPT
|
|
#!/usr/bin/bash
|
|
|
|
set -e
|
|
set -x
|
|
|
|
journalctl --follow --unit=plinth.service --unit=freedombox-privileged.service
|
|
endef
|
|
export DEVELOP_LOGS_SCRIPT
|
|
|
|
# Run basic setup for a developer environment (VM or container)
|
|
provision-dev:
|
|
# Install newer build dependencies if any
|
|
apt-get update
|
|
DEBIAN_FRONTEND=noninteractive apt-get build-dep --yes .
|
|
|
|
# Install latest code over .deb
|
|
$(MAKE) build install
|
|
|
|
# Configure privileged and web daemon for development setup
|
|
mkdir -p /etc/systemd/system/freedombox-privileged.service.d/
|
|
echo "$$DEVELOP_SERVICE_CONF" > /etc/systemd/system/freedombox-privileged.service.d/develop.conf
|
|
mkdir -p /etc/systemd/system/plinth.service.d/
|
|
echo "$$DEVELOP_SERVICE_CONF" > /etc/systemd/system/plinth.service.d/develop.conf
|
|
|
|
# Create a command to easily watch service logs
|
|
echo "$$DEVELOP_LOGS_SCRIPT" > /usr/bin/freedombox-logs
|
|
chmod 755 /usr/bin/freedombox-logs
|
|
|
|
# Reload newer systemd units, ignore failure
|
|
-systemctl daemon-reload
|
|
|
|
# Enable privileged daemon
|
|
-systemctl stop freedombox-privileged.service
|
|
|
|
-test -d /run/systemd/system && \
|
|
systemctl enable --now freedombox-privileged.socket
|
|
|
|
# Enable and restart plinth service if it is running
|
|
-systemctl enable plinth.service
|
|
-systemctl restart plinth.service
|
|
|
|
# Stop any ongoing upgrade, ignore failure
|
|
-killall -9 unattended-upgr
|
|
|
|
# Fix any broken packages
|
|
dpkg --configure -a
|
|
apt-get -f install
|
|
apt-get update
|
|
|
|
# Install new packages needed by essential apps. Don't uninstall
|
|
# freedombox in case new dependencies conflict with old dependencies
|
|
apt-mark hold freedombox
|
|
DEBIAN_FRONTEND=noninteractive apt-get install --no-upgrade --yes \
|
|
$$(sudo -u plinth ./run --develop --list-dependencies)
|
|
apt-mark unhold freedombox
|
|
|
|
# DNS resolution may be broken by upgrade to systemd-resolved. See
|
|
# #1079819 and ##1032937.
|
|
-systemctl restart systemd-resolved
|
|
-nmcli general reload dns-rc
|
|
|
|
# Install additional packages
|
|
DEBIAN_FRONTEND=noninteractive apt-get install --yes ncurses-term \
|
|
sshpass bash-completion
|
|
|
|
wait-while-first-setup:
|
|
while [ x$$(curl -k https://localhost/plinth/status/ 2> /dev/null | \
|
|
json_pp 2> /dev/null | grep 'is_first_setup_running' | \
|
|
tr -d '[:space:]' | cut -d':' -f2 ) != 'xfalse' ] ; do \
|
|
sleep 1; echo -n .; done
|
|
|
|
.PHONY: \
|
|
build \
|
|
check \
|
|
check-code \
|
|
check-doc \
|
|
check-type \
|
|
check-tests \
|
|
check-tests-cov \
|
|
clean \
|
|
configure \
|
|
install \
|
|
provision \
|
|
update-translations \
|
|
wait-while-first-setup
|