https://github.com/monkey-projects/plugin-clj
MonkeyCI plugin for clojure projects
https://github.com/monkey-projects/plugin-clj
Last synced: 8 months ago
JSON representation
MonkeyCI plugin for clojure projects
- Host: GitHub
- URL: https://github.com/monkey-projects/plugin-clj
- Owner: monkey-projects
- License: mit
- Created: 2024-01-11T14:17:30.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2025-03-15T14:00:50.000Z (10 months ago)
- Last Synced: 2025-04-22T12:58:59.760Z (9 months ago)
- Language: Clojure
- Size: 52.7 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# MonkeyCI Clojure Plugin
This is a library that's meant as a plugin for [MonkeyCI](https://monkeyci.com) builds.
[](https://clojars.org/com.monkeyci/plugin-clj)
## Getting Started
After creating an account on [MonkeyCI](https://monkeyci.com), just include
the dependency in your `.monkeyci/deps.edn`:
```clojure
{:deps {com.monkeyci/plugin-clj {:mvn-version "LATEST"}}}
```
It allows you to set up builds for Clojure projects with minimal code.
## Library Builds
A library is something that you want to deploy. Either as a snapshot when you push to
the `main`branch, or when you push a tag, in which case the tag name will be used as
the release version. You could optionally specify a regex that is applied to the tag
name. If the regex does not match, it is not considered to be a deployment.
You usually will want to run the unit tests, and if those succeed, proceed to publishing
the library. That is what this plugin provides.
### Clojure CLI
In order to use it in your build script when you use the [Clojure cli](https://clojure.org/reference/deps_and_cli),
just use the `deps-library` function, like in this example build script:
```clojure
(require '[monkey.ci.plugin.clj :as p])
(p/deps-library {:tag-regex p/version-regex})
```
This is almost the most basic configuration. You could also leave out the entire
config map, if you want! The `version-regex` matches any standard version tag
(that looks like `x.x.x` or `x.x`).
It will run the unit tests, that are assumed to be declared as an alias function named
`:test` in `deps.edn` (as a default). If test results are written to a `junit.xml` file,
these will be parsed and added to the job results. It reads all necessary information
to deploy the library from the committed `pom.xml`. These values can be overridden using
config parameters.
### Leiningen
When using [Leiningen](https://leiningen.org), you use the `lein-library` function instead.
It works more or less the same as the CLI variant, but uses a differend container image and
invokes `lein` instead. When publishing, the version is either taken from the `project.clj`
file, or from the commit tag.
### Options
These are the options you can use to configure the library build:
|Option|Default (cli)|Default (lein)|Description|
|---|---|---|---|
|`:tag-regex`|`#".*"`|`#".*"`|Regex to filter release tags|
|`:clj-img`|`docker.io/clojure:temurin--slim`|`docker.io/clojure:temurin--lein-slim`|The image to use to test and publish. Tag depends on lein or cli library and evolves with the lib version. See `monkey.ci.plugin.clj/default-deps-img` or `monkey.ci.plugin.clj/default-lein-img`.|
|`:test-job-id`|`test`|`test`|The id for the job that runs unit tests.|
|`:publish-job-id`|`publish`|`publish`|The id for the job that publishes the library.|
|`:test-alias`|`:test:junit`|`test-junit`|The alias to apply when building a library.|
|`:artifact-id`|`test-junit`|`test-junit`|The id given to the artifact that holds test results|
|`:junit-file`|`junit.xml`|`junit.xml`|The path of the junit results xml file|
|`:publish-alias`|`:jar:publish`|`publish`|The alias to apply when publishing the library|
|`:pom-file`|`pom.xml`|-|The location of the pom file, relative to the checkout dir.|
|`:version-var`|`LIB_VERSION`|-|When publishing, the version will be stored in this env var.|
Since this is Clojure, you can of course pick the parts you like. The `...-library` functions just
return jobs, to which you can add more, or you can include it in a larger job list. Or you can call
the functions that have been provided to create the individual jobs. See [the
source](src/monkey/ci/plugin/clj.clj) for this.
## License
Copyright (c) 2024 by Monkey Projects.
[MIT License](LICENSE).