@kirschbaum-development/sst-laravel 0.1.4 → 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 +27 -1
- package/dist/bin/cli.js +2 -4
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/commands/init.js +4 -6
- package/dist/bin/commands/init.js.map +1 -1
- package/dist/bin/commands/install.js +3 -6
- package/dist/bin/commands/install.js.map +1 -1
- package/dist/bin/utils/sst-config.d.ts +9 -0
- package/dist/bin/utils/sst-config.js +25 -0
- package/dist/bin/utils/sst-config.js.map +1 -1
- package/laravel-sst.ts +8 -1
- package/package.json +1 -1
- package/src/laravel-env.ts +7 -1
package/README.md
CHANGED
|
@@ -137,6 +137,8 @@ There are multiple ways to configure environment variables. If you want SST Lara
|
|
|
137
137
|
|
|
138
138
|
The below configuration would copy a file named `.env.$STAGE` (e.g. `.env.production`) into the deployment containers as your `.env` file.
|
|
139
139
|
|
|
140
|
+
### Environment File
|
|
141
|
+
|
|
140
142
|
```js
|
|
141
143
|
const app = new LaravelService('MyLaravelApp', {
|
|
142
144
|
// ...
|
|
@@ -161,6 +163,21 @@ const app = new LaravelService('MyLaravelApp', {
|
|
|
161
163
|
});
|
|
162
164
|
```
|
|
163
165
|
|
|
166
|
+
### SST Secrets
|
|
167
|
+
|
|
168
|
+
You can also use SST Secrets to store your environment variables. This is a more secure way to store your environment variables.
|
|
169
|
+
|
|
170
|
+
```js
|
|
171
|
+
const APP_KEY = new sst.Secret("APP_KEY");
|
|
172
|
+
const DB_PASSWORD = new sst.Secret("DB_PASSWORD");
|
|
173
|
+
|
|
174
|
+
const app = new LaravelService('MyLaravelApp', {
|
|
175
|
+
link: [APP_KEY, DB_PASSWORD],
|
|
176
|
+
});
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
This will automatically inject the environment variables into the `.env` file of your Laravel application. Read more about SST Secrets [here](https://sst.dev/docs/component/secret/).
|
|
180
|
+
|
|
164
181
|
### Resources
|
|
165
182
|
|
|
166
183
|
In SST, you can [link resources](https://sst.dev/docs/linking). If you link resources to your Laravel component, SST Laravel will automatically inject and configure environment variables using sensible defaults for all the linked resources.
|
|
@@ -345,11 +362,20 @@ In case you get the following error when running SST commands, run `npx sst-lara
|
|
|
345
362
|
- node_modules/@kirschbaum-development/sst-laravel/laravel-sst.ts:6:26 Could not resolve "../../../.sst/platform/src/components/component.js"
|
|
346
363
|
```
|
|
347
364
|
|
|
365
|
+
**CD: AWS credentials are not configured**
|
|
366
|
+
|
|
367
|
+
If you are getting the following error when deploying (usually via CI/CD), the issue is usually that you have a `.env` or `.env.{stage}` that contains the `AWS_ACCESS_KEY_ID` and
|
|
368
|
+
`AWS_SECRET_ACCESS_KEY` keys. They should be removed from the environment file and you should be relying on the IAM role to give your app permissions to access AWS resources (which is more secure anyway).
|
|
369
|
+
|
|
370
|
+
```
|
|
371
|
+
✕ AWS credentials are not configured. Try configuring your profile in `~/.aws/config` and setting the `AWS_PROFILE` environment variable or specifying `providers.aws.profile` in your sst.config.ts
|
|
372
|
+
aws: failed to refresh cached credentials, no EC2 IMDS role found, operation error ec2imds: GetMetadata, failed to get API token, operation error ec2imds: getToken, http response error StatusCode: 400, request to EC2 IMDS failed
|
|
373
|
+
```
|
|
374
|
+
|
|
348
375
|
***
|
|
349
376
|
|
|
350
377
|
### Roadmap
|
|
351
378
|
|
|
352
|
-
* Support for [SST Secrets](https://sst.dev/docs/component/secret/);
|
|
353
379
|
* Extend base Docker images;
|
|
354
380
|
* Add support for Inertia SSR;
|
|
355
381
|
* Add support for Octane with FrankedPHP;
|
package/dist/bin/cli.js
CHANGED
|
@@ -2,16 +2,14 @@
|
|
|
2
2
|
import { Command } from 'commander';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import * as path from 'path';
|
|
5
|
-
import { fileURLToPath } from 'url';
|
|
6
5
|
import { initCommand } from './commands/init.js';
|
|
7
6
|
import { deployCommand } from './commands/deploy.js';
|
|
8
7
|
import { sshCommand } from './commands/ssh.js';
|
|
9
8
|
import { logsCommand } from './commands/logs.js';
|
|
10
9
|
import { githubIamCommand } from './commands/github-iam.js';
|
|
11
10
|
import { installCommand } from './commands/install.js';
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
const packageJsonPath = path.join(__dirname, '..', '..', 'package.json');
|
|
11
|
+
import { getPackageRoot } from './utils/sst-config.js';
|
|
12
|
+
const packageJsonPath = path.join(getPackageRoot(), 'package.json');
|
|
15
13
|
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
16
14
|
const version = packageJson.version;
|
|
17
15
|
const program = new Command();
|
package/dist/bin/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,cAAc,CAAC,CAAC;AACpE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;AAC1E,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;AAEpC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CAAC,uCAAuC,CAAC;KACpD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AAEnC,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -2,9 +2,7 @@ import { Command } from 'commander';
|
|
|
2
2
|
import { spawn } from 'child_process';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import * as path from 'path';
|
|
5
|
-
import {
|
|
6
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
7
|
-
const __dirname = path.dirname(__filename);
|
|
5
|
+
import { getTemplatePath } from '../utils/sst-config.js';
|
|
8
6
|
export const initCommand = new Command('init')
|
|
9
7
|
.description('Initialize SST and SST Laravel, creating a new sst.config.ts file to deploy your Laravel application')
|
|
10
8
|
.action(async () => {
|
|
@@ -45,7 +43,7 @@ export const initCommand = new Command('init')
|
|
|
45
43
|
else {
|
|
46
44
|
console.log('SST is already installed');
|
|
47
45
|
}
|
|
48
|
-
const initTemplatePath =
|
|
46
|
+
const initTemplatePath = getTemplatePath('sst.config.init.template');
|
|
49
47
|
if (!fs.existsSync(initTemplatePath)) {
|
|
50
48
|
console.error('Error: Init template file not found.');
|
|
51
49
|
process.exit(1);
|
|
@@ -83,7 +81,7 @@ export const initCommand = new Command('init')
|
|
|
83
81
|
});
|
|
84
82
|
sstInstallProcess.on('error', reject);
|
|
85
83
|
});
|
|
86
|
-
const runTemplatePath =
|
|
84
|
+
const runTemplatePath = getTemplatePath('sst.config.run.template');
|
|
87
85
|
if (!fs.existsSync(runTemplatePath)) {
|
|
88
86
|
console.error('Error: Run template file not found.');
|
|
89
87
|
process.exit(1);
|
|
@@ -92,7 +90,7 @@ export const initCommand = new Command('init')
|
|
|
92
90
|
let finalConfig = fs.readFileSync(targetPath, 'utf-8');
|
|
93
91
|
finalConfig = finalConfig.replace(' async run() {\n },', ` async run() {\n${runTemplateContent}\n },`);
|
|
94
92
|
fs.writeFileSync(targetPath, finalConfig, 'utf-8');
|
|
95
|
-
const deployTemplatePath =
|
|
93
|
+
const deployTemplatePath = getTemplatePath('deploy.template');
|
|
96
94
|
if (fs.existsSync(deployTemplatePath)) {
|
|
97
95
|
const infraDir = path.join(cwd, 'infra');
|
|
98
96
|
if (!fs.existsSync(infraDir)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../bin/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../bin/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,7 @@ import { Command } from 'commander';
|
|
|
2
2
|
import { spawn } from 'child_process';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import * as path from 'path';
|
|
5
|
-
import {
|
|
6
|
-
import { findSstConfig } from '../utils/sst-config.js';
|
|
7
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
-
const __dirname = path.dirname(__filename);
|
|
5
|
+
import { findSstConfig, getTemplatePath } from '../utils/sst-config.js';
|
|
9
6
|
export const installCommand = new Command('install')
|
|
10
7
|
.description('Run SST install, handling existing .sst folder by temporarily renaming sst.config.ts')
|
|
11
8
|
.action(async () => {
|
|
@@ -16,13 +13,13 @@ export const installCommand = new Command('install')
|
|
|
16
13
|
const sstFolderExists = fs.existsSync(sstFolder);
|
|
17
14
|
let backupPath = null;
|
|
18
15
|
let tempConfigPath = null;
|
|
19
|
-
if (sstFolderExists && configPath) {
|
|
16
|
+
if (!sstFolderExists && configPath) {
|
|
20
17
|
backupPath = `${configPath}.bkp`;
|
|
21
18
|
tempConfigPath = path.join(cwd, 'sst.config.ts');
|
|
22
19
|
console.log('.sst folder exists, temporarily renaming sst.config.ts...');
|
|
23
20
|
fs.renameSync(configPath, backupPath);
|
|
24
21
|
// Create temporary sst.config.ts from template
|
|
25
|
-
const templatePath =
|
|
22
|
+
const templatePath = getTemplatePath('sst.config.init.template');
|
|
26
23
|
if (fs.existsSync(templatePath)) {
|
|
27
24
|
const templateContent = fs.readFileSync(templatePath, 'utf-8');
|
|
28
25
|
fs.writeFileSync(tempConfigPath, templateContent, 'utf-8');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../bin/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../bin/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Find the package root directory by looking for package.json
|
|
3
|
+
* This works whether running from source (bin/utils/) or compiled (dist/bin/utils/)
|
|
4
|
+
*/
|
|
5
|
+
export declare function getPackageRoot(): string;
|
|
6
|
+
/**
|
|
7
|
+
* Get the path to a template file
|
|
8
|
+
*/
|
|
9
|
+
export declare function getTemplatePath(templateName: string): string;
|
|
1
10
|
export declare function findSstConfig(): string | null;
|
|
2
11
|
export declare function extractSstProjectName(configPath: string): string | null;
|
|
3
12
|
export declare function extractLaravelComponents(configPath: string): string[];
|
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
5
|
+
const __dirname = path.dirname(__filename);
|
|
6
|
+
/**
|
|
7
|
+
* Find the package root directory by looking for package.json
|
|
8
|
+
* This works whether running from source (bin/utils/) or compiled (dist/bin/utils/)
|
|
9
|
+
*/
|
|
10
|
+
export function getPackageRoot() {
|
|
11
|
+
let dir = __dirname;
|
|
12
|
+
// Traverse up until we find package.json
|
|
13
|
+
while (dir !== path.dirname(dir)) {
|
|
14
|
+
if (fs.existsSync(path.join(dir, 'package.json'))) {
|
|
15
|
+
return dir;
|
|
16
|
+
}
|
|
17
|
+
dir = path.dirname(dir);
|
|
18
|
+
}
|
|
19
|
+
throw new Error('Could not find package root (package.json not found)');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get the path to a template file
|
|
23
|
+
*/
|
|
24
|
+
export function getTemplatePath(templateName) {
|
|
25
|
+
const packageRoot = getPackageRoot();
|
|
26
|
+
return path.join(packageRoot, 'templates', templateName);
|
|
27
|
+
}
|
|
3
28
|
export function findSstConfig() {
|
|
4
29
|
const cwd = process.cwd();
|
|
5
30
|
const possiblePaths = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sst-config.js","sourceRoot":"","sources":["../../../bin/utils/sst-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"sst-config.js","sourceRoot":"","sources":["../../../bin/utils/sst-config.ts"],"names":[],"mappings":"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"}
|
package/laravel-sst.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { Input } from "../../../.sst/platform/src/components/input.js";
|
|
|
9
9
|
import { ClusterArgs } from "../../../.sst/platform/src/components/aws/cluster.js";
|
|
10
10
|
import { ServiceArgs } from "../../../.sst/platform/src/components/aws/service.js";
|
|
11
11
|
import { Dns } from "../../../.sst/platform/src/components/dns.js";
|
|
12
|
-
import { applyLinkedResourcesEnv, EnvCallback, EnvCallbacks } from "./src/laravel-env";
|
|
12
|
+
import { applyLinkedResourcesEnv, EnvCallback, EnvCallbacks, extractSecrets } from "./src/laravel-env";
|
|
13
13
|
|
|
14
14
|
// duplicate from cluster.ts
|
|
15
15
|
type Port = `${number}/${"http" | "https" | "tcp" | "udp" | "tcp_udp" | "tls"}`;
|
|
@@ -516,6 +516,13 @@ export class LaravelService extends Component {
|
|
|
516
516
|
fs.appendFileSync(envFilePath, '\n' + envContent);
|
|
517
517
|
}
|
|
518
518
|
});
|
|
519
|
+
|
|
520
|
+
const secrets = extractSecrets(resources);
|
|
521
|
+
secrets.forEach(secret => {
|
|
522
|
+
all([secret.name, secret.value]).apply(([name, value]) => {
|
|
523
|
+
fs.appendFileSync(envFilePath, `\n${name}=${value}`);
|
|
524
|
+
});
|
|
525
|
+
});
|
|
519
526
|
};
|
|
520
527
|
|
|
521
528
|
/**
|
package/package.json
CHANGED
package/src/laravel-env.ts
CHANGED
|
@@ -7,10 +7,11 @@ import * as pulumiAws from "@pulumi/aws";
|
|
|
7
7
|
import { Queue } from "../../../../.sst/platform/src/components/aws/queue.js";
|
|
8
8
|
import { Aurora } from "../../../../.sst/platform/src/components/aws/aurora.js";
|
|
9
9
|
import { Bucket } from "../../../../.sst/platform/src/components/aws/bucket.js";
|
|
10
|
+
import { Secret } from "../../../../.sst/platform/src/components/secret.js";
|
|
10
11
|
|
|
11
12
|
type EnvType = Record<string, string | Output<string>>|Record<string, string | Output<string | undefined> | undefined>;
|
|
12
13
|
type Database = Postgres | Mysql | Aurora | pulumiAws.rds.Instance;
|
|
13
|
-
type LinkSupportedTypes = Database | Email | Queue | Redis | Bucket;
|
|
14
|
+
type LinkSupportedTypes = Database | Email | Queue | Redis | Bucket | Secret;
|
|
14
15
|
|
|
15
16
|
export type EnvCallback = (resource: any) => EnvType;
|
|
16
17
|
export type EnvCallbacks = {
|
|
@@ -73,11 +74,16 @@ export function applyLinkedResourcesEnv(links: LinkSupportedTypes[], callbacks?:
|
|
|
73
74
|
...defaultEnv,
|
|
74
75
|
};
|
|
75
76
|
}
|
|
77
|
+
|
|
76
78
|
});
|
|
77
79
|
|
|
78
80
|
return environment;
|
|
79
81
|
}
|
|
80
82
|
|
|
83
|
+
export function extractSecrets(links: LinkSupportedTypes[]): Secret[] {
|
|
84
|
+
return links.filter((link): link is Secret => link instanceof Secret);
|
|
85
|
+
}
|
|
86
|
+
|
|
81
87
|
function applyDatabaseEnv(database: Database, callbacks?: EnvCallbacks): EnvType {
|
|
82
88
|
let port: number | undefined;
|
|
83
89
|
database.port.apply(value => port = value);
|