the account of a build step: where this console came from, the framework it stands on, and why it was written to be extended rather than configured.
$ byggsteg --origin [ok] a question asked at GNU: why not the web in Guile? [ok] 2013-02 Artanis is born at a Guile hack-potluck [ok] 2015-01 it is offered to the FSF, and becomes GNU [ok] then NalaGinrut shows the framework to Josep [ok] then a wall becomes a door [ok] now a pipeline is a list, and the list is yours $
byggsteg is the Norwegian word for a build step, and that is the size of the thing: one step, then the next, and then the one nobody has written yet. It is a continuous integration and delivery system written in Lisp, and it is made of five moving parts you can read, run and replace.
a jobthe workerthe logthe artifactthe deploymentThere is no first version of this page. Every delivery system is built twice: once by the people who had to deliver before it existed, and once more by whoever inherits the story. This is the second telling of byggsteg's, and it is shorter than the first.
Before byggsteg, a release was a ritual performed by hand. A person signed in to a machine, pulled a branch, built it, restarted a service, and watched. It worked. It always works, for one person, on one machine, at the hour that person happens to be awake. What it could not do was remember what it had done, and what it could not say was why it had failed.
Then two people met, and a door appeared where a wall had stood. Mu Lei, known as NalaGinrut, showed Josep Bigorra, known as jjba23, GNU Artanis, and with the framework came a whole new world of possibilities: pages that are lists, routes that are procedure calls, and a place to put everything a deployment believes about itself. This console is what grew in that world.
The framework itself came out of a question. At GNU, the project was choosing a language for its own website, and many of the answers were Python. That struck NalaGinrut as strange, because the official extension language of GNU is Guile; so he asked instead why nobody had begun a project to write the web in it. RMS agreed it was a good idea. For a while it was only an idea, without a plan. Then the Guile community held a hack-potluck to celebrate Guile 2 turning two — a contest to write something cool in a few weeks — and the framework was born there, in February 2013. It was entered in the Lisp in Summer Projects contest and certified an awesome project; the first stable release arrived on the first of January, 2015; and on the nineteenth of that month it was offered to the FSF, where RMS inducted it as an official GNU project. That is the ground this console stands on.
And so byggsteg was written in that world and named in another. It is a build step, and only a build step: not a platform, not a shelf, not a product with a feature list. The smallest thing that can be asked of a delivery is the thing it was built to answer.
It is worth saying plainly what was handed over, because it was not a library so much as a country with its borders left open.
a routera pagea language for the readera place for everythinga serverOf all of it, one sentence did the most work: a page in Artanis is a list, and a list is a program. A system whose interface is a list is a system whose interface can be computed, and a system whose interface can be computed is one nobody has to wait for permission to change.
Most continuous integration systems are shelves. You take a step down from the shelf, put it in the order the shelf expects, and configure it. A shelf is useful, and a shelf is also a ceiling: what it cannot hold, you cannot do.
byggsteg was built the other way round — it is a library with a page on top — and the library has three doors in it, one for each thing a delivery is made of.
a job is dataa task is a namea step is a procedure;; a job is data, and data can be computed
`((project . "wikimusic")
(branch-name . "trunk")
(task . ("maak-test" "maak-deploy")))
;; a verb byggsteg never had: one more clause, and it has it
((equal? task "ring-the-bell")
(ring-the-bell-step ...))Nothing in it is finished in the sense of closed. The set of things byggsteg can do is not a list of features somebody chose in advance; it is the set of things the person running it can write down. That is what an infinitely extensible CI/CD system means — not a system with infinite features, but a system whose next feature is a definition.
Every file of byggsteg carries two copyright lines, and they are the story told plainly: the orchestrator and the framework it is served from, the maintainer who wrote one and the engineer who wrote the other.
byggstegGNU ArtanisGNU GuileOlive CSSGNU GuixSQLite, Maak, Emacsbyggsteg is free software under the GNU Affero General Public License, either version 3 or later. Take it, run it on your own machine, read it, break it, and add the step it is missing: that is the door this page is about.