Commit graph

4120 commits

Author SHA1 Message Date
Sanne Raymaekers
8bfc6c9961 dbjobqueue: Filter maintenance queries based on results
Jobs that already had their results nulled, shouldn't be included in the
maintenance job.
2022-06-08 21:12:46 +02:00
Juan Abia
4827f0e83e add cloud-image-val to aws test
cloud-image-val is a tool that performs basic validation tests on cloud
images. Incorporate this tool in aws.sh test
2022-06-08 16:14:35 +02:00
Juan Abia
c255267d96 save report.html from cloud-image-val as an artifact 2022-06-08 16:14:35 +02:00
Tomas Hozza
8635b7d2bb dbjobqueue-tests: fix issue introduced by PR #2618 2022-06-08 14:28:03 +02:00
Chloe Kaubisch
873798514b prometheus: add tenant label
Include a tenant label for all prometheus metrics. Modify
jobstatus function in the worker accordingly to return channel
so it can be passed to prometheus.
2022-06-07 16:35:03 +02:00
Ondřej Budai
5315264f2e packer: pin the vector version
See the comment inline.

Signed-off-by: Ondřej Budai <ondrej@budai.cz>
2022-06-07 09:08:22 +02:00
Sanne Raymaekers
92ae2f7c83 osbuild-service-maintenance: Delete/update results in chunks
The results of the manifest jobs can be very big, and operating on
30-40k rows at once can starve or crash a smaller rds instance.
2022-06-06 17:49:46 +02:00
Alexander Todorov
daaab1742e Update dependency of osbuild to v57 2022-06-06 12:53:43 +02:00
Alexander Todorov
8e372a257e ci: Remove 8.6 & 9.0 nightly repos in Schutzfile 2022-06-06 12:53:43 +02:00
Alexander Todorov
857d352325 ci: Comment out job which doesn't have any runners 2022-06-06 12:53:43 +02:00
Alexander Todorov
84d5bc7a22 ci: Disable 8.6-nightly and 9.0-nightly test jobs
to avoid interference with 8.6 and 9.0 GA builds/repos
2022-06-06 12:53:43 +02:00
Alexander Todorov
ee044a50bb COMPOSER-1576: Start building RPMs on 8.6 and 9.0 GA before we can test 2022-06-06 12:53:43 +02:00
Alexander Todorov
807804ba54 COMPOSER-1593: Retire the use of Fedora 34 in CI
we already use Fedora 35 anyway
2022-06-06 12:53:43 +02:00
Christian Kellner
a1306a122a distro/rhel90: remove skx_edac, intel_cstate from denylist again
In commit 5c1530e we disabled `skx_edac` and `intel_cstate` but 
after further consultation with Prarit Bhargava it was agreed that 
for RHEL 9 we should indeed allow them.
2022-06-06 08:07:26 +01:00
Sanne Raymaekers
968023f950 templates/composer: Map db secrets to maintenance container 2022-06-04 12:48:17 +02:00
Sanne Raymaekers
9b119fa4cf osbuild-service-maintenance: Delete results from select jobs
Instead of deleting records, delete the results from the manifest and
depsolve jobs. This redacts sensitive data which the manifest can
contain, and this conserves space.
2022-06-03 14:38:53 +02:00
Sanne Raymaekers
eeb2238b12 osbuild-service-maintenance: Split out db cleanup 2022-06-03 14:38:53 +02:00
Sanne Raymaekers
9bff4a4f0f dbjobqueue: Alter foreign key constraints
When deleting rows from the job table, make sure the delete is cascaded
to the dependencies and heartbeat tables.
2022-06-02 18:45:24 +02:00
Ygal Blum
feb357e538 Support Generic S3 upload in Composer API
Use case
--------
If Endpoint is not set and Region is - upload to AWS S3
If both the Endpoint and Region are set - upload the Generic S3 via Weldr API
If neither the Endpoint and Region are set - upload the Generic S3 via Composer API (use configuration)

jobimpl-osbuild
---------------
Add configuration fields for Generic S3 upload
Support S3 upload requests coming from Weldr or Composer API to either AWS or Generic S3
Weldr API for Generic S3 requires that all connection parameters but the credentials be passed in the API call
Composer API for Generic S3 requires that all conneciton parameters are taken from the configuration
Adjust to the consolidation in Target and UploadOptions

Target and UploadOptions
------------------------
Add the fields that were specific to the Generic S3 structures to the AWS S3 one
Remove the structures for Generic S3 and always use the AWS S3 ones

Worker Main
-----------
Add Endpoint, Region, Bucket, CABundle and SkipSSLVerification to the configuration structure
Pass the values to the Server

Weldr API
---------
Keep the generic.s3 provider name to maintain the API, but unmarshel into awsS3UploadSettings

tests - api.sh
--------------
Allow the caller to specifiy either AWS or Generic S3 upload targets for specific image types
Implement the pieces required for testing upload to a Generic S3 service
In some cases generalize the AWS S3 functions for reuse

GitLab CI
---------
Add test case for api.sh tests with edge-commit and generic S3
2022-06-02 16:12:53 +03:00
schutzbot
335c597452 Post release version bump
[skip ci]
2022-06-01 13:41:41 +00:00
Achilleas Koutsou
9fda1ff55f dnfjson: cache cleanup
Added CleanCache() method to the solver that deletes all the caches if
the total size grows above a certain (configurable) limit
(default: 500 MiB).

The function is called externally to handle errors (usually log or
ignore completely) and to avoid calling multiple times for multiple
depsolves of a single request.

The cleanup is extremely simple and is meant as a placeholder for more
sophisticated cache management.  The goal is to simply avoid ballooning
cache sizes that might cause issues for users or our own services.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
8b4607c94f gen-manifests: do not return workerName from makeManifestJob
The value doesn't represent the worker name, just the top-level cache
directory for a job.  It's useful for separating caches and making the
generation faster, but it's not necessary to return from the function.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
d3dc4eba39 distro: bring back TestImageType_PackageSetsChains()
This test was removed because package sets in chains are no longer
visible in the map returned from ImageType.PackageSets().
Bringing back the test now to ensure that:
1. All package set names defined in the keys returned from the
   PackageSets() map match the keys returned from the
   PackageSetsChains() map.
2. All package sets defined in the package set chains are defined for
   the image type.  This is tested by the function PackageSets()
   function itself, which should never panic.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
ce1474e364 distro: panic if chained package set is not specified
If an image type defines a package set name as part of a chain and that
package set is not defined, this is a programming error so we should
panic().
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
d470a3cb3f gen-manifests: inline finish() into wait()
wait() just did finish() and returned errors; no need for two
functions.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
150d490ba8 gen-manifests: separate worker queue code
Add the worker queue code to a separate file for better organisation
and readability.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
c1f7003e12 genall: move to cmd/ and rename to gen-manifests 2022-06-01 11:36:52 +01:00
Achilleas Koutsou
640dfac7a7 dnfjson: remove one-shot helper functions
They were originally added as convenience functions for single-case
calls, but they're not that useful and they have a million function
arguments, which isn't pretty.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
28862936bf dnfjson: convert depsoToRPMMD() to packageSpecs method
New type `packageSpecs` is an alias to `[]PackageSpec`.  The
`depsToRPMMD()` function is no a method of this type.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
7a70a5e69b dnfjson: drop repo checksums
The repository checksums in the response from dnf-json aren't used
anywhere.  Since we're making changes to dnf-json and depsolving, now is
a good opportunity to drop them completely.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
0ef4e7ee84 genall.go: create all test manifests
- Standalone executable for generating all test manifests in parallel.
- Command line flags:
  - Output directory (-output)
  - Number of concurrent workers (-workers)
- Collects list of image types from the distro list and reads:
  - tools/test-case-generators/repos.json for repositories
  - tools/test-case-generators/format-request-map.json for
    customizations
- Prints progress (finished/total)
- Collects errors and failures and prints them after all jobs are
  finished
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
41ab3e0f44 test/old-worker: don't fail when stopping containers
Can produce an error or warning about active sockets and kill the
script.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
c8ce3e4428 worker: test depsolve job format compatibility
Test the conversion of the new and old DepsolveJob given the custom
marshaller.
The deserialised old format is not exactly the same as it would have
been before, but it is functionally equivalent, with the added benefit
of supporting depsolve jobs where we don't want base repositories to be
used by all depsolves.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
94c7fda779 worker: make DepsolveJob serialisation backwards compatible
Add custom marshaller for DepsolveJob that serialises the struct into a
format compatible with both the new and old formats.  The format on the
wire is a superset of both the new and old format and can be
deserialised into either while retaining all information.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
c092783a70 simplify package set chain handling
Move package set chain collation to the distro package and add
repositories to the package sets while returning the package sets from
their source, i.e., the ImageType.PackageSets() method.

This also removes the concept of "base repositories".  There are no
longer repositories that are added implicitly to all package sets but
instead each package set needs to specify *all* the repositories it will
be depsolved against.

This paves the way for the requirement we have for building RHEL 7
images with a RHEL 8 build root.  The build root package set has to be
depsolved against RHEL 8 repositories without any "base repos" included.
This is now possible since package sets and repositories are explicitly
associated from the start and there is no implicit global repository
set.

The change requires adding a list of PackageSet names to the core
rpmmd.RepoConfig.  In the cloud API, repositories that are limited to
specific package sets already contain the correct package set names and
these are now copied to the internal RepoConfig when converting types in
genRepoConfig().
The user-specified repositories are only associated with the payload
package sets like before.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
6fbddeea35 composer+worker: make dnf-json path externally configurable
The default value is the installation path.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
8070321169 github: run unit tests on Fedora and force dnf
Run unit tests in GitHub workflows in a Fedora container to enable the
dnf-json tests.  Run the tests alone with the `force-dnf` flag to make
sure the tests pass and are not skipped.

Install Go using dnf instead of the GH action.  The action seems to
cause issues with the $PATH.

Use the registry.fedoraproject.org container for both unit tests and
pylint on dnf-json.
Requires some reordering of the steps in each workflow and the addition
of `git-core` as a dependency.

Using Fedora 35 instead of latest because of changes in the go build
tool: The new -buildvcs flag causes issues on GitHub actions.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
5a01d6b339 dnfjson: skip dnf-json tests if dnf python module isn't available
On systems where `dnf` and the Python module aren't available, skip the
unit tests that call into the `dnf-json` script.
A test flag, `-force-dnf` is added to avoid this check and run the tests
unconditionally.  This is useful for cases where the sniff check might
fail for wrong reasons or, more importantly, for cases where we want to
be sure the tests are ran and consider a missing `dnf` module to be an
error state (e.g., in CI).
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
387b982a79 github: fix indentation in workflows/tests 2022-06-01 11:36:52 +01:00
Achilleas Koutsou
b56ff56189 tests: use TestMain() instead of Init() to compile mock-dnf-json
Lets us have teardown code so we can clean up the temporary directory
where the binary was built.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
86536f11e7 rpmmd: add Repositories list to PackageSet struct
Attach the repository configurations that are specific to a package set
directly on the PackageSet object.  This simplifies the Depsolve()
signature and avoids requiring a `nil` when no additional repositories
are required.  More importantly, it makes associating repositories to
package sets explicit, no longer relying on matching array indices or
map keys.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
1c4d8f9988 dnfjson: use repo config hash as repo ID
Defined a Hash() method on rpmmd.RepoConfig that calculates a SHA-256 ID
for a repository based on its configuration.  Identical configurations
should produce the same ID.  The Name and ImageTypeTags of a repository
aren't taken into account.  These attributes affect a repository's
functional configuration.

This ID lets us change the way we handle repository configurations in a
few places:
- Preparing the depsolve job arguments is simpler since we have
  predictable IDs for the repository configurations.  We don't need to
  rely on the index of a RepoConfig in a list to identify or access it,
  which prevented us from building a list of all repository
  configurations, since we needed them to be placed in the list in a
  certain order.
- Associating packages from the depsolve result with the repository
  configuration (in depsToRPMMD) no longer relies on an ID string
  converted from and back to an integer index.  Repositories define
  their own IDs.
- Tests are a bit messier now but the changes simplify the main code, so
  it's an acceptable trade-off.
    - Fixtures need to change based on the repository configuration for
      the test.
    - We need to calculate the ID for the repository configuration for
      the temporary file server URL.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
46e4f0cf5e dnf-json: don't print success messages
They just make noise.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
61d7c465af dnfjson: remove single Depsolve function and command
Remove the single Depsolve function from the dnfjson package and the
depsolve command from the dnf-json tool.  The new ChainDepsolve
functions and chain-depsolve command can handle single depsolves in the
same way so there's no need to keep (and have to maintain) two versions
of very similar code.

The ChainDepsolve function (in Go) and chain-depsolve command (in
Python) have been renamed to plain Depsolve and depsolve respectively,
since they are now general purpose depsolve functions.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
d09176893b cmd/osbuild-pipeline: find dnf-json binary
Search for (and set) the path for dnf-json by checking a few known
locations:
- ./dnf-json: for situations when the tool is ran from the source tree.
  This is checked first to prioritise local changes.
- /usr/libexec/osbuild-composer/dnf-json: the default install location
  of the script when osbuild-composer is installed.
- /usr/lib/osbuild-composer/dnf-json: the default install location of
  the script for distributions which don't use /usr/libexec.

The function panics with an informative error message when it fails to
find dnf-json.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
6019a5022f test: remove generation.sh
The script would test if the test case generation script when the script
would run normally if the osbuild-dnf-json.service was stopped.
This is no longer necessary.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
0add961bcc rpmmd: remove unused functions
Removed all functions that have been ported to dnfjson or are no longer
used and all left-over types.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
8a23a77c5b worker: add new error type for RepoError
dnf-json now returns a new error kind: RepoError
Add it to the list of known error types and handle it in the worker.
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
d0da8fd122 dnfjson: add package tests
The rpmrepo mock contains code to be used for testing depsolving.  It
creates a file server that serves the metadata in test/data/testrepo and
can be used as a repository for depsolve tests.

The dnfjson tests perform a single depsolve with an expected response.
The chain depsolve tests perform multiple depsolves that should produce
the same expected response:
- Single transaction using the ChainDepsove() function
- Two transactions for the same packages split in two with no extra
  repositories
- Two transactions for the same packages split in two with the main
  repository redefined

dnfjsontest: squash
2022-06-01 11:36:52 +01:00
Achilleas Koutsou
35e369f5c7 test: add test repository metadata
Metadata files for CS9 BaseOS x86_64.
This will be served by a temporary webserver for dnf-json unit testing.
2022-06-01 11:36:52 +01:00