GitHub Action to publish on Clojars?

Is that possible to send package from GitHub? like for npm ?

I would expect this to be possible since lein, boot, and CLI/deps.edn all have ways to build an uberjar and publish it to Clojars. (for the latter, see – I use and for build/deploy)

Another issue is how to authenticate? npm has tokens for publishing packages. Does Clojars provide tokens as well?

or maybe using password…

$ env CLOJARS_USERNAME=username CLOJARS_PASSWORD=password clj -A:deploy

I use meyvn for deploying by the way.

Turned out Meyvn turned into a closed software in newer version…

[email protected]:/bin# clj -Sdeps '{:deps {org.danielsz/meyvn-installer {:mvn/version "1.2.1"}}}' -m meyvn-installer.core
You will need the username/password that came with your licence. Are you ready to proceed? Y(es) or N(o)?
Would you like to apply for a licence? Y(es) or N(o)?
Bye for now.

I got lots of thing to migrate if deps-deploy is available. But I’m not sure if there’s a cheap way to generate the pom.xml file that deps-deploy. Damn Clojars(maybe it’s maven to blame), I never feel deploying Clojure packages is as simple as deploy npm packages.

depstar helps, I created a lilac.jar file with it. But I still got some confusion, the generated jar file is quite large:

[email protected]:/tmp/lilac/target# du -ah lilac.jar
4.5M	lilac.jar

as I extracted it, I see lots of file under clojure/:

[email protected]:/tmp/lilac/target# jar xvf lilac.jar
  created: lilac/
 inflated: lilac/router.cljs
 inflated: lilac/main.cljs
 inflated: lilac/util.cljs
 inflated: lilac/test.cljs
 inflated: lilac/core.cljs
 inflated: lilac/core.clj
  created: clojure/
  created: clojure/asm/
  created: clojure/asm/commons/
  created: clojure/test/
  created: clojure/instant/
[email protected]:/tmp/lilac/target# ls -p
clojure/  lilac/  lilac.jar

Since I’m packaging a ClojureScript package, can I remove them from my jar?

That sounds like you made an uberjar instead of a library jar? You only use uberjar to create applications – for libraries that you deploy to Clojars, you should make a jar instead.

1 Like

It’s true that clj -Spom will only get you part of the way. It’s why clj-new now produces fully-fleshed out pom.xml files in new app, lib, and template projects. See onward for a discussion of that.

1 Like

Turned to depstar.jar and it worked.

I ran into another issue that when my package finally loaded into shadow-cljs and it told me lilac/core.clj was not find:

[:client] Configuring build.
[:server] Configuring build.
[:server] Compiling ...
[:client] Compiling ...
[:server] Build failure:
------ ERROR -------------------------------------------------------------------
 File: jar:file:/Users/chen/.m2/repository/mvc-works/lilac/0.1.0-dev2/lilac-0.1.0-dev2.jar!/lilac/core.cljs
failed to require macro-ns "lilac.core", it was required by "lilac.core"
FileNotFoundException: Could not locate lilac/core__init.class, lilac/core.clj or lilac/core.cljc on classpath.
	clojure.lang.RT.load (
	clojure.lang.RT.load (
	clojure.core/load/fn--6839 (core.clj:6126)
	clojure.core/load (core.clj:6125)
	clojure.core/load (core.clj:6109)
	clojure.core/load-one (core.clj:5908)
	clojure.core/load-one (core.clj:5903)
	clojure.core/load-lib/fn--6780 (core.clj:5948)
	clojure.core/load-lib (core.clj:5947)
	clojure.core/load-lib (core.clj:5928)
	clojure.core/apply (core.clj:667)
	clojure.core/load-libs (core.clj:5985)
	clojure.core/load-libs (core.clj:5969)

I went to ~/.m2/ and find the package of the specific version, the file lilac/core.clj existed:

=>> c 0.1.0-dev2/
_remote.repositories  lilac-0.1.0-dev2.jar  lilac-0.1.0-dev2.pom
=>> jar xvf lilac-0.1.0-dev2.jar
  created: lilac/
 inflated: lilac/main.cljs
 inflated: lilac/test.cljs
 inflated: lilac/router.cljs
 inflated: lilac/util.cljs
 inflated: lilac/core.cljs
 inflated: lilac/core.clj
  created: META-INF/
  created: META-INF/maven/
  created: META-INF/maven/mvc-works/
  created: META-INF/maven/mvc-works/lilac/
 inflated: META-INF/maven/mvc-works/lilac/
 inflated: META-INF/maven/mvc-works/lilac/pom.xml

In my original project I have two folders src/ and macros/, and lilac/core.clj locates in macros/ folder. Pretty confused if that would cause problems.


I reran shadow-cljs but the error is missing… now I’m bit confused…

I’m not quite sure what the behavior should be (for cljs) when you have both file.cljs and file.clj. Someone familiar with ClojureScript and macros will hopefully be able to answer that.

At least it’s working for now. The package got deployed .

Thanks for the help.

I just published a small lib intended to streamline the common release flow for small libraries that use tools.deps:

The motivating use case is publishing versioned releases of small & simple libraries without having to have to configure three different tools every time.

It’s just one day old, & open to feedback.


Looks cool? It looks like the version is related to git tags. But how do you decide the versions from tags? And would it work properly if that runs in CI environments?

Also a more general question… I’m quite wondering why group-id and artifact-id are not inside deps.edn, like package.json in Node.js . Package management being a core feature of the whole ecosystem seems not being enhanced enough.