gitlab-radiator 3.4.1 → 3.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/app.js CHANGED
@@ -1,55 +1,32 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
6
-
7
5
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
8
-
9
6
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
-
11
7
  var _auth = require("./auth");
12
-
13
8
  var _compression = _interopRequireDefault(require("compression"));
14
-
15
9
  var _config = require("./config");
16
-
17
10
  var _express = _interopRequireDefault(require("express"));
18
-
19
11
  var _runners = require("./gitlab/runners");
20
-
21
12
  var _http = _interopRequireDefault(require("http"));
22
-
23
13
  var _lessMiddleware = _interopRequireDefault(require("less-middleware"));
24
-
25
14
  var _os = _interopRequireDefault(require("os"));
26
-
27
15
  var _path = _interopRequireDefault(require("path"));
28
-
29
16
  var _socket = _interopRequireDefault(require("socket.io"));
30
-
31
17
  var _gitlab = require("./gitlab");
32
-
33
18
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
34
-
35
19
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
36
-
37
20
  var cacheDir = _path.default.join(_os.default.tmpdir(), 'gitlab-radiator-css-cache');
38
-
39
21
  var app = (0, _express.default)();
40
-
41
22
  var httpServer = _http.default.Server(app);
42
-
43
23
  var socketIoServer = (0, _socket.default)(httpServer);
44
-
45
24
  if (process.env.NODE_ENV !== 'production') {
46
25
  // eslint-disable-next-line global-require
47
26
  var _require = require('./dev-assets'),
48
- bindDevAssets = _require.bindDevAssets;
49
-
27
+ bindDevAssets = _require.bindDevAssets;
50
28
  bindDevAssets(app);
51
29
  }
52
-
53
30
  app.disable('x-powered-by');
54
31
  app.use((0, _lessMiddleware.default)("".concat(__dirname, "/../public"), {
55
32
  dest: cacheDir,
@@ -82,11 +59,9 @@ var globalState = {
82
59
  socketIoServer.on('connection', socket => {
83
60
  socket.emit('state', withDate(globalState));
84
61
  });
85
-
86
62
  function runUpdate() {
87
63
  return _runUpdate.apply(this, arguments);
88
64
  }
89
-
90
65
  function _runUpdate() {
91
66
  _runUpdate = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
92
67
  return _regenerator.default.wrap(function _callee$(_context) {
@@ -96,18 +71,15 @@ function _runUpdate() {
96
71
  _context.prev = 0;
97
72
  _context.next = 3;
98
73
  return (0, _gitlab.update)(_config.config);
99
-
100
74
  case 3:
101
75
  globalState.projects = _context.sent;
102
76
  _context.next = 6;
103
77
  return errorIfRunnerOffline();
104
-
105
78
  case 6:
106
79
  globalState.error = _context.sent;
107
80
  socketIoServer.emit('state', withDate(globalState));
108
81
  _context.next = 15;
109
82
  break;
110
-
111
83
  case 10:
112
84
  _context.prev = 10;
113
85
  _context.t0 = _context["catch"](0);
@@ -115,10 +87,8 @@ function _runUpdate() {
115
87
  console.error(_context.t0.message);
116
88
  globalState.error = "Failed to communicate with GitLab API: ".concat(_context.t0.message);
117
89
  socketIoServer.emit('state', withDate(globalState));
118
-
119
90
  case 15:
120
91
  setTimeout(runUpdate, _config.config.interval);
121
-
122
92
  case 16:
123
93
  case "end":
124
94
  return _context.stop();
@@ -128,22 +98,18 @@ function _runUpdate() {
128
98
  }));
129
99
  return _runUpdate.apply(this, arguments);
130
100
  }
131
-
132
101
  function errorIfRunnerOffline() {
133
102
  return _errorIfRunnerOffline.apply(this, arguments);
134
103
  }
135
-
136
104
  function _errorIfRunnerOffline() {
137
105
  _errorIfRunnerOffline = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
138
106
  var offlineRunnersPerGitlab, _offlineRunnersPerGit, offline, totalCount, names, counts;
139
-
140
107
  return _regenerator.default.wrap(function _callee2$(_context2) {
141
108
  while (1) {
142
109
  switch (_context2.prev = _context2.next) {
143
110
  case 0:
144
111
  _context2.next = 2;
145
112
  return Promise.all(_config.config.gitlabs.map(_runners.fetchOfflineRunners));
146
-
147
113
  case 2:
148
114
  offlineRunnersPerGitlab = _context2.sent;
149
115
  _offlineRunnersPerGit = offlineRunnersPerGitlab.reduce((acc, runner) => {
@@ -155,19 +121,15 @@ function _errorIfRunnerOffline() {
155
121
  offline: [],
156
122
  totalCount: 0
157
123
  }), offline = _offlineRunnersPerGit.offline, totalCount = _offlineRunnersPerGit.totalCount;
158
-
159
124
  if (!(offline.length > 0)) {
160
125
  _context2.next = 8;
161
126
  break;
162
127
  }
163
-
164
128
  names = offline.map(r => r.name).sort().join(', ');
165
129
  counts = offline.length === totalCount ? 'All' : "".concat(offline.length, "/").concat(totalCount);
166
130
  return _context2.abrupt("return", "".concat(counts, " runners offline: ").concat(names));
167
-
168
131
  case 8:
169
132
  return _context2.abrupt("return", null);
170
-
171
133
  case 9:
172
134
  case "end":
173
135
  return _context2.stop();
@@ -177,9 +139,7 @@ function _errorIfRunnerOffline() {
177
139
  }));
178
140
  return _errorIfRunnerOffline.apply(this, arguments);
179
141
  }
180
-
181
142
  runUpdate();
182
-
183
143
  function withDate(state) {
184
144
  return _objectSpread(_objectSpread({}, state), {}, {
185
145
  now: Date.now()
package/src/auth.js CHANGED
@@ -1,28 +1,24 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.basicAuth = basicAuth;
9
-
10
8
  var _basicAuth = _interopRequireDefault(require("basic-auth"));
11
-
12
9
  function basicAuth(auth) {
13
10
  if (!auth || !auth.username || !auth.password) {
14
11
  // eslint-disable-next-line no-console
15
12
  console.log('No authentication configured');
16
13
  return (req, res, next) => next();
17
- } // eslint-disable-next-line no-console
18
-
14
+ }
19
15
 
16
+ // eslint-disable-next-line no-console
20
17
  console.log('HTTP basic auth enabled');
21
18
  return (req, res, next) => {
22
19
  var _ref = (0, _basicAuth.default)(req) || {},
23
- name = _ref.name,
24
- pass = _ref.pass;
25
-
20
+ name = _ref.name,
21
+ pass = _ref.pass;
26
22
  if (auth.username === name && auth.password === pass) {
27
23
  next();
28
24
  } else {
package/src/config.js CHANGED
@@ -1,24 +1,16 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.config = void 0;
9
-
10
8
  var _assert = _interopRequireDefault(require("assert"));
11
-
12
9
  var _fs = _interopRequireDefault(require("fs"));
13
-
14
10
  var _os = _interopRequireDefault(require("os"));
15
-
16
11
  var _jsYaml = _interopRequireDefault(require("js-yaml"));
17
-
18
12
  var configFile = expandTilde(process.env.GITLAB_RADIATOR_CONFIG || '~/.gitlab-radiator.yml');
19
-
20
13
  var yamlContent = _fs.default.readFileSync(configFile, 'utf8');
21
-
22
14
  var config = validate(_jsYaml.default.load(yamlContent));
23
15
  exports.config = config;
24
16
  config.interval = Number(config.interval || 10) * 1000;
@@ -42,17 +34,13 @@ config.gitlabs = config.gitlabs.map(gitlab => {
42
34
  };
43
35
  });
44
36
  config.colors = config.colors || {};
45
-
46
37
  function expandTilde(path) {
47
38
  return path.replace(/^~($|\/|\\)/, "".concat(_os.default.homedir(), "$1"));
48
39
  }
49
-
50
40
  function validate(cfg) {
51
41
  _assert.default.ok(cfg.gitlabs, 'Mandatory gitlab properties missing from configuration file');
52
-
53
42
  cfg.gitlabs.forEach(gitlab => {
54
43
  _assert.default.ok(gitlab.url, 'Mandatory gitlab url missing from configuration file');
55
-
56
44
  _assert.default.ok(gitlab['access-token'] || process.env.GITLAB_ACCESS_TOKEN, 'Mandatory gitlab access token missing from configuration (and none present at GITLAB_ACCESS_TOKEN env variable)');
57
45
  });
58
46
  return cfg;
@@ -1,34 +1,25 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.gitlabRequest = gitlabRequest;
9
-
10
8
  var _axios = _interopRequireDefault(require("axios"));
11
-
12
9
  var _https = _interopRequireDefault(require("https"));
13
-
14
10
  var _url = _interopRequireDefault(require("url"));
15
-
16
11
  function gitlabRequest(path, params, gitlab) {
17
12
  return lazyClient(gitlab).get(path, {
18
13
  params
19
14
  });
20
15
  }
21
-
22
16
  var clients = new Map();
23
-
24
17
  function lazyClient(gitlab) {
25
18
  var gitlabUrl = gitlab.url;
26
-
27
19
  if (gitlabUrl === undefined) {
28
20
  // eslint-disable-next-line no-console
29
21
  console.log('Got undefined url for ' + JSON.stringify(gitlab));
30
22
  }
31
-
32
23
  if (!clients.get(gitlabUrl)) {
33
24
  var client = _axios.default.create({
34
25
  baseURL: _url.default.resolve(gitlabUrl, '/api/v4/'),
@@ -41,9 +32,7 @@ function lazyClient(gitlab) {
41
32
  }),
42
33
  timeout: 30 * 1000
43
34
  });
44
-
45
35
  clients.set(gitlabUrl, client);
46
36
  }
47
-
48
37
  return clients.get(gitlabUrl);
49
38
  }
@@ -1,34 +1,22 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.update = update;
9
-
10
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
-
12
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
-
14
10
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
15
-
16
11
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
17
-
18
12
  var _lodash = _interopRequireDefault(require("lodash"));
19
-
20
13
  var _pipelines = require("./pipelines");
21
-
22
14
  var _projects = require("./projects");
23
-
24
15
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
25
-
26
16
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
27
-
28
17
  function update(_x) {
29
18
  return _update.apply(this, arguments);
30
19
  }
31
-
32
20
  function _update() {
33
21
  _update = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(config) {
34
22
  var projectsWithPipelines;
@@ -38,11 +26,9 @@ function _update() {
38
26
  case 0:
39
27
  _context.next = 2;
40
28
  return loadProjectsWithPipelines(config);
41
-
42
29
  case 2:
43
30
  projectsWithPipelines = _context.sent;
44
31
  return _context.abrupt("return", projectsWithPipelines.filter(project => project.pipelines.length > 0));
45
-
46
32
  case 4:
47
33
  case "end":
48
34
  return _context.stop();
@@ -52,11 +38,9 @@ function _update() {
52
38
  }));
53
39
  return _update.apply(this, arguments);
54
40
  }
55
-
56
41
  function loadProjectsWithPipelines(_x2) {
57
42
  return _loadProjectsWithPipelines.apply(this, arguments);
58
43
  }
59
-
60
44
  function _loadProjectsWithPipelines() {
61
45
  _loadProjectsWithPipelines = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(config) {
62
46
  var allProjectsWithPipelines;
@@ -75,7 +59,6 @@ function _loadProjectsWithPipelines() {
75
59
  case 0:
76
60
  _context2.next = 2;
77
61
  return (0, _projects.fetchProjects)(gitlab);
78
-
79
62
  case 2:
80
63
  projects = _context2.sent;
81
64
  projects.forEach(project => {
@@ -83,11 +66,9 @@ function _loadProjectsWithPipelines() {
83
66
  });
84
67
  _context2.next = 6;
85
68
  return Promise.all(projects.map(project => projectWithPipelines(project, gitlab)));
86
-
87
69
  case 6:
88
70
  projectsWithPipelines = _context2.sent;
89
71
  allProjectsWithPipelines.push.apply(allProjectsWithPipelines, (0, _toConsumableArray2.default)(projectsWithPipelines));
90
-
91
72
  case 8:
92
73
  case "end":
93
74
  return _context2.stop();
@@ -95,15 +76,12 @@ function _loadProjectsWithPipelines() {
95
76
  }
96
77
  }, _callee2);
97
78
  }));
98
-
99
79
  return function (_x5) {
100
80
  return _ref.apply(this, arguments);
101
81
  };
102
82
  }()));
103
-
104
83
  case 3:
105
84
  return _context3.abrupt("return", allProjectsWithPipelines);
106
-
107
85
  case 4:
108
86
  case "end":
109
87
  return _context3.stop();
@@ -113,11 +91,9 @@ function _loadProjectsWithPipelines() {
113
91
  }));
114
92
  return _loadProjectsWithPipelines.apply(this, arguments);
115
93
  }
116
-
117
94
  function projectWithPipelines(_x3, _x4) {
118
95
  return _projectWithPipelines.apply(this, arguments);
119
96
  }
120
-
121
97
  function _projectWithPipelines() {
122
98
  _projectWithPipelines = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(project, config) {
123
99
  var pipelines, status;
@@ -128,7 +104,6 @@ function _projectWithPipelines() {
128
104
  _context4.t0 = filterOutEmpty;
129
105
  _context4.next = 3;
130
106
  return (0, _pipelines.fetchLatestPipelines)(project.id, config);
131
-
132
107
  case 3:
133
108
  _context4.t1 = _context4.sent;
134
109
  pipelines = (0, _context4.t0)(_context4.t1).filter(excludePipelineStatusFilter(config));
@@ -137,7 +112,6 @@ function _projectWithPipelines() {
137
112
  pipelines,
138
113
  status
139
114
  }));
140
-
141
115
  case 7:
142
116
  case "end":
143
117
  return _context4.stop();
@@ -147,23 +121,19 @@ function _projectWithPipelines() {
147
121
  }));
148
122
  return _projectWithPipelines.apply(this, arguments);
149
123
  }
150
-
151
124
  function defaultBranchStatus(project, pipelines) {
152
125
  return (0, _lodash.default)(pipelines).filter({
153
126
  ref: project.default_branch
154
127
  }).map('status').head();
155
128
  }
156
-
157
129
  function filterOutEmpty(pipelines) {
158
130
  return pipelines.filter(pipeline => pipeline.stages);
159
131
  }
160
-
161
132
  function excludePipelineStatusFilter(config) {
162
133
  return pipeline => {
163
134
  if (config.projects && config.projects.excludePipelineStatus) {
164
135
  return !config.projects.excludePipelineStatus.includes(pipeline.status);
165
136
  }
166
-
167
137
  return true;
168
138
  };
169
139
  }