summaryrefslogtreecommitdiff
path: root/roadmap.mdwn
blob: d3283f5478d4e39873595684be18991bc569c25e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
[[!meta title="Road map"]]

This is the road map for ick development. It does not stretch very far,
because predicting the future is difficult. This road map also doesn't
give any dates, this is a hobby project. It's also open for discussion.

Ick is now usable by others. If you try ick and have problems, do tell
us, see the [[contact]] page for contact information.

Ick is by no means an abandoned project, but we're taking a breather
while waiting for other developments. Most importantly, ick will want a
web UI, and that and other features will require end-user
authentication. The Qvisqve software ick uses for authentication will
be getting that support in 2018. Once it does, ick will start adding
support for that.

Until then, the plan is to make small, incremental improvements to
ick, fix bugs, improve documentation, smooth rough corners, and
gather experience on using ick.

The long-term goal is to develop ick into a hosted service, which can
be run on a commercial basis, without compromising on software
freedom.

# Roadmap towards hosted ick

```roadmap
hosted_demo:
  label: |
    Lars run a hosted
    demo service for
    himself and users
  depends:
    - user_friendly
    - secure_from_users
    - secure_for_users
    - on_demand_workers
    - trigger_service
    - multiarch

user_friendly:
  label: |
    Ick is reasonably
    user friendly to
    techies.
  depends:
    - webui
    - self_registration

multiarch:
  label: |
    Ick supports building
    for multiple
    architectures.
  depends:
    - worker_tags
    - concurrency

secure_from_users:
  label: |
    Ick is safe and
    secure from users
    doing silly things.
  depends:
    - networkless_containers

secure_for_users:
  label: |
    Ick is secure for
    users to use.
  depends:
    - isolation
    - secrets

secrets:
  label: |
    Ick provides a way to
    securely use secrets:
    ssh keys, pgp keys,
    Qvisqve access
    tokens.
  depends:
    - owned_resources

networkless_containers:
  label: |
    Containers have, by
    default, no network
    access. Trusted users
    can allow specific
    builds to have
    network access in
    containers.
  depends:
    - owned_resources

concurrency:
  label: |
    Ick can execute
    several actions in
    the same build
    concurrently.
  depends:
    - worker_tags

worker_tags:
  label: |
    Ick allows projects
    and workers to have
    tags, and can choose
    which worker to give
    an action to, based
    on tags

on_demand_workers:
  label: |
    Ick can create
    and destroy
    workers on demand
  depends:
    - worker_tags

trigger_service:
  label: |
    Ick can trigger
    multiple builds when
    a git repo changes,
    or when an ick build
    finishes, or after
    some time has passed

isolation:
  label: |
    Users can only see,
    manipulate their own
    data
  depends:
    - owned_resources

owned_resources:
  label: |
    Each resource is
    owned by its creator

self_registration:
  label: |
    Users can create
    an account by themselves
    via a web browser
  depends:
    - webui

webui:
  label: |
    Ick has a web UI
    that allows creation,
    updating, triggering
    of projects, builds,
    viewing status, logs
```

# Roadmap legend

```roadmap
goal:
  label: |
    This is the end goal:
    if we reach here, there
    is nothing more to be
    done in the project
  depends:
  - finished
  - blocked

finished:
  status: finished
  label: |
    This task is finished;
    the arrow indicates what
    follows this task (unless
    it's blocked)

ready:
  label: |
    This task is ready 
    to be done: it is not
    blocked by anything

next:
  status: next
  label: |
    This task is chosen 
    to be done next

blocked:
  label: |
    This task is blocked
    and can't be done until
    something happens
  depends:
  - ready
  - next
```