summaryrefslogtreecommitdiff
path: root/README
blob: 0625e6545263e0d33f57c521626ebce3d19c1092 (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
Ick - a continuous integration system
=============================================================================

FIXME: this software is being rewritten to use gunicorn instead of
uwsgi and apifw, a little framework I wrote for work for RESTful HTTP
APIs. Also, Python3.

Introduction
-----------------------------------------------------------------------------

Ick2 will become a CI system. It is not there yet. It is not even
ALPHA level yet.


Hacking
-----------------------------------------------------------------------------

Ick2 is written in Python 2 (do not ask for Python 3, it will happen
when it happens).

There are some unit and integration tests written for the controller's
HTTP API. The integration tests can start a local instance of the
controller; either of the following works:

    ./check
    ./check local

You can add any command line parameters `yarn` accepts, but you have
to specify `local` explicitly:

    ./check local -v --tempdir tmp --snapshot

You can also run the integration tests against an existing remote
setup:

    ./check https://ick-controller
    ./check https://ick-controller -v --tempdir tmp --snapshot

Please make sure at least the local `./check` passes with your
changes, before submitting them.


Running
-----------------------------------------------------------------------------

To run the controller, you should use `./start_ick`. It needs
`gunicorn3`. In general, you need all the dependencies from
`debian/control` installed to run the controller.

After this, `http://localhost:12765` is the controller's base URL, and
you can do things like:

* `GET http://localhost:12765/projects` — list all projects known to
  controller
* `GET http://localhost:12765/projects/foo/+trigger` — trigger build
  of project `foo` (substitute name of one of your own projects)
* `GET http://localhost:12765/projects/foo/logs/current` — get build
  log (output) of the currently executing build step of project `foo`
* `GET http://localhost:12765/projects/foo/logs/previous` — get build
  log (output) of the latest finished build step of project `foo`

To actually run builds, you need to run `worker-manager`:

    ./worker-manager --controller http://localhost:12765

The substitute the correct URL for the controller.


Using the .deb package
-----------------------------------------------------------------------------

To build the .deb package (you may have to fix the version number):

    git archive HEAD | xz > ../ick2_0.2.1+git.orig.tar.xz
    debuild -us -uc
    sudo debi

After this, you'll want to create `/etc/ick2/projects.yaml`, for
example:

    projects:
      count:
        shell_steps:
        - for x in $(seq 100); do echo hello, $x; sleep 1; done

Also, you'll want to enable and start the ick2 service:

    sudo systemctl enable ick2
    sudo systemctl start ick2

After this:

    curl http://localhost:12765/projects
    curl http://localhost:12765/projects/count/+trigger
    ./worker-manager http://localhost:12765

Good luck!


Legalese
-----------------------------------------------------------------------------

While Ick2 itself is under the AGPL3+ license, a copy of which is
included as `COPYING` in the source code of this program. This license
does NOT apply to clients of the HTTP API it provides.

Copyright 2017  Lars Wirzenius

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.