-
Notifications
You must be signed in to change notification settings - Fork 0
/
revendor-wgpu.nu
93 lines (87 loc) · 2.67 KB
/
revendor-wgpu.nu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
export def wgpu_repo_pkgs [] {
let wgpu_repo_url = "https://github.com/gfx-rs/wgpu"
let id_pat = ["git+" $wgpu_repo_url "?rev={rev}#{name}@{ver}"] | str join
^cargo metadata --format-version 1
| from json
| get packages
| where source != null
| where {|pkg| $pkg.source =~ $wgpu_repo_url }
| each {|pkg|
let parsed_id = $pkg.id | parse $id_pat | first
{
name: $pkg.name
version: ($parsed_id | [$in.ver "@git:" $in.rev] | str join)
}
}
}
export def main [
--revision: string,
] {
use std/log [error, info]
let old_metadata = (wgpu_repo_pkgs)
let cmd = "mach"
mut args = [vendor --ignore-modified gfx/wgpu_bindings/moz.yaml]
if $revision != null {
$args = ($args | append ["--revision" $revision])
}
let args = $args
info $"running `([$cmd] | append $args | str join ' ')`…"
let vendor_output = (do { run-external $cmd ...$args } o+e>| complete)
if $vendor_output.exit_code != 0 {
error make --unspanned { msg: "failed to re-vendor, bailing" }
return;
}
let vendor_output = $vendor_output | get stdout | lines
let old_revision = (
let REV_RE = 'Found revision: (?P<revision>\w+)';
$vendor_output | find --regex $REV_RE | first | parse --regex $REV_RE | first | get revision
)
info (["old revision: " $old_revision] | str join)
let new_revision = (
let REV_RE = ' \d+:\d+.\d+ Latest commit is (?P<revision>\w+?) from .*';
$vendor_output | find --regex $REV_RE | first | parse --regex $REV_RE | first | get revision
)
info (["new revision: " $new_revision] | str join)
let audits_to_do = (
let AUDIT_ERR_RE = ([
' ?\d+:\d+.\d+ E Missing audit for (?P<id>(?P<name>[\w-]+):(?P<version>\S+)) \(requires \['
"'(?<criteria>[a-z-]+)'"
'\]\).*'
] | str join);
$vendor_output
| find --regex $AUDIT_ERR_RE
| parse --regex $AUDIT_ERR_RE
| each {|pkg_missing_audit|
{
pkg_name: $pkg_missing_audit.name
old_version: ($old_metadata | where name == $pkg_missing_audit.name | first | get version)
new_version: $pkg_missing_audit.version
criteria: $pkg_missing_audit.criteria
}
}
)
info ([
"audits to do:"
($audits_to_do | each {||
[
"\n "
$in.pkg_name
' '
$in.old_version
' -> '
$in.new_version
' as `'
$in.criteria
'`'
] | str join
} | str join)
] | str join)
$audits_to_do | each {|audit|
let cmd = "mach"
let args = [cargo vet certify --accept-all --criteria $audit.criteria $audit.pkg_name $audit.old_version $audit.new_version]
info (["Running `" $cmd ' ' ($args | str join ' ' ) "`…"] | str join)
run-external $cmd ...$args
}
info "running `mach vendor rust`, now that we've theoretically unblocked all audits…"
mach vendor rust --ignore-modified
}