Skip to content

Instantly share code, notes, and snippets.

@andrewiankidd
Last active September 5, 2018 20:00
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andrewiankidd/b7327917339b4fc402f1e484c66b7f42 to your computer and use it in GitHub Desktop.
Save andrewiankidd/b7327917339b4fc402f1e484c66b7f42 to your computer and use it in GitHub Desktop.
Helper userscript for VSTS (TFS Release Management)
// ==UserScript==
// @name VSTS Helper
// @namespace http://andrewiankidd.co.uk/
// @version 0.2
// @description Adds a button to set latest versions of all artifacts, adds a button to set all environments to manual deployment, autofills name in kanban board
// @author Andrew Kidd
// @match http://*/tfs/*
// @grant none
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @require https://cdnjs.cloudflare.com/ajax/libs/jQuery-linkify/2.1.6/linkify.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/jQuery-linkify/2.1.6/linkify-jquery.min.js
// ==/UserScript==
(function() {
'use strict';
logger('Loaded');
waitForKeyElements(".create-release-deployments-message", addButtons);
waitForKeyElements(".release-live-logs-view, .buildvnext-logs-console", linkifyLogs);
waitForKeyElements(".clickable-title", autoFilterKanban);
$('body').on('click', '#vsts_selectLatest', function(){
var parentg = $('.create-release-artifacts-grid-table');
var dropdowns = parentg.find('div.drop.bowtie-icon.bowtie-triangle-down');
logger('Setting latest versions');
dropdowns.each(function() {
$(this).trigger( "click" );
var values = $(this).next();
values.find('li').first().trigger( "click" );
});
});
$('body').on('click', '#vsts_selectManual', function(){
var parentg = $('.create-rel-automated-deployment-grid-table tbody');
var dropdowns = parentg.find('div.drop.bowtie-icon.bowtie-triangle-down');
logger('Setting Manual Deployments');
dropdowns.each(function() {
$(this).trigger( "click" );
var values = $(this).next();
values.find('li').last().trigger( "click" );
});
});
function autoFilterKanban()
{
logger('filtering Kanban board');
let myName = $('span.alignment-marker.text').text();
$('.agile-board-search-container input.text-filter-input').val(myName).trigger("keyup");
}
function addButtons()
{
if ($('#vsts_selectLatest').length)
{
logger('"Latest" button exists');
}
else{
logger('Injecting "Latest" button');
var verTable = $(".create-release-linked-artifacts-table-body");
verTable.prepend("<tr><td></td><td><input type='button' id='vsts_selectLatest' value='Set Latest Versions'></td></tr>");
}
if ($('#vsts_selectManual').length)
{
logger('"Manual" button exists');
}
else{
logger('Injecting "Manual" button');
var autoTable = $(".create-rel-automated-deployment-grid-table tbody");
autoTable.prepend("<tr><td></td><td><input type='button' id='vsts_selectManual' value='Set Manual Deployments' style='width:100%'></td></tr>");
}
}
function linkifyLogs()
{
logger('not implemented');
return;
$('.release-live-logs-view, .buildvnext-logs-console').bind('DOMSubtreeModified', function(e) {
if (e.target.innerHTML.length > 0) {
logger('log updated: ' + (e.target.textContent).substring(0,50));
$(e.target).linkify({
target: "_blank"
});
}
});
}
function logger(text){
console.log('[VSTS Helper] ' + text);
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment