{"id":27075883,"url":"https://github.com/monkey-projects/monkeyci","last_synced_at":"2026-04-07T19:01:45.737Z","repository":{"id":180143912,"uuid":"664659111","full_name":"monkey-projects/monkeyci","owner":"monkey-projects","description":"Next-generation CI/CD tool that uses the full power of Clojure!","archived":false,"fork":false,"pushed_at":"2026-03-11T14:22:54.000Z","size":7273,"stargazers_count":41,"open_issues_count":54,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-03-11T14:44:53.582Z","etag":null,"topics":["cicd","clojure"],"latest_commit_sha":null,"homepage":"https://monkeyci.com","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/monkey-projects.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"docs/security.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-07-10T13:15:49.000Z","updated_at":"2026-03-11T14:23:03.000Z","dependencies_parsed_at":null,"dependency_job_id":"44d3a4db-9e46-4abb-98e7-eadaa1542f0c","html_url":"https://github.com/monkey-projects/monkeyci","commit_stats":null,"previous_names":["monkey-projects/monkeyci"],"tags_count":141,"template":false,"template_full_name":null,"purl":"pkg:github/monkey-projects/monkeyci","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monkey-projects%2Fmonkeyci","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monkey-projects%2Fmonkeyci/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monkey-projects%2Fmonkeyci/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monkey-projects%2Fmonkeyci/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/monkey-projects","download_url":"https://codeload.github.com/monkey-projects/monkeyci/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monkey-projects%2Fmonkeyci/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30471114,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-13T11:00:43.441Z","status":"ssl_error","status_checked_at":"2026-03-13T11:00:23.173Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cicd","clojure"],"created_at":"2025-04-06T00:18:19.488Z","updated_at":"2026-04-07T19:01:45.703Z","avatar_url":"https://github.com/monkey-projects.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"# README #\n\n```clojure\n(ns build\n  (:require [monkey.ci.api :as m]))\n  \n(def clj-img \"docker.io/clojure:tools-deps\")\n  \n(def unit-test\n  \"A container job that runs your clojure unit tests\"\n  (-\u003e (m/container-job \"unit-test\")\n      (m/image clj-img)\n\t  (m/script [\"clojure -X:test\"])))\n\t  \n(defn deploy [ctx]\n  \"Deploy the lib, only when triggered by tag push\"\n  (when (some? (m/tag ctx))\n    (-\u003e (m/container-job \"deploy\")\n        (m/image clj-img)\n        (m/script [\"clojure -X:deploy\"])\n        (m/depends-on \"unit-test\"))))\n\t\t\n;; Define these jobs\n[unit-test deploy]\n```\n\n[MonkeyCI](https://monkeyci.com) is intended to be a highly customizable and powerful \ncontinuous integration tool.  The key features are:\n- Modular and maintainable design.\n- Highly testable (written using TDD), both for the codebase and for the build scripts.\n- Powerful if necessary, but user friendly for the less-technical.\n- Try to include the best features of currently existing CI/CD tools.\n- Pay per use: every feature used will be paid for, but there is a \"free budget\".\n\nIt is (very remotely) inspired by [Lambda-CD](https://www.lambda.cd), but I did not\nuse any of their code.  Only the part where you use [Clojure](https://clojure.org) as\nthe build script language ;-).\n\nCheck out the [official documentation site](https://docs.monkeyci.com).\n\n### Why? ###\n\nWhy build another CI tool if so many already exist?  Well, throughout my career I've\nused quite a few: Jenkins, Travis, GCP build, Bitbucket, Gitlab, Teamcity, Tekton...\nAll have their strong points, and all have their weak points.  But almost all have the\nsame issue: their scripting is not powerful enough for my needs.  And since my pipelines\nare not _that_ special (I think), I can assume that many people experience the same\nproblem.\nThey are great for demo cases and very simple builds, but as soon as you go past the\nelementary and want to set up pipelines with even moderate complexity, and want to\nreduce copy/pasting as much as possible, you end up in trouble.  And since CI tools\nshould be the forerunners in \"good coding practices\", I should expect no less from the\nbuild scripts they make us write, no?\n\nThe core problem, as I see it, is that they all work with Yaml files, probably to make\nit more user-friendly.  This is great for novice users with simple builds, but as said\nbefore, you quickly run into limitations.  Then you're forced to use Yaml anchors and\nwhatnot.  And those have limitations too.  And apart from that you're also often forced\nto insert complicated bash scripting to solve some specific problems.  So after a while\nit becomes a program of it's own.  And in my view, programs require programming\nlanguages!\n\nI'm a big fan of Lisp-like languages in general, and Clojure in particular.  Mostly\nbecause of it's elegance and simple syntax.  And Clojure nicely bridges the gap with\nthe \"real world\": you can write in an elegant language _and_ your code is actually\nusable!  And that's also why I think it could be a nice fit for some kind of scripting\n(see also [Babashka](https://github.com/babashka/babashka)).  You don't need complicated\nsyntax and directory structures, a Clojure program can be as simple as a single file.\nSee also [this explainer](https://docs.monkeyci.com/articles/why-clojure/).\n\nSo that's the aim here: to provide the full power of Clojure to build pipelines, and\nalso introduce coding best-practices to the build process.  By that I mean things like\nunit testing.  Wouldn't it be great if you could unit-test your build pipelines?  If\nyou could run it locally to see if everything works, that you don't need to do any\ndebugging in the CI environment?\n\n### Things I like ###\n\nI intend to incorporate as much features as possible that I like in other CI tools.\nThese include:\n\n - The speed of CircleCI\n - Easy to use caching support of Gitlab\n - Named pipelines of BitBucket\n - Nice test and coverage reporting of TeamCity\n - ...\n\nAlso, to make migration easier, it would be cool to add support for the build scripts\nof other CI tools.  If that is even feasibly.  Or, alternatively, some way to convert\nscripts into the MonkeyCI format.  In any case it should be avoided that users need\nto rewrite all their build scripts if they want to migrate.\n\n### Features I'm missing in other tools\n\nOf course, I wouldn't be building this if I saw that the existing tooling provided me\nwith everything I need or want.  So what I want to add:\n\n - Ability to unit test your pipeline (simulate scenarios)\n - Run it locally (e.g. using a local dev server)\n - Compatibility with other tools (can read or generate scripts from existing tools)\n - Some way to show custom information (like coverage percentage)\n\n### What is this repository for? ###\n\nThis repository contains the source code for the Monkey CI application.  It consists of\nthe build application that actually runs the script and  the infra project that holds the\nTerraform configuration for the cloud configuration.\n\nThe application is written in Clojure and is set up in a modular way.  Communication\nbetween the modules is done using events (probably using [Kafka](https://kafka.apache.org/),\nor maybe [Artemis](https://activemq.apache.org/components/artemis/)).\n\n### How do I get set up? ###\n\nThe code consists of several modules.  `gui` contains the frontend code, `app`\ncontains the code for the application itself (the backend) and `test-lib` is a\nlibrary that can be included in build script unit tests.\n\n* Install [Clojure tools](https://clojure.org/guides/deps_and_cli)\n* Running tests once: `clojure -X:test`\n* Running tests continuously: `clojure -X:test:watch`\n* Get coverage: `clojure -M:test:coverage`\n* Running with junit output: `clojure -M:test:junit`\n* Running the app: `clojure -M:run`\n\nThe test runner used is [Kaocha](https://github.com/lambdaisland/kaocha), which\nruns the `clojure.test` tests.  Depending on the aliases you include, plugins are\nactivated or not (see the [deps.edn](builder/deps.edn) file).\n\n#### Building ####\n\n*MonkeyCI* is self-building since quite some time, [check out the application\nsite here](https://app.monkeyci.com).  You can find the [MonkeyCI builds\nhere](https://app.monkeyci.com/o/monkey-projects/r/monkeyci).\n\n### More Details ###\n\n* For the general design, see [the design page](docs/design.md).  As we go along, this will probably evolve.\n* For configuration, see the [configuration page](docs/config.md).\n* Get details on the [API here](docs/api.md).\n\n### Contribution guidelines ###\n\n* All code must be written in [TDD fashion](https://en.wikipedia.org/wiki/Test-driven_development).\n* All code must reviewed by at least two other coworkers, assuming there are coworkers.\n\n### Who do I talk to? ###\n\n* wout@monkey-projects.be is the (initial?) developer and designer\n\n### License ###\n\n[GPL v3](LICENSE)\n\nCopyright (c) 2023-2026 by Monkey Projects BV\n\n[https://www.monkey-projects.be](https://www.monkey-projects.be)\n\n[https://www.monkeyci.com](https://www.monkeyci.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmonkey-projects%2Fmonkeyci","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmonkey-projects%2Fmonkeyci","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmonkey-projects%2Fmonkeyci/lists"}