rhellp
Help with gnarly build orders
Originally designed to identify ruby packages that are ready to build during a rebuild, rhellp helps you get out of dependency hell.
How to use
Create config.json
in the project root:
{
"archMirror": "https://mirror.sanin.dev/arch-linux",
"upstream": "extra-staging",
"artixMirror": "https://mirror.sanin.dev/artix-linux",
"destination": "world-goblins",
"useBootstrapped": false,
"packages": [
"ruby _bootstrap=0",
"rubygems",
"ruby-rake",
"ruby-bundler",
"ruby-webrick",
"ruby-rake-compiler",
"ruby-test-unit-ruby-core",
"ruby-erb",
"ruby-power_assert",
"ruby-test-unit",
"ruby-diff-lcs",
"ruby-rspec-support",
"ruby-rspec-core",
"ruby-rspec-expectations",
"ruby-rspec-mocks",
"ruby-rspec",
"ruby-thread_order",
"ruby-childprocess",
"ruby-ffi",
"ruby-rspec-support",
"ruby-diff-lcs",
"ruby-rr",
"ruby-test-unit-rr",
"ruby-rr",
"ruby-debug",
"ruby-tracer",
"ruby-irb",
"ruby-minitest",
"ruby-hoe",
"ruby-kpeg",
"ruby-racc",
"ruby-rdoc",
"ruby-typeprof"
],
"forcePackages": []
}
archMirror
: Arch mirror to use. Must include the path to the directory containing all the repo folders.upstream
: Arch repo to use for parsing package information.artixMirror
: Artix mirror to use. Must include the path to the directory containing all the repo folders.destination
: Artix repo to use for locating bootstrapped packages. Only required ifuseBootstrapped
is true.useBootstrapped
: If true, packages that require an update but exist in the destination repo are not considered blocking dependenciespackages
: Array of packages to analyze. Packages that aren't in the artix-checkupdate update list will be filtered out.forcePackages
: Packages to insert into the packages array regardless if an update is pending or not.
Run the program with node index.js
Parsing the output
Once it runs, it will spit out a list of packages that need updates, sorted in descending order by the number of dependencies and check dependencies that have pending updates. For example:
2 deps - 0 check deps
-----------------------
postorius (python-django-mailman3 python-mailmanclient) ()
1 deps - 0 check deps
-----------------------
python-dask-expr (python-dask) ()
python-django-mailman3 (python-mailmanclient) ()
0 deps - 1 check deps
-----------------------
python-dask () (python-dask-expr)
0 deps - 0 check deps
-----------------------
python-mailmanclient
The items toward the bottom have the fewest blocking dependencies. In this case, python-mailmanclient
is the next package to build because it's not waiting on any dependencies or check dependencies.
Next would be python-dask
. Since it's waiting on a check dependency, --nocheck
should be used when pushing. Make sure the correct pkgrel is imported from upstream.