-
Notifications
You must be signed in to change notification settings - Fork 1
/
Drakefile.ts
79 lines (66 loc) · 1.89 KB
/
Drakefile.ts
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
import {
abort,
desc,
env,
run,
sh,
shCapture,
task,
} from "https://deno.land/x/[email protected]/mod.ts";
const SHOULD_CARGO_PUBLISH = false;
const SHOULD_PUSH_DOCS_TO_GITHUB_PAGES = true;
desc("Release a new version of the crate");
task("release", [], async () => {
const version = env("version");
if (version == null) {
abort("The version to release was not specified");
}
if (!isValidSemVer(version)) {
abort("The given version is not a valid SemVer string");
}
await sh("cargo test --all-features");
await sh("cargo fmt -- --check");
await sh("git diff HEAD --exit-code --name-only");
if (SHOULD_CARGO_PUBLISH) {
await sh("cargo publish --dry-run");
}
const tagName = `v${version}`;
await sh(`git tag -a ${tagName} -m "Release ${tagName}"`);
await sh("git push origin master");
await sh(`git push origin ${tagName}`);
if (SHOULD_CARGO_PUBLISH) {
await sh("cargo publish");
}
if (SHOULD_PUSH_DOCS_TO_GITHUB_PAGES) {
await run("upload-docs");
}
});
desc("Upload docs to GitHub Pages");
task("upload-docs", [], async () => {
let origin_url;
{
const { code, output } = await shCapture("git remote get-url origin");
if (code == 0) {
origin_url = output.trim();
} else {
abort("Error getting origin's url from git");
}
}
await sh("cargo clean --doc");
await sh("cargo doc --no-deps");
{
const run = (command: string) => sh(command, { cwd: "target/doc" });
await run("git init");
await run("git add .");
await run('git commit -am "(doc upload)"');
await run(`git push -f ${origin_url} master:gh-pages`);
}
});
run();
function isValidSemVer(s: string): boolean {
return (
s.match(
/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/
) != null
);
}