mirror of
https://github.com/changesets/action
synced 2026-10-26 16:39:56 +08:00
Add select-mode, version, pack and publish sub-actions (#656)
* Add select-mode, version, and publish sub-actions * Rename * No github-token needed for select-mode for now * extend select-mode with publish-plan check and upload * Rename base-branch to pr-base-branch * add `pack` subaction * `--from-pack` support in the publish subaction * rename CLI arg * update rolldown config * rename pack dir input/output * tweak retendion days --------- Co-authored-by: Mateusz Burzyński <mateuszburzynski@gmail.com>
This commit is contained in:
co-authored by
Mateusz Burzyński
parent
5649ff41b8
commit
a12d90de83
@@ -0,0 +1,82 @@
|
||||
import fs from "node:fs/promises";
|
||||
import os from "node:os";
|
||||
import path from "node:path";
|
||||
import artifact from "@actions/artifact";
|
||||
import * as core from "@actions/core";
|
||||
import { downloadArtifact, execChangesetsCli } from "../utils.ts";
|
||||
|
||||
try {
|
||||
await main();
|
||||
} catch (err) {
|
||||
core.setFailed((err as Error).message);
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const publishPlanArtifactId = core.getInput("publish-plan-artifact-id");
|
||||
|
||||
// If the user needs to change the cwd, set `working-directory` in the step instead
|
||||
const cwd = process.cwd();
|
||||
const tmpDir = process.env.RUNNER_TEMP ?? (await fs.realpath(os.tmpdir()));
|
||||
const outDir = path.join(tmpDir, `changeset-pack-${Date.now()}`);
|
||||
|
||||
await pack(cwd, {
|
||||
outDir,
|
||||
publishPlanPath: publishPlanArtifactId
|
||||
? await downloadPublishPlanArtifact(tmpDir, Number(publishPlanArtifactId))
|
||||
: undefined,
|
||||
});
|
||||
|
||||
const packDirArtifact = await artifact.uploadArtifact(
|
||||
`changeset-pack-${Date.now()}`,
|
||||
await getFiles(outDir),
|
||||
outDir,
|
||||
{
|
||||
retentionDays: 30,
|
||||
},
|
||||
);
|
||||
if (packDirArtifact.id === undefined) {
|
||||
throw new Error("Packed artifact upload did not return an artifact id");
|
||||
}
|
||||
core.setOutput("pack-dir-artifact-id", String(packDirArtifact.id));
|
||||
}
|
||||
|
||||
async function pack(
|
||||
cwd: string,
|
||||
args: {
|
||||
outDir: string;
|
||||
publishPlanPath?: string;
|
||||
},
|
||||
) {
|
||||
const cliArgs = ["pack", "--out-dir", args.outDir];
|
||||
if (args.publishPlanPath) {
|
||||
cliArgs.push("--from-plan", args.publishPlanPath);
|
||||
}
|
||||
|
||||
await execChangesetsCli(cliArgs, {
|
||||
cwd,
|
||||
env: process.env,
|
||||
});
|
||||
}
|
||||
|
||||
async function downloadPublishPlanArtifact(tmpDir: string, artifactId: number) {
|
||||
const downloadPath = await downloadArtifact(
|
||||
tmpDir,
|
||||
artifactId,
|
||||
"changeset-publish-plan",
|
||||
);
|
||||
return path.join(downloadPath, "publish-plan.json");
|
||||
}
|
||||
|
||||
async function getFiles(dir: string): Promise<string[]> {
|
||||
const entries = await fs.readdir(dir, { withFileTypes: true });
|
||||
const files = await Promise.all(
|
||||
entries.map(async (entry) => {
|
||||
const entryPath = path.join(dir, entry.name);
|
||||
if (entry.isDirectory()) {
|
||||
return getFiles(entryPath);
|
||||
}
|
||||
return [entryPath];
|
||||
}),
|
||||
);
|
||||
return files.flat();
|
||||
}
|
||||
Reference in New Issue
Block a user