summaryrefslogtreecommitdiff
path: root/roadmap.mdwn
blob: a596d1965b5bae56384933791b01c3af64e1eb36 (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
[[!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.


ALPHA-3
=============================================================================

Add [Qvisqve][] as an IDP. Drop all client-side token generation. Have
workers be identified by the JWT token created by the IDP, instead of
trusting the workers identify themsselves correctly.

[Qvisqve]: http://qvarn.org/qvisqve/


ALPHA-4
=============================================================================

Add the following changes:

> Ick builds and publishes its own .deb packages. It can build both CI
> builds, and release builds. It maintains its own APT repository with
> both CI and release builds. Release builds are built from a PGP
> signed git tag of a specific form. CI builds are built from the tip
> of the master branch, and the upstream and Debian version numbers
> are changed to include the build number so that different CI builds
> can be told apart.

> The builds happen in containers. The container contains the output
> for `debootstrap` with the `build-essential` package installed. Any
> other build dependencies are installed automatically into the
> container, based on information in the `debian/control` file.

> A new component is added to do trusted operatations as part of the
> build: ssh access for fetching from git, ssh access for package
> uploads, and PGP signing of package uploads. A project can specify
> which APT repository the .deb uploads should go to.

The high-level architecture will look like this:

    @startuml
    component Git
    component APT
    package "Trusted ick" {
            component Controller
            component Trusted
            component Blobs
    }
    package "Semi-trusted ick" {
            component Worker
    }

    Git -> Controller : 1. trigger build
    Controller -down-> Trusted : 2. give work
    Git -> Trusted : 3. git clone
    Trusted -> Blobs : 4. upload workspace
    Controller -> Worker : 5. give work
    Blobs -> Worker : 6. get workspace
    Worker --> Blobs : 7. upload .deb
    Blobs --> Trusted : 8. download .deb
    Trusted -> APT : 9. upload signed .deb
    @enduml

Major changes:

* A **trusted worker** component is added. It never runs untrusted
  code, which means code that gets downloaded from the git server.
  This means it can hold and use secrets such as SSH and PGP keys.

* The controller will direct the trusted worker to download source
  code from the git server, and upload it to the blob service.
  Further, the controller will direct the normal worker to download
  the source code blob from the blob service, and to upload the build
  artifacts to the blob service. Finally, the controller will direct
  the trusted worker to download artifacts from the blob service, PGP
  sign the .deb files, and upload them to an APT repository.

* The **APT repository server** component is added. It will only
  accept uploads from the trusted worker. It will have both CI and
  release builds, but keeps them separate so that users may choose
  which to install.