diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fcfc4a1 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +result* diff --git a/scripts/create-report.sh b/scripts/create-report.sh index 628e024..26fd732 100755 --- a/scripts/create-report.sh +++ b/scripts/create-report.sh @@ -8,79 +8,74 @@ util_path="${GITHUB_ACTION_PATH:-.}/scripts/utils.sh" . "${util_path}" group 'Retrieving Flake information' -flake_info=$(nix flake show --json) +flake_info=$(nix flake show --json --quiet --quiet) endgroup +system=$(nix eval --impure --json --expr 'builtins.currentSystem') + group 'Show Packages' -packages=$( - jq --raw-output '.packages."x86_64-linux" | select(. != null) | keys[]' <<-EOF - $flake_info - EOF -) -log "$packages" +packages=$(echo "$flake_info" | jq --raw-output --argjson system "$system" 'getpath(["packages", $system]) | select(. != null) | keys[]') +[ -z "$packages" ] || log "$packages" endgroup group 'Show Home Manager Configurations' -hmConfigs=$( - jq --raw-output '.homeConfigurations | select(. != null) | keys[]' <<-EOF - $flake_info - EOF -) -log "$hmConfigs" +hmConfigs=$(echo "$flake_info" | jq --raw-output '.homeConfigurations | select(. != null) | keys[]') +[ -z "$hmConfigs" ] || log "$hmConfigs" endgroup group 'Show NixOS Configurations' -nixosConfigs=$( - jq --raw-output '.nixosConfigurations | select(. != null) | keys[]' <<-EOF - $flake_info - EOF -) -log "$nixosConfigs" +nixosConfigs=$(echo "$flake_info" | jq --raw-output '.nixosConfigurations | select(. != null) | keys[]') +[ -z "$nixosConfigs" ] || log "$nixosConfigs" endgroup +closure_size() { + name=$1 + path=$2 + log "Calculating size of $name at $path" + path_info=$(nix path-info --closure-size --json "$path") + echo "$path_info" | + jq --compact-output \ + --arg pkg "$name" \ + --arg path "$path" \ + '.[] | {"name": $pkg, "path": $path, "size": .closureSize, "narSize": .narSize, "raw": .}' +} + pkgs_json() { - group 'Building packages' - trap endgroup RETURN for package in $packages; do log "Building $package" path=$(nix build --print-out-paths ".#$package") - log "Calculating size of $package at $path" - nix path-info --closure-size --json "$path" | tee | - jq --compact-output --arg pkg "$package" '.[] | {"name": $pkg, "size": .closureSize, "narSize": .narSize}' + closure_size "$package" "$path" done - endgroup } hm_configs_json() { - group 'Building Home Manager configurations' - trap endgroup RETURN for config in $hmConfigs; do log "Building $config" path=$(nix build --print-out-paths ".#homeConfigurations.$config.activationPackages") - log "Calculating size of $config" - nix path-info --closure-size --json "$path" | - jq --compact-output --arg pkg "$config" '.[] | {"name": $pkg, "size": .closureSize, "narSize": .narSize}' + closure_size "$config" "$path" done } nixos_configs_json() { - group 'Building NixOS configurations' - trap endgroup RETURN for config in $nixosConfigs; do log "Building $config" path=$(nix build --print-out-paths ".#nixosConfigurations.$config.config.system.build.toplevel") - log "Calculating size of $config" - nix path-info --closure-size --json "$path" | - jq --compact-output --arg pkg "$config" '.[] | {"name": $pkg, "size": .closureSize, "narSize": .narSize}' + closure_size "$config" "$path" done } -pkgs=$(pkgs_json | jq --slurp '.') -hmConfigs=$(hm_configs_json | jq --slurp '.') -nixosConfigs=$(nixos_configs_json | jq --slurp '.') +group 'Building packages' +pkgs=$(pkgs_json | jq --slurp .) +endgroup +group 'Building Home Manager configurations' +hmConfigs=$(hm_configs_json | jq --slurp .) +endgroup +group 'Building NixOS configurations' +nixosConfigs=$(nixos_configs_json | jq --slurp .) +endgroup echo "{}" | jq \ --argjson pkgs "$pkgs" \ - --argjson nixosConfigs "$nixosConfigs" \ --argjson hmConfigs "$hmConfigs" \ + --argjson nixosConfigs "$nixosConfigs" \ '{"packages": $pkgs, "nixosConfigurations": $nixosConfigs, "homeConfigurations": $hmConfigs}'