Skip to content

Commit 40e3a36

Browse files
committed
Merge pull request #13 from AcalephStorage/release/0.1.1
Release/0.1.1
2 parents 270bb7c + a0e9cfa commit 40e3a36

File tree

152 files changed

+905
-978
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

152 files changed

+905
-978
lines changed

Dockerfile

+22-12
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,33 @@
1-
FROM node:0.12.7
2-
3-
# Install ember, bower, forego, and caddy
4-
RUN npm install -g [email protected] && \
5-
npm install -g [email protected] && \
6-
wget https://bin.equinox.io/c/ekMN3bCZFUn/forego-stable-linux-amd64.tgz -O /tmp/forego.tar.gz && \
7-
tar xvz -C /usr/local/bin -f /tmp/forego.tar.gz && \
8-
rm /tmp/forego.tar.gz && \
9-
chmod 0744 /usr/local/bin/forego && \
10-
wget https://github.com/mholt/caddy/releases/download/v0.7.6/caddy_linux_amd64.tar.gz -O /tmp/caddy.tar.gz && \
11-
tar xvz -C /usr/local/bin -f /tmp/caddy.tar.gz && \
1+
FROM mhart/alpine-node:4
2+
3+
RUN apk update && \
4+
apk add git ca-certificates bash && \
5+
rm -rf /var/cache/apk/*
6+
7+
# Install forego, and caddy
8+
RUN wget https://github.com/mholt/caddy/releases/download/v0.8.3/caddy_linux_amd64.tar.gz -O /tmp/caddy.tar.gz && \
9+
mkdir -pv /tmp/caddy && \
10+
tar xvz -C /tmp/caddy -f /tmp/caddy.tar.gz && \
11+
mv /tmp/caddy/caddy_linux_amd64 /usr/local/bin/caddy && \
12+
rm -r /tmp/caddy && \
1213
rm /tmp/caddy.tar.gz
1314

15+
# Install ember and bower
16+
RUN npm install -g [email protected] && \
17+
npm install -g [email protected]
18+
1419
ADD . /home/apps/kontinuous-ui
1520
WORKDIR /home/apps/kontinuous-ui
1621

1722
RUN npm install && \
1823
bower install --allow-root
24+
25+
ENV EMBER_ENV production
26+
1927
ENV KUBERNETES_API_URL kubernetes.default
2028
ENV KUBERNETES_API_TOKEN_PATH /run/secrets/kubernetes.io/serviceaccount/token
2129
ENV KUBERNETES_API_TOKEN token
2230

23-
CMD ["/usr/local/bin/forego", "start", "-f", "config/Procfile", "-p", "5000"]
31+
EXPOSE 5000
32+
33+
CMD ["/home/apps/kontinuous-ui/start.sh"]

app/adapters/build.js

+16-1
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,20 @@ export default ApplicationAdapter.extend({
3636

3737
urlParts.push(this.pathForType(modelName));
3838
return urlParts.join('/');
39-
}
39+
},
40+
41+
urlForQueryRecord: function(query, modelName) {
42+
var urlParts = this._buildURL(modelName).split('/');
43+
urlParts.removeObject(this.pathForType(modelName));
44+
45+
if (Ember.isPresent(query.owner) && Ember.isPresent(query.repo) && Ember.isPresent(query.build_number)) {
46+
urlParts.push("pipelines", query.owner, query.repo);
47+
delete query.owner;
48+
delete query.repo;
49+
urlParts.push(this.pathForType(modelName), query.build_number);
50+
delete query.build_number;
51+
}
52+
53+
return urlParts.join('/');
54+
},
4055
});

app/adapters/k8s-log.js

-36
This file was deleted.

app/adapters/k8s.js

-52
This file was deleted.

app/adapters/log.js

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import ApplicationAdapter from './application';
2+
import Ember from 'ember';
3+
4+
export default ApplicationAdapter.extend({
5+
6+
urlForQuery: function(query, modelName) {
7+
var urlParts = this._buildURL(modelName).split('/');
8+
urlParts.removeObject(this.pathForType(modelName));
9+
10+
if (Ember.isPresent(query.owner) && Ember.isPresent(query.repo) && Ember.isPresent(query.buildNumber) && Ember.isPresent(query.stageIndex)) {
11+
urlParts.push('pipelines', query.owner, query.repo, 'builds', query.buildNumber, 'stages', query.stageIndex);
12+
delete query.owner;
13+
delete query.repo;
14+
delete query.buildNumber;
15+
delete query.stageIndex;
16+
}
17+
urlParts.push(this.pathForType(modelName));
18+
return urlParts.join('/');
19+
},
20+
21+
});

app/adapters/pod.js

-3
This file was deleted.

app/adapters/stage.js

+1-8
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,6 @@ import Ember from 'ember';
33

44
export default ApplicationAdapter.extend({
55

6-
_getLogs(query) {
7-
let q = Ember.copy(query);
8-
let urlParts = this.urlForQueryRecord(q).split('/');
9-
urlParts.push('logs');
10-
let url = urlParts.join('/');
11-
return this.ajax(url, 'GET', {data: q});
12-
},
13-
146
urlForQueryRecord: function(query, modelName) {
157
var urlParts = this._buildURL(modelName).split('/');
168

@@ -23,4 +15,5 @@ export default ApplicationAdapter.extend({
2315
}
2416
return urlParts.join('/');
2517
},
18+
2619
});

app/authenticators/k8s.js

-44
This file was deleted.

app/authorizers/k8s.js

-15
This file was deleted.

app/components/build-stage.js

+17-76
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import Ember from 'ember';
2-
import DS from 'ember-data';
32
import {task} from 'ember-concurrency';
43

54
export default Ember.Component.extend({
@@ -20,6 +19,7 @@ export default Ember.Component.extend({
2019
let type = this.get('model.type');
2120
return this.iconClassMap[type] || this.defaultStatusIcon;
2221
}),
22+
isRunning: Ember.computed.equal('model.status', 'RUNNING'),
2323

2424
click() {
2525
this.fetchLogs();
@@ -30,89 +30,30 @@ export default Ember.Component.extend({
3030
let stage = this.get('model');
3131

3232
if (Ember.isEmpty(stage.get('logFiles'))) {
33-
let l = this.get('logFetcher').perform(stage);
34-
stage.set('logFetcher', l);
33+
let logFetcher = this.get('logFetcher').perform(stage);
34+
stage.set('logFetcher', logFetcher);
35+
logFetcher.then((logFiles) => {
36+
stage.set('logFiles', logFiles);
37+
});
3538
}
3639
},
3740

3841
logFetcher: task(function*(stage) {
39-
var promise;
40-
switch(stage.get('status')) {
41-
case 'RUNNING':
42-
promise = this.getPodLogs(stage);
43-
break;
44-
case 'SUCCESS':
45-
case 'FAIL':
46-
promise = this.getDoneLogs(stage);
47-
break;
48-
default:
49-
return;
42+
if (stage.get('status') !== 'PENDING') {
43+
let logFiles = yield this.getStageLogs(stage);
44+
return logFiles;
5045
}
51-
return yield promise.then((logFiles) => {
52-
stage.set('logFiles', logFiles);
53-
});
5446
}),
5547

56-
getPodLogs(stage) {
57-
let namespace = stage.get('pod_namespace'),
58-
podName = stage.get('pod_name');
59-
60-
return new Ember.RSVP.Promise((resolve) => {
61-
Ember.RSVP.hash({
62-
pod: this.get('store').queryRecord('k8s-pod', { namespace: namespace, name: podName })
63-
})
64-
.then((hash) => {
65-
let containers = hash.pod.get('spec.containers').getEach('name');
66-
let logs = [];
67-
68-
containers.forEach((name) => {
69-
let q = { namespace: namespace, podName: podName, container: name };
70-
let store = this.get('store');
71-
let log = DS.PromiseObject.create({
72-
promise: store.queryRecord('k8s-log', q)
73-
});
74-
75-
log.reopen({
76-
title: name,
77-
reloader: task(function*() {
78-
yield store.queryRecord('log', q)
79-
.then((l) => {
80-
log.set('details', l.get('details'));
81-
});
82-
}).drop()
83-
});
84-
85-
logs.push(log);
86-
});
87-
resolve(logs);
88-
}, () => {
89-
resolve([]);
90-
});
91-
});
92-
},
93-
94-
getDoneLogs(stage) {
95-
let adapter = this.get('store').adapterFor('stage'),
96-
query = {
97-
owner: this.get('pipeline.owner'),
98-
repo: this.get('pipeline.repo'),
99-
buildNumber: this.get('build.number'),
100-
stageIndex: stage.get('index')
101-
};
48+
getStageLogs(stage) {
49+
let query = {
50+
owner: this.get('pipeline.owner'),
51+
repo: this.get('pipeline.repo'),
52+
buildNumber: this.get('build.number'),
53+
stageIndex: stage.get('index'),
54+
};
10255

103-
return new Ember.RSVP.Promise((resolve) => {
104-
adapter._getLogs(query)
105-
.then((logFiles) => {
106-
logFiles.forEach((logFile) => {
107-
let filename = logFile.filename.split('/');
108-
logFile.title = filename.objectAt(filename.length - 1);
109-
logFile.details = atob(logFile.content);
110-
});
111-
resolve(logFiles);
112-
}, () => {
113-
resolve([]);
114-
});
115-
});
56+
return this.get('store').query('log', query);
11657
},
11758

11859
});

app/components/main-menu.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import Ember from 'ember';
22

33
export default Ember.Component.extend({
44

5-
classNames: Ember.String.w('ui borderless menu main-menu'),
5+
classNames: Ember.String.w('ui borderless attached menu main-menu'),
66

77
session: Ember.inject.service(),
88
appNamespace: Ember.inject.service(),

0 commit comments

Comments
 (0)