shipthis 0.1.34 → 0.1.36
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 +223 -80
- package/assets/markdown/agreement-update.md.ejs +12 -0
- package/assets/markdown/{android-success.md → android-success.md.ejs} +2 -2
- package/assets/markdown/{apikey-create.md → apikey-create.md.ejs} +4 -4
- package/assets/markdown/{create-google-play-game.md → create-google-play-game.md.ejs} +2 -2
- package/assets/markdown/{invite-service-account.md → invite-service-account.md.ejs} +1 -1
- package/assets/markdown/{ios-success.md → ios-success.md.ejs} +2 -2
- package/assets/markdown/{privacy-notification.md → privacy-notification.md.ejs} +1 -1
- package/assets/markdown/service-account-policy-wizard.md.ejs +26 -0
- package/assets/markdown/service-account-policy.md.ejs +30 -0
- package/assets/markdown/{ship-failure.md → ship-failure.md.ejs} +1 -1
- package/assets/markdown/{ship-success.md → ship-success.md.ejs} +2 -2
- package/dist/{AppleBundleIdDetails-By-sSGNl.js → AppleBundleIdDetails-pEVOUXTQ.js} +3 -4
- package/dist/{Command-VWMnGslo.js → Command-DhAVAdiI.js} +1 -2
- package/dist/{CommandGame-BSVPZzNl.js → CommandGame-C-oV-hb4.js} +2 -2
- package/dist/{Create-SR1Mq7BY.js → Create-Dg9ZlwEd.js} +1 -3
- package/dist/{GameStatus-1ntFyxEx.js → GameStatus-Dm9TqFfW.js} +9 -17
- package/dist/{Import-cedOWPDz.js → Import-BFNNkN-I.js} +2 -4
- package/dist/{JobLogTail-C_W8UAMg.js → JobLogTail-RTNIiAUk.js} +2 -5
- package/dist/{JobProgress-CI385G53.js → JobProgress-dFWcT0CQ.js} +16 -17
- package/dist/{JobStatusTable-CdbKtwJE.js → JobStatusTable-BlvMuWF7.js} +2 -4
- package/dist/{ProjectCredentialsTable-ZnuIfcDB.js → ProjectCredentialsTable-CMBnYLou.js} +2 -2
- package/dist/{UserCredentialsTable-DRkAYgEA.js → UserCredentialsTable-oxE3mDmE.js} +8 -10
- package/dist/{baseAppleCommand-CsO-_Yzn.js → baseAppleCommand-cnLvBz95.js} +1 -1
- package/dist/{baseGameAndroidCommand-CdjaAbNX.js → baseGameAndroidCommand-DUDYisYm.js} +1 -2
- package/dist/commands/apiKey/create.js +15 -16
- package/dist/commands/apiKey/list.js +6 -7
- package/dist/commands/apiKey/revoke.js +7 -8
- package/dist/commands/apple/apiKey/create.js +7 -8
- package/dist/commands/apple/apiKey/export.js +6 -7
- package/dist/commands/apple/apiKey/import.js +6 -7
- package/dist/commands/apple/apiKey/status.js +12 -13
- package/dist/commands/apple/certificate/create.js +7 -8
- package/dist/commands/apple/certificate/export.js +6 -7
- package/dist/commands/apple/certificate/import.js +6 -7
- package/dist/commands/apple/certificate/status.js +12 -13
- package/dist/commands/apple/login.js +12 -2
- package/dist/commands/apple/status.js +4 -5
- package/dist/commands/dashboard.js +11 -1
- package/dist/commands/game/android/apiKey/connect.js +9 -9
- package/dist/commands/game/android/apiKey/create.js +11 -11
- package/dist/commands/game/android/apiKey/export.js +7 -8
- package/dist/commands/game/android/apiKey/import.js +7 -8
- package/dist/commands/game/android/apiKey/invite.js +13 -4
- package/dist/commands/game/android/apiKey/policy.js +83 -0
- package/dist/commands/game/android/apiKey/status.js +7 -8
- package/dist/commands/game/android/keyStore/create.js +8 -9
- package/dist/commands/game/android/keyStore/export.js +6 -7
- package/dist/commands/game/android/keyStore/import.js +9 -10
- package/dist/commands/game/android/keyStore/status.js +6 -7
- package/dist/commands/game/android/status.js +12 -1
- package/dist/commands/game/build/download.js +4 -5
- package/dist/commands/game/build/list.js +5 -6
- package/dist/commands/game/create.js +12 -2
- package/dist/commands/game/details.js +4 -5
- package/dist/commands/game/export.js +12 -1
- package/dist/commands/game/ios/app/addTester.js +11 -12
- package/dist/commands/game/ios/app/create.js +4 -5
- package/dist/commands/game/ios/app/status.js +7 -8
- package/dist/commands/game/ios/app/sync.js +5 -6
- package/dist/commands/game/ios/profile/create.js +7 -8
- package/dist/commands/game/ios/profile/export.js +6 -7
- package/dist/commands/game/ios/profile/import.js +6 -7
- package/dist/commands/game/ios/profile/status.js +6 -7
- package/dist/commands/game/ios/status.js +9 -10
- package/dist/commands/game/ios/wizard.js +5 -6
- package/dist/commands/game/job/list.js +4 -5
- package/dist/commands/game/job/status.js +7 -8
- package/dist/commands/game/list.js +11 -10
- package/dist/commands/game/ship.js +18 -13
- package/dist/commands/game/status.js +6 -7
- package/dist/commands/game/wizard.js +19 -19
- package/dist/commands/internal/fastlane.js +12 -1
- package/dist/commands/internal/readme.js +12 -715
- package/dist/commands/login.js +26 -4
- package/dist/commands/status.js +12 -14
- package/dist/{export-B5Yfd9vw.js → export-Bd552LBe.js} +1 -1
- package/dist/{import-A2WcStHl.js → import-D-EL9sQJ.js} +1 -1
- package/dist/{index-CgzANgJt.js → index-1H48f5j2.js} +1 -1
- package/dist/index-BtPf4vzY.js +1903 -0
- package/dist/{index-Bz1qt_8T.js → index-DCN43FhY.js} +5 -11
- package/dist/{index-BBLtvl1Y.js → index-DwATmUTQ.js} +57 -16
- package/dist/{upload-BIsFZzBO.js → upload-Dm38PqhN.js} +1 -1
- package/dist/{useAppleApp-BZR94exU.js → useAppleApp-BKPntZPm.js} +1 -1
- package/dist/{useAppleBundleId-Dg5DsItN.js → useAppleBundleId-DvQKEEy4.js} +1 -1
- package/dist/useGoogleStatus-D9jjGa--.js +9 -0
- package/dist/{useProjectCredentials-jQYGcDhT.js → useProjectCredentials-BjsS28hP.js} +12 -11
- package/dist/{useWebSocket-CIxkPaYi.js → useWebSocket-CIeyHqxG.js} +1 -1
- package/docs/README.md +3 -2
- package/docs/apiKey.md +12 -2
- package/docs/assets/st.png +0 -0
- package/docs/game/android/apiKey/policy.md +28 -0
- package/docs/game/android/keyStore.md +14 -4
- package/docs/game/android/status.md +4 -0
- package/docs/game/android.md +9 -305
- package/docs/game/ship.md +43 -11
- package/docs/game.md +7 -1
- package/docs/login.md +6 -2
- package/docs/status.md +1 -1
- package/package.json +10 -2
- package/dist/index-CA6-uLMn.js +0 -221
- package/dist/index-CO_ssVFA.js +0 -772
- package/dist/index-CYjZ26If.js +0 -153
- package/dist/useAndroidServiceAccountTestResult-DueKynFy.js +0 -50
- /package/assets/markdown/{create-or-import-keystore.md → create-or-import-keystore.md.ejs} +0 -0
package/README.md
CHANGED
|
@@ -1,54 +1,33 @@
|
|
|
1
|
-
<
|
|
2
|
-
|
|
1
|
+
# ShipThis <a href="https://discord.gg/gPjn3S99k4"><img alt="discord" src="https://img.shields.io/discord/1304144717239554069?style=flat-square&label=%F0%9F%92%AC%20discord&color=00ACD7"></a><a href="https://shipth.is/?ref=github_readme"><img src="docs/assets/st.png" align="right" height="80" alt="ShipThis" /></a>
|
|
2
|
+
|
|
3
|
+
- Build and publish Godot mobile games to the **App Store** and **Google Play**
|
|
4
|
+
- Handles certificates, keystores, API keys, and provisioning profiles
|
|
5
|
+
- Cloud builds are free for most solo-devs
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<a href="https://shipth.is/docs/reference/game/ship?ref=github_readme">
|
|
3
9
|
<picture>
|
|
4
|
-
<
|
|
5
|
-
<img height="56" width="260" alt="ShipThis Home" src="docs/assets/logo_light.svg">
|
|
10
|
+
<img height="266" width="504" alt="ShipThis Command - ship output" src="docs/assets/ship-outputx0.8.gif">
|
|
6
11
|
</picture>
|
|
7
12
|
</a>
|
|
8
|
-
<br>
|
|
9
|
-
<a href="https://discord.gg/gPjn3S99k4">
|
|
10
|
-
<img alt="discord" src="https://img.shields.io/discord/1304144717239554069?style=flat-square&label=%F0%9F%92%AC%20discord&color=00ACD7">
|
|
11
|
-
</a>
|
|
12
|
-
</h1>
|
|
13
|
-
<p align="center">
|
|
14
|
-
<b>ShipThis</b> is a <b>command line tool</b> for building and uploading your <a href="https://godotengine.org/">Godot</a> mobile games to the <b>Apple App Store</b> and <b>Google Play</b>.
|
|
15
|
-
</p>
|
|
16
|
-
<p align="center">
|
|
17
|
-
ShipThis compiles your game on managed cloud servers. You do not need Xcode, Android Studio, or SDK installations. You can run it manually or from CI.
|
|
18
13
|
</p>
|
|
19
14
|
|
|
20
|
-
<p align="center">
|
|
21
|
-
<picture>
|
|
22
|
-
<img height="266" width="504" alt="ShipThis Command - ship output" src="docs/assets/ship-outputx0.8.gif">
|
|
23
|
-
</picture>
|
|
24
|
-
</p>
|
|
25
|
-
|
|
26
|
-
|
|
27
15
|
> [!IMPORTANT]
|
|
28
|
-
>
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## Why use ShipThis?
|
|
33
|
-
|
|
34
|
-
- **Always a free tier** - Enough build minutes for most solo devs
|
|
35
|
-
- **One-command setup** - Use the interactive [`wizard`](https://shipth.is/docs/reference/game/wizard) to configure your game
|
|
36
|
-
- **No additional tools** - No Xcode, Android Studio, or SDK installation required
|
|
37
|
-
- **Simplified provisioning** - We handle iOS certificates, Android keystores, app signing, and API keys
|
|
38
|
-
- **One-command deployment** - Publish to TestFlight or Google Play with a single command
|
|
16
|
+
> Currently in open beta and free to use. It will **always** be free for most solo devs.
|
|
39
17
|
|
|
40
18
|
## Quick start
|
|
41
19
|
|
|
42
20
|
### Requirements
|
|
43
21
|
|
|
44
|
-
- A Godot 3.6 or 4.
|
|
22
|
+
- A Godot 3.6 or 4.x game
|
|
45
23
|
- [Node.js](https://nodejs.org/en/download/) version 18.0 or above
|
|
46
24
|
- **To publish an Android game** - a [Play Console developer account](https://play.google.com/apps/publish/signup) (not required for building an APK/AAB)
|
|
47
25
|
- **To build an iOS game** - an [Apple Developer account](https://developer.apple.com)
|
|
48
26
|
|
|
49
27
|
### 1. Install ShipThis
|
|
50
28
|
|
|
51
|
-
|
|
29
|
+
|
|
30
|
+
Install via the [NPM package manager](https://www.npmjs.com/):
|
|
52
31
|
|
|
53
32
|
```bash
|
|
54
33
|
npm install -g shipthis
|
|
@@ -56,9 +35,8 @@ npm install -g shipthis
|
|
|
56
35
|
|
|
57
36
|
### 2. Create an account
|
|
58
37
|
|
|
59
|
-
Set up an account with ShipThis by logging in for the first time using the [`shipthis login`](https://shipth.is/docs/reference/login) command.
|
|
38
|
+
Set up an account with ShipThis by logging in for the first time using the [`shipthis login`](https://shipth.is/docs/reference/login?ref=github_readme) command.
|
|
60
39
|
|
|
61
|
-
> 🛠 All builds run on managed cloud servers - no need to install Xcode or Android Studio locally.
|
|
62
40
|
|
|
63
41
|
```bash
|
|
64
42
|
shipthis login
|
|
@@ -66,7 +44,7 @@ shipthis login
|
|
|
66
44
|
|
|
67
45
|
### 3. Set up your game
|
|
68
46
|
|
|
69
|
-
Run the [wizard command](https://shipth.is/docs/reference/game/wizard) to configure your game on ShipThis. The command takes a platform parameter - this can be either **android** or **ios**. Run this command from within a Godot game directory (with a **project.godot** file):
|
|
47
|
+
Run the [wizard command](https://shipth.is/docs/reference/game/wizard?ref=github_readme) to configure your game on ShipThis. The command takes a platform parameter - this can be either **android** or **ios**. Run this command from within a Godot game directory (with a **project.godot** file):
|
|
70
48
|
|
|
71
49
|
#### Set up an Android game
|
|
72
50
|
|
|
@@ -104,34 +82,47 @@ shipthis game wizard ios
|
|
|
104
82
|
|
|
105
83
|
### 4. Ship
|
|
106
84
|
|
|
107
|
-
Now you can publish new versions of your game to TestFlight or Google Play with the [`shipthis game ship`](https://shipth.is/docs/reference/game/ship) command:
|
|
85
|
+
Now you can publish new versions of your game to TestFlight or Google Play with the [`shipthis game ship`](https://shipth.is/docs/reference/game/ship?ref=github_readme) command:
|
|
108
86
|
|
|
109
87
|
```bash
|
|
110
88
|
shipthis game ship
|
|
111
89
|
```
|
|
112
90
|
|
|
113
|
-
- Having issues? Check the [Troubleshooting](https://shipth.is/docs/troubleshooting) or [join our Discord](https://discord.gg/gPjn3S99k4)
|
|
114
|
-
- For detailed documentation, visit [shipth.is/docs](https://shipth.is/docs)
|
|
91
|
+
- Having issues? Check the [Troubleshooting](https://shipth.is/docs/troubleshooting?ref=github_readme) or [join our Discord](https://discord.gg/gPjn3S99k4)
|
|
92
|
+
- For detailed documentation, visit [shipth.is/docs](https://shipth.is/docs?ref=github_readme)
|
|
115
93
|
|
|
116
94
|
|
|
117
95
|
## FAQ
|
|
118
96
|
|
|
119
|
-
|
|
120
|
-
<summary><strong>Can I build my game as APK without a Google Play account?</strong></summary>
|
|
97
|
+
### Do I need a Mac to build for iOS?
|
|
121
98
|
|
|
122
|
-
|
|
99
|
+
No, you do not need a Mac, but you will need an Apple Developer Account.
|
|
123
100
|
|
|
124
|
-
|
|
101
|
+
ShipThis handles iOS builds on managed macOS cloud servers. The CLI connects to the Apple Developer Portal and sets everything up for you.
|
|
125
102
|
|
|
126
|
-
|
|
103
|
+
### Which versions of Godot are supported?
|
|
127
104
|
|
|
128
|
-
|
|
105
|
+
We support **all stable Godot versions since 3.6**, including:
|
|
129
106
|
|
|
107
|
+
| 3.6 | 4.0 | 4.1 | 4.2 | 4.3 | 4.4 |
|
|
108
|
+
|---------|----------|----------|--------|-----|--------|
|
|
109
|
+
| 3.6.1 | 4.0.1 | 4.1.1 | 4.2.1 | | 4.4.1 |
|
|
110
|
+
| | 4.0.2 | 4.1.2 | 4.2.2 | | |
|
|
111
|
+
| | 4.0.3 | 4.1.3 | | | |
|
|
112
|
+
| | 4.0.4 | 4.1.4 | | | |
|
|
130
113
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
114
|
+
You can read more in our [Godot versioning guide](https://shipth.is/docs/guides/godot-versioning?ref=github_readme).
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
### Can I build my game as APK without a Google Play account?
|
|
134
118
|
|
|
119
|
+
Yes.
|
|
120
|
+
|
|
121
|
+
Running the wizard command will create a Service Account Key for automatic publishing, but you might not need this when initially building your game.
|
|
122
|
+
|
|
123
|
+
You can create a ShipThis account, create the game, create a keystore, and then run the ship command. Later, when you need to set up publishing, you can re-run the wizard command.
|
|
124
|
+
|
|
125
|
+
```bash
|
|
135
126
|
# Create a ShipThis game - run this in a dir with a project.godot file
|
|
136
127
|
shipthis game create --name "My Game" --androidPackageName "com.my.game"
|
|
137
128
|
|
|
@@ -142,73 +133,225 @@ shipthis game android keyStore create
|
|
|
142
133
|
shipthis game ship --follow --platform android --skipPublish --downloadAPK game.apk
|
|
143
134
|
```
|
|
144
135
|
|
|
136
|
+
### Do I need to create an export_presets.cfg file?
|
|
145
137
|
|
|
146
|
-
|
|
138
|
+
No, the ShipThis build server will generate a valid **export_presets.cfg** for your game.
|
|
147
139
|
|
|
140
|
+
If you provide an **export_presets.cfg** file, the desired preset values will be merged with the generated file.
|
|
148
141
|
|
|
149
|
-
|
|
150
|
-
<summary><strong>Do I need a Mac to build for iOS?</strong></summary>
|
|
142
|
+
### How much does it cost to use ShipThis?
|
|
151
143
|
|
|
152
|
-
|
|
144
|
+
Currently free while in open beta. Planned pricing is on the [pricing page](https://shipth.is/pricing?ref=github_readme).
|
|
153
145
|
|
|
154
|
-
|
|
146
|
+
### What does the `shipthis game wizard` do?
|
|
155
147
|
|
|
156
|
-
|
|
148
|
+
The wizard command runs different steps for Android and iOS. Each "step" is another ShipThis command - meaning you can run each step by itself. The wizard can be re-run any number of times.
|
|
157
149
|
|
|
158
|
-
|
|
150
|
+
The Android steps are described in the [Android set-up guide](https://shipth.is/docs/android?ref=github_readme).
|
|
151
|
+
The iOS steps are described in the [iOS setup guide](https://shipth.is/docs/ios).
|
|
159
152
|
|
|
160
153
|
<details>
|
|
161
|
-
<summary><strong>
|
|
154
|
+
<summary><strong>The commands run for Android</strong></summary>
|
|
162
155
|
|
|
163
|
-
|
|
156
|
+
1. Creating a new ShipThis game
|
|
164
157
|
|
|
165
|
-
|
|
158
|
+
```bash
|
|
159
|
+
shipthis game create --name "Pay2Lose" --androidPackageName "com.pay.two.lose"
|
|
160
|
+
```
|
|
166
161
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
162
|
+
1. Creating or importing an Android Keystore
|
|
163
|
+
|
|
164
|
+
To create a new Keystore:
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
shipthis game android keyStore create
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
To import an existing Keystore see [the docs for the `shipthis game android keyStore import` command](https://shipth.is/docs/reference/game/android/keyStore?ref=github_readme#game-android-keystore-import)
|
|
171
|
+
|
|
172
|
+
1. Connecting ShipThis with Google
|
|
173
|
+
|
|
174
|
+
Once connected, ShipThis can generate a Service Account API Key for automatic publishing.
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
shipthis game android apiKey connect
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
1. Create a Service Account and API Key
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
shipthis game android apiKey create
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
1. Create and download an initial build (AAB file)
|
|
187
|
+
|
|
188
|
+
When you first create your game in the Google Play Console, you will be asked to upload an initial build in AAB format.
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
shipthis game ship --platform android --follow --skipPublish --download game.aab
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
1. Create an app in the Google Play Console
|
|
173
195
|
|
|
174
|
-
You
|
|
196
|
+
You will need to manually create the game itself in Google Play. This will involve entering the name, agreeing to Google Play's TOS and uploading an initial build.
|
|
197
|
+
|
|
198
|
+
1. Invite the Service Account
|
|
199
|
+
|
|
200
|
+
Before the Service Account API Key can submit your games automatically, you will need to invite the Service Account to your Google Play account. To do this you will need your Google Play Account ID.
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
shipthis game android apiKey invite XXXXXXXXX
|
|
204
|
+
```
|
|
175
205
|
|
|
176
206
|
</details>
|
|
177
207
|
|
|
178
208
|
<details>
|
|
179
|
-
<summary><strong>
|
|
209
|
+
<summary><strong>The commands run for iOS</strong></summary>
|
|
180
210
|
|
|
181
|
-
|
|
211
|
+
1. Create a new ShipThis game
|
|
182
212
|
|
|
183
|
-
|
|
213
|
+
```bash
|
|
214
|
+
shipthis game create --name "Tap to Win Nothing" --iosBundleId "com.tap.to.win.nothing"
|
|
215
|
+
```
|
|
184
216
|
|
|
185
|
-
|
|
217
|
+
1. Connect ShipThis with Apple
|
|
218
|
+
|
|
219
|
+
We recommend enabling 2FA for your account. ShipThis generates a session cookie for communicating with the Apple Developer Portal.
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
shipthis apple login
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
1. Create an App Store Connect API Key
|
|
226
|
+
|
|
227
|
+
ShipThis uses this API key to submit new versions of your game.
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
shipthis apple apiKey create
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
1. Create an iOS Distribution Certificate
|
|
234
|
+
|
|
235
|
+
This certificate is used to sign your game on the ShipThis build servers.
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
shipthis apple certificate create
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
1. Create an App Store App and BundleId
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
shipthis game ios app create
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
1. Synchronize Permissions (Capabilities)
|
|
248
|
+
|
|
249
|
+
ShipThis reads `export_presets.cfg` and enables supported capabilities in the Apple Developer Portal (currently Access WiFi, Push Notifications).
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
shipthis game ios app sync
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
1. Create a Provisioning Profile
|
|
256
|
+
|
|
257
|
+
Required to run on devices and for distribution. You can view profiles at Apple’s portal: https://developer.apple.com/account/resources/profiles/list
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
shipthis game ios profile create
|
|
261
|
+
```
|
|
186
262
|
|
|
187
263
|
</details>
|
|
188
264
|
|
|
189
265
|
<details>
|
|
190
|
-
<summary><strong>
|
|
266
|
+
<summary><strong>Watch: The wizard run for Android</strong></summary>
|
|
191
267
|
|
|
192
|
-
|
|
268
|
+
<p align="center">
|
|
269
|
+
<picture>
|
|
270
|
+
<img height="431" width="672" alt="ShipThis Command - Android Wizard - published game" src="docs/assets/wizard-android-existingx0.5.gif">
|
|
271
|
+
</picture>
|
|
272
|
+
</p>
|
|
273
|
+
|
|
274
|
+
</details>
|
|
275
|
+
|
|
276
|
+
<details>
|
|
277
|
+
<summary><strong>Watch: The wizard run for iOS</strong></summary>
|
|
193
278
|
|
|
194
|
-
|
|
279
|
+
<p align="center">
|
|
280
|
+
<a href="https://www.youtube.com/watch?v=ijTUFVk1duw" target="_blank">
|
|
281
|
+
<img src="https://img.youtube.com/vi/ijTUFVk1duw/0.jpg" alt="Watch the iOS setup video" width="640" height="480">
|
|
282
|
+
</a>
|
|
283
|
+
</p>
|
|
195
284
|
|
|
196
285
|
</details>
|
|
197
286
|
|
|
287
|
+
### How do I debug a failed build?
|
|
288
|
+
|
|
289
|
+
If a build fails, rerun it for only the failing platform with the `--follow` flag to view the logs in real time:
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
shipthis game ship --platform android --follow
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
You can also review logs at any time in the [dashboard](https://shipth.is/dashboard?ref=github_readme).
|
|
296
|
+
|
|
297
|
+
See the [Troubleshooting Guide](https://shipth.is/docs/troubleshooting?ref=github_readme) for common checks.
|
|
298
|
+
|
|
299
|
+
If the issue persists, we can help you directly in our [Discord](https://discord.gg/gPjn3S99k4).
|
|
300
|
+
|
|
301
|
+
### Does ShipThis work with CI/CD pipelines?
|
|
302
|
+
|
|
303
|
+
Yes. ShipThis works with CI/CD pipelines, allowing you to run automated builds without an interactive shell.
|
|
304
|
+
|
|
305
|
+
To get started, create an API key, for your pipeline environment:
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
# API keys can have a maximum lifetime of 1 year
|
|
309
|
+
shipthis apiKey create --durationDays 365 --name ci-key
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
The secret value will only be displayed once and this can be used as an environment variable called `SHIPTHIS_TOKEN`.
|
|
313
|
+
|
|
314
|
+
```bash
|
|
315
|
+
export SHIPTHIS_TOKEN=your_token_here
|
|
316
|
+
shipthis game ship --platform android --follow
|
|
317
|
+
shipthis game ship --platform ios --follow
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
For GitHub users, we provide an official **GitHub Action** for easy integration: https://github.com/shipth-is/action
|
|
321
|
+
|
|
322
|
+
See the [API Keys documentation](https://shipth.is/docs/reference/apiKey/?ref=github_readme) for more information.
|
|
323
|
+
|
|
324
|
+
### How are my credentials stored and secured?
|
|
325
|
+
|
|
326
|
+
ShipThis uses short-lived, signed URLs and ephemeral build environments.
|
|
327
|
+
|
|
328
|
+
- Credentials are stored in a private DigitalOcean Space.
|
|
329
|
+
- Every access is logged for a full audit trail.
|
|
330
|
+
- When a build starts, credentials are fetched on-demand and loaded as environment variables.
|
|
331
|
+
- Temporary files are created only if needed and cleaned up when the job finishes.
|
|
332
|
+
|
|
333
|
+
We store:
|
|
334
|
+
|
|
335
|
+
- Android Keystores
|
|
336
|
+
- Google Play Service Account API keys
|
|
337
|
+
- iOS provisioning profiles
|
|
338
|
+
- App Store Connect API keys
|
|
339
|
+
- iOS distribution certificates
|
|
340
|
+
|
|
198
341
|
## 📖 Command Reference
|
|
199
342
|
|
|
200
343
|
### 🗂 Topics
|
|
201
344
|
|
|
202
|
-
- [apiKey](https://shipth.is/docs/reference/apiKey) - Commands related to ShipThis API Keys
|
|
203
|
-
- [apple](https://shipth.is/docs/reference/apple) - Commands that relate to linking your ShipThis account with your Apple Developer Account
|
|
204
|
-
- [game](https://shipth.is/docs/reference/game) - Commands that relate to configuring the specific game in the current working directory.
|
|
345
|
+
- [apiKey](https://shipth.is/docs/reference/apiKey?ref=github_readme) - Commands related to ShipThis API Keys
|
|
346
|
+
- [apple](https://shipth.is/docs/reference/apple?ref=github_readme) - Commands that relate to linking your ShipThis account with your Apple Developer Account
|
|
347
|
+
- [game](https://shipth.is/docs/reference/game?ref=github_readme) - Commands that relate to configuring the specific game in the current working directory.
|
|
205
348
|
|
|
206
349
|
### 🔧 Commands
|
|
207
350
|
|
|
208
|
-
- [dashboard](https://shipth.is/docs/reference/dashboard) - Opens the web browser to your shipth.is dashboard
|
|
209
|
-
- [login](https://shipth.is/docs/reference/login) - Sign in or create a new account
|
|
210
|
-
- [status](https://shipth.is/docs/reference/status) - Display your overall ShipThis account status
|
|
211
|
-
- [help](https://shipth.is/docs/reference/help) - Display help for a specific topic or command
|
|
351
|
+
- [dashboard](https://shipth.is/docs/reference/dashboard?ref=github_readme) - Opens the web browser to your shipth.is dashboard
|
|
352
|
+
- [login](https://shipth.is/docs/reference/login?ref=github_readme) - Sign in or create a new account
|
|
353
|
+
- [status](https://shipth.is/docs/reference/status?ref=github_readme) - Display your overall ShipThis account status
|
|
354
|
+
- [help](https://shipth.is/docs/reference/help?ref=github_readme) - Display help for a specific topic or command
|
|
212
355
|
|
|
213
356
|
## 🌍 Community
|
|
214
357
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Warning - there are changes to our agreements:
|
|
2
|
+
|
|
3
|
+
<% changes.forEach((agreement) => { %>
|
|
4
|
+
## <%= agreement.agreementType === 'PRIVACY_POLICY' ? 'Privacy Policy' : 'Terms and Conditions' %> Update (<%= agreement.versionName %>)
|
|
5
|
+
**<%= agreement.description %>**
|
|
6
|
+
Read more: <%= agreement.url %>
|
|
7
|
+
|
|
8
|
+
<% }); %>
|
|
9
|
+
|
|
10
|
+
Hide this message by running: `shipthis login --acceptAgreements`
|
|
11
|
+
|
|
12
|
+
---
|
|
@@ -8,8 +8,8 @@ shipthis game ship
|
|
|
8
8
|
|
|
9
9
|
## 🚀 Next Steps
|
|
10
10
|
|
|
11
|
-
- Check out the **iOS set up guide** [
|
|
12
|
-
- Review the **ShipThis Documentation** [
|
|
11
|
+
- Check out the **iOS set up guide** [<%= iosSetupURL %>](<%= iosSetupURL %>)
|
|
12
|
+
- Review the **ShipThis Documentation** [<%= docsURL %>](<%= docsURL %>)
|
|
13
13
|
|
|
14
14
|
### Need help?
|
|
15
15
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Your ShipThis API Key has been created
|
|
2
2
|
|
|
3
|
-
- ID:
|
|
4
|
-
- Name:
|
|
5
|
-
- Expiry:
|
|
3
|
+
- ID: **<%= keyId %>**
|
|
4
|
+
- Name: **<%= keyName %>**
|
|
5
|
+
- Expiry: **<%= keyExpiry %>**
|
|
6
6
|
|
|
7
7
|
**The secret will not be shown again. Store it securely.**
|
|
8
8
|
|
|
9
9
|
## Secret value
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
<%= keySecret %>
|
|
@@ -12,7 +12,7 @@ You will need to manually create an "app" in Google Play.
|
|
|
12
12
|
To download the AAB file from the previous step, please run:
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
|
-
|
|
15
|
+
<%= downloadCmd %>
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
The build is also available for download from your **ShipThis Dashboard** [
|
|
18
|
+
The build is also available for download from your **ShipThis Dashboard** [<%= dashboardURL %>](<%= dashboardURL %>). **Press D to open the dashboard in your browser**
|
|
@@ -4,7 +4,7 @@ Before the Service Account API Key can submit your games automatically, you will
|
|
|
4
4
|
|
|
5
5
|
## How To find your Google Play Account ID
|
|
6
6
|
|
|
7
|
-
You can read our help page about this on the **ShipThis Documentation** [
|
|
7
|
+
You can read our help page about this on the **ShipThis Documentation** [<%= guideURL %>](<%= guideURL %>)
|
|
8
8
|
|
|
9
9
|
1. Log in to the **Google Play Console** [https://play.google.com/console](https://play.google.com/console)
|
|
10
10
|
1. Below your account name there is a label **Account ID**
|
|
@@ -8,8 +8,8 @@ shipthis game ship
|
|
|
8
8
|
|
|
9
9
|
## 🚀 Next Steps
|
|
10
10
|
|
|
11
|
-
- Check out the **Android set up guide** [
|
|
12
|
-
- Review the **ShipThis Documentation** [
|
|
11
|
+
- Check out the **Android set up guide** [<%= androidSetupURL %>](<%= androidSetupURL %>)
|
|
12
|
+
- Review the **ShipThis Documentation** [<%= docsURL %>](<%= docsURL %>)
|
|
13
13
|
|
|
14
14
|
### Need help?
|
|
15
15
|
|
|
@@ -7,4 +7,4 @@ By connecting your Google account, ShipThis will generate a short-lived access t
|
|
|
7
7
|
- Securely store your Service Account API Key in the ShipThis backend for deploying new game builds.
|
|
8
8
|
- Invite the Service Account to your Google Play account.
|
|
9
9
|
|
|
10
|
-
**To learn more about how ShipThis accesses, uses, and protects your Google data, please review our Privacy Policy [
|
|
10
|
+
**To learn more about how ShipThis accesses, uses, and protects your Google data, please review our Privacy Policy [<%= privacyURL %>](<%= privacyURL %>).**
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Google Organization Policy Change Needed
|
|
2
|
+
|
|
3
|
+
| Organization | Resource | Created |
|
|
4
|
+
|--------------|----------|---------|
|
|
5
|
+
| <%= orgName %> | <%= orgResourceName %> | <%= orgCreatedAt %> |
|
|
6
|
+
|
|
7
|
+
## What you need to do
|
|
8
|
+
|
|
9
|
+
Before ShipThis can create a Service Account API key for your game, you need to ensure that your Google Organization Policy allows Service Account key creation. This is a security measure present on some Google Organization accounts to prevent unauthorized access to resources.
|
|
10
|
+
|
|
11
|
+
If your organization was created on or after **May 3, 2024**, this policy is enforced by default and will need to be changed.
|
|
12
|
+
|
|
13
|
+
Learn more: https://cloud.google.com/resource-manager/docs/organization-policy/restricting-service-accounts?authuser=2#disable_service_account_key_creation
|
|
14
|
+
|
|
15
|
+
**ShipThis can change this policy for you. Press P to proceed and let ShipThis change the policy.**
|
|
16
|
+
|
|
17
|
+
If you would like to change this policy manually, please see:
|
|
18
|
+
|
|
19
|
+
- https://www.youtube.com/watch?v=ABIiOM9X5kM
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
You can re-enable the policy at any time:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
shipthis game android apiKey policy --enforce
|
|
26
|
+
```
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Google Organization Policy: Disable Service Account Key Creation
|
|
2
|
+
|
|
3
|
+
**Organization:** <%= orgName %>
|
|
4
|
+
**Resource:** <%= orgResourceName %>
|
|
5
|
+
**Created:** <%= orgCreatedAt %>
|
|
6
|
+
**Policy Change Needed:** <%= needsPolicyChange ? 'Yes' : 'No' %>
|
|
7
|
+
|
|
8
|
+
Note: If your organization was created on or after **May 3, 2024**, this constraint is enforced by default.
|
|
9
|
+
Learn more: https://cloud.google.com/resource-manager/docs/organization-policy/restricting-service-accounts?authuser=2#disable_service_account_key_creation
|
|
10
|
+
|
|
11
|
+
If you would like to change this policy manually, please see:
|
|
12
|
+
|
|
13
|
+
- https://www.youtube.com/watch?v=ABIiOM9X5kM
|
|
14
|
+
|
|
15
|
+
<% if (needsPolicyChange) { %>
|
|
16
|
+
This organization currently **enforces** the policy that disables service account key creation.
|
|
17
|
+
|
|
18
|
+
To create an API key, you must **revoke** this policy:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
shipthis game android apiKey policy --revoke
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
You can re-enable the policy at any time:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
shipthis game android apiKey policy --enforce
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
<% } %>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
## What now?
|
|
6
6
|
|
|
7
7
|
- **The last 10 lines of the failed jobs are shown below**
|
|
8
|
-
- Check out the full output in the **ShipThis Dashboard** [
|
|
8
|
+
- Check out the full output in the **ShipThis Dashboard** [<%= jobDashboardUrl %>](<%= jobDashboardUrl %>)
|
|
9
9
|
|
|
10
10
|
### Need help?
|
|
11
11
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# 🚀 Shipped
|
|
2
2
|
|
|
3
|
-
**Your game has been successfully built
|
|
3
|
+
**Your game has been successfully built<% if (wasPublished) { %> and published<% } %>.**
|
|
4
4
|
|
|
5
5
|
## Next Steps
|
|
6
6
|
|
|
7
|
-
- See all builds in the **Dashboard** [
|
|
7
|
+
- See all builds in the **Dashboard** [<%= gameBuildsUrl %>](<%= gameBuildsUrl %>)
|
|
8
8
|
|
|
9
9
|
### Need help?
|
|
10
10
|
|
|
@@ -11,13 +11,13 @@ import 'readline-sync';
|
|
|
11
11
|
import 'luxon';
|
|
12
12
|
import 'axios';
|
|
13
13
|
import 'isomorphic-git';
|
|
14
|
-
import './index-
|
|
14
|
+
import './index-BtPf4vzY.js';
|
|
15
15
|
import '@oclif/core';
|
|
16
16
|
import '@tanstack/react-query';
|
|
17
17
|
import 'react';
|
|
18
18
|
import 'crypto-js';
|
|
19
19
|
import 'uuid';
|
|
20
|
-
import { u as useAppleApp } from './useAppleApp-
|
|
20
|
+
import { u as useAppleApp } from './useAppleApp-BKPntZPm.js';
|
|
21
21
|
import 'fast-glob';
|
|
22
22
|
import 'yazl';
|
|
23
23
|
import 'socket.io-client';
|
|
@@ -27,11 +27,10 @@ import { T as Title } from './Title-BCQtayg6.js';
|
|
|
27
27
|
import 'string-length';
|
|
28
28
|
import 'strip-ansi';
|
|
29
29
|
import 'open';
|
|
30
|
-
import './index-CA6-uLMn.js';
|
|
31
30
|
import 'marked';
|
|
32
31
|
import 'marked-terminal';
|
|
33
32
|
import 'qrcode';
|
|
34
|
-
import { u as useAppleBundleId } from './useAppleBundleId-
|
|
33
|
+
import { u as useAppleBundleId } from './useAppleBundleId-DvQKEEy4.js';
|
|
35
34
|
|
|
36
35
|
const AppleAppDetails = (props) => {
|
|
37
36
|
const { data, isLoading } = useAppleApp(props);
|
|
@@ -2,7 +2,7 @@ import { jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { QueryClientProvider } from '@tanstack/react-query';
|
|
3
3
|
import { useScreenSize } from 'fullscreen-ink';
|
|
4
4
|
import { Box } from 'ink';
|
|
5
|
-
import {
|
|
5
|
+
import { Y as queryClient, Z as CommandProvider } from './index-BtPf4vzY.js';
|
|
6
6
|
import 'axios';
|
|
7
7
|
import 'node:fs';
|
|
8
8
|
import 'crypto-js';
|
|
@@ -19,7 +19,6 @@ import 'react';
|
|
|
19
19
|
import 'socket.io-client';
|
|
20
20
|
import 'fast-glob';
|
|
21
21
|
import 'yazl';
|
|
22
|
-
import { b as CommandProvider } from './index-CA6-uLMn.js';
|
|
23
22
|
|
|
24
23
|
const Command = ({ children, command }) => {
|
|
25
24
|
const { width } = useScreenSize();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import {
|
|
3
|
-
import { C as Command } from './Command-
|
|
2
|
+
import { _ as GameProvider } from './index-BtPf4vzY.js';
|
|
3
|
+
import { C as Command } from './Command-DhAVAdiI.js';
|
|
4
4
|
|
|
5
5
|
const CommandGame = ({ children, command }) => /* @__PURE__ */ jsx(Command, { command, children: /* @__PURE__ */ jsx(GameProvider, { children }) });
|
|
6
6
|
|
|
@@ -3,7 +3,7 @@ import { useQueryClient } from '@tanstack/react-query';
|
|
|
3
3
|
import axios from 'axios';
|
|
4
4
|
import { Box } from 'ink';
|
|
5
5
|
import { useContext } from 'react';
|
|
6
|
-
import {
|
|
6
|
+
import { R as GameContext, t as getAuthedHeaders, s as API_URL, a1 as cacheKeys } from './index-BtPf4vzY.js';
|
|
7
7
|
import 'ink-spinner';
|
|
8
8
|
import 'node:crypto';
|
|
9
9
|
import 'node:fs';
|
|
@@ -14,7 +14,6 @@ import 'readline-sync';
|
|
|
14
14
|
import 'luxon';
|
|
15
15
|
import 'isomorphic-git';
|
|
16
16
|
import '@oclif/core';
|
|
17
|
-
import { c as cacheKeys } from './useAndroidServiceAccountTestResult-DueKynFy.js';
|
|
18
17
|
import 'fast-glob';
|
|
19
18
|
import 'uuid';
|
|
20
19
|
import 'yazl';
|
|
@@ -28,7 +27,6 @@ import 'marked';
|
|
|
28
27
|
import 'marked-terminal';
|
|
29
28
|
import 'qrcode';
|
|
30
29
|
import { R as RunWithSpinner } from './RunWithSpinner-DucRnFp6.js';
|
|
31
|
-
import { G as GameContext } from './index-CA6-uLMn.js';
|
|
32
30
|
|
|
33
31
|
const CreateKeystore = ({ onComplete, onError, ...boxProps }) => {
|
|
34
32
|
const { gameId } = useContext(GameContext);
|