storemeta 0.1.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/.env.release.example +8 -0
- package/LICENSE +21 -0
- package/README.md +94 -0
- package/dist/auth/apple/credential-state.js +14 -0
- package/dist/auth/apple/jwt.js +56 -0
- package/dist/auth/apple/load-credentials.js +36 -0
- package/dist/auth/credential-state.js +6 -0
- package/dist/auth/google/credential-state.js +10 -0
- package/dist/auth/google/load-credentials.js +18 -0
- package/dist/auth/google/service-account-auth.js +25 -0
- package/dist/auth/redact.js +17 -0
- package/dist/cli/auth-check.js +46 -0
- package/dist/cli/config-doctor.js +40 -0
- package/dist/cli/context.js +23 -0
- package/dist/cli/errors.js +10 -0
- package/dist/cli/exit-code.js +6 -0
- package/dist/cli/init.js +60 -0
- package/dist/cli/locales-list.js +37 -0
- package/dist/cli/metadata-diff.js +57 -0
- package/dist/cli/metadata-pull.js +52 -0
- package/dist/cli/metadata-push.js +95 -0
- package/dist/cli/render.js +57 -0
- package/dist/cli/result-types.js +1 -0
- package/dist/cli/scaffold.js +76 -0
- package/dist/cli/screenshots-diff.js +65 -0
- package/dist/cli/screenshots-pull.js +72 -0
- package/dist/cli/screenshots-push.js +96 -0
- package/dist/cli/validate.js +74 -0
- package/dist/cli.js +222 -0
- package/dist/config/apps.js +21 -0
- package/dist/config/load-config.js +30 -0
- package/dist/config/schema.js +97 -0
- package/dist/config/select-app.js +10 -0
- package/dist/config/select-platforms.js +17 -0
- package/dist/config/single-app.js +16 -0
- package/dist/config/types.js +1 -0
- package/dist/config/validate-base-dirs.js +33 -0
- package/dist/config/validate-credential-env-names.js +32 -0
- package/dist/config/validate-platform-identifiers.js +24 -0
- package/dist/formats/load-metadata.js +38 -0
- package/dist/formats/metadata-types.js +1 -0
- package/dist/formats/screenshot-types.js +1 -0
- package/dist/formats/serialize-metadata.js +20 -0
- package/dist/locales/groups.js +12 -0
- package/dist/locales/map.js +15 -0
- package/dist/locales/normalize.js +22 -0
- package/dist/locales/types.js +1 -0
- package/dist/locales/validate-groups.js +14 -0
- package/dist/platforms/apple/client.js +109 -0
- package/dist/platforms/apple/metadata/pull.js +120 -0
- package/dist/platforms/apple/metadata/push.js +272 -0
- package/dist/platforms/apple/metadata/types.js +1 -0
- package/dist/platforms/apple/screenshots/pull.js +160 -0
- package/dist/platforms/apple/screenshots/push.js +418 -0
- package/dist/platforms/google/client.js +42 -0
- package/dist/platforms/google/edits.js +38 -0
- package/dist/platforms/google/metadata/pull.js +23 -0
- package/dist/platforms/google/metadata/push.js +73 -0
- package/dist/platforms/google/metadata/types.js +1 -0
- package/dist/platforms/google/screenshots/pull.js +129 -0
- package/dist/platforms/google/screenshots/push.js +252 -0
- package/dist/platforms/google/screenshots/types.js +7 -0
- package/dist/validation/metadata/apple.js +31 -0
- package/dist/validation/metadata/files.js +58 -0
- package/dist/validation/metadata/google.js +46 -0
- package/dist/validation/screenshots/extensions.js +17 -0
- package/dist/validation/screenshots/files.js +55 -0
- package/dist/validation/screenshots/folders.js +41 -0
- package/dist/validation/screenshots/order.js +25 -0
- package/dist/writers/ensure-directory.js +16 -0
- package/dist/writers/order-screenshots.js +19 -0
- package/dist/writers/resolve-screenshot-path.js +8 -0
- package/dist/writers/resolve-within-base-dir.js +17 -0
- package/dist/writers/write-metadata.js +17 -0
- package/docs/API_EDITABLE_METADATA_SURFACE.md +319 -0
- package/docs/AUTH_SETUP.md +67 -0
- package/docs/DOCUMENTATION.md +285 -0
- package/docs/PROJECT_PLAN.md +687 -0
- package/docs/RELEASE_VERIFICATION.md +70 -0
- package/docs/TODO.md +308 -0
- package/examples/README.md +8 -0
- package/examples/metadata/apple/en-US.yml +11 -0
- package/examples/metadata/apple/tr.yml +11 -0
- package/examples/metadata/google/en-US.yml +6 -0
- package/examples/metadata/google/tr.yml +6 -0
- package/examples/screenshots/apple/en-US/APP_IPHONE_65/1.png +1 -0
- package/examples/screenshots/apple/tr/APP_IPHONE_65/1.png +1 -0
- package/examples/screenshots/google/en-US/phoneScreenshots/1.png +1 -0
- package/examples/screenshots/google/tr/phoneScreenshots/1.png +1 -0
- package/examples/storemeta.yml +29 -0
- package/package.json +55 -0
- package/storemeta.release.example.yml +27 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Release Verification
|
|
2
|
+
|
|
3
|
+
This project includes a local verification script and templates for final release checks.
|
|
4
|
+
|
|
5
|
+
## Local Verification
|
|
6
|
+
|
|
7
|
+
Run checks that do not require Apple or Google credentials:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm run verify:release
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
This runs:
|
|
14
|
+
|
|
15
|
+
- TypeScript check
|
|
16
|
+
- test suite
|
|
17
|
+
- build
|
|
18
|
+
- `npm pack --dry-run`
|
|
19
|
+
|
|
20
|
+
## Real Store Verification
|
|
21
|
+
|
|
22
|
+
Create local files from the templates:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
cp storemeta.release.example.yml storemeta.release.yml
|
|
26
|
+
cp .env.release.example .env.release.local
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Fill these values in `storemeta.release.yml`:
|
|
30
|
+
|
|
31
|
+
- Apple `appId`
|
|
32
|
+
- Google `packageName`
|
|
33
|
+
- target locale list
|
|
34
|
+
|
|
35
|
+
Fill these values in `.env.release.local`:
|
|
36
|
+
|
|
37
|
+
- `STORE_APPLE_ISSUER_ID`
|
|
38
|
+
- `STORE_APPLE_KEY_ID`
|
|
39
|
+
- `STORE_APPLE_PRIVATE_KEY_PATH`
|
|
40
|
+
- `STORE_GOOGLE_SERVICE_ACCOUNT_PATH`
|
|
41
|
+
|
|
42
|
+
Run all real-store checks:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npm run verify:release -- --real-store
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Run only one platform:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
npm run verify:release -- --real-store --platform apple
|
|
52
|
+
npm run verify:release -- --real-store --platform google
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Run one platform and one locale:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
npm run verify:release -- --real-store --platform apple --locale tr
|
|
59
|
+
npm run verify:release -- --real-store --platform google --locale tr-TR
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
The real-store mode runs:
|
|
63
|
+
|
|
64
|
+
- `storemeta validate`
|
|
65
|
+
- metadata pull
|
|
66
|
+
- metadata push with `--dry-run`
|
|
67
|
+
- screenshots pull
|
|
68
|
+
- screenshots push with `--dry-run`
|
|
69
|
+
|
|
70
|
+
Do not commit `storemeta.release.yml` or `.env.release.local` if they contain real app identifiers or credential paths.
|
package/docs/TODO.md
ADDED
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
# TODO
|
|
2
|
+
|
|
3
|
+
This file is the implementation checklist for `storemeta`, ordered to minimize rework and unblock end-to-end development as early as possible.
|
|
4
|
+
|
|
5
|
+
## 0. Security And Repo Hygiene
|
|
6
|
+
|
|
7
|
+
- [ ] Rotate any previously used Apple and Google credentials before anything public is pushed.
|
|
8
|
+
- [x] Ensure `reference/` stays ignored and is never added to Git history.
|
|
9
|
+
- [x] Add any additional local-only secret paths to `.gitignore` if needed.
|
|
10
|
+
- [x] Confirm the repo contains no machine-specific paths or private metadata.
|
|
11
|
+
|
|
12
|
+
## 1. Project Scaffold
|
|
13
|
+
|
|
14
|
+
- [x] Create `package.json`.
|
|
15
|
+
- [x] Set package name to `storemeta`.
|
|
16
|
+
- [x] Set the CLI binary name to `storemeta` via the `bin` field.
|
|
17
|
+
- [x] Add `type`, `engines`, `files`, `scripts`, and initial metadata to `package.json`.
|
|
18
|
+
- [x] Create `tsconfig.json`.
|
|
19
|
+
- [x] Create the initial source tree under `src/`.
|
|
20
|
+
- [x] Add a build output target such as `dist/`.
|
|
21
|
+
- [x] Add a minimal `.npmignore` or rely on `package.json` `files`.
|
|
22
|
+
- [x] Add a basic `CONTRIBUTING.md`.
|
|
23
|
+
|
|
24
|
+
## 2. Tooling And Dependency Setup
|
|
25
|
+
|
|
26
|
+
- [x] Choose the CLI framework or parser.
|
|
27
|
+
- [x] Add TypeScript runtime and build dependencies.
|
|
28
|
+
- [x] Add a YAML parser.
|
|
29
|
+
- [x] Add an HTTP client strategy.
|
|
30
|
+
- [x] Add a schema validation library for config and metadata validation.
|
|
31
|
+
- [x] Add test tooling.
|
|
32
|
+
- [ ] Add linting and formatting tooling if desired.
|
|
33
|
+
|
|
34
|
+
## 3. Source Structure
|
|
35
|
+
|
|
36
|
+
- [x] Create `src/cli/`.
|
|
37
|
+
- [x] Create `src/config/`.
|
|
38
|
+
- [x] Create `src/formats/`.
|
|
39
|
+
- [x] Create `src/locales/`.
|
|
40
|
+
- [x] Create `src/writers/`.
|
|
41
|
+
- [x] Create `src/validation/`.
|
|
42
|
+
- [x] Create `src/auth/apple/`.
|
|
43
|
+
- [x] Create `src/auth/google/`.
|
|
44
|
+
- [x] Create `src/platforms/apple/metadata/`.
|
|
45
|
+
- [x] Create `src/platforms/apple/screenshots/`.
|
|
46
|
+
- [x] Create `src/platforms/google/metadata/`.
|
|
47
|
+
- [x] Create `src/platforms/google/screenshots/`.
|
|
48
|
+
|
|
49
|
+
## 4. Core Domain Types
|
|
50
|
+
|
|
51
|
+
- [x] Define shared config types.
|
|
52
|
+
- [x] Define shared metadata document types.
|
|
53
|
+
- [x] Define Apple metadata mapping types.
|
|
54
|
+
- [x] Define Google metadata mapping types.
|
|
55
|
+
- [x] Define screenshot descriptor types.
|
|
56
|
+
- [x] Define locale mapping and grouping types.
|
|
57
|
+
- [x] Define command result and summary types.
|
|
58
|
+
- [x] Define reusable error types.
|
|
59
|
+
|
|
60
|
+
## 5. Config System
|
|
61
|
+
|
|
62
|
+
- [x] Implement loading for `storemeta.yml`.
|
|
63
|
+
- [x] Support `--config <path>`.
|
|
64
|
+
- [x] Implement schema validation for the root config.
|
|
65
|
+
- [x] Support single-app usage cleanly.
|
|
66
|
+
- [x] Support multi-app config structure even if only one app is used initially.
|
|
67
|
+
- [x] Implement app selection logic via `project.defaultApp` and `--app`.
|
|
68
|
+
- [x] Validate required platform identifiers.
|
|
69
|
+
- [x] Validate configured credential env var names.
|
|
70
|
+
- [x] Validate base directory paths.
|
|
71
|
+
|
|
72
|
+
## 6. Credential Loading
|
|
73
|
+
|
|
74
|
+
- [x] Implement Apple credential loading from environment variables.
|
|
75
|
+
- [x] Implement Google credential loading from environment variables.
|
|
76
|
+
- [x] Validate missing credential cases with clear errors.
|
|
77
|
+
- [x] Ensure secrets never appear in logs.
|
|
78
|
+
- [x] Add helpers for resolved credential state without exposing secret values.
|
|
79
|
+
|
|
80
|
+
## 7. Metadata File Parsing
|
|
81
|
+
|
|
82
|
+
- [x] Implement YAML parsing for `.yml`.
|
|
83
|
+
- [x] Implement YAML parsing for `.yaml`.
|
|
84
|
+
- [x] Implement YAML parsing for `.md` file contents.
|
|
85
|
+
- [x] Add deterministic serialization for pulled metadata files.
|
|
86
|
+
- [x] Preserve stable key ordering in written files.
|
|
87
|
+
- [x] Add platform-aware schema validation for Apple metadata documents.
|
|
88
|
+
- [x] Add platform-aware schema validation for Google metadata documents.
|
|
89
|
+
|
|
90
|
+
## 8. Locale System
|
|
91
|
+
|
|
92
|
+
- [x] Implement locale normalization utilities.
|
|
93
|
+
- [x] Implement explicit per-platform locale mapping support.
|
|
94
|
+
- [x] Implement screenshot grouping support from config.
|
|
95
|
+
- [x] Validate that locale groups resolve deterministically.
|
|
96
|
+
- [x] Add tests for locale edge cases such as `zh-Hans`, `zh-Hant`, `he-IL`, and grouped English locales.
|
|
97
|
+
|
|
98
|
+
## 9. Deterministic File Writers
|
|
99
|
+
|
|
100
|
+
- [x] Implement metadata file writing helpers.
|
|
101
|
+
- [x] Implement screenshot path resolution helpers.
|
|
102
|
+
- [x] Implement deterministic screenshot filename ordering.
|
|
103
|
+
- [x] Ensure directories are created safely as needed.
|
|
104
|
+
- [x] Prevent accidental writes outside configured base directories.
|
|
105
|
+
|
|
106
|
+
## 10. CLI Shell
|
|
107
|
+
|
|
108
|
+
- [x] Implement the `storemeta` entry point.
|
|
109
|
+
- [x] Implement global option parsing.
|
|
110
|
+
- [x] Implement shared command context creation.
|
|
111
|
+
- [x] Implement shared summary and error rendering.
|
|
112
|
+
- [x] Implement `--verbose`.
|
|
113
|
+
- [x] Implement non-zero exit behavior for failures.
|
|
114
|
+
|
|
115
|
+
## 11. `storemeta init`
|
|
116
|
+
|
|
117
|
+
- [x] Implement starter config generation for `storemeta.yml`.
|
|
118
|
+
- [x] Generate example metadata directories.
|
|
119
|
+
- [x] Generate example screenshot directories.
|
|
120
|
+
- [x] Avoid overwriting existing files by default.
|
|
121
|
+
- [x] Use fake values only in generated examples.
|
|
122
|
+
|
|
123
|
+
## 12. `storemeta validate`
|
|
124
|
+
|
|
125
|
+
- [x] Validate root config structure.
|
|
126
|
+
- [x] Validate selected app and platform targets.
|
|
127
|
+
- [x] Validate credential presence.
|
|
128
|
+
- [x] Validate metadata files and schema.
|
|
129
|
+
- [x] Validate metadata length constraints for Google Play.
|
|
130
|
+
- [x] Validate screenshot folder structure.
|
|
131
|
+
- [x] Validate supported screenshot file extensions.
|
|
132
|
+
- [x] Validate numeric screenshot ordering.
|
|
133
|
+
- [x] Print a clear validation summary.
|
|
134
|
+
|
|
135
|
+
## 13. Google Platform Client
|
|
136
|
+
|
|
137
|
+
- [x] Implement service account authentication.
|
|
138
|
+
- [x] Implement a shared Google Play API client wrapper.
|
|
139
|
+
- [x] Implement edit session creation.
|
|
140
|
+
- [x] Implement edit session commit.
|
|
141
|
+
- [x] Implement safe edit session lifecycle handling for failures.
|
|
142
|
+
|
|
143
|
+
## 14. Google Metadata Pull
|
|
144
|
+
|
|
145
|
+
- [x] Implement listing fetch for one locale.
|
|
146
|
+
- [x] Implement listing fetch for all target locales.
|
|
147
|
+
- [x] Normalize remote listing data into the local metadata schema.
|
|
148
|
+
- [x] Write one file per locale.
|
|
149
|
+
- [x] Support `--locale`.
|
|
150
|
+
- [x] Support `--platform google`.
|
|
151
|
+
|
|
152
|
+
## 15. Google Metadata Push
|
|
153
|
+
|
|
154
|
+
- [x] Load and validate local Google metadata files.
|
|
155
|
+
- [x] Map local metadata into Google API payloads.
|
|
156
|
+
- [x] Upload listing text through an edit session.
|
|
157
|
+
- [x] Support `--dry-run`.
|
|
158
|
+
- [x] Print per-locale progress and final results.
|
|
159
|
+
|
|
160
|
+
## 16. Google Screenshots Pull
|
|
161
|
+
|
|
162
|
+
- [x] Implement image listing for configured locales and image types.
|
|
163
|
+
- [x] Download remote screenshots into the canonical local directory layout.
|
|
164
|
+
- [x] Write deterministic filenames such as `1.png`, `2.png`, `3.png`.
|
|
165
|
+
- [x] Support configured screenshot groups where relevant.
|
|
166
|
+
- [x] Handle empty sets cleanly.
|
|
167
|
+
|
|
168
|
+
## 17. Google Screenshots Push
|
|
169
|
+
|
|
170
|
+
- [x] Load and validate local screenshot sets.
|
|
171
|
+
- [x] Map local screenshots to target locales and image types.
|
|
172
|
+
- [x] Implement optional clearing of existing screenshots before upload.
|
|
173
|
+
- [x] Upload screenshots through the Google edit session.
|
|
174
|
+
- [x] Support `--dry-run`.
|
|
175
|
+
- [x] Print per-locale and per-image-type progress.
|
|
176
|
+
|
|
177
|
+
## 18. Apple Platform Client
|
|
178
|
+
|
|
179
|
+
- [x] Implement JWT generation from Apple credentials.
|
|
180
|
+
- [x] Implement a shared App Store Connect API client.
|
|
181
|
+
- [x] Implement paginated GET helpers where needed.
|
|
182
|
+
- [x] Implement safe POST and PATCH wrappers.
|
|
183
|
+
- [x] Ensure auth and API errors are rendered clearly without leaking secrets.
|
|
184
|
+
|
|
185
|
+
## 19. Apple Metadata Pull
|
|
186
|
+
|
|
187
|
+
- [x] Fetch app info localizations.
|
|
188
|
+
- [x] Fetch app store version localizations.
|
|
189
|
+
- [x] Join the two localization models into one local metadata document per locale.
|
|
190
|
+
- [x] Normalize fields into the local Apple metadata schema.
|
|
191
|
+
- [x] Write one file per locale.
|
|
192
|
+
- [x] Support `--locale`.
|
|
193
|
+
|
|
194
|
+
## 20. Apple Metadata Push
|
|
195
|
+
|
|
196
|
+
- [x] Load and validate local Apple metadata files.
|
|
197
|
+
- [x] Resolve the target app info resource.
|
|
198
|
+
- [x] Resolve the target editable app store version resource.
|
|
199
|
+
- [x] Update existing app info localizations.
|
|
200
|
+
- [x] Create missing app info localizations when allowed.
|
|
201
|
+
- [x] Update existing app store version localizations.
|
|
202
|
+
- [x] Create missing app store version localizations when allowed.
|
|
203
|
+
- [x] Support `--dry-run`.
|
|
204
|
+
- [x] Print per-locale progress and final results.
|
|
205
|
+
|
|
206
|
+
## 21. Apple Screenshots Pull
|
|
207
|
+
|
|
208
|
+
- [x] Fetch localization resources for the target version.
|
|
209
|
+
- [x] Fetch screenshot sets per localization.
|
|
210
|
+
- [x] Fetch screenshots within each set.
|
|
211
|
+
- [x] Download screenshot binaries into the canonical local directory layout.
|
|
212
|
+
- [x] Preserve deterministic ordering.
|
|
213
|
+
- [x] Support locale filtering.
|
|
214
|
+
|
|
215
|
+
## 22. Apple Screenshots Push
|
|
216
|
+
|
|
217
|
+
- [x] Load and validate local screenshot sets.
|
|
218
|
+
- [x] Resolve or create required localizations.
|
|
219
|
+
- [x] Resolve or create screenshot sets by display type.
|
|
220
|
+
- [x] Delete existing screenshots when replacement behavior is selected.
|
|
221
|
+
- [x] Reserve upload slots.
|
|
222
|
+
- [x] Upload binaries to Apple-provided URLs.
|
|
223
|
+
- [x] Commit uploads with checksums.
|
|
224
|
+
- [x] Support `--dry-run`.
|
|
225
|
+
- [x] Print per-locale and per-display-type progress.
|
|
226
|
+
|
|
227
|
+
## 23. Shared Error Handling And UX
|
|
228
|
+
|
|
229
|
+
- [x] Define consistent error messages for config, auth, validation, API, and filesystem failures.
|
|
230
|
+
- [x] Standardize command headers and summaries.
|
|
231
|
+
- [ ] Add true partial-failure aggregation for multi-target command summaries.
|
|
232
|
+
- [x] Make destructive behavior explicit in command output.
|
|
233
|
+
|
|
234
|
+
## 24. Fixtures And Sample Project
|
|
235
|
+
|
|
236
|
+
- [x] Add a fake example `storemeta.yml`.
|
|
237
|
+
- [x] Add fake sample metadata files for Apple and Google.
|
|
238
|
+
- [x] Add fake sample screenshot directories.
|
|
239
|
+
- [x] Ensure all examples are safe to publish.
|
|
240
|
+
|
|
241
|
+
## 25. Automated Tests
|
|
242
|
+
|
|
243
|
+
- [x] Add unit tests for config loading and validation.
|
|
244
|
+
- [x] Add unit tests for metadata parsing and serialization.
|
|
245
|
+
- [x] Add unit tests for locale normalization and grouping.
|
|
246
|
+
- [x] Add unit tests for screenshot ordering and path resolution.
|
|
247
|
+
- [x] Add unit tests for Apple metadata mapping.
|
|
248
|
+
- [x] Add unit tests for Google metadata mapping.
|
|
249
|
+
- [x] Add tests for dry-run behavior.
|
|
250
|
+
- [x] Add command-level smoke tests.
|
|
251
|
+
- [x] Add mocked API tests for Apple flows.
|
|
252
|
+
- [x] Add mocked API tests for Google flows.
|
|
253
|
+
|
|
254
|
+
## 26. Documentation Completion
|
|
255
|
+
|
|
256
|
+
- [x] Update `README.md` with install and usage examples once the CLI exists.
|
|
257
|
+
- [x] Add command examples for each implemented command.
|
|
258
|
+
- [x] Add config examples that match the real implementation.
|
|
259
|
+
- [x] Add troubleshooting guidance for Apple and Google auth setup.
|
|
260
|
+
- [x] Add contributor setup instructions.
|
|
261
|
+
- [x] Add dedicated auth setup documentation for Apple and Google credentials.
|
|
262
|
+
|
|
263
|
+
## 26.1 Product Polish Commands
|
|
264
|
+
|
|
265
|
+
- [x] Add `storemeta auth check`.
|
|
266
|
+
- [x] Add `storemeta config doctor`.
|
|
267
|
+
- [x] Add `storemeta locales list`.
|
|
268
|
+
- [x] Add `storemeta metadata diff`.
|
|
269
|
+
- [x] Add `storemeta screenshots diff`.
|
|
270
|
+
- [x] Add `storemeta scaffold`.
|
|
271
|
+
- [x] Print next-step auth guidance after `storemeta init`.
|
|
272
|
+
|
|
273
|
+
## 27. npm Packaging
|
|
274
|
+
|
|
275
|
+
- [x] Confirm the published package metadata is correct.
|
|
276
|
+
- [x] Confirm only intended files are included in the npm package.
|
|
277
|
+
- [x] Verify `npm pack` contents locally.
|
|
278
|
+
- [x] Verify the generated CLI works from the packed tarball.
|
|
279
|
+
- [x] Set initial version for the first release.
|
|
280
|
+
|
|
281
|
+
## 28. Pre-Release Verification
|
|
282
|
+
|
|
283
|
+
- [x] Run `storemeta init` in a clean temp directory.
|
|
284
|
+
- [x] Run `storemeta validate` against the generated sample project.
|
|
285
|
+
- [x] Add release verification config and environment templates.
|
|
286
|
+
- [x] Add release verification script for local and real-store checks.
|
|
287
|
+
- [x] Verify Apple metadata pull with a real test app.
|
|
288
|
+
- [x] Verify Apple metadata push with `--dry-run` against a real test app.
|
|
289
|
+
- [x] Verify Apple screenshots pull with a real test app.
|
|
290
|
+
- [x] Verify Apple screenshots push with `--dry-run` against a real test app.
|
|
291
|
+
- [x] Verify Google metadata pull with a real test app.
|
|
292
|
+
- [x] Verify Google metadata push with `--dry-run` against a real test app.
|
|
293
|
+
- [x] Verify Google screenshots pull with a real test app.
|
|
294
|
+
- [x] Verify Google screenshots push with `--dry-run` against a real test app.
|
|
295
|
+
- [x] Verify packed tarball install in a clean temp project.
|
|
296
|
+
- [x] Verify `storemeta --help`, `storemeta init`, and `storemeta validate` from the packed install.
|
|
297
|
+
- [x] Audit logs, examples, package contents, and docs for secrets.
|
|
298
|
+
- [x] Audit git history for secrets before public push.
|
|
299
|
+
- [x] Decide whether partial validation summary aggregation is required before first release: defer until after initial release.
|
|
300
|
+
- [x] Decide whether lint and formatting tooling is required before first release: defer until after initial release.
|
|
301
|
+
|
|
302
|
+
## 29. First Public Release
|
|
303
|
+
|
|
304
|
+
- [x] Commit the implementation.
|
|
305
|
+
- [x] Push to GitHub.
|
|
306
|
+
- [ ] Publish the initial npm package.
|
|
307
|
+
- [ ] Tag the release.
|
|
308
|
+
- [x] Confirm the public repository contains no ignored or secret material.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Examples
|
|
2
|
+
|
|
3
|
+
Everything in this directory is fake and safe to publish.
|
|
4
|
+
|
|
5
|
+
- App IDs, package names, URLs, and environment variable names are placeholders.
|
|
6
|
+
- Screenshot files are text placeholders with image file extensions. They only demonstrate directory layout.
|
|
7
|
+
- Do not upload these files to App Store Connect or Google Play.
|
|
8
|
+
- Do not store real credentials or production metadata in this directory.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
locale: en-US
|
|
2
|
+
app_name: Storemeta Example
|
|
3
|
+
subtitle: Localize store listings safely
|
|
4
|
+
privacy_policy_url: https://example.com/privacy
|
|
5
|
+
description: |
|
|
6
|
+
Storemeta Example shows how localized App Store metadata can live in YAML files.
|
|
7
|
+
keywords: metadata, screenshots, localization
|
|
8
|
+
marketing_url: https://example.com
|
|
9
|
+
promotional_text: Sync App Store metadata from your repository.
|
|
10
|
+
support_url: https://example.com/support
|
|
11
|
+
whats_new: Added example App Store metadata.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
locale: tr
|
|
2
|
+
app_name: Storemeta Ornek
|
|
3
|
+
subtitle: Magaza metinlerini guvenli yonetin
|
|
4
|
+
privacy_policy_url: https://example.com/privacy
|
|
5
|
+
description: |
|
|
6
|
+
Storemeta Ornek, App Store metinlerinin YAML dosyalarinda nasil tutuldugunu gosterir.
|
|
7
|
+
keywords: metadata, ekran goruntusu, yerlestirme
|
|
8
|
+
marketing_url: https://example.com
|
|
9
|
+
promotional_text: App Store metinlerini depodan esitleyin.
|
|
10
|
+
support_url: https://example.com/support
|
|
11
|
+
whats_new: Ornek App Store metinleri eklendi.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
placeholder apple screenshot
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
placeholder apple screenshot
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
placeholder google screenshot
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
placeholder google screenshot
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
version: 1
|
|
2
|
+
project:
|
|
3
|
+
name: Storemeta Example
|
|
4
|
+
defaultApp: example-app
|
|
5
|
+
apps:
|
|
6
|
+
example-app:
|
|
7
|
+
metadata:
|
|
8
|
+
baseDir: metadata
|
|
9
|
+
format: yaml
|
|
10
|
+
screenshots:
|
|
11
|
+
baseDir: screenshots
|
|
12
|
+
apple:
|
|
13
|
+
appId: "0000000000"
|
|
14
|
+
credentials:
|
|
15
|
+
issuerIdEnv: APPLE_ISSUER_ID
|
|
16
|
+
keyIdEnv: APPLE_KEY_ID
|
|
17
|
+
privateKeyPathEnv: APPLE_PRIVATE_KEY_PATH
|
|
18
|
+
locales:
|
|
19
|
+
default:
|
|
20
|
+
- en-US
|
|
21
|
+
- tr
|
|
22
|
+
google:
|
|
23
|
+
packageName: com.example.storemeta
|
|
24
|
+
credentials:
|
|
25
|
+
serviceAccountPathEnv: GOOGLE_SERVICE_ACCOUNT_PATH
|
|
26
|
+
locales:
|
|
27
|
+
default:
|
|
28
|
+
- en-US
|
|
29
|
+
- tr
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "storemeta",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "CLI for pulling, validating, and pushing App Store Connect and Google Play metadata and screenshots.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=20.0.0"
|
|
9
|
+
},
|
|
10
|
+
"bin": {
|
|
11
|
+
"storemeta": "dist/cli.js"
|
|
12
|
+
},
|
|
13
|
+
"files": [
|
|
14
|
+
"dist",
|
|
15
|
+
"docs",
|
|
16
|
+
"examples",
|
|
17
|
+
".env.release.example",
|
|
18
|
+
"storemeta.release.example.yml",
|
|
19
|
+
"README.md",
|
|
20
|
+
"LICENSE"
|
|
21
|
+
],
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "node ./scripts/build.mjs",
|
|
24
|
+
"check": "tsc --noEmit -p tsconfig.json",
|
|
25
|
+
"test": "vitest run",
|
|
26
|
+
"verify:release": "node ./scripts/verify-release.mjs"
|
|
27
|
+
},
|
|
28
|
+
"repository": {
|
|
29
|
+
"type": "git",
|
|
30
|
+
"url": "git+https://github.com/sezaienesyildizhan/storemeta.git"
|
|
31
|
+
},
|
|
32
|
+
"homepage": "https://github.com/sezaienesyildizhan/storemeta#readme",
|
|
33
|
+
"bugs": {
|
|
34
|
+
"url": "https://github.com/sezaienesyildizhan/storemeta/issues"
|
|
35
|
+
},
|
|
36
|
+
"keywords": [
|
|
37
|
+
"cli",
|
|
38
|
+
"app-store-connect",
|
|
39
|
+
"google-play",
|
|
40
|
+
"metadata",
|
|
41
|
+
"screenshots"
|
|
42
|
+
],
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@types/node": "^25.5.0",
|
|
45
|
+
"typescript": "^6.0.2",
|
|
46
|
+
"vitest": "^4.1.2"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"commander": "^14.0.3",
|
|
50
|
+
"google-auth-library": "^10.6.2",
|
|
51
|
+
"jose": "^6.2.2",
|
|
52
|
+
"yaml": "^2.8.3",
|
|
53
|
+
"zod": "^4.3.6"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
version: 1
|
|
2
|
+
project:
|
|
3
|
+
name: Storemeta Release Verification
|
|
4
|
+
defaultApp: release-app
|
|
5
|
+
apps:
|
|
6
|
+
release-app:
|
|
7
|
+
metadata:
|
|
8
|
+
baseDir: metadata
|
|
9
|
+
format: yaml
|
|
10
|
+
screenshots:
|
|
11
|
+
baseDir: screenshots
|
|
12
|
+
apple:
|
|
13
|
+
appId: "YOUR_APP_STORE_CONNECT_APP_ID"
|
|
14
|
+
credentials:
|
|
15
|
+
issuerIdEnv: STORE_APPLE_ISSUER_ID
|
|
16
|
+
keyIdEnv: STORE_APPLE_KEY_ID
|
|
17
|
+
privateKeyPathEnv: STORE_APPLE_PRIVATE_KEY_PATH
|
|
18
|
+
locales:
|
|
19
|
+
default:
|
|
20
|
+
- en-US
|
|
21
|
+
google:
|
|
22
|
+
packageName: com.example.yourapp
|
|
23
|
+
credentials:
|
|
24
|
+
serviceAccountPathEnv: STORE_GOOGLE_SERVICE_ACCOUNT_PATH
|
|
25
|
+
locales:
|
|
26
|
+
default:
|
|
27
|
+
- en-US
|