Unifier of Continuous Integration
Project description
Project 'Universum'
Universum integrates various CI systems and provides additional features, such as: customized downloading sources from VCS, running tests described in configuration file and reporting the results to code review systems.
Full documentation can be found here: https://universum.readthedocs.io/
Please check out our code of conduct and contribution policy
Project is executed with python3.7 -m universum
command.
Independent analyzers are executed with their module name, e.g. python3.7 -m universum.analyzers.pylint
.
Other Universum modes, such as poller or submitter, are called via command line, e.g.
python3.7 -m universum poll
Installation from GitHub
Latest release
Minimum prerequisites (see documentation for details):
- OS Linux
- Python 3.7
- Pip for python3.7
- Git client
sudo python3.7 -m pip install -U git+https://github.com/Samsung/Universum/@release
Latest development + tests
Additional prerequisites (see documentation for details):
- Perforce CLI, P4Python ('helix-cli' and 'perforce-p4python')
- Docker ('docker-ce', 'docker-ce-cli')
- Current user added to 'docker' group (use
sudo usermod -a -G docker $USER
and then relogin)
git clone https://github.com/Samsung/Universum.git universum-working-dir
cd universum-working-dir
git checkout master
pip install .[test] -U
make images
After this run make tests
and ensure all tests are passing.
Also note that running pip uninstall universum
will remove Universum itself,
but all the dependency modules will remain in the system.
Project contents
universum
is main project folder, that is being copied to Python libraries location
(e.g. dist-packages
or site-packages
) when installed.
It contains __main__.py
script, that is the main entry point to the whole project.
It also contains the following modules:
-
main
/poll
/submit
/api
/nonci
- managing modules for different Universum modes -
configuration_support
- special module for configuring the project -
analyzers
directory is not quite a part of Universum itself. It contains independent scripts compatible with Universum for implementing static (and other types of) analysis support. -
lib
- utility functions librariesci_exception
- internal exceptionsmodule_arguments
- handles command line and other parametersgravity
- inter-module communicationutils
- miscellaneous
-
modules
- independent packagesapi_support
- 'main' mode module to answer API requestsautomation_server
- drivers for CI systems (e.g. Jenkins)artifact_collector
- implements build artifactscode_report_collector
- support for external 'code report' moduleslauncher
- executes build scenario, described in project configuration fileoutput
- drivers for environment-based logsproject_directory
- interaction with host file systemreporter
- interaction with code review systemsstructure_handler
- execution 'blocks' isolation, order, reporting, etc.vcs
- CI target sources preparation
Also there are 'base' modules/classes for driver implementation standardization, and 'main' modules/classes for automated driver choosing based on environment and settings.
doc
directory contains sources for project documentation. It can be generated
locally with running make
from root directory using Sphinx.
tests
directory contains test system, based on PyTest. Full tests can be started
from root directory via make tests
command, otherwise use standard PyTest syntax.
Commits failing any of project tests should not be merged into 'master' branch!
examples
contains various examples of project configuration files. Usage of such files
is illustrated in run_basic_example.sh
script.
universum_log_collapser
contains Universum Jenkins plugin sources.
The plugin implements coloring of failed steps and provides collapsing/expansion of log sections.
setup.py
is 'setuptools' configuration file, and shouldn't be executed on its own.
Quick architecture overview
-
Project only entry point (except 'analyzers') is
universum.py
. Based on chosen execution mode (default, submitting, polling, etc.) it calls one of 'main' modules, passing them all parameters -
Universum is a set of separate modules, each implementing its own piece of functionality. They are connected using special
gravity
library -
All classes, inherited from
Module
(defined ingravity
), automatically can:- use
Dependency
mechanism to use other modules - describe any module parameters in
define_arguments()
and receive them parsed viaself.settings
- use
-
configuration_support
is, in fact, an 'external' module, used not only by Universum, but by user configuration file for generating project configuration -
'Base' classes are virtual, not implementing any actual functionality, but describing the structure of inherited classes and ensuring they have all required functions that will be called by modules using them
Contributing
Further versions of this README file should include:
- Notification on mandatory code review for all commits to master
- Notification on mandatory documenting of the newly added features
- Description of CI process, links to configurations/logs/build results/etc.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file Universum-0.18.7.tar.gz
.
File metadata
- Download URL: Universum-0.18.7.tar.gz
- Upload date:
- Size: 56.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.2.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ebc227e51abffe0693bb0921ea06c1d86349213fda74fc756437b65655d568ea |
|
MD5 | 04ca28742b21de28af7c98f60ea11843 |
|
BLAKE2b-256 | e3f3c8ef2606c9168211ae00138a22aca25330f58d7455c99664ccebec39f08b |
File details
Details for the file Universum-0.18.7-py3-none-any.whl
.
File metadata
- Download URL: Universum-0.18.7-py3-none-any.whl
- Upload date:
- Size: 79.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.2.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 29966e5fccd578a89220771461e1639ae16a4b91e877add6182e846f50e8f9be |
|
MD5 | ef8c3b3bd23cc107059811ae0c0124ce |
|
BLAKE2b-256 | 5e3bb9cf70c0ce704ee43f84635eb2feb0f5a42a98835ee711df8cd6c1b84d7b |