Compare commits

..

1 commit

Author SHA1 Message Date
87a8d87143
wip: report package sizes
All checks were successful
/ report-size (pull_request) Successful in 25s
Added as a comment to the current pull request
2024-12-15 11:48:46 +01:00

View file

@ -2,67 +2,21 @@
set -eu
echo 'Retrieving Flake information' >&2
flake_info=$(nix flake show --json 2>/dev/null)
packages=$(
jq --raw-output '.packages."x86_64-linux" | keys[]' <<-EOF
$flake_info
EOF
)
echo "Packages:" >&2
echo "$packages" >&2
configurations=$(
jq --raw-output '.nixosConfigurations | keys[]' <<-EOF
$flake_info
EOF
)
echo "NixOS Configurations:" >&2
echo "$configurations" >&2
package_size_table() {
table='| Installable | NAR Size | Closure Size |
|-------------|---------:|-------------:|
'
for package in $packages; do
echo "Building $package" >&2
path=$(nix build --print-out-paths ".#$package" 2>/dev/null)
row=$(nix path-info --size --closure-size --human-readable "$path" 2>/dev/null |
sed "s/^\(\S\+\)\(\s\+\)\(\S\+\)\(\s\+\)\(\S\+\)$/| $package | \3 | \4\5 |/")
table="$table$row
"
done
packages=$(nix flake show --json 2>/dev/null | jq --raw-output '.packages."x86_64-linux" | ".#" + keys[]')
echo 'Building packages' >&2
# we want to split the words as each of them is a different installable
# shellcheck disable=SC2086
nix build $packages
# shellcheck disable=SC2086
table=$(nix path-info --size --closure-size --human-readable \
$packages |
sed 's/^\(\S\+\)\(\s\+\)\(\S\+\)\(\s\+\)\(\S\+\)$/| \1\2| \3 | \4\5 |/')
printf '%s' "$table"
}
configuration_size_table() {
table='| NixOS Configuration | NAR Size | Closure Size |
|-------------|---------:|-------------:|
'
for config in $configurations; do
echo "Building $config" >&2
path=$(nix build --print-out-paths ".#nixosConfigurations.$config.config.system.build.toplevel" 2>/dev/null)
row=$(nix path-info --size --closure-size --human-readable "$path" 2>/dev/null |
sed "s/^\(\S\+\)\(\s\+\)\(\S\+\)\(\s\+\)\(\S\+\)$/| $config | \3 | \4 |/")
table="$table$row
"
done
printf '%s' "$table"
}
markdown() {
cat <<-EOF
## Outputs' size
### NixOS Configurations sizes
$(configuration_size_table)
### Package sizes
$(package_size_table)
| Nix Store Path | NAR Size | Closure Size |
|----------------|---------:|-------------:|
$table
EOF
}
@ -71,21 +25,31 @@ if [ "${CI-false}" = "true" ]; then
"$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/pulls?state=open&sort=recentupdate" \
-H 'accept: application/json' |
jq --arg head_ref "$GITHUB_HEAD_REF" '.[] | select(.head.ref == $head_ref) | .number')
echo "Retrieved index: $pr_number" >&2
echo "Expected PR URL: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/pulls/$pr_number" >&2
echo 'Generating comment body' >&2
comment=$(markdown)
echo 'Posting comment:' >&2
echo "$comment" >&2
echo 'Request data:' >&2
echo "Retrieved index: $pr_number"
echo "Expected PR URL: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/pulls/$pr_number"
echo 'Generating comment body'
comment=$(
cat <<-EOF
### NixOS Configurations sizes
TODO
### Package sizes
$(package_size_table)
EOF
)
echo 'Posting comment:'
echo "$comment"
echo 'Request data:'
data=$(echo '{}' | jq --arg comment "$comment" '.body=$comment')
echo "$data" >&2
curl -o - -X 'POST' \
echo "$data"
curl -o - -v -X 'POST' \
"$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/issues/$pr_number/comments" \
-H 'accept: application/json' \
-H "Authorization: token $GITHUB_TOKEN" \
-H 'Content-Type: application/json' \
-d "$data"
else
markdown
package_size_table
fi