@synopackageland/templates 0.40.3 → 0.41.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/CHANGELOG.md +13 -0
- package/README.md +26 -0
- package/package.json +1 -1
- package/templates/_shared/package.json +1 -1
- package/templates/binary/.env.example +5 -0
- package/templates/binary/README.md +2 -0
- package/templates/binary/gitignore +6 -0
- package/templates/compose/.env.example +5 -0
- package/templates/compose/README.md +11 -0
- package/templates/compose/dsm-package.yaml +1 -1
- package/templates/compose/gitignore +6 -0
- package/templates/native-go/.env.example +5 -0
- package/templates/native-go/README.md +11 -0
- package/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +1 -1
- package/templates/native-go/backend/go.mod +1 -1
- package/templates/native-go/backend/go.sum +2 -2
- package/templates/native-go/gitignore +6 -0
- package/templates/native-go-delegate/frontend/test/capability-panels.test.ts +10 -5
- package/templates/native-go-vue/README.md +13 -0
- package/templates/native-go-vue/frontend/package-lock.json +19 -28
- package/templates/native-go-vue/frontend/package.json +2 -2
- package/templates/native-go-vue/gitignore +6 -0
- package/templates/native-node/.env.example +5 -0
- package/templates/native-node/README.md +2 -0
- package/templates/native-node/backend/package-lock.json +1 -1
- package/templates/native-node/dsm-package.yaml +1 -1
- package/templates/native-node/gitignore +6 -0
- package/templates/native-node-vue/README.md +2 -0
- package/templates/native-node-vue/gitignore +6 -0
- package/templates/native-python/.env.example +5 -0
- package/templates/native-python/README.md +2 -0
- package/templates/native-python/dsm-package.yaml +1 -1
- package/templates/native-python/gitignore +6 -0
- package/templates/native-python-vue/README.md +2 -0
- package/templates/native-python-vue/gitignore +6 -0
- package/templates/native-rust/.env.example +5 -0
- package/templates/native-rust/README.md +2 -0
- package/templates/native-rust/backend/Cargo.lock +2 -2
- package/templates/native-rust/backend/Cargo.toml +1 -1
- package/templates/native-rust/gitignore +6 -0
- package/templates/native-rust-delegate/backend/Cargo.lock +2 -2
- package/templates/native-rust-delegate/backend/Cargo.toml +1 -1
- package/templates/native-rust-vue/README.md +2 -0
- package/templates/native-rust-vue/gitignore +6 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.41.0
|
|
4
|
+
|
|
5
|
+
- Require CLI `~0.49.0` in every generated project through the shared test scaffold
|
|
6
|
+
- Pin SDK/App 0.51.0 across Go, Python, Node.js, Rust and Compose templates, with the frontend SDK on `~0.51.0` and regenerated dependency locks
|
|
7
|
+
- Pin UI 0.20.5 to satisfy the frontend SDK peer dependency and retain reproducible Vue builds
|
|
8
|
+
|
|
9
|
+
## 0.40.4
|
|
10
|
+
|
|
11
|
+
- Ignore private environment variants, key and certificate files, and npm credentials in every scaffold while keeping `.env.example` trackable
|
|
12
|
+
- Include placeholder-only environment examples for the optional AI tests
|
|
13
|
+
- Document secret storage under `synology/` for upstream forks without changing upstream ignore files
|
|
14
|
+
- Verify Git ignore behavior for every template and UI variant, including upstream forks, using the packed templates and actual CLI
|
|
15
|
+
|
|
3
16
|
## 0.40.3
|
|
4
17
|
|
|
5
18
|
- Use CLI architecture names in local package tests and SDK constants in background-limit assertions
|
package/README.md
CHANGED
|
@@ -354,6 +354,32 @@ configuration and DSM service definition, and upgrades retain the selection.
|
|
|
354
354
|
Changing ports uses reinstall. Declare `{port: gateway_https}` runtime bindings
|
|
355
355
|
when an upstream application needs its public port in its own configuration.
|
|
356
356
|
|
|
357
|
+
## Secret files
|
|
358
|
+
|
|
359
|
+
Every scaffold ignores `.env`, `.env.*`, `*.pem`, `*.key`, `*.p12` and `.npmrc`
|
|
360
|
+
at any depth within its project. `.env.example` remains trackable and contains
|
|
361
|
+
only placeholders for the optional AI tests; those commands load `.env` from
|
|
362
|
+
their working directory. Copy the example only when configuring those tests.
|
|
363
|
+
Keep real credentials out of examples and commits.
|
|
364
|
+
|
|
365
|
+
Templates ship ignore files as `gitignore` because npm excludes `.gitignore`;
|
|
366
|
+
`synopkgland init` restores the `.gitignore` name in the generated project.
|
|
367
|
+
The scaffold tests use the actual packed templates to verify that behavior.
|
|
368
|
+
|
|
369
|
+
### Upstream fork secret storage
|
|
370
|
+
|
|
371
|
+
For `init --upstream-fork`, all wrapper-owned files belong in `synology/`.
|
|
372
|
+
Store secrets in **`synology/.env`, never the fork root**, and run the optional
|
|
373
|
+
tests from `synology/`. Copy `synology/.env.example` only when configuring the
|
|
374
|
+
optional AI tests. Keep keys, certificates and private npm configuration under
|
|
375
|
+
`synology/` as well.
|
|
376
|
+
|
|
377
|
+
The upstream root `.gitignore` is not ours to edit and may not ignore a root
|
|
378
|
+
`.env`. The generated `synology/.gitignore` protects secrets inside `synology/`;
|
|
379
|
+
it cannot protect files in the parent directory. Preserve upstream ignore files
|
|
380
|
+
and history. Use the CLI's `synopkgland skill show upstream-fork` for the rest of
|
|
381
|
+
the fork workflow.
|
|
382
|
+
|
|
357
383
|
## App-open smoke
|
|
358
384
|
|
|
359
385
|
Every generated project includes `tests/e2e/smoke.e2e.ts`, `e2e.config.ts` and
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@synopackageland/templates",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.41.0",
|
|
4
4
|
"description": "Project templates for synopkgland init: native-go, native-python, native-node and native-rust (plain or Vue, with jobs, delegate and root-ops overlays), binary and compose.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"e2e:ai": "node --env-file-if-exists=.env node_modules/@synopackageland/cli/dist/e2e/dsm.js tunnel -- e2e run --config e2e.ai.config.ts tests/e2e/action.ai.e2e.ts"
|
|
12
12
|
},
|
|
13
13
|
"devDependencies": {
|
|
14
|
-
"@synopackageland/cli": "~0.
|
|
14
|
+
"@synopackageland/cli": "~0.49.0",
|
|
15
15
|
"@e2e-dev/web": "^0.14.0",
|
|
16
16
|
"e2e": "^0.19.0"
|
|
17
17
|
}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
## Local tests
|
|
4
4
|
|
|
5
|
+
Copy `.env.example` to the ignored `.env` only for optional AI tests; keep real credentials out of examples and commits.
|
|
6
|
+
|
|
5
7
|
From the project root, install the test tools before running the optional tests:
|
|
6
8
|
|
|
7
9
|
```sh
|
|
@@ -14,3 +16,12 @@ After committing the generated root lockfile, use `npm ci --include=dev`.
|
|
|
14
16
|
Configure the upstream image and its real readiness endpoint before
|
|
15
17
|
`test:local`; see `AGENTS.md` for the Compose packaging workflow.
|
|
16
18
|
|
|
19
|
+
## Secrets in an upstream fork
|
|
20
|
+
|
|
21
|
+
With `--upstream-fork`, store secrets in `synology/.env`, never in the fork root.
|
|
22
|
+
Run the optional tests from `synology/`; its `.gitignore` protects `.env`,
|
|
23
|
+
`.env.*`, `*.pem`, `*.key`, `*.p12` and `.npmrc`, while `.env.example` remains
|
|
24
|
+
trackable with placeholders only. The upstream root `.gitignore` is not ours
|
|
25
|
+
to edit and may not ignore a root `.env`.
|
|
26
|
+
See the [fork guide](https://github.com/synopackageland/syno-pkg-land-templates#upstream-fork-secret-storage).
|
|
27
|
+
|
|
@@ -23,7 +23,7 @@ compose:
|
|
|
23
23
|
web: {service: web, port: 8080, health: {path: /, status: 200}}
|
|
24
24
|
network: {egress: isolated}
|
|
25
25
|
identity_gateway:
|
|
26
|
-
sdk: 0.
|
|
26
|
+
sdk: 0.51.0
|
|
27
27
|
mode: none
|
|
28
28
|
listen: {http: 28000}
|
|
29
29
|
# Web Apps default to new-page through the shared app-launch resolver.
|
|
@@ -31,6 +31,8 @@ nonblocking job. See the SDK's [request deadline contract](https://github.com/sy
|
|
|
31
31
|
|
|
32
32
|
## Local tests
|
|
33
33
|
|
|
34
|
+
Copy `.env.example` to the ignored `.env` only for optional AI tests; keep real credentials out of examples and commits.
|
|
35
|
+
|
|
34
36
|
From the project root, install the test tools before running the optional tests:
|
|
35
37
|
|
|
36
38
|
```sh
|
|
@@ -44,6 +46,15 @@ Before `npm run test:local`, prepare the backend and, for Vue, build the
|
|
|
44
46
|
frontend using the steps below and the backend section in `AGENTS.md`, then
|
|
45
47
|
run `synopkgland ctl generate`.
|
|
46
48
|
|
|
49
|
+
## Secrets in an upstream fork
|
|
50
|
+
|
|
51
|
+
With `--upstream-fork`, store secrets in `synology/.env`, never in the fork root.
|
|
52
|
+
Run the optional tests from `synology/`; its `.gitignore` protects `.env`,
|
|
53
|
+
`.env.*`, `*.pem`, `*.key`, `*.p12` and `.npmrc`, while `.env.example` remains
|
|
54
|
+
trackable with placeholders only. The upstream root `.gitignore` is not ours
|
|
55
|
+
to edit and may not ignore a root `.env`.
|
|
56
|
+
See the [fork guide](https://github.com/synopackageland/syno-pkg-land-templates#upstream-fork-secret-storage).
|
|
57
|
+
|
|
47
58
|
## Quick start
|
|
48
59
|
|
|
49
60
|
Needs Node.js with `synopkgland` installed, and Go 1.26.10.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
github.com/synopackageland/syno-pkg-land-sdk v0.
|
|
2
|
-
github.com/synopackageland/syno-pkg-land-sdk v0.
|
|
1
|
+
github.com/synopackageland/syno-pkg-land-sdk v0.51.0 h1:DkFlrW3gsvUze8oqHtDJ+I4yrIdbFUyImqCcF4zWT0I=
|
|
2
|
+
github.com/synopackageland/syno-pkg-land-sdk v0.51.0/go.mod h1:A4ZvKEQnCMk5offv/57Zsf1Z/pV1RmylS9cMfDqdBMQ=
|
|
3
3
|
golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ=
|
|
4
4
|
golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
|
|
@@ -42,10 +42,13 @@ test('the default surface binds the real routes and the session-only picker',asy
|
|
|
42
42
|
expect(url).toBe('/webapi/entry.cgi')
|
|
43
43
|
const body=init?.body as URLSearchParams
|
|
44
44
|
expect(body.get('api')).toBe('SYNO.FileStation.List')
|
|
45
|
-
expect(body.get('method'))
|
|
46
|
-
expect(body.
|
|
45
|
+
expect(['list_share','list']).toContain(body.get('method'))
|
|
46
|
+
expect(body.has('SynoToken')).toBe(false)
|
|
47
|
+
expect(new Headers(init?.headers).get('X-SYNO-TOKEN')).toBe('fixture-token')
|
|
47
48
|
expect(init?.credentials).toBe('same-origin')
|
|
48
|
-
return new Response(JSON.stringify({success:true,data:{shares:[{name:'home',path:'/home',isdir:true}],offset:0,total:1}}))
|
|
49
|
+
if(body.get('method')==='list_share')return new Response(JSON.stringify({success:true,data:{shares:[{name:'home',path:'/home',isdir:true}],offset:0,total:1}}))
|
|
50
|
+
expect(body.get('folder_path')).toBe('/home')
|
|
51
|
+
return new Response(JSON.stringify({success:true,data:{files:[],offset:0,total:0}}))
|
|
49
52
|
})
|
|
50
53
|
vi.stubGlobal('fetch',fetch);cleanup.push(()=>vi.unstubAllGlobals())
|
|
51
54
|
const call=vi.fn(async(method:string,params?:unknown)=>{
|
|
@@ -61,10 +64,12 @@ test('the default surface binds the real routes and the session-only picker',asy
|
|
|
61
64
|
const root=render({call,locale:'en',files:{token:()=> 'fixture-token'}});await settle()
|
|
62
65
|
button(root,'Choose folder').click();await settle()
|
|
63
66
|
// The SDK picker selects a folder with a row click.
|
|
64
|
-
|
|
67
|
+
await vi.waitFor(()=>expect(root.querySelector('[data-row-key="/home"]')).toBeTruthy())
|
|
68
|
+
const row=root.querySelector<HTMLElement>('[data-row-key="/home"]')!;row.dispatchEvent(new MouseEvent('click',{bubbles:true}));await settle()
|
|
65
69
|
button(root,'Confirm selection').click();await settle()
|
|
66
70
|
expect(call).toHaveBeenCalledWith('delegate.select_destination',{key:'save',path:'/home'})
|
|
67
|
-
|
|
71
|
+
// Selecting a folder prefetches its children through the same session-only provider.
|
|
72
|
+
await vi.waitFor(()=>expect(fetch).toHaveBeenCalledTimes(2))
|
|
68
73
|
expect(call).not.toHaveBeenCalledWith('bg.browse',expect.anything())
|
|
69
74
|
// The SDK hides the sample save unless an App opts in; the template opts in with sample-save.
|
|
70
75
|
button(root,'Save example file').click();await settle()
|
|
@@ -9,6 +9,8 @@ files, portal, jobs and delegate components come from `@synopackageland/sdk/vue`
|
|
|
9
9
|
|
|
10
10
|
## Local tests
|
|
11
11
|
|
|
12
|
+
Copy `.env.example` to the ignored `.env` only for optional AI tests; keep real credentials out of examples and commits.
|
|
13
|
+
|
|
12
14
|
From the project root, install the test tools before running the optional tests:
|
|
13
15
|
|
|
14
16
|
```sh
|
|
@@ -22,6 +24,17 @@ Before `npm run test:local`, prepare the backend and, for Vue, build the
|
|
|
22
24
|
frontend using the steps below and the backend section in `AGENTS.md`, then
|
|
23
25
|
run `synopkgland ctl generate`.
|
|
24
26
|
|
|
27
|
+
## Secrets in an upstream fork
|
|
28
|
+
|
|
29
|
+
With `--upstream-fork`, store secrets in `synology/.env`, never in the fork root.
|
|
30
|
+
Run the optional tests from `synology/`; its `.gitignore` protects `.env`,
|
|
31
|
+
`.env.*`, `*.pem`, `*.key`, `*.p12` and `.npmrc`, while `.env.example` remains
|
|
32
|
+
trackable with placeholders only. The upstream root `.gitignore` is not ours
|
|
33
|
+
to edit and may not ignore a root `.env`.
|
|
34
|
+
See the [fork guide](https://github.com/synopackageland/syno-pkg-land-templates#upstream-fork-secret-storage).
|
|
35
|
+
|
|
36
|
+
## Frontend
|
|
37
|
+
|
|
25
38
|
```sh
|
|
26
39
|
cd frontend
|
|
27
40
|
npm ci --include=dev
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
"name": "native-dsm-vue-app",
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"@lucide/vue": "1.48.0",
|
|
10
|
-
"@synopackageland/sdk": "0.
|
|
11
|
-
"@synopackageland/ui": "0.20.
|
|
10
|
+
"@synopackageland/sdk": "~0.51.0",
|
|
11
|
+
"@synopackageland/ui": "0.20.5",
|
|
12
12
|
"vue": "3.5.43"
|
|
13
13
|
},
|
|
14
14
|
"devDependencies": {
|
|
@@ -1168,22 +1168,19 @@
|
|
|
1168
1168
|
"license": "MIT"
|
|
1169
1169
|
},
|
|
1170
1170
|
"node_modules/@swc/helpers": {
|
|
1171
|
-
"version": "0.5.
|
|
1172
|
-
"resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.
|
|
1173
|
-
"integrity": "sha512-
|
|
1174
|
-
"license": "Apache-2.0"
|
|
1175
|
-
"dependencies": {
|
|
1176
|
-
"tslib": "^2.8.0"
|
|
1177
|
-
}
|
|
1171
|
+
"version": "0.5.24",
|
|
1172
|
+
"resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.24.tgz",
|
|
1173
|
+
"integrity": "sha512-6tcXo4kA8HgGO7AVmawB57RYi/piBPYVHVcO6dXjX+SZw8GoHmi262sp4v2Ha2kNP9Cx84qei27yT+fjS1lxgg==",
|
|
1174
|
+
"license": "Apache-2.0"
|
|
1178
1175
|
},
|
|
1179
1176
|
"node_modules/@synopackageland/sdk": {
|
|
1180
|
-
"version": "0.
|
|
1181
|
-
"resolved": "https://registry.npmjs.org/@synopackageland/sdk/-/sdk-0.
|
|
1182
|
-
"integrity": "sha512-
|
|
1177
|
+
"version": "0.51.0",
|
|
1178
|
+
"resolved": "https://registry.npmjs.org/@synopackageland/sdk/-/sdk-0.51.0.tgz",
|
|
1179
|
+
"integrity": "sha512-Ijv4n5B2YlDde4P2c3AZj0YPiO08ft+kUiNYIGfQiv3nbyniljX0k6nllG7oi85jD2gPrWQM+HIw7BVpU70WWg==",
|
|
1183
1180
|
"license": "MIT",
|
|
1184
1181
|
"peerDependencies": {
|
|
1185
1182
|
"@lucide/vue": "^1.48.0",
|
|
1186
|
-
"@synopackageland/ui": ">=0.
|
|
1183
|
+
"@synopackageland/ui": ">=0.20.5 <0.21.0",
|
|
1187
1184
|
"vue": "^3.5.0"
|
|
1188
1185
|
},
|
|
1189
1186
|
"peerDependenciesMeta": {
|
|
@@ -1196,9 +1193,9 @@
|
|
|
1196
1193
|
}
|
|
1197
1194
|
},
|
|
1198
1195
|
"node_modules/@synopackageland/ui": {
|
|
1199
|
-
"version": "0.20.
|
|
1200
|
-
"resolved": "https://registry.npmjs.org/@synopackageland/ui/-/ui-0.20.
|
|
1201
|
-
"integrity": "sha512-
|
|
1196
|
+
"version": "0.20.5",
|
|
1197
|
+
"resolved": "https://registry.npmjs.org/@synopackageland/ui/-/ui-0.20.5.tgz",
|
|
1198
|
+
"integrity": "sha512-lyn3W+VvPu5BuZN1CMPZP3R7B1phUcqRzhmSmSJ8rubptPk1/wbfa91cLdYtRC9qKBBSnXlf6c9ibjkskf5qLQ==",
|
|
1202
1199
|
"license": "MIT",
|
|
1203
1200
|
"dependencies": {
|
|
1204
1201
|
"@floating-ui/dom": "1.8.0",
|
|
@@ -2440,9 +2437,9 @@
|
|
|
2440
2437
|
}
|
|
2441
2438
|
},
|
|
2442
2439
|
"node_modules/prosemirror-changeset": {
|
|
2443
|
-
"version": "2.4.
|
|
2444
|
-
"resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.4.
|
|
2445
|
-
"integrity": "sha512-
|
|
2440
|
+
"version": "2.4.6",
|
|
2441
|
+
"resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.4.6.tgz",
|
|
2442
|
+
"integrity": "sha512-P0cY3DSLm4M2boUOCmHDyaID5o6HgWmb21Bvs9p8lLqfJjKBBEHG5Ma5qW5SCmwOYamtWOLf2k+yvt6077zlTg==",
|
|
2446
2443
|
"license": "MIT",
|
|
2447
2444
|
"dependencies": {
|
|
2448
2445
|
"prosemirror-transform": "^1.0.0"
|
|
@@ -2559,9 +2556,9 @@
|
|
|
2559
2556
|
}
|
|
2560
2557
|
},
|
|
2561
2558
|
"node_modules/prosemirror-transform": {
|
|
2562
|
-
"version": "1.12.
|
|
2563
|
-
"resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.12.
|
|
2564
|
-
"integrity": "sha512-
|
|
2559
|
+
"version": "1.12.5",
|
|
2560
|
+
"resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.12.5.tgz",
|
|
2561
|
+
"integrity": "sha512-3EBXZBM4h3MKuWvs9sQ7IA0/v6jCqCZ4wC08PIvzY1VSQWDL90KEyfg5C0Ex52UJesf/QVogxvuBsZdKmLc3NQ==",
|
|
2565
2562
|
"license": "MIT",
|
|
2566
2563
|
"dependencies": {
|
|
2567
2564
|
"prosemirror-model": "^1.21.0"
|
|
@@ -2783,12 +2780,6 @@
|
|
|
2783
2780
|
"node": "^22.14.0 || >=24.0.0"
|
|
2784
2781
|
}
|
|
2785
2782
|
},
|
|
2786
|
-
"node_modules/tslib": {
|
|
2787
|
-
"version": "2.8.1",
|
|
2788
|
-
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
|
|
2789
|
-
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
|
|
2790
|
-
"license": "0BSD"
|
|
2791
|
-
},
|
|
2792
2783
|
"node_modules/typescript": {
|
|
2793
2784
|
"version": "5.9.3",
|
|
2794
2785
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
|
|
@@ -31,6 +31,8 @@ nonblocking job. See the SDK's [request deadline contract](https://github.com/sy
|
|
|
31
31
|
|
|
32
32
|
## Local tests
|
|
33
33
|
|
|
34
|
+
Copy `.env.example` to the ignored `.env` only for optional AI tests; keep real credentials out of examples and commits.
|
|
35
|
+
|
|
34
36
|
From the project root, install the test tools before running the optional tests:
|
|
35
37
|
|
|
36
38
|
```sh
|
|
@@ -9,6 +9,8 @@ delegate components come from `@synopackageland/sdk/vue` (types from
|
|
|
9
9
|
|
|
10
10
|
## Local tests
|
|
11
11
|
|
|
12
|
+
Copy `.env.example` to the ignored `.env` only for optional AI tests; keep real credentials out of examples and commits.
|
|
13
|
+
|
|
12
14
|
From the project root, install the test tools before running the optional tests:
|
|
13
15
|
|
|
14
16
|
```sh
|
|
@@ -31,6 +31,8 @@ nonblocking job. See the SDK's [request deadline contract](https://github.com/sy
|
|
|
31
31
|
|
|
32
32
|
## Local tests
|
|
33
33
|
|
|
34
|
+
Copy `.env.example` to the ignored `.env` only for optional AI tests; keep real credentials out of examples and commits.
|
|
35
|
+
|
|
34
36
|
From the project root, install the test tools before running the optional tests:
|
|
35
37
|
|
|
36
38
|
```sh
|
|
@@ -9,6 +9,8 @@ delegate components come from `@synopackageland/sdk/vue` (types from
|
|
|
9
9
|
|
|
10
10
|
## Local tests
|
|
11
11
|
|
|
12
|
+
Copy `.env.example` to the ignored `.env` only for optional AI tests; keep real credentials out of examples and commits.
|
|
13
|
+
|
|
12
14
|
From the project root, install the test tools before running the optional tests:
|
|
13
15
|
|
|
14
16
|
```sh
|
|
@@ -31,6 +31,8 @@ nonblocking job. See the SDK's [request deadline contract](https://github.com/sy
|
|
|
31
31
|
|
|
32
32
|
## Local tests
|
|
33
33
|
|
|
34
|
+
Copy `.env.example` to the ignored `.env` only for optional AI tests; keep real credentials out of examples and commits.
|
|
35
|
+
|
|
34
36
|
From the project root, install the test tools before running the optional tests:
|
|
35
37
|
|
|
36
38
|
```sh
|
|
@@ -104,8 +104,8 @@ dependencies = [
|
|
|
104
104
|
|
|
105
105
|
[[package]]
|
|
106
106
|
name = "syno-pkg-land-app"
|
|
107
|
-
version = "0.
|
|
108
|
-
source = "git+https://github.com/synopackageland/syno-pkg-land-sdk?tag=v0.
|
|
107
|
+
version = "0.51.0"
|
|
108
|
+
source = "git+https://github.com/synopackageland/syno-pkg-land-sdk?tag=v0.51.0#fffdbb3781fe7f8c57294cdf082b1bf347c0957d"
|
|
109
109
|
dependencies = [
|
|
110
110
|
"libc",
|
|
111
111
|
"serde",
|
|
@@ -9,7 +9,7 @@ libc = "0.2"
|
|
|
9
9
|
serde = { version = "1", features = ["derive"] }
|
|
10
10
|
serde_json = "1"
|
|
11
11
|
# The SDK version is the tag; `synopkgland check` reads it from Cargo.lock.
|
|
12
|
-
syno-pkg-land-app = { git = "https://github.com/synopackageland/syno-pkg-land-sdk", tag = "v0.
|
|
12
|
+
syno-pkg-land-app = { git = "https://github.com/synopackageland/syno-pkg-land-sdk", tag = "v0.51.0" }
|
|
13
13
|
|
|
14
14
|
[profile.release]
|
|
15
15
|
# A handler panic becomes an "internal" reply; abort would end the App without one.
|
|
@@ -170,8 +170,8 @@ dependencies = [
|
|
|
170
170
|
|
|
171
171
|
[[package]]
|
|
172
172
|
name = "syno-pkg-land-app"
|
|
173
|
-
version = "0.
|
|
174
|
-
source = "git+https://github.com/synopackageland/syno-pkg-land-sdk?tag=v0.
|
|
173
|
+
version = "0.51.0"
|
|
174
|
+
source = "git+https://github.com/synopackageland/syno-pkg-land-sdk?tag=v0.51.0#fffdbb3781fe7f8c57294cdf082b1bf347c0957d"
|
|
175
175
|
dependencies = [
|
|
176
176
|
"libc",
|
|
177
177
|
"serde",
|
|
@@ -10,7 +10,7 @@ libc = "0.2"
|
|
|
10
10
|
serde = { version = "1", features = ["derive"] }
|
|
11
11
|
serde_json = "1"
|
|
12
12
|
# The SDK version is the tag; `synopkgland check` reads it from Cargo.lock.
|
|
13
|
-
syno-pkg-land-app = { git = "https://github.com/synopackageland/syno-pkg-land-sdk", tag = "v0.
|
|
13
|
+
syno-pkg-land-app = { git = "https://github.com/synopackageland/syno-pkg-land-sdk", tag = "v0.51.0" }
|
|
14
14
|
|
|
15
15
|
[profile.release]
|
|
16
16
|
# A handler panic becomes an "internal" reply; abort would end the App without one.
|
|
@@ -9,6 +9,8 @@ delegate components come from `@synopackageland/sdk/vue` (types from
|
|
|
9
9
|
|
|
10
10
|
## Local tests
|
|
11
11
|
|
|
12
|
+
Copy `.env.example` to the ignored `.env` only for optional AI tests; keep real credentials out of examples and commits.
|
|
13
|
+
|
|
12
14
|
From the project root, install the test tools before running the optional tests:
|
|
13
15
|
|
|
14
16
|
```sh
|