summaryrefslogtreecommitdiffstats
path: root/vendor/opener/Drakefile.ts
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/opener/Drakefile.ts')
-rwxr-xr-xvendor/opener/Drakefile.ts79
1 files changed, 79 insertions, 0 deletions
diff --git a/vendor/opener/Drakefile.ts b/vendor/opener/Drakefile.ts
new file mode 100755
index 000000000..476cb23d9
--- /dev/null
+++ b/vendor/opener/Drakefile.ts
@@ -0,0 +1,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;
+}