diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e3385bbc5cb858f46142c1640f89c353e498ed47..0f7b41908ac7506217f4948c14694afe53c66a3f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -11,6 +11,31 @@ before_script: - uname -a - python3 -m pylint --version - python3 -m coverage --version + - echo "${CI_COMMIT_TAG}" | grep -qE "v[0-9]+[.][0-9]+[.][0-9]+.*" && export UFFD_PACKAGE_VERSION="${CI_COMMIT_TAG#v}" || export UFFD_PACKAGE_VERSION="${CI_COMMIT_SHA}" + +build:pip: + stage: build + script: + - pip3 install build + - PACKAGE_VERSION="${UFFD_PACKAGE_VERSION}" python3 -m build + artifacts: + paths: + - dist/* + +build:apt: + stage: build + script: + - apt update + - apt-get install -y python3-all debhelper python3-pip git-buildpackage + - export PYBUILD_INSTALL_ARGS="--install-lib=/usr/share/uffd/ --install-scripts=/usr/share/uffd/" + - gbp dch --ignore-branch --debian-tag=v%\(version\)s + - dpkg-buildpackage -us -uc + - mkdir build + - mv ../*.deb build/ + artifacts: + paths: + - build/*.deb + - debian/changelog db_migrations_updated: stage: test @@ -72,12 +97,22 @@ trans_de: - ./update_translations.sh de coverage: '/^TOTAL.*\s+(\d+\%)$/' -publish-pip: +publish:pip: stage: deploy script: - - pip3 install build twine - - PACKAGE_VERSION="${CI_COMMIT_TAG#v}" python3 -m build + - pip3 install twine - TWINE_USERNAME="${GITLABPKGS_USERNAME}" TWINE_PASSWORD="${GITLABPKGS_PASSWORD}" python3 -m twine upload --repository-url ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi dist/* - TWINE_USERNAME="${PYPI_USERNAME}" TWINE_PASSWORD="${PYPI_PASSWORD}" python3 -m twine upload dist/* + dependencies: + - build:pip + rules: + - if: '$CI_COMMIT_TAG =~ /v[0-9]+[.][0-9]+[.][0-9]+.*/' + +publish:apt: + stage: deploy + script: + - exit 0 + dependencies: + - build:apt rules: - if: '$CI_COMMIT_TAG =~ /v[0-9]+[.][0-9]+[.][0-9]+.*/' diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000000000000000000000000000000000000..d5e3a5620cdb7519a75ec4684c8ce53e8751f3ce --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,6 @@ +include setup.py +graft migrations/* +graft uffd/templates +graft uffd/*/templates +graft uffd/static/ +graft uffd/translations/ diff --git a/README.md b/README.md index a4ded7a174b281ddf4c57da2fcb8c8262458e80f..9d28e898abf0ea8867e25f2b24fa4544ed53aa81 100644 --- a/README.md +++ b/README.md @@ -41,27 +41,7 @@ Please note that the mocked LDAP functionality is very limited and many uffd fea ## deployment Use uwsgi. Make sure to run `flask db upgrade` after every update! - -### example uwsgi config - -``` -[uwsgi] -plugin = python3 -env = PYTHONIOENCODING=UTF-8 -env = LANG=en_GB.utf8 -env = TZ=Europe/Berlin -manage-script-name = true -chdir = /var/www/uffd -module = uffd:create_app() - -uid = uffd -gid = uffd - -vacuum = true -die-on-term = true - -hook-pre-app = exec:FLASK_APP=uffd flask db upgrade -``` +For an example uwsgi config, see our [uswgi.ini](uwsgi.ini). You might find our [nginx include file](nginx.include.conf) helpfull to setup a web server infront of uwsgi. ## python style conventions @@ -114,7 +94,7 @@ The userinfo endpoint returns json data with the following structure: ## Translation -The web frontend is translated in the following Languages: +The web frontend is initially written in English and translated in the following Languages:  diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000000000000000000000000000000000000..8ec8f739601766e7ae19ea48b4213e6f0dcbdf49 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,5 @@ +uffd (0.1.2) unstable; urgency=medium + + * Initial release. + + -- Andreas Valder <nd@cccv.de> Fri, 31 Jul 2021 23:02:31 +0200 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000000000000000000000000000000000000..5d85a101a4013f352c8c8cbc2072b0cd4cb703a4 --- /dev/null +++ b/debian/control @@ -0,0 +1,30 @@ +Source: uffd +Section: python +Priority: optional +Maintainer: CCCV <it@cccv.de> +Build-Depends: + debhelper-compat (= 12), + dh-python, + python3-all, + python3-setuptools, +Standards-Version: 4.5.0 +Homepage: https://git.cccv.de/uffd/uffd +Vcs-Git: https://git.cccv.de/uffd/uffd.git + +Package: uffd +Architecture: any +Depends: + ${misc:Depends}, + ${python3:Depends}, + python3-ldap3, + python3-flask, + python3-flask-sqlalchemy, + python3-flask-migrate, + python3-qrcode, + python3-fido2, + python3-flask-oauthlib, + python3-flask-babel, + nginx, + uwsgi, + uwsgi-plugin-python3, +Description: UserFerwaltungsFrontend: Ldap based single sign on and user management web software diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000000000000000000000000000000000000..51a9034e3c8913ad57ee436eff66e6672db65310 --- /dev/null +++ b/debian/rules @@ -0,0 +1,7 @@ +#!/usr/bin/make -f +export DH_VERBOSE = 1 + +export PYBUILD_NAME=uffd + +%: + dh $@ --with python3 --buildsystem pybuild diff --git a/debian/uffd.dirs b/debian/uffd.dirs new file mode 100644 index 0000000000000000000000000000000000000000..fe0717b32952f5901bbf6a2eedf34b63f4e32fb3 --- /dev/null +++ b/debian/uffd.dirs @@ -0,0 +1,3 @@ +/etc/uffd +/var/lib/uffd +/usr/share/uffd/uffd/instance diff --git a/debian/uffd.install b/debian/uffd.install new file mode 100644 index 0000000000000000000000000000000000000000..f58a61a6f2db82fd56f8b66fbbb4a660e0709835 --- /dev/null +++ b/debian/uffd.install @@ -0,0 +1,2 @@ +uwsgi.ini /etc/uwsgi/apps-available/uffd.ini +nginx.include.conf /etc/nginx/snippets/uffd-locations.conf diff --git a/debian/uffd.links b/debian/uffd.links new file mode 100644 index 0000000000000000000000000000000000000000..d9fac40f8366c725a68a6d9a734298014bdf50f1 --- /dev/null +++ b/debian/uffd.links @@ -0,0 +1 @@ +/usr/share/uffd/uffd/instance/config.py /etc/uffd/config.py diff --git a/nginx.include.conf b/nginx.include.conf new file mode 100644 index 0000000000000000000000000000000000000000..f2896894d88d15054c4c93f90670b7aa9c70e6fa --- /dev/null +++ b/nginx.include.conf @@ -0,0 +1,7 @@ +location / { + uwsgi_pass unix:///run/uwsgi/app/uffd/socket; + include uwsgi_params; +} +location /static { + alias /usr/share/uffd/uffd/static; +} diff --git a/setup.py b/setup.py index ead7fb04ff725f357d14ebfa1ee564458f91187f..12287a2f31eb52ca6c333e7072b4145ac4d4d13d 100644 --- a/setup.py +++ b/setup.py @@ -25,6 +25,7 @@ setup( author_email='it@cccv.de', license='AGPL3', packages=find_packages(), + include_package_data=True, zip_safe=False, python_requires='>=3.7', ) diff --git a/uwsgi.ini b/uwsgi.ini new file mode 100644 index 0000000000000000000000000000000000000000..1ccf819f936aecbd36dc5f21612b761d68967f76 --- /dev/null +++ b/uwsgi.ini @@ -0,0 +1,15 @@ +[uwsgi] +plugin = python3 +env = PYTHONIOENCODING=UTF-8 +env = LANG=en_GB.utf8 +env = TZ=Europe/Berlin +manage-script-name = true +chdir = /usr/share/uffd +module = uffd:create_app() + +uid = uffd +gid = uffd + +vacuum = true + +hook-pre-app = exec:FLASK_APP=uffd flask db upgrade