colliding_balls
Version:
This is simple module that will generate a canvas which will have balls that can collide and move randomly.
138 lines (121 loc) • 4.04 kB
JavaScript
const fs = require("fs");
const path = require("path");
const bent = require("bent");
const git = require("simple-git")();
const { execSync, spawnSync } = require("child_process");
const { promisify } = require("util");
const exec = (str, cwd) => {
const [cmd, ...args] = str.split(" ");
const ret = spawnSync(cmd, args, { cwd, stdio: "inherit" });
if (ret.status) {
console.error(ret);
console.error(`Error: ${str} returned non-zero exit code`);
process.exit(ret.status);
}
return ret;
};
const getlog = promisify(git.log.bind(git));
const get = bent(
"json",
process.env.NPM_REGISTRY_URL || "https://registry.npmjs.org/"
);
const event = JSON.parse(
fs.readFileSync("/github/workflow/event.json").toString()
);
const deployDir = path.join(process.cwd(), process.env.DEPLOY_DIR || "./");
const srcPackageDir = path.join(
process.cwd(),
process.env.SRC_PACKAGE_DIR || "./"
);
console.log(" using deploy directory : " + deployDir);
console.log("using src directory (package.json) : " + srcPackageDir);
let pkg = require(path.join(deployDir, "package.json"));
const run = async () => {
if (!process.env.NPM_AUTH_TOKEN)
throw new Error("Merge-release requires NPM_AUTH_TOKEN");
let latest;
try {
latest = await get(pkg.name + "/latest");
} catch (e) {
// unpublished
}
let messages;
if (latest) {
if (latest.gitHead === process.env.GITHUB_SHA)
return console.log("SHA matches latest release, skipping.");
if (latest.gitHead) {
try {
let logs = await getlog({
from: latest.gitHead,
to: process.env.GITHUB_SHA,
});
messages = logs.all.map((r) => r.message + "\n" + r.body);
} catch (e) {
latest = null;
}
// g.log({from: 'f0002b6c9710f818b9385aafeb1bde994fe3b370', to: '53a92ca2d1ea3c55977f44d93e48e31e37d0bc69'}, (err, l) => console.log(l.all.map(r => r.message + '\n' + r.body)))
} else {
latest = null;
}
}
if (!latest) {
messages = (event.commits || []).map(
(commit) => commit.message + "\n" + commit.body
);
}
let version = "patch";
if (
messages
.map(
(message) =>
message.includes("BREAKING CHANGE") || message.includes("!:")
)
.includes(true)
) {
version = "major";
} else if (
messages
.map((message) => message.toLowerCase().startsWith("feat"))
.includes(true)
) {
version = "minor";
}
const setVersion = (version) => {
const json = execSync(`jq '.version="${version}"' package.json`, {
cwd: srcPackageDir,
});
fs.writeFileSync(path.join(srcPackageDir, "package.json"), json);
if (deployDir !== "./") {
const deployJson = execSync(`jq '.version="${version}"' package.json`, {
cwd: deployDir,
});
fs.writeFileSync(path.join(deployDir, "package.json"), deployJson);
}
};
let currentVersion = execSync(`npm view ${pkg.name} version`, {
cwd: srcPackageDir,
}).toString();
setVersion(currentVersion);
console.log("current:", currentVersion, "/", "version:", version);
let newVersion = execSync(`npm version --git-tag-version=false ${version}`, {
cwd: srcPackageDir,
}).toString();
newVersion = newVersion.replace(/(\r\n|\n|\r)/gm, "");
setVersion(newVersion.slice(1));
console.log("new version:", newVersion);
if (pkg.scripts && pkg.scripts.publish) {
exec(`npm run publish`, deployDir);
} else {
exec(`npm publish`, deployDir);
}
exec(`git checkout package.json`); // cleanup
exec(`git tag ${newVersion}`);
exec(`echo "::set-output name=version::${newVersion}"`); // set action event.{STEP_ID}.output.version
/*
const env = process.env
const remote = `https://${env.GITHUB_ACTOR}:${env.GITHUB_TOKEN}@github.com/${env.GITHUB_REPOSITORY}.git`
exec(`git push ${remote} --tags`)
*/
};
run();