2025-01-18 00:07:23 -05:00
2025-01-18 00:07:23 -05:00
2025-01-18 00:07:23 -05:00
2025-01-18 00:07:23 -05:00
2025-01-18 00:07:23 -05:00
2025-01-18 00:07:23 -05:00
2025-01-18 00:07:23 -05:00
2025-01-18 00:07:23 -05:00

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 if useBootstrapped is true.
  • useBootstrapped: If true, packages that require an update but exist in the destination repo are not considered blocking dependencies
  • packages: 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.

Description
Dependency hell? This can help.
Readme MIT 43 KiB
Languages
JavaScript 100%