Fork me on GitHub
Godwin Nicholas02:06:58

I'm looking for a reagent/reframe video course am new to clojure and it's sought of my first language I'll be grateful if anyone can help me with it as most of them are paid and I can't afford it. Ring, compujure will be helpful too thank you very much.

Drew Verlee03:06:16

The official documentation is always a good starting place.


For server-side Clojure with ring and component, there is a basic guide here Or a slightly more involved guide here There are free videos on server side topics at

Godwin Nicholas21:06:28

I'm very grateful God bless you all

🙌 1
Godwin Nicholas01:06:04

Thanks @U7ANZ2MTK I just checked there is a free reframe course

Godwin Nicholas01:06:54

Question it seems I can't download and use it locally do you by any chance have the local files


Check his GitHub repo

Jenny Kwan22:06:58

Apologies if this isn't the right channel, but does anyone have a good, strong opinion for releasing private libs to some private Java repo? I use GitHub with the HubFlow git extension, and would love to set up auto-deploy of my Leiningen project based on branch: main to actual version tagged, develop to SNAPSHOT, and feature to appropriately named semver compliant version tags. I'd really like the CI/CD workflow to automatically modify the version in project.clj on PR acceptance. I'm messing around with GitHub Actions and the "It Just Works" experience is definitely not there.

🙌 2

I can't speak to how to do it with a Leiningen project but I can point you at one of my OSS projects to show how I do it for the Clojure CLI / deps.edn / build.clj: (I haven't used Leiningen for over six years at this point).


Every time I push a commit to the main develop branch or merge a PR, the test-and-snapshot workflow runs to push a -SNAPSHOT JAR up to Clojars. Every time I tag a release on the main develop branch, the test-and-release workflow runs to push a full release JAR to Clojars. In both cases, the full test suite is run.


My HoneySQL project does the same thing (and includes matrix testing against different versions of Clojure)


Those also do matrix testing against different JVM versions and GraalVM versions.

Jenny Kwan22:06:38

Thanks, @U04V70XH6! And thank you for your service to the community! We haven't seen each other in person in years, but I want you to know how much I value you and your contributions to software engineering generally!

Jenny Kwan22:06:19

Would you be willing to comment on how the version is computed in build.clj? Is the major/minor manually maintained in build.clj in that private the-version fn?

Jenny Kwan22:06:06

Also, this is probably just me, but I strongly prefer squash on merge. Do you have any experience with how to cleanly do it from either the git flow or HubFlow extensions? The git log gets funny with how GitHub and HubFlow currently interact on merge to develop.


(defn- the-version [patch] (format "1.2.%s" patch))
(def version (the-version (b/git-count-revs nil)))
(def snapshot (the-version "999-SNAPSHOT"))
the-version makes the string in either of those two ways. The repo uses major.minor.commits for versioning releases so when I (manually) make the release on GitHub, I know the commits count from the home page of the repo in GH, and that's the version the release will get from that code too.


I have no exposure to "HubFlow" but I don't generally do squash on merge -- that loses the details of the commits from the branch, right? Since I delete branches on merge, I generally want that history merged as-is.


(I feel like I haven't seen anyone in person for years at this point and even for an introvert like me that's getting to be a bit much 🙂 )


If you wanted the most recent tag, rather than the commit count, you can use (b/git-process {:git-args "describe --tags --abbrev=0"}) -- although that's the whole git tag, not just the "patch" part, so you wouldn't need the-version to construct the string there.


And, yeah, I'm hard-coding the major.minor versions in the-version. I don't bump minor very often.