Automatically deploy to Google Play Store with GitHub Actions and the Ionic Cloud CLI
Faster and more frequent releases, better visibility, and the reduction of bottlenecks and knowledge silos are just some of the reasons to start automating your deployments to the Google Play Store with GitHub Actions.
However, getting your deployments set up in a CI/CD environment can bring its own set of headaches. In particular, managing your signing credentials, build stack, and build environment variables can be complex and require extensive DevOps expertise. Provisioning Mac hardware for iOS builds can make mistakes and inefficient runs expensive.
Fortunately, Appflow is here to make it easier with the Ionic Cloud CLI. Appflow is known for its easy-to-use dashboard for building out automated workflows. For developers and teams that need to integrate with an existing CI/CD provider – but still want to leverage Appflow for cloud native builds and app store deployments – the Ionic Cloud CLI is the perfect solution.
In this post, we’ll walk through how to set up a GitHub Actions workflow using the Ionic CLI to build and deploy a release build of an Android app to a Google Play Store internal testing track. You can view the completed workflow files at this repo.
Let’s get started!
Ionic Cloud CLI setup
The first step is setting up your Ionic Cloud CLI personal access token. You can generate a personal access token from Personal Settings > Personal Access Tokens in the Appflow dashboard.
Note: A Scale or Enterprise plan is required to use the Ionic Cloud CLI. If you don’t currently have access, contact us to get started.
Once the token is generated, save it as a GitHub secret under Settings > Secrets and Variables > Actions for your project repository. In our example, we’ll save it as IONIC_TOKEN
to reference in our GitHub Actions workflow.
GitHub Actions Workflow setup
Create a workflow file named deploy.yml
under .github/workflows
in your project. You can also create a new workflow file right in GitHub under Actions > New Workflow if you prefer to work in GitHub’s file editor.
Add the following to the workflow file:
name: Android Deploy to Play Store
on:
push:
branches:
- 'main'
jobs:
Android-Deploy:
runs-on: ubuntu-latest
env:
IONIC_TOKEN: ${{ secrets.IONIC_TOKEN }}
APP_ID: '161d2d34'
SIGNING_CERT: 'production'
DESTINATION: 'Google Play Internal'
Here we’re doing the following:
- Giving the workflow file a name of “Android Deploy to Play Store”.
- Setting the workflow to trigger on new pushes to the
main
branch - Creating a
Android-Deploy
job that uses aubuntu-latest
machine
Note: Using the Ionic Cloud CLI for native builds uses the Appflow runner for the build process – not your GitHub Actions runner. This means you can use Appflow for iOS builds without needing to provision a Mac machine yourself!
We’re also setting a few environment variables that we’ll use for our native build and deploy to Google Play store.
- The
IONIC_TOKEN
, which uses the GitHub Secret we set up with the personal access token - The
APP_ID
, which refers to the Appflow App ID - The
SIGNING_CERT
, which refers to the name of the signing certificate uploaded to Appflow to use for the build - The
DESTINATION
, which refers to the destination name you’ve set up in Appflow
Signing certificates and destination names are case sensitive and you’ll need to use quotes if you have spaces. You can find the App ID, signing certificate, and destination names in the Appflow Dashboard.
Check out the documentation on setting up signing certificates and destinations in Appflow if you haven’t already set them up.
Native Builds
Now let’s set up our Ionic Cloud CLI to handle our native Android build. Add the following steps to your workflow file:
steps:
- name: Install Ionic Cloud CLI
run: curl -sL https://ionic.io/blog/get-ionic-cloud-cli | bash
- name: Build AAB and Save Android Build ID
id: android_build
run: |
ANDROID_BUILD_ID=$(ionic-cloud build android release --app-id=$APP_ID --commit=$GITHUB_SHA --signing-cert=$SIGNING_CERT --aab-name=app.aab --json --token=$IONIC_TOKEN | jq -r ".buildId")
echo "ANDROID_BUILD_ID=$ANDROID_BUILD_ID" >> $GITHUB_OUTPUT
- name: Upload AAB
uses: actions/upload-artifact@v3
with:
name: Signed AAB
path: ./app.aab
The first step is installing the Ionic Cloud CLI. This should take less than a second and have no impact on your build time.
In the next step, we’re using the ionic-cloud build android
command to generate a native binary. This step has an id set to android_build
. This is so we can use the output from this step later in our workflow. We’re passing the following flags to this command:
release
designates the build type--app-id
designates the Appflow app ID, which we’re setting using our environment variable--commit
designates the commit SHA to use for the build, using the built-in$GITHUB_SHA
environment variable for the push that triggered the workflow--signing-cert
designates the signing certificate uploaded in Appflow to use for the build, also set using our environment variable--aab-name
designates to download the generated.aab
binary and gives it the specified name--json
sets the command output as json format--token
passes through your Appflow personal access token, also set using our environment variable
You may have noticed there is no code checkout step. This is because Appflow is connected to your Git repo and checks out the code for you on our own runners. This makes your workflow even faster, using less GitHub Actions machine time.
The next part of the command uses the jq
utility (built in automatically on GitHub Linux runners) to grab the .buildId
property output by the Ionic Cloud CLI. The ANDROID_BUILD_ID=$()
syntax wrapped around the command then saves the build ID as a temporary variable.
The next line sets this value to the output for this step, using GitHub Action’s built-in $GITHUB_OUTPUT
variable.
Finally, the last step uses the upload-artifact
GitHub Action to save the .aab
binary in GitHub Actions. This is optional – the binary is also available to download for your entire team from the build log in Appflow.
Ionic Cloud CLI Docs
In the native build command, we’re passing multiple flags and also using the output from the command. There are many options provided by the Ionic Cloud CLI, and a new documentation architecture makes it easier to identify which flags and output values to use in your own workflow.
Included in the docs update are collapsible output tables of all the values you can leverage for your workflow. Depending on the command, this could include the build ID, build status, or even details such as what environment variables were used.
There are also more examples to illustrate expected output in both text and JSON formats so you can design a workflow that makes sense for your team.
Other enhancements include breadcrumbs to easily navigate pages in the docs, as well as a new search function to find what you’re looking for fast.
Deploy to Google Play Store
Because we were able to easily identify and save the output Android build ID, we can now pass that directly into our deploy command. Add the following step to your workflow file:
- name: Deploy to Play Store
run: ionic-cloud deploy android --app-id=$APP_ID --build-id=${{ steps.android_build.outputs.ANDROID_BUILD_ID }} --destination="$DESTINATION" --token=$IONIC_TOKEN
In this step, we’re using the ionic-cloud deploy android
command, passing in the build-id
using the output from the previous step with the ID of android_build
. We’re also using the $DESTINATION
and $IONIC_TOKEN
environment variables to authenticate our Appflow account and designate the correct Google Play Store Destination.
We now have a completed workflow file that will run on any push to the main branch!
After the successful run, the .aab
file is accessible in GitHub Actions or the Appflow dashboard. The Dashboard also shows the build log for visibility and debugging.
And, we can see that the newest version of our app has been automatically uploaded to the Google Play Store and is ready to release to our internal testers!
You can view the completed workflow file on GitHub here.
Next steps
Thanks to the Ionic Cloud CLI, we have a completely automated workflow for our native builds and deploys.
Note: The example repo also auto-increments the Android build ID using the build number for Appflow using Trapeze. Check out an example here.
This is just one example of how the Ionic Cloud CLI and Appflow can help you integrate mobile deployments into your existing CI/CD infrastructure. To learn more about the Ionic Cloud CLI and request access, contact our team today.