@studiometa/forge-cli 0.5.3 → 0.5.5

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.
@@ -18,6 +18,17 @@ export declare function resolveApplyServer(server: string | number, ctx: CliExec
18
18
  * The site named `domain` on the server, compared without case. A partial match never counts.
19
19
  */
20
20
  export declare function findSite(sites: Site[], domain: string): Site | null;
21
+ /**
22
+ * The site of the load balancer named `domain` or one of the aliases, compared without case.
23
+ * Its name can be any of them, e.g. the domain without `www`. Two matches are an error: a guess
24
+ * could send the traffic of another site.
25
+ */
26
+ export declare function findLoadBalancerSite(sites: Site[], names: string[]): Site | null;
27
+ /**
28
+ * Exit with a validation error when the load balancer has no site for the site file: the Forge
29
+ * API cannot create a site on a load balancer.
30
+ */
31
+ export declare function assertLoadBalancerSite(file: SiteFile, state: RemoteState): void;
21
32
  /**
22
33
  * Read from Forge what the site file manages, and nothing else.
23
34
  */
@@ -1 +1 @@
1
- {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../../src/commands/sites/apply/apply.ts"],"names":[],"mappings":"AAAA;;GAEG;AA4BH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAmB,MAAM,oBAAoB,CAAC;AAI/D,OAAO,EACL,KAAK,MAAM,EACX,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,IAAI,EAGV,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,8FAA8F;AAC9F,qBAAa,UAAW,SAAQ,QAAQ;IACtC,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,aAAa,SAAS;CAChC;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAEnE;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC,WAAW,CAAC,CAsCtB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAO/C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAQ5E;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,IAAI,MAAM,CAUzC;AAED,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAiBjF;AAED,MAAM,WAAW,YAAY;IAC3B,kEAAkE;IAClE,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC;CACjC;AAmOD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,kBAAkB,EACvB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAwCf"}
1
+ {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../../src/commands/sites/apply/apply.ts"],"names":[],"mappings":"AAAA;;GAEG;AA8BH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAmB,MAAM,oBAAoB,CAAC;AAI/D,OAAO,EACL,KAAK,MAAM,EACX,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,IAAI,EAGV,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,8FAA8F;AAC9F,qBAAa,UAAW,SAAQ,QAAQ;IACtC,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,aAAa,SAAS;CAChC;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAEnE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,CAWhF;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAW/E;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC,WAAW,CAAC,CA6DtB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAO/C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAQ5E;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,IAAI,MAAM,CAUzC;AAED,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAiBjF;AAED,MAAM,WAAW,YAAY;IAC3B,kEAAkE;IAClE,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC;CACjC;AAmPD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,kBAAkB,EACvB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/commands/sites/apply/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,EACL,KAAK,YAAY,EAKlB,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,cAAc,EACnB,YAAY,GAAE,YAAiB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAoDf"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/commands/sites/apply/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,EACL,KAAK,YAAY,EAMlB,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,cAAc,EACnB,YAAY,GAAE,YAAiB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAqDf"}
@@ -2,7 +2,7 @@
2
2
  * Compare a site file with the state of Forge and list the changes that `apply` makes.
3
3
  * Pure functions: no API call here.
4
4
  */
5
- import type { BackgroundProcessAttributes, DatabaseAttributes, DatabaseUserAttributes, ScheduledJobAttributes, SiteAttributes } from "@studiometa/forge-api";
5
+ import type { BackgroundProcessAttributes, DatabaseAttributes, DatabaseUserAttributes, LoadBalancingNodeAttributes, ScheduledJobAttributes, SiteAttributes } from "@studiometa/forge-api";
6
6
  import type { SiteFile } from "./site-file.ts";
7
7
  import { type SiteRoots } from "./ownership.ts";
8
8
  export type Site = SiteAttributes & {
@@ -20,6 +20,9 @@ export type Database = DatabaseAttributes & {
20
20
  export type DatabaseUser = DatabaseUserAttributes & {
21
21
  id: number;
22
22
  };
23
+ export type LoadBalancingNode = LoadBalancingNodeAttributes & {
24
+ id: number;
25
+ };
23
26
  /** Shown in place of a generated password. */
24
27
  export declare const GENERATED = "<generated>";
25
28
  /** What `apply` reads from Forge. A list is undefined when the site file does not manage it. */
@@ -45,6 +48,14 @@ export interface RemoteState {
45
48
  remote: string;
46
49
  rendered: string;
47
50
  } | null;
51
+ /** The site of the file on its load balancer, with its nodes; site is null when it does not exist. */
52
+ loadBalancer?: {
53
+ serverId: string;
54
+ site: Site | null;
55
+ nodes: LoadBalancingNode[];
56
+ /** The server of the site file: the one node that the load balancer must send traffic to. */
57
+ target: number;
58
+ };
48
59
  }
49
60
  export interface SiteSettings {
50
61
  type?: string;
@@ -98,6 +109,17 @@ export type Change = {
98
109
  command: string;
99
110
  frequency: string;
100
111
  cron?: string;
112
+ } | {
113
+ action: "update-load-balancer";
114
+ site: string;
115
+ from: Array<{
116
+ server_id: number;
117
+ port: number;
118
+ }>;
119
+ to: {
120
+ server_id: number;
121
+ port: number;
122
+ };
101
123
  }
102
124
  /** `diff` is null for a site that does not exist yet: the file is rendered once it exists. */
103
125
  | {
@@ -1 +1 @@
1
- {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../../src/commands/sites/apply/plan.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,2BAA2B,EAC3B,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,cAAc,EACf,MAAM,uBAAuB,CAAC;AAI/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAEL,KAAK,SAAS,EAOf,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,IAAI,GAAG,cAAc,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AACnD,MAAM,MAAM,MAAM,GAAG,2BAA2B,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAClE,MAAM,MAAM,YAAY,GAAG,sBAAsB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AACnE,MAAM,MAAM,QAAQ,GAAG,kBAAkB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAC3D,MAAM,MAAM,YAAY,GAAG,sBAAsB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,8CAA8C;AAC9C,eAAO,MAAM,SAAS,gBAAgB,CAAC;AAEvC,gGAAgG;AAChG,MAAM,WAAW,WAAW;IAC1B,+BAA+B;IAC/B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,gEAAgE;IAChE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,8DAA8D;IAC9D,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,mEAAmE;IACnE,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC;IACtB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,gHAAgH;IAChH,KAAK,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,MAAM,GACd;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,GAC/D;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,GAC7F;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,MAAM,EAAE,sBAAsB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAClE;IACE,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,iFAAiF;IACjF,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACD;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAClF;IACE,MAAM,EAAE,eAAe,CAAC;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE;AAC7E,8FAA8F;GAC5F;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC/C;IACE,MAAM,EAAE,YAAY,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEN,MAAM,WAAW,IAAI;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,mEAAmE;AACnE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAElE;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,gBAAgB,CAAC,GAAG,MAAM,CAE9F;AAcD,yDAAyD;AACzD,wBAAgB,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,SAAS,EAAE,CAKpD;AAED,wDAAwD;AACxD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAE9E;AA0GD,sFAAsF;AACtF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,GAAG;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAMA;AAkOD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAelE;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAoCrD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAK7C"}
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../../src/commands/sites/apply/plan.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,11 @@ export declare const DatabaseEnvSchema: v.SchemaWithPipe<readonly [v.StrictObjec
32
32
  user?: string | undefined;
33
33
  password?: string | undefined;
34
34
  }, "the .env keys of the database must be different">]>;
35
+ /** The load balancer that sends the traffic of the site to its server. */
36
+ export declare const LoadBalancerSchema: v.StrictObjectSchema<{
37
+ readonly server: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.NonEmptyAction<string, undefined>]>, v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>]>], undefined>;
38
+ readonly port: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 65535, undefined>]>, 80>;
39
+ }, undefined>;
35
40
  export declare const SiteFileSchema: v.StrictObjectSchema<{
36
41
  readonly $schema: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
37
42
  readonly server: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.NonEmptyAction<string, undefined>]>, v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>]>], undefined>;
@@ -74,6 +79,10 @@ export declare const SiteFileSchema: v.StrictObjectSchema<{
74
79
  frequency: "custom" | "hourly" | "minutely" | "monthly" | "nightly" | "reboot" | "weekly";
75
80
  cron?: string | undefined;
76
81
  }, "cron is required with the custom frequency, and only with it">]>, undefined>, undefined>;
82
+ readonly loadBalancer: v.OptionalSchema<v.StrictObjectSchema<{
83
+ readonly server: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.NonEmptyAction<string, undefined>]>, v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>]>], undefined>;
84
+ readonly port: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 65535, undefined>]>, 80>;
85
+ }, undefined>, undefined>;
77
86
  }, undefined>;
78
87
  export type SiteFileData = v.InferOutput<typeof SiteFileSchema>;
79
88
  /** A site file with the content of its Nginx file, when it declares one. */
@@ -1 +1 @@
1
- {"version":3,"file":"site-file.d.ts","sourceRoot":"","sources":["../../../../src/commands/sites/apply/site-file.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAK7B,2EAA2E;AAC3E,eAAO,MAAM,oBAAoB,qEACmC,CAAC;AAIrE,eAAO,MAAM,UAAU,YACrB,SAAS,EACT,SAAS,EACT,UAAU,EACV,WAAW,EACX,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,OAAO,EACP,QAAQ,CACA,CAAC;AAEX,eAAO,MAAM,wBAAwB,YACnC,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,eAAe,EACf,QAAQ,CACA,CAAC;AAEX,eAAO,MAAM,oBAAoB,YAC/B,UAAU,EACV,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,QAAQ,CACA,CAAC;AAEX,eAAO,MAAM,YAAY;;;;aAIvB,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;oEAU9B,CAAC;AAOF,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB;;;;;;;;uDAY7B,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAsBzB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,cAAc,CAAC,CAAC;AAEhE,4EAA4E;AAC5E,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACjE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,YAAY,CAAC,CAAC;AACnE,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE/E;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,SAAc,GAAG,YAAY,CAU/E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CA6BnD"}
1
+ {"version":3,"file":"site-file.d.ts","sourceRoot":"","sources":["../../../../src/commands/sites/apply/site-file.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAK7B,2EAA2E;AAC3E,eAAO,MAAM,oBAAoB,qEACmC,CAAC;AAOrE,eAAO,MAAM,UAAU,YACrB,SAAS,EACT,SAAS,EACT,UAAU,EACV,WAAW,EACX,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,OAAO,EACP,QAAQ,CACA,CAAC;AAEX,eAAO,MAAM,wBAAwB,YACnC,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,eAAe,EACf,QAAQ,CACA,CAAC;AAEX,eAAO,MAAM,oBAAoB,YAC/B,UAAU,EACV,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,QAAQ,CACA,CAAC;AAEX,eAAO,MAAM,YAAY;;;;aAIvB,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;oEAU9B,CAAC;AAOF,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB;;;;;;;;uDAY7B,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,kBAAkB;;;aAG7B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAuBzB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,cAAc,CAAC,CAAC;AAEhE,4EAA4E;AAC5E,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACjE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,YAAY,CAAC,CAAC;AACnE,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE/E;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,SAAc,GAAG,YAAY,CAU/E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CA6BnD"}
@@ -2,7 +2,7 @@
2
2
  * Fixtures of Forge resources for the tests of `forge sites apply`.
3
3
  */
4
4
  import type { CliExecutorContext } from "../../../context.ts";
5
- import type { Daemon, ScheduledJob, Site } from "./plan.ts";
5
+ import type { Daemon, LoadBalancingNode, ScheduledJob, Site } from "./plan.ts";
6
6
  export declare function site(id: number, name: string, overrides?: Partial<Site>): Site;
7
7
  export declare function daemon(id: number, command: string, directory: string | null, overrides?: Partial<Daemon>): Daemon;
8
8
  export declare function job(id: number, command: string, overrides?: Partial<ScheduledJob>): ScheduledJob;
@@ -35,8 +35,14 @@ export declare function webServer(): {
35
35
  ip_address: string;
36
36
  private_ip_address: string;
37
37
  };
38
+ /** A node of a site on the load balancer, with the default weight. */
39
+ export declare function node(serverId: number, overrides?: Partial<LoadBalancingNode>): LoadBalancingNode;
38
40
  export interface FakeForge {
39
41
  sites: Site[];
42
+ /** Sites of the load balancer, server 300. */
43
+ balancerSites: Site[];
44
+ /** Nodes of each site of the load balancer, by site ID. */
45
+ nodes: Record<number, LoadBalancingNode[]>;
40
46
  daemons: Daemon[];
41
47
  siteDaemonIds: number[];
42
48
  jobs: ScheduledJob[];
@@ -1 +1 @@
1
- {"version":3,"file":"test-fixtures.d.ts","sourceRoot":"","sources":["../../../../src/commands/sites/apply/test-fixtures.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE5D,wBAAgB,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,OAAO,CAAC,IAAI,CAAM,GAAG,IAAI,CAmClF;AAED,wBAAgB,MAAM,CACpB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,SAAS,GAAE,OAAO,CAAC,MAAM,CAAM,GAC9B,MAAM,CAWR;AAED,wBAAgB,GAAG,CACjB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,OAAO,CAAC,YAAY,CAAM,GACpC,YAAY,CAcd;AAED,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AAiD1D,oEAAoE;AACpE,wBAAgB,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;EAExB;AAOD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,KAAK,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,GAAE,OAAO,CAAC,SAAS,CAAM;;;;;yCAkB/B,MAAM;;;;;;;;gBApFrB,QAAQ;gBAAM,WAAW;gBAAQ,WAAW;;;;;;;;;0CA4I5B,MAAM,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;yCAsCtC,MAAM,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;4CAalC,MAAM;;;EAYnC"}
1
+ {"version":3,"file":"test-fixtures.d.ts","sourceRoot":"","sources":["../../../../src/commands/sites/apply/test-fixtures.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE/E,wBAAgB,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,OAAO,CAAC,IAAI,CAAM,GAAG,IAAI,CAmClF;AAED,wBAAgB,MAAM,CACpB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,SAAS,GAAE,OAAO,CAAC,MAAM,CAAM,GAC9B,MAAM,CAWR;AAED,wBAAgB,GAAG,CACjB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,OAAO,CAAC,YAAY,CAAM,GACpC,YAAY,CAcd;AAED,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AAiD1D,oEAAoE;AACpE,wBAAgB,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;EAExB;AAOD,sEAAsE;AACtE,wBAAgB,IAAI,CAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,OAAO,CAAC,iBAAiB,CAAM,GACzC,iBAAiB,CAUnB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,8CAA8C;IAC9C,aAAa,EAAE,IAAI,EAAE,CAAC;IACtB,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC3C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,KAAK,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,GAAE,OAAO,CAAC,SAAS,CAAM;;;;;yCAoB/B,MAAM;;;;;;;;gBA1GrB,QAAQ;gBAAM,WAAW;gBAAQ,WAAW;;;;;;;;;0CA0K5B,MAAM,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;yCAsCtC,MAAM,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;4CAmBlC,MAAM;;;EAYnC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@studiometa/forge-cli",
3
- "version": "0.5.3",
3
+ "version": "0.5.5",
4
4
  "description": "CLI tool for managing Laravel Forge servers, sites, and deployments",
5
5
  "keywords": [
6
6
  "ai-agent",
@@ -49,8 +49,8 @@
49
49
  "typecheck": "tsgo -p tsconfig.typecheck.json --noEmit"
50
50
  },
51
51
  "dependencies": {
52
- "@studiometa/forge-api": "0.5.3",
53
- "@studiometa/forge-core": "0.5.3",
52
+ "@studiometa/forge-api": "0.5.5",
53
+ "@studiometa/forge-core": "0.5.5",
54
54
  "valibot": "^1.3.1"
55
55
  },
56
56
  "devDependencies": {
@@ -7,12 +7,20 @@
7
7
  "additionalProperties": false,
8
8
  "required": ["server", "domain"],
9
9
  "properties": {
10
- "$schema": { "type": "string" },
10
+ "$schema": {
11
+ "type": "string"
12
+ },
11
13
  "server": {
12
14
  "description": "Server name (exact match) or ID.",
13
15
  "oneOf": [
14
- { "type": "string", "minLength": 1 },
15
- { "type": "integer", "minimum": 1 }
16
+ {
17
+ "type": "string",
18
+ "minLength": 1
19
+ },
20
+ {
21
+ "type": "integer",
22
+ "minimum": 1
23
+ }
16
24
  ]
17
25
  },
18
26
  "domain": {
@@ -23,7 +31,10 @@
23
31
  "aliases": {
24
32
  "description": "Domains to add to the site. Aliases are added, never removed.",
25
33
  "type": "array",
26
- "items": { "type": "string", "minLength": 1 }
34
+ "items": {
35
+ "type": "string",
36
+ "minLength": 1
37
+ }
27
38
  },
28
39
  "type": {
29
40
  "description": "Site type, used to create the site.",
@@ -56,9 +67,17 @@
56
67
  "additionalProperties": false,
57
68
  "required": ["provider", "url"],
58
69
  "properties": {
59
- "provider": { "enum": ["github", "gitlab", "bitbucket", "gitlab-custom", "custom"] },
60
- "url": { "type": "string", "minLength": 1 },
61
- "branch": { "type": "string", "minLength": 1 }
70
+ "provider": {
71
+ "enum": ["github", "gitlab", "bitbucket", "gitlab-custom", "custom"]
72
+ },
73
+ "url": {
74
+ "type": "string",
75
+ "minLength": 1
76
+ },
77
+ "branch": {
78
+ "type": "string",
79
+ "minLength": 1
80
+ }
62
81
  }
63
82
  },
64
83
  "database": {
@@ -67,8 +86,14 @@
67
86
  "additionalProperties": false,
68
87
  "required": ["name", "user"],
69
88
  "properties": {
70
- "name": { "type": "string", "minLength": 1 },
71
- "user": { "type": "string", "minLength": 1 },
89
+ "name": {
90
+ "type": "string",
91
+ "minLength": 1
92
+ },
93
+ "user": {
94
+ "type": "string",
95
+ "minLength": 1
96
+ },
72
97
  "env": {
73
98
  "description": ".env keys that get the database name, user and password of a new user. The keys must be different.",
74
99
  "type": "object",
@@ -96,8 +121,12 @@
96
121
  "env": {
97
122
  "description": ".env variables to add when missing. Existing values are never overwritten.",
98
123
  "type": "object",
99
- "propertyNames": { "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" },
100
- "additionalProperties": { "type": ["string", "number", "boolean"] }
124
+ "propertyNames": {
125
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
126
+ },
127
+ "additionalProperties": {
128
+ "type": ["string", "number", "boolean"]
129
+ }
101
130
  },
102
131
  "nginx": {
103
132
  "description": "Nginx file, relative to the site file, with the Forge template variables {{DIRECTORY}}, {{DOMAINS}}, {{PATH}}, {{PORT}}, {{PORT_V6}}, {{PROXY_PASS}}, {{ROOT_PATH}}, {{SERVER_PUBLIC_IP}}, {{SERVER_PRIVATE_IP}}, {{SITE}}, {{SITE_ID}} and {{USER}}. Rendered for the site and written when it differs from Forge. An unknown variable is an error.",
@@ -112,8 +141,15 @@
112
141
  "additionalProperties": false,
113
142
  "required": ["command"],
114
143
  "properties": {
115
- "command": { "type": "string", "minLength": 1 },
116
- "processes": { "type": "integer", "minimum": 1, "default": 1 },
144
+ "command": {
145
+ "type": "string",
146
+ "minLength": 1
147
+ },
148
+ "processes": {
149
+ "type": "integer",
150
+ "minimum": 1,
151
+ "default": 1
152
+ },
117
153
  "directory": {
118
154
  "description": "Directory, absolute or relative to the site root. Default: the site root.",
119
155
  "type": "string",
@@ -130,7 +166,10 @@
130
166
  "additionalProperties": false,
131
167
  "required": ["command", "frequency"],
132
168
  "properties": {
133
- "command": { "type": "string", "minLength": 1 },
169
+ "command": {
170
+ "type": "string",
171
+ "minLength": 1
172
+ },
134
173
  "frequency": {
135
174
  "enum": ["minutely", "hourly", "nightly", "weekly", "monthly", "reboot", "custom"]
136
175
  },
@@ -140,9 +179,49 @@
140
179
  "minLength": 1
141
180
  }
142
181
  },
143
- "if": { "properties": { "frequency": { "const": "custom" } } },
144
- "then": { "required": ["cron"] },
145
- "else": { "not": { "required": ["cron"] } }
182
+ "if": {
183
+ "properties": {
184
+ "frequency": {
185
+ "const": "custom"
186
+ }
187
+ }
188
+ },
189
+ "then": {
190
+ "required": ["cron"]
191
+ },
192
+ "else": {
193
+ "not": {
194
+ "required": ["cron"]
195
+ }
196
+ }
197
+ }
198
+ },
199
+ "loadBalancer": {
200
+ "description": "Load balancer of the site: apply sets its nodes to the server of the site file only, with round robin and weight 1. The site of the load balancer must exist: its name is the domain or one of the aliases. Create it in Forge (New site on the load balancer): the Forge API cannot. Its certificate is not managed.",
201
+ "type": "object",
202
+ "additionalProperties": false,
203
+ "required": ["server"],
204
+ "properties": {
205
+ "server": {
206
+ "description": "Load balancer name (exact match) or ID.",
207
+ "oneOf": [
208
+ {
209
+ "type": "string",
210
+ "minLength": 1
211
+ },
212
+ {
213
+ "type": "integer",
214
+ "minimum": 1
215
+ }
216
+ ]
217
+ },
218
+ "port": {
219
+ "description": "Port of the site on its server. Default: 80.",
220
+ "type": "integer",
221
+ "minimum": 1,
222
+ "maximum": 65535,
223
+ "default": 80
224
+ }
146
225
  }
147
226
  }
148
227
  }