Repository navigation
Expand file tree
/
Copy pathyeetfile.js
More file actions
126 lines (110 loc) · 4.23 KB
/
Copy pathyeetfile.js
File metadata and controls
126 lines (110 loc) · 4.23 KB
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
$`npm run assets`;
const methods = [
// [goos, goarch, [build, methods]]
["freebsd", "amd64", [tarball]],
["freebsd", "arm64", [tarball]],
["linux", "amd64", [deb, rpm, sysext, tarball]],
["linux", "arm64", [deb, rpm, sysext, tarball]],
["linux", "ppc64le", [deb, rpm, sysext, tarball]],
["linux", "riscv64", [deb, rpm, sysext, tarball]],
["netbsd", "amd64", [tarball]],
["netbsd", "arm64", [tarball]],
["windows", "amd64", [tarball]],
["windows", "arm64", [tarball]],
];
const packages = methods.map(([goos, goarch, methods]) => {
return methods.map((method) => {
const exe = goos == "windows" ? ".exe" : "";
return method.build({
name: "anubis",
description:
"Anubis weighs the souls of incoming HTTP requests and uses a sha256 proof-of-work challenge in order to protect upstream resources from scraper bots.",
homepage: "https://anubis.techaro.lol",
license: "MIT",
platform: goos,
goarch,
documentation: {
"./README.md": "README.md",
"./LICENSE": "LICENSE",
"./data/botPolicies.yaml": "botPolicies.yaml",
},
build: ({ bin, etc, systemd, doc }) => {
$`go build -trimpath -o ${bin}/anubis${exe} -ldflags '-s -w -extldflags "-static"' ./cmd/anubis`;
$`go build -trimpath -o ${bin}/anubis-robots2policy${exe} -ldflags '-s -w -extldflags "-static"' ./cmd/robots2policy`;
if (goos == "linux") {
file.install("./run/anubis@.service", `${systemd}/anubis@.service`);
file.install("./run/default.env", `${etc}/default.env`);
}
if (goos == "linux" && method.name == "tarball") {
$`mkdir -p ${etc}/openrc`;
const openrc = `${etc}/openrc`;
file.install("./run/openrc/anubis.confd", `${openrc}/anubis.confd`);
file.install("./run/openrc/anubis.initd", `${openrc}/anubis.initd`);
}
if (goos == "freebsd") {
$`mkdir -p ${etc}/rc`;
const rc = `${etc}/rc`;
file.install("./run/anubis.freebsd", `${rc}/anubis`);
}
$`mkdir -p ${doc}/docs`;
$`cp -a docs/docs ${doc}`;
$`find ${doc} -name _category_.json -delete`;
$`mkdir -p ${doc}/data`;
$`cp -a data/apps ${doc}/data/apps`;
$`cp -a data/bots ${doc}/data/bots`;
$`cp -a data/clients ${doc}/data/clients`;
$`cp -a data/common ${doc}/data/common`;
$`cp -a data/crawlers ${doc}/data/crawlers`;
$`cp -a data/meta ${doc}/data/meta`;
},
});
});
});
// NOTE(Xe): Fixes #217. This is a "half baked" tarball that includes the harder
// parts for deterministic distros already done. Distributions like NixOS, Gentoo
// and *BSD ports have a difficult time fitting the square peg of their dependency
// model into the bazaar of round holes that various modern languages use. Needless
// to say, this makes adoption easier.
tarball.build({
name: "anubis-src-vendor",
license: "MIT",
// XXX(Xe): This is needed otherwise go will be very sad.
platform: yeet.goos,
goarch: yeet.goarch,
build: ({ out }) => {
// prepare clean checkout in $out
$`git archive --format=tar HEAD | tar xC ${out}`;
// vendor Go dependencies
$`cd ${out} && go mod vendor`;
// write VERSION file
$`echo ${git.tag()} > ${out}/VERSION`;
},
mkFilename: ({ name, version }) => `${name}-${version}`,
});
tarball.build({
name: "anubis-src-vendor-npm",
license: "MIT",
// XXX(Xe): This is needed otherwise go will be very sad.
platform: yeet.goos,
goarch: yeet.goarch,
build: ({ out }) => {
// prepare clean checkout in $out
$`git archive --format=tar HEAD | tar xC ${out}`;
// vendor Go dependencies
$`cd ${out} && go mod vendor`;
// build NPM-bound dependencies
$`cd ${out} && npm ci && npm run assets && rm -rf node_modules`;
// write VERSION file
$`echo ${git.tag()} > ${out}/VERSION`;
},
mkFilename: ({ name, version }) => `${name}-${version}`,
});
// Build MSI installers from the Windows zips that were just built.
packages
.flat()
.filter((pkg) => pkg.includes("windows"))
.filter((pkg) => pkg.endsWith(".zip"))
.forEach((zip) => {
const msiPath = zip.replace(/\.zip$/, ".msi");
$`go run ./internal/cmd/mkmsi --zip ${zip} --out ${msiPath}`;
});