File: Drakefile.ts

package info (click to toggle)
rustc 1.85.0%2Bdfsg3-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental, sid, trixie
  • size: 893,396 kB
  • sloc: xml: 158,127; python: 35,830; javascript: 19,497; cpp: 19,002; sh: 17,245; ansic: 13,127; asm: 4,376; makefile: 1,051; perl: 29; lisp: 29; ruby: 19; sql: 11
file content (79 lines) | stat: -rw-r--r-- 1,941 bytes parent folder | download | duplicates (21)
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/drake@v1.5.0/mod.ts";

const SHOULD_CARGO_PUBLISH = true;
const SHOULD_PUSH_DOCS_TO_GITHUB_PAGES = false;

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, error } = 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;
}