Command: game ship
Description
The shipthis game ship command builds your Godot game in the cloud and publishes it to the App Store and Google Play.
It uploads your project, compiles it on the ShipThis build servers using the credentials you set up with shipthis game wizard, and - unless you tell it not to - sends the finished build on to TestFlight or Google Play.
You do not need an Apple computer, Xcode or the Android SDK. If you are not ready to publish yet, --skipPublish gives you the build without sending it anywhere.
Each platform you build for creates a job - one build of your game, on one platform, on our cloud build servers.
You can watch a job while it runs, or come back to it later with shipthis game job or in the ShipThis dashboard.
Examples
Standard use
When run without any flags, the command will try to run the full build and publish pipelines for each of the platforms that you have configured.
When run like this, pressing L will show or hide the last few lines of the logs, pressing B will open the job log in your browser.
Follow mode
When using ShipThis in a CI environment, it is most useful to use the --follow to collect the full output. This flag requires you to specify the --platform flag too.
Follow, do not publish, and then download APK
Use --skipPublish when you want the build but do not want it sent to TestFlight or Google Play, and --downloadAPK to save the APK to a file when the job finishes. Together with --follow this builds your game, keeps the logs on screen, and leaves you with something you can install on a device:
Use --download instead of --downloadAPK to save the AAB for Google Play, or the IPA on iOS.
Building with demo credentials
Adding the --useDemoCredentials flag builds the specified platform with ShipThis demo certificates, keystores and provisioning profiles instead of your own. This is useful to generate an asset which can be side-loaded onto your own device.
The flag implies --skipPublish. A build signed with demo credentials is never published to TestFlight or Google Play.
Uploading a large game
Before your build starts, your game files are zipped up and uploaded. Which files end up in that zip is controlled by the globs in your shipthis.json - see Controlling uploaded files.
If the zip comes to 16MB or more, ShipThis splits it up and sends the parts in parallel, which is a good deal faster than sending the whole thing in one go. Each part is sent on its own, so a dropped connection does not cost you the whole upload - the failed part is retried and the parts that already arrived stay where they are.
Zips under 16MB are sent in a single request. Splitting a small zip into parts does not make it any faster.
If the parallel upload gives you trouble, --skipMultipart will send the whole zip in one request instead. It is slower, and the zip must be 5GB or less:
Add --verbose to watch the individual parts go up, including any that get retried.
Overriding the Godot version
You can specify a different Godot version to use only for the current job. This can be helpful if you are upgrading your game to use a newer version of Godot.
The CLI checks this version before it builds the zip, so a typo stops the command in a second. See Godot versioning for the versions ShipThis supports.
Help Output
Common tasks
Build and publish everything you have configured
Build an APK you can sideload, with no Google account
Build an AAB for Google Play
Build for iOS and watch the log
Build without publishing anything
See what would be uploaded, without building
FAQ
Will running shipthis game ship publish my game to the store?
If you have configured publishing for a platform, then yes - a successful build is uploaded to TestFlight or Google Play at the end of the job.
If you do not want that, add --skipPublish. The build still runs and you can still
download the result, but nothing is sent to Apple or Google:
--useDemoCredentials also implies --skipPublish. A build signed with demo
credentials is never published.
Do I need an Apple Developer account or a Google Play account?
Not to get a build. Add --useDemoCredentials and ShipThis signs the build with its own
certificates, keystore and provisioning profile instead of yours. The flag requires
--platform, and it implies --skipPublish - a build signed with demo credentials is
never sent to TestFlight or Google Play.
Android
iOS
If you want every build to use demo credentials without passing the flag each time, set it on the game:
You will need your own accounts when you want to publish - a Play Console Developer account for Google Play, an Apple Developer account for the App Store. Run the wizard command at that point and it will set the credentials up for you.
Do I need a Mac to build for iOS?
No. Your game is compiled on the ShipThis cloud build servers, so you do not need an Apple computer, and you do not need Xcode or the Android SDK installed either. The CLI itself runs on Windows, macOS and Linux - there is even a guide to building for iOS from an Android device using Termux.
You will still need an Apple Developer account to publish to the App Store, because that is Apple's requirement rather than ours. To get an IPA without one, see the question above.
What files does ShipThis upload from my machine?
The files selected by the globs values in your shipthis.json file. To see the list
without starting a build, use --dryRun:
If the list is not what you expected, see Controlling uploaded files for how to change it. For what happens to those files once they reach us - where they are stored, who can read them, and how long they are kept - see How your code is handled.
Which version of Godot will my game be built with?
ShipThis reads your project.godot file and detects the Major.Minor version you used, for example 4.2. It then builds with the latest stable patch release of that version.
To see what it has picked, run shipthis game details and
look at Game Engine Version:
To use a different version for a single build - handy when you are testing an upgrade:
The version is checked before your files are zipped, so a typo stops the command in a second rather than failing a build minutes later.
To pin a version for every build, set it on the game instead:
See Godot versioning for the versions we support.
What is the difference between game ship and game build?
shipthis game ship starts a new job - it compiles your
game. shipthis game build lists and downloads the
APK, AAB and IPA files that previous jobs have already produced.
So you run game ship to make a build, and game build to fetch one you made earlier.
My build failed - how do I find out why?
Run it again with --follow to watch the logs as they happen:
Add --verbose for more detail - this enables detailed logging locally and on the build
server, including running the Godot export with verbose output:
To pull the full logs for a job that has already finished, use
shipthis game job logs:
You can also review any job at any time in the dashboard under the "Jobs" tab.
If none of that explains it, the Troubleshooting guide covers the common failures, and we can help you directly in our Discord.
Does shipping change my version number?
It changes the Build Number. ShipThis increments it automatically after each successful build, so you do not have to remember to.
The Semantic Version is yours to manage - ShipThis will NOT change it. To bump it:
Both values are shown by shipthis game details. See
Game versioning for what each number is for, and what the
stores expect of them.
My upload is slow, or it keeps failing
If your zip comes to 16MB or more, ShipThis splits it up and uploads the parts in parallel. Each part is sent on its own, so a dropped connection does not cost you the whole upload - the failed part is retried and the parts that already arrived stay where they are.
If the parallel upload is giving you trouble, send the whole zip in one request instead:
It is slower, and the zip must be under 5GB. Add --verbose to watch the parts go up,
including any that get retried.
If the upload is simply larger than it needs to be, check what is going into it:
Leaving out previous exports, build folders and raw source assets can make a big difference - see Controlling uploaded files.
Related
game wizard- set up credentials for a platformgame create- register a new game with ShipThisgame job- watch a running job, or read its logsgame build- list and download finished buildsgame details- view and set the game's version, engine and IDs- Controlling uploaded files - choose which files are sent
- How your code is handled - storage, access and retention
- Godot versioning - the Godot versions we build with
- Troubleshooting - common failures and how to check them
What's next?
If you have not set up a platform yet, the quick start takes you from installing the CLI to a published game in about five minutes. If something is not behaving, come and find us in Discord.