pressship 0.1.3 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +282 -356
- package/assets/logo-new.png +0 -0
- package/assets/pressship-dark.png +0 -0
- package/assets/pressship-square-dark.png +0 -0
- package/assets/pressship-square.png +0 -0
- package/assets/pressship-symbol-dark.png +0 -0
- package/assets/pressship-symbol.png +0 -0
- package/assets/pressship-wordmark-dark.png +0 -0
- package/assets/pressship-wordmark.png +0 -0
- package/assets/pressship.png +0 -0
- package/dist/cli.js +22 -2
- package/dist/cli.js.map +1 -1
- package/dist/package/ignore.js +4 -0
- package/dist/package/ignore.js.map +1 -1
- package/dist/plugin/discover.d.ts +8 -0
- package/dist/plugin/discover.js +27 -1
- package/dist/plugin/discover.js.map +1 -1
- package/dist/plugin/list.d.ts +24 -0
- package/dist/plugin/list.js +174 -0
- package/dist/plugin/list.js.map +1 -0
- package/dist/svn/credentials.d.ts +9 -0
- package/dist/svn/credentials.js +94 -0
- package/dist/svn/credentials.js.map +1 -0
- package/dist/svn/get.d.ts +45 -0
- package/dist/svn/get.js +139 -0
- package/dist/svn/get.js.map +1 -0
- package/dist/svn/release.d.ts +2 -0
- package/dist/svn/release.js +113 -18
- package/dist/svn/release.js.map +1 -1
- package/dist/svn/subversion.d.ts +18 -0
- package/dist/svn/subversion.js +171 -0
- package/dist/svn/subversion.js.map +1 -0
- package/dist/utils/paths.d.ts +1 -0
- package/dist/utils/paths.js +3 -0
- package/dist/utils/paths.js.map +1 -1
- package/dist/wordpress-org/publish.d.ts +2 -0
- package/dist/wordpress-org/publish.js +16 -8
- package/dist/wordpress-org/publish.js.map +1 -1
- package/package.json +2 -1
package/dist/svn/get.js
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { execa } from "execa";
|
|
2
|
+
import { mkdir, readdir } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { slugFromHostedTarget } from "../plugin/info.js";
|
|
6
|
+
import { ui } from "../ui.js";
|
|
7
|
+
import { pathExists } from "../utils/paths.js";
|
|
8
|
+
import { ensureSvnAvailable } from "./subversion.js";
|
|
9
|
+
const getOptionsSchema = z.object({
|
|
10
|
+
json: z.boolean().default(false),
|
|
11
|
+
installSvn: z.boolean().default(true)
|
|
12
|
+
});
|
|
13
|
+
export async function getPlugin(slugOrUrl, destination, rawOptions = {}) {
|
|
14
|
+
const options = getOptionsSchema.parse(rawOptions);
|
|
15
|
+
const slug = slugFromHostedTarget(slugOrUrl);
|
|
16
|
+
const checkoutPath = resolveCheckoutPath(slug, destination);
|
|
17
|
+
const runtimeOptions = {
|
|
18
|
+
installSvn: options.installSvn,
|
|
19
|
+
interactive: !options.json && process.stdin.isTTY,
|
|
20
|
+
quiet: options.json
|
|
21
|
+
};
|
|
22
|
+
await ensureSvnAvailable({ autoInstall: runtimeOptions.installSvn, interactive: runtimeOptions.interactive });
|
|
23
|
+
const result = options.json
|
|
24
|
+
? await checkoutOrUpdatePlugin(slug, checkoutPath, runtimeOptions)
|
|
25
|
+
: await ui.task("Preparing SVN working copy", () => checkoutOrUpdatePlugin(slug, checkoutPath, runtimeOptions), (value) => value.action === "checkout" ? `Checked out ${value.slug}` : `Updated ${value.slug}`);
|
|
26
|
+
if (options.json) {
|
|
27
|
+
console.log(JSON.stringify(result, null, 2));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
printSvnGetResult(result);
|
|
31
|
+
}
|
|
32
|
+
export async function checkoutOrUpdatePlugin(slug, checkoutPath, options = {}) {
|
|
33
|
+
await ensureSvnAvailable({ autoInstall: options.installSvn, interactive: options.interactive });
|
|
34
|
+
const svnUrl = getPluginSvnUrl(slug);
|
|
35
|
+
const action = await resolveSvnGetAction(checkoutPath);
|
|
36
|
+
const commandOptions = { capture: options.quiet };
|
|
37
|
+
if (action === "checkout") {
|
|
38
|
+
await mkdir(path.dirname(checkoutPath), { recursive: true });
|
|
39
|
+
await runSvn(["checkout", svnUrl, checkoutPath], process.cwd(), commandOptions);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
await runSvn(["update"], checkoutPath, commandOptions);
|
|
43
|
+
}
|
|
44
|
+
const info = parseSvnInfo(await runSvn(["info"], checkoutPath, { capture: true }));
|
|
45
|
+
return {
|
|
46
|
+
slug,
|
|
47
|
+
action,
|
|
48
|
+
svnUrl,
|
|
49
|
+
path: checkoutPath,
|
|
50
|
+
info,
|
|
51
|
+
layout: await readSvnLayout(checkoutPath)
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export function resolveCheckoutPath(slug, destination) {
|
|
55
|
+
return path.resolve(destination ?? slug);
|
|
56
|
+
}
|
|
57
|
+
export function getPluginSvnUrl(slug) {
|
|
58
|
+
return `https://plugins.svn.wordpress.org/${slug}`;
|
|
59
|
+
}
|
|
60
|
+
export async function resolveSvnGetAction(checkoutPath) {
|
|
61
|
+
if (!pathExists(checkoutPath)) {
|
|
62
|
+
return "checkout";
|
|
63
|
+
}
|
|
64
|
+
if (pathExists(path.join(checkoutPath, ".svn"))) {
|
|
65
|
+
return "update";
|
|
66
|
+
}
|
|
67
|
+
const entries = await readdir(checkoutPath);
|
|
68
|
+
if (entries.length === 0) {
|
|
69
|
+
return "checkout";
|
|
70
|
+
}
|
|
71
|
+
throw new Error(`Target directory already exists and is not an SVN working copy: ${checkoutPath}. Choose another path or remove the directory.`);
|
|
72
|
+
}
|
|
73
|
+
export function parseSvnInfo(output) {
|
|
74
|
+
const values = Object.fromEntries(output
|
|
75
|
+
.split(/\r?\n/)
|
|
76
|
+
.map((line) => line.match(/^([^:]+):\s*(.*)$/))
|
|
77
|
+
.filter((match) => Boolean(match))
|
|
78
|
+
.map((match) => [match[1].toLowerCase(), match[2]]));
|
|
79
|
+
return {
|
|
80
|
+
workingCopyRoot: values["working copy root path"],
|
|
81
|
+
url: values.url,
|
|
82
|
+
relativeUrl: values["relative url"],
|
|
83
|
+
repositoryRoot: values["repository root"],
|
|
84
|
+
repositoryUuid: values["repository uuid"],
|
|
85
|
+
revision: values.revision,
|
|
86
|
+
nodeKind: values["node kind"],
|
|
87
|
+
schedule: values.schedule,
|
|
88
|
+
lastChangedAuthor: values["last changed author"],
|
|
89
|
+
lastChangedRevision: values["last changed rev"],
|
|
90
|
+
lastChangedDate: values["last changed date"]
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
async function readSvnLayout(checkoutPath) {
|
|
94
|
+
const tagsPath = path.join(checkoutPath, "tags");
|
|
95
|
+
const tagEntries = pathExists(tagsPath) ? await readdir(tagsPath, { withFileTypes: true }) : [];
|
|
96
|
+
return {
|
|
97
|
+
trunk: pathExists(path.join(checkoutPath, "trunk")),
|
|
98
|
+
assets: pathExists(path.join(checkoutPath, "assets")),
|
|
99
|
+
tags: pathExists(tagsPath),
|
|
100
|
+
tagCount: tagEntries.filter((entry) => entry.isDirectory()).length
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
async function runSvn(args, cwd, options = {}) {
|
|
104
|
+
const result = await execa("svn", args, {
|
|
105
|
+
cwd,
|
|
106
|
+
reject: false,
|
|
107
|
+
stdout: options.capture ? "pipe" : "inherit",
|
|
108
|
+
stderr: options.capture ? "pipe" : "inherit"
|
|
109
|
+
}).catch((error) => {
|
|
110
|
+
if (isMissingSvnError(error)) {
|
|
111
|
+
throw new Error("`svn` is required for `pressship get`. Install Subversion and try again.");
|
|
112
|
+
}
|
|
113
|
+
throw error;
|
|
114
|
+
});
|
|
115
|
+
if (result.failed && result.exitCode === undefined && !result.stderr && !result.stdout) {
|
|
116
|
+
throw new Error("`svn` is required for `pressship get`. Install Subversion and try again.");
|
|
117
|
+
}
|
|
118
|
+
if (result.exitCode !== 0) {
|
|
119
|
+
throw new Error(result.stderr || result.stdout || `svn ${args.join(" ")} failed.`);
|
|
120
|
+
}
|
|
121
|
+
return `${result.stdout ?? ""}\n${result.stderr ?? ""}`.trim();
|
|
122
|
+
}
|
|
123
|
+
function isMissingSvnError(error) {
|
|
124
|
+
return (error instanceof Error &&
|
|
125
|
+
("code" in error ? error.code === "ENOENT" : /ENOENT|not found/i.test(error.message)));
|
|
126
|
+
}
|
|
127
|
+
function printSvnGetResult(result) {
|
|
128
|
+
ui.section(result.slug);
|
|
129
|
+
ui.keyValue("Action", result.action === "checkout" ? "checked out" : "updated");
|
|
130
|
+
ui.keyValue("SVN", ui.path(result.svnUrl));
|
|
131
|
+
ui.keyValue("Path", ui.path(result.path));
|
|
132
|
+
ui.keyValue("Revision", result.info.revision ?? "unknown");
|
|
133
|
+
ui.keyValue("Last rev", result.info.lastChangedRevision ?? "unknown");
|
|
134
|
+
ui.keyValue("Last author", result.info.lastChangedAuthor ?? "unknown");
|
|
135
|
+
ui.keyValue("Trunk", result.layout.trunk ? ui.value("available") : "missing");
|
|
136
|
+
ui.keyValue("Assets", result.layout.assets ? ui.value("available") : "missing");
|
|
137
|
+
ui.keyValue("Tags", result.layout.tags ? `${result.layout.tagCount}` : "missing");
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../src/svn/get.ts"],"names":[],"mappings":"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"}
|
package/dist/svn/release.d.ts
CHANGED
|
@@ -9,9 +9,11 @@ declare const releaseOptionsSchema: z.ZodObject<{
|
|
|
9
9
|
dryRun: z.ZodDefault<z.ZodBoolean>;
|
|
10
10
|
yes: z.ZodDefault<z.ZodBoolean>;
|
|
11
11
|
ignore: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
12
|
+
installSvn: z.ZodDefault<z.ZodBoolean>;
|
|
12
13
|
}, z.core.$strip>;
|
|
13
14
|
export type ReleaseOptions = z.input<typeof releaseOptionsSchema>;
|
|
14
15
|
export declare function release(pluginPath: string | undefined, rawOptions: ReleaseOptions): Promise<void>;
|
|
15
16
|
export declare function createReleaseCommandPlan(slug: string, svnDir: string, version: string, message: string, username?: string): CommandPlan[];
|
|
16
17
|
export declare function svnRepositoryExists(slug: string): Promise<boolean>;
|
|
18
|
+
export declare function assertReleaseVersionIsNew(version: string, svnDir: string): Promise<void>;
|
|
17
19
|
export {};
|
package/dist/svn/release.js
CHANGED
|
@@ -4,9 +4,11 @@ import { cp, mkdir, readdir, rm } from "node:fs/promises";
|
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
import { listPackageFiles } from "../package/archive.js";
|
|
7
|
-
import { discoverPluginProject } from "../plugin/discover.js";
|
|
7
|
+
import { discoverPluginProject, resolvePluginProjectPath } from "../plugin/discover.js";
|
|
8
8
|
import { ui } from "../ui.js";
|
|
9
9
|
import { pathExists } from "../utils/paths.js";
|
|
10
|
+
import { resolveSvnCredentials, resolveSvnUsername } from "./credentials.js";
|
|
11
|
+
import { ensureSvnAvailable, isSvnAvailable } from "./subversion.js";
|
|
10
12
|
const releaseOptionsSchema = z.object({
|
|
11
13
|
slug: z.string().optional(),
|
|
12
14
|
version: z.string().optional(),
|
|
@@ -15,25 +17,32 @@ const releaseOptionsSchema = z.object({
|
|
|
15
17
|
message: z.string().optional(),
|
|
16
18
|
dryRun: z.boolean().default(false),
|
|
17
19
|
yes: z.boolean().default(false),
|
|
18
|
-
ignore: z.array(z.string()).default([])
|
|
20
|
+
ignore: z.array(z.string()).default([]),
|
|
21
|
+
installSvn: z.boolean().default(true)
|
|
19
22
|
});
|
|
20
23
|
export async function release(pluginPath, rawOptions) {
|
|
21
24
|
const options = releaseOptionsSchema.parse(rawOptions);
|
|
22
25
|
ui.intro(options.dryRun ? "Dry-run SVN release" : "Release plugin to WordPress.org SVN");
|
|
23
|
-
const
|
|
26
|
+
const inputDir = path.resolve(pluginPath ?? (await input({ message: "Plugin directory", default: process.cwd() })));
|
|
27
|
+
const source = resolvePluginProjectPath(inputDir);
|
|
28
|
+
const rootDir = source.rootDir;
|
|
24
29
|
const project = await ui.task("Discovering WordPress plugin", () => discoverPluginProject(rootDir), (value) => `Discovered ${value.headers.pluginName}`);
|
|
25
30
|
const slug = options.slug ?? project.slug;
|
|
26
31
|
const version = options.version ?? project.version;
|
|
27
32
|
if (!version) {
|
|
28
33
|
throw new Error("Could not infer a plugin version. Pass --version or add Version to the plugin header.");
|
|
29
34
|
}
|
|
30
|
-
const svnDir = path.resolve(options.svnDir ?? path.join(process.cwd(), ".pressship-svn", slug));
|
|
35
|
+
const svnDir = path.resolve(options.svnDir ?? source.svnRootDir ?? path.join(process.cwd(), ".pressship-svn", slug));
|
|
31
36
|
const message = options.message ?? `Release ${slug} ${version}`;
|
|
32
|
-
const
|
|
37
|
+
const username = options.username ?? (options.dryRun ? undefined : await resolveSvnUsername());
|
|
38
|
+
const plan = createReleaseCommandPlan(slug, svnDir, version, message, username);
|
|
33
39
|
ui.section("Release");
|
|
34
40
|
ui.keyValue("SVN", ui.path(`https://plugins.svn.wordpress.org/${slug}`));
|
|
35
41
|
ui.keyValue("Working copy", ui.path(svnDir));
|
|
36
42
|
ui.keyValue("Version", ui.value(version));
|
|
43
|
+
if (username) {
|
|
44
|
+
ui.keyValue("SVN user", ui.value(username));
|
|
45
|
+
}
|
|
37
46
|
if (options.dryRun) {
|
|
38
47
|
ui.section("Dry-run command plan");
|
|
39
48
|
for (const command of plan) {
|
|
@@ -41,11 +50,22 @@ export async function release(pluginPath, rawOptions) {
|
|
|
41
50
|
}
|
|
42
51
|
return;
|
|
43
52
|
}
|
|
44
|
-
await
|
|
45
|
-
await ui.task("
|
|
46
|
-
await
|
|
53
|
+
await ensureSvnAvailable({ autoInstall: options.installSvn, interactive: process.stdin.isTTY });
|
|
54
|
+
await ui.task("Preparing SVN working copy", () => ensureWorkingCopy(slug, svnDir));
|
|
55
|
+
await assertReleaseVersionIsNew(version, svnDir);
|
|
56
|
+
const trunkDir = path.join(svnDir, "trunk");
|
|
57
|
+
if (samePath(rootDir, trunkDir)) {
|
|
58
|
+
ui.info("Using the current SVN trunk working copy.");
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
await ui.task("Syncing plugin files to trunk", () => syncTrunk(rootDir, trunkDir, options.ignore));
|
|
62
|
+
}
|
|
63
|
+
await syncAssets(rootDir, path.join(svnDir, "assets"));
|
|
64
|
+
await ui.task("Adding changed files to SVN", () => runSvn(["add", "--force", "."], svnDir));
|
|
47
65
|
await ui.task("Removing deleted files from SVN", () => deleteMissingFiles(svnDir));
|
|
48
66
|
await ui.task(`Creating tag ${version}`, () => createTag(version, svnDir));
|
|
67
|
+
await setAssetMimeTypes(svnDir);
|
|
68
|
+
await ui.task("Updating SVN working copy", () => runSvn(["update"], svnDir));
|
|
49
69
|
const status = await runSvn(["status"], svnDir, { capture: true });
|
|
50
70
|
ui.section("SVN status");
|
|
51
71
|
console.log(status || ui.muted("No SVN changes detected."));
|
|
@@ -58,21 +78,26 @@ export async function release(pluginPath, rawOptions) {
|
|
|
58
78
|
throw new Error("SVN release cancelled before commit.");
|
|
59
79
|
}
|
|
60
80
|
}
|
|
61
|
-
|
|
81
|
+
const credentials = await resolveSvnCredentials(username);
|
|
82
|
+
await ui.task("Committing SVN release", () => runSvn(["commit", "-m", message, ...svnCredentialArgs(credentials)], svnDir));
|
|
62
83
|
}
|
|
63
84
|
export function createReleaseCommandPlan(slug, svnDir, version, message, username) {
|
|
64
85
|
return [
|
|
65
86
|
{
|
|
66
87
|
command: "svn",
|
|
67
|
-
args: ["checkout", `https://plugins.svn.wordpress.org/${slug}`, svnDir
|
|
88
|
+
args: ["checkout", `https://plugins.svn.wordpress.org/${slug}`, svnDir]
|
|
68
89
|
},
|
|
69
|
-
{ command: "svn", args: ["add", "--force", "
|
|
90
|
+
{ command: "svn", args: ["add", "--force", "."], cwd: svnDir },
|
|
70
91
|
{ command: "svn", args: ["copy", "trunk", `tags/${version}`], cwd: svnDir },
|
|
92
|
+
{ command: "svn", args: ["update"], cwd: svnDir },
|
|
71
93
|
{ command: "svn", args: ["status"], cwd: svnDir },
|
|
72
|
-
{ command: "svn", args: ["commit", "-m", message, ...
|
|
94
|
+
{ command: "svn", args: ["commit", "-m", message, ...svnCredentialPreviewArgs(username)], cwd: svnDir }
|
|
73
95
|
];
|
|
74
96
|
}
|
|
75
97
|
export async function svnRepositoryExists(slug) {
|
|
98
|
+
if (!(await isSvnAvailable())) {
|
|
99
|
+
throw new Error("`svn` is not installed. Pressship can install it when you run a release or get command.");
|
|
100
|
+
}
|
|
76
101
|
const result = await execa("svn", ["info", `https://plugins.svn.wordpress.org/${slug}`], {
|
|
77
102
|
reject: false,
|
|
78
103
|
stdout: "pipe",
|
|
@@ -80,14 +105,20 @@ export async function svnRepositoryExists(slug) {
|
|
|
80
105
|
});
|
|
81
106
|
return result.exitCode === 0;
|
|
82
107
|
}
|
|
83
|
-
async function
|
|
108
|
+
export async function assertReleaseVersionIsNew(version, svnDir) {
|
|
109
|
+
if (!pathExists(path.join(svnDir, "tags", version))) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
throw new Error(`No version change detected. Version ${version} already exists in WordPress.org SVN, so it cannot be published again. Bump the plugin version with \`pressship version patch\` or pass --version before publishing.`);
|
|
113
|
+
}
|
|
114
|
+
async function ensureWorkingCopy(slug, svnDir) {
|
|
84
115
|
await mkdir(path.dirname(svnDir), { recursive: true });
|
|
85
116
|
try {
|
|
86
117
|
await runSvn(["info"], svnDir, { capture: true });
|
|
87
118
|
await runSvn(["update"], svnDir);
|
|
88
119
|
}
|
|
89
120
|
catch {
|
|
90
|
-
await runSvn(["checkout", `https://plugins.svn.wordpress.org/${slug}`, svnDir
|
|
121
|
+
await runSvn(["checkout", `https://plugins.svn.wordpress.org/${slug}`, svnDir], process.cwd());
|
|
91
122
|
}
|
|
92
123
|
}
|
|
93
124
|
async function syncTrunk(pluginRoot, trunkDir, ignore) {
|
|
@@ -101,6 +132,17 @@ async function syncTrunk(pluginRoot, trunkDir, ignore) {
|
|
|
101
132
|
await cp(source, destination);
|
|
102
133
|
}
|
|
103
134
|
}
|
|
135
|
+
async function syncAssets(pluginRoot, assetsDir) {
|
|
136
|
+
const sourceAssetsDir = path.join(pluginRoot, ".wordpress-org");
|
|
137
|
+
if (!pathExists(sourceAssetsDir)) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
await ui.task("Syncing WordPress.org assets", async () => {
|
|
141
|
+
await mkdir(assetsDir, { recursive: true });
|
|
142
|
+
await emptyDirectory(assetsDir);
|
|
143
|
+
await cp(sourceAssetsDir, assetsDir, { recursive: true });
|
|
144
|
+
});
|
|
145
|
+
}
|
|
104
146
|
async function emptyDirectory(directory) {
|
|
105
147
|
const entries = await readdir(directory, { withFileTypes: true });
|
|
106
148
|
for (const entry of entries) {
|
|
@@ -124,25 +166,75 @@ async function deleteMissingFiles(svnDir) {
|
|
|
124
166
|
async function createTag(version, svnDir) {
|
|
125
167
|
const tagPath = path.join(svnDir, "tags", version);
|
|
126
168
|
if (pathExists(tagPath)) {
|
|
127
|
-
throw new Error(`
|
|
169
|
+
throw new Error(`No version change detected. Version ${version} already exists in WordPress.org SVN, so it cannot be published again. Bump the plugin version with \`pressship version patch\` or pass --version before publishing.`);
|
|
128
170
|
}
|
|
129
171
|
await mkdir(path.dirname(tagPath), { recursive: true });
|
|
130
172
|
await runSvn(["copy", "trunk", `tags/${version}`], svnDir);
|
|
131
173
|
}
|
|
174
|
+
async function setAssetMimeTypes(svnDir) {
|
|
175
|
+
const assetsDir = path.join(svnDir, "assets");
|
|
176
|
+
if (!pathExists(assetsDir)) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const mimeTypes = new Map([
|
|
180
|
+
[".gif", "image/gif"],
|
|
181
|
+
[".jpg", "image/jpeg"],
|
|
182
|
+
[".jpeg", "image/jpeg"],
|
|
183
|
+
[".png", "image/png"],
|
|
184
|
+
[".svg", "image/svg+xml"]
|
|
185
|
+
]);
|
|
186
|
+
const entries = await readdir(assetsDir, { withFileTypes: true });
|
|
187
|
+
for (const entry of entries) {
|
|
188
|
+
if (!entry.isFile()) {
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
const mimeType = mimeTypes.get(path.extname(entry.name).toLowerCase());
|
|
192
|
+
if (mimeType) {
|
|
193
|
+
await runSvn(["propset", "svn:mime-type", mimeType, path.posix.join("assets", entry.name)], svnDir);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
132
197
|
async function runSvn(args, cwd, options = {}) {
|
|
133
198
|
const result = await execa("svn", args, {
|
|
134
199
|
cwd,
|
|
135
200
|
reject: false,
|
|
136
201
|
stdout: options.capture ? "pipe" : "inherit",
|
|
137
202
|
stderr: options.capture ? "pipe" : "inherit"
|
|
203
|
+
}).catch((error) => {
|
|
204
|
+
if (isMissingSvnError(error)) {
|
|
205
|
+
throw new Error("`svn` is required for WordPress.org SVN releases. Install Subversion and try again.");
|
|
206
|
+
}
|
|
207
|
+
throw error;
|
|
138
208
|
});
|
|
209
|
+
if (result.failed && result.exitCode === undefined && !result.stderr && !result.stdout) {
|
|
210
|
+
throw new Error("`svn` is required for WordPress.org SVN releases. Install Subversion and try again.");
|
|
211
|
+
}
|
|
139
212
|
if (result.exitCode !== 0) {
|
|
140
|
-
throw new Error(result.stderr || result.stdout || `svn ${args.join(" ")} failed.`);
|
|
213
|
+
throw new Error(result.stderr || result.stdout || `svn ${redactSvnArgs(args).join(" ")} failed.`);
|
|
141
214
|
}
|
|
142
215
|
return `${result.stdout ?? ""}\n${result.stderr ?? ""}`.trim();
|
|
143
216
|
}
|
|
144
|
-
function
|
|
145
|
-
return
|
|
217
|
+
function svnCredentialArgs(credentials) {
|
|
218
|
+
return [
|
|
219
|
+
"--no-auth-cache",
|
|
220
|
+
"--non-interactive",
|
|
221
|
+
"--username",
|
|
222
|
+
credentials.username,
|
|
223
|
+
"--password",
|
|
224
|
+
credentials.password
|
|
225
|
+
];
|
|
226
|
+
}
|
|
227
|
+
function svnCredentialPreviewArgs(username) {
|
|
228
|
+
return username
|
|
229
|
+
? ["--no-auth-cache", "--non-interactive", "--username", username, "--password", "<saved-svn-password>"]
|
|
230
|
+
: [];
|
|
231
|
+
}
|
|
232
|
+
function redactSvnArgs(args) {
|
|
233
|
+
return args.map((arg, index) => (args[index - 1] === "--password" ? "<redacted>" : arg));
|
|
234
|
+
}
|
|
235
|
+
function isMissingSvnError(error) {
|
|
236
|
+
return (error instanceof Error &&
|
|
237
|
+
("code" in error ? error.code === "ENOENT" : /ENOENT|not found/i.test(error.message)));
|
|
146
238
|
}
|
|
147
239
|
function formatCommand(command) {
|
|
148
240
|
const prefix = command.cwd ? `(cd ${command.cwd} && ` : "";
|
|
@@ -152,4 +244,7 @@ function formatCommand(command) {
|
|
|
152
244
|
function quoteArg(value) {
|
|
153
245
|
return /\s/.test(value) ? JSON.stringify(value) : value;
|
|
154
246
|
}
|
|
247
|
+
function samePath(left, right) {
|
|
248
|
+
return path.resolve(left) === path.resolve(right);
|
|
249
|
+
}
|
|
155
250
|
//# sourceMappingURL=release.js.map
|
package/dist/svn/release.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/svn/release.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/svn/release.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type SubversionInstallCommand = {
|
|
2
|
+
command: string;
|
|
3
|
+
args: string[];
|
|
4
|
+
};
|
|
5
|
+
export type SubversionInstallPlan = {
|
|
6
|
+
platform: NodeJS.Platform;
|
|
7
|
+
manager?: string;
|
|
8
|
+
commands: SubversionInstallCommand[];
|
|
9
|
+
instructions: string[];
|
|
10
|
+
};
|
|
11
|
+
export type EnsureSvnOptions = {
|
|
12
|
+
autoInstall?: boolean;
|
|
13
|
+
interactive?: boolean;
|
|
14
|
+
};
|
|
15
|
+
export declare function ensureSvnAvailable(options?: EnsureSvnOptions): Promise<void>;
|
|
16
|
+
export declare function isSvnAvailable(): Promise<boolean>;
|
|
17
|
+
export declare function getSubversionInstallPlan(platform: NodeJS.Platform, availableCommands: Iterable<string>): SubversionInstallPlan;
|
|
18
|
+
export declare function formatSubversionInstallInstructions(plan: SubversionInstallPlan): string;
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { confirm } from "@inquirer/prompts";
|
|
2
|
+
import { execa } from "execa";
|
|
3
|
+
import { ui } from "../ui.js";
|
|
4
|
+
const INSTALL_COMMANDS = ["brew", "apt-get", "dnf", "yum", "pacman", "zypper", "apk", "sudo", "winget", "choco"];
|
|
5
|
+
export async function ensureSvnAvailable(options = {}) {
|
|
6
|
+
if (await isSvnAvailable()) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
const plan = getSubversionInstallPlan(process.platform, await findAvailableInstallCommands());
|
|
10
|
+
const autoInstall = options.autoInstall ?? true;
|
|
11
|
+
const interactive = options.interactive ?? process.stdin.isTTY;
|
|
12
|
+
if (!autoInstall || plan.commands.length === 0) {
|
|
13
|
+
throw new Error(formatSubversionInstallInstructions(plan));
|
|
14
|
+
}
|
|
15
|
+
if (!interactive) {
|
|
16
|
+
throw new Error([
|
|
17
|
+
"Subversion (`svn`) is required, but it is not installed.",
|
|
18
|
+
"Automatic installation needs an interactive terminal.",
|
|
19
|
+
...plan.instructions.map((instruction) => `- ${instruction}`)
|
|
20
|
+
].join("\n"));
|
|
21
|
+
}
|
|
22
|
+
ui.warn("Subversion (`svn`) is required, but it is not installed.");
|
|
23
|
+
ui.info(`Detected ${plan.manager}. Pressship can run: ${formatInstallCommands(plan.commands)}`);
|
|
24
|
+
const shouldInstall = await confirm({ message: "Install Subversion now?", default: true });
|
|
25
|
+
if (!shouldInstall) {
|
|
26
|
+
throw new Error(formatSubversionInstallInstructions(plan));
|
|
27
|
+
}
|
|
28
|
+
for (const command of plan.commands) {
|
|
29
|
+
await execa(command.command, command.args, { stdio: "inherit" });
|
|
30
|
+
}
|
|
31
|
+
if (!(await isSvnAvailable())) {
|
|
32
|
+
throw new Error("Subversion install command finished, but `svn` is still not available on PATH. Open a new terminal or install it manually.");
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export async function isSvnAvailable() {
|
|
36
|
+
return commandExists("svn");
|
|
37
|
+
}
|
|
38
|
+
export function getSubversionInstallPlan(platform, availableCommands) {
|
|
39
|
+
const available = new Set(availableCommands);
|
|
40
|
+
if (platform === "darwin") {
|
|
41
|
+
if (available.has("brew")) {
|
|
42
|
+
return {
|
|
43
|
+
platform,
|
|
44
|
+
manager: "Homebrew",
|
|
45
|
+
commands: [{ command: "brew", args: ["install", "subversion"] }],
|
|
46
|
+
instructions: ["Install Subversion with Homebrew: brew install subversion"]
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
platform,
|
|
51
|
+
commands: [],
|
|
52
|
+
instructions: [
|
|
53
|
+
"Install Homebrew from https://brew.sh, then install Subversion: brew install subversion"
|
|
54
|
+
]
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
if (platform === "linux") {
|
|
58
|
+
if (available.has("apt-get")) {
|
|
59
|
+
const updateCommand = privilegedCommand(available, "apt-get", ["update"]);
|
|
60
|
+
const installCommand = privilegedCommand(available, "apt-get", ["install", "-y", "subversion"]);
|
|
61
|
+
return {
|
|
62
|
+
platform,
|
|
63
|
+
manager: "apt",
|
|
64
|
+
commands: [updateCommand, installCommand],
|
|
65
|
+
instructions: ["Install Subversion with apt: sudo apt-get update && sudo apt-get install -y subversion"]
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
if (available.has("dnf")) {
|
|
69
|
+
return linuxSingleCommandPlan(platform, available, "dnf", ["install", "-y", "subversion"]);
|
|
70
|
+
}
|
|
71
|
+
if (available.has("yum")) {
|
|
72
|
+
return linuxSingleCommandPlan(platform, available, "yum", ["install", "-y", "subversion"]);
|
|
73
|
+
}
|
|
74
|
+
if (available.has("pacman")) {
|
|
75
|
+
return linuxSingleCommandPlan(platform, available, "pacman", ["-Sy", "--noconfirm", "subversion"]);
|
|
76
|
+
}
|
|
77
|
+
if (available.has("zypper")) {
|
|
78
|
+
return linuxSingleCommandPlan(platform, available, "zypper", ["install", "-y", "subversion"]);
|
|
79
|
+
}
|
|
80
|
+
if (available.has("apk")) {
|
|
81
|
+
const command = privilegedCommand(available, "apk", ["add", "subversion"]);
|
|
82
|
+
return {
|
|
83
|
+
platform,
|
|
84
|
+
manager: "apk",
|
|
85
|
+
commands: [command],
|
|
86
|
+
instructions: ["Install Subversion with apk: sudo apk add subversion"]
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
platform,
|
|
91
|
+
commands: [],
|
|
92
|
+
instructions: [
|
|
93
|
+
"Install Subversion with your system package manager, then rerun Pressship."
|
|
94
|
+
]
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
if (platform === "win32") {
|
|
98
|
+
if (available.has("winget")) {
|
|
99
|
+
return {
|
|
100
|
+
platform,
|
|
101
|
+
manager: "winget",
|
|
102
|
+
commands: [{ command: "winget", args: ["install", "--id", "Apache.Subversion", "-e"] }],
|
|
103
|
+
instructions: ["Install Subversion with winget: winget install --id Apache.Subversion -e"]
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
if (available.has("choco")) {
|
|
107
|
+
return {
|
|
108
|
+
platform,
|
|
109
|
+
manager: "Chocolatey",
|
|
110
|
+
commands: [{ command: "choco", args: ["install", "subversion", "-y"] }],
|
|
111
|
+
instructions: ["Install Subversion with Chocolatey: choco install subversion -y"]
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
platform,
|
|
116
|
+
commands: [],
|
|
117
|
+
instructions: [
|
|
118
|
+
"Install Subversion for Windows, then make sure svn.exe is available on PATH."
|
|
119
|
+
]
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
platform,
|
|
124
|
+
commands: [],
|
|
125
|
+
instructions: ["Install Subversion for your operating system, then rerun Pressship."]
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
export function formatSubversionInstallInstructions(plan) {
|
|
129
|
+
return [
|
|
130
|
+
"Subversion (`svn`) is required, but it is not installed.",
|
|
131
|
+
...plan.instructions.map((instruction) => `- ${instruction}`)
|
|
132
|
+
].join("\n");
|
|
133
|
+
}
|
|
134
|
+
async function findAvailableInstallCommands() {
|
|
135
|
+
const found = new Set();
|
|
136
|
+
for (const command of INSTALL_COMMANDS) {
|
|
137
|
+
if (await commandExists(command)) {
|
|
138
|
+
found.add(command);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return found;
|
|
142
|
+
}
|
|
143
|
+
async function commandExists(command) {
|
|
144
|
+
const result = process.platform === "win32"
|
|
145
|
+
? await execa("where", [command], { reject: false, stdout: "ignore", stderr: "ignore" })
|
|
146
|
+
: await execa("sh", ["-c", `command -v ${quoteShell(command)}`], {
|
|
147
|
+
reject: false,
|
|
148
|
+
stdout: "ignore",
|
|
149
|
+
stderr: "ignore"
|
|
150
|
+
});
|
|
151
|
+
return result.exitCode === 0;
|
|
152
|
+
}
|
|
153
|
+
function linuxSingleCommandPlan(platform, available, manager, args) {
|
|
154
|
+
const command = privilegedCommand(available, manager, args);
|
|
155
|
+
return {
|
|
156
|
+
platform,
|
|
157
|
+
manager,
|
|
158
|
+
commands: [command],
|
|
159
|
+
instructions: [`Install Subversion with ${manager}: sudo ${manager} ${args.join(" ")}`]
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
function privilegedCommand(available, command, args) {
|
|
163
|
+
return available.has("sudo") ? { command: "sudo", args: [command, ...args] } : { command, args };
|
|
164
|
+
}
|
|
165
|
+
function formatInstallCommands(commands) {
|
|
166
|
+
return commands.map((command) => `${command.command} ${command.args.join(" ")}`).join(" && ");
|
|
167
|
+
}
|
|
168
|
+
function quoteShell(value) {
|
|
169
|
+
return `'${value.replaceAll("'", "'\\''")}'`;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=subversion.js.map
|