inherit heroku addon configuration for review apps - heroku

My team has recently started using review apps. However, before tests can be run on a review app, we need to manually change the configuration of an addon. This manual step breaks our test workflow. Is there any way to transfer addon configuration to a review app?

Heroku allows you to specify addons for review apps in your app.json like so:
{
…
"addons": [
{
"plan": "heroku-postgresql",
"as": "BACKUP_DATABASE",
"options": {
"version": "9.5"
}
}
]
}
Note that according to the docs, review apps are provisioned with the default "ephemeral" plan from the provider. Also, not all apps support review/CI apps.
If one of your addons does not support review apps, you should see an error message similar to <add-on service slug> has opted out of supporting Review and CI apps when the review app attempts to deploy.

Related

How to target app releases in closed tracks to organizations?

I published a private app in closed tracks to my own organization using Play Console, explained here.
Under Pricing & distribution -> User Programs -> Managed Google Play it says:
This app is privately targeted to 1 organization.
You can also target app releases in closed tracks to organizations. Manage closed tracks or Learn more
Under Release management -> App Releases -> Manage testers I added my organization.
Still, when setting my app to force install in my Android Management Api policy for my devices, my private app won't get installed and is also not visible to my dedicated devices using that policy.
Previously, I published a private app as a production release to my organization and everything works like a charm.
So what exactly do I have to do to target my organization in a closed track release?
I realised that you just have to add the "releaseTrackId", which can be found in the URL of the Play Console page that displays the app’s track information, to my application json object inside the policy. As it says here and here
List of the app’s track IDs that a device belonging to the enterprise can access. If the list contains multiple track IDs, devices receive the latest version among all accessible tracks. If the list contains no track IDs, devices only have access to the app’s production track. More details about each track are available in AppTrackInfo.
So basically in my applications array in the particular policy I just had to add the "releaseTrackId" of my closed track app in the "accessibleTrackIds" array.
"applications": [
{
"packageName": "some.package.com.closedtrackapp",
"installType": "FORCE_INSTALLED",
"accessibleTrackIds": [
"myreleaseTrackId"
]
}
],
Try this API Custom App API. Publish your private app to your organisation and wait around 10min till the app is approved before you can install to your enrolled device.
It seems that you also need to add the track Id of the closed track to your policy:
See this link for ApplicationPolicy
{
"packageName":"<package id>",
"installType":"PREINSTALLED",
"accessibleTrackIds":[
"<track id>"
]
}
The track id is found on the play console URL (releaseTrackId parameter)

Test GMail marketplace app flow

So here I am again, exploring new Google platform and hunting down information and docs.
I'm trying to build a skeleton of a flow before I write any business logic code with actual use of the APIs, and as expected from Google, this process is excruciatingly painful.
I've tried to follow this doc:
https://developers.google.com/gsuite/marketplace/listing
Packaged the zip, put the flag DOMAIN_INSTALLABLE flag as was instructed in order for the app to be installible from the marketplace. In the dashboard of PRICING & DISTRIBUTION I've selected Private and added testers to the list of testers.
Now when I click View in Chrome Web Store (seen in image) it takes me to the extensions web store, and not to the marketplace store.
How can I get to the GSuite Marketplace flow, rather than the extension flow? Do I need to alter my manifest.json in some way that is not mentioned in the docs?
Thanks
it's true that the publishing flow is too complicated now. We are working on improvements and in the future everything will be in one place.
Unfortunately G Suite Marketplace does not support trusted testers (yet), that's why it doesn't show up.
What you might be able to do, is modify the url a bit after you clicked on 'View in Chrome Web Store'.
Just remove everything after the webstore id
I use this url:
https://chrome.google.com/webstore/detail/xxxxxx
xxxx should be your webstore id
You should be able to show your unlisted app in the Gsuite Marketplace, where you can initiate the install flow.
It works for me, but my test app

GSuite marketplace app testing process

Have 2 queries related to publishing and testing app
1) Testing: If an app which is published on GSuite marketplace and live. And now we want to make further enhancements to our app.
To test this second version, we want to publish this app as unlisted so that our QA team can do testing.
My query is: Will the app which is in already in marketplace with "Version-1" will go "off" from marketplace as soon as I publish same app as "Unlisted" with "Version-2"
2) Unpublish an app: As a developer, if I unpublish live app from marketplace then will it have any impact on exisiting customers who have already installed the app?
Will the users still able to use the app or will it be uninstalled for them.
I can only derive from experience:
Yes. When you upload a version 2, it will unergo a review. While it's being reviewed, the version 1 will still be active. The moment v2 is approved, even with unlisted status, it will overwrite the v1. So, if you really want to keep the version 1, you can upload v2 as a separate item, unlisted or not.
Users who have downloaded the app before you removed it from the store will still be able to use it accordingly.

Cosu app development through Android Management Api or device owner locktask

i have to implement single use application for my Enterprise's devices where there is only one major android app that itself can use 2-3 other apps like call, sms and google maps, other than that user must not be able to use or access other apps and settings,
1) I have considered Corporate owned Single use through Enterprise Management Api which is more sophisticated and big, but more complete solution.
2) I have implemented and tested the sample
Lock task with an android device owner app
that looks more like being my solution, but there is a problem
How do i provision device owner for production level devices? for my test i was able to provision with adb shell commmand. i know that device must be new/Reset and unprovisioned thats not a problem.
I am seeking some suggestion here, if anybody has implemented it it could help.
Update
going with the android management Api QuickStartGuide, suggested by Fred seems like correct way.
where my policy is Multiple app from custom launcher
now i am stuck in a situation, i want to publish my launcher app or other app to play store only for my enterprise.
I have followed Upload your own app to the Google Play Store,which led me to publish private app, but i am not able to do so as i am not getting Restrict Distribution option.
I don't know how to perfectly achieve this.
for my current policy and enterprise, i have 2 active email ids,
first email_1 is the one which is connected to the initial project
and
all the google api call is done under email_1 .
and the other is email_2 the one is admin for the enterprise
and connected to managed Google Play Store.
both email_1 and email_2 has admin access to my company developer account
.
Now i need to figure out to publish app only for my enterprise, i think there is a issue with correct permission or otherwise,
need Help.
Thanks
It's easy, once you understand the missing links.
The documentation should definitely clarify these steps.
1 Setup the accounts
We created a Google Suite Account for our client and uploaded his app in the Google Play Console account created using a Google Account under their organization, and limited the app distribution to their organization.
We also added Android for Work to our organization here: https://admin.google.com/AdminHome?pli=1&fral=1#SelectServices
And added a role to our organization to manage Google Play Private Uploads:
https://admin.google.com/AdminHome#DomainSettings/notab=1&role=new-role&subtab=roles
2 Find the organization ID
This is the key part. You should find your organization ID here: https://play.google.com/work/adminsettings
3 Enroll the organization
When following the steps for the Android Management API, you need to enroll the organization ID found in your Google For Work account.
Follow the step detailed here using your enterpriseID:
enterprises/{enterpriseId}/enrollmentTokens/{enrollmentTokenId}
4 Add your app
Add your app using its PackageName in a ApplicationPolicy. Your devices will now be able to find it and install it.
You no longer need to implement a Device Policy Controller to manage Android devices, Google has recently released the Android Management API which allows you to set up a COSU device with just a few Cloud API calls.
If you have one main app and want to allow to open a few other apps, you can set the main app as a custom launcher and mark the other apps as lockTaskAllowed. You can simply do so by defining an ApplicationPolicy such as the one below (copied from Create a policy):
"applications": [
{
"packageName": "com.example.custom_launcher",
"installType": "FORCE_INSTALLED",
"lockTaskAllowed": true,
"defaultPermissionPolicy": "GRANT",
},
{
"packageName": "com.example.app1",
"installType": "FORCE_INSTALLED",
"lockTaskAllowed": true,
"defaultPermissionPolicy": "GRANT",
}
],
"persistentPreferredActivities": [
{
"receiverActivity": "com.example.custom_launcher",
"actions": [
"android.intent.action.MAIN"
],
"categories": [
"android.intent.category.HOME",
"android.intent.category.DEFAULT"
]
}
]
Google provides a good feature list here:
https://developers.google.com/android/work/requirements/features
If your devices have NFC, I would provision using NFC. You can look at the code here for your own implementation or you might be able to use the app with very few modifications.
https://github.com/googlesamples/android-NfcProvisioning
By tapping the welcome screen in the Google Setup Wizard 6 times will allow you to use QR code provisioning. It is a bit more cumbersome in my opinion and requires Android 7.0+.
Those are your only two options unless you become a Google EMM Partner or again, partner with them to support Zero Touch Enrollment on Android 8.0+ devices for your own homebaked solution.
You might want to also look at existing open source EMM/MDM implementations that already exist such as WSO2.

Automating Deployment in Bot Framework (Bot + LUIS+ QnA + Table Storage)

We have a bot deployed on Azure but we want to give it to a client so he can deploy it run it using his own resources. We need to give them a Powershell script that magically create and deploy all the resources needed for the bot to work. My bot architecture consists on the following parts:
Bot's Logic (ASP.NET Web API Project deployed over an Azure App Service)
LUIS Model (published over a Cognitive Services Account)
QnA Service Knowledge Base done with QnA Maker (published directly from the QnaMaker Portal (have no idea where it's deployed)
Azure Table Storage
My Questions are:
1) How to configure bots web api to connection strings parameters? (table storage, luis and qna service will be different when they re redeployed) Currently I am defining the conn. strings and api keys on the web.config, but as I said, this needs to be dynamic.
2) How to automate deployment for LUIS? Luis needs to have the Key of the Cognitive Services Account that should be created first. And I assume I have the exported model json file. I was thinking of using the LUIS API to do the app export and the publishing part. Would that be enough?
3) How to deploy qna services? I think currently is deployed somewhere magically so maybe I won't need to do anything with it.
Thanks!
Maybe a little bit late, but I just had to implement the very same thing, so here are the answers to your questions in hope they could be useful to others:
1) As JoyrexJ9 mentioned above, you can do this via an ARM template by setting the Application Settings of your App Service which will override the values in your Web.config. More about this here.
You can put together and set the connection string of a storage account in the ARM template like this:
{
"type": "Microsoft.Web/sites",
"kind": "app",
"name": "MyWebApp",
"apiVersion": "2015-08-01",
"location": "westeurope",
"properties": {
"name": "MyWebApp",
"serverFarmId": "[resourceId('Microsoft.Web/serverfarms', 'MyAppServicePlanName')]",
"siteConfig": {
"appSettings": [{
"name": "StorageConnectionString",
"value": "[concat('DefaultEndpointsProtocol=https;AccountName=','MyStorageAccountName',';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', 'MyStorageAccountName'), '2017-10-01').keys[0].value,';EndpointSuffix=core.windows.net')]"
}],
"cors": {
"allowedOrigins": [
"*"
]
}
}
},
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts/', 'MyStorageAccountName')]",
"[resourceId('Microsoft.Web/serverfarms', 'MyAppServicePlanName')]"
]
}
For LUIS and QnA maker you will need to get the values from the respective portals manually and either update the App Settings after the ARM deployment manually, or re-run the ARM deployment with the manually acquired values passed to it as parameters. The latter works because for the first time you can leave those values empty in your ARM template, and when you deploy it the second time with the parameter values in place, ARM will simply update those App Settings values. More on this topic here.
(Hint: if you provision the QnA Maker and LUIS apps programmatically through their API-s, then you'll only need to get the subscription key for LUIS manually, because you'll get the knowledge base's credentials from QnA Maker's API.)
2) Unfortunately you cannot automate the provisioning of a LUIS app completely at the moment. You can create the resource in Azure via an ARM template and you can do the bulk of the rest of the work through the LUIS API, but for example you cannot assign the subscription key created by the ARM template to a LUIS app programmatically, because that API method is deprecated.
3) The QnA Maker service and it's hosting model changed significantly since you've submitted your questions. I wrote a full blog post about how to do the provisioning of it in the new system.
As JoyrexJ9 mentioned above, it's very important to point out that you won't be able to automate the bot registration fully even with a script, because there's no API for registering an application at https://apps.dev.microsoft.com/. You'll have to do that manually as well. Everything else (besides the things I mentioned above) can be fully automated either via ARM templates or scripts.
Some of this you can automate with ARM templates, you can use functions like listKeys() to query the connection keys of one resource and use it as parameters for another resource.
If you use Azure App Services you can override settings in web.config with what are called App Settings, and these can be set inside an ARM template
Check out this ARM template which deploys a bot and dynamically links it to a newly deployed cognitive service
The bot and app-id registration I don't think you can currently automate, there's no API or CLI

Resources