Commit Graph

1267 Commits

Author SHA1 Message Date
Jan Kaluza
00ad20dfcd Reuse the latest module build found.
Before this commit, the base modules used in the `get_reusable_module` have
not been sorted and therefore when `get_reusable_module` tried to find out
the reusable module built against some base module, it could find a module
built against some old version of base module.

This could lead to situation when MBS tried to reuse components from quite
old module despite the fact that newer module build existed.

This commit fixes this by sorting the base modules by stream_version,
so MBS always tries to get the reusable module built against the latest
base module.
2019-08-29 15:35:21 +02:00
Jan Kaluža
9d40a9b9cb Merge #1390 Fix --add-local-build with MBS Resolver. 2019-08-26 05:33:40 +00:00
Jan Kaluza
cc5aaf90c1 Fix --add-local-build with MBS Resolver.
The `MBSResolver.get_buildrequired_modulemds` did not try to load
local module builds and always just queried the remote MBS instance.

This commit fixes it by using local module if available.
2019-08-23 14:58:15 +02:00
mprahl
f3db9a0ac2 Fix a typo in an error message 2019-08-22 17:15:55 -04:00
Valerij Maljulin
4b4428a9e3 Fix locale issues with date representations
This fixes #1214
Also fixes tests running on different locales

Signed-off-by: Valerij Maljulin <vmaljuli@redhat.com>
2019-08-22 17:06:26 +02:00
mprahl
a7099d8431 Make the timestamps consistent in import_mmd
This will keep tests from failing occasionally.
2019-08-21 16:21:05 -04:00
Jan Kaluža
13a18d1d5a Merge #1384 Add "scratch_build_only_branches" configuration options. 2019-08-21 11:18:34 +00:00
Jan Kaluza
80fca557af Do not check Greenwave gating status for scratch builds.
Scratch builds cannot be gated. They stay in the `done` state forever.
Therefore it is useless to query Greenwave for its status in the Poller.
2019-08-21 13:17:04 +02:00
Chenxiong Qi
e1342d8ffc Use dict literal to create dict
Some code create a dict in this way:

some_var = {}
some_var["a"] = 100
some_var["b"] = 200

Using dict literal could make these lines a little bit simpler.

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-08-15 21:28:27 +08:00
Chenxiong Qi
e6aa47e02a Use set literal to create a set
Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-08-15 21:14:02 +08:00
Chenxiong Qi
dbced8668b Do not compare with a empty list
An empty list [] is evaluated as a false value. So, it is not necessary
to compare like "if some_var == []:".

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-08-15 17:48:33 +08:00
Jan Kaluza
796a367457 Add "scratch_build_only_branches" configuration options.
The goal here is to define certain branches from which only scratch
module builds can be submitted. The main use case is for "private-*"
branches which can be created and maintained by anyone, but there
must not be production-ready module build created from them.

This commit adds new `scratch_build_only_branches` config option
to define the list of regexes to match such branches.
2019-08-15 10:49:03 +02:00
Chenxiong Qi
6f1d0b3ad9 Return empty result if short=true is specified on empty list of builds
Fixes #1376

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-08-11 22:18:38 +08:00
Chenxiong Qi
0917d6aa4d Start build logs from init event handler
Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-08-09 16:47:46 +08:00
Valerij Maljulin
e5735efc76 Skip prefix validation for modules in allowed_privileged_module_names and base_module_names
Signed-off-by: Valerij Maljulin <vmaljuli@redhat.com>
2019-08-07 14:17:39 +02:00
Jan Kaluža
f759a4ec1c Merge #1374 Remove the “All” MMDResolver policy 2019-08-07 06:29:38 +00:00
Jan Kaluža
758cf9c112 Merge #1365 Allow components to be reused from module builds even if the buildrequires commit hashes changed for the changed-and-after rebuild strategy 2019-08-06 11:08:46 +00:00
Chenxiong Qi
30b03c2ca6 Remove the “All” MMDResolver policy
Fixes #1339

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-08-06 10:52:55 +08:00
Chenxiong Qi
b185b51721 Merge #1375 Fix name s2nsvc in MMDResolver.solve 2019-08-06 01:50:17 +00:00
Chenxiong Qi
b5df1457c4 Merge #1363 Rewrite import_mmd 2019-08-06 01:48:42 +00:00
mprahl
a6bf9f88dd Allow components to be reused from module builds even if the buildrequires commit hashes changed for the changed-and-after rebuild strategy
This behavior was not documented, and it was confusing to users since module builds
in a stream should always have a compatible API.
2019-08-05 09:23:44 -04:00
Chenxiong Qi
9c6c4da80f Rewrite import_mmd
* xmd/mbs is always set if it is not present in xmd, so move the code on
  the top of function. This change is also helpful for accessing keys
  under xmd/mbs.
* By setting xmd/mbs in the beginning, code is simplified to get
  disttag_marking and virtual_streams. The result is much straightforwar
  for getting a default value for them.
* Move disttag_marking validation code next to the line getting
  disttag_marking from xmd/mbs. As a result, the code structure is
  easier to read as getting disttag_marking and validate it, getting
  virtual_streams and validate.
* Rewrite the part of code for check_buildrequires. Always set
  xmd/mbs/buildrequires if it is not present and check_buildrequires is
  set to True, as it is required by
  ModuleBuild.get_buildrequired_base_modules.
* Using in operator instead of dict.get to check if key koji_tag exists.
  Using dict.get would be ambiguous because even if koji_tag exists
  under xmd/mbs, but due to its value is set to None occasionally, there
  is still a message logged to tell koji_tag is not set.
* Rwrite all lines of code for updating virtual streams. A new method
  update_virtual_streams is added to ModuleBuild. This also fixes
  FACTORY-4561.
* Tests are added for the rewrite of virtual streams update.

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-08-05 16:10:57 +08:00
Chenxiong Qi
3b95b09408 Fix name s2nsvc in MMDResolver.solve
The original name s2nsvc does not contain the name of arch.

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-08-05 16:09:29 +08:00
mprahl
84e3f6f437 Add a missing foreign key constraint that was missed in 40b2c7d988d7_add_reused_module_id_column.py 2019-08-02 09:33:16 -04:00
mprahl
971aade159 Add SQLite support for the downgrade function in 40b2c7d988d7_add_reused_module_id_column.py 2019-08-02 09:32:41 -04:00
mprahl
f13b7308e1 Add a missing column in 0b00036c540f_add_log_messages_table.py 2019-08-02 09:32:41 -04:00
mprahl
4f3692c711 Fix a flake8 error in 0b00036c540f_add_log_messages_table.py 2019-08-02 09:04:45 -04:00
Jan Kaluža
8dd65a79fa Merge #1340 Added an REST endpoint to display log messages 2019-07-31 12:49:03 +00:00
Martin Curlej
c5d484fb81 Added an REST endpoint to display log messages
The issue is that users don't get feedback from MBS about why a
component was not reused. There was added logic which enables to
store log messages in the database and can be viewed through the
REST api of MBS.

Ticket-ID: #1284

Signed-off-by: Martin Curlej <mcurlej@redhat.com>
2019-07-31 13:32:33 +02:00
Valerij Maljulin
5fb6a2f28a Check dependencies in reuse
Signed-off-by: Valerij Maljulin <vmaljuli@redhat.com>
2019-07-31 11:23:52 +02:00
Chenxiong Qi
308f5bc7cf Serialize component build state trace correctly if state is None
Fixes #1179

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-07-29 15:56:30 +08:00
Jan Kaluža
24e3d0a31c Merge #1358 Reduce duplicate libsolv API calls 2019-07-25 04:55:30 +00:00
Qixiang Wan
ab8abef058 Fix recover_orphaned_artifact for module-build-macros
When recover_orphaned_artifact is called for module-build-macros
and the module-build-macros is not tagged in the -build Koji tag,
then the tag_artifacts() is called to tag it there.

This is correct, but the issue is that module-build-macros need
to be added to "build" and "srpm-build" Koji tag groups, otherwise
it is not installed in the buildroot by default.
2019-07-23 16:11:27 +08:00
Chenxiong Qi
965d2ab2d4 Reduce duplicate libsolv API calls
Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-07-22 23:32:05 +08:00
Matt Prahl
efb0ab307e Merge #1354 Make fetch_mmd public 2019-07-22 13:59:21 +00:00
Chenxiong Qi
b242b12136 Remove handling of negative deps in _deps2reqs
Fixes #1338

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-07-22 15:24:07 +08:00
Chenxiong Qi
0d6a26b71e Make fetch_mmd public
fetch_mmd was imported at other places like in views.py for
ImportModuleAPI. So, make it public.

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-07-19 09:29:05 +08:00
Chenxiong Qi
7a38c730e4 Merge #1353 Adjust logs for reading logs easily 2019-07-18 22:33:16 +00:00
Chenxiong Qi
4b1ab34c84 Log full modulemd in debug level in modules.wait handler
A full modulemd is usually a loooon text. This change would be much
easier for reading logs at INFO level only.

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-07-18 22:57:42 +08:00
Chenxiong Qi
9d6a34a8e4 Show state name in state transition log
This will show log like "State transition: init -> wait, ...", which is
much straightforward than showing state number "state 1->2".

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-07-18 22:57:42 +08:00
Chenxiong Qi
3b938dba26 No need of argument component_id for ComponentBuild.state_trace
Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-07-18 22:27:59 +08:00
Chenxiong Qi
f5717e3469 Fix incorrect error message and method call on ComponentRpm
When resubmitting a module build, if some component is found out that
its attributes have changed, MBS will raise an error to stop the work to
recording components. The problem is original code tells a module build
exists in database already rather than a component build, meanwhile
get_module_name() call on an ComponentRpm object is also incorrect.

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-07-18 22:09:45 +08:00
Chenxiong Qi
5028746a2f Fix arguments passed to log.debug
Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-07-18 22:08:42 +08:00
Chenxiong Qi
3878affa41 Separate use of database sessions
This patch separates the use of database session in different MBS components
and do not mix them together.

In general, MBS components could be separated as the REST API (implemented
based on Flask) and non-REST API including the backend build workflow
(implemented as a fedmsg consumer on top of fedmsg-hub and running
independently) and library shared by them. As a result, there are two kind of
database session used in MBS, one is created and managed by Flask-SQLAlchemy,
and another one is created from SQLAclhemy Session API directly. The goal of
this patch is to make ensure session object is used properly in the right
place.

All the changes follow these rules:

* REST API related code uses the session object db.session created and
  managed by Flask-SQLAlchemy.
* Non-REST API related code uses the session object created with SQLAlchemy
  Session API. Function make_db_session does that.
* Shared code does not created a new session object as much as possible.
  Instead, it accepts an argument db_session.

The first two rules are applicable to tests as well.

Major changes:

* Switch tests back to run with a file-based SQLite database.
* make_session is renamed to make_db_session and SQLAlchemy connection pool
  options are applied for PostgreSQL backend.
* Frontend Flask related code uses db.session
* Shared code by REST API and backend build workflow accepts SQLAlchemy session
  object as an argument. For example, resolver class is constructed with a
  database session, and some functions accepts an argument for database session.
* Build workflow related code use session object returned from make_db_session
  and ensure db.session is not used.
* Only tests for views use db.session, and other tests use db_session fixture
  to access database.
* All argument name session, that is for database access, are renamed to
  db_session.
* Functions model_tests_init_data, reuse_component_init_data and
  reuse_shared_userspace_init_data, which creates fixture data for
  tests, are converted into pytest fixtures from original function
  called inside setup_method or a test method. The reason of this
  conversion is to use fixture ``db_session`` rather than create a
  new one. That would also benefit the whole test suite to reduce the
  number of SQLAlchemy session objects.

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-07-18 21:26:50 +08:00
Jan Kaluža
1c76f1223e Merge #1335 Call _get_base_module_stream_overrides when the module is not the input module 2019-07-18 10:38:27 +00:00
mprahl
f2f033e66f Use mmd_to_str in _createrepo to reduce code duplication 2019-07-17 07:11:34 -05:00
Owen W. Taylor
886bd34c55 MockModuleBuilder.py: Fix for libmodulemd v2
With v2 of the libmodulemd API, writing a module to a string requires
creating a Modulemd.ModuleIndex object.
2019-07-17 07:11:34 -05:00
mprahl
280a25b939 Support base modules with virtual streams and no stream version 2019-07-16 14:21:49 +00:00
mprahl
1bcb40d4d0 Allow specifying a specific module build to reuse components from
This resolves #1296.
2019-07-16 11:40:59 +00:00
mprahl
0466ac394b Call _get_base_module_stream_overrides when the module is not the input module
This just simplifies the code. It doesn't change the functionality
at all. The tests had to be changed because it assumed that the
xmd.mbs.buildrequires section would be filled out for the input
module which isn't true.
2019-07-15 13:17:36 -04:00