{"id":5232,"date":"2023-05-08T13:42:43","date_gmt":"2023-05-08T17:42:43","guid":{"rendered":"https:\/\/ionic.io\/blog\/?p=5232"},"modified":"2023-05-08T13:42:45","modified_gmt":"2023-05-08T17:42:45","slug":"automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli","status":"publish","type":"post","link":"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli","title":{"rendered":"Automatically deploy to Google Play Store with GitHub Actions and the Ionic Cloud CLI"},"content":{"rendered":"\n<p>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.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>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.<\/p>\n\n\n\n<p>Fortunately, <a href=\"https:\/\/ionic.io\/blog\/appflow\">Appflow<\/a> is here to make it easier with the <a href=\"https:\/\/ionic.io\/docs\/appflow\/cli\/overview\">Ionic Cloud CLI<\/a>. 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 \u2013 but still want to leverage Appflow for cloud native builds and app store deployments \u2013 the Ionic Cloud CLI is the perfect solution.<\/p>\n\n\n\n<p>In this post, we\u2019ll walk through how to set up a <a href=\"https:\/\/docs.github.com\/en\/actions\">GitHub Actions<\/a> 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 <a href=\"https:\/\/github.com\/ceceliacreates\/ionic-cloud-cli-demo\">at this repo<\/a>.<\/p>\n\n\n\n<p>Let\u2019s get started!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ionic Cloud CLI setup<\/h2>\n\n\n\n<p>The first step is setting up your Ionic Cloud CLI <a href=\"https:\/\/ionic.io\/docs\/appflow\/personal-access-tokens\">personal access token<\/a>. You can generate a personal access token from Personal Settings &gt; Personal Access Tokens in the Appflow dashboard.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"318\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-1024x318.png\" alt=\"\" class=\"wp-image-5233 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-1024x318.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-300x93.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-768x239.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-1536x477.png 1536w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image.png 2048w\" data-sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/318;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"318\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-1024x318.png\" alt=\"\" class=\"wp-image-5233\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-1024x318.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-300x93.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-768x239.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-1536x477.png 1536w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/noscript><\/figure>\n\n\n\n<p><strong>Note:<\/strong> A <a href=\"https:\/\/ionic.io\/appflow\/pricing\">Scale or Enterprise plan<\/a> is required to use the Ionic Cloud CLI. If you don\u2019t currently have access, <a href=\"https:\/\/ionic.io\/contact\/sales\">contact us<\/a> to get started.<\/p>\n\n\n\n<p>Once the token is generated, save it as a GitHub secret under Settings &gt; Secrets and Variables &gt; Actions for your project repository. In our example, we\u2019ll save it as <code>IONIC_TOKEN<\/code> to reference in our GitHub Actions workflow.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"859\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-1-1024x859.png\" alt=\"\" class=\"wp-image-5234 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-1-1024x859.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-1-300x252.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-1-768x645.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-1-1536x1289.png 1536w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-1.png 1592w\" data-sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/859;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"859\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-1-1024x859.png\" alt=\"\" class=\"wp-image-5234\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-1-1024x859.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-1-300x252.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-1-768x645.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-1-1536x1289.png 1536w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-1.png 1592w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/noscript><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">GitHub Actions Workflow setup<\/h2>\n\n\n\n<p>Create a <a href=\"https:\/\/docs.github.com\/en\/actions\/using-workflows\/workflow-syntax-for-github-actions\">workflow file<\/a> named <code>deploy.yml<\/code> under .<code>github\/workflows<\/code> in your project. You can also create a new workflow file right in GitHub under Actions &gt; New Workflow if you prefer to work in GitHub\u2019s file editor.<br>Add the following to the workflow file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>name: Android Deploy to Play Store\n\non:\n  push:\n    branches:\n      - &#039;main&#039;\n\njobs:\n  Android-Deploy:\n    runs-on: ubuntu-latest\n    \n    env:\n      IONIC_TOKEN: ${{ secrets.IONIC_TOKEN }}\n      APP_ID: &#039;161d2d34&#039;\n      SIGNING_CERT: &#039;production&#039;\n      DESTINATION: &#039;Google Play Internal&#039;\n<\/code><\/pre>\n\n\n\n<p>Here we\u2019re doing the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Giving the workflow file a name of \u201cAndroid Deploy to Play Store\u201d.&nbsp;<\/li>\n\n\n\n<li>Setting the workflow to trigger on new pushes to the <code>main<\/code> branch<\/li>\n\n\n\n<li>Creating a <code>Android-Deploy<\/code> job that uses a <code>ubuntu-latest<\/code> machine<\/li>\n<\/ul>\n\n\n\n<p><strong>Note:<\/strong> Using the Ionic Cloud CLI for native builds uses the Appflow runner for the build process \u2013 not your GitHub Actions runner. This means you can use Appflow for iOS builds without needing to provision a Mac machine yourself!&nbsp;<\/p>\n\n\n\n<p>We\u2019re also setting a few <a href=\"https:\/\/docs.github.com\/en\/actions\/learn-github-actions\/variables\">environment variables<\/a> that we\u2019ll use for our native build and deploy to Google Play store.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The <code>IONIC_TOKEN<\/code>, which uses the GitHub Secret we set up with the personal access token<\/li>\n\n\n\n<li>The <code>APP_ID<\/code>, which refers to the Appflow App ID<\/li>\n\n\n\n<li>The <code>SIGNING_CERT<\/code>, which refers to the name of the signing certificate uploaded to Appflow to use for the build<\/li>\n\n\n\n<li>The <code>DESTINATION<\/code>, which refers to the destination name you\u2019ve set up in Appflow<\/li>\n<\/ul>\n\n\n\n<p>Signing certificates and destination names are case sensitive and you\u2019ll need to use quotes if you have spaces. You can find the App ID, signing certificate, and destination names in the Appflow Dashboard.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"375\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/appflow-cert-name-app-id-1024x375.png\" alt=\"\" class=\"wp-image-5237 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/appflow-cert-name-app-id-1024x375.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/appflow-cert-name-app-id-300x110.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/appflow-cert-name-app-id-768x281.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/appflow-cert-name-app-id-1536x563.png 1536w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/appflow-cert-name-app-id.png 1900w\" data-sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/375;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"375\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/appflow-cert-name-app-id-1024x375.png\" alt=\"\" class=\"wp-image-5237\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/appflow-cert-name-app-id-1024x375.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/appflow-cert-name-app-id-300x110.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/appflow-cert-name-app-id-768x281.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/appflow-cert-name-app-id-1536x563.png 1536w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/appflow-cert-name-app-id.png 1900w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/noscript><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"437\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-2-1024x437.png\" alt=\"\" class=\"wp-image-5236 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-2-1024x437.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-2-300x128.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-2-768x327.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-2-1536x655.png 1536w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-2.png 1656w\" data-sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/437;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"437\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-2-1024x437.png\" alt=\"\" class=\"wp-image-5236\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-2-1024x437.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-2-300x128.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-2-768x327.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-2-1536x655.png 1536w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-2.png 1656w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/noscript><\/figure>\n\n\n\n<p>Check out the documentation on setting up <a href=\"https:\/\/ionic.io\/docs\/appflow\/package\/adding-credentials\">signing certificates<\/a> and <a href=\"https:\/\/ionic.io\/docs\/appflow\/destinations\/google\">destinations<\/a> in Appflow if you haven\u2019t already set them up.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Native Builds<\/h2>\n\n\n\n<p>Now let\u2019s set up our Ionic Cloud CLI to handle our native Android build. Add the following steps to your workflow file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>steps:\n    - name: Install Ionic Cloud CLI\n      run: curl -sL https:\/\/ionic.io\/blog\/get-ionic-cloud-cli | bash   \n   \n    - name: Build AAB and Save Android Build ID\n      id: android_build\n      run: |\n        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 &quot;.buildId&quot;)\n        echo &quot;ANDROID_BUILD_ID=$ANDROID_BUILD_ID&quot; &gt;&gt; $GITHUB_OUTPUT\n  \n    - name: Upload AAB\n      uses: actions\/upload-artifact@v3\n      with:\n        name: Signed AAB\n        path: .\/app.aab<\/code><\/pre>\n\n\n\n<p>The first step is installing the Ionic Cloud CLI. This should take less than a second and have no impact on your build time.&nbsp;<\/p>\n\n\n\n<p>In the next step, we\u2019re using the <a href=\"https:\/\/ionic.io\/docs\/appflow\/cli\/reference\/ionic-cloud_build_android\"><code>ionic-cloud build android<\/code><\/a> command to generate a native binary. This step has an id set to <code>android_build<\/code>. This is so we can use the output from this step later in our workflow. We\u2019re passing the following flags to this command:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>release<\/code> designates the build type<\/li>\n\n\n\n<li><code>--app-id<\/code> designates the Appflow app ID, which we\u2019re setting using our environment variable<\/li>\n\n\n\n<li><code>--commit<\/code> designates the commit SHA to use for the build, using the built-in <code>$GITHUB_SHA<\/code> environment variable for the push that triggered the workflow<\/li>\n\n\n\n<li><code>--signing-cert<\/code> designates the signing certificate uploaded in Appflow to use for the build, also set using our environment variable<\/li>\n\n\n\n<li><code>--aab-name<\/code> designates to download the generated <code>.aab<\/code> binary and gives it the specified name<\/li>\n\n\n\n<li><code>--json<\/code> sets the command output as json format<\/li>\n\n\n\n<li><code>--token<\/code> passes through your Appflow personal access token, also set using our environment variable<\/li>\n<\/ul>\n\n\n\n<p>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.<\/p>\n\n\n\n<p>The next part of the command uses the <code>jq<\/code> utility (built in automatically on GitHub Linux runners) to grab the <code>.buildId<\/code> property output by the Ionic Cloud CLI. The <code>ANDROID_BUILD_ID=$()<\/code> syntax wrapped around the command then saves the build ID as a temporary variable.<\/p>\n\n\n\n<p>The next line sets this value to the output for this step, <a href=\"https:\/\/docs.github.com\/en\/actions\/using-jobs\/defining-outputs-for-jobs\">using GitHub Action\u2019s built-in <code>$GITHUB_OUTPUT<\/code> variable<\/a>.<\/p>\n\n\n\n<p>Finally, the last step uses the <a href=\"https:\/\/github.com\/actions\/upload-artifact\"><code>upload-artifact<\/code><\/a> GitHub Action to save the <code>.aab<\/code> binary in GitHub Actions. This is optional \u2013 the binary is also available to download for your entire team from the build log in Appflow.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ionic Cloud CLI Docs<\/h2>\n\n\n\n<p>In the native build command, we\u2019re 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.<\/p>\n\n\n\n<p>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.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"567\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/Screenshot-2023-05-05-at-12.35.18-PM-1024x567.png\" alt=\"\" class=\"wp-image-5245 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/Screenshot-2023-05-05-at-12.35.18-PM-1024x567.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/Screenshot-2023-05-05-at-12.35.18-PM-300x166.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/Screenshot-2023-05-05-at-12.35.18-PM-768x425.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/Screenshot-2023-05-05-at-12.35.18-PM.png 1306w\" data-sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/567;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"567\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/Screenshot-2023-05-05-at-12.35.18-PM-1024x567.png\" alt=\"\" class=\"wp-image-5245\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/Screenshot-2023-05-05-at-12.35.18-PM-1024x567.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/Screenshot-2023-05-05-at-12.35.18-PM-300x166.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/Screenshot-2023-05-05-at-12.35.18-PM-768x425.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/Screenshot-2023-05-05-at-12.35.18-PM.png 1306w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/noscript><\/figure>\n\n\n\n<p>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.<\/p>\n\n\n\n<figure class=\"wp-block-jetpack-image-compare\"><div class=\"juxtapose\" data-mode=\"horizontal\"><img loading=\"lazy\" decoding=\"async\" id=\"5243\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/Screenshot-2023-05-05-at-12.35.50-PM.png\" alt=\"\" width=\"1306\" height=\"447\" class=\"image-compare__image-before\"\/><img loading=\"lazy\" decoding=\"async\" id=\"5244\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/Screenshot-2023-05-05-at-12.36.22-PM.png\" alt=\"\" width=\"1306\" height=\"447\" class=\"image-compare__image-after\"\/><\/div><figcaption>Example command output in JSON and Text formats (drag slider to compare)<\/figcaption><\/figure>\n\n\n\n<p>Other enhancements include breadcrumbs to easily navigate pages in the docs, as well as a new search function to find what you\u2019re looking for fast.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deploy to Google Play Store<\/h2>\n\n\n\n<p>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:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>- name: Deploy to Play Store\n      run: ionic-cloud deploy android --app-id=$APP_ID --build-id=${{ steps.android_build.outputs.ANDROID_BUILD_ID }} --destination=&quot;$DESTINATION&quot; --token=$IONIC_TOKEN<\/code><\/pre>\n\n\n\n<p>In this step, we\u2019re using the <a href=\"https:\/\/ionic.io\/docs\/appflow\/cli\/reference\/ionic-cloud_deploy_android\"><code>ionic-cloud deploy android<\/code><\/a> command, passing in the <code>build-id<\/code> using the output from the previous step with the ID of <code>android_build<\/code>. We\u2019re also using the <code>$DESTINATION<\/code> and <code>$IONIC_TOKEN<\/code> environment variables to authenticate our Appflow account and designate the correct Google Play Store Destination.<\/p>\n\n\n\n<p>We now have a completed workflow file that will run on any push to the main branch!<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"471\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-3-1024x471.png\" alt=\"\" class=\"wp-image-5238 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-3-1024x471.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-3-300x138.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-3-768x353.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-3-1536x707.png 1536w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-3.png 2048w\" data-sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/471;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"471\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-3-1024x471.png\" alt=\"\" class=\"wp-image-5238\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-3-1024x471.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-3-300x138.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-3-768x353.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-3-1536x707.png 1536w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-3.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/noscript><\/figure>\n\n\n\n<p>After the successful run, the <code>.aab<\/code> file is accessible in GitHub Actions or the Appflow dashboard. The Dashboard also shows the build log for visibility and debugging.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"700\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-5-1024x700.png\" alt=\"\" class=\"wp-image-5240 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-5-1024x700.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-5-300x205.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-5-768x525.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-5-1536x1050.png 1536w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-5.png 2048w\" data-sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/700;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"700\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-5-1024x700.png\" alt=\"\" class=\"wp-image-5240\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-5-1024x700.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-5-300x205.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-5-768x525.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-5-1536x1050.png 1536w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-5.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/noscript><\/figure>\n\n\n\n<p>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!<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"524\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-4-1024x524.png\" alt=\"\" class=\"wp-image-5239 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-4-1024x524.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-4-300x153.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-4-768x393.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-4-1536x785.png 1536w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-4.png 2048w\" data-sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/524;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"524\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-4-1024x524.png\" alt=\"\" class=\"wp-image-5239\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-4-1024x524.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-4-300x153.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-4-768x393.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-4-1536x785.png 1536w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/image-4.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/noscript><\/figure>\n\n\n\n<p>You can view the completed workflow file <a href=\"https:\/\/github.com\/ceceliacreates\/ionic-cloud-cli-demo\/blob\/main\/.github\/workflows\/android-deploy.yml\">on GitHub here<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Next steps<\/h2>\n\n\n\n<p>Thanks to the Ionic Cloud CLI, we have a completely automated workflow for our native builds and deploys.&nbsp;<\/p>\n\n\n\n<p><strong>Note: <\/strong>The example repo also auto-increments the Android build ID using the build number for Appflow using Trapeze. Check out <a href=\"https:\/\/ionic.io\/docs\/appflow\/cookbook\/auto-incrementing-build-numbers\">an example here<\/a>.<\/p>\n\n\n\n<p>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, <a href=\"https:\/\/ionic.io\/contact\/sales\">contact our team today<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>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.<\/p>\n","protected":false},"author":98,"featured_media":5241,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"publish_to_discourse":"1","publish_post_category":"20","wpdc_auto_publish_overridden":"","wpdc_topic_tags":"","wpdc_pin_topic":"","wpdc_pin_until":"","discourse_post_id":"563190","discourse_permalink":"http:\/\/forum.ionicframework.com\/t\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli\/233319","wpdc_publishing_response":"success","wpdc_publishing_error":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1,122],"tags":[128,270,271,25],"class_list":["post-5232","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-all","category-product","tag-appflow","tag-github-actions","tag-ionic-cloud-cli","tag-tutorials"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.0 (Yoast SEO v23.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Automatically deploy to Google Play Store with GitHub Actions and the Ionic Cloud CLI - Ionic Blog<\/title>\n<meta name=\"description\" content=\"Deploy your Android apps to Google Play Store automatically using GitHub Actions and Appflow&#039;s Ionic Cloud CLI\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Automatically deploy to Google Play Store with GitHub Actions and the Ionic Cloud CLI\" \/>\n<meta property=\"og:description\" content=\"Deploy your Android apps to Google Play Store automatically using GitHub Actions and Appflow&#039;s Ionic Cloud CLI\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli\" \/>\n<meta property=\"og:site_name\" content=\"Ionic Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-05-08T17:42:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-05-08T17:42:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/googleplay-feature-image-1024x512.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Cecelia Martinez\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ceceliacreates\" \/>\n<meta name=\"twitter:site\" content=\"@ionicframework\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Cecelia Martinez\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli#article\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli\"},\"author\":{\"name\":\"Cecelia Martinez\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/5e1062699fd542f5a6fe4c72879c1637\"},\"headline\":\"Automatically deploy to Google Play Store with GitHub Actions and the Ionic Cloud CLI\",\"datePublished\":\"2023-05-08T17:42:43+00:00\",\"dateModified\":\"2023-05-08T17:42:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli\"},\"wordCount\":1291,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/googleplay-feature-image.png\",\"keywords\":[\"Appflow\",\"GitHub Actions\",\"Ionic Cloud CLI\",\"Tutorials\"],\"articleSection\":[\"All\",\"Product\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli\",\"url\":\"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli\",\"name\":\"Automatically deploy to Google Play Store with GitHub Actions and the Ionic Cloud CLI - Ionic Blog\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/googleplay-feature-image.png\",\"datePublished\":\"2023-05-08T17:42:43+00:00\",\"dateModified\":\"2023-05-08T17:42:45+00:00\",\"description\":\"Deploy your Android apps to Google Play Store automatically using GitHub Actions and Appflow's Ionic Cloud CLI\",\"breadcrumb\":{\"@id\":\"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli#primaryimage\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/googleplay-feature-image.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/googleplay-feature-image.png\",\"width\":2240,\"height\":1120},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ionic.io\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Automatically deploy to Google Play Store with GitHub Actions and the Ionic Cloud CLI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ionic.io\/blog\/#website\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"name\":\"ionic.io\/blog\",\"description\":\"Build amazing native and progressive web apps with the web\",\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ionic.io\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/ionic.io\/blog\/#organization\",\"name\":\"Ionic\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"width\":1920,\"height\":854,\"caption\":\"Ionic\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/ionicframework\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/5e1062699fd542f5a6fe4c72879c1637\",\"name\":\"Cecelia Martinez\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/09\/IMG_4815-150x150.jpeg\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/09\/IMG_4815-150x150.jpeg\",\"caption\":\"Cecelia Martinez\"},\"description\":\"Developer Advocate\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/ceceliamartinez\/\",\"https:\/\/x.com\/ceceliacreates\"],\"jobTitle\":\"Developer Advocate\",\"url\":\"https:\/\/ionic.io\/blog\/author\/cecelia\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Automatically deploy to Google Play Store with GitHub Actions and the Ionic Cloud CLI - Ionic Blog","description":"Deploy your Android apps to Google Play Store automatically using GitHub Actions and Appflow's Ionic Cloud CLI","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli","og_locale":"en_US","og_type":"article","og_title":"Automatically deploy to Google Play Store with GitHub Actions and the Ionic Cloud CLI","og_description":"Deploy your Android apps to Google Play Store automatically using GitHub Actions and Appflow's Ionic Cloud CLI","og_url":"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli","og_site_name":"Ionic Blog","article_published_time":"2023-05-08T17:42:43+00:00","article_modified_time":"2023-05-08T17:42:45+00:00","og_image":[{"width":1024,"height":512,"url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/googleplay-feature-image-1024x512.png","type":"image\/png"}],"author":"Cecelia Martinez","twitter_card":"summary_large_image","twitter_creator":"@ceceliacreates","twitter_site":"@ionicframework","twitter_misc":{"Written by":"Cecelia Martinez","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli#article","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli"},"author":{"name":"Cecelia Martinez","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/5e1062699fd542f5a6fe4c72879c1637"},"headline":"Automatically deploy to Google Play Store with GitHub Actions and the Ionic Cloud CLI","datePublished":"2023-05-08T17:42:43+00:00","dateModified":"2023-05-08T17:42:45+00:00","mainEntityOfPage":{"@id":"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli"},"wordCount":1291,"commentCount":0,"publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"image":{"@id":"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/googleplay-feature-image.png","keywords":["Appflow","GitHub Actions","Ionic Cloud CLI","Tutorials"],"articleSection":["All","Product"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli","url":"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli","name":"Automatically deploy to Google Play Store with GitHub Actions and the Ionic Cloud CLI - Ionic Blog","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli#primaryimage"},"image":{"@id":"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/googleplay-feature-image.png","datePublished":"2023-05-08T17:42:43+00:00","dateModified":"2023-05-08T17:42:45+00:00","description":"Deploy your Android apps to Google Play Store automatically using GitHub Actions and Appflow's Ionic Cloud CLI","breadcrumb":{"@id":"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli#primaryimage","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/googleplay-feature-image.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/googleplay-feature-image.png","width":2240,"height":1120},{"@type":"BreadcrumbList","@id":"https:\/\/ionic.io\/blog\/automatically-deploy-to-google-play-store-with-github-actions-and-the-ionic-cloud-cli#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ionic.io\/blog"},{"@type":"ListItem","position":2,"name":"Automatically deploy to Google Play Store with GitHub Actions and the Ionic Cloud CLI"}]},{"@type":"WebSite","@id":"https:\/\/ionic.io\/blog\/#website","url":"https:\/\/ionic.io\/blog\/","name":"ionic.io\/blog","description":"Build amazing native and progressive web apps with the web","publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ionic.io\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ionic.io\/blog\/#organization","name":"Ionic","url":"https:\/\/ionic.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","width":1920,"height":854,"caption":"Ionic"},"image":{"@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/ionicframework"]},{"@type":"Person","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/5e1062699fd542f5a6fe4c72879c1637","name":"Cecelia Martinez","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/09\/IMG_4815-150x150.jpeg","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/09\/IMG_4815-150x150.jpeg","caption":"Cecelia Martinez"},"description":"Developer Advocate","sameAs":["https:\/\/www.linkedin.com\/in\/ceceliamartinez\/","https:\/\/x.com\/ceceliacreates"],"jobTitle":"Developer Advocate","url":"https:\/\/ionic.io\/blog\/author\/cecelia"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/05\/googleplay-feature-image.png","_links":{"self":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/5232","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/users\/98"}],"replies":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/comments?post=5232"}],"version-history":[{"count":3,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/5232\/revisions"}],"predecessor-version":[{"id":5257,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/5232\/revisions\/5257"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media\/5241"}],"wp:attachment":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media?parent=5232"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/categories?post=5232"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/tags?post=5232"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}