Commit Graph

196 Commits

Author SHA1 Message Date
edb014011c Make package search more efficient
* Avoid keeping list of all packages in memory by pushing each package
  directly to the JSON array
* Avoid check for database before pushing each package; do it only before
  reaching the next database
* Remove no longer required functions
2022-04-17 23:39:25 +02:00
4578b30ea2 Remove hard-coded build directories in test data 2022-04-15 19:58:35 +02:00
eae8af6571 Avoid big build action IDs by reusing older/lower ones 2022-04-15 19:20:01 +02:00
e15f65ac16 Extend tests for conducting build 2022-04-07 23:18:14 +02:00
08421fa719 Don't rely on local pkg dir when reloading library deps
Since 11f1849fde the cache dir is also set as local pkg dir
so we cannot rely on packages really existing there.
2022-04-07 21:35:05 +02:00
7c627e6a12 Use auto in getPackages() 2022-03-22 21:03:56 +01:00
56afe0c710 Fix returning newly retrieved AUR packages 2022-03-22 21:03:01 +01:00
d163f56abf Log whether io_uring is used/configured 2022-03-20 17:37:33 +01:00
d5e2b5489d Provide filename for artefact downloads 2022-03-15 23:22:34 +01:00
69a81f7583 Remove unused function declaration 2022-03-15 22:27:50 +01:00
83c7426fce Allow specifying output path for license info 2022-03-15 22:23:34 +01:00
13cccd3bc9 Improve creating license info 2022-03-15 01:10:15 +01:00
f87829ba85 Save state after reloading configuration 2022-03-15 01:07:51 +01:00
11f1849fde Keep local pkg paths deduced from pacman config
It makes the setup easier and shouldn't hurt otherwise.
2022-03-15 01:07:36 +01:00
b0234ff02e Improve MIME-type when serving artefacts 2022-03-15 00:21:08 +01:00
59cd593a3b Display template name 2022-03-12 22:46:42 +01:00
70a98ffedc Make name of build action to execute custom command shorter 2022-03-12 21:37:59 +01:00
ac0d64fe3e Allow everyone to see build action details 2022-03-10 23:19:02 +01:00
55f081153e Add command to delete invalid build actions from DB 2022-03-07 23:36:48 +01:00
7ade757c8d Avoid locking whole config when updating DBs
* Only lock the config for writing the reloading the config file
* Make sure all write operations to the database acquire an "update mutex"
  to ensure only one write operation happens at a time
* Do *not* acquire any additional locks when reading from a database as it
  should be safe to do so even when a write operation happens because
    * LMDB read and write transactions can happen at the same time
    * The package cache has its own mutex anyways
    * Write ops to the package cache try to lock the "update mutex" to
      prevent writing "old" data to the cache during updates
* Make "lastUpdate" atomic to avoid locking the config when accessing it
2022-03-05 18:55:52 +01:00
afc61bcad6 Speed up AUR updates using PackageUpdater 2022-03-05 16:10:33 +01:00
8fdf7bfb04 Print certain resource limits on server startup 2022-03-05 12:34:26 +01:00
9acd10fa4c Catch boost::exceptions 2022-03-05 12:34:05 +01:00
9b6be51dd3 Allow reloading library dependencies of specific packages 2022-03-04 21:51:25 +01:00
4293eb92bf Ignore libs for cross-compilation when checking any packages for binaries
Not really generic yet (e.g. doesn't cover `aarch64-linux-gnu-glibc`) but
good enough for now.
2022-03-04 21:50:56 +01:00
c633eea607 Add any-packages containing binaries as problem when checking for errors 2022-03-03 23:08:14 +01:00
c2e7f40767 Fix typos 2022-03-01 00:43:06 +01:00
79123e4cd9 Improve error handling of server
* Return with non-zero exit code when an exception occurred
* Handle exceptions when terminating the service
2022-03-01 00:39:50 +01:00
0343685910 Adapt tests for limiting 2022-02-25 23:18:26 +01:00
67fa8def0b Name additional threads 2022-02-25 23:09:46 +01:00
2071327a71 Fix building packages using signed git repositories as source 2022-02-25 23:09:16 +01:00
90ff9678fe Limit results returned by the API for better scalability 2022-02-25 00:29:43 +01:00
ff7f039519 Ensure problems of repos with different archs but the same name aren't mixed up 2022-02-22 22:50:51 +01:00
382169ab6e Fix varoius build action related problems
* Fix crashes in some situations
* Fix aborting reloading library dependencies
2022-02-22 22:49:40 +01:00
5c62014b3b Fix variable name in fallback code when BOOST_ASIO_HAS_FILE 2022-02-22 20:22:00 +01:00
a25db1f9e0 Log usage of io_uring 2022-02-22 00:08:21 +01:00
839a4b0831 Fix wrong variable name in buildactionlivestreaming.cpp 2022-02-22 00:05:35 +01:00
8ea2f5fd62 Reintroduce cache file as it is still required for "lastUpdate" for DBs
Maybe it makes more sense to use LMDB for this as well. On the other hand
it is an easy way of keeping the remaining state persistent.
2022-02-20 20:17:42 +01:00
9c4f0277bd Unlock output lock early
The following things are read-only or guarded by other mutex.
2022-02-20 19:51:46 +01:00
bdbfd42e5e Avoid package object being reused after 3d7310af3 2022-02-20 19:50:44 +01:00
334bb1faa9 Use io_uring for async file I/O 2022-02-20 18:44:07 +01:00
8115721913 Fix handling error computing db order when reloading dependencies 2022-02-20 00:18:49 +01:00
93afb3883d Write build action "output" log to a logfile like for sub-processes 2022-02-20 00:11:23 +01:00
a7de520549 Use lazy-deserialization and package cache when searching in package name 2022-02-19 00:11:59 +01:00
b3b396df5f Allow ignoring copying errors due to existing files when moving packages 2022-02-16 19:47:25 +01:00
8949b5f3c1 Fix resetting running build actions on server startup 2022-02-16 19:17:29 +01:00
557fd1a738 lmdb: Use lmdb to store build actions 2022-02-13 21:04:54 +01:00
4fbe3df095 Allow enabling Boost.Asio's support for using io_uring
It won't likely do much regarding file handling as code is currently still
using `boost::asio::posix::stream_descriptor` or Boost.Beast's file
handling (which uses blocking I/O). I suppose one needs to use the new file
API described here under "Asio 1.22.0 / Boost 1.78":
https://www.boost.org/doc/libs/1_78_0/doc/html/boost_asio/history.html
2022-02-05 20:31:11 +01:00
e582d5f406 Remove useless blank line 2022-02-03 22:07:22 +01:00
4ed645be94 Fix handling of head requests
* Fix condition for skipping
* Open destination file only if the request is not skipped (when doing a
  head request first)
2022-02-02 21:18:07 +01:00
66f59fecb9 Make storing lib deps more efficient and allow for intermediate reads 2022-01-31 21:32:07 +01:00
45922b47ec lmdb: Allow configuring cache limit 2022-01-26 00:41:53 +01:00
d4d187463a Fix problems with global locks
* Aquire the mutex before setting `m_exclusivelyOwned = false`; otherwise
  it might be set after `lock()` has checked it but before `lock()` has
  entered `wait()` leading to a deadlock
* Check state again after `wait()` because it may also be unblocked
  "spuriously" so it isn't guaranteed that the state will have actually
  changed after unblocking
2022-01-25 22:49:20 +01:00
218dfecf56 Avoid loading databases when modification date is <= last update
* Do HTTP head request first when loading database from mirror to avoid
  downloading the full database all the time
* Use the last modification date of the local database file because with
  the persistent storage even local database reloads became a bit expensive
2022-01-25 00:13:10 +01:00
300f74fb10 lmdb: Open LMDB file after restoring cache so DBs added from cache have the storage initialized 2022-01-25 00:01:59 +01:00
1c820fc2f6 lmdb: Fix storage initialization when config file cannot be loaded 2022-01-23 19:47:50 +01:00
f088e54c61 lmdb: Use package cache when querying packages for dependencies
* Use package cache when querying packages for dependencies or library
  names
* Avoid manual instantiations of `std::shared_ptr<Package>`
2022-01-21 20:35:43 +01:00
e44cbf94e5 lmdb: Enable versioning for objects we'd like to store in the DB 2022-01-18 22:48:34 +01:00
2ffa6629c8 lmdb: Use lmdb to store packages and dependency indices 2022-01-18 21:50:53 +01:00
0a2c41ee0c Fix shadowing warning 2021-12-07 22:48:22 +01:00
567c3aaf56 Support "trunk" subdirectory for using official svntogit repos as source 2021-11-16 15:00:19 +01:00
0f7718c934 Locate PKGBUILDs locally also without variant dir
This makes it possible to checkout
https://github.com/archlinux/svntogit-packages.git and
https://github.com/archlinux/svntogit-community.git locally to build
official packages.
2021-11-14 23:37:33 +01:00
6f652922cd Add lookup for repo-specific config file path
This could be useful to create another repository with packages that are
built using different compile flags, e.g. optimized for certain processors.
2021-11-14 22:59:46 +01:00
2adc80e5fc Override existing symlinks when adding signatures to repo 2021-11-03 16:32:38 +01:00
893a8473ad Override existing symlinks when adding packages to repo 2021-11-03 16:06:16 +01:00
755e1958d3 Allow overriding existing files in repository
When `repo-add` fails but files could be copied before refusing to override
is actually very annoying because one has to delete the files before
restarting the build task.
2021-10-07 18:12:44 +02:00
672f3b4e97 Fix staging check for split packages
* Consider all split packages when skipping an affected package
2021-09-30 22:23:54 +02:00
ace478be22 Fix tests when test working directory is on another device
* Fallback to copying if hard link creation fails due to cross device link
2021-09-30 22:22:22 +02:00
a93924bb3a Fix cleanup of signatures
* Record full path for the deletion of orphaned signatures
* Test for the existence of the signature symlink itself and not the target
  because the symlink target (in the any directory) might not exist anymore
  but the symlink should be removed in any case
2021-08-29 00:32:19 +02:00
c68202bdc1 Add test for repository cleanup 2021-08-29 00:29:26 +02:00
1cc8a3d6db Add warnings about missing DLLs to the build action's result 2021-08-28 15:06:24 +02:00
2ad4a39aea Handle case when a split package overrides the archs from the base 2021-08-28 00:25:09 +02:00
95ae827c74 Fix applying relative working directory multiple times 2021-07-31 14:55:49 +02:00
1ce736d66f Fix passing the body limit to nested cachePackages() calls 2021-07-25 01:25:30 +02:00
075f539480 Avoid copying strings when splitting lock names for custom command 2021-07-25 00:41:46 +02:00
f3ec908bcc Hold lock for named lock table not while acquiring named lock
Otherwise all other attempts to acquire named locks are blocked. It should
be ok because references are not invalidated when inserting/accessing
elements of an `std::unique_map`. When cleaning locks up elements are
erased, though. Hence an additional cleanup lock is required to prevent
acquiring a named lock which has already been cleaned up.
2021-07-25 00:40:39 +02:00
bbc7c3a533 Ignore empty packages within the cache dir
Those are most likely leftovers from  previous failed download attempts and
can be ignored. (Existing files are overridden.)
2021-07-17 23:58:37 +02:00
e5f4057c61 Use BufferSearch from c++utilities 2021-07-16 16:01:23 +02:00
bc8a0549b2 Log package download limit 2021-07-14 15:27:49 +02:00
909f7bfab0 Use default package download size limit if it is set to zero 2021-07-14 15:23:18 +02:00
e0a913b16c Apply clang-format 2021-07-13 00:41:49 +02:00
c05a581322 Increase the max. download size for packages and allow configuring it 2021-07-12 15:00:43 +02:00
a2fbba9713 Allow constructing BadRequest from std::string 2021-07-07 19:46:43 +02:00
b5ca815e4c Allow excluding packages via regex when reloading library dependencies
This recently failed because the cuda package exceeded the max. body size.
I suppose it makes generally sense to be able to exclude packages as I
don't need that package anyways.
2021-07-07 19:14:03 +02:00
d006c9ce4f Fix error handling when instantiating std::regex 2021-07-07 19:09:32 +02:00
17c5f50440 Do not exit process if config values are invalid
This is not a good idea when re-reading the config after startup.
2021-07-07 19:08:47 +02:00
49aebdd8a5 Fix typos found via codespell --skip .git -w 2021-07-03 19:59:57 +02:00
8b70cc5f8e Clear added/removed provides from previous builds 2021-06-22 00:02:41 +02:00
f685fddd20 Add .pid-equivalent for Boost.Asio's Windows-executor 2021-06-22 00:01:55 +02:00
0a55412625 Remove unused #include 2021-06-21 23:58:34 +02:00
d9203689a0 Fix param for PrepareBuildFlags::ResetChrootSettings 2021-06-04 16:47:24 +02:00
3a797bc8b6 Adapt test to fixed behavior of splitString*() to preserve last empty part 2021-05-16 19:43:16 +02:00
9359004a10 Allow resetting chroot settings as well when preparing build 2021-05-16 16:49:09 +02:00
efbcef5e6e Fix error handling when makechrootpkg can not be invoked 2021-05-16 13:49:57 +02:00
b9c7f05ef1 Add missing include for condition_variable 2021-05-15 21:04:21 +02:00
05ff6cd00f Do not set packages in conduct build actions when creating it form task
Usually this doesn't make sense because we want to build all packages which
were determined in the previous prepare action. When specifying the
packages again in the conduct build action we'd skip packages which are
pulled into the build as dependencies which is normally not desired.
2021-05-01 23:28:30 +02:00
6101eaa6b6 Ensure staging flag is not unset 2021-04-28 22:19:10 +02:00
a96ba707cd Populate list of packages to be re-built also for removed libraries 2021-04-28 21:58:33 +02:00
12050364c8 Handle signature cleanup alongside related package even if package symlink broken 2021-04-27 17:06:47 +02:00
e4755a283b Prevent running out of memory when signing split packages
* Launch only up to 4 gpg processes at a time
* Prevent `gpg: signing failed: Nicht genügend Hauptspeicher verfügbar`
2021-04-17 17:30:18 +02:00