fastlane send existing build to tesflight external users - testflight

We have a lane that submits to the appstore, which handles uploading to the appstore. I'd like to take those already uploaded builds and submit them for external review.
From what I can tell, both the appstore and tesflight actions are expecting an actual ipa to be available to upload. What I'd like to do is to run a lane that will take an already processed build and submit it for external testing with tesflight.
Essentially, I'd like to periodically run a lane that checks if the latest build has been submitted for external testing, and if it hasn't I want to submit it.

There’s no action that does this automatically. However if you look at the relevant source code for pilot you can see that it uses Spaceship to connect to App Store Connect and wait for a build that matches the one just upload. Once it finds it, it submits it for external review if that option is on.
You can use similar code to achieve this, either in your Fastfile or in a new fastlane plug-in.

Related

How to upload directly to the app / play store using fastlane's action 'appcenter_upload'

I have been trying to use appcenter_upload() in my fastfile to upload our builds to the appcenter and the play / app store. It successfully uploads to the appcenter but it doesn't successfully upload to the stores. It tells me 'Not found, invalid distribution store name, store 'App Store' was not found'.
The arguments I am using look like this:
appcenter_upload(
file: options[:BUILD_OUTPUT],
destinations: "App store",
destination_type: "store",
upload_build_only: true)
It doesn't recognize 'App store' as a name for a store. I have looked through the documentation and this one (link below) shows the 'destinations' as Alpha. I did try alpha but it tells me 'Not found, invalid distribution store name, store 'Alpha' was not found'. Example can be found above and at the link below
(Link: enter image description here)
In the 'fastlane-lugin-appcenter's readme, it says that 'Comma separated list of destination names, use '*' for all distribution groups if destination type is 'group'. Both distribution groups and stores are supported. All names are required to be of the same destination type (default: Collaborators)'
What I am trying to accomplish: upload our builds to the app center (already done, have multiple builds in there) AND have it be uploaded to both the Google Play Console and the App Store Connect.
The main question I have is: What are the values that can be used for 'destinations' when we are trying to upload to a store and not a group of testers within AppCenter? Can anyone help me with this I would REALLY appreciate it, thank you so much in advance!
Fastlane action documentation (repo): https://github.com/microsoft/fastlane-plugin-appcenter/tree/f46cb07ae3fad3cadd57e349c662f80cd769121f
I tried using the arguments suggested here: https://github.com/microsoft/fastlane-plugin-appcenter/blob/f46cb07ae3fad3cadd57e349c662f80cd769121f/lib/fastlane/plugin/appcenter/actions/appcenter_upload_action.rb#L709-L716
It successfully uploads to the app center, but it doesn't recognize the store name so it doesn't upload to the store. We already connected our team's store accounts from within the AppCenter. It is being uploaded through Jenkins so I am not directly uploading it so I don't think that I would need to login with my credentials to send the build.
I expected to have the build upload to the app center (already done) AND have the build upload to the stores as well. The documentation states that I need to simply state the 'destination_type: store' and the 'destinations' as the store's name.
What actually happened was that it uploads only to the app center and it doesn't recognize the store's name so it doesn't upload to the stores. We are trying to automate the process but we are blocked on this step specifically and there isn't too much documentation related to it. (specifically uploading to the stores AS WELL as uploading to the app center.) The readme states that it is possible but I can't get it to work. Any help would be VERY appreciated!!

How to add a custom link in a multibranch Jenkins Pipeline

We are archiving a lot of html reports in a Jenkins pipeline (scripted Pipeline). These are accessible through a link "Last Successful Artifacts" on the job page as usual. But we would like to create an additional custom link that that points to one of these reports (that is being generated whether the build is successful or not).
I found the DocLink plugin, but it's not listed on the pipeline compatibility list and I'm not able to figure out how this eventually could be used in a pipeline.
The HTML Publisher Plugin is another one I was looking at. But it’s not suited for our use case, since it requires us to gather all reports and publish them again. It also puts all the content in an iframe, but all we need is link to one of the already archived html reports.
Here is a example to add summary links to a build
manager.createSummary("document.png").appendText("<a href='"+ pom.url + "'>View Maven Site</a>", false)
As that method accepts HTML and can be used for XSS you need to approve them.
https://jenkins.io/doc/book/managing/script-approval/
for more examples look here: https://wiki.jenkins.io/display/JENKINS/Groovy+Postbuild+Plugin
For pipeline the Badge plugin was extracted from the Groovy Postbuild plugin and if can create the summary using something like:
createSummary icon:'package.png', text: "<a href='$pom.url'>View Maven Site</a>"

Angular 2 events get postponed strangely when I include some other non-angular script

I have encountered a strange problem when using angular 2 beta RC.
Events get postponed if I include an external script I wrote into any angular 2 project:
<script>
(function(r,a,k,e,y,o,u){r['RakrWidgetObject']=y;r[y]=r[y]||function(){
(r[y].q=r[y].q||[]).push(arguments)},r[y].l=1*new Date();o=a.createElement(k),
u=a.getElementsByTagName(k)[0];o.async=1;o.src=e;u.parentNode.insertBefore(o,u)
})(window,document,'script','//cht.technology/rakr.js','rakr');
rakr('//localhost:3000', 'RAKR-000001');
</script>
Take github project thelgevold/angular-2-samples for example, once I add the below script as I did in https://github.com/tan9/angular-2-samples/tree/event-postponed branch.
The angular 2 application starts to behave strangely, some event changes won't be taking into account by angular until I trigger another event manually, I have to click a button twice to get correct rendering as this recording I uploaded to imgur
I don't know what's happening to the external script I wrote, it's a simple project that only depends on html2canvas and es6-promise, which can capture screenshot using html2canvas and send it to another web service. The bundle was built by webpack, and I tried to build the bundle by using browersify, with no luck.
This is a caveat with how Zone.js works. Zone.js patches async browser events and provides an API in which Angular uses to determine when changes happen and when to run change detection in order to update the UI.
In the case of your third-party library that uses the browser Promise API, it needs to be loaded before Zone.js is loaded via script tag. This is so that async events are patched so it will be run in the "zone" that Angular runs in. Events running outside the zone won't be picked up unless change detection is run manually, or the event is run in the context of the Angular zone.
As explained by brandon, make the code run inside Angulars zone
inject NgZone
constructor(private ngZone:NgZone){}
...
this.zone.run(() => ... /* code here that modifies Angulars model from the outside */);
You can also get the zone outside Angular
bootstrap(AppComponent, ...).then((ref => ref.instance.injector.get(NgZone));
(Not sure if this is 100% correct, I'm just on my phone and looking up is cumbersome. Please post a comment if you can't make it work.

Branch.io: detect first install from Unity

Trying to detect the first install event from branch.io link (succesfully implement link creating and sharing). I am using Unity branch sdk. The feature i try to create:
user_1 creates and share link to user_2.
When user_2 opens the link and install app i need to reward both of them (with inner in-game coins)
So i succesfully implement the 1. but I cant understand how to detect is user_2 installs the app or simply open it. All data that comes from branch.io UniversalObject callback doesn't contain information that i need.
Which the correct way to detect the install from code?
Alex from Branch here.
The callback parameter you need is +is_first_session. This is one of the parameters returned when the Branch session is initiated each time your app opens (you can find all all these parameters here). If this returns true, then that device has just installed the app (instead of opening it).
However, note that when these parameters are returned, it's impossible to immediately determine if the user is new (what you want), the device is new (not what you want, since the reward could be given twice if the user has installed on multiple devices), or neither (the user deleted the app and reinstalled on the same device). You would probably want to hold off on actually awarding the referral points until after the user has logged in with some sort of unique ID.
Branch also has a built-in feature for tracking referral points that might be useful. That lets you configure all the rules using the dashboard UI instead of needing to do it programmatically inside your app.

Automatically email the recent changes for a particular build in Hudson

Is there any way to send an email in Hudson which has the list of recent changes in that build?
For example
Trigger a build and if you go recent changes there we have some recent changes. Once it is success, the email should have the list of the changes that happened in that particular build. After this, say the next build fails (build fail email will be triggered), but it records the changes and these change lists also should be included in next successful build.
You'll first need to install the Email-ext plugin for Hudson.
Inside the project configuration, under Post-build Actions click the Email Notification and Editable Email Notification checkboxes. Instead of having the Content be $PROJECT_DEFAULT_CONTENT you'll want to use a different token. Those are described when you click the help icon (?) for Content Token Reference.
Specifically to your example, add (or edit if it exists) the trigger for Success. Change the Content of the success email to use the token ${CHANGES_SINCE_LAST_SUCCESS, reverse, format, showPaths, changesFormat, pathFormat}. The different options are explained in the reference. If you just want the defaults, simply use ${CHANGES_SINCE_LAST_SUCCESS}

Resources