let tmpdir = mktemp -d webserver-update.XXXXXXXXXX def update-npm [package: string] { let metadata = http get $'https://registry.npmjs.org/($package)' let version = $metadata.dist-tags.latest let url = ($metadata.versions | get $version).dist.tarball let tarball = ($tmpdir | path join "package.tgz") http get $url | save -f $tarball let hash = nix hash file $tarball { url: $url version: $version hash: $hash } } def update-dependency [dependency_name: string] { let replace_attribute_template = " id: update-attribute language: nix utils: is-attribute: kind: string_fragment inside: kind: binding stopBy: end has: field: attrpath regex: '{attribute}' rule: matches: is-attribute inside: kind: binding stopBy: end has: field: attrpath regex: '{dependency_name}' fix: '{replacement}'" let template_data = ( $in | if ($in has url) { [{attribute: url replacement: $in.url}] } else { [] } ) ++ [ {attribute: version replacement: $in.version} {attribute: hash replacement: $in.hash} ]; let ast_grep_rule = ( $template_data | each { $in | insert dependency_name $dependency_name | format pattern $replace_attribute_template } | str join "\n---\n" ) ast-grep scan --update-all --inline-rules $ast_grep_rule package.nix } # Update bulma let metadata = http get https://api.github.com/repos/jgthms/bulma/releases/latest let bulma_prefetch = nix-prefetch-github --rev $metadata.tag_name --json jgthms bulma | from json let bulma = $bulma_prefetch | select hash | insert version $metadata.name let fontsource_scss = update-npm @fontsource-utils/scss # let fontsource_arimo = update-npm @fontsource-variable/arimo # let fontsource_nunito = update-npm @fontsource-variable/nunito # print $bulma print $fontsource_scss # print $fontsource_arimo # print $fontsource_nunito $bulma | update-dependency bulma $fontsource_scss | update-dependency fontsource-scss