mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-12-19 23:16:34 +00:00
96 lines
3.2 KiB
JavaScript
96 lines
3.2 KiB
JavaScript
|
/*global angular, Drone, console */
|
||
|
angular.module('app').controller("CommitController", function ($scope, $http, $route, $routeParams, stdout, feed) {
|
||
|
'use strict';
|
||
|
|
||
|
var remote = $routeParams.remote,
|
||
|
owner = $routeParams.owner,
|
||
|
name = $routeParams.name,
|
||
|
branch = $routeParams.branch,
|
||
|
commit = $routeParams.commit,
|
||
|
// Create lineFormatter and outputElement since we need them anyway.
|
||
|
lineFormatter = new Drone.LineFormatter(),
|
||
|
outputElement = angular.element(document.querySelector('#output'));
|
||
|
|
||
|
var connectRemoteConsole = function (id) {
|
||
|
// Clear console output if connecting to new remote console (rebuild)
|
||
|
if (!outputElement.html() !== 0) {
|
||
|
outputElement.empty();
|
||
|
}
|
||
|
// Subscribe to stdout of the remote build
|
||
|
stdout.subscribe(id, function (out) {
|
||
|
// Append new output to console
|
||
|
outputElement.append(lineFormatter.format(out));
|
||
|
// Scroll if following
|
||
|
if ($scope.following) {
|
||
|
window.scrollTo(0, document.body.scrollHeight);
|
||
|
}
|
||
|
});
|
||
|
};
|
||
|
|
||
|
// Subscribe to feed so we can update gui if changes to the commit happen. (Build finished, Rebuild triggered, change from Pending to Started)
|
||
|
feed.subscribe(function (item) {
|
||
|
// If event is part of the active commit currently showing.
|
||
|
if (item.commit.sha === commit &&
|
||
|
item.commit.branch === branch) {
|
||
|
// If new status is Started, connect to remote console to get live output
|
||
|
if (item.commit.status === "Started") {
|
||
|
connectRemoteConsole(item.commit.id);
|
||
|
}
|
||
|
$scope.commit = item.commit;
|
||
|
$scope.$apply();
|
||
|
|
||
|
} else {
|
||
|
// we trigger an toast notification so the
|
||
|
// user is aware another build started
|
||
|
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// Load the repo meta-data
|
||
|
$http({method: 'GET', url: '/api/repos/' + remote + '/' + owner + "/" + name}).
|
||
|
success(function (data, status, headers, config) {
|
||
|
$scope.repo = data;
|
||
|
}).
|
||
|
error(function (data, status, headers, config) {
|
||
|
console.log(data);
|
||
|
});
|
||
|
|
||
|
// Load the repo commit data
|
||
|
$http({method: 'GET', url: '/api/repos/' + remote + '/' + owner + "/" + name + "/branches/" + branch + "/commits/" + commit}).
|
||
|
success(function (data, status, headers, config) {
|
||
|
$scope.commit = data;
|
||
|
|
||
|
// If build has already finished, load console output from database
|
||
|
if (data.status !== 'Started' && data.status !== 'Pending') {
|
||
|
$http({method: 'GET', url: '/api/repos/' + remote + '/' + owner + "/" + name + "/branches/" + branch + "/commits/" + commit + "/console"}).
|
||
|
success(function (data, status, headers, config) {
|
||
|
outputElement.append(lineFormatter.format(data));
|
||
|
}).
|
||
|
error(function (data, status, headers, config) {
|
||
|
console.log(data);
|
||
|
});
|
||
|
return;
|
||
|
// If build is currently running, connect to remote console;
|
||
|
} else if (data.status === 'Started') {
|
||
|
connectRemoteConsole(data.id);
|
||
|
}
|
||
|
|
||
|
}).
|
||
|
error(function (data, status, headers, config) {
|
||
|
console.log(data);
|
||
|
});
|
||
|
|
||
|
$scope.following = false;
|
||
|
$scope.follow = function () {
|
||
|
$scope.following = true;
|
||
|
window.scrollTo(0, document.body.scrollHeight);
|
||
|
};
|
||
|
$scope.unfollow = function () {
|
||
|
$scope.following = false;
|
||
|
};
|
||
|
|
||
|
$scope.rebuildCommit = function () {
|
||
|
$http({method: 'POST', url: '/api/repos/' + remote + '/' + owner + '/' + name + '/branches/' + branch + '/commits/' + commit + '?action=rebuild' });
|
||
|
};
|
||
|
});
|