-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbuild-packages.php
executable file
·104 lines (86 loc) · 2.49 KB
/
build-packages.php
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
94
95
96
97
98
99
100
101
102
103
104
#!/usr/bin/env php
<?php
include __DIR__ . "/package-funcs.php";
$url = "http://example.com/repo";
$webroot = "/var/www/html/webroot";
$opts = getopt("d:f", ["devpackages", "dest:", "staging:", "jfilename:", "force", "pkgsrcdir:"]);
$force = false;
if (isset($opts['f']) || isset($opts['force'])) {
$force = true;
}
$stagingdir = $opts['staging'] ?? false;
if (!$stagingdir) {
throw new \Exception("Need to provide a staging directory");
}
$dest = $opts['d'] ?? $opts['dest'] ?? false;
if (!$dest) {
throw new \Exception("Need to provide a final destination directory");
}
if (array_key_exists('devpackages', $opts)) {
$installdevpkgs = true;
} else {
$installdevpkgs = false;
}
$srcdir = $opts['p'] ?? $opts['pkgsrcdir'] ?? false;
if (!$srcdir) {
throw new \Exception("No pkgsrcdir provided");
}
if (!is_dir($srcdir)) {
throw new \Exception("$srcdir does not exist");
}
if (!is_dir($dest)) {
mkdir($dest, 0777, true);
chmod($dest, 0777);
}
print "Staging to $stagingdir using ";
if ($installdevpkgs) {
print "DEVELOPMENT PACKAGES from $srcdir ";
} else {
print "released packages from $srcdir ";
}
$jfilename = $opts['jfilename'] ?? "$stagingdir/fullpackages.json";
$p = new Packages($srcdir, $stagingdir);
$p->useWebroot($webroot);
$v = $p->parsePkgArr(null, $force, true);
$devpackages = $p->getCurrentDevPackages();
$prodpackages = $p->getCurrentProdPackages();
$pkgarr = $v['pkgarr'];
file_put_contents($jfilename, json_encode($pkgarr));
// Now loop over them again to generate the main package json
foreach ($pkgarr as $pkg => $data) {
$latestdev = $data['latestdev'];
$latestprod = $data['latestprod'];
foreach ($data['releases'] as $rel => $d) {
if ($rel == $latestdev) {
$devpackages[$pkg] = $d;
$devpackages[$pkg]['rel'] = $rel;
}
if ($rel == $latestprod) {
$prodpackages[$pkg] = $d;
$prodpackages[$pkg]['rel'] = $rel;
}
}
}
if ($installdevpkgs) {
$src = $devpackages;
} else {
$src = $prodpackages;
}
$isopackages = [];
foreach ($src as $p => $d) {
foreach (['squashfs', 'meta', 'sha256file'] as $s) {
$srcfile = $d[$s];
if (!file_exists($srcfile)) {
throw new \Exception("Hang on $srcfile does not exist in package $p");
}
$destfile = $dest . "/" . basename($srcfile);
copy($srcfile, $destfile);
}
$tmparr = [];
foreach (['commit', 'utime', 'descr', 'modified', 'author', 'date', 'rel'] as $x) {
$tmparr[$x] = $d[$x];
}
$isopackages[$p] = $tmparr;
}
file_put_contents("$dest/packages.json", json_encode($isopackages));
print "Saved to $dest/packages.json\n";