conda-forge / suitesparse-feedstock

A conda-smithy repository for suitesparse.
BSD 3-Clause "New" or "Revised" License
1 stars 16 forks source link

split outputs, build with rattler-build #98

Open minrk opened 5 days ago

minrk commented 5 days ago

use rattler because this is a lot of outputs and it saves a lot of time for the many env setup/teardown transactions over conda-build

adds suitesparse-mongoose as an additional component and unskips spex on windows, now that the required gmp is available there.

Further splitting not done, that could be, and I think could be done later without major consequence:

conda-forge-admin commented 5 days ago

Hi! This is the friendly automated conda-forge-linting service.

I failed to even lint the recipe, probably because of a conda-smithy bug :cry:. This likely indicates a problem in your meta.yaml, though. To get a traceback to help figure out what's going on, install conda-smithy and run conda smithy recipe-lint --conda-forge . from the recipe directory. You can also examine the workflow logs for more detail.

This message was generated by GitHub Actions workflow run https://github.com/conda-forge/conda-forge-webservices/actions/runs/12031395698. Examine the logs at this URL for more detail.

minrk commented 4 days ago

lint error is https://github.com/conda-forge/conda-smithy/issues/2165 already fixed by https://github.com/conda-forge/conda-smithy/pull/2166

minrk commented 4 days ago

This actually runs all the builds independently in sequence. A faster approach would be to keep the single 'build and install everything' and use files. Downside of files: we need to keep track of which files go with which package, and know about every added file for each release. The approach in this PR is a lot easier to keep correct, at the expense of some time (still only 5 minutes on linux-64 thanks to the switch to rattler-build).

xhochy commented 4 days ago

At this point you could also think of splitting it into libpkg and libpkg-devel. If you do it at a later point, you can no longer use libpkg as the package containing only the runtime library as this would probably break existing packages (too much).

minrk commented 4 days ago

@xhochy that's a good point. I did think of that and figured the cost of the dev files wasn't big enough to justify the recipe complexity. It's a little hard with this multi-package layout where multiple builds have to run unless I go with a single build and pure files splitting since I don't think I can run a bunch of builds and do files splitting from several different build steps.

One way to do the splitting that I think would be maintainable is to switch to a single build and do files splitting where:

so that a package depending on e.g. umfpack would have host:

- libumfpack # lib, run_exports
- suitesparse-devel # headers, etc., no run_exports

Do you think that's worth it?

Some numbers for the fully installed suitesparse to help inform the choice, which should be unchanged (plus the addition of suitesparse-mongoose):

so the devel package would reduce the number of files for a full suitesparse install by 2/3 and the size by only 20%.

The single-build would also have to wait for https://github.com/conda-forge/conda-smithy/issues/2057 to resolve because rattler-build currently has the build cache behind an --experimental flag we can't yet pass.

xhochy commented 4 days ago

@xhochy that's a good point. I did think of that and figured the cost of the dev files wasn't big enough to justify the recipe complexity.

That is something where I don't have an opinion on as I am not a user of this package, but I stumbled on this case of libpkg vs libpkg-devel several times in the last days and wanted to raise it again, so that if you would have long-term plans for it, that you don't "fall into the same trap":

minrk commented 4 days ago

Since most packages don't split -devel on conda-forge, I've mostly been doing it considering the size/quantity of devel files compared to both the library itself, and the size/frequency of a typical env that depends on it. 1MB of headers in an env that's unlikely to be less that 300MB due to other dependencies doesn't seem entirely worth it.

I also don't think splitting further libumfpack into libumfpack-devel down the line is likely to break anything, as it would only mean the next build depending on libumfpack would need to add -devel, but runtime would only see an install-size savings without any breakage. Or is there something I'm missing there?

minrk commented 4 days ago

@conda-forge-admin please lint

conda-forge-admin commented 3 days ago

Hi! This is the friendly automated conda-forge-linting service.

I just wanted to let you know that I linted all conda-recipes in your PR (recipe/recipe.yaml) and found it was in an excellent condition.