mirror of
https://github.com/changesets/action
synced 2026-10-26 16:39:56 +08:00
* Validate that projects use Changesets CLI v3 and direct Changesets CLI v2 users to `changesets/action@v1` * better spy/mocking * fmt * shuffle
80 lines
2.2 KiB
TypeScript
80 lines
2.2 KiB
TypeScript
import fs from "node:fs/promises";
|
|
import os from "node:os";
|
|
import * as core from "@actions/core";
|
|
import { GitHub } from "../github.ts";
|
|
import { runPublish } from "../run.ts";
|
|
import {
|
|
downloadArtifact,
|
|
getOptionalInput,
|
|
getRequiredInput,
|
|
validateChangesetsCliVersion,
|
|
} from "../utils.ts";
|
|
|
|
try {
|
|
await main();
|
|
} catch (err) {
|
|
core.setFailed((err as Error).message);
|
|
}
|
|
|
|
async function main() {
|
|
// If the user needs to change the cwd, set `working-directory` in the step instead
|
|
const cwd = process.cwd();
|
|
await validateChangesetsCliVersion(cwd);
|
|
|
|
const githubToken = getRequiredInput("github-token");
|
|
const script = getOptionalInput("script");
|
|
const packDirArtifactId = getOptionalInput("pack-dir-artifact-id");
|
|
const createGithubReleases = core.getBooleanInput("create-github-releases");
|
|
const pushGitTags = core.getBooleanInput("push-git-tags");
|
|
|
|
if (createGithubReleases && !pushGitTags) {
|
|
throw new Error(
|
|
"The input 'create-github-releases' is set to true, but 'push-git-tags' is set to false. " +
|
|
"Creating GitHub releases requires pushing git tags. Please set 'push-git-tags' to true " +
|
|
"or set 'create-github-releases' to false.",
|
|
);
|
|
}
|
|
|
|
// NOTE: Always use API mode here as publish does not need a commit-mode.
|
|
const github = new GitHub({ cwd, githubToken, commitMode: "github-api" });
|
|
|
|
const fromPackDir = packDirArtifactId
|
|
? await downloadArtifact(
|
|
process.env.RUNNER_TEMP ?? (await fs.realpath(os.tmpdir())),
|
|
Number(packDirArtifactId),
|
|
"changeset-pack",
|
|
)
|
|
: undefined;
|
|
|
|
const result = await runPublish({
|
|
script,
|
|
github,
|
|
createGithubReleases,
|
|
pushGitTags,
|
|
cwd,
|
|
fromPackDir,
|
|
});
|
|
|
|
if (result.published) {
|
|
core.setOutput("published", "true");
|
|
core.setOutput(
|
|
"published-packages",
|
|
JSON.stringify(result.publishedPackages),
|
|
);
|
|
} else {
|
|
core.setOutput("published", "false");
|
|
}
|
|
|
|
if (result.exitCode !== 0) {
|
|
throw new Error(
|
|
`Publish command exited with code ${result.exitCode}${
|
|
result.published
|
|
? `, but some packages were published: ${result.publishedPackages
|
|
.map((p) => `${p.name}@${p.version}`)
|
|
.join(", ")}`
|
|
: ""
|
|
}`,
|
|
);
|
|
}
|
|
}
|