88 lines
2.3 KiB
Text
88 lines
2.3 KiB
Text
const self = "pkgs/packages/webserver/package.nix"
|
|
let tmpdir = mktemp -d webserver-update.XXXXXXXXXX
|
|
|
|
let dependencies = {
|
|
fontsource-scss: (prefetch-npm @fontsource-utils/scss)
|
|
fontsource-arimo: (prefetch-npm @fontsource-variable/arimo)
|
|
fontsource-nunito: (prefetch-npm @fontsource-variable/nunito)
|
|
|
|
bulma: (prefetch-github jgthms bulma)
|
|
hack-font: (prefetch-github source-foundry Hack)
|
|
}
|
|
|
|
cd (git rev-parse --show-toplevel)
|
|
|
|
$dependencies | items {|name, metadata| $metadata | update-dependency $name }
|
|
|
|
rm -r $tmpdir
|
|
|
|
cd (dirname $self)
|
|
cargo update
|
|
|
|
def prefetch-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 prefetch-github [owner: string, repo: string] {
|
|
let metadata = http get $'https://api.github.com/repos/($owner)/($repo)/releases/latest'
|
|
let prefetch = nix-prefetch-github --rev $metadata.tag_name --json $owner $repo | from json
|
|
$prefetch | select hash | insert version ($metadata.name | str trim --left --char v)
|
|
}
|
|
|
|
def update-dependency [dependency_name: string] {
|
|
const 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
|
|
not:
|
|
regex: '{replacement}'
|
|
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 $self
|
|
}
|