@makefully/adaptfully 4.0.0 → 4.2.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 CHANGED
@@ -2,6 +2,26 @@
2
2
 
3
3
  All notable changes to this project are documented in this file.
4
4
 
5
+ ## 4.2.0 — 2026-09-08
6
+
7
+ ### Changed
8
+
9
+ - **Build / deploy / release** submit **Showfully Yap** chores (`POST /yap/wrapfully`) instead of direct Wrapfully HTTP. Requires a Showfully PAT (`SHOWFULLY_PAT` / `wrapfully.json` `accessToken`).
10
+ - Server URL defaults to Showfully (`https://make.makefullystudios.com/`); `wrapfully.json` may set `showfullyServer` or `server`.
11
+
12
+ ### Added
13
+
14
+ - Optional `--encrypt` / `"encrypt": true` chore envelope encryption (default Wrapfully fleet public key; override with `--encrypt-public-key`).
15
+ - `wrapfully.json` routing fields appended to Yap zips (`stage`, `route`, `platformKey`, `gameId`, `deploymentKey`).
16
+
17
+ ## 4.1.0 — 2026-09-04
18
+
19
+ ### Added
20
+
21
+ - **`adaptfully android-keystore`** — Generate debug/release keystores with `keytool` and write `assets/meta/deployments/android/build.json`.
22
+ - **`adaptfully apple-signing`** — Generate CSR/key (OpenSSL), export `.p12` from an Apple `.cer`, place provisioning profiles under `ios/apple/`, optional `apple.p12Password` in `build.json`.
23
+ - **Credential setup guides** — First-time walkthroughs under [`docs/credentials/`](docs/credentials/README.md) for iOS, Android, and Steam (full manual steps + helper skip markers).
24
+
5
25
  ## 4.0.0 — 2026-09-03
6
26
 
7
27
  ### Removed
package/README.md CHANGED
@@ -21,24 +21,35 @@ Games register platform services before load and retrieve them in-game. Adaptful
21
21
  ### Pipeline stages
22
22
 
23
23
  ```bash
24
- adaptfully prebuild web # deploy/ output/web-prebuild/
25
- adaptfully build steam # prebuild + zip and send to Wrapfully (default deployment)
26
- adaptfully deploy web # prebuild + POST to Wrapfully for each of web's deployments
27
- adaptfully deploy web --deployment web-prod # deploy to a single named deployment
28
- adaptfully deploy steam # prebuild + POST to Wrapfully steam builder
24
+ # wrapfully.json (gitignored) or env — Showfully PAT required for build/deploy/release:
25
+ # { "accessToken": "sfpat_…", "server": "https://make.makefullystudios.com/" }
26
+ # optional: "encrypt": true
27
+
28
+ export SHOWFULLY_PAT=sfpat_…
29
+ adaptfully prebuild web # deploy/ → output/web-prebuild/ (local only)
30
+ adaptfully build steam # Yap /yap/wrapfully chore → artifact zip
31
+ adaptfully deploy web --deployment web-prod # Yap deploy chore
32
+ adaptfully release android --encrypt # optional envelope encryption
29
33
  adaptfully steam-publish # one-time: log in with steamcmd → assets/meta/deployments/steam/steam.json
30
- adaptfully google-publish --from ./sa.json # one-time: import Play service account → deployments/android/google.json
31
- adaptfully apple-publish # one-time: write App Store Connect creds → deployments/ios/apple.json
32
34
  ```
33
35
 
34
36
  | Stage | What it does |
35
37
  |-------|----------------|
36
38
  | `prebuild` | Copy `deploy/` to `output/<platform>-prebuild/` and inject registrations into `config.htmlInjections` |
37
- | `build` | Prebuild, then POST the result to Wrapfully (artifact zip only) |
38
- | `deploy` | POST the prior build artifact from `./output/` to each configured deployment (or `--deployment`) |
39
+ | `build` | Prebuild, then submit a **Showfully Yap** `wrapfully` chore (PAT required); poll until the artifact zip returns |
40
+ | `deploy` | Submit a Yap deploy chore with the prior build artifact + deployment credentials |
41
+ | `release` | Yap release chore (build + configured deployments on Wrapfully) |
39
42
  | `steam-publish` | One-time local setup: install steamcmd, interactive login, write the `steam` deployment's `steam.json` (also updates `.gitignore`) |
40
43
  | `google-publish` | One-time local setup: import a Play Console service-account JSON into the `android` deployment folder (also updates `.gitignore`) |
41
44
  | `apple-publish` | One-time local setup: write App Store Connect credentials into the `ios` deployment folder (also updates `.gitignore`) |
45
+ | `android-keystore` | One-time local setup: generate debug/release keystores and write `android` `build.json` (also updates `.gitignore`) |
46
+ | `apple-signing` | One-time local setup: CSR → Apple `.cer` → `.p12` / provisioning profiles under `ios/apple/` (also updates `.gitignore`) |
47
+
48
+ **Server** means the Showfully Yap base (`SHOWFULLY_SERVER` / `wrapfully.json` `showfullyServer` or `server`), default `https://make.makefullystudios.com/`. Wrapfully workers claim chores with a separate service token.
49
+
50
+ **Encryption (optional):** `--encrypt` or `"encrypt": true` wraps the chore to the Makefully Wrapfully fleet public key (override with `--encrypt-public-key`). Results are decrypted locally with an ephemeral `resultPriv` kept only for that chore.
51
+
52
+ First-time walkthroughs (manual steps + helper skip markers): [docs/credentials/](docs/credentials/README.md).
42
53
 
43
54
  `wrapfully-deploy` is a compatibility alias for `adaptfully deploy` when invoked with a Wrapfully builder name (`steam`, `win`, `android`, etc.).
44
55
 
@@ -547,10 +558,14 @@ For a single platform, pass the specific builder name.
547
558
 
548
559
  ### Platform package requirements
549
560
 
561
+ **First-time setup:** see [docs/credentials/](docs/credentials/README.md) for iOS, Android, and Steam walkthroughs (CLI helpers + full manual steps).
562
+
550
563
  Signing keys, provisioning profiles, and store credentials go in the deployment folder `./assets/meta/deployments/<deployment>/` on disk (the selected deployment is sent as `meta/publish/` in the zip). The examples below use `<deployment>` as a placeholder for the target key (e.g. `steam`, `web-prod`). **These files contain secrets** — add them to `.gitignore` and never commit them to a public repository. (Projects that have not adopted the `deployments/` layout may still place these under the legacy `./assets/meta/publish/`.)
551
564
 
552
565
  #### Android (`android`, `android-dev`)
553
566
 
567
+ First-time setup: [docs/credentials/android.md](docs/credentials/android.md) (`android-keystore`, `google-publish`).
568
+
554
569
  Place keystore files in `assets/meta/deployments/<deployment>/android/`. Include `assets/meta/deployments/<deployment>/build.json`:
555
570
 
556
571
  ```json
@@ -602,6 +617,8 @@ The file looks like:
602
617
 
603
618
  #### Apple (`ios`, `ios-dev`, `ios-sim`, `mac`)
604
619
 
620
+ First-time setup: [docs/credentials/ios.md](docs/credentials/ios.md) (`apple-signing`, `apple-publish`).
621
+
605
622
  **Capacitor iOS** signing is file-based under the deployment folder:
606
623
 
607
624
  ```
@@ -614,7 +631,7 @@ assets/meta/deployments/<deployment>/
614
631
  build.json # optional: { "apple": { "p12Password": "..." } }
615
632
  ```
616
633
 
617
- `adaptfully build` (zip-only) still packages this deployment folder for Capacitor so device debug builds can sign. Optional `build.json` may set `apple.p12Password` for the `.p12` passphrase (Wrapfully uses an ephemeral keychain per build). Team ID and profile UUID are read from the `.mobileprovision`. Enable **Sign in with Apple** on the App ID when using Capgo Apple auth.
634
+ `adaptfully build` (zip-only) still packages this deployment folder for Capacitor so device debug builds can sign. Optional `build.json` may set `apple.p12Password` for the `.p12` passphrase (defaults to empty when omitted). Team ID and profile UUID are read from the `.mobileprovision`. Enable **Sign in with Apple** on the App ID when using Capgo Apple auth.
618
635
 
619
636
  To deploy to the App Store, include `assets/meta/deployments/<deployment>/apple.json`. The easiest path is:
620
637
 
@@ -638,6 +655,8 @@ iOS IPA upload uses `username` + `password` via `xcrun altool --upload-app`. `ca
638
655
 
639
656
  #### Steam (`steam`, `steam-dev`)
640
657
 
658
+ First-time setup: [docs/credentials/steam.md](docs/credentials/steam.md) (`steam-publish`).
659
+
641
660
  `steam-dev` builds debug Electron binaries for Windows, Mac, and Linux without uploading to Steam. No `steam.json` credentials are required.
642
661
 
643
662
  For release uploads, run **`adaptfully steam-publish`** once on your machine. It installs steamcmd if needed, logs you in interactively (enter a Steam Guard code if prompted), and writes `assets/meta/deployments/steam/steam.json`:
@@ -0,0 +1,50 @@
1
+ # Credential setup guides
2
+
3
+ One-time local setup for signing and store-upload credentials under
4
+ `assets/meta/deployments/<deployment>/`.
5
+
6
+ These guides stay focused on **files in your game repo** and Adaptfully CLI helpers.
7
+ They do not cover which OS builds the artifact.
8
+
9
+ ## Guides
10
+
11
+ | Platform | Guide | Typical deployment folder |
12
+ |----------|--------|---------------------------|
13
+ | iOS | [ios.md](./ios.md) | `assets/meta/deployments/ios/` |
14
+ | Android | [android.md](./android.md) | `assets/meta/deployments/android/` |
15
+ | Steam | [steam.md](./steam.md) | `assets/meta/deployments/steam/` |
16
+
17
+ ## Helpers
18
+
19
+ | Command | Writes |
20
+ |---------|--------|
21
+ | `npx adaptfully android-keystore` | `android/*.keystore` + `build.json` |
22
+ | `npx adaptfully google-publish --from <sa.json>` | `google.json` |
23
+ | `npx adaptfully apple-signing` | CSR/key work files, `apple/*.p12`, optional `.mobileprovision` + `build.json` `apple.p12Password` |
24
+ | `npx adaptfully apple-publish` | `apple.json` (App Store Connect upload login) |
25
+ | `npx adaptfully steam-publish` | `steam.json` |
26
+
27
+ Each guide lists the **full manual process** and marks **Helper** steps with **skip to step N** when you use a command instead.
28
+
29
+ ## Debug vs release
30
+
31
+ | Goal | Credentials needed? |
32
+ |------|---------------------|
33
+ | `android-dev` / local debug APK | Project debug keystore (recommended) or host default |
34
+ | `android` Play release | Release keystore + `google.json` |
35
+ | `ios-dev` device IPA | `development.p12` + `development.mobileprovision` |
36
+ | `ios` App Store | `distribution.p12` + `app-store.mobileprovision` + `apple.json` |
37
+ | `ios-sim` | No device signing files |
38
+ | `steam-dev` | None |
39
+ | `steam` upload | `steam.json` |
40
+
41
+ ## Secrets
42
+
43
+ Do not commit credential files. Helpers update `.gitignore` with Adaptfully patterns such as:
44
+
45
+ - `assets/meta/deployments/**/build.json`
46
+ - `assets/meta/deployments/**/google.json`
47
+ - `assets/meta/deployments/**/apple.json`
48
+ - `assets/meta/deployments/**/steam.json`
49
+ - `assets/meta/deployments/**/android/`
50
+ - `assets/meta/deployments/**/apple/`
@@ -0,0 +1,124 @@
1
+ # Android credentials
2
+
3
+ Set up signing keystores and (for Play uploads) a Google Play service account.
4
+
5
+ **Default folder:** `assets/meta/deployments/android/`
6
+
7
+ ## Recommended path
8
+
9
+ 1. **Helper:** `npx adaptfully android-keystore` — creates debug + release keystores and `build.json`.
10
+ 2. In Google Play Console, create a service account and download its JSON key (manual).
11
+ 3. **Helper:** `npx adaptfully google-publish --from ./path/to/sa.json` — writes `google.json`.
12
+
13
+ Debug-only: `npx adaptfully android-keystore --debug-only`.
14
+
15
+ ## What you need
16
+
17
+ | Goal | Files |
18
+ |------|--------|
19
+ | Debug / `android-dev` | `android/debug.keystore` + `build.json` `android.debug` block |
20
+ | Play release / `android` | `android/release.keystore` + `build.json` `android.release` + `google.json` |
21
+
22
+ `build.json` keystore paths are relative to the deployment folder (the directory that contains `build.json`).
23
+
24
+ ## Full steps
25
+
26
+ ### 1. Prerequisites
27
+
28
+ - JDK on PATH so `keytool` works (`keytool -help`).
29
+ - A Play Console app (for release uploads).
30
+
31
+ ### 2. Helper: generate keystores
32
+
33
+ **Helper:** `npx adaptfully android-keystore [--deployment android] [--debug-only] [--yes]`
34
+
35
+ If you run this, **skip to step 5** (Play service account). For debug-only, you can stop after this step.
36
+
37
+ Flags:
38
+
39
+ - `--debug-only` — only the debug keystore + `build.json` debug block
40
+ - `--yes` — overwrite existing `build.json` without prompting
41
+ - `--alias`, `--store-password`, `--key-password`, `--cn` — non-interactive release keystore fields
42
+
43
+ ### 3. Manual alternative: create keystores with keytool
44
+
45
+ Skip this if you used step 2.
46
+
47
+ ```bash
48
+ mkdir -p assets/meta/deployments/android/android
49
+
50
+ keytool -genkeypair -v \
51
+ -keystore assets/meta/deployments/android/android/debug.keystore \
52
+ -alias androiddebugkey -keyalg RSA -keysize 2048 -validity 10000 \
53
+ -storepass android -keypass android \
54
+ -dname "CN=Android Debug,O=Android,C=US"
55
+
56
+ keytool -genkeypair -v \
57
+ -keystore assets/meta/deployments/android/android/release.keystore \
58
+ -alias upload -keyalg RSA -keysize 2048 -validity 10000 \
59
+ -storepass "(your store password)" -keypass "(your key password)" \
60
+ -dname "CN=Your Studio,O=Your Studio,C=US"
61
+ ```
62
+
63
+ ### 4. Manual alternative: write `build.json`
64
+
65
+ Skip this if you used step 2.
66
+
67
+ Create `assets/meta/deployments/android/build.json`:
68
+
69
+ ```json
70
+ {
71
+ "android": {
72
+ "debug": {
73
+ "keystore": "./android/debug.keystore",
74
+ "packageType": "apk",
75
+ "storePassword": "android",
76
+ "alias": "androiddebugkey",
77
+ "password": "android",
78
+ "keystoreType": ""
79
+ },
80
+ "release": {
81
+ "keystore": "./android/release.keystore",
82
+ "packageType": "bundle",
83
+ "storePassword": "(your store password)",
84
+ "alias": "upload",
85
+ "password": "(your key password)",
86
+ "keystoreType": ""
87
+ }
88
+ }
89
+ }
90
+ ```
91
+
92
+ ### 5. Create a Play Console service account (manual)
93
+
94
+ Required only for Play uploads (`adaptfully release android` / deploy to Google).
95
+
96
+ 1. Open [Google Play Console](https://play.google.com/console/) → **Setup** → **API access** (or Google Cloud IAM linked to the Play developer account).
97
+ 2. Create or select a service account with permission to manage releases.
98
+ 3. Download a JSON key for that service account.
99
+ 4. Invite the service account email in Play Console with the right app permissions.
100
+
101
+ ### 6. Helper: import `google.json`
102
+
103
+ **Helper:** `npx adaptfully google-publish --from ./path/to/service-account.json [--deployment android]`
104
+
105
+ If you run this, **skip to step 8**.
106
+
107
+ ### 7. Manual alternative: copy the service account JSON
108
+
109
+ Skip this if you used step 6.
110
+
111
+ Copy the downloaded key to `assets/meta/deployments/android/google.json`. Ensure `manifest.json` includes `"type": "google"` (helpers write this for you).
112
+
113
+ ### 8. Done when
114
+
115
+ - [ ] `build.json` exists with debug (and release, if shipping)
116
+ - [ ] Keystore files exist at the paths listed in `build.json`
117
+ - [ ] For Play uploads: `google.json` is present and the service account can access the app
118
+ - [ ] Credential paths are gitignored
119
+
120
+ ## Notes
121
+
122
+ - Prefer **project-owned** keystores so debug installs stay reproducible across machines.
123
+ - Some build hosts supply a default debug keystore when `build.json` is missing; do not rely on that for shared projects.
124
+ - Keep release keystore passwords offline; losing the release keystore can block Play updates for that signing key.
@@ -0,0 +1,182 @@
1
+ # iOS credentials
2
+
3
+ Set up Apple signing files and (for App Store uploads) App Store Connect login credentials.
4
+
5
+ **Default folder:** `assets/meta/deployments/ios/`
6
+
7
+ You can create signing material on **macOS or Windows**. The sections below branch where the local tools differ.
8
+
9
+ ## Recommended path
10
+
11
+ 1. **Helper:** `npx adaptfully apple-signing --kind development` (and/or `--kind distribution`) — generates a CSR, walks portal checklist, exports `.p12`, optionally copies the provisioning profile.
12
+ 2. Complete the Apple Developer portal steps the helper prints (upload CSR, download `.cer` / `.mobileprovision`).
13
+ 3. For App Store uploads only — **Helper:** `npx adaptfully apple-publish` — writes `apple.json`.
14
+
15
+ Simulator builds (`ios-sim`) need no device signing files.
16
+
17
+ ## What you need
18
+
19
+ | Goal | Files |
20
+ |------|--------|
21
+ | Device debug (`ios-dev`) | `apple/development.p12`, `apple/development.mobileprovision` |
22
+ | App Store (`ios` release) | `apple/distribution.p12`, `apple/app-store.mobileprovision`, `apple.json` |
23
+ | Simulator (`ios-sim`) | None |
24
+
25
+ Optional `build.json` next to `apple/`:
26
+
27
+ ```json
28
+ {
29
+ "apple": {
30
+ "p12Password": "(passphrase used when exporting the .p12)"
31
+ }
32
+ }
33
+ ```
34
+
35
+ If omitted, the build pipeline treats the passphrase as empty.
36
+
37
+ ## Prerequisites
38
+
39
+ - Apple Developer Program membership.
40
+ - An App ID matching your platform `packageName`.
41
+ - If you use Capgo Apple social login: enable **Sign in with Apple** on that App ID.
42
+ - For development profiles: registered device UDIDs.
43
+ - OpenSSL on PATH for the helper / Windows manual path (`openssl version`). macOS Keychain users can still use the helper if OpenSSL is available (e.g. via Homebrew or Xcode CLT tooling).
44
+
45
+ ## Full steps
46
+
47
+ ### 1. Helper: CSR, `.p12`, and profile placement
48
+
49
+ **Helper:** `npx adaptfully apple-signing [--kind development|distribution] [--csr-only] [--from-cer path] [--provision path] [--p12-password secret]`
50
+
51
+ If you run the full interactive helper (not `--csr-only`), **skip to step 7** after it finishes (or step 8 for App Store Connect login).
52
+
53
+ Useful flags:
54
+
55
+ - `--csr-only` — stop after writing the CSR; later continue with `--from-cer`
56
+ - `--from-cer ./Certificates.cer` — skip CSR generation when `apple/.work/private.key` already exists
57
+ - `--provision ./Profile.mobileprovision` — copy/rename into `apple/`
58
+ - `--kind development` or `--kind distribution`
59
+
60
+ Work files live under `assets/meta/deployments/ios/apple/.work/` by default (`private.key` + CSR).
61
+
62
+ ### 2. Create a Certificate Signing Request (manual)
63
+
64
+ Skip this if you used step 1 (or will use `--from-cer` with an existing key from step 1).
65
+
66
+ #### macOS (Keychain Access)
67
+
68
+ 1. Open **Keychain Access** → **Certificate Assistant** → **Request a Certificate From a Certificate Authority…**
69
+ 2. Enter your email and common name; choose **Saved to disk**.
70
+ 3. Save the `.certSigningRequest` file.
71
+
72
+ #### Windows / OpenSSL (any OS)
73
+
74
+ ```bash
75
+ mkdir -p assets/meta/deployments/ios/apple/.work
76
+ cd assets/meta/deployments/ios/apple/.work
77
+
78
+ openssl genrsa -out private.key 2048
79
+ openssl req -new -key private.key -out CertificateSigningRequest.certSigningRequest -subj "/emailAddress=you@example.com/CN=Your Name/C=US"
80
+ ```
81
+
82
+ ### 3. Create the certificate on the Apple Developer site (manual)
83
+
84
+ Always required — Apple must issue the certificate.
85
+
86
+ 1. Open [Certificates](https://developer.apple.com/account/resources/certificates/list).
87
+ 2. Create **Apple Development** (device debug) and/or **Apple Distribution** (App Store).
88
+ 3. Upload the CSR from step 1 or 2.
89
+ 4. Download the `.cer` file.
90
+
91
+ ### 4. Export a `.p12` (manual)
92
+
93
+ Skip this if step 1 already exported `development.p12` / `distribution.p12`.
94
+
95
+ #### macOS (Keychain Access)
96
+
97
+ 1. Double-click the `.cer` to import it into Keychain Access.
98
+ 2. Find the certificate (and its private key) → **Export…** → `.p12`.
99
+ 3. Choose a passphrase; remember it for `build.json` `apple.p12Password`.
100
+ 4. Save as `assets/meta/deployments/ios/apple/development.p12` or `distribution.p12`.
101
+
102
+ #### Windows / OpenSSL
103
+
104
+ ```bash
105
+ # From the folder that has private.key and the downloaded .cer
106
+ openssl x509 -in Certificates.cer -inform DER -out cert.pem -outform PEM
107
+ openssl pkcs12 -export -inkey private.key -in cert.pem -out development.p12
108
+ # or distribution.p12 — use the matching kind
109
+ ```
110
+
111
+ Move the `.p12` to `assets/meta/deployments/ios/apple/`.
112
+
113
+ If DER conversion fails, try importing the `.cer` as PEM directly in the `pkcs12 -export` `-in` argument.
114
+
115
+ ### 5. Create and download a provisioning profile (manual)
116
+
117
+ Always required for device / App Store signing.
118
+
119
+ 1. Register devices (development) under [Devices](https://developer.apple.com/account/resources/devices/list).
120
+ 2. Open [Profiles](https://developer.apple.com/account/resources/profiles/list).
121
+ 3. Create a **Development** profile or **App Store** profile for your App ID and certificate.
122
+ 4. Download the `.mobileprovision`.
123
+
124
+ ### 6. Place the provisioning profile (manual)
125
+
126
+ Skip this if step 1 copied it with `--provision`.
127
+
128
+ Rename/copy to:
129
+
130
+ - Development → `assets/meta/deployments/ios/apple/development.mobileprovision`
131
+ - App Store → `assets/meta/deployments/ios/apple/app-store.mobileprovision`
132
+
133
+ ### 7. Optional: record the `.p12` passphrase
134
+
135
+ Skip this if `apple-signing` already wrote `build.json`.
136
+
137
+ Create or merge `assets/meta/deployments/ios/build.json`:
138
+
139
+ ```json
140
+ {
141
+ "apple": {
142
+ "p12Password": "(your .p12 passphrase)"
143
+ }
144
+ }
145
+ ```
146
+
147
+ ### 8. Helper: App Store Connect login (`apple.json`)
148
+
149
+ Required only for App Store uploads.
150
+
151
+ **Helper:** `npx adaptfully apple-publish [--deployment ios]`
152
+
153
+ If you run this, **skip to step 10**.
154
+
155
+ You need an [app-specific password](https://appleid.apple.com/) for your Apple ID.
156
+
157
+ ### 9. Manual alternative: write `apple.json`
158
+
159
+ Skip this if you used step 8.
160
+
161
+ ```json
162
+ {
163
+ "category": "public.app-category.games",
164
+ "identity": "(your team id)",
165
+ "username": "(Apple ID email)",
166
+ "password": "(app-specific password)"
167
+ }
168
+ ```
169
+
170
+ ### 10. Done when
171
+
172
+ - [ ] For `ios-dev`: `apple/development.p12` + `apple/development.mobileprovision`
173
+ - [ ] For App Store: `apple/distribution.p12` + `apple/app-store.mobileprovision` + `apple.json`
174
+ - [ ] `apple.p12Password` matches the `.p12` passphrase when the passphrase is non-empty
175
+ - [ ] App ID matches `packageName`; Sign in with Apple enabled if you use Capgo Apple auth
176
+ - [ ] Credential paths are gitignored
177
+
178
+ ## Notes
179
+
180
+ - Filenames under `apple/` must match the table above.
181
+ - You can create credentials on Windows even if the IPA is built elsewhere.
182
+ - Re-run `apple-signing --kind …` separately for development and distribution when you need both.
@@ -0,0 +1,99 @@
1
+ # Steam credentials
2
+
3
+ Set up Steamworks upload login for release deploys. Debug Steam builds need no upload credentials.
4
+
5
+ **Default folder:** `assets/meta/deployments/steam/`
6
+
7
+ ## Recommended path
8
+
9
+ 1. Create or choose a Steamworks **build account** (manual; prefer a dedicated publisher account).
10
+ 2. **Helper:** `npx adaptfully steam-publish` — installs steamcmd if needed, logs in interactively, writes `steam.json`.
11
+ 3. Set upload `steamId` on the deployment `manifest.json` (and client `platforms.*.steamId` if you use Steamworks auth).
12
+
13
+ ## What you need
14
+
15
+ | Goal | Files |
16
+ |------|--------|
17
+ | `steam-dev` (local Electron debug) | None |
18
+ | `steam` release upload | `steam.json` (+ `manifest.json` with upload `steamId`) |
19
+
20
+ ## Full steps
21
+
22
+ ### 1. Prerequisites
23
+
24
+ - A Steamworks partner app.
25
+ - A Steam account allowed to upload builds (Steam Guard may be enabled).
26
+
27
+ ### 2. Helper: write `steam.json`
28
+
29
+ **Helper:** `npx adaptfully steam-publish [--username U] [--password P] [--deployment steam]`
30
+
31
+ If you run this, **skip to step 6**.
32
+
33
+ The helper installs steamcmd under `~/.adaptfully/steamcmd` when needed, logs in (enter a Steam Guard code if prompted), and writes `assets/meta/deployments/steam/steam.json`.
34
+
35
+ ### 3. Manual alternative: install steamcmd
36
+
37
+ Skip this if you used step 2.
38
+
39
+ Download steamcmd for your OS from Valve and unpack it somewhere durable.
40
+
41
+ ### 4. Manual alternative: log in once
42
+
43
+ Skip this if you used step 2.
44
+
45
+ ```bash
46
+ steamcmd +login YOUR_USER YOUR_PASSWORD +quit
47
+ ```
48
+
49
+ Complete Steam Guard if prompted. After a successful login, steamcmd stores session files under its install directory (`config/config.vdf`, and an `ssfn*` sentry file when Guard is enabled).
50
+
51
+ ### 5. Manual alternative: assemble `steam.json`
52
+
53
+ Skip this if you used step 2.
54
+
55
+ Create `assets/meta/deployments/steam/steam.json`:
56
+
57
+ ```json
58
+ {
59
+ "username": "(your Steam build account)",
60
+ "password": "(your password)",
61
+ "configVdf": "(base64 of config/config.vdf)",
62
+ "sentryFileName": "(ssfn filename — only with Steam Guard)",
63
+ "sentryFile": "(base64 of the ssfn file — only with Steam Guard)"
64
+ }
65
+ ```
66
+
67
+ Accounts **without** Steam Guard only need `username`, `password`, and `configVdf`.
68
+
69
+ ### 6. App IDs (client vs upload)
70
+
71
+ These are independent:
72
+
73
+ | Setting | Purpose |
74
+ |---------|---------|
75
+ | `config.platforms.<name>.steamId` | Client Steamworks / `steam-auth` |
76
+ | `assets/meta/deployments/steam/manifest.json` → `steamId` | Depot upload target |
77
+
78
+ You can ship with Steam auth and no upload credentials, or upload without client Steamworks.
79
+
80
+ Example `manifest.json`:
81
+
82
+ ```json
83
+ {
84
+ "type": "steam",
85
+ "steamId": 480
86
+ }
87
+ ```
88
+
89
+ ### 7. Done when
90
+
91
+ - [ ] For uploads: `steam.json` exists and login tokens are valid
92
+ - [ ] Upload `steamId` is set on the deployment manifest
93
+ - [ ] Client `steamId` is set on the platform if you use Steamworks auth
94
+ - [ ] Credential files are gitignored
95
+
96
+ ## Notes
97
+
98
+ - Re-run `adaptfully steam-publish` when Steam invalidates the token (new machine, password change, or expired Guard).
99
+ - `steam-dev` never requires `steam.json`.