create-usine 0.0.0-stage → 0.5.0

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 CHANGED
@@ -1,3 +1,31 @@
1
- # Temporary Holding Version
1
+ # create-usine
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Create an instance folder with an exact-pinned `@usine/server` installation. Requires Node.js 22 or later.
4
+
5
+ ```sh
6
+ npm create usine@latest my-factory
7
+ cd my-factory
8
+ npm run usine -- up
9
+ ```
10
+
11
+ With pnpm:
12
+
13
+ ```sh
14
+ pnpm create usine my-factory
15
+ cd my-factory
16
+ pnpm usine up
17
+ ```
18
+
19
+ The destination must be new or empty. The command writes `package.json`, `.gitignore`, and a mode-0600 `.env` template, then runs the invoking package manager's install command to create its lockfile and `node_modules/`. Both installers run independently of any enclosing workspace. Direct invocation defaults to npm. If installation fails, run `npm install --workspaces=false` or `pnpm install --ignore-workspace` in the destination to retry.
20
+
21
+ The first `usine up` creates an empty configuration revision and opens GitHub App setup. Configuration and credentials are saved under `.usine/`. `.gitignore` excludes that directory, `.env`, and `node_modules/`. Keep the instance folder on persistent storage and include its runtime data in backups.
22
+
23
+ Use `npm run usine -- up --detach` or `pnpm usine up --detach` to run in the background. Run the local CLI with the same package manager for `status`, `stop`, `restart`, and `sign-in-link`. See [Run a factory](https://docs.usine.dev/guides/) for setup and [the CLI reference](https://docs.usine.dev/reference/configuration/cli/) for lifecycle commands.
24
+
25
+ ## Releases
26
+
27
+ Changesets releases `create-usine` and `@usine/server` together. The build copies the server's release version into the published artifact; the scaffold uses that exact version, including the prerelease suffix for `create-usine@next`. The release workflow publishes this public package with npm provenance, using the same trusted-publisher configuration as the other packages.
28
+
29
+ ## Validation
30
+
31
+ After `pnpm build`, `pnpm --filter create-usine test` runs the compiled CLI in temporary folders. A process fixture substitutes the registry install and links the built server; the startup test runs that server, checks setup mode and the stored revision, then stops it. npm and pnpm integration tests install a fixture package from a local registry inside an enclosing workspace and check that the lockfile and dependencies stay in the destination. `pnpm check:packed-install` checks installation of the published package contents with npm.
@@ -0,0 +1,2 @@
1
+ export declare const environmentTemplate = "# Optional overrides. Shell variables take precedence over this file.\n# https://docs.usine.dev/reference/configuration/cli/#environment-variables\n\n# HTTP listener and public HTTPS origin (when using a reverse proxy).\n# USINE_PORT=7331\n# USINE_ORIGIN=https://usine.example.com\n# USINE_LOG_LEVEL=info\n\n# Temporary instances only: runtime data disappears when temporary storage is cleared.\n# USINE_ALLOW_VOLATILE_INSTANCE=1\n# TMPDIR=/tmp\n\n# Setup saves GitHub App credentials in .usine/github-app.json.\n# Uncomment only to override those credentials.\n# USINE_GITHUB_APP_ID=\n# USINE_GITHUB_PRIVATE_KEY=\"-----BEGIN RSA PRIVATE KEY-----\\n...\\n-----END RSA PRIVATE KEY-----\\n\"\n# USINE_GITHUB_CLIENT_ID=\n# USINE_GITHUB_CLIENT_SECRET=\n# USINE_GITHUB_WEBHOOK_SECRET=\n\n# Optional worker credentials; reference their variable names in worker settings.\n# USINE_GATEWAY_ADMIN_TOKEN=\n# ANTHROPIC_API_KEY=\n# OPENAI_API_KEY=\n\n# Optional tracing resource attributes.\n# OTEL_RESOURCE_ATTRIBUTES=service.name=usine\n";
2
+ //# sourceMappingURL=environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,wgCA2B/B,CAAC"}
@@ -0,0 +1,29 @@
1
+ export const environmentTemplate = `# Optional overrides. Shell variables take precedence over this file.
2
+ # https://docs.usine.dev/reference/configuration/cli/#environment-variables
3
+
4
+ # HTTP listener and public HTTPS origin (when using a reverse proxy).
5
+ # USINE_PORT=7331
6
+ # USINE_ORIGIN=https://usine.example.com
7
+ # USINE_LOG_LEVEL=info
8
+
9
+ # Temporary instances only: runtime data disappears when temporary storage is cleared.
10
+ # USINE_ALLOW_VOLATILE_INSTANCE=1
11
+ # TMPDIR=/tmp
12
+
13
+ # Setup saves GitHub App credentials in .usine/github-app.json.
14
+ # Uncomment only to override those credentials.
15
+ # USINE_GITHUB_APP_ID=
16
+ # USINE_GITHUB_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\\n...\\n-----END RSA PRIVATE KEY-----\\n"
17
+ # USINE_GITHUB_CLIENT_ID=
18
+ # USINE_GITHUB_CLIENT_SECRET=
19
+ # USINE_GITHUB_WEBHOOK_SECRET=
20
+
21
+ # Optional worker credentials; reference their variable names in worker settings.
22
+ # USINE_GATEWAY_ADMIN_TOKEN=
23
+ # ANTHROPIC_API_KEY=
24
+ # OPENAI_API_KEY=
25
+
26
+ # Optional tracing resource attributes.
27
+ # OTEL_RESOURCE_ATTRIBUTES=service.name=usine
28
+ `;
29
+ //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BlC,CAAC"}
package/dist/main.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":""}
package/dist/main.js ADDED
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+ import { fileURLToPath } from "node:url";
3
+ import { NodeRuntime, NodeServices } from "@effect/platform-node";
4
+ import { InstanceDirectory } from "@usine/core/instance";
5
+ import { ReleaseVersion } from "@usine/core/upgrade";
6
+ import { Console, Effect, FileSystem, Path, Schema } from "effect";
7
+ import { Argument, Command } from "effect/cli";
8
+ import { detectInstaller, scaffold } from "./scaffold.js";
9
+ const Release = Schema.fromJsonString(Schema.Struct({ version: ReleaseVersion, serverVersion: ReleaseVersion }));
10
+ const main = Effect.gen(function* () {
11
+ const fs = yield* FileSystem.FileSystem;
12
+ const release = yield* fs
13
+ .readFileString(fileURLToPath(new URL("./release.json", import.meta.url)))
14
+ .pipe(Effect.flatMap(Schema.decodeUnknownEffect(Release)));
15
+ const command = Command.make("create-usine", {
16
+ folder: Argument.String("folder").pipe(Argument.withSchema(Schema.NonEmptyString)),
17
+ }, ({ folder }) => Effect.gen(function* () {
18
+ const path = yield* Path.Path;
19
+ const directory = InstanceDirectory.make(path.resolve(folder));
20
+ const installer = yield* detectInstaller(directory);
21
+ yield* scaffold(directory, release.serverVersion, installer).pipe(Effect.scoped);
22
+ const next = installer === "npm" ? "npm run usine -- up" : "pnpm usine up";
23
+ yield* Console.log(`\nOpen ${directory} in your terminal, then start setup:\n\n ${next}\n`);
24
+ })).pipe(Command.withDescription("Create an empty runtime folder and install a pinned usine server."));
25
+ return yield* Command.run(command, { version: release.version });
26
+ }).pipe(Effect.provide(NodeServices.layer), Effect.catchTag("ScaffoldError", (error) => Console.error(`${error.directory}: ${error.message}`).pipe(Effect.andThen(Effect.sync(() => {
27
+ process.exitCode = 1;
28
+ })))));
29
+ NodeRuntime.runMain(main);
30
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ {
2
+ "version": "0.5.0",
3
+ "serverVersion": "0.5.0"
4
+ }
@@ -0,0 +1,12 @@
1
+ import { Config, Effect, FileSystem, Path, Schema } from "effect";
2
+ import { ChildProcessSpawner } from "effect/process";
3
+ declare const ScaffoldError_base: Schema.Class<ScaffoldError, Schema.TaggedStruct<"ScaffoldError", {
4
+ readonly directory: Schema.brand<Schema.NonEmptyString, "InstanceDirectory">;
5
+ readonly message: Schema.String;
6
+ }>, import("effect/Cause").YieldableError>;
7
+ declare class ScaffoldError extends ScaffoldError_base {
8
+ }
9
+ export declare const detectInstaller: (directory: string & import("effect/Brand").Brand<"InstanceDirectory">) => Effect.Effect<"npm" | "pnpm", Config.ConfigError | ScaffoldError, never>;
10
+ export declare const scaffold: (directory: string & import("effect/Brand").Brand<"InstanceDirectory">, serverVersion: string & import("effect/Brand").Brand<"ReleaseVersion">, installer: "npm" | "pnpm") => Effect.Effect<undefined, import("effect/PlatformError").PlatformError | ScaffoldError, ChildProcessSpawner.ChildProcessSpawner | FileSystem.FileSystem | Path.Path>;
11
+ export {};
12
+ //# sourceMappingURL=scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAClE,OAAO,EAAgB,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;;;;;AAMnE,cAAM,aAAc,SAAQ,kBAG3B;CAAG;AAEJ,eAAO,MAAM,eAAe,qJAc1B,CAAC;AAEH,eAAO,MAAM,QAAQ,mVA4EnB,CAAC"}
@@ -0,0 +1,83 @@
1
+ import { InstanceDirectory } from "@usine/core/instance";
2
+ import { Config, Effect, FileSystem, Path, Schema } from "effect";
3
+ import { ChildProcess, ChildProcessSpawner } from "effect/process";
4
+ import { environmentTemplate } from "./environment.js";
5
+ const Installer = Schema.Literals(["npm", "pnpm"]);
6
+ class ScaffoldError extends Schema.TaggedError("create-usine/ScaffoldError")("ScaffoldError", { directory: InstanceDirectory, message: Schema.String }) {
7
+ }
8
+ export const detectInstaller = Effect.fn("Scaffold.detectInstaller")(function* (directory) {
9
+ yield* Effect.annotateCurrentSpan({ directory });
10
+ const userAgent = yield* Config.String("npm_config_user_agent").pipe(Config.withDefault("npm"));
11
+ return yield* Schema.decodeUnknownEffect(Installer)(userAgent.split("/")[0]).pipe(Effect.mapError(() => new ScaffoldError({
12
+ directory,
13
+ message: "Use npm create usine@latest <folder> or pnpm create usine <folder>.",
14
+ })));
15
+ });
16
+ export const scaffold = Effect.fn("Scaffold.create")(function* (directory, serverVersion, installer) {
17
+ yield* Effect.annotateCurrentSpan({ directory, serverVersion, installer });
18
+ const fs = yield* FileSystem.FileSystem;
19
+ const path = yield* Path.Path;
20
+ if (yield* fs.exists(directory)) {
21
+ if ((yield* fs.readDirectory(directory)).length > 0) {
22
+ yield* Effect.logWarning("Scaffold refused a nonempty folder", { directory });
23
+ return yield* new ScaffoldError({ directory, message: "Choose a new or empty folder." });
24
+ }
25
+ }
26
+ else {
27
+ yield* fs.makeDirectory(directory, { recursive: true });
28
+ }
29
+ const manifest = {
30
+ private: true,
31
+ scripts: { usine: "usine" },
32
+ dependencies: { "@usine/server": serverVersion },
33
+ engines: { node: ">=22" },
34
+ };
35
+ yield* fs.writeFileString(path.join(directory, "package.json"), `${JSON.stringify(manifest, null, 2)}\n`, { flag: "wx" });
36
+ yield* fs.writeFileString(path.join(directory, ".gitignore"), ".usine/\nnode_modules/\n.env\n", {
37
+ flag: "wx",
38
+ });
39
+ yield* fs.writeFileString(path.join(directory, ".env"), environmentTemplate, {
40
+ flag: "wx",
41
+ mode: 0o600,
42
+ });
43
+ yield* Effect.logInfo("Installing the pinned usine server", {
44
+ directory,
45
+ serverVersion,
46
+ installer,
47
+ });
48
+ const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
49
+ const installArgs = installer === "pnpm" ? ["install", "--ignore-workspace"] : ["install", "--workspaces=false"];
50
+ const installCommand = [installer, ...installArgs].join(" ");
51
+ const exitCode = yield* spawner.exitCode(ChildProcess.make(installer, installArgs, {
52
+ cwd: directory,
53
+ stdin: "inherit",
54
+ stdout: "inherit",
55
+ stderr: "inherit",
56
+ }));
57
+ if (exitCode !== 0) {
58
+ yield* Effect.logError("Scaffold installation failed", { directory, installer, exitCode });
59
+ return yield* new ScaffoldError({
60
+ directory,
61
+ message: `Installation exited with status ${exitCode}. Run ${installCommand} in this folder to retry.`,
62
+ });
63
+ }
64
+ const lockfile = installer === "npm" ? "package-lock.json" : "pnpm-lock.yaml";
65
+ if (!(yield* fs.exists(path.join(directory, lockfile)))) {
66
+ yield* Effect.logError("Scaffold installation produced no lockfile", {
67
+ directory,
68
+ installer,
69
+ lockfile,
70
+ });
71
+ return yield* new ScaffoldError({
72
+ directory,
73
+ message: `Installation did not write ${lockfile}. Enable lockfiles and run ${installCommand} in this folder.`,
74
+ });
75
+ }
76
+ yield* Effect.logInfo("Runtime folder created", {
77
+ directory,
78
+ serverVersion,
79
+ installer,
80
+ lockfile,
81
+ });
82
+ });
83
+ //# sourceMappingURL=scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,43 @@
1
1
  {
2
2
  "name": "create-usine",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.5.0",
4
+ "description": "Create a runtime folder with a pinned usine server and start setup.",
5
+ "license": "AGPL-3.0-only",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/basaltbytes/usine.git",
9
+ "directory": "packages/create-usine"
10
+ },
11
+ "bin": {
12
+ "create-usine": "./dist/main.js"
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "!dist/tsconfig.tsbuildinfo"
17
+ ],
18
+ "type": "module",
19
+ "publishConfig": {
20
+ "access": "public",
21
+ "provenance": true
22
+ },
23
+ "scripts": {
24
+ "build": "tsc -b && node scripts/release.mjs",
25
+ "check": "tsc -p tsconfig.check.json",
26
+ "test": "vitest run"
27
+ },
28
+ "dependencies": {
29
+ "@effect/platform-node": "catalog:",
30
+ "@effect/platform-node-shared": "catalog:",
31
+ "@usine/core": "workspace:*",
32
+ "effect": "catalog:"
33
+ },
34
+ "devDependencies": {
35
+ "@usine/server": "workspace:*",
36
+ "@usine/tsconfig": "workspace:*",
37
+ "typescript": "catalog:",
38
+ "vitest": "catalog:"
39
+ },
40
+ "engines": {
41
+ "node": ">=22"
42
+ }
43
+ }