hi, I created a new project with clojure-deps-edn and I can't seem to run the tests https://gitlab.com/ieugen/hledger-grammars/-/tree/fail-to-test
When I clojure -M:test/cognitect
I get
{:clojure.main/message
"Execution error (FileNotFoundException) at cognitect.test-runner/test (test_runner.clj:62).\nCould not locate ieugen/hledger/timeclock_test__init.class, ieugen/hledger/timeclock_test.clj or ieugen/hledger/timeclock_test.cljc on classpath. Please check that namespaces with dashes use underscores in the Clojure file name.\n",
:clojure.main/triage
{:clojure.error/class java.io.FileNotFoundException,
:clojure.error/line 62,
:clojure.error/cause
"Could not locate ieugen/hledger/timeclock_test__init.class, ieugen/hledger/timeclock_test.clj or ieugen/hledger/timeclock_test.cljc on classpath. Please check that namespaces with dashes use underscores in the Clojure file name.",
:clojure.error/symbol cognitect.test-runner/test,
:clojure.error/source "test_runner.clj",
:clojure.error/phase :execution},
:clojure.main/trace
{:via
[{:type java.io.FileNotFoundException,
:message
"Could not locate ieugen/hledger/timeclock_test__init.class, ieugen/hledger/timeclock_test.clj or ieugen/hledger/timeclock_test.cljc on classpath. Please check that namespaces with dashes use underscores in the Clojure file name.",
:at [clojure.lang.RT load "RT.java" 462]}],
:trace
[[clojure.lang.RT load "RT.java" 462]
[clojure.lang.RT load "RT.java" 424]
[clojure.core$load$fn__6839 invoke "core.clj" 6126]
[clojure.core$load invokeStatic "core.clj" 6125]
[clojure.core$load doInvoke "core.clj" 6109]
[clojure.lang.RestFn invoke "RestFn.java" 408]
[clojure.core$load_one invokeStatic "core.clj" 5908]
[clojure.core$load_one invoke "core.clj" 5903]
[clojure.core$load_lib$fn__6780 invoke "core.clj" 5948]
[clojure.core$load_lib invokeStatic "core.clj" 5947]
[clojure.core$load_lib doInvoke "core.clj" 5928]
[clojure.lang.RestFn applyTo "RestFn.java" 142]
[clojure.core$apply invokeStatic "core.clj" 667]
[clojure.core$load_libs invokeStatic "core.clj" 5985]
[clojure.core$load_libs doInvoke "core.clj" 5969]
[clojure.lang.RestFn applyTo "RestFn.java" 137]
[clojure.core$apply invokeStatic "core.clj" 667]
[clojure.core$require invokeStatic "core.clj" 6007]
[clojure.core$require doInvoke "core.clj" 6007]
[clojure.lang.RestFn invoke "RestFn.java" 408]
[clojure.core$map$fn__5866 invoke "core.clj" 2755]
[clojure.lang.LazySeq sval "LazySeq.java" 42]
[clojure.lang.LazySeq seq "LazySeq.java" 51]
[clojure.lang.RT seq "RT.java" 535]
[clojure.core$seq__5402 invokeStatic "core.clj" 137]
[clojure.core$dorun invokeStatic "core.clj" 3133]
[clojure.core$dorun invoke "core.clj" 3133]
[cognitect.test_runner$test invokeStatic "test_runner.clj" 62]
[cognitect.test_runner$test invoke "test_runner.clj" 53]
[cognitect.test_runner$_main invokeStatic "test_runner.clj" 116]
[cognitect.test_runner$_main doInvoke "test_runner.clj" 105]
[clojure.lang.RestFn invoke "RestFn.java" 397]
[clojure.lang.AFn applyToHelper "AFn.java" 152]
[clojure.lang.RestFn applyTo "RestFn.java" 132]
[clojure.lang.Var applyTo "Var.java" 705]
[clojure.core$apply invokeStatic "core.clj" 665]
[clojure.main$main_opt invokeStatic "main.clj" 514]
[clojure.main$main_opt invoke "main.clj" 510]
[clojure.main$main invokeStatic "main.clj" 664]
[clojure.main$main doInvoke "main.clj" 616]
[clojure.lang.RestFn applyTo "RestFn.java" 137]
[clojure.lang.Var applyTo "Var.java" 705]
[clojure.main main "main.java" 40]],
:cause
"Could not locate ieugen/hledger/timeclock_test__init.class, ieugen/hledger/timeclock_test.clj or ieugen/hledger/timeclock_test.cljc on classpath. Please check that namespaces with dashes use underscores in the Clojure file name."}}
{:version "1.10.1.754"
:config-files ["/usr/local/lib/clojure/deps.edn" "/home/ieugen/.clojure/deps.edn" "deps.edn" ]
:config-user "/home/ieugen/.clojure/deps.edn"
:config-project "deps.edn"
:install-dir "/usr/local/lib/clojure"
:config-dir "/home/ieugen/.clojure"
:cache-dir ".cpcache"
:force false
:repro false
:main-aliases ""
:repl-aliases ""}
Change the file name timelock-test.clj
to timelock_test.clj
The JVM classpath doest like -
in file names. Keep the namespace with a dash though.
thanks, I knew the rule but somehow my eyse did not want to see the mistake
Yes, its happened to me many times too... its an easy thing to do 🙂
btw, I love the tool / configuration 🙂
Thank you.
Unfortunately clj-kondo doesnt detect filename issues yet, although hopefully some day https://github.com/borkdude/clj-kondo/issues/842
things have improved since I started learning Clojure and will continue to improve
How do I run the deps edn commands in docker for my gitlab builds? Is there a docker image with clojure-deps-edn ? This is a build and it does not run the tests because clojure-deps-end are not there https://gitlab.com/ieugen/hledger-grammars/-/jobs/918955583
There is an image for CirceCI already has the Clojure CLI tools here - with links to find different versions. They seem to be updated fairly soon after a new release of the Clojure CLI.. I havent tried GitLabs yet. http://practicalli.github.io/clojure/continuous-integration/circle-ci/
@eugen.stan Ah, it was specifically about practicalli clojure-deps-edn aliases
You need to use an alias that is part of the project deps.edn
configuration, so if creating with clj-new, then it would be clojure -M:test:runner
or copy the alias from practicalli/clojure-deps-edn to the project deps.edn file.
Not sure how I would include the practicalli/clojure-deps-edn config in the image yet, but that could be useful. I will think about that... and find out who creates the docker images
well, for starters I'll try to add a step to git clone <https://github.com/practicalli/clojure-deps-edn.git> $HOME/.clojure/
the above failed, there seems to be .clojure
.
I had to delete .clojure and then clone it.
The easiest way out is to have a docker image for clojure-deps-edn w/ automated builds set in place.
I think that starting from the official clojure image would be great
Let me know if/what you decide and maybe I can help.
https://gitlab.com/ieugen/hledger-grammars/-/blob/master/.gitlab-ci.yml
@jr0cket: I think the general issue with clojure-deps-edn is this:
• If I install it in my home and use it in my projects, the build will kind of depend on my home configuration.
• sending the code to someone else (or the CI) will require them to know about downloading and installing clojure-deps-edn.
• To me this is an issue that needs to be solved somehow
• an option would be to maybe add a project specific PROJECT_ROOT/.clojure/deps.edn
?!
@eugen.stan The approach I currently take is that a build configuration should be self-contained. Any aliases required for the CI should be in the projects deps.edn
configuration.
The project deps.edn
configuration should contain only test alias used for the project, so assume it should only contain just the one test runner.
When using a continuous integration service, its only one additional alias for the test runner. So I am not sure of the advantage of using a user-level configuration for this type of environment.
practicalli/clojure-deps-edn contains a wide range of aliases, some of which do the same task but in different ways. That configuration can be "installed" into an environment or specific aliases can be copied into the project deps.edn
file (or used as examples)
I have used practicalli/clojure-deps-edn configuration to set up remote environments, specifically for collaborating live on code. The aliases were convienient in that case as its very much a development environment, so useful to have at hand the community tools that the extensive configuration defines.
If we can add aliases to the default configuration for a CI environment, that does open some other options, so will look into this over the next few weeks. Thanks for the feedback.
thanks for the explanation and glad to be of help, please ping me when you have something, I can help test