mirror of
https://github.com/changesets/action
synced 2026-10-26 16:39:56 +08:00
* Expect publish output to be shared through a file * throw at all times * match latest changes * fmt * rename things * update changesets * add changeset
68 lines
1.7 KiB
TypeScript
68 lines
1.7 KiB
TypeScript
import { Buffer } from "node:buffer";
|
|
import path from "node:path";
|
|
import { exec, getExecOutput } from "@actions/exec";
|
|
import pkgJson from "../package.json" with { type: "json" };
|
|
|
|
const tag = `v${pkgJson.version}`;
|
|
const releaseLine = `v${pkgJson.version.split(".")[0]}`;
|
|
const isPrerelease = pkgJson.version.includes("-");
|
|
const githubToken = process.env.GITHUB_TOKEN;
|
|
if (!githubToken) {
|
|
throw new Error("GITHUB_TOKEN is required");
|
|
}
|
|
const basic = Buffer.from(`x-access-token:${githubToken}`).toString("base64");
|
|
const gitEnv = {
|
|
...process.env,
|
|
GIT_CONFIG_COUNT: "1",
|
|
GIT_CONFIG_KEY_0: "http.https://github.com/.extraheader",
|
|
GIT_CONFIG_VALUE_0: `AUTHORIZATION: basic ${basic}`,
|
|
};
|
|
|
|
process.chdir(path.join(import.meta.dirname, ".."));
|
|
|
|
(async () => {
|
|
const { exitCode, stderr } = await getExecOutput(
|
|
`git`,
|
|
["ls-remote", "--exit-code", "origin", "--tags", `refs/tags/${tag}`],
|
|
{
|
|
ignoreReturnCode: true,
|
|
},
|
|
);
|
|
if (exitCode === 0) {
|
|
console.log(
|
|
`Action is not being published because version ${tag} is already published`,
|
|
);
|
|
return;
|
|
}
|
|
if (exitCode !== 2) {
|
|
throw new Error(`git ls-remote exited with ${exitCode}:\n${stderr}`);
|
|
}
|
|
|
|
await exec("git", ["checkout", "--detach"]);
|
|
await exec("git", ["add", "--force", "dist"]);
|
|
await exec("git", ["commit", "-m", tag]);
|
|
|
|
await exec("changeset", ["git-tag"]);
|
|
|
|
if (isPrerelease) {
|
|
await exec("git", ["push", "origin", `refs/tags/${tag}`], {
|
|
env: gitEnv,
|
|
});
|
|
return;
|
|
}
|
|
|
|
await exec(
|
|
"git",
|
|
[
|
|
"push",
|
|
"--force",
|
|
"--follow-tags",
|
|
"origin",
|
|
`HEAD:refs/heads/${releaseLine}`,
|
|
],
|
|
{
|
|
env: gitEnv,
|
|
},
|
|
);
|
|
})();
|