Comment the size of nix flake output derivations on a PR
Find a file
2024-12-20 11:26:50 +01:00
action.yml fix(action): typo 2024-12-19 23:07:46 +01:00
comment_on_pr.sh feat(comment): add some context on how to read the data 2024-12-19 23:53:24 +01:00
compare.jq fix(compare): logic was wrong 2024-12-19 23:37:38 +01:00
create-report.sh fix(sh): ${VAR:-val} and ${VAR-val} are different 2024-12-19 23:15:22 +01:00
example-comment.png docs(README): add example image and text 2024-12-20 11:26:50 +01:00
README.md docs(README): add example image and text 2024-12-20 11:26:50 +01:00
retrieve-old-report.sh fix(sh): ${VAR:-val} and ${VAR-val} are different 2024-12-19 23:15:22 +01:00
utils.sh refactor!(action): detect when in private branches 2024-12-19 22:43:51 +01:00

Nix Flake outputs size

Use nix path-info to query the size of flake outputs and produce a report.

This repost can be posted to a PR (as formatted markdown) and/or uploaded as a workflow artifact.

Requires nix, jq, curl, sed, gunzip, tar and coreutils to be in the runner's path.

Example

- name: Generate size report
  uses: https://git.salame.cl/jalil/nix-flake-outputs-size@main
  with: # Default values
    comment-on-pr: 'true'
    generate-artifact: 'false'
    artifact-name: 'size-report.md'
    # If you want to enable comparisons set this to true
    do-comparison: 'false'
    job-name: '' # required if do-comparison is true
    # This is the branch that will be compared against
    base-branch: ${{ github.base_ref }} # or default branch if missing

For more details see the action.yaml file.

How it looks:

!example comment generated by this action

Example output as text:

Flake output sizes

Definitions:

  • Name: the name of the package/configuration.
  • Size: the closure size (size on disk/NAR size + all transitive dependencies).
  • NAR Size: the size of the build output (package without the dependencies).
  • [NAR] Size Change: the amount changed compared to the main branch.

Tips on reading this data:

  • For NixOS configurations you generally care only about the Size (closure size/size on disk).
    • Reduce the Size by disabling unneeded services/default packages.
  • For Packages you care about both the Size and the NAR Size.
    • Reduce the NAR Size by reducing the size of the build outputs, e.g. don't copy unnecessary data to the $out dir, optimize binaries for size, etc.
    • Reduce the Size by reducing the dependencies (e.g. buildInputs).
    • Don't worry too much about size, some dependencies are deduplicated, e.g. glibc adds ~40MiB to the Size, but is generally shared by ~every binary on the system, so, chances are, you are already including it from somewhere else and statically linking with e.g. musl is not gonna improve things.

NixOS Configurations

Name Size Size Change NAR Size NAR Size Change
gemini 11Gi -2.4Mi 28Ki 0
leo 1.6Gi 0 25Ki 0
libra 9.4Gi -2.4Mi 28Ki 0
taurus 7.6Gi 0 34Ki 0