Compare commits

..

2387 commits

Author SHA1 Message Date
Michiel Borkent
8052618fa8
Fix #1818: wrong argument order in clojure.java.io/resource (#1819)
* Fix #1818: wrong argument order in clojure.java.io/resource

* fix
2025-05-13 11:28:44 +02:00
Michiel Borkent
238a98d9b2
Add java.text.BreakIterator (#1817) 2025-05-07 19:58:37 +02:00
Michiel Borkent
57b799e63d Add odoyle-rules to tested libs 2025-05-07 11:06:22 +02:00
Gert Goet
dad646ce38
Make install-script wget-compatible (#1816) 2025-05-04 10:27:03 +02:00
Michiel Borkent
35696b7c0b Bump edamame 2025-05-03 15:35:58 +02:00
Michiel Borkent
00d56900e8
Bump jsoup to 1.20.1 (#1814) 2025-05-02 16:34:03 +02:00
Michiel Borkent
1fc8ef6adb Bump fs 2025-04-30 14:24:49 +02:00
Michiel Borkent
158b36c645 Version bump 2025-04-26 17:27:17 +02:00
Michiel Borkent
b5c65f46e1 changelogs 2025-04-26 17:27:12 +02:00
Michiel Borkent
7e64ce5dd1 export variable 2025-04-26 17:05:55 +02:00
Michiel Borkent
73b806dbd2 v1.12.200 2025-04-26 16:25:47 +02:00
Michiel Borkent
0579d6a0ec disable bulkhead tests 2025-04-26 13:23:02 +02:00
Michiel Borkent
cfee65101f Bump fusefox 2025-04-26 13:03:00 +02:00
Michiel Borkent
4da643cf63 artifact despite failing tests 2025-04-26 12:47:18 +02:00
Michiel Borkent
aa15e5212a disable flaky tests 2025-04-26 12:39:26 +02:00
Michiel Borkent
e23a222fdb
fusebox tests fixed with SCI interop improvements (#1813) 2025-04-26 12:16:36 +02:00
Michiel Borkent
6c0cfde92f Bump process and fs in print-deps 2025-04-21 12:50:20 +02:00
Michiel Borkent
5f6befc577
Add CachedThreadPool interop test (#1811) 2025-04-19 17:29:38 +02:00
Michiel Borkent
d7b0f9155d Add ConcurrentHashmap 2025-04-19 13:52:02 +02:00
Michiel Borkent
28c2f6947f Add ReentrantLock + ThreadLocalRandom 2025-04-19 13:41:37 +02:00
Michiel Borkent
5c4fb1ccc1 Remove run as lein cmd 2025-04-19 12:47:52 +02:00
Michiel Borkent
5b7678f309
Fix virtual thread builder interop (#1810) 2025-04-19 12:12:56 +02:00
Michiel Borkent
f33c68293b Version bump 2025-04-18 11:46:41 +02:00
Michiel Borkent
fd69206933 v1.12.199 2025-04-18 11:25:51 +02:00
Lee Read
689148b99c
Fix #1806: Add cheshire.factory (#1809)
* add cheshire.factory namespace

This will allow bb users to change jackson factory options when using
cheshire.

Took inspiration from other bb lib impls that dealt with dynamic vars.

Brought over cheshire tests, disabling tests for cheshire/jvm features not
included in bb.

Closes #1806

* turf debug stuff

* turf commented code accidentally left in
2025-04-18 11:10:22 +02:00
Michiel Borkent
3db67a5574 Version bump 2025-04-17 15:09:34 +02:00
Michiel Borkent
8191e09314 v1.12.198 2025-04-17 13:00:04 +02:00
Michiel Borkent
e784f4ae8a
Upgrade babashka.cli and cheshire (#1805) 2025-04-16 14:07:58 +02:00
Michiel Borkent
774fe99a83
Bump core.async to 1.8.741 (#1803) 2025-04-08 11:19:04 +02:00
Wes Morgan
f9aafc9d96
Add java.util.regex.PatternSyntaxException (#1802)
* Add java.util.regex.PatternSyntaxException

...to support com.gfredericks/test.chuck library

* Add java.util.regex.PatternSyntaxException addition to CHANGELOG

---------

Co-authored-by: Michiel Borkent <michielborkent@gmail.com>
2025-04-04 21:04:42 +02:00
Michiel Borkent
4037154a28 changelog 2025-04-03 11:50:45 +02:00
Michiel Borkent
35e904b547
Bump core.async to 1.8.735 (#1795) 2025-04-03 11:46:11 +02:00
Michiel Borkent
08d60112ed Bump edamame, throw on triple colon keyword 2025-03-31 16:05:00 +02:00
Michiel Borkent
a9060f0027 Bump process, fixes memory leak 2025-03-31 15:47:51 +02:00
Michiel Borkent
597f180d32 remove debug 2025-03-19 17:40:33 +01:00
Michiel Borkent
007209c0d2 debug windows 2025-03-19 17:23:26 +01:00
Michiel Borkent
1b2682b67a changelog 2025-03-19 16:41:15 +01:00
Michiel Borkent
4a2a305e38
GraalVM 24 (#1800) 2025-03-19 16:38:17 +01:00
Michiel Borkent
e3908a1306
Merge pull request #1799 from lread/lread/badges
docs: readme: badges: reference bb book
2025-03-17 20:04:10 +01:00
lread
f967e10bdd
docs: readme: badges: reference bb book
Give only a quick summary of bb badges in the README, and reference the new
full description in bb book.

Closes #1798
2025-03-17 10:54:07 -04:00
Michiel Borkent
4c6fe98236 Bump deps 2025-03-11 15:07:16 +01:00
Michiel Borkent
28c7c42c2a
Merge pull request #1797 from babashka/jsoup-upgrade
Jsoup upgrade
2025-03-11 11:24:09 +01:00
Michiel Borkent
6d5fc67467 Bump to main branch 2025-03-11 11:21:13 +01:00
Michiel Borkent
50fc2e2582 Upgrade jsoup 2025-03-10 21:02:02 +01:00
Michiel Borkent
a45f76b029 deps.clj 2025-03-10 20:54:49 +01:00
Michiel Borkent
9ed0507030 fix cache 2025-03-06 17:12:58 +01:00
Michiel Borkent
f9935def7e Bump deps.clj 2025-03-06 17:10:34 +01:00
Michiel Borkent
d053a3c0c5 Bump deps.clj 2025-03-04 10:00:38 +01:00
Michiel Borkent
cdcf9deb1c Bump deps.clj 2025-02-28 14:22:23 +01:00
Michiel Borkent
6f43c47f2a Version bump 2025-02-28 12:23:15 +01:00
Michiel Borkent
63a51ff669 v1.12.197 2025-02-28 11:13:20 +01:00
Michiel Borkent
d7c80012b1 v2024.02.28 2025-02-28 11:02:39 +01:00
Michiel Borkent
eddf51529f changelog 2025-02-18 12:36:44 +01:00
Michiel Borkent
d1dbafc49b Bump fs 2025-02-11 21:21:27 +01:00
Michiel Borkent
bc8cd6d358 Bump deps.clj 2025-02-10 17:04:00 +01:00
Michiel Borkent
b01ee6d87d Fix rewrite-clj tests 2025-02-04 20:18:08 +01:00
Michiel Borkent
a43b55bf5c Fix #1793: bump rewrite-clj to 1.1.49 2025-02-04 19:55:25 +01:00
Michiel Borkent
4358428464 Bump deps.clj 2025-01-28 11:17:25 +01:00
Michiel Borkent
7998e50045
Fix #1791: interop problem on Jsoup form element (#1792) 2025-01-23 14:10:36 +01:00
Michiel Borkent
8d3806a6e7 Bump deps.clj 2025-01-23 11:18:32 +01:00
Michiel Borkent
455728092c sync deps.clj and sci 2025-01-16 15:32:49 +01:00
Michiel Borkent
da3eff0305 Bump fs 2025-01-09 21:08:29 +01:00
Michiel Borkent
51b44ba2ed deps.clj bump 2025-01-05 11:24:36 +01:00
Bob
3cddc33334
Fix #1785: allow subclasses of Throwable to have instance methods called via interop (#1786) 2025-01-01 19:36:28 +01:00
Michiel Borkent
d8521888cc sync deps.clj 2024-12-27 16:21:53 +01:00
Michiel Borkent
1a62a619e3 changelog 2024-12-24 10:41:05 +01:00
Michiel Borkent
ecbdbba8d4 Version bump 2024-12-24 10:40:14 +01:00
Michiel Borkent
e186726fd9 v1.12.196 2024-12-24 10:23:11 +01:00
Michiel Borkent
2a50af8f68 Bump org.babashka/cli 2024-12-23 10:55:01 +01:00
Michiel Borkent
c7a5c6c6bc parameterize graalvm install script 2024-12-22 19:47:43 +01:00
Michiel Borkent
024f1d5515
Fix #1771: *e should contain exception thrown by user (#1784) 2024-12-20 17:20:45 +01:00
Ryan Tate
142e9eae06
Add java.nio.file.attribute.UserDefinedFileAttributeView (#1783) 2024-12-20 14:44:52 +01:00
Michiel Borkent
3d909f04b8 Disable test for Windows 2024-12-20 12:43:33 +01:00
Ryan Tate
c9b9ad64fc
Add java.nio.file.attribute.PosixFileAttributes (#1782)
* Add java.nio.file.attribute.PosixFileAttributes

* Update Changelog
2024-12-20 12:17:08 +01:00
Michiel Borkent
9070db46df changelog 2024-12-19 22:50:03 +01:00
Ian Fernandez
b16ecfdf6c
Add RT iter to babashka (#1781) 2024-12-19 22:46:34 +01:00
Michiel Borkent
1874da1d2d
Bump core.async to 1.7.701 (#1778) 2024-12-18 10:42:55 +01:00
Michiel Borkent
c89ac0bd7f Bump github to macos-13 2024-12-12 10:32:07 +01:00
Michiel Borkent
def5d8fd37 Add java.util.concurrent.CompletionStage 2024-12-12 10:17:48 +01:00
Michiel Borkent
2932d82a65 Bump SCI 2024-12-12 10:17:29 +01:00
Michiel Borkent
d8d6876832 Bump fs 2024-12-04 10:56:06 +01:00
Michiel Borkent
c538d5edbd Bump deps.clj 2024-12-03 11:29:57 +01:00
Michiel Borkent
a5ec09087e Changelogs 2024-12-03 10:34:12 +01:00
Michiel Borkent
5e4ce8e093 Fix java.security interop 2024-12-03 10:31:57 +01:00
Michiel Borkent
c1412f9b31 Add java.security.Signature 2024-12-02 20:20:16 +01:00
Michiel Borkent
f5d7c1bb6e
Add more java.security and javax.crypto classes (#1770)
---------

Signed-off-by: Loukas Agorgianitis <loukas@agorgianitis.com>
Co-authored-by: Loukas Agorgianitis <loukas@agorgianitis.com>
2024-12-02 19:49:12 +01:00
Michiel Borkent
1deae725ae Fix #1768: add taoensso.timbre/color-str 2024-11-29 11:32:19 +01:00
Michiel Borkent
42b9ff8f25 Bump clj-yaml 2024-11-25 12:31:39 +01:00
Michiel Borkent
3442f1e505
move locking to SCI (#1765) 2024-11-24 11:58:27 +01:00
Michiel Borkent
f0943d8a14 Bump deps.clj 2024-11-22 13:14:31 +01:00
Michiel Borkent
dff3b526e9 sync process 2024-11-21 20:42:58 +01:00
Kursat Aktas
afb566f600
Introducing Babashka Guru on Gurubase.io (#1763)
Signed-off-by: Kursat Aktas <kursat.ce@gmail.com>
2024-11-18 20:35:50 +01:00
Michiel Borkent
3cc45ec8a7 sync fs 2024-11-18 18:03:08 +01:00
Michiel Borkent
d670bbb245 Bump babashka.cli 2024-11-18 11:07:29 +01:00
Michiel Borkent
62cab79ce6 Bump SCI which has volatile? 2024-11-16 13:58:49 +01:00
Michiel Borkent
f4292e1038
Fix #1760: expose more stuff for fireworks lib (#1762)
Co-authored-by: Jeremiah Coyle <jcoyle@gmail.com>
2024-11-16 10:47:25 +01:00
Michiel Borkent
286e03ee24 Version bump 2024-11-12 10:17:54 +01:00
Michiel Borkent
cd362fbf01 v1.12.195 2024-11-12 09:52:35 +01:00
Michiel Borkent
ccebfa630f Use safer detection of process command 2024-11-11 22:44:02 +01:00
Michiel Borkent
5ab8b3f975 changelogs 2024-11-11 20:55:10 +01:00
Michiel Borkent
2df2e7661b Bump http-client 2024-11-11 20:52:06 +01:00
Michiel Borkent
7121253f75
Add hickory tests (#1758) 2024-11-11 20:10:46 +01:00
Michiel Borkent
e5dde61ba8 sync SCI 2024-11-11 18:26:02 +01:00
Michiel Borkent
6a5c13a6f8 changelog 2024-11-11 10:58:43 +01:00
Michiel Borkent
b981921a00 changelog 2024-11-11 10:57:58 +01:00
Michiel Borkent
eaf760d62f
Add Jsoup (#1756) 2024-11-11 10:51:14 +01:00
Michiel Borkent
b59bfcb7e6
Upgrade timbre (#1755) 2024-10-30 14:41:46 +01:00
Michiel Borkent
0138990139 sync sci 2024-10-30 11:07:12 +01:00
Michael Glaesemann
5acf04dcf1
Include java.lang.SecurityException (#1753)
* Include java.lang.SecurityException

java.net.http.HttpClient, included in Babashak, can throw java.lang.SecurityException

https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpClient.html

* Update Changelog for https://github.com/babashka/babashka/issues/1752
2024-10-24 16:25:55 +02:00
lvh
aabd35eeaa
Document that tests should prefer to hit public APIs (#1751) 2024-10-23 18:07:14 +02:00
Michiel Borkent
ec6a6a5cdb Bump SCI 2024-10-17 12:37:54 +02:00
Michiel Borkent
b19d5f9bff Fix compile script, fixex #1750 2024-10-15 19:00:12 +02:00
Michiel Borkent
5902852ff9
Fix #1748: add clojure.core/ensure (#1749) 2024-10-15 15:08:47 +02:00
Rahuλ Dé
24c644d9f0
[describe] add commit SHA to describe (#1747) 2024-10-13 20:07:04 +02:00
dependabot[bot]
01cb6112f9
Bump actions/download-artifact from 2 to 4.1.7 in /.github/workflows (#1717)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 2 to 4.1.7.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v2...v4.1.7)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-12 13:05:43 +02:00
Michiel Borkent
7ff62d91a2 Version bump 2024-10-12 11:49:26 +02:00
Michiel Borkent
89eed2ed44 v1.12.194 2024-10-12 11:30:21 +02:00
Michiel Borkent
ed8aa97d34
GraalVM 23 (#1745) 2024-10-12 11:28:58 +02:00
Michiel Borkent
34b5e71465
Fix #1743: fix fully qualified instance method in call pos. with GraalVM 22 (#1744) 2024-10-12 10:41:45 +02:00
Michiel Borkent
1d5a777b81 Version bump 2024-10-11 15:17:09 +02:00
Michiel Borkent
2519a284f4 changelog 2024-10-11 15:17:00 +02:00
Michiel Borkent
0f9a0fe622 v1.12.193 2024-10-11 14:50:35 +02:00
Michiel Borkent
b6f844ba0c Fix #1741 2024-10-11 14:44:01 +02:00
Michiel Borkent
ab1ee96335 Bump SCI [skip ci] 2024-10-11 14:26:14 +02:00
Michiel Borkent
a535a5faec Bump SCI 2024-10-11 14:20:38 +02:00
Michiel Borkent
4715d13f71 Bump SCI, add note 2024-10-11 12:54:30 +02:00
Michiel Borkent
8b46e030ca use new impl-java 2024-10-10 21:04:48 +02:00
Michiel Borkent
6ca28c642c New impl-java with release 8 2024-10-10 21:04:20 +02:00
Michiel Borkent
c3c2c8b108
Clojure 1.12 IFn coercion 2024-10-10 20:54:29 +02:00
Michiel Borkent
bc1c35790e
Bump SCI: support new Clojure 1.12 interop (#1740) 2024-10-10 14:01:22 +02:00
Michiel Borkent
50e8a74321 Bump SCI 2024-10-06 15:04:34 +02:00
Michiel Borkent
70b3e5c999 Bump ubuntu image in docker 2024-10-02 15:33:30 +02:00
Michiel Borkent
31a5ec5c71
Upgrade machine executor (#1736) 2024-10-02 15:01:54 +02:00
Michiel Borkent
96807375e0 Add tools.reader.edn/read 2024-10-02 14:10:09 +02:00
Michiel Borkent
c402c01861 Bump SCI reflector compiled for java8 2024-10-01 11:08:35 +02:00
Michiel Borkent
08a08ef957 Bump SCI reflector 2024-10-01 11:00:21 +02:00
Michiel Borkent
6a420c9bfd Bump SCI 2024-09-30 21:13:30 +02:00
Michiel Borkent
030d6ba889
SCI issue 928: record constructor + opt. meta + ext map (#1732) 2024-09-30 15:13:36 +02:00
Stephan Renatus
15f5918e58
Dockerfile improvements (#1729) 2024-09-20 13:31:52 +02:00
Michiel Borkent
0c6f8b6806 Version bump 2024-09-12 20:20:50 +02:00
Michiel Borkent
7128d65de7 v1.4.192 2024-09-12 18:46:05 +02:00
Michiel Borkent
2bf95f60e7 Fix #1676: support latest release of at-at lib 2024-09-12 18:43:26 +02:00
Michiel Borkent
0685424ac3 Fix #1707: support aset on primitive array 2024-09-12 18:20:51 +02:00
Michiel Borkent
ecb0fa5cac Fix #1716: expose babashka.http-client.interceptors namespace 2024-09-12 16:48:00 +02:00
Michiel Borkent
e0a303c484
Fix #1719: add new clojure 1.12 clojure.repl.deps namespace (#1724) 2024-09-12 16:41:27 +02:00
Michiel Borkent
5bc1df73af Bump rewrite-clj 2024-09-12 16:30:53 +02:00
Michiel Borkent
ca26b22bf9 changelog 2024-09-11 15:37:30 +02:00
Michiel Borkent
aa566ed15c Bump deps.clj 2024-09-11 15:36:21 +02:00
Michiel Borkent
2492e71dcc clj-yaml v1.0.28 2024-09-10 15:45:18 +02:00
Michiel Borkent
bbf9933941 upload artifact 2024-09-10 10:21:36 +02:00
Michiel Borkent
ea660e956f Bump http-client to 0.4.21 2024-09-10 10:16:58 +02:00
Michiel Borkent
bc413b654b
Fix #1722: add new clojure 1.12 vars (#1723) 2024-09-06 18:37:26 +02:00
Michiel Borkent
a415139b3b
Fix #1720: include clojure.java.process (#1721) 2024-09-06 17:32:16 +02:00
Michiel Borkent
0147195e8c
Clojure 1.12 (#1718) 2024-09-06 14:37:00 +02:00
Michiel Borkent
d226fe785a Bump edamame 2024-08-22 20:23:57 +02:00
Michiel Borkent
2bb865917a README 2024-08-16 15:40:34 +02:00
Michiel Borkent
16eebb60a3 Bump http-client 2024-08-13 14:48:36 +02:00
Michiel Borkent
da9fcbf10d
Add java.io.LineNumberReader (#1714) 2024-08-10 13:32:24 +02:00
Michiel Borkent
cdfc664682 Bump sci 2024-08-09 18:25:56 +02:00
Michiel Borkent
93e398f288 readme 2024-08-06 11:21:39 +02:00
Michiel Borkent
880b4ebe3f Bump deps.clj 2024-08-06 11:21:20 +02:00
Michiel Borkent
366cbed689 changelogs 2024-08-05 12:02:29 +02:00
Michiel Borkent
d17a5342d2 Bump fs 2024-08-05 12:00:56 +02:00
Michiel Borkent
1372b3d8a0 Bump process 2024-07-27 00:15:17 +02:00
Michiel Borkent
b144c81fbb Bump process + SCI 2024-07-26 20:08:47 +02:00
Lee Read
0527f6a372
docs: dev: windows set example misleading (#1713)
The example I provided implied that the set applied only to the next
command. I've learned that this is not the case.

Also: mention what shell examples apply to.
2024-07-26 19:50:40 +02:00
Lee Read
e258358170
Support running of new babashka.process tests (#1711)
Default `BABASHKA_TEST_ENV` to `jvm` for libtests
CI already understands this need, but defaulting in-script avoids
having devs to understand/remember it too.

Alter PATH as required for new babashka.process tests.

In support of babashka/process#163, babashka/process#164
2024-07-26 12:56:47 +02:00
Lee Read
58def24712
docs: dev: windows tips (#1712)
Some extra notes for Windows that I expect will benefit others and also
future-me!
2024-07-26 12:56:34 +02:00
Michiel Borkent
f335fe51ff Bump SCI: detect duplicate keys in dynamic set of map literal 2024-07-23 13:01:12 +02:00
Michiel Borkent
83918c4b80
Fix #1598: use Rosetta on CircleCI to build x64 images (#1708) 2024-06-30 09:28:56 +02:00
Michiel Borkent
2da875c8f9 sync sci 2024-06-29 20:52:16 +02:00
Michiel Borkent
7abd0000c7 Version bump 2024-06-19 14:52:35 +02:00
Michiel Borkent
19804e4bc7 v1.3.191 2024-06-19 14:13:31 +02:00
Michiel Borkent
af3ae5fa79 Changelogs 2024-06-19 11:34:44 +02:00
Michiel Borkent
bf183a33a8
Add bytechannel + more tests (#1706)
Co-authored-by: Jarppe <jarppe@metosin.fi>
2024-06-18 09:08:12 +02:00
Michiel Borkent
616de196f8
Bump bencode (#1703) 2024-06-12 19:15:24 +02:00
Bob
c3c0bf3cef
catch exceptions from resolving symbolic links during bb.edn lookup (#1702) 2024-06-08 20:56:07 +02:00
Michiel Borkent
ea2c3f06ec bump sci 2024-06-06 12:15:50 +02:00
Bob
3068428578
Fix #1696: make transcriptor work (#1699) 2024-05-30 15:11:09 +02:00
Michiel Borkent
702fdf8108 Skip curl test until Alpine has working curl again 2024-05-27 23:01:57 +02:00
Michiel Borkent
7e8e51b882 debug 2024-05-27 22:46:37 +02:00
Michiel Borkent
976d0fcb6d Debug Alpine 2024-05-27 22:12:21 +02:00
Michiel Borkent
c60d139dbf Debug alpine 2024-05-27 20:52:49 +02:00
Bob
116ee1191c
Fix #1686: do not fetch deps/invoke java when deps aren't needed (#1698) 2024-05-27 10:38:27 +02:00
Bob
035a8268ba
Fix #1695: make CLI args available to REPL (#1697) 2024-05-26 11:41:47 +02:00
Michiel Borkent
5cd2b9d6e6 Bump fs 2024-05-17 11:43:49 +02:00
Noah
82291325de
Update org.flatland/ordered to 1.15.12 (#1694) 2024-05-14 10:54:45 +02:00
Noah
fa0be7ecbf
Fix #1692: expose ordered-set 2024-05-13 22:20:16 +02:00
Michiel Borkent
6d4737ce77 bump deps.clj 2024-05-09 21:49:36 +02:00
Michiel Borkent
da44bd4940 Bump bb.cli 2024-04-30 16:34:38 +02:00
Michiel Borkent
b47a5cc21d
Fix #1688: use-fixtures should add metadata to *ns* (#1689)
* Fix #1688: use-fixtures should add metadata to *ns*

* fix test
2024-04-28 16:22:47 +02:00
Michiel Borkent
ba35032253 Bump deps.clj 2024-04-26 20:21:20 +02:00
Michiel Borkent
11610d6ebe bb http-client v0.4.18 2024-04-25 10:44:05 +02:00
Michiel Borkent
37849d72ad Bump SCI 2024-04-25 10:43:44 +02:00
Michiel Borkent
375c9d3550 Version bump 2024-04-17 11:30:22 +02:00
Michiel Borkent
d7499210ec v1.3.190 2024-04-17 11:09:36 +02:00
Michiel Borkent
3d671ffcb6 Sync fs 2024-04-13 11:39:33 +02:00
Michiel Borkent
4d1984410b Bump fs 2024-04-12 20:39:13 +02:00
Michiel Borkent
0d4096dcd1 changelog 2024-04-12 12:13:42 +02:00
Michiel Borkent
1e4236e22d v0.4.17 2024-04-12 11:52:57 +02:00
Michiel Borkent
717084a71d sync deps 2024-04-12 11:48:38 +02:00
Michiel Borkent
3608c6ab81 changelog 2024-04-04 19:41:09 +02:00
Gabriel Marin
67d8e04db5
bump cheshire (#1685) 2024-04-04 19:39:37 +02:00
Michiel Borkent
71c5e7c45b doc 2024-03-21 15:30:07 +01:00
Michiel Borkent
3cca11f8d1
Upgrade to GraalVM 22 (#1684) 2024-03-21 12:19:13 +01:00
Michiel Borkent
655760d2a9 changelog 2024-03-18 11:21:51 +01:00
Michiel Borkent
7b84a9d256
Fix #1679: issue with wrapping taoensso.timbre/log! (#1683) 2024-03-15 19:19:06 +01:00
Michiel Borkent
1a454b10bb
Add java.lang.ThreadLocal (#1682) 2024-03-14 16:57:06 +01:00
Michiel Borkent
81819deb0a
Add java.util.concurrent.CountDownLatch 2024-03-13 09:08:22 +01:00
Michiel Borkent
8a0f66f3c1 Bump cli 2024-03-12 11:58:26 +01:00
Michiel Borkent
b53e265af3 Bump deps.clj 2024-03-11 11:38:28 +01:00
Michiel Borkent
7530e6a57f Bump clojure 1.11.2 2024-03-08 20:11:47 +01:00
Michiel Borkent
2ee8185269
Bump httpkit to 2.8.0-RC1 2024-03-01 12:27:09 +01:00
Michiel Borkent
ff59956602 Bump process 2024-02-29 17:21:21 +01:00
Michiel Borkent
a176584eda sync pod lib 2024-02-27 17:07:05 +01:00
Michiel Borkent
43d9816bd6 Bump process 2024-02-27 10:58:14 +01:00
Michiel Borkent
e1a12037cd Changelog 2024-02-22 15:44:37 +01:00
Michiel Borkent
86ac0c2431 Version bump 2024-02-22 15:40:57 +01:00
Michiel Borkent
67ae82ee18 v1.3.189 2024-02-22 14:18:51 +01:00
Michiel Borkent
d8e0c6b476 Bump cli 2024-02-22 14:08:23 +01:00
Michiel Borkent
12c89f79c6 Fix #1675: add hash-unordered-coll 2024-02-22 11:41:29 +01:00
Michiel Borkent
67dc3af22d
Add more sslsocket classes (#1674) 2024-02-22 11:15:11 +01:00
Anders Olsson
1f0f932c5e
Suggest using mise instead of asdf (#1673)
asdf adds 120-150 ms to startup time, multiplying bb startup time by a factor of 5 or so.
2024-02-18 23:42:24 +01:00
Michiel Borkent
fa579b74df Bump babashka.cli 2024-02-13 15:58:54 +01:00
Michiel Borkent
e7d964bb0a
Bump http-client (#1670) 2024-02-13 11:34:53 +01:00
Imre Kószó
771f69d922
Update clojure example to new calling convention (#1667)
This way work both from scripts and tasks
2024-02-06 14:23:08 +01:00
Gert Goet
3e4c5861e7
Update CHANGELOG.md (#1666)
inc year
2024-02-06 14:17:57 +01:00
Michiel Borkent
68e8ac6e10 changelog 2024-02-05 12:34:16 +01:00
Michiel Borkent
32078f8259 SCI: read-string should use non-indexing reading, fixes #1665 2024-02-05 12:33:35 +01:00
Michiel Borkent
c9a63af40f Support reader conditional in .cljc file 2024-02-02 19:43:14 +01:00
Michiel Borkent
87f9f6f206 Bump edamame 2024-02-01 11:04:08 +01:00
Michiel Borkent
df477adbb0
Fix #1661: follow symlink when reading adjacent bb.edn (#1663) 2024-01-30 11:56:22 +01:00
Michiel Borkent
35e17bd46a
Upgrade to graal 21.0.2, fixes #1632 (#1662) 2024-01-29 12:02:04 +01:00
Michiel Borkent
9da2afc4b5 Fix #1660: add :deps-root to hash to avoid caching issue with deps.clj 2024-01-23 16:57:22 +01:00
Michiel Borkent
f24c75a054 Version bump 2024-01-12 20:50:19 +01:00
Michiel Borkent
30534691ba v1.3.188 2024-01-12 20:30:24 +01:00
Michiel Borkent
6dc3110b3c
Fix #1658: fix command-line args with overlapping bb options (#1659) 2024-01-12 20:29:40 +01:00
Michiel Borkent
ecbbd7ab84
medium mac still works on circle (#1656) 2024-01-12 17:15:10 +01:00
Michiel Borkent
4ae9d27171 try 14.0.1 2024-01-12 17:08:05 +01:00
Michiel Borkent
86ec03e2f4 try 15.1 2024-01-12 17:06:09 +01:00
Michiel Borkent
39a9ed69d6 try 15.2.0 2024-01-12 17:04:26 +01:00
Michiel Borkent
9653435460 try xcode 15 2024-01-12 16:39:54 +01:00
Michiel Borkent
d467bf53c8 Bump fs: copy-tree with read-only dirs 2024-01-12 16:20:35 +01:00
Michiel Borkent
6bfb2374b8 Version bump 2024-01-09 17:50:34 +01:00
Michiel Borkent
fe940c73c9 v1.3.187 2024-01-09 17:31:21 +01:00
Michiel Borkent
ea2c439369 changelog 2024-01-09 16:54:01 +01:00
Michiel Borkent
c48d2f7a90 Add clojure.reflect/reflect 2024-01-09 16:38:28 +01:00
Michiel Borkent
b337e032b6 #1410: better error message when exec fn doesn't exist 2024-01-09 15:11:42 +01:00
Michiel Borkent
2166c42de2 Fix #1586: warn when config file doesn't exist and debug is enabled 2024-01-09 14:36:49 +01:00
Michiel Borkent
d85c86af2c Fix #1652: allow bb.edn to be empty 2024-01-09 12:26:38 +01:00
Michiel Borkent
5b471cb5e2 Bump cli 2024-01-04 22:06:23 +01:00
Michiel Borkent
629c338b14 Bump deps.clj 2023-12-31 16:21:16 +01:00
Michiel Borkent
ab28e4c465 Fix #1653: add java.time.temporal.WeekFields 2023-12-22 12:23:13 +01:00
Michiel Borkent
54ea4b460d Bump fs to 0.5.20 2023-12-21 21:15:00 +01:00
Michiel Borkent
bf7f42ce73
Compatibility with plumbing.core (#1650) 2023-12-20 16:29:04 +01:00
Michiel Borkent
53d16eb9a0 Bump deps.clj 2023-12-16 11:56:08 +01:00
paintparty
eb69baeaa7
Fix #1645: support clojure.lang.LongRange instance check (#1649) 2023-12-16 10:09:26 +01:00
Michiel Borkent
6052b9ba35 Allow capturing env vars at build time, fixes #1647 2023-12-15 18:20:33 +01:00
Michiel Borkent
4a1b26a6be Fix tests 2023-12-15 18:07:47 +01:00
Michiel Borkent
28f9879e40 Fix #1646: command-line-args are dropped when file exists with same name 2023-12-15 17:19:58 +01:00
Michiel Borkent
0e1694f586 Add tools reader tests 2023-12-09 11:49:57 +01:00
Michiel Borkent
2ee7a0d12e Fix namespace attributes 2023-12-09 11:18:01 +01:00
Michiel Borkent
4af5f1fd61 tools reader compat for shadow.css 2023-12-09 11:07:13 +01:00
Michiel Borkent
fc19382b5e Sync SCI 2023-12-01 13:55:29 +01:00
Michiel Borkent
9e1452867e fill 2023-11-24 11:18:05 +01:00
Michiel Borkent
2a432d3e80 changelog 2023-11-14 10:47:30 +01:00
Michiel Borkent
1dbffac334 Runnable import 2023-11-14 10:46:49 +01:00
Michiel Borkent
aa654a9ead
Add java.util.concurrent.ScheduledFuture (#1643) 2023-11-13 10:33:57 +01:00
Michiel Borkent
9ded5fea0d Bump SCI: allow catch to be used as var name 2023-11-12 11:49:29 +01:00
Michiel Borkent
6353ab9de9 Version bump 2023-11-02 14:19:02 +01:00
Michiel Borkent
ce403671be trigger CI 2023-11-02 14:01:02 +01:00
Michiel Borkent
cedbff7696 v1.3.186 2023-11-02 13:31:58 +01:00
Michiel Borkent
15cff2eb7b v1.3.186 2023-11-02 13:31:07 +01:00
Michiel Borkent
2e23471612 Confirm fix for#1639 by adding test 2023-11-02 13:30:38 +01:00
Michiel Borkent
6b52831a21
Upgrade to GraalVM 21.0.1 (#1640) 2023-11-02 13:25:31 +01:00
Eugen Stan
fdd2d68e1d
Include javax.crypto.spec.IvParameterSpec so I can implement ansible vault decryption (#1638)
Please consider adding this class to bb.

I'm looking to implement ansible-vault decryption in babashka and I need the above class. 

Decryption works in Clojure but fails with missing class for babashka. 

After this I need to fix crypto padding and all is good :). 

https://docs.ansible.com/ansible/latest/vault_guide/vault_using_encrypted_content.html#format-of-files-encrypted-with-ansible-vault
2023-10-31 00:03:13 +01:00
Michiel Borkent
838608647a Bump SCI: add time macro 2023-10-30 18:23:57 +01:00
Michiel Borkent
e746593f14 changelog 2023-10-29 14:47:55 +01:00
Michiel Borkent
3735135c05 Bump SCI 2023-10-27 15:04:15 +02:00
Michiel Borkent
7ebe96773d
Simplify Graal argument (#1636) 2023-10-23 18:01:29 +02:00
Michiel Borkent
2fcf9c682a nrepl: ns-list op 2023-10-22 11:49:48 +02:00
Michiel Borkent
36e9732549 Expose taoensso.timbre.appenders.core 2023-10-19 14:59:06 +02:00
Michiel Borkent
a5e4dfe663 Fix https://github.com/babashka/babashka.nrepl/issues/68 2023-10-14 21:11:49 +02:00
Michiel Borkent
9da7af58b3 Add java.net.URISyntaxException 2023-10-12 16:08:31 +02:00
Michiel Borkent
f1084c1f36
Binary test (#1635) 2023-10-12 13:12:29 +02:00
Michiel Borkent
e0598470be Bump deps.clj 2023-10-12 11:43:58 +02:00
Michiel Borkent
d854de883e
Bump http-kit (#1634) 2023-10-11 16:19:06 +02:00
Michiel Borkent
80a8097a63 Don't parse other arguments in self-contained binary 2023-10-11 15:00:08 +02:00
Michiel Borkent
5bb98159be
Invoke self as uberjar (#1633) 2023-10-11 11:50:26 +02:00
Michiel Borkent
69b83c3678 sync fs 2023-10-11 10:47:51 +02:00
Michiel Borkent
857ecc3111 Bump fs 2023-10-10 15:45:48 +02:00
Michiel Borkent
dbc766f58a Add java.security.spec.PKCS8EncodedKeySpec 2023-10-10 11:39:49 +02:00
Michiel Borkent
79a133ee13 Add java.security.KeyFactory 2023-10-10 11:23:31 +02:00
Michiel Borkent
7ecd2fe59e Partial fix for #1632 2023-10-09 14:58:33 +02:00
Michiel Borkent
0b892ad8e5 Fix babashka.process/exec wrt *defaults* 2023-10-08 21:20:17 +02:00
Michiel Borkent
66b29b9061 Bump sci [skip ci] 2023-10-08 21:19:41 +02:00
Michiel Borkent
1dff46699a bump deps.clj and fs 2023-10-07 11:43:02 +02:00
Michiel Borkent
ae01170f92 changelog 2023-09-28 16:23:36 +02:00
Michiel Borkent
996c96761e Version bump 2023-09-28 16:17:45 +02:00
Michiel Borkent
ef5d2fdf3a v1.3.185 2023-09-28 15:57:06 +02:00
Michiel Borkent
9ae36491b7 Fix test 2023-09-28 15:27:03 +02:00
Michiel Borkent
d1580f1a72
Fix [#babashka.nrepl/66](babashka/babashka.nrepl#66) (#1630) 2023-09-28 14:55:59 +02:00
Michiel Borkent
8788a3c482 Bump babashka.cli to 0.7.53 2023-09-28 13:18:26 +02:00
Michiel Borkent
5cab060bbb Bump deps.clj 2023-09-28 12:50:35 +02:00
Michiel Borkent
d984eda226 Update Github Actions for GraalVM 21 2023-09-28 12:01:19 +02:00
Michiel Borkent
c8324ac887 Compatibility with older architectures 2023-09-28 11:54:37 +02:00
Michiel Borkent
e938a58e06 Changelogs 2023-09-27 14:26:33 +02:00
Michiel Borkent
c04b83811c
Use pgo to speed up loop performance (#1629) 2023-09-27 14:25:16 +02:00
Rahuλ Dé
6c1a66e853
Use Oracle GraalVM 21 (#1624)
---------

Co-authored-by: Michiel Borkent <michielborkent@gmail.com>
2023-09-27 12:23:57 +02:00
Michiel Borkent
ef50677275
Fix #1513: interop on Thread/sleep with non-long (#1628) 2023-09-26 21:16:22 +02:00
Michiel Borkent
8a8c2dcb46 Bump process 2023-09-26 20:42:24 +02:00
Michiel Borkent
7c5a2775df deps.clj 2023-09-26 19:37:33 +02:00
Michiel Borkent
0b61f4d3ab
Use new :static-methods functionality in SCI (#1626) 2023-09-26 17:46:50 +02:00
Michiel Borkent
e14af7b629 Make interop test OS-agnostic 2023-09-25 15:23:19 +02:00
Michiel Borkent
bc5e6b6d52
Add interop on java.util.stream.IntStream (#1625) 2023-09-25 14:52:26 +02:00
Michiel Borkent
c2c7053120
Bump cheshire (#1623) 2023-09-21 03:48:21 -05:00
Michiel Borkent
6467316dc8 Update rewrite-clj tests 2023-09-15 16:03:05 +02:00
Michiel Borkent
ad4935077d Bump rewrite-clj to 1.1.47 2023-09-15 15:18:09 +02:00
Michiel Borkent
ad6cd5989f
Fix #1619: fix reflection issue with core.async/timeout (#1620) 2023-09-05 12:53:42 +02:00
Michiel Borkent
b1d2dc599b Bump babashka.http-client to 0.4.15 2023-09-04 16:09:16 +02:00
Michiel Borkent
af507b2894
Use macos.x86.large.gen2 resource (#1618) 2023-09-03 12:36:19 +02:00
Michiel Borkent
c91ccc7b93 sci (minor) [skip ci] 2023-09-03 12:16:11 +02:00
Michiel Borkent
2eed1b810b Bump SCI (only JS changes) 2023-08-30 15:50:44 +02:00
Peter Strömberg
ce9a0f71e5
Tweak Babashka Babooka copy (#1617)
Straight out recommending Babashka Babooka, instead of conditioning the recommendation on that the user has read Clojure for the Brave and True. Also adding some little info about Daniel.
2023-08-29 10:38:04 +02:00
Michiel Borkent
0d20cdf696 Version bump 2023-08-22 15:25:19 +02:00
Michiel Borkent
6bee6b6a89 v1.3.184 2023-08-22 15:01:17 +02:00
Michiel Borkent
dac6dcd6d5 deps.clj: more remove debug 2023-08-22 14:54:06 +02:00
Michiel Borkent
d8c41351f5 Remove debugging 2023-08-22 14:50:52 +02:00
Michiel Borkent
c1b82db587 Version bump 2023-08-22 14:27:37 +02:00
Michiel Borkent
26c6c5ce18 v1.3.183 2023-08-22 13:37:28 +02:00
Michiel Borkent
3ded3b9546
Fix #1568: warn when task overrides built-in command (#1612) 2023-08-22 13:36:49 +02:00
Michiel Borkent
10c315663f Bump http-client 2023-08-22 10:34:25 +02:00
Michiel Borkent
5f82d40fe6 Bump http-client 2023-08-22 10:33:35 +02:00
Michiel Borkent
81d260e473
Fix #1610: expose babashka.http-client.websocket namespace (#1611) 2023-08-20 21:20:13 +02:00
Michiel Borkent
1881a75a1d
Expose selmer.parser/resolve-arg (#1609) 2023-08-20 20:05:25 +02:00
Michiel Borkent
f470dba671
Fix #1600: use pagesize of 64K on linux aarch64 (#1606)
Fix #1600: use pagesize of 64K on linux aarch64
2023-08-17 15:12:26 +02:00
Michiel Borkent
09bbd9eb34
Fix #1604: throw on missing namespace (#1605) 2023-08-16 20:19:20 +02:00
Michiel Borkent
7dc6b713d0 Bump deps.clj - 1.11.1.1403 2023-08-15 11:08:36 +02:00
Michiel Borkent
42d9d77e76 flaky test 2023-08-11 17:27:57 +02:00
Michiel Borkent
df5b115aab
Bump clj-yaml to 1.0.27 (#1603) 2023-08-11 17:13:16 +02:00
Michiel Borkent
2ee0df4909
Fix #1592 (2): reduce image size (#1602) 2023-08-11 16:41:25 +02:00
Michiel Borkent
ea4ebab807
Fix #1599: propagate run error (#1601) 2023-08-11 13:22:50 +02:00
Michiel Borkent
666ce9adc9 babashka.nrepl minor 2023-08-10 20:31:04 +02:00
Michiel Borkent
601e6e82cd Revert nREPL middleware stuff 2023-08-10 20:19:41 +02:00
Michiel Borkent
6e088272b7 Bump SCI: pick up on new file metadata on second def 2023-08-10 20:15:30 +02:00
Michiel Borkent
2353827e43 Bump deps shas 2023-08-08 16:10:18 +02:00
Michiel Borkent
a8e7d35dfa Disable #1596 test 2023-08-08 11:15:35 +02:00
Michiel Borkent
b6e8f86595 Bump http-client 2023-08-08 11:10:20 +02:00
Chuck Cassel
3370d7a063
Fix #1596: Escape URLs for clojure.java.browse/browse-url on Windows (#1597) 2023-08-08 10:49:07 +02:00
Michiel Borkent
d1e36be9d9 Bump SCI and fs 2023-08-07 11:27:51 +02:00
Michiel Borkent
83c02cb58b
Fix #1592: expose sci.core in babashka (#1593) 2023-08-04 11:43:14 +02:00
Michiel Borkent
4c7bbeeb3b Version bump 2023-07-21 15:49:33 +02:00
Michiel Borkent
560369e294 v1.3.182 2023-07-20 11:32:39 +02:00
Michiel Borkent
94c5141a3e Bump edamame 2023-07-12 21:07:08 +02:00
didibus
b749563003
Bumping selmer version to 1.12.59 (#1588)
* Bumping selmer version to 1.12.59

* Copied over resolve-arg tests to Selmer's lib test.
2023-07-09 21:00:07 +02:00
Michiel Borkent
af0937f060 Bump deps.clj 2023-07-07 13:21:54 +02:00
Michiel Borkent
85ecdab0a5 Bump babashka.http-client 2023-07-06 12:51:25 +02:00
Michiel Borkent
3b251c1b38 Add javax.net.ssl.X509ExtendedTrustManager + proxy 2023-07-05 21:19:50 +02:00
Michiel Borkent
657adff336
Expose more selmer.filter vars (#1585) 2023-07-02 17:02:19 +02:00
Michiel Borkent
a2f70d8324 Bump deps.clj [skip ci] 2023-07-01 19:39:35 +02:00
Michiel Borkent
fb3fa03074 Bump process and sci 2023-06-30 15:22:56 +02:00
Teodor Heggelund
de06c199f1
bb print-deps: sort dependencies (#1582)
* `bb print-deps`: sort dependencies

Co-authored-by: Teodor Heggelund <git@teod.eu>
2023-06-28 18:17:06 +02:00
Michiel Borkent
85eef7d6f7
Upgrade hiccup (#1580) 2023-06-23 12:41:39 +02:00
Michiel Borkent
bf306bb407 Fix #1579: add clojure.tools.reader/resolve-symbol 2023-06-23 11:23:31 +02:00
Michiel Borkent
056254dc9d deps.clj: print repl-aliases in -Sdescribe 2023-06-21 19:15:58 +02:00
Marek J
e3228fe358
Fix README.md prepending the command with bb (#1578) 2023-06-15 15:35:06 +02:00
Michiel Borkent
1010b7f114 Version bump 2023-06-13 12:34:42 +02:00
Michiel Borkent
bef5ccf229 v1.3.181 2023-06-13 11:34:48 +02:00
Michiel Borkent
6760a2b844 Bump deps.clj 2023-06-13 11:33:28 +02:00
Michiel Borkent
fa10070013 deps.clj: better error message when tools zip is corrupt 2023-06-12 23:02:15 +02:00
Michiel Borkent
fb3e04cffe Add zip classes 2023-06-12 21:24:30 +02:00
Michiel Borkent
7b7feb7034 Fix #1575: command line parsing problem with -e + *command-line-args* 2023-06-11 11:11:10 +02:00
Michiel Borkent
c3cf8f5330 Bump deps.clj 2023-06-10 23:05:06 +02:00
Michiel Borkent
caf05979c3
Add malli-cli to projects (#1574)
Co-authored-by: 胡雨軒 Петр <3686502+piotr-yuxuan@users.noreply.github.com>
2023-06-08 08:45:24 +02:00
Michiel Borkent
9356653a09 changelog 2023-06-05 20:45:17 +02:00
Michiel Borkent
aa7fb0c62a Bump fs 2023-06-04 21:22:29 +02:00
Michiel Borkent
45ff85e1a0 fix link 2023-06-02 16:21:22 +02:00
Michiel Borkent
9ff8003c1b mastodon 2023-06-02 15:52:26 +02:00
Michiel Borkent
b46fc49a5d news 2023-06-02 15:51:41 +02:00
Michiel Borkent
9edce22ea7 no vids 2023-06-02 15:49:03 +02:00
Michiel Borkent
56f5378702 sponsors 2023-06-02 15:48:32 +02:00
Michiel Borkent
a2398705bf sponsors 2023-06-02 15:48:11 +02:00
Michiel Borkent
c74d9a6f0a news 2023-06-02 15:47:30 +02:00
Michiel Borkent
d27287b837 sci [skip ci] 2023-06-01 22:08:59 +02:00
Michiel Borkent
d677a2b65a
Upgrade httpkit to 2.7.0-RC1 2023-05-31 11:50:00 +02:00
Michiel Borkent
efb947ec03 Fix #1567: always use static binary on linux aarch64 2023-05-29 11:13:17 +02:00
Lee Read
a8c9526be1
lib tests: include new babashka/process exec tests (#1566)
see https://github.com/babashka/process/pull/131#issuecomment-1558113387
2023-05-29 10:00:45 +02:00
Michiel Borkent
0d1ffd0c9f changelog 2023-05-28 11:53:46 +02:00
Michiel Borkent
bfcec721c9 Version bump 2023-05-28 11:53:14 +02:00
Michiel Borkent
3ade21918f v1.3.180 2023-05-28 11:29:18 +02:00
Michiel Borkent
ddfc93d7e5 changelog 2023-05-27 21:27:41 +02:00
Michiel Borkent
b44167e5c0 Update changelogs 2023-05-27 21:26:58 +02:00
Michiel Borkent
8a0fe19ab3 process 2023-05-27 17:56:33 +02:00
Michiel Borkent
a3eb37e4a6 process 2023-05-27 16:33:52 +02:00
Michiel Borkent
44465990a8 Bump process 2023-05-27 16:13:30 +02:00
Michiel Borkent
236768cada Bump fs 2023-05-24 16:15:56 +02:00
Michiel Borkent
0f85b02a82 mention conf in readme 2023-05-20 13:41:03 +02:00
Michiel Borkent
b1a5f4e8df Bump http-client + deps.clj 2023-05-20 11:16:33 +02:00
Lee Read
0e47d7f7a6
tests: run babashka.process lib tests on windows (#1564)
Now that babashka.process tests are os agnostic we can also run them
on Windows.

This should now work, see babashka/process#126
2023-05-19 11:26:18 +02:00
Michiel Borkent
41e5e0c484 Bump process 2023-05-18 14:05:40 +02:00
Michiel Borkent
fe989f7233 Revert "tests: run babashka.process lib tests on windows (#1559)"
This reverts commit 7f8ec567e6.
2023-05-14 00:31:38 +02:00
Lee Read
7f8ec567e6
tests: run babashka.process lib tests on windows (#1559)
Now that babashka.process tests are os agnostic we can also run them
on Windows.
2023-05-13 23:39:31 +02:00
Lee Read
342cedbcfa
Support babashka.process reload for exec fn (#1558)
* Support babashka.process reload for exec fn

Exposed GraalVM `ProcessProperties/exec` signature used by
babashka.process/exec.

Add new `graal?` feature (on by default) to allow folks to build/use
babashka without this specific Graal API.

On my linux dev box bb executable increased by 8kb.

Closes #1557

* Respond to PR review feedback

1. Allow all Graal ProcessProperties/exec signatures

2. Instead of a feature flag, simply check if Graal ProcessProperties
class is available before including ProcessProperties/exec.
I did not see the value of adding a has-graal-process-properties fn, so
left that part out. Lemme know if you want/need that.

* Respond to PR review feedback

Because resolves can bloat GraalVM native-image size, we like to keep
the together and obvious instead of buried and non-obvious.
2023-05-13 23:22:18 +02:00
Michiel Borkent
b22092a318 pods minor 2023-05-12 16:56:43 +02:00
Michiel Borkent
3da2c9f75f Bump pods 2023-05-12 16:12:16 +02:00
Michiel Borkent
2e3bd2d3f0
Bump deps.clj (#1556) 2023-05-12 16:05:41 +02:00
Michiel Borkent
555c11eca2 Bump fs 2023-05-11 11:51:00 +02:00
Michiel Borkent
32a18191dc deps.clj 2023-05-09 12:06:47 +02:00
Michiel Borkent
dcb0b45405 Bump process 2023-05-06 20:44:14 +02:00
Michiel Borkent
e84eb29fa1 process minor 2023-05-04 22:15:51 +02:00
Michiel Borkent
1c425796ae process: hopefully fixed CI tests 2023-05-04 21:47:56 +02:00
Michiel Borkent
4e8d907369 Bump print-deps deps 2023-05-04 21:04:37 +02:00
Michiel Borkent
f4bc802880 Bump process 2023-05-04 21:04:37 +02:00
Rahuλ Dé
c13500cddb
[#1524] fix docker orchestration (#1552)
* [#1524] fix docker orchestration

* [#1524] revert branch checks
2023-05-01 14:15:03 +02:00
Michiel Borkent
98aa6b996e swag link [skip ci] 2023-05-01 12:25:14 +02:00
Michiel Borkent
f2e955cc0b
README [skip ci] (#1551) 2023-05-01 12:09:25 +02:00
Rahul De
5c4eedb12b [#1524] pick right binary for ARM docker images 2023-05-01 11:07:55 +01:00
Michiel Borkent
c536d524f8 changelog 2023-05-01 11:47:29 +02:00
Rahuλ Dé
ea57060963
No linux aarch64 (#1550)
* [#1524] remove linux-aarch64 dynamic binary build

* [#1524] add changelog
2023-05-01 11:46:24 +02:00
Michiel Borkent
430a466a25 bb news 2023-05-01 10:17:26 +02:00
Michiel Borkent
d27efb137d
Fix #1548: shell and sh should respect babashka.process/*defaults* (#1549) 2023-04-28 13:30:07 +02:00
Michiel Borkent
0063196074 SCI: revert 2023-04-28 13:20:40 +02:00
Michiel Borkent
4db3de5987 Revert "SCI: preserve ex-data in threads"
This reverts commit cd70809b1b.
2023-04-28 13:20:25 +02:00
Michiel Borkent
cd70809b1b SCI: preserve ex-data in threads 2023-04-28 12:56:30 +02:00
Michiel Borkent
2b24a84c11 Version bump 2023-04-26 17:42:59 +02:00
Michiel Borkent
7d5cdadbcb v1.3.179 2023-04-26 16:24:13 +02:00
Michiel Borkent
325e043440 changelog 2023-04-26 14:42:21 +02:00
Michiel Borkent
4dcc159ed7
Fix #1545: Adjacent bb.edn not respected with explicit -f option (#1547) 2023-04-26 14:41:21 +02:00
Michiel Borkent
a9be9d02ea Fix #1546: add .contains for vector and lazy-seq 2023-04-25 14:28:54 +02:00
Michiel Borkent
d2fece3f80 Fix #1544: :local/root in script-adjacent bb.edn should resolve relative to script 2023-04-23 12:28:44 +02:00
Bob
39e4ea71e9
Fix #1189: add test for error message for clojure {:dir "missing-directory"} (#1543)
* add test for error message from running clojure
task in non-existent dir

* make testing string more accurate
2023-04-22 23:37:17 +02:00
Michiel Borkent
4cbdb57ad1 SCI: better error message when trying to recur across try 2023-04-22 11:30:03 +02:00
Michiel Borkent
2e0bbfb260 unset bb classpath 2023-04-21 16:50:31 +02:00
Michiel Borkent
c1726c3b98 Add test for regression 2023-04-21 16:39:08 +02:00
Michiel Borkent
0951328270 Version bump 2023-04-21 16:14:06 +02:00
Michiel Borkent
1de5c553ea v1.3.178 2023-04-21 15:55:14 +02:00
Michiel Borkent
cd4987b005 news 2023-04-21 14:27:48 +02:00
Michiel Borkent
340d24fb07 changelogs 2023-04-21 14:21:47 +02:00
Michiel Borkent
abc102f0b8 Version bump 2023-04-21 14:19:43 +02:00
Michiel Borkent
3f99274978 v1.3.177 2023-04-21 13:59:51 +02:00
Michiel Borkent
26967df643
Fix #1541: respect bb.edn adjacent to invoked file (#1542) 2023-04-21 13:50:53 +02:00
Michiel Borkent
1644c94fda nrepl wip [skip ci] 2023-04-21 12:23:30 +02:00
Michiel Borkent
63102eca86
Add --install-exit-handlers to support shutdown hook + SIGTERM (#1540) 2023-04-19 21:55:47 +02:00
Michiel Borkent
f7907be86e Bump http-client 2023-04-18 15:00:47 +02:00
Bob
19bfd172fc
vary ports across socket repl tests (#1539)
* use different port for socket repl tests

- update socket-command to socket-command-on-port, which
 takes a port and then returns the socket-command function
- change port numbers across tests

* undo little formatting change

* grr... newlines
2023-04-18 09:47:40 +02:00
Michiel Borkent
a945ea8146 Bump CLI 2023-04-17 19:57:48 +02:00
Michiel Borkent
fcb0b4a1a7 docs [skip ci] 2023-04-15 11:24:52 +02:00
Michiel Borkent
6eea167cfe docs 2023-04-15 11:20:08 +02:00
Michiel Borkent
307ed36f9c Add UnsupportedOperationException 2023-04-14 13:13:19 +02:00
Michiel Borkent
99655aa224 Bump edamame 2023-04-13 17:54:18 +02:00
Michiel Borkent
b7ee49ab8d Bump edamame to 1.3.21 2023-04-13 15:34:05 +02:00
Michiel Borkent
37b5d1d6a3 built-in deps.edn 2023-04-12 15:18:26 +02:00
Michiel Borkent
1a54f03ce3 Bump clj-yaml to 1.0.26 2023-04-12 15:14:50 +02:00
Michiel Borkent
9365a24eed deps.clj upgrade 2023-04-12 15:03:08 +02:00
Michiel Borkent
0b5a281d46 sci [skip ci] 2023-04-08 13:14:11 +02:00
Michiel Borkent
c89a396bbd
Add java.security.cert.CertificateFactory (#1531) 2023-04-07 23:54:59 +02:00
Michiel Borkent
905f6365d4 news 2023-04-07 13:18:16 +02:00
Michiel Borkent
c1788da654 news 2023-04-07 13:14:28 +02:00
Michiel Borkent
d3f7a52f65 pods: fix for JVM 2023-04-02 11:27:33 +02:00
Michiel Borkent
c85e86cb7e
Upgrade transit-clj 1.0.333 (#1528) 2023-04-01 12:25:46 +02:00
Michiel Borkent
b4365826ba Bump deps.clj 2023-04-01 12:03:52 +02:00
Michiel Borkent
e68eb7a998 Add clojure.lang.PersistentList to reachable classes 2023-03-31 11:42:00 +02:00
Michiel Borkent
18b2d54d33 deps.clj 1.11.1.1262 2023-03-28 10:59:14 +02:00
KARASZI István
43e7b4af0b
fix(docker): make image smaller (#1523)
* Replace mkdir with WORKDIR

* Remove unnecessary package list

* Remove graalvm removal in the base image

This could speed up local builds since we don't need to download it
every time

* Remove package information

* Remove the downloaded apk

* Add a changelog entry

* Revert WORKDIR changes
2023-03-21 22:45:25 +00:00
Michiel Borkent
57ebb524b0 changelog 2023-03-18 17:02:48 +01:00
Michiel Borkent
6ccdfae7bb Version bump 2023-03-18 17:00:50 +01:00
Michiel Borkent
fa34ebfdef Retry release 2023-03-18 16:42:43 +01:00
Michiel Borkent
a66a2f74f5 Retry release 2023-03-18 16:04:44 +01:00
Michiel Borkent
6850caed6e revert release 2023-03-18 15:25:58 +01:00
Michiel Borkent
29150e6bd3 v1.3.176 2023-03-18 15:22:24 +01:00
Michiel Borkent
4a45624acd Version bump 2023-03-18 15:07:51 +01:00
Michiel Borkent
cce0a3d378 Fix pushing to ghcr 2023-03-18 14:33:34 +01:00
Michiel Borkent
26780fffe5 v1.3.175 2023-03-18 14:12:05 +01:00
Michiel Borkent
1bc4782d42 changelogs 2023-03-18 14:11:19 +01:00
Michiel Borkent
2c6485b876 Bump edamame to 1.3.20 2023-03-18 11:13:19 +01:00
Michiel Borkent
4fc1d9a815 deps.clj: 1.11.1.1257 2023-03-16 11:02:37 +01:00
Rahuλ Dé
e7521110c9
Fix #1521: Push images to GHCR (#1522) 2023-03-15 16:52:05 +01:00
Michiel Borkent
e2f2e9ae4e use newest ordered 2023-03-13 15:38:56 +01:00
Michiel Borkent
0927a48c50 Use newest ordered 2023-03-13 15:37:01 +01:00
Michiel Borkent
69373fb445 Support clojure.lang.MapEntry/create 2023-03-11 23:38:16 +01:00
Michiel Borkent
7aba75564e
Go macro uses virtual threads (#1517) 2023-03-10 19:22:53 +01:00
Michiel Borkent
4438f3bbcf Bump babashka cli 2023-03-10 16:30:14 +01:00
Michiel Borkent
1bb7ebe3dc Bump github release artifact 2023-03-09 23:21:02 +01:00
Michiel Borkent
9545d23cc4
Enable unix protocol on Windows (#1516) 2023-03-09 22:51:42 +01:00
Michiel Borkent
e74e7ed2ca
Fix #1511: support domain sockets (#1514) 2023-03-09 16:57:17 +01:00
Michiel Borkent
5ad161a059 Bump http-client in meta-inf [skip ci] 2023-03-08 21:49:13 +01:00
Michiel Borkent
68878e7f89 Fix #1510 2023-03-08 10:55:43 +01:00
Michiel Borkent
84bd66f869 Mark ssl test as flaky 2023-03-07 19:34:48 +01:00
Michiel Borkent
5516151132 deps.clj : 1.1.11.1152 2023-03-07 19:06:42 +01:00
Michiel Borkent
4e52f0d34c Bump http-client 2023-03-03 20:21:19 +01:00
Michiel Borkent
4a38fdbd07 SCI 2023-03-03 16:57:50 +01:00
Michiel Borkent
a8d3923262 Add UnixDomainSocketAddress 2023-03-03 16:42:15 +01:00
Michiel Borkent
8d8d3a1057 clean [skip ci] 2023-03-03 15:22:10 +01:00
Michiel Borkent
d4c4e53c86 sci minor [skip ci] 2023-03-03 15:03:31 +01:00
Michiel Borkent
52a7c205a3 Bump graal in actions 2023-03-02 15:35:49 +01:00
Rahuλ Dé
9e004edefe
Fix #1507: support calling getName on virtual thread 2023-03-02 15:10:58 +01:00
Michiel Borkent
b8a0520b93 Version bump 2023-03-01 00:23:46 +01:00
Michiel Borkent
1022068624 trim version 2023-03-01 00:07:09 +01:00
Michiel Borkent
8df7f7c3fe Bump minor version 2023-02-28 23:51:54 +01:00
Michiel Borkent
f5e2fe0f61 v1.1.174 2023-02-28 23:51:18 +01:00
Michiel Borkent
abdd068149 changelog 2023-02-28 23:46:16 +01:00
Michiel Borkent
99ec77afeb Bump fs 2023-02-28 23:45:20 +01:00
Michiel Borkent
eba9d0d642 Docker alpine, hopefully clojure.org is less flaky 2023-02-28 23:10:09 +01:00
Michiel Borkent
9520c5b240 Fix #1501: equals on deftype 2023-02-28 22:21:04 +01:00
Michiel Borkent
9b21986f05 changelog [skip ci] 2023-02-28 20:22:22 +01:00
Michiel Borkent
076a2774be Fix #1506: :exec-args in task should override :exec-args on fn metadata 2023-02-28 19:45:49 +01:00
Michiel Borkent
3f4ac12cc4 Bump deps.clj 2023-02-28 16:05:44 +01:00
Michiel Borkent
b2d422cacb Bump http-client 2023-02-28 15:05:00 +01:00
Bob
5dc7763325
- remove zero size tolerance for overwriting uber-files (#1504)
- in tests, delete temp output files that would prevent overwrite
- in tests, change 'non-empty' files to be empty files (since
 non-empty is no longer necessary)
- in hato test, replace nghttp2 with httpbin, since httpbin
 uses http/2 by default now, and to benefit from httpbin
  'flaky' test
2023-02-26 10:13:27 +01:00
Bob
3045cd226e
Fix #1489: prevent uberscript/uberjar overwrites (#1503) 2023-02-25 21:36:02 +01:00
Michiel Borkent
187ee7da00 Add support for .getWatches on atoms 2023-02-25 21:33:55 +01:00
Michiel Borkent
cd9a87e75c library upgrades 2023-02-25 21:18:46 +01:00
Michiel Borkent
3ad043769c
Use GraalVM 22.3.1 on JDK 19.0.2 with virtual thread support (#1500) 2023-02-21 16:23:03 +01:00
Michiel Borkent
332c7c6ac8 Babashka CLI v0.6.46 2023-02-19 13:09:18 +01:00
Michiel Borkent
711bb40480 Fix crypto test 2023-02-15 13:51:41 +01:00
Michiel Borkent
be426ee56d Add secret key test 2023-02-15 13:30:09 +01:00
Michiel Borkent
9118c43da3 Fix #1496: add set-agent-send-executor! and set-agent-send-off-executor! 2023-02-15 11:25:05 +01:00
Michiel Borkent
c5c8086dfe
More jaxax.crypto stuff (#1495) 2023-02-15 11:01:37 +01:00
Michiel Borkent
734ca577f6 Partial fix for toString on deftype, #1494 2023-02-14 18:36:09 +01:00
Michiel Borkent
bf3623b596 Bump http-client 2023-02-14 17:01:36 +01:00
Michiel Borkent
b2f534517c deps.clj 2023-02-13 17:31:26 +01:00
Daniel Vingo
ead237eee3
Add more java classes and interfaces to support juxt.tick (#1490) 2023-02-10 10:39:54 +01:00
Michiel Borkent
30a15e16ae Bump fs 2023-02-08 11:29:17 +01:00
Bob
42fd5d851f
Don't fail build on flaky tests 2023-02-07 22:24:11 +01:00
Michiel Borkent
6d1f295f47
Fix #1487: babashka.tasks/clojure with 0 args (#1488) 2023-02-06 22:36:26 +01:00
Michiel Borkent
a1858774b6 Fix #1482: make loading of libs thread safe 2023-02-06 10:51:26 +01:00
Michiel Borkent
ab0c5bb058 Update babashka news 2023-02-05 20:31:18 +01:00
Michiel Borkent
920babb56b sci minor [skip ci] 2023-02-05 16:34:53 +01:00
Dosbol
cc0338a1e9
Added Kleene to companies (#1485) 2023-02-05 11:55:32 +01:00
Bob
a4e791e6ad
Add lib tests for xforms (#1483)
Fixes #1000
2023-02-04 23:14:35 +01:00
Michiel Borkent
02d300ee3d changelog 2023-02-04 11:05:10 +01:00
Michiel Borkent
a6d8d0179c changelog 2023-02-04 10:56:23 +01:00
Michiel Borkent
9441dabf81 Version bump 2023-02-04 10:54:53 +01:00
Michiel Borkent
842c7a0589 v1.1.173 2023-02-04 10:42:19 +01:00
Michiel Borkent
a19d05b8da
Support reader_tags.clj(c) (#1481) 2023-02-03 21:21:56 +01:00
Michiel Borkent
ca1e2d7769
Classloader interop improvements (#1480) 2023-02-03 13:08:55 +01:00
Michiel Borkent
72dbf53df7 TODO: disable :flaky tests on master branch: 2023-02-01 23:00:13 +01:00
Michiel Borkent
76e779d0d3
Compatibility with clojure.tools.namespace.repl/refresh and clojure.java.classpath (#1479) 2023-02-01 21:53:52 +01:00
Michiel Borkent
bbd1940844 SCI minor 2023-02-01 11:51:00 +01:00
Michiel Borkent
0dab6f5f3d SCI: loaded-libs support 2023-02-01 11:46:06 +01:00
Michiel Borkent
5a1b6a9f79 bump deps.edn [skip ci] 2023-01-31 19:37:21 +01:00
Michiel Borkent
722812bd61 Bump rewrite-clj 2023-01-31 19:32:29 +01:00
Michiel Borkent
2b575b1ea6 Bump http-client 2023-01-30 20:43:09 +01:00
Michiel Borkent
e9e906e09f minor [skip ci] 2023-01-30 12:05:34 +01:00
Michiel Borkent
d8f50879c8 Bump fs 2023-01-29 16:36:52 +01:00
Michiel Borkent
28f72ff4a2 Bump fs 2023-01-29 16:36:01 +01:00
Rahuλ Dé
32864476e5
Fix #1473: make :local/root deps resolve paths relative to bb.edn
Co-authored-by: Michiel Borkent <michielborkent@gmail.com>
2023-01-28 14:27:54 +01:00
Michiel Borkent
63abc75cf5 Update deps.clj 2023-01-27 17:31:55 +01:00
Michiel Borkent
b2855d1212 Bump cli 2023-01-27 13:55:46 +01:00
Michiel Borkent
bd5597a3cb Bump process to 0.4.16 2023-01-26 16:47:51 +01:00
Michiel Borkent
a79c33d7bf
Fix #1474: use UrlClassLoader for finding files on classpath (#1475) 2023-01-25 22:29:37 +01:00
Michiel Borkent
1452f45cfb Bump SCI 2023-01-24 19:38:12 +01:00
Michiel Borkent
64dcb3335d changelog 2023-01-23 20:14:47 +01:00
Michiel Borkent
c053765731 Version bump 2023-01-23 20:13:09 +01:00
Michiel Borkent
314906cb0d v1.1.172 2023-01-23 19:58:13 +01:00
Michiel Borkent
4220902927 Try fixing test on Windows 2023-01-23 18:13:47 +01:00
Michiel Borkent
4931048284 changelogs 2023-01-23 17:28:37 +01:00
Michiel Borkent
2da873a2c1 Bump process: change default for :out :append to :out :write 2023-01-23 17:27:15 +01:00
Michiel Borkent
17adc69abc Another fix for #1472 2023-01-23 17:00:20 +01:00
Michiel Borkent
a464b59bc2 Fix #1472: fix double tokenization when calling clojure from tasks 2023-01-23 16:35:51 +01:00
Michiel Borkent
7c2e8a155f babooka 2023-01-23 15:12:55 +01:00
Michiel Borkent
fa9103807d Version bump 2023-01-23 14:51:29 +01:00
Michiel Borkent
3610f52c47 v1.1.171 2023-01-23 14:28:33 +01:00
Michiel Borkent
68d041c892 changelog 2023-01-22 21:00:54 +01:00
Michiel Borkent
02cdb00e8d
Include babashka.http-client (#1471) 2023-01-22 20:52:17 +01:00
Michiel Borkent
7f44c272b8 deps resource [skip ci] 2023-01-22 19:48:26 +01:00
Michiel Borkent
5140bd4249 SCI: support add-watch on vars 2023-01-22 12:28:46 +01:00
Michiel Borkent
0be3c71772
Eftest compatibility (#1470) 2023-01-21 21:29:30 +01:00
Michiel Borkent
77878631e9 Switch clojure.test/*report-counters* to ref instead of atom 2023-01-21 17:31:53 +01:00
Michiel Borkent
28ec2c690a Support qualified method names in proxy and ignore namespace 2023-01-21 17:02:52 +01:00
Michiel Borkent
fe6042a06f Fix Outputstream proxy for kaocha 2023-01-21 16:25:39 +01:00
Michiel Borkent
6feb785cb0 changelog: mention breaking change 2023-01-21 15:41:43 +01:00
Michiel Borkent
eca7847ed9
Fix #1467: avoid printing results by default, unless --prn is enabled (#1469) 2023-01-21 15:38:50 +01:00
Michiel Borkent
430cbedbe4 Fix proxy class 2023-01-21 14:10:04 +01:00
Michiel Borkent
a5318ea289 Allow java.io.OutputStream to be proxied, for kaocha 2023-01-21 14:06:33 +01:00
Michiel Borkent
91413c2803 Fix changelog 2023-01-19 12:59:09 +01:00
Michiel Borkent
7844039861 Version bump 2023-01-19 12:55:54 +01:00
Michiel Borkent
61851a511f v1.0.170 2023-01-19 12:40:55 +01:00
Michiel Borkent
09debe0f1d Add Semaphore + httpkit functions 2023-01-19 12:29:01 +01:00
Michiel Borkent
71d0a14c26 Mark curl tests as flaky 2023-01-18 15:47:18 +01:00
Michiel Borkent
5b42de70d8
Tab compatibility (#1466) 2023-01-18 15:29:19 +01:00
Michiel Borkent
79a9bc531a Bump SCI, fixes #1465 2023-01-18 14:40:53 +01:00
Michiel Borkent
6b6d403d5e Bump CLI and fs 2023-01-18 11:35:53 +01:00
Michiel Borkent
843ca4c2d3 SCI: macroexpansion error location improvement 2023-01-14 10:59:22 +01:00
Michiel Borkent
e43edd8627 Bump babashka cli 2023-01-13 13:14:31 +01:00
Michiel Borkent
b2b20e15c1 Update asdf link 2023-01-12 15:59:45 +01:00
Michiel Borkent
004e99eaa3 Add forked asdf plugin 2023-01-11 21:44:47 +01:00
Jeroen van Dijk
4d1c05b23d
Add java.util.jar.Attributes to classes (#1464)
* Add java.util.jar.Attributes to classes

* Update Changelog
2023-01-11 13:09:12 +01:00
Michiel Borkent
6f41179849 sync deps.clj [skip ci] 2023-01-10 10:45:37 +01:00
Michiel Borkent
1810b4bd97 Marlk httpkit tests as flaky 2023-01-09 23:05:59 +01:00
Michiel Borkent
e3aa11baa8 pods: fix untar with missing dir, delete port files 2023-01-09 21:22:53 +01:00
Michiel Borkent
9b5ec623e4 news 2023-01-06 16:37:59 +01:00
Michiel Borkent
0b4bfdc3ab news 2023-01-06 16:35:09 +01:00
Michiel Borkent
96e70ff7e3 news fini 2023-01-06 15:59:17 +01:00
Michiel Borkent
eb4e583c97 news update 2023-01-06 15:14:52 +01:00
Michiel Borkent
47df0c47a1 news november 2022 2023-01-06 14:56:19 +01:00
Michiel Borkent
7de2262585 new october 2023-01-06 14:46:07 +01:00
Michiel Borkent
27fad0ac36 News september 2023-01-06 14:38:22 +01:00
Michiel Borkent
5b7213822c news august 2023-01-06 13:44:38 +01:00
Michiel Borkent
8fa49b940d CI install 2023-01-06 13:34:44 +01:00
Michiel Borkent
6c1f5f7a4d CI install instructions 2023-01-06 13:33:49 +01:00
Michiel Borkent
2a943086a6 Mark clj-http-lite tests as flaky 2023-01-05 12:34:07 +01:00
Michiel Borkent
9e1ea1071d Skip flaky tests on main 2023-01-05 12:15:20 +01:00
Michiel Borkent
a0a34dc5d8 Fix #1456 (2): add *data-readers* 2023-01-05 11:25:25 +01:00
Michiel Borkent
b9308eddcc
Fix #1456: allow dyn vars to be set in socket REPL (#1461) 2023-01-04 21:23:29 +01:00
Michiel Borkent
3aca505790
Partial fix for #1456 (nREPL issue) (#1460)
Co-authored-by: axks <alexander.kaiser@blockinfinity.com>
2023-01-04 20:46:04 +01:00
Michiel Borkent
5965e32d26 changelog 2023-01-03 22:18:32 +01:00
Michiel Borkent
e9b87b0185 Version bump 2023-01-03 22:18:00 +01:00
Michiel Borkent
91b3a962b4 v1.0.169 2023-01-03 22:04:40 +01:00
Michiel Borkent
d9358f0706 Changelog [skip ci] 2023-01-03 22:03:51 +01:00
Michiel Borkent
8e64ef9df8
Upgrade babashka spec.alpha (#1459) 2023-01-03 22:03:19 +01:00
Michiel Borkent
2ac1428341 Add compiler dynvars for compatibility 2023-01-03 19:51:03 +01:00
Michiel Borkent
efe4f214cc Fix pprinting vars 2023-01-03 13:24:27 +01:00
Michiel Borkent
bdbe5a4548 SCI: add reader-conditional 2023-01-03 12:02:14 +01:00
Rahuλ Dé
34136173d5
Add check for max glibc version (#1458)
* Add check for max glibc version

* checkout first

* tolerate subversions

* exit better

* rename ci gen script
2022-12-31 12:16:39 +01:00
Michiel Borkent
1e06b07d0f Update pods 2022-12-29 17:10:14 +01:00
Michiel Borkent
188949d7eb sci, process sync 2022-12-27 22:32:06 +01:00
Michiel Borkent
073e7e3ce0 Even better require detection 2022-12-26 13:10:26 +01:00
Michiel Borkent
39c1390085 Fix build 2022-12-26 12:58:08 +01:00
Michiel Borkent
dd77a85893 better require logging 2022-12-26 12:40:22 +01:00
Michiel Borkent
4223f1432d SCI sync 2022-12-25 12:24:23 +01:00
Michiel Borkent
68a6e24516 Fix #1454: include babashka process in print-deps output 2022-12-23 14:44:52 +01:00
Michiel Borkent
8b39f67700
SCI: cache Java interop methods (#1455) 2022-12-23 14:32:13 +01:00
Michiel Borkent
61950b87e2 SCI: faster field access 2022-12-21 12:28:47 +01:00
Michiel Borkent
df24d04f73 SCI: minor perf boost for zero args 2022-12-21 12:06:10 +01:00
Michiel Borkent
01eea0babb changelog 2022-12-20 19:48:18 +01:00
Michiel Borkent
935c8da535 Changelog + SCI update 2022-12-20 19:43:23 +01:00
Matthew Downey
62916fa292
Fix #1451: Allow passing explicit file and line number to clojure.test 2022-12-20 19:41:36 +01:00
Michiel Borkent
d9aad85476 SCI: remove intermediate code for static method call 2022-12-19 23:04:57 +01:00
Michiel Borkent
37e2da9f5b minor README 2022-12-19 14:41:13 +01:00
Michiel Borkent
2535299be8 README [skip ci] 2022-12-18 12:04:30 +01:00
Gabe
965c177bca
Fix #1280: babashka REPL doesn't quit right after ctrl-d (#1450)
the problem is that parser/parse-next waits for an enter before returning an object
we can use peek-char to pre-emptively react to any EOF at the start of the line
in case of not-start-of-line, parse-next takes over

Co-authored-by: Alice Margatroid <code@alice.bunkerlabs.net>
2022-12-14 14:57:07 +01:00
Michiel Borkent
dc2502ebae deps.clj 2022-12-14 14:46:42 +01:00
Michiel Borkent
df24cf287d Update deps.clj 2022-12-12 21:19:23 +01:00
Michiel Borkent
72377d090f Bump built-in deps.edn [skip ci] 2022-12-11 18:17:12 +01:00
Michiel Borkent
5570c416e9 v0.6.41 2022-12-11 18:06:23 +01:00
Michiel Borkent
e619a896a1 restore init 2022-12-10 20:55:31 +01:00
Michiel Borkent
38dc526680 Fix inlined alength 2022-12-10 15:18:15 +01:00
Michiel Borkent
44dbc57cda Restore inlined functions 2022-12-10 14:41:29 +01:00
Michiel Borkent
b9fa877cd7 Constructor of LazySeq 2022-12-10 12:22:22 +01:00
Michiel Borkent
f9131b2979 lazy-seq as macro 2022-12-10 12:04:28 +01:00
Michiel Borkent
ba328f2387
ns as macro (#1447) 2022-12-10 11:48:29 +01:00
Michiel Borkent
d721b925f4 Support --dev-build flag 2022-12-09 19:12:16 +01:00
Michiel Borkent
c7ccc6fedb Fix #1446: add pprint/code-dispatch 2022-12-09 18:39:51 +01:00
Thiago Kenji Okada
58dbd2b6aa Update zlib to version 1.2.13 2022-12-09 15:13:39 +00:00
Michiel Borkent
f7b235635a doc improvement 2022-12-09 13:08:03 +01:00
Michiel Borkent
7d5083ac0a Fix #1434, document installing on Alpine 2022-12-09 13:05:29 +01:00
Michiel Borkent
683752c602 Always install static binary on linux amd64 2022-12-09 12:51:33 +01:00
Michiel Borkent
5ac048157a sci: speed up case 2022-12-08 23:26:59 +01:00
Michiel Borkent
9dff25d36b process [skip ci] 2022-12-08 15:05:08 +01:00
Michiel Borkent
c931fbe294 sync process [skip ci] 2022-12-08 15:00:40 +01:00
Michiel Borkent
46b6dfd3c3 Update fs: better fix for splitting on extension 2022-12-08 13:34:30 +01:00
Michiel Borkent
3bdeee8bee sync process [skip ci] 2022-12-07 17:05:47 +01:00
Michiel Borkent
531b9383f2 Remove reference to survey 2022-12-07 11:33:40 +01:00
Michiel Borkent
facb65734e Version bump 2022-12-07 11:33:01 +01:00
Michiel Borkent
419b71e7c6 v1.0.168 2022-12-07 11:16:22 +01:00
Michiel Borkent
7cc94ea6a1 fs: don't touch dirs in split-ext 2022-12-07 11:10:41 +01:00
Michiel Borkent
69db7105e5
Support new syntax in babashka.deps/clojure (#1440) 2022-12-07 10:04:40 +01:00
Michiel Borkent
cd3252796e Add blog [skip ci] 2022-12-06 11:39:19 +01:00
Michiel Borkent
6acd912a34 Add java.util.InputMismatchException 2022-12-06 11:12:35 +01:00
Bob
cf01d7f24d
#1438: httpkit.client functions (#1439)
* expose query-string function from org.httpkit.client

* add url-encode from httpkit client ns

* cleanup and changelog
2022-12-06 11:01:52 +01:00
Michiel Borkent
bd857ae3e1 Partially revert, will revisit 2022-12-05 17:46:43 +01:00
Michiel Borkent
43375d49a2 Allow deps/clojure to be called with new syntax 2022-12-05 15:14:52 +01:00
Michiel Borkent
9087cf6311 Fix process test for bb 2022-12-04 21:43:31 +01:00
Michiel Borkent
c81babad9a Bump process 2022-12-04 20:51:08 +01:00
Michiel Borkent
952a695234 Update process 2022-12-04 20:33:54 +01:00
Michiel Borkent
a92ebfe68a Update process 2022-12-04 20:20:41 +01:00
Michiel Borkent
d681f9bc7f SCI notes 2022-12-03 14:27:47 +01:00
Michiel Borkent
9305417edc and and or as macros 2022-12-03 14:16:40 +01:00
Michiel Borkent
7b6a69f2b3
SCI: fn, defn and defmacro as macros (#1437) 2022-12-02 19:50:58 +01:00
Michiel Borkent
eb740c7c9b loop* as special form 2022-12-02 13:30:05 +01:00
Michiel Borkent
d53d05c856 Add articles to README 2022-11-30 16:51:52 +01:00
Michiel Borkent
2a56f2e5ef Version bump 2022-11-30 14:37:58 +01:00
Michiel Borkent
ade5ca1ba7 v1.0.167 2022-11-30 14:23:01 +01:00
Michiel Borkent
bc0b59500b
Fix #1433: spec source as fallback + built-in (#1435) 2022-11-30 14:10:02 +01:00
LouD
cf0f145d10
Add note about BSOD when using WSL1 (#1432) 2022-11-29 09:09:23 +01:00
Michiel Borkent
198722ab7c Bump SCI: better error locations for interop 2022-11-28 13:21:14 +01:00
ikappaki
6e00354053
Fix 1430: empty tasks names display list (#1431)
Co-authored-by: ikappaki <ikappaki@users.noreply.github.com>
2022-11-28 10:51:39 +01:00
Michiel Borkent
cb72f8ba17 Fix babashka/babashka.nrepl#59 2022-11-27 20:41:50 +01:00
Michiel Borkent
7d3d38fee1 SCI [skip ci] 2022-11-27 13:22:06 +01:00
Michiel Borkent
03e50cb17e SCI: performance improvement 2022-11-27 13:04:10 +01:00
Michiel Borkent
0671678b60 Change title of blog post [skip ci] 2022-11-24 15:09:53 +01:00
Michiel Borkent
434ee39ad9 CHANGELOG [skip ci] 2022-11-24 14:34:31 +01:00
Michiel Borkent
c67441226a Version bump 2022-11-24 14:01:06 +01:00
Michiel Borkent
6f8f205609 v1.0.166 2022-11-24 13:15:30 +01:00
Michiel Borkent
0df40a1a9a Add clojure.data/equality-partition for lambdaisland/deepdiff2 2022-11-22 11:50:53 +01:00
Michiel Borkent
4504976191 Update built-in deps.edn [skip ci] 2022-11-21 20:53:16 +01:00
Michiel Borkent
eb6745fa86 changelog [skip ci] 2022-11-20 11:34:31 +01:00
Michiel Borkent
058d2071b2 Add java.lang.Error 2022-11-20 11:26:15 +01:00
Michiel Borkent
99f1e948d3 Fix pREPL tests 2022-11-19 11:50:14 +01:00
Michiel Borkent
40e0087b59 Fix socket repl tests 2022-11-19 11:21:23 +01:00
Michiel Borkent
b458d79b29 Switch to use ctx-store for global context 2022-11-19 11:00:35 +01:00
Michiel Borkent
495ded8a50
Compatibility with cognitest test runner and tools.namespace (#1423) 2022-11-18 23:43:42 +01:00
Michiel Borkent
326b1def6b Add java.net.URLClassLoader for compatibility with java.classpath lib 2022-11-17 21:20:27 +01:00
samrose
b7e327c690
refactor: propose changing to working example found at (#1422) 2022-11-17 16:58:20 +01:00
Max Penet
759d977879
allow normalize-keywords to work on cljs files (#1421) [skip ci] 2022-11-16 17:13:13 +01:00
Max Penet
b57981bcd5
make normalize-keywords walk clj[cdx]? files in specified location (#1420) [skip ci] 2022-11-16 17:01:39 +01:00
Michiel Borkent
3751749ca3 Update keyword example [skip ci] 2022-11-16 15:49:07 +01:00
Michiel Borkent
7a22c5fa5a Update fs 2022-11-16 11:11:19 +01:00
Michiel Borkent
e08eab080e deps.clj [skip ci] 2022-11-15 18:09:33 +01:00
Michiel Borkent
0ac4eea9ee deps.clj: 1.11.1.1200 2022-11-15 18:06:16 +01:00
Michiel Borkent
885a82b736 sci docs [skip ci] 2022-11-15 17:49:03 +01:00
Michiel Borkent
d222b32d70
Upgrade timbre to 6.0.1 (#1419) 2022-11-15 17:10:52 +01:00
Michiel Borkent
8d514cc982 sci [skip ci] 2022-11-15 13:56:41 +01:00
Michiel Borkent
65d77d3555 sci [skip ci] 2022-11-15 13:14:51 +01:00
Michiel Borkent
66e90be6a7 sci [skip ci] 2022-11-15 13:01:49 +01:00
Michiel Borkent
85bb1fec76 SCI changelogs [skip ci] 2022-11-14 14:24:55 +01:00
Michiel Borkent
fc15eab795 SCI: optimize analysis and eval of fn 2022-11-14 13:56:24 +01:00
Bob
d8a0018213
Sluj tests (#1416)
* add lib test for sluj (#1269)

* changelog

* add sluj to projects.md
2022-11-13 22:07:01 +01:00
Michiel Borkent
4c3fa4c406 fs docs [skip ci] 2022-11-13 11:19:39 +01:00
Michiel Borkent
bf55d65f14 fs: update-file 2022-11-13 11:19:39 +01:00
Rahul De
4c1da7d242 [skip ci] Mark the sgerrand/alpine-pkg-glibc issue as a TODO 2022-11-13 07:54:13 +00:00
Bob
a24c8fa197
add force overwrite flag when installing glibc on alpine (#1415)
Alpine 3.16 includes /etc/nsswitch.conf, which glibc install tries to create.
This change adds the force-overwrite flag to the glibc install.
2022-11-12 20:58:32 +01:00
Michiel Borkent
6e2eaa9e87 Remove obsolete code 2022-11-12 15:46:59 +01:00
Michiel Borkent
9ed3cb6a31 Fix #1414: preserve metadata on exec task function argument map 2022-11-11 17:34:44 +01:00
Michiel Borkent
8269a632c0 changelog [skip ci] 2022-11-11 15:35:29 +01:00
Michiel Borkent
bc901fdcf0 Set java to GRAALVM 2022-11-11 15:31:35 +01:00
Michiel Borkent
a5dec07279 Build uberjar using graalvm 2022-11-11 15:14:02 +01:00
Michiel Borkent
ac1b16bfc8 SCI: preserve more stacktrace, e.g. on throw 2022-11-10 21:04:01 +01:00
Michiel Borkent
bb84bd357e Fix tests 2022-11-08 13:32:41 +01:00
Michiel Borkent
e5ee1f4a77 Fix run-test 2022-11-08 12:39:31 +01:00
Michiel Borkent
5be61476d8 meta inf [skip ci] 2022-11-08 12:38:13 +01:00
Michiel Borkent
ee5f2a7a2e Add run-test and run-test-var to clojure.test 2022-11-08 12:35:21 +01:00
Michiel Borkent
36d2ec2d87 doc [skip ci] 2022-11-05 15:56:31 +01:00
Michiel Borkent
8d9ac4c4d1 Add lib tests for Postmortem 2022-11-05 15:53:58 +01:00
Michiel Borkent
3d916df4a0 SCI: minor change to type 2022-11-02 17:46:54 +01:00
Michiel Borkent
70d9bbd10e changelog [skip ci] 2022-11-01 13:11:56 +01:00
Michiel Borkent
07030d8f89 changelogs [skip ci] 2022-11-01 13:09:28 +01:00
Michiel Borkent
9083959a5d Version bump 2022-11-01 13:04:08 +01:00
Michiel Borkent
4483ccf20b v1.0.165 2022-11-01 12:46:18 +01:00
Michiel Borkent
ce064291f3 SCI: more docstrings 2022-11-01 12:41:19 +01:00
Michiel Borkent
e31cb57a3d Add java.time.zone.ZoneRules class 2022-10-31 22:40:39 +01:00
Michiel Borkent
ccc1512bb6 SCI: fix alength 2022-10-31 20:23:11 +01:00
Michiel Borkent
8b146525f2 SCI: more docs 2022-10-31 18:18:38 +01:00
Michiel Borkent
c89300b3b5 SCI: more docstrings 2022-10-31 17:58:51 +01:00
Michiel Borkent
42d721a92f Fix tests 2022-10-31 15:52:31 +01:00
Michiel Borkent
98741c9db7 Fix tests 2022-10-31 15:27:07 +01:00
Michiel Borkent
ee85685334 Fix tests 2022-10-31 14:13:45 +01:00
Michiel Borkent
a4ba9527b9 SCI: more docstrings 2022-10-31 13:42:42 +01:00
Michiel Borkent
a035291f41 SCI: now with docstrings for core macros 2022-10-30 15:12:23 +01:00
Michiel Borkent
f5a226ab34 Add notes for detecting runtime requiring-resolve, etc [skip ci] 2022-10-27 21:01:14 +02:00
Michiel Borkent
10ec7dcf1a
Bump core.async to 673 (#1412) 2022-10-27 20:11:12 +02:00
Michiel Borkent
fc5dccc9ef sci: in-ns as function 2022-10-27 13:42:51 +02:00
Michiel Borkent
9de689c623 deps.clj 1.11.1.1182 2022-10-26 19:46:57 +02:00
Andrea Richiardi
eaf0a068f3
Link pod registry to Pods section in README (#1411)
In the `Pods` section we were pointing to a place with a slightly outdated list of projects. This patch adds the correct link to the pod registry.
2022-10-26 18:15:12 +02:00
Michiel Borkent
bca3f28e28
Graalvm 22.3.0 (#1408) 2022-10-25 22:56:57 +02:00
Michiel Borkent
b452c1d94a changelog 2022-10-25 11:11:31 +02:00
Michiel Borkent
cf93651e8e
Add java.net.URLConnection 2022-10-25 11:05:47 +02:00
Bob
1cf8321960
Add fs lib test (#1406) 2022-10-24 22:23:24 +02:00
Michiel Borkent
a141998f55 deps.clj: jar check 2022-10-24 12:07:30 +02:00
Michiel Borkent
5566a7869f Fix #1405: drop name metadata from conditionally defined var 2022-10-23 20:07:53 +02:00
Michiel Borkent
17c9003e2a SCI: don't rely on metadata for record implementation 2022-10-22 20:08:18 +02:00
polemius
16ea1e8f95
Fix small typo (#1404) 2022-10-21 10:43:46 +02:00
Michiel Borkent
1ead74a501 SCI: fix node test [skip ci] 2022-10-21 10:21:09 +02:00
Michiel Borkent
e3b55b5f47 SCI [skip ci] 2022-10-21 10:16:54 +02:00
Michiel Borkent
a61c2721d7 SCI: restore do recur warning 2022-10-20 23:20:55 +02:00
Michiel Borkent
74c26084e3
Fix #1401: mutation of deftype field should be visible in protocol method (#1402) 2022-10-20 21:36:45 +02:00
Michiel Borkent
b409d663ff deps.clj: revert non-upstream change 2022-10-20 17:35:13 +02:00
Michiel Borkent
9cd1f71b76 deps.clj: stale classpath 2022-10-20 12:05:52 +02:00
Michiel Borkent
81e837006e Version bump 2022-10-18 18:22:39 +02:00
Michiel Borkent
5cdeb09a17 v1.0.164 2022-10-18 18:05:59 +02:00
Michiel Borkent
0e57b9d461
Fix #1330: allow *warn-on-reflection* in programmatic nREPL (#1398) 2022-10-18 17:54:38 +02:00
Michiel Borkent
351723fdb6 Fix #1384: allow .indexOf on LazySeq 2022-10-18 17:32:22 +02:00
Michiel Borkent
b6f19b03dc Fix #1397: clojure.lang.Namespace 2022-10-18 17:27:17 +02:00
Michiel Borkent
94aab46855 sci 2022-10-18 17:18:05 +02:00
Michiel Borkent
b6dffe3f87 manifest [skip ci] 2022-10-18 16:46:14 +02:00
Michiel Borkent
bfe59b57d0 SCI: simplify do 2022-10-18 16:42:00 +02:00
Michiel Borkent
e283a87b4c SCI: or/and 2022-10-18 14:08:25 +02:00
Michiel Borkent
9ca24ffce4
SCI: optimize let (#1396) 2022-10-18 12:20:02 +02:00
Michiel Borkent
1e9cc9f203 submodules 2022-10-14 12:34:04 +02:00
Michiel Borkent
7c15b04fa2 Fix tests 2022-10-12 13:06:48 +02:00
Michiel Borkent
33bee0480d Fix #1391: fix var name 2022-10-12 13:00:56 +02:00
Michiel Borkent
ed22bb573b Fix #1391: support loading hiccup.page from source 2022-10-12 12:59:37 +02:00
Michiel Borkent
682f8514fb #1391: include raw in hiccup2.core ns 2022-10-12 12:47:03 +02:00
Michiel Borkent
c2b3fea9fc Bump tools.cli 2022-10-12 12:42:27 +02:00
Michiel Borkent
471ed01cae Bump babashka CLI 2022-10-12 12:33:47 +02:00
Bob
9241c81238
doc additions/cleanups [skip ci] (#1388) 2022-10-10 17:04:15 +02:00
Michiel Borkent
863c6051bd Add process alive? 2022-10-07 12:40:16 +02:00
Michiel Borkent
5bb2d2f8bd process: add alive? - thanks @grzm 2022-10-07 12:23:22 +02:00
Michiel Borkent
87e9e0861c Upgrade graalvm in cirrus 2022-10-06 14:16:20 +02:00
Michiel Borkent
2dac7847a8 Fix #1369: provide .sha256 files for every released asset 2022-10-06 14:12:58 +02:00
Michiel Borkent
851e1f5eb0 Bump CLI 2022-10-06 12:55:09 +02:00
Michiel Borkent
ec842c942d process: only slurp err when inputstream (@ikappaki) 2022-10-05 19:56:09 +02:00
Baishampayan Ghose
77768cec67
feat: Honor *print-namespace-maps* in pprint (#1387)
We can now use the dynamic var `*print-namespace-maps*` to control how
maps with namespaced keys are printed using `pprint`.

Fixes: #1381
2022-10-04 19:11:59 +02:00
Michiel Borkent
9fba927ec8 sci: print-namespace-maps 2022-10-04 16:53:40 +02:00
Rahuλ Dé
7e77ab5633
Update contajners to latest (#1382) 2022-10-03 16:13:14 +02:00
Michiel Borkent
2b3e7df2e9 Fix tests 2022-10-03 15:34:47 +02:00
Michiel Borkent
80a8ee1b7e Don't let orchestra nuke other spec tests 2022-10-02 13:24:06 +02:00
Michiel Borkent
465ea247eb process and sci 2022-10-02 13:14:15 +02:00
Michiel Borkent
c94960eac1 deps.clj: support for CLJ_JVM_OPTS and JAVA_OPTS 2022-09-30 12:05:43 +02:00
Michiel Borkent
c081367304 Fix pod test 2022-09-29 10:05:43 +02:00
Michiel Borkent
8170fd7675 pods: print + flush for out and err, thanks @justone 2022-09-29 09:31:13 +02:00
Rahuλ Dé
0684119000
Mark bb.edn load exception (#1378)
* Mark bb.edn load exception

* print to stderr

* print with binding
2022-09-28 15:48:35 +02:00
Rahuλ Dé
8352448611
check if supplied deps is non-empty (#1377) 2022-09-28 13:12:05 +02:00
Michiel Borkent
8fdefb99b9 Go back to clj-commons/clj-yaml 2022-09-26 12:17:32 +02:00
Crispin Wellington
e6f6b02c06
Add single arg read method to PipedInputStream proxy (#1372)
* reify java.lang.Object with optional toString and finalize

* add single argument read method to PipedInputStream proxy

* update changelog

Co-authored-by: Michiel Borkent <michielborkent@gmail.com>
2022-09-26 10:52:59 +02:00
Michiel Borkent
7baa0542ec CHANGELOGS [skip ci] 2022-09-24 13:56:46 +02:00
Michiel Borkent
4b1e02c6c7 CHANGELOGS [skip ci] 2022-09-24 13:56:25 +02:00
Michiel Borkent
9e8571cd08 CHANGELOGS [skip ci] 2022-09-24 13:54:26 +02:00
Michiel Borkent
89e8dfdf32 Version bump 2022-09-24 13:53:54 +02:00
Michiel Borkent
e2a8f03d21 v0.10.163 2022-09-24 13:27:04 +02:00
Michiel Borkent
020d42a94f Fix #808: -Sdeps 2022-09-24 13:25:06 +02:00
Michiel Borkent
eed298f4a4 Changelog [skip ci] 2022-09-24 12:41:00 +02:00
Michiel Borkent
0c87ed2312 Use clj-yaml with fixes 2022-09-24 12:34:07 +02:00
Bob
78cbdd1d82
#1336: --force as global opt (#1374) 2022-09-24 10:59:34 +02:00
Michiel Borkent
42ebb92c5d exec tests 2022-09-23 21:26:37 +02:00
Michiel Borkent
7b563dd802 exec-test [skip ci] 2022-09-23 21:18:52 +02:00
Michiel Borkent
2ff0304821 changelog [skip ci] 2022-09-23 20:55:23 +02:00
Michiel Borkent
2ffbef09d8 process [skip ci] 2022-09-23 17:12:04 +02:00
Michiel Borkent
525f73f822 process 2022-09-23 17:02:13 +02:00
Michiel Borkent
fd3f4a100a process: exit-fn 2022-09-23 13:14:27 +02:00
Michiel Borkent
a9f0483869 Bump CLI 2022-09-22 20:58:36 +02:00
Michiel Borkent
3110dde2ab Fix #1368: -x: do not pick up on aliases in user ns 2022-09-22 20:05:22 +02:00
Michiel Borkent
848683f82d sci 2022-09-22 18:14:07 +02:00
Lee Read
d2c8696039
Make a "babashka built-in" badge available (#1366)
* Make a "babashka built-in" badge available

Of note: added markdown and adoc syntaxes for badges to README.

Closes #1365

* Moved flair section under new badges section

Badges themselves act as headings under badges section.
Reworded badges text for 2 audiences.
1. The general bb user who wants to know what they mean.
2. The library author who might want to display them.

Renamed "Projects" heading to "Compatible Projects"
2022-09-22 17:40:15 +02:00
Michiel Borkent
92a8042f97 changelog 2022-09-22 14:05:50 +02:00
Michiel Borkent
c3f61bdc34 changelog 2022-09-22 14:05:42 +02:00
Michiel Borkent
3b5dbb7c66 Fix #1367: line number in clojure.test output 2022-09-22 14:03:48 +02:00
Wes Morgan
aa0da8f503
Map (on)to-chan!(!) core.async fns (#1371)
* Map (on)to-chan!(!) core.async fns

These are recent replacements for their deprecated predecessors onto-chan & to-chan.

* Add note to changelog about #1370 fix
2022-09-21 21:46:03 +02:00
Michiel Borkent
00dee39196 sci [skip ci] 2022-09-21 16:38:19 +02:00
Michiel Borkent
06d6e97927 sci protocol docs 2022-09-21 12:50:07 +02:00
Michiel Borkent
3bc5bcab5b Bump process 2022-09-20 12:10:08 +02:00
Michiel Borkent
3b9163cde9 Bump clojure.xml 2022-09-19 14:01:10 +02:00
Michiel Borkent
621130960b Bump deps.clj 2022-09-18 21:38:23 +02:00
Michiel Borkent
739f05cc5e CHANGELOGS [skip ci] 2022-09-18 12:51:02 +02:00
Michiel Borkent
b84ecd5da7 CHANGELOG [skip ci] 2022-09-18 12:48:21 +02:00
Michiel Borkent
2f146bd712 Fix #1364: Be tolerant of unknown tags in bb.edn 2022-09-18 12:29:16 +02:00
Eero Helenius
4926aaf85f
Add and expose babashka.classes/all-classes (#1362)
* Add and expose babashka.classes/all-classes

* Add test for babashka.classes/all-classes
2022-09-13 10:54:30 +02:00
Michiel Borkent
d0d36a2bc4 Bump clj-yaml 2022-09-13 10:19:52 +02:00
Michiel Borkent
1a700f6a69 Add -x help 2022-09-12 14:19:47 +02:00
Michiel Borkent
1631349fb6 pods: TCP_NODELAY 2022-09-12 12:43:49 +02:00
Eero Helenius
9566a7d1f1
Add more reflection class methods (#1361) 2022-09-09 20:55:11 +02:00
Michiel Borkent
03b1bfa80f sci tweaks 2022-09-09 20:51:25 +02:00
Michiel Borkent
e1094e1529
Add more reflection classes (#1360) 2022-09-09 20:24:37 +02:00
Michiel Borkent
267646fbe7 Fix gc test 2022-09-09 18:13:40 +02:00
Crispin Wellington
ea4f56886d
Expose a subset of java.lang.ref to enable hooking into the destruction/GC of objects (#1359)
* reify java.lang.Object with optional toString and finalize

* reify java.lang.Runnable

* reflection support for java.lang.Runnable

* java.lang.ref.* class exposure

* test for detection of garbage collection of Object

* added change to changelog
2022-09-09 17:25:32 +02:00
Michiel Borkent
c4c76d58ac fix exec 2022-09-09 16:00:22 +02:00
Michiel Borkent
e3e855f7ae SCI 2022-09-09 14:28:20 +02:00
Michiel Borkent
55ffa95b7d pods issue 52 2022-09-07 21:24:27 +02:00
Wes Morgan
a592104bc5
Fix download-only? fn & use new env var names (#1357) 2022-09-07 21:08:53 +02:00
Michiel Borkent
ef84df8bc9 Revert "pods: allow downloading for other os"
This reverts commit 57a6249dcb.
2022-09-07 20:02:06 +02:00
Michiel Borkent
57a6249dcb pods: allow downloading for other os 2022-09-07 19:48:15 +02:00
Michiel Borkent
42f79d0db3 Expose clojure.main/with-bindings 2022-09-07 19:29:11 +02:00
Eero Helenius
8afd672a20
Add ThreadPoolExecutor rejection policy classes (#1356) 2022-09-07 19:19:42 +02:00
Wes Morgan
c97fb958dc
Only download pods when os.name / os.arch don't match (#1354) 2022-09-07 17:11:06 +02:00
Eero Helenius
dcae949496
Add clojure.core.server/stop-server (#1355) 2022-09-07 16:45:04 +02:00
Michiel Borkent
d91eadbc9c Add ns-unalias 2022-09-07 15:09:59 +02:00
Michiel Borkent
086a5eb5a2 Add AtomicInteger and Long to full interop 2022-09-06 19:52:33 +02:00
Michiel Borkent
2400fc7be0 Add PrintWriter-on 2022-09-06 19:38:32 +02:00
Michiel Borkent
1197f4feec Add interceptor tests 2022-09-06 14:56:26 +02:00
Michiel Borkent
f116b493be process 2022-09-06 10:33:32 +02:00
Michiel Borkent
ea36bbecb9 add auspex tests to CI 2022-09-06 10:31:53 +02:00
Michiel Borkent
cd54d2a911
Improve reify error messages (#1352)
Co-authored-by: Crispin Wellington <retrogradeorbit@gmail.com>
2022-09-06 10:24:15 +02:00
Michiel Borkent
3e2738201c
auspex compatibility (#1351) 2022-09-05 22:59:31 +02:00
Michiel Borkent
18e19934d1 Fix #1350: map clojure.lang.Var to sci.lang.Var 2022-09-05 20:59:37 +02:00
Michiel Borkent
ef41365656 require core.async in time 2022-09-05 18:16:44 +02:00
Michiel Borkent
3afd85ccb3 expose core async ManyToManyChannel 2022-09-05 18:13:25 +02:00
Michiel Borkent
cae237e42a fs: write-lines 2022-09-05 17:01:09 +02:00
Michiel Borkent
2ca3b2ecc5 fs: write-bytes 2022-09-05 13:54:50 +02:00
Michiel Borkent
bebd20c088 CHANGELOG [skip ci] 2022-09-04 23:26:13 +02:00
Michiel Borkent
d15d38df8a CHANGELOG [skip ci] 2022-09-04 23:25:54 +02:00
Michiel Borkent
fc3f178c7e CHANGELOG [skip ci] 2022-09-04 23:24:21 +02:00
Michiel Borkent
8ef3bb08a8 Version bump 2022-09-04 23:22:52 +02:00
Michiel Borkent
75994d5134 Trigger another release build 2022-09-04 23:09:37 +02:00
Michiel Borkent
38feb35a53 changelog 2022-09-04 22:56:51 +02:00
Michiel Borkent
1200d5625c v0.9.162 2022-09-04 22:56:08 +02:00
Michiel Borkent
191c6b75a8 Another fix for #1339 2022-09-04 22:43:08 +02:00
Michiel Borkent
e285d970c7 changelogs [skip ci] 2022-09-04 21:39:39 +02:00
Michiel Borkent
52c60e7928 Fix #1339: SCI 2022-09-04 21:31:15 +02:00
Michiel Borkent
ccfa50b2bc
Fix #1338: add-watch segfault 2022-09-03 13:51:07 +02:00
Michiel Borkent
d5c76f774e deps.clj fix for windows exe in JAVA_HOME, thanks @Jacob-Kroeze 2022-09-03 11:59:15 +02:00
Michiel Borkent
4a42ba938f sci: minor 2022-09-02 22:30:47 +02:00
Michiel Borkent
6cdc002423 Fix #1322: better error location in tasks 2022-09-02 22:22:27 +02:00
Michiel Borkent
9b2435557d Revert "Fix #1322: improve error location"
This reverts commit 6e92c99f31.
2022-09-02 21:40:14 +02:00
Michiel Borkent
6e92c99f31 Fix #1322: improve error location 2022-09-02 21:15:27 +02:00
Michiel Borkent
c77944fad7 Bump clj-yaml 2022-09-02 11:08:33 +02:00
Michiel Borkent
813c6029c5 deps.clj 2022-09-01 21:27:33 +02:00
Michiel Borkent
4dc084502a process docs [skip ci] 2022-09-01 14:15:53 +02:00
Michiel Borkent
2150cb1e06 fs + sci 2022-08-31 17:57:24 +02:00
Michiel Borkent
57b88f2141 deps.clj [skip ci] 2022-08-30 11:12:50 +02:00
Michiel Borkent
6035a46b3a SCI upgrade 2022-08-26 11:29:42 +02:00
Lee Read
464a000b1b
Add exception classes useful for clj-http-lite (#1346)
* Add exception classes useful for clj-http-lite

Closes #1345

* update changelog
2022-08-26 09:45:12 +02:00
Michiel Borkent
d27fc0d2d6 Fix #1343: postgresql feature 2022-08-23 17:40:28 +02:00
Michiel Borkent
b5a17b3af7 fs/sci 2022-08-23 17:28:43 +02:00
Michiel Borkent
1eaa094e9b fs 2022-08-13 11:10:18 +02:00
Michiel Borkent
306d97f4ef Update babashka cli 2022-08-13 11:10:01 +02:00
Michiel Borkent
33569df040 update fs: expose :win-exts 2022-08-11 22:18:18 +02:00
Michiel Borkent
72864a18d6 bb.nrepl: preserve stacktrace on exception 2022-08-11 20:52:11 +02:00
Michiel Borkent
a7a84e872e fs issue 68 2022-08-09 16:41:49 +02:00
Michiel Borkent
5823a08d51 Bump deps.clj 2022-08-06 14:21:15 +02:00
Michiel Borkent
1b3c90870d Update rewrite-clj 2022-08-05 14:41:39 +02:00
Radford Smith
55ff3bcf98
README: Add link to babashka.org from logo (#1333) 2022-08-04 16:59:35 +02:00
Michiel Borkent
b4b0ee87fe
Marker protocol + satisfies fix (#1331) 2022-08-02 23:42:10 +02:00
Michiel Borkent
42f9440d85 last try 2022-08-02 23:19:59 +02:00
Michiel Borkent
a201788087 xcode 2022-08-02 23:16:46 +02:00
Michiel Borkent
f9327c04ca bump xcode 2022-08-02 23:12:53 +02:00
Michiel Borkent
ddee3847bf sci 2022-08-02 23:07:04 +02:00
Michiel Borkent
765a9c0846 Version bump 2022-07-31 14:20:40 +02:00
Michiel Borkent
4aa352c94a v0.9.161 2022-07-31 13:57:10 +02:00
Michiel Borkent
b0de4a79a4 fix exec 2022-07-31 13:57:00 +02:00
Michiel Borkent
de43917140 the-var 2022-07-31 13:42:44 +02:00
Michiel Borkent
c4f2d45f08 CHANGELOG 2022-07-29 21:32:36 +02:00
Michiel Borkent
2c3b1095c8 Version bump 2022-07-29 21:18:27 +02:00
Michiel Borkent
0cdb897f4f changelogs 2022-07-29 21:18:20 +02:00
Michiel Borkent
c97b08425a v0.9.160 2022-07-29 21:03:24 +02:00
Michiel Borkent
0608c71687 Make exec a function instead 2022-07-29 21:03:07 +02:00
Michiel Borkent
2a01f8720e Add note [skip ci] 2022-07-29 15:05:23 +02:00
Michiel Borkent
774b2d5d3d Version bump 2022-07-29 13:27:27 +02:00
Michiel Borkent
1bd2c18d5e changelog 2022-07-29 13:10:24 +02:00
Michiel Borkent
245a5bfaad v0.9.159 2022-07-29 13:10:01 +02:00
Michiel Borkent
dc30728f68 Version bump 2022-07-29 13:09:33 +02:00
Michiel Borkent
e8ca180529 make compatible with init 2022-07-29 13:09:00 +02:00
Michiel Borkent
05d105716a improve snippet 2022-07-29 13:04:48 +02:00
Michiel Borkent
781cc929dd v0.9.158 2022-07-29 12:57:23 +02:00
Michiel Borkent
8d24f70d73 task integration 2022-07-29 12:51:43 +02:00
Michiel Borkent
1b3adaaf64 -x 2022-07-29 12:23:28 +02:00
Michiel Borkent
dc5b36bbe6 bundle babashka cli 2022-07-29 12:00:58 +02:00
Michiel Borkent
5c03eef36b sci update 2022-07-27 17:32:38 +02:00
Michiel Borkent
e58fe9db1b
Upgrade to GraalVM 22.2.0 (#1325) 2022-07-27 12:20:32 +02:00
Michiel Borkent
9e57cb4430 Add article 2022-07-23 14:06:38 +02:00
Michiel Borkent
5c246ccccb process: improve tokenize 2022-07-16 17:02:23 +02:00
Michiel Borkent
cde09afa10 news 2022 7 2022-07-15 23:39:32 +02:00
Michiel Borkent
9c92500297 news 2022 7 2022-07-15 23:39:02 +02:00
Michiel Borkent
19f58fca83 news 2022 7 2022-07-15 23:35:54 +02:00
Michiel Borkent
55ba655fab news 2022 7 2022-07-15 23:34:41 +02:00
Michiel Borkent
4a76fd050d news 2022 7 2022-07-15 23:33:20 +02:00
Michiel Borkent
30dcb2ad86 news 2022 7 2022-07-15 23:29:37 +02:00
Michiel Borkent
8aba3ffc2d news 2022 6 2022-07-15 23:19:34 +02:00
Michiel Borkent
bf06830353 news 2022 5 2022-07-15 23:10:12 +02:00
Michiel Borkent
536f39d435 news 04 22 2022-07-15 23:06:05 +02:00
Michiel Borkent
ac9b249cc8 news 2022-07-15 21:44:23 +02:00
Michiel Borkent
8f447cf43b partial news 03 2022 2022-07-15 21:35:28 +02:00
Michiel Borkent
3cf09e12fa news 03 2022 2022-07-15 21:30:23 +02:00
Michiel Borkent
dca1d2693c news for jan 2022 2022-07-15 21:21:24 +02:00
Michiel Borkent
0ab0cb2410 news 2022-07-15 21:09:25 +02:00
Michiel Borkent
e1544f3d65 SCI with different CLJS analyzer loading 2022-07-13 10:45:06 +02:00
Michiel Borkent
4e2ef2f152
sci: needs-ctx refactor (#1319) 2022-07-11 13:00:19 +02:00
Michiel Borkent
e20ba643ff
Sci issue 774 interpreter stacktrace (#1318) 2022-07-11 11:52:14 +02:00
Michiel Borkent
22763c6485 sync process and sci [skip ci] 2022-07-08 23:16:42 +02:00
Rahuλ Dé
00ea105d4a
Skip cirrus (#1315)
* skip cirrus on irrelevant chnages

* wrong expr
2022-07-06 21:43:59 +02:00
Rahuλ Dé
3dfcc74324
skip appveyor on irrelevant files (#1314)
* skip appveyor on irrelevant files

* YAML?
2022-07-06 21:25:38 +02:00
Brandon Stubbs
d18ecbd22f
add bb-github-app project (#1313) 2022-07-06 20:50:16 +02:00
Michiel Borkent
38185d5658 bb process [skip ci] 2022-07-04 21:29:22 +02:00
Michiel Borkent
21fd8e3a3f bb process 2022-07-04 21:10:44 +02:00
Michiel Borkent
cdbe07ad45 bb process 2022-07-04 21:01:14 +02:00
Michiel Borkent
32ac3c5398
Manifest dir with env var (#1312) 2022-07-04 19:59:04 +02:00
Rahuλ Dé
e7c504b331
skip logo paths and in actions (#1311)
* skip logo paths and in actions

* [skip ci] Keep CI happy
2022-07-04 08:43:56 +02:00
Michiel Borkent
7b10adc69a Add schema 2022-07-03 13:46:23 +02:00
Michiel Borkent
4aa6cfc472 Add to projects 2022-07-03 13:42:45 +02:00
Michiel Borkent
90add0e787 Meander tests 2022-07-03 13:41:30 +02:00
Michiel Borkent
1a48bdf4bc Add malli to project 2022-07-03 13:31:02 +02:00
Michiel Borkent
16e427848d Add malli tests 2022-07-03 13:14:25 +02:00
Michiel Borkent
01e414c4d1 defn metadata tweak 2022-07-03 13:03:08 +02:00
José Luis Lafuente
f044ba15cd
Fix misspelling: BABAHSKA -> BABASHKA (#1308) 2022-07-03 13:02:15 +02:00
Michiel Borkent
f8b0a00a17 SCI: preserve file metadata in defn 2022-07-03 12:38:55 +02:00
Michiel Borkent
53aa17dbde SCI: don't eval metatada on defn body 2022-07-03 12:19:25 +02:00
Michiel Borkent
abc15c4959 Version bump 2022-07-01 13:12:24 +02:00
Michiel Borkent
0751e39eac v0.8.157 2022-07-01 12:46:22 +02:00
Michiel Borkent
833318edb2 Flair [skip ci] 2022-07-01 11:59:01 +02:00
Michiel Borkent
9cbdc8f767 Flair [skip ci] 2022-07-01 11:40:43 +02:00
Michiel Borkent
0c9ddadd90 Flair [skip ci] 2022-07-01 11:39:24 +02:00
Michiel Borkent
2688156b78 Add raw HTML to README 2022-07-01 11:35:07 +02:00
Michiel Borkent
3f404746b4
Support Java classes for Malli (#1304) 2022-06-30 17:54:47 +02:00
Michiel Borkent
f491d02ba0 sci: deftype with mutable fields 2022-06-30 14:21:06 +02:00
José Luis Lafuente
3564cac6b3
Fix misspelling (#1303) 2022-06-29 22:48:19 +02:00
Michiel Borkent
04f16e220c Add logo [skip ci] 2022-06-27 20:15:57 +02:00
Michiel Borkent
e651de400a Update deps.clj tools jar to 1.11.1.1149 2022-06-27 17:19:27 +02:00
Michiel Borkent
aec2848e24 Fix nrepl server built-in 2022-06-25 21:30:34 +02:00
Michiel Borkent
72e9b6ceee process update 2022-06-25 21:21:27 +02:00
Michiel Borkent
6259797f6a SCI 0.3.32 2022-06-23 16:58:48 +02:00
Michiel Borkent
0b471636e1 logo [skip ci] 2022-06-22 12:03:31 +02:00
Rahuλ Dé
512dbf9ea5
Optimise executors when shorted (#1301)
* Optimise executors when shorted

* Test short

* Also handle mac

* Test short
2022-06-21 15:32:23 +02:00
Rahuλ Dé
b5dea3563d
Pass correct arch (#1300)
* [wip] pass correct arch

* [wip] pass arch only when aarch64

* [skip ci] add branch filter back to docker
2022-06-20 22:20:50 +02:00
agata-anastazja
381b9f0a4f
use dynamic configuration to short CI (#1294) 2022-06-20 20:03:03 +02:00
Michiel Borkent
7769675648 sci [skip ci] 2022-06-20 12:49:01 +02:00
Odd A
573db8ea79
Exposing babashka.nrepl.server-functions (#1297)
Co-authored-by: Odd Andreas Sørsæther <odd.andreas.sorsether@nav.no>
Co-authored-by: Odd Andreas Sørsæther <odd.andreas@ardoq.com>
2022-06-20 12:48:31 +02:00
Michiel Borkent
9ed705f8db Pod namespaces come before namespaces from source 2022-06-20 12:14:48 +02:00
Michiel Borkent
0a55554bb8 SCI: preserve docstring 2022-06-19 23:03:01 +02:00
Michiel Borkent
cc2c682e79 SCI now has memfn 2022-06-19 22:41:52 +02:00
Michiel Borkent
56d2c2b7d5 sci [skip ci] 2022-06-19 20:38:49 +02:00
Michiel Borkent
14b177ad21 Add schema tests to CI, fixes #1296 2022-06-15 21:13:53 +02:00
Michiel Borkent
39f057b3ae SCI update 2022-06-15 17:58:58 +02:00
Michiel Borkent
115f89ac81 Fix feature map 2022-06-09 08:52:21 +02:00
Michiel Borkent
34bd4edf1e CHANGELOGS [skip ci] 2022-06-08 20:15:44 +02:00
Michiel Borkent
ebdbd9ea00 Version bump 2022-06-08 20:06:28 +02:00
Michiel Borkent
e979765275 CHANGELOGS 2022-06-08 20:06:21 +02:00
Michiel Borkent
60da44512e v0.8.156 2022-06-08 19:40:56 +02:00
Michiel Borkent
e290c3c2e0 SCI: defprotocol symbol 2022-06-08 19:16:51 +02:00
Michiel Borkent
ba0ce4ca23 Update 2022-06-08 17:44:50 +02:00
Michiel Borkent
30ebdfb6e0 SCI: record in syntax quote resolves to Type 2022-06-08 17:41:23 +02:00
Michiel Borkent
ecdf952b23 Bump sci 2022-06-08 14:09:04 +02:00
Michiel Borkent
ed0875b52b install script [skip ci] 2022-06-07 23:12:33 +02:00
Michiel Borkent
3c7468b6de cirrus 2022-06-07 22:55:47 +02:00
Michiel Borkent
c0d4127b57 cirrus 2022-06-07 22:24:57 +02:00
Michiel Borkent
f0a9e2b88c cirrus 2022-06-07 22:16:30 +02:00
Michiel Borkent
1669983cb2 github token 2022-06-07 22:15:36 +02:00
Michiel Borkent
05223adf7e release 2022-06-07 21:49:00 +02:00
Michiel Borkent
9698ddae61 cirrus 2022-06-07 21:37:25 +02:00
Michiel Borkent
83c4ccff2c short always 2022-06-07 20:21:38 +02:00
Michiel Borkent
826b955543 Add cirrus 2022-06-07 20:18:42 +02:00
Michiel Borkent
47ceae0ba0 process/exec: arg0 2022-06-06 22:25:12 +02:00
Michiel Borkent
201370275e Bump Clojure to 1.11.1 2022-06-01 15:42:09 +02:00
Michiel Borkent
8e3f22db7a
Migrate to sci.lang.Var (#1285) 2022-05-30 22:07:12 +02:00
Michiel Borkent
5ec6fca29a pods: fix benign socket closed exception 2022-05-30 10:11:54 +02:00
Rahuλ Dé
35b8204704
Use extracted CI short script (#1284)
* Use extracted CI short script

* Use clojure build env

* Update build script
2022-05-29 22:58:09 +02:00
Michiel Borkent
40fdb19c95
SCI record "classes" are now instance of sci.lang.Type (#1283) 2022-05-29 11:40:05 +02:00
agata-anastazja
94034063db
Skip CI run if commit only documentation changes (#1282) 2022-05-28 22:01:20 +02:00
Michiel Borkent
b8a3d2447c api docs updates [skip ci] 2022-05-28 16:05:16 +02:00
Michiel Borkent
162ca90287 Add process/shell binding 2022-05-28 11:38:55 +02:00
Michiel Borkent
a858269c74 fix #1281: upgrade httpkit to 2.6.0-RC1 2022-05-28 11:25:51 +02:00
Michiel Borkent
6442487110 bb.process 0.1.3 2022-05-28 11:24:16 +02:00
Michiel Borkent
cfdb4f69e6 deps.edn update [skip ci] 2022-05-27 13:40:59 +02:00
Michiel Borkent
17c047418e
Add support for sun.misc.SignalHandler (#1276) 2022-05-27 13:26:40 +02:00
Michiel Borkent
92b4dc7620 Bump cheshire 2022-05-26 23:12:58 +02:00
Rahuλ Dé
cb4cbb6691
inline bb badge (#1275) [skip ci] 2022-05-24 14:24:06 +02:00
Sohalt
d81e58cf43
Add documentation for usage with nix (#1274) [skip ci] 2022-05-23 18:10:45 +02:00
Michiel Borkent
818ea38a82 Roll back sci.runtime 2022-05-23 08:57:14 +02:00
Michiel Borkent
09284932e4 Add sci.runtime 2022-05-22 21:41:29 +02:00
Michiel Borkent
8b3698063f fs: strip and split-ext less reliant on file system 2022-05-22 12:28:06 +02:00
Michiel Borkent
d547fbf31a fs/read-all-lines, support charset 2022-05-22 12:20:19 +02:00
Michiel Borkent
f1019384b1 bb.nrepl: fix completions for static interop 2022-05-20 15:04:08 +02:00
Michiel Borkent
9f6ffcf11c SCI update 2022-05-20 14:38:01 +02:00
Thiago Kenji Okada
20e6b447b2
Add installation instructions using nix (#1272) [skip ci] 2022-05-20 13:12:59 +02:00
Michiel Borkent
0f8458fd03 SCI: default pprint impl for SCI records 2022-05-20 11:43:35 +02:00
Michiel Borkent
7bf2ca0e57 babashka/sci#745: syntax quote for import record 2022-05-20 11:37:49 +02:00
Michiel Borkent
6089496d9c babashka/sci#744: syntax quote for records should return class repr 2022-05-19 21:35:24 +02:00
Michiel Borkent
8a25716ef4 Fix symbolic representation of records 2022-05-19 21:19:42 +02:00
Michiel Borkent
55f96e69fe fix babashka/sci#743: satisfies? of marker protocol via extend-{type, protocol} 2022-05-19 21:04:44 +02:00
Michiel Borkent
b288abc542 SCI: simple-dispatch 2022-05-19 12:11:24 +02:00
Michiel Borkent
77b75fe0b9 SCI: marker protocol on record 2022-05-19 11:13:59 +02:00
Michiel Borkent
eea1cdadee SCI: preserve closed over value analysis when using fixed + varargs arity 2022-05-19 10:23:47 +02:00
Michiel Borkent
ab503951da SCI: fix resolving of class 2022-05-18 23:08:33 +02:00
Michiel Borkent
27189657a8 SCI: custom record impl, fixes record equiv and with-meta 2022-05-18 17:31:07 +02:00
Michiel Borkent
9b611a42fe docs [skip ci] 2022-05-17 16:56:32 +02:00
Michiel Borkent
0d88606c9d process: improve tokenize 2022-05-17 11:06:01 +02:00
Michiel Borkent
7b729c5f4b fly io docs [skip ci] 2022-05-16 14:18:32 +02:00
Michiel Borkent
1794fe9dd4 fly io docs [skip ci] 2022-05-16 14:16:26 +02:00
Michiel Borkent
a977f04181 AbstractMethodError 2022-05-16 10:55:33 +02:00
Michiel Borkent
2c79e9dd30 AFunction 2022-05-16 10:45:40 +02:00
Michiel Borkent
f9ca314c31 sci 2022-05-16 10:03:35 +02:00
Michiel Borkent
861066082f Print-dup 2022-05-15 21:44:08 +02:00
Michiel Borkent
6cf1a3ff6a
SCI: use explicit global print-method (#1268) 2022-05-15 14:23:16 +02:00
Michiel Borkent
063a0b01c6 sync pods [skip ci] 2022-05-14 20:17:43 +02:00
Michiel Borkent
3b94b51780 pods update 2022-05-14 18:44:22 +02:00
Michiel Borkent
c1539fe3b0
Some additions that at least make plumatic/schema run partially (#1267) 2022-05-14 13:10:16 +02:00
Michiel Borkent
f8657cd59f Add note [skip ci] 2022-05-13 13:42:32 +02:00
Michiel Borkent
8506c30507 CHANGELOGS [skip ci] 2022-05-13 11:07:11 +02:00
Michiel Borkent
96d93d3940
fix #1264: add support for calling ScheduledExecutorService 2022-05-13 11:04:33 +02:00
Michiel Borkent
5d47397ffc Add BindException 2022-05-10 14:40:45 +02:00
Michiel Borkent
d9ff456e60
Re-enable mac on CircleCI (#1263) 2022-05-09 17:57:41 +02:00
Michiel Borkent
6960bc5d24 Tweak release script 2022-05-09 17:01:54 +02:00
Michiel Borkent
73306079ec Pass env 2022-05-09 16:55:27 +02:00
Michiel Borkent
fe88348bf8 Add exec 2022-05-09 15:09:54 +02:00
Rahuλ Dé
4a13965a6d
Disable JVM on Actions, better triggers (#1262) 2022-05-08 19:49:13 +02:00
Rahuλ Dé
5b455cd51b
Refine Actions (#1261) 2022-05-08 10:31:14 +02:00
Michiel Borkent
eee3b55f56 Try newer machines for aarch64 2022-05-06 16:51:59 +02:00
Michiel Borkent
729de81537 Bump ghra 2022-05-06 16:39:54 +02:00
Michiel Borkent
6941a5c2ff Bump ghra [skip ci] 2022-05-06 16:06:09 +02:00
Michiel Borkent
48501c6f52 Version bump 2022-05-06 15:52:29 +02:00
Michiel Borkent
4ff35902f3 CHANGELOGS [skip ci] 2022-05-06 14:59:11 +02:00
Michiel Borkent
3eee5870ca v0.8.2 2022-05-06 14:57:01 +02:00
Michiel Borkent
f1fcf24822 Support BABASHKA_PODS_DIR 2022-05-06 14:53:44 +02:00
Michiel Borkent
786019ef2a fs / sci [skip ci] 2022-05-06 14:33:28 +02:00
Michiel Borkent
61ad485ce0 updates 2022-05-05 22:50:34 +02:00
Michiel Borkent
9e5bdc4b0f process: exec 2022-05-05 14:36:32 +02:00
Michiel Borkent
200a01fe85 tasks: use process wrapper 2022-05-04 19:32:11 +02:00
Michiel Borkent
1e8ec5285a fs: cwd 2022-05-04 17:29:57 +02:00
Michiel Borkent
20e8171869 CHANGELOGs [skip ci] 2022-05-04 15:07:20 +02:00
Michiel Borkent
b4dfb91fd3
Expose edamame, fixes #549 and #1258 (#1259) 2022-05-04 15:02:30 +02:00
Michiel Borkent
8338afb066 slightly faster 2022-05-03 23:44:47 +02:00
Michiel Borkent
45df5bcc8f Fix catvec polyfill 2022-05-03 23:20:36 +02:00
Michiel Borkent
c34109d828 Fix tests 2022-05-03 16:59:31 +02:00
Michiel Borkent
41dcc9239a Use into as catvec replacement for now 2022-05-03 16:47:43 +02:00
Michiel Borkent
e65f86a39d Update fs 2022-05-02 13:45:02 +02:00
Michiel Borkent
7f0fd86d8b Fix default aliases 2022-05-01 20:52:12 +02:00
Michiel Borkent
fbc5b69ab1 Update process with pre-start-fn 2022-05-01 20:38:56 +02:00
Michiel Borkent
22e56ce779 Read-eval 2022-04-30 20:49:42 +02:00
Michiel Borkent
085fffd95b fix #1252: update docs for m1 2022-04-30 12:03:01 +02:00
Michiel Borkent
226d5c5976 fix #1233: don't print error to stdout in prepl 2022-04-30 11:59:57 +02:00
Michiel Borkent
b93198c965
Compatibility with fipp and puget (#1253)
See brandonbloom/fipp#81
2022-04-30 11:46:36 +02:00
Brett Rowberry
1ef90f98ef
Update README.md (#1251) [skip ci] 2022-04-28 12:21:54 +02:00
Michiel Borkent
fc7df082b7
Bump to newest graalvm (#1250) 2022-04-26 16:27:49 +02:00
Michiel Borkent
c83786593a Upgrade deps.clj 2022-04-25 22:52:09 +02:00
Michiel Borkent
9727cabaf3 Add fields for reflection 2022-04-23 12:02:11 +02:00
Michiel Borkent
24f124d955 fix #1237: add tests for numeric tower 2022-04-23 11:35:49 +02:00
Michiel Borkent
b92af69d1d SCI: support invoking field, without dash 2022-04-23 11:29:06 +02:00
Bob
1113037b51
add Clarktown lib tests (#1247)
* add lib tests for clarktown

* add clarktown to library list

* make code block test agnostic to line separator
2022-04-17 20:11:33 +02:00
Michiel Borkent
1f7dba35c9
Bump SCI 2022-04-17 00:34:23 +02:00
Michiel Borkent
8bdb2a21da babashka.nrepl: support pprint length 2022-04-16 12:44:49 +02:00
Michiel Borkent
4bfe0eec89 Convey print-length to pprint and allow set! 2022-04-16 11:37:14 +02:00
Michiel Borkent
e3a6dbacb3 Version bump 2022-04-15 21:42:04 +02:00
Michiel Borkent
1ee298a411 v0.8.1 2022-04-15 21:15:27 +02:00
Michiel Borkent
917713f24f README [skip ci] 2022-04-15 20:48:25 +02:00
Rahuλ Dé
d7f180cdbe
Bash -> Clojure: Take 2 (#1243)
* Bash -> Clojure: Take 2

* Apply better naming

* Temp disable circle branch filter

* Pass platforms correctly to buildx

* Rename platforms, better checks

* Add circle and script guards for branch and PR

* Fix guard
2022-04-15 19:20:52 +02:00
Michiel Borkent
d830e8f576 Revert "First pass at bash cleanup (#1239)"
This reverts commit b5a4e0a170.
2022-04-15 13:27:29 +02:00
Michiel Borkent
ae7792634f Process: arg vec type hints 2022-04-15 11:48:40 +02:00
Michiel Borkent
1c03d74235 fs: type hints on arg vecs 2022-04-15 11:43:41 +02:00
Michiel Borkent
23a97233ad SCI: support *print-dup* 2022-04-15 11:38:31 +02:00
Michiel Borkent
83963116b0 SCI: fix destructuring in protocol impl 2022-04-15 11:25:42 +02:00
Rahuλ Dé
b5a4e0a170
First pass at bash cleanup (#1239) 2022-04-14 23:35:19 +02:00
Michiel Borkent
d8db9eee63
fix #1231: missing methods in reify should fall back to default interface methods (#1240) 2022-04-14 18:14:31 +02:00
Leah Neukirchen
52448f7597
[#556] Add server-status to org.httpkit.server (#1238) 2022-04-12 20:53:15 +02:00
Bob
3d0befb52b
update some SciVar names (metadata-wise) to align with babashka name (#1236)
* update SciVar names to align with the symbols in the namespace maps

* make test using a bb script more consistent with others

* update changelog
2022-04-07 14:02:06 +02:00
Michiel Borkent
60a3e86449 Added Fluree to companies [skip ci] 2022-04-06 21:22:10 +02:00
Michiel Borkent
f3526d80a4 SCI: fix name metadata on vars 2022-04-06 19:36:45 +02:00
Michiel Borkent
6eff4cc738 Add missing methods on iterator 2022-04-05 11:15:13 +02:00
Wes Morgan
211757d5a4
Add prepare subcommand (#1229)
* Add prepare subcommand

Downloads deps & pods, caches pod metadata, and then exits

* Add prepare subcommand to CHANGELOG

Co-authored-by: Michiel Borkent <michielborkent@gmail.com>
2022-04-05 11:04:38 +02:00
Stel Abrego
d2278835f1
Fix #1041: Improve error message when regex literal in EDN config (#1230)
* Improve error message when regex literal in EDN config (#1041)

Regex literal syntax (example: #"^foo") is not allowed in EDN. With the
ability to write tasks in the config file, users may mistakenly try to
include regex literals. This patch improves the error message by
informing the user that literal regex syntax is not allowed and
recommends using re-pattern instead.

* Update changelog

* Fixup main.clj

* Fixup changelog
2022-04-05 11:03:39 +02:00
Michiel Borkent
60df83b629 Version bump 2022-04-04 16:39:45 +02:00
Michiel Borkent
d4b9f5ed10 CHANGELOG 2022-04-04 16:22:45 +02:00
Michiel Borkent
9b19642039 CHANGELOG 2022-04-04 16:19:35 +02:00
Michiel Borkent
3b9cd12931 v0.8.0 2022-04-04 16:18:36 +02:00
Michiel Borkent
b102a4ae0e Upgrade tests to hugsql 0.5.3 2022-04-04 13:52:36 +02:00
Michiel Borkent
db9a8ff10c Add unchecked math 2022-04-03 21:39:08 +02:00
Michiel Borkent
f1db01aede Add ->Eduction 2022-04-03 21:39:08 +02:00
Wes Morgan
4886fe48ae
Link to declarative pods docs in changelog (#1228) [skip ci] 2022-04-03 20:28:00 +02:00
Michiel Borkent
5959ba99ec CHANGELOG [skip ci] 2022-04-03 15:06:37 +02:00
Michiel Borkent
f1adb99eff Revert "Bump Clojure"
This reverts commit fabb945f8c.
2022-04-03 15:06:22 +02:00
Michiel Borkent
fabb945f8c Bump Clojure 2022-04-03 14:58:32 +02:00
Michiel Borkent
7f7b66aeaf CHANGELOG [skip ci] 2022-04-03 14:55:10 +02:00
Michiel Borkent
76a57500af bb.curl: fix: last set-cookie headers on a page overwrites the ones before 2022-04-03 14:45:13 +02:00
Michiel Borkent
1063868554 fix #1211: return exit code 130 on sigint 2022-04-03 14:11:37 +02:00
Michiel Borkent
f09e085c75 Move bb.edn in uberjar to META-INF 2022-04-03 13:36:00 +02:00
Michiel Borkent
e81ef4aac0
Declarative pod support for uberscript (#1227) 2022-04-02 23:41:04 +02:00
Michiel Borkent
7af93adf15 Fix test 2022-04-02 17:47:27 +02:00
Michiel Borkent
ea4c4eae77 windows fix 2022-04-02 17:09:34 +02:00
Wes Morgan
963bd7957a
Feature: declarative pods support in uberjars (#1217)
* Store bb.edn in uberjar & load when run from there

* Sync resources deps.edn w/ root

* Throw error if --config arg doesn't exist

...instead of silently falling back on ./bb.edn

* Fix jar file arg parsing

Moving all arg parsing up above bb.edn ingestion made tasks turn into files to load. But this is a chicken-and-egg problem w/ uberjars b/c the bb.edn is inside the jar file, so we need that first. So I extracted the file parsing out into its own fn and put the full arg parsing back where it was after ingesting bb.edn.

* Fix local pod key in error message

* Ensure resources dir exists when copying bb.edn into it

* Copy bb.edn to temp dir when building uberjar

..and add that dir to the classpath for the jar

* Only put :pods in uberjar bb.edn

* Small readability fix

* Add ret val type hints for classpath/resource

Got a reflection warning on one of my calls

* Add a test for uberjars with bb.edn-declared pods

* Only run uberjar-with-pods-test on amd64 for now
2022-04-02 16:51:08 +02:00
Michiel Borkent
1cf914ad1c Bump Selmer 2022-04-01 18:22:56 +02:00
Michiel Borkent
ff54332977 Make java.util.Scanner available 2022-03-31 12:07:35 +02:00
Michiel Borkent
4d24cdca2a
Proxy support for PipedInputStream and PipedOutputStream
* Spire requires proxy support for java.io.PipedInputStream and java.io.PipedOutputStream

* proxy support for java.io.PipedInputStream and java.io.PipedOutputStream

* proxy tests for PipedInputStream and PipedOutputStream

Co-authored-by: Crispin Wellington <retrogradeorbit@gmail.com>
2022-03-31 10:00:16 +02:00
Michiel Borkent
bee5a88d16 Update fs: which improvements 2022-03-31 09:45:54 +02:00
Thiago Kenji Okada
a4a8ce5306
Unbump zlib to version 1.2.11 (#1222)
The newer 1.2.12 version is breaking the tests. The older version is not
available in the main download path, however it is still available in
the archive.
2022-03-28 18:07:42 +02:00
Michiel Borkent
bffc4bf00c Use old musl 2022-03-28 17:55:04 +02:00
Michiel Borkent
bef6d99740 Revert "Fix musl"
This reverts commit c7428da216.
2022-03-28 17:53:55 +02:00
Michiel Borkent
c7428da216 Fix musl 2022-03-28 17:14:09 +02:00
Michiel Borkent
b29a419bd0 deps.clj 2022-03-28 17:03:24 +02:00
Michiel Borkent
3bb54ee5e0 fix process pprint 2022-03-27 17:02:10 +02:00
Michiel Borkent
d786a5a9b2 process pprint 2022-03-27 17:01:13 +02:00
Michiel Borkent
6c568d62d4 Process: fix for pprint 2022-03-27 16:27:44 +02:00
Michiel Borkent
c0007e55c4 Revert "process: pprinting"
This reverts commit ba582d14a2.
2022-03-27 12:21:04 +02:00
Michiel Borkent
ba582d14a2 process: pprinting 2022-03-27 12:06:34 +02:00
Michiel Borkent
cd013227d5 Revert "Support sun.misc.Signal handlers (#1221)"
Shutdown code should be handled with a shutdown hook

This reverts commit 81a1fd4c86.
2022-03-27 12:04:50 +02:00
Michiel Borkent
81a1fd4c86
Support sun.misc.Signal handlers (#1221) 2022-03-26 22:45:49 +01:00
Michiel Borkent
72ae663842 fix #1220: add reflection on java.util.concurrent.Future 2022-03-25 12:07:30 +01:00
Michiel Borkent
586b2234aa SCI 2022-03-25 11:51:22 +01:00
Michiel Borkent
41703971b1 SCI 0.3.4 2022-03-24 21:46:17 +01:00
Michiel Borkent
450bddef20 Bump Clojure to 1.11 2022-03-23 23:50:54 +01:00
Michiel Borkent
1ad93077c1 fix #1216: fix core.async alts example with polyfill 2022-03-23 23:49:09 +01:00
Michiel Borkent
c3cae22541 pods: Rosetta2 fallback 2022-03-23 19:33:49 +01:00
Wes Morgan
e602286799
feat #863: Load pods from bb.edn (#1205)
Co-authored-by: Michiel Borkent <michielborkent@gmail.com>
2022-03-23 17:08:59 +01:00
Michiel Borkent
68bed0723c Update pods 2022-03-23 17:01:17 +01:00
Michiel Borkent
e83ef7a69f Bump timbre 2022-03-23 15:12:15 +01:00
Michiel Borkent
1e72562c9a Bump SCI 2022-03-23 13:09:22 +01:00
Michiel Borkent
8d1de7285e Update pods lib 2022-03-23 12:27:46 +01:00
Michiel Borkent
6305f7450d
Add compatibility with GraalVM 22.1 (#1215)
* do not init java net http classes at build time
2022-03-22 16:41:26 +01:00
Michiel Borkent
6d35314096 Revert pods change 2022-03-22 14:00:41 +01:00
Michiel Borkent
b6a3a9cdf5 Revert "pods: declarative pods prep"
This reverts commit d8d0a50625.
2022-03-22 14:00:05 +01:00
Michiel Borkent
d8d0a50625 pods: declarative pods prep 2022-03-22 12:47:37 +01:00
Michiel Borkent
b4b22bfe70 SCI: add let* 2022-03-19 22:32:16 +01:00
Michiel Borkent
25a57b483c
meander: interop on Iterator 2022-03-19 11:34:20 +01:00
Michiel Borkent
fc0bb83ca2 meander interop 2022-03-19 11:04:37 +01:00
Michiel Borkent
b395084d47 meander: nth interop 2022-03-19 10:27:45 +01:00
Michiel Borkent
ad8982d0c6 meander: unchecked-dec + disjoin interop 2022-03-19 10:14:01 +01:00
Michiel Borkent
152234937c meander interop 2022-03-19 00:25:59 +01:00
Michiel Borkent
dd6ca6e623 Fix and add reflections for vectors and maps 2022-03-19 00:02:08 +01:00
Michiel Borkent
c09ff9e61c Allow .indexOf on vector 2022-03-18 23:49:17 +01:00
Michiel Borkent
108665ebb9 SCI: loop doesn't expand in fully qualified let 2022-03-18 23:47:18 +01:00
Michiel Borkent
7bfab37077 Add specter tests 2022-03-18 19:35:44 +01:00
Rahuλ Dé
bd3adf029e
Add official bb compatible badge (#1212) [skip ci] 2022-03-16 17:57:52 +01:00
Michiel Borkent
b245b9c890 Add video by Daniel Amber [skip ci] 2022-03-15 11:10:35 +01:00
Michiel Borkent
b1f981799c Upgrade sub-projects: sci, deps.clj 2022-03-14 19:53:45 +01:00
Michiel Borkent
75860aad68 CHANGELOG [skip ci] 2022-03-13 20:31:00 +01:00
Michiel Borkent
694fe87ebd CHANGELOG [skip ci] 2022-03-13 20:29:34 +01:00
Michiel Borkent
9047660016 Version bump 2022-03-13 20:24:24 +01:00
Michiel Borkent
ea03cc09e4 v0.7.8 2022-03-13 20:03:39 +01:00
Michiel Borkent
701c719c78 Expose clojure.lang.PersistentHashMap/EMPTY 2022-03-13 16:16:03 +01:00
Michiel Borkent
238786df0b SCI: identical check on empty vec 2022-03-13 14:13:32 +01:00
Michiel Borkent
569f62c928 Add *compile-files* var 2022-03-13 13:15:50 +01:00
Michiel Borkent
158082e87e Support method of super 2022-03-13 13:09:23 +01:00
Michiel Borkent
2260e02963 SCI: support :sigs on protocol map 2022-03-13 13:08:41 +01:00
Michiel Borkent
daedd1e07c SCI: fix IRecord protocol extension 2022-03-13 11:40:59 +01:00
Joshua Davey
5f4c6e52d0
Add Deflater and DeflaterOutputStream (#1209)
Deflater allows one to control, for example, the level of compression
used. The DeflaterOutputStream is the parent of GZIPOutputStream
class, and allows raw zlib compressed stream (i.e. no gzip header/footer).
2022-03-12 23:12:01 +01:00
Michiel Borkent
0e744b1e2f SCI: fix fallback protocol method on records 2022-03-12 20:45:29 +01:00
Michiel Borkent
e444267428 SCI: omit dash in clojure-version when nil qualifier 2022-03-12 14:51:57 +01:00
Michiel Borkent
6320cddc74 Add lib tests for expectations.clojure-test 2022-03-12 14:40:52 +01:00
Michiel Borkent
315d58e7a1 fix #1202: add tests for hugsql 2022-03-12 14:01:14 +01:00
Michiel Borkent
3624de4a92 CHANGELOGS 2022-03-12 13:37:26 +01:00
Michiel Borkent
ef0a9f4177 SCI: add *clojure-version* and (clojure-version) 2022-03-12 13:35:29 +01:00
Michiel Borkent
153bdb1905 fs: add windows predicate 2022-03-12 13:34:56 +01:00
Michiel Borkent
cda02cd3a3 disable flaky test 2022-03-11 12:44:10 +01:00
Michiel Borkent
fff4bf779f
Docs [skip ci] (#1208) 2022-03-11 12:31:45 +01:00
Michiel Borkent
3759d14baf
Add clojure.data.priority-map as built-in, support aysylu/loom lib (#1207) 2022-03-11 12:23:31 +01:00
mknoszlig
f9451f5de0
feat #1204: add babashka.config property 2022-03-11 11:03:42 +01:00
Michiel Borkent
92ca3c6501 nrepl 2022-03-10 23:34:43 +01:00
Michiel Borkent
7c81443ae7 Add missing classes to support specter 2022-03-08 16:21:20 +01:00
Michiel Borkent
9d685d7f38 sci [skip ci] 2022-03-07 17:34:31 +01:00
Michiel Borkent
56c7bcd777
Add part of clojure.tools.reader.reader-types to support hugsql (#1201) 2022-03-07 16:55:14 +01:00
Michiel Borkent
630aadcb7d SCI: declare as macro 2022-03-06 16:25:30 +01:00
Michiel Borkent
0107288ec5 fix #938: drop location metadata from symbols, except top level 2022-03-05 21:08:45 +01:00
Michiel Borkent
3f49ad3b89
fix #1199: print-method impls on records (#1200) 2022-03-05 17:11:11 +01:00
Michiel Borkent
f0f87f0794 doc [skip ci] 2022-03-04 20:16:25 +01:00
Michiel Borkent
4b6d83ffb5 Version bump 2022-03-04 15:26:09 +01:00
Michiel Borkent
3d979ef964 v0.7.7 2022-03-04 14:50:24 +01:00
Michiel Borkent
4179b6e2ea CHANGELOGS [skip ci] 2022-03-04 12:43:49 +01:00
Michiel Borkent
dc5d756394
pprint: add get-pretty-writer (#1198)
Closes #1197
2022-03-04 12:42:27 +01:00
Michiel Borkent
638ae3aaeb CHANGELOGS [skip ci] 2022-03-03 14:48:51 +01:00
Michiel Borkent
f4cd6c2bf1
feat: compatibility with at-at 2022-03-03 11:24:52 +01:00
Michiel Borkent
9b9f4d8bfc
Readme [skip ci] 2022-03-02 17:01:12 +01:00
Michiel Borkent
f9c1e0b79d doc [skip ci] 2022-03-02 11:03:07 +01:00
Michiel Borkent
98d11acad9 libs doc updates [skip ci] 2022-03-02 10:55:09 +01:00
Michiel Borkent
76accde8da
Add clojure.instant/parse-timestamp 2022-03-01 20:33:49 +01:00
The Alchemist
0ac8495d28
minor typo (#1193) [skip ci] 2022-02-28 23:08:53 +01:00
Michiel Borkent
bbd8743894 tools jar 1.10.3.1087 2022-02-28 21:46:15 +01:00
Michiel Borkent
e7571119fb feat #1192: expose *assert* 2022-02-28 11:06:38 +01:00
Michiel Borkent
61e47555f9 feat #1187: Add :result key to (current-task) map that can be used in :leave task hook 2022-02-27 12:10:33 +01:00
Michiel Borkent
ba1c66585a CHANGELOGS [skip ci] 2022-02-27 11:50:46 +01:00
Michiel Borkent
141881376d
fix #1190: task dependencies resolve as core.async channels (#1191) 2022-02-27 11:49:40 +01:00
Michiel Borkent
5c6e2b5167 cli-matic Windows test 2022-02-25 11:27:58 +01:00
Michiel Borkent
3eace3278f Add cli-matic lib tests 2022-02-24 17:20:11 +01:00
Michiel Borkent
a99e681572 CHANGELOGS [skip ci] 2022-02-24 13:01:05 +01:00
Michiel Borkent
17cb349fd6 Version bump 2022-02-24 12:59:37 +01:00
Michiel Borkent
9e8bb78794 v0.7.6 2022-02-24 12:39:23 +01:00
Michiel Borkent
83c610ca0f fix #1180: limit bb tasks output to first line of docstring 2022-02-24 12:28:54 +01:00
Michiel Borkent
125e1c1412 fs 2022-02-24 12:20:40 +01:00
Michiel Borkent
d5cd5be675 fs/create-temp-file 2022-02-23 21:53:35 +01:00
Michiel Borkent
319c5174dd bb process: support appending to a file 2022-02-23 18:15:26 +01:00
Michiel Borkent
f620a3dde9 internal lib updates [skip ci] 2022-02-23 14:40:54 +01:00
Gabriel Horner
7126112cc3
Add latest datascript (#1185)
* Update datascript config

Add db ns, loads latest datascript and can load datascript-transit
library. All tests for pull.cljc and query.cljc pass except for queries
with fns as inputs

* Add datalog-parser to projects.md per #1171 comment
2022-02-22 14:17:58 +01:00
Michiel Borkent
1170e3cce7 SCI: constant node optimizations 2022-02-21 11:08:03 +01:00
Michiel Borkent
780f2e86ea Bump yaml lib 2022-02-21 10:46:09 +01:00
Michiel Borkent
c54d005419 SCI: protocol tweaks 2022-02-20 20:26:40 +01:00
Michiel Borkent
e365958526 SCI: constant optimimalizations 2022-02-20 17:37:51 +01:00
Michiel Borkent
cd285b9a19
SCI: refactored to protocols (#1183) 2022-02-20 12:02:08 +01:00
Michiel Borkent
44eb3625f9 CHANGELOG [skip ci] 2022-02-18 22:55:17 +01:00
Michiel Borkent
19e87a545d
fix #1181: clojure.test report does not respect *test-out* correctly (#1182) 2022-02-18 22:54:10 +01:00
Michiel Borkent
3c207e1a9b sci: JS fix 2022-02-18 21:19:38 +01:00
Michiel Borkent
e64db1028c SCI: get rid of EvalVar 2022-02-17 16:56:58 +01:00
Michiel Borkent
5dfe9c42ae SCI: simplify handling of metadata 2022-02-17 11:49:24 +01:00
Michiel Borkent
b6de3dee05 CHANGELOG [skip ci] 2022-02-16 14:18:13 +01:00
Michiel Borkent
d62e05c5f2 CHANGELOG [skip ci] 2022-02-16 11:18:44 +01:00
Michiel Borkent
665e4e12b2 Version bump 2022-02-16 11:17:46 +01:00
Michiel Borkent
dafb3ef77c v0.7.5 2022-02-16 10:48:10 +01:00
Michiel Borkent
6774757230 deps.clj: bump to 1.10.3.1082 2022-02-16 10:42:19 +01:00
Michiel Borkent
c047c6e2c5 sci [skip ci] 2022-02-15 16:50:39 +01:00
Michiel Borkent
14a8c0e0ec Add method to satisfy tests 2022-02-14 15:52:27 +01:00
Michiel Borkent
df91279967 Add clojure-msgpack to lib tests 2022-02-14 15:37:35 +01:00
Michiel Borkent
b461925981
SCI: use mutable arrays for bindings (#1177) 2022-02-14 11:52:32 +01:00
Roger Lam
9969b83341
Ensure leading zeros are not trimmed for algorithm "SHA-256", so that hash string size is always 64. (#1176) 2022-02-12 11:06:49 +01:00
Michiel Borkent
ddfdd72c73
Add 180seg to companies [skip ci] (#1173) 2022-02-11 13:26:41 +01:00
Gabriel Horner
ac6ad33fcb
Add 2 more compatible libs (#1171) 2022-02-10 13:45:15 +01:00
Michiel Borkent
a1007efdac SCI v0.2.9 [skip ci] 2022-02-09 16:32:26 +01:00
Michiel Borkent
8097019b7e Fix #1170: defmacro with a defrecord inside fails to resolve classname 2022-02-08 23:55:09 +01:00
Michiel Borkent
96a52d73d6 SCI: fix macroexpand on defrecord 2022-02-08 11:34:29 +01:00
Michiel Borkent
1718ab613b Bump transit 2022-02-05 10:36:50 +01:00
Lee Read
7c8272ab9e
Miniscule typo (#1169) [skip ci]
<foo> was interpreted as a tag and therefore disappeared when rendered
2022-02-04 16:03:33 +01:00
Michiel Borkent
fe2f0a76f6 deps.clj: bump to 1075 2022-02-02 23:11:46 +01:00
Michiel Borkent
5226d9cc0f Upgrade to clojure 11 beta1 2022-02-02 22:49:55 +01:00
Michiel Borkent
cd07a539f3
SCI: select fn env more accurately (#1168) 2022-02-02 22:47:13 +01:00
Michiel Borkent
21c121af32
SCI: select fn env earlier (#1165) 2022-02-02 13:48:59 +01:00
Michiel Borkent
8538a4aa10
Merge pull request #1162 from babashka/java_io_data_reflect_array
Adds compatibility with https://github.com/edma2/clojure-msgpack
2022-02-01 12:08:23 +01:00
Michiel Borkent
2cc7e36ec3 Add java.lang.reflect.Array#newInstance 2022-02-01 11:30:12 +01:00
Michiel Borkent
fe42f1e436 Add java.io.Data classes 2022-02-01 11:24:20 +01:00
Michiel Borkent
35ab5c8628 README [skip ci] 2022-01-31 16:32:41 +01:00
Michiel Borkent
46eb69e662
Update SCI: minor refactor for vararg recur (#1161) 2022-01-29 19:02:44 +01:00
Michiel Borkent
26cb47eac4
Update SCI: minor refactor for vararg recur (#1161) 2022-01-29 19:02:29 +01:00
Michiel Borkent
c9f4b51369 SCI: less locals 2022-01-28 17:16:55 +01:00
Michiel Borkent
d4712ad889 deps.clj: tools 1.10.3.1069 2022-01-28 14:24:08 +01:00
Michiel Borkent
c1a8c047b0 SCI: fix 15-arity + reflection 2022-01-27 14:52:22 +01:00
Michiel Borkent
63212a250b Add halt-when 2022-01-26 10:19:35 +01:00
Michiel Borkent
1c67d3e76a doc: CHANGELOGS [skip ci] 2022-01-25 18:15:10 +01:00
Michiel Borkent
8fc6074b42 doc: CHANGELOGS [skip ci] 2022-01-25 18:14:24 +01:00
Michiel Borkent
b7461756bf
chore: Upgrade to GraalVM 22.0.0.2 2022-01-25 18:04:38 +01:00
Michiel Borkent
816adaaad0 Version bump 2022-01-25 16:03:25 +01:00
Michiel Borkent
530177eefd Fix docker 🙏 2022-01-25 15:46:17 +01:00
Michiel Borkent
a02a89857b v0.7.4 2022-01-25 15:23:53 +01:00
Michiel Borkent
92dbd1be58 sci: as-alias 2022-01-25 13:39:55 +01:00
Michiel Borkent
e95c4dd37d More clojure 11 vars 2022-01-25 11:02:03 +01:00
Michiel Borkent
c7cc5663cb
feat #1158: add clojure.math namespace (#1159) 2022-01-25 10:30:22 +01:00
Michiel Borkent
9930eea62c
chore: bump deps (#1157) 2022-01-25 10:05:51 +01:00
Michiel Borkent
98668ef3b7 [babashka/sci#498] Cannot recur from non tail: and/or 2022-01-23 21:38:37 +01:00
Michiel Borkent
ee15ef1798 [#1152] Add algo.monads to libtests and projects.md 2022-01-23 20:11:26 +01:00
Michiel Borkent
d08b0d88d8
[babashka/sci#498] Can only recur from tail position (#1153) 2022-01-23 19:46:49 +01:00
Michiel Borkent
8a15a82f44
Add compatibility with algo.monad (#1151) 2022-01-23 11:09:52 +01:00
Michael Salihi
f8def7d797
add single page app example with Babashka + htmx (#1148) [skip ci] 2022-01-21 16:29:59 +01:00
Michael Glaesemann
ca59f3890e
fix #1143: allow optional (ignored) -- when using using --main (#1147)
Permits previously-accepted behavior broken in 19415f6363
2022-01-20 14:53:54 +01:00
James Carnegie
3602b89512 Add metabom jars to all built docker images 2022-01-18 07:34:36 +00:00
Michiel Borkent
eef4690ba4 sci: cannot take value of macro -> 2022-01-16 13:16:20 +01:00
Michiel Borkent
da31e9c61c
fix #1144: cannot create multidimensional arrays (#1145) 2022-01-16 12:42:10 +01:00
Michiel Borkent
cc728e5748 fix order of meta eval
Co-authored by: Janos Erdos <erdosj@gmail.com>
2022-01-16 11:57:50 +01:00
Michiel Borkent
6d849a4f6c sci [skip ci] 2022-01-16 11:57:47 +01:00
Gabriel Horner
093709386a
Add some additional libraries (#1138)
* Add some additional libraries to test

Also improved docs around add-libtest
Close #1137
Close #1128

* Add method needed for supporting pyramid

Pyramid tests passed locally but that was on jvm

* Remove pyramid tests and do in subsequent PR

* Revert "Add method needed for supporting pyramid"

This reverts commit 4d84a2a2ac.

* Skip exoscale tests for windows since most aren't windows compatible
2022-01-14 14:56:09 +01:00
Wes Morgan
b765ed3ec7
Fix: alpine docker builds in CI (follow-up) (#1142) 2022-01-13 21:35:55 +00:00
Wes Morgan
5ff1a04f10
Build alpine Docker images in CI when linux/amd64 is in platform list (#1141) 2022-01-13 20:26:31 +00:00
Rahul De
2f6d363ee8
Revert: Add metabom jar to docker image(9cf6a1ae71) 2022-01-11 21:34:36 +00:00
Rahul De
f453928f80
fix docker build script 2022-01-11 20:38:43 +00:00
James Carnegie
6e2c32ff84
Add opencontainers annotations to docker image (#1136)
Co-authored-by: Rahuλ Dé <lispyclouds@users.noreply.github.com>
2022-01-11 20:26:29 +01:00
James Carnegie
9cf6a1ae71 Add metabom jar to docker image 2022-01-11 19:03:51 +00:00
Michiel Borkent
e97f5f69b2 companies.md [skip ci] 2022-01-08 21:25:35 +01:00
Michiel Borkent
3bf5d0faf1 fs: create dirs in copy-tree 2022-01-08 16:13:56 +01:00
Michiel Borkent
dd5d3fe1a4 sci: add pop! 2022-01-07 23:17:28 +01:00
Michiel Borkent
061bc528ae this test wasn't supposed to be in master! 2022-01-05 20:21:19 +01:00
Michiel Borkent
d050e7d58d deps.clj: update to clojure CLI 1.10.3.1058 2022-01-05 20:11:23 +01:00
A Brooks
18cf24d35e
Fix broken link to source. (#1127) [skip ci] 2022-01-05 13:24:19 +01:00
Jakub Holý
7e2d69d0cb
fix typo in news (#1125) [skip ci] 2022-01-03 11:03:23 +01:00
Michiel Borkent
01b02f38d6 Update news.md [skip ci] 2021-12-31 16:44:17 +01:00
Michiel Borkent
221cbe1142 Version bump 2021-12-30 16:50:56 +01:00
Michiel Borkent
483bfca969 CHANGELOGS [skip ci] 2021-12-30 16:33:15 +01:00
Michiel Borkent
0f21c16f43 v0.7.3 2021-12-30 16:32:22 +01:00
Michiel Borkent
34f9997df4 [#1123, #1124] Do not require java for bb tasks without deps 2021-12-30 16:32:15 +01:00
Michiel Borkent
890877fcfd Version bump 2021-12-29 18:26:59 +01:00
Michiel Borkent
cde8bbc5ee v0.7.2 2021-12-29 18:11:09 +01:00
Michiel Borkent
5723fa2e67 Version bump 2021-12-29 18:10:56 +01:00
Michiel Borkent
d818930e0f process 2021-12-29 18:09:12 +01:00
Michiel Borkent
c8aebb3c2b v0.7.1 2021-12-29 17:10:42 +01:00
Michiel Borkent
ab470def54 BB test patches 2021-12-29 17:05:19 +01:00
Gabriel Horner
665ae4dd97
Finish up library tests (#1120)
* Add tests for markdown-clj and tools.namespace

See comment for why only one markdown test could be run.
Closes #1069 and #1064

* Convert 10 test libs using add-libtest

Also improved add-libtest to only require maven artifact
and rely on clojars for getting git-url most of the time

* Convert 8 more test libs using add-libtest

Also updated table and added comment for newline test

* Fix doric test

* Disable tools.namespace test that fails on windows

* Added dozen manual test libs and converted 2 test libs

add-libtest.clj supports manually-added and test-directories options

* Converts last tests to test namespaces and write libraries.csv

* Add a number of library tests from projects.md

Also add more docs around adding test libs and tweak add script

* Use :sha for gitlib and older clojure cli

* Revert "Use :sha for gitlib and older clojure cli"

This reverts commit c663ab8368.

* Fix and disable failing tests

Disabled tests that fail consistently and fixed windows one
2021-12-29 16:35:14 +01:00
Michiel Borkent
367cf7bf26 CHANGELOGS [skip ci] 2021-12-29 16:17:01 +01:00
Michiel Borkent
ddf03c50ae [#1116] Missing error message when exception happens in REPL print 2021-12-29 16:10:30 +01:00
Michiel Borkent
818f2a9931
Upgrade Clojure CLI (#1121) 2021-12-28 11:09:31 +01:00
Michiel Borkent
e56cb4a50f CHANGELOG [skip ci] 2021-12-27 23:21:34 +01:00
Michiel Borkent
53eb64e67d [#1119] Add equals method of java.util.Arrays 2021-12-27 22:03:30 +01:00
Michiel Borkent
1912b921df Fixes for issue reported by @thiagokokada 2021-12-27 21:31:13 +01:00
Michiel Borkent
ec7a6785d9 ignore SNAPSHOT when comparing number 2021-12-26 23:35:24 +01:00
Michiel Borkent
8c770b41ac oops 2021-12-26 23:24:48 +01:00
Michiel Borkent
8abf58112e Publish dev release 2021-12-26 23:11:58 +01:00
Michiel Borkent
e710c66dcb Publish dev builds 2021-12-26 21:15:36 +01:00
Michiel Borkent
fb7f984389
[#1110] Load tasks and deps from other bb.edn file (#1117)
Co-authored-by: Bob <highpressurecarsalesman@gmail.com>
2021-12-26 17:26:35 +01:00
Michiel Borkent
93fb4379ff
[#584, #1037] Uberscript in bb (#1115) 2021-12-23 21:23:11 +01:00
Gabriel Horner
3a30a11c1f
Add more library tests (#1114)
* Add environ and table tests

Also allow for directory option and fix nasty nil test-dir bug

* Add 7 libraries via add-libtest.clj

Added :branch option and saved additional info to bb-tested-libs.edn to
reproduce test fetching later

* Disable intermittent failing test
2021-12-22 21:27:29 +01:00
Michiel Borkent
86c67af49c
[#1105] Include native elements in printed stacktrace (#1113) 2021-12-22 13:04:29 +01:00
Michiel Borkent
697c03fa07 CHANGELOG [skip ci] 2021-12-21 22:53:11 +01:00
Michiel Borkent
04762fe68e CHANGELOG 2021-12-21 21:32:34 +01:00
Michiel Borkent
79cbe5b58a [#1087] Add spy macro from taoensso.timbre 2021-12-21 21:29:33 +01:00
Michiel Borkent
5b444995a0 edamame v0.0.19 2021-12-21 21:01:48 +01:00
Gabriel Horner
4e7d04f672
Add libtest (#1112)
* Add add-libtest script and add 2 libraries with it

* Add tests for 3 existing libraries
2021-12-21 19:25:10 +01:00
Michiel Borkent
becdabe100 pods [skip ci] 2021-12-19 20:26:37 +01:00
Michiel Borkent
fd080e76e2 SCI: better error for higher order fn arity mismatch 2021-12-19 16:31:21 +01:00
Gabriel Horner
4f8eb37704
Added specmonstah and dependency to tested libraries (#1109)
* Enable specmonstah tests now that it's merged

* Add dependency to tests and doc added libs

* Use the older :sha for compat with older clojure cli
2021-12-16 15:46:50 +01:00
Thiago Kenji Okada
4ed7cd5aea
Check shasum/sha256sum in PATH on install script (#1108)
* Check shasum/sha256sum in PATH on install script

* Fix typo in .github/pull_request_template.md
2021-12-16 15:26:33 +01:00
Michiel Borkent
1c217a7157 PR template [skip ci] 2021-12-15 16:53:38 +01:00
Wes Morgan
bc0ae17e64
Build arm64 docker image in CI (#1099) 2021-12-15 15:28:39 +00:00
Gabriel Horner
48a8f3ac18
Document babashka forks (#1106) [skip ci]
Also removed double nesting of Projects in toc
2021-12-14 15:37:44 +01:00
Michiel Borkent
a0ef27ad21 CHANGELOG [skip ci] 2021-12-10 13:33:51 +01:00
Michiel Borkent
6ce33dff90 Version bump 2021-12-10 11:36:52 +01:00
Michiel Borkent
823bc8ca22 0.7.0 2021-12-10 11:19:19 +01:00
Michiel Borkent
73d466e7d6
Fix SCI#649 aget reflection (#1100)
Fix issue with aget reported in babashka/sci#649 by @MrEbbinghaus
2021-12-09 22:38:38 +01:00
Michiel Borkent
48cf9671e1 Updated bb spec 2021-12-09 18:36:05 +01:00
Michiel Borkent
a3633faf3f test 2021-12-09 18:35:10 +01:00
Michiel Borkent
068cb6a97d update babashka spec dep 2021-12-09 18:32:04 +01:00
Michiel Borkent
b7ede11154 Bump spec for tests 2021-12-09 18:02:50 +01:00
Michiel Borkent
806517c2ba graal config 2021-12-09 17:52:51 +01:00
Michiel Borkent
efacc16e3b graal config 2021-12-09 17:50:41 +01:00
Michiel Borkent
fb0fbe87fc spec test 2021-12-09 17:43:06 +01:00
Michiel Borkent
b67d539ab0 fields 2021-12-09 17:42:55 +01:00
Michiel Borkent
713358dca8 SCI: instance field access // MultiFn interop 2021-12-09 17:28:04 +01:00
Michiel Borkent
b32b7d7de9 sci bump, memfn 2021-12-09 13:05:45 +01:00
Michiel Borkent
5d324dd201 Added integrant tests 2021-12-08 23:11:32 +01:00
Michiel Borkent
4f21669f6b Add orchestra tests 2021-12-08 22:57:16 +01:00
Michiel Borkent
19ad756261 Support applyTo interop for clojure.spec 2021-12-08 22:42:26 +01:00
Michiel Borkent
f754578075 Add coax tests 2021-12-08 21:31:58 +01:00
Michiel Borkent
6d14ed61f1 Add better-cond to CI tests 2021-12-08 18:46:53 +01:00
Michiel Borkent
9dd4941230 Add spec tests to CI 2021-12-08 18:26:17 +01:00
Michiel Borkent
54cd1fa85f Add core specs warning 2021-12-08 18:08:02 +01:00
Michiel Borkent
f5fd11fd78 Don't remove core specs when they are in deps map 2021-12-08 17:20:05 +01:00
Michiel Borkent
8b3e89fbcc Don't remove core specs 2021-12-08 17:11:29 +01:00
Michiel Borkent
76c9d633ff Warn on clojure.spec.alpha 2021-12-08 16:04:32 +01:00
Michiel Borkent
ef8e4f48b9 add StackTraceElement->vec 2021-12-08 15:00:24 +01:00
Michiel Borkent
e466f832b8
inst-ms + clojure.instant ns (#1098) 2021-12-08 13:51:31 +01:00
Michiel Borkent
e1f6f369cb PR template [skip ci] 2021-12-08 10:28:36 +01:00
Michiel Borkent
a061977523 PR template [skip ci] 2021-12-08 10:27:10 +01:00
Wes Morgan
bf51eeb26d
Allow building x86_64 or arm64 Docker images (#1095) 2021-12-07 22:15:57 +00:00
Wes Morgan
347816820c
Add .cpcache and target to .dockerignore (#1094)
These can leak host env stuff into Docker build context and break things
2021-12-06 23:06:29 +01:00
Michiel Borkent
e703669c79
Add java.util.StringTokenizer (#1092) 2021-12-06 11:31:30 +01:00
Michiel Borkent
d5c67deeca SCI PR template [skip ci] 2021-12-06 10:42:33 +01:00
Michiel Borkent
8127d00b89 fix metadata on declared var 2021-12-05 23:35:11 +01:00
Michiel Borkent
e434bdb8de Allow macroexpand on doseq and for 2021-12-05 21:07:46 +01:00
Michiel Borkent
de6d274993 sci with test 2021-12-05 14:18:00 +01:00
Michiel Borkent
e30b878206 edamame 0.0.18 2021-12-05 14:14:42 +01:00
Johannes Lötzsch
ec4f9f95fb
fix script/compile #1089 (#1090)
Co-authored-by: Johannes Lötzsch <git@johannesloetzsch.de>
2021-12-05 12:05:05 +01:00
Michiel Borkent
12dbbbb43f edamame v0.0.17 2021-12-05 00:00:30 +01:00
Grazfather
340b18dcf6
Force decimal version numbers in install script (#1088)
Co-authored-by: Alex Chen <Cnly@users.noreply.github.com>
2021-12-04 15:54:41 +01:00
Michiel Borkent
e99a3ca7d7 deprecate $ in process 2021-12-04 11:44:18 +01:00
Michiel Borkent
26336ed500 CHANGELOG [skip ci] 2021-12-02 21:08:54 +01:00
Michiel Borkent
692d3f879d CHANGELOG [skip ci] 2021-12-02 21:08:39 +01:00
Michiel Borkent
5608924de6 CHANGELOG [skip ci] 2021-12-02 21:08:35 +01:00
Michiel Borkent
b4cf195346 Version bump 2021-12-02 21:08:00 +01:00
Michiel Borkent
709e94f956 CHANGELOG [skip ci] 2021-12-02 21:07:53 +01:00
Michiel Borkent
d7ccd1d7c1 v0.6.8 2021-12-02 20:49:30 +01:00
Michiel Borkent
f761d84312 Add new functions from clojure 1.11 except clojure.java.math 2021-12-02 20:47:09 +01:00
Michiel Borkent
638354de56 sci: add clojure.core/test - nREPL: catch throwable 2021-12-02 20:35:05 +01:00
Michiel Borkent
c622a32a65 process: support deref with timeout 2021-12-01 21:39:46 +01:00
Michiel Borkent
9c28fd3eab bump to tools 1.10.3.1040 2021-12-01 17:24:04 +01:00
Michiel Borkent
22677d2832 sci [skip ci] 2021-12-01 09:46:49 +01:00
Michiel Borkent
2257bddbd8 sci: add reader-conditional? 2021-11-30 10:59:05 +01:00
Michiel Borkent
c177e682c7 Version bump 2021-11-30 00:00:13 +01:00
Michiel Borkent
dc77bc9638 v0.6.7 2021-11-29 23:42:52 +01:00
Michiel Borkent
2079f0a554 Add print-deps test 2021-11-29 23:42:36 +01:00
Michiel Borkent
42f12ba75b fs: which improvement on Windows 2021-11-29 23:04:59 +01:00
Michiel Borkent
f1103ae677 fs: which returns executable when program name contains extension 2021-11-29 21:46:36 +01:00
Michiel Borkent
0757abad17 deps.clj bump 2021-11-29 12:38:34 +01:00
Michiel Borkent
15e2430fea Version bump 2021-11-29 12:22:37 +01:00
Michiel Borkent
79678c57ea v0.6.6 2021-11-29 12:03:43 +01:00
Michiel Borkent
ee06576557 fs: enhance fs/which for Windows 2021-11-29 11:08:18 +01:00
Michiel Borkent
0ebbdcb84d CHANGELOG [skip ci] 2021-11-28 23:12:22 +01:00
Michiel Borkent
7baef947af Minor renaming 2021-11-28 23:03:31 +01:00
Michiel Borkent
ed19e202e8 Fix Windows 2021-11-28 22:53:07 +01:00
Michiel Borkent
7255f50beb [#1078] Resolve program in babashka.process on Windows using known extensions 2021-11-28 22:14:17 +01:00
Michiel Borkent
07667697ba [#1078] Resolve program in babashka.process on Windows using known extensions 2021-11-28 22:09:24 +01:00
Michiel Borkent
bfbfc912fe [#1078] Resolve program in babashka.process on Windows using known extensions 2021-11-28 21:45:20 +01:00
Michiel Borkent
1f5b06dc04 babashka.process: tokenize fix 2021-11-28 20:18:20 +01:00
Michiel Borkent
99262e7ce8 Add babashka.core 2021-11-28 15:56:26 +01:00
Michiel Borkent
2a2d4befe5 Add babashka.core 2021-11-28 15:56:17 +01:00
Michiel Borkent
4a8c7a12e0 Add core submodule 2021-11-28 15:48:00 +01:00
Nik
080c60c08e
[#1081] make next.jdbc's result-set namespace accessible from babashka (#1082) 2021-11-28 09:36:42 +01:00
Nik
f06a749249
Add support for SQLite via a BABASHKA_FEATURE_SQLITE feature flag (#1079)
* implement native sqlite support as a feature flag following [1]

([1] is mentioned as a checklist of sorts as to how to add a new 
feature flag in [2])

[1] 13f65f05ae
[2] https://github.com/babashka/babashka/blob/master/doc/build.md

* bump to latest sqlite-jdbc, remove some no longer needed config+libs

based on feedback from borkdude here [1], bump xerial/sqlite-jdbc
3.36.0.3, which includes the graalvm classes and resource config
previously implemented via ericdallo/sqlite-jni-graal-fix and a `-H`
flag in `script/compile`

[1]: https://github.com/babashka/babashka/pull/1079#issuecomment-980533178
2021-11-28 09:34:54 +01:00
Michiel Borkent
803eb33369 CHANGELOG [skip ci] 2021-11-27 16:02:30 +01:00
Michiel Borkent
cdfba7d420 CHANGELOG [skip ci] 2021-11-27 16:00:41 +01:00
Michiel Borkent
4566905a5c
Add compatibility with hato and clj-http-lite insecure feature (#1080)
Added classes:

- java.net.CookiePolicy
- java.net.http.HttpTimeoutException
- javax.net.ssl.HostnameVerifier
- javax.net.ssl.HttpsURLConnection
- javax.net.ssl.KeyManagerFactory
- javax.net.ssl.SSLSession
- javax.net.ssl.TrustManagerFactory
- java.security.KeyStore
- java.util.zip.Inflater
- java.util.zip.ZipException
2021-11-27 15:58:24 +01:00
Michiel Borkent
a50930fc14 PR template [skip ci] 2021-11-26 23:18:25 +01:00
Michiel Borkent
6918114b1b CHANGELOG [skip ci] 2021-11-26 16:48:59 +01:00
Michiel Borkent
a8b43475c1 babashka.curl [skip ci] 2021-11-24 23:07:56 +01:00
Michiel Borkent
d5a4361f4d babashka.curl - :as :bytes 2021-11-24 21:47:17 +01:00
Michiel Borkent
9dbc2a4734 Add classes to support xforms
+          java.util.ArrayDeque
+          java.util.ArrayList
+          java.util.Collections
+          java.util.Comparator
+          java.util.NoSuchElementException

See previous commit
2021-11-24 17:41:40 +01:00
Michiel Borkent
e419c569a8
Support satisfies? on protocol values (#1076) 2021-11-24 17:38:38 +01:00
Michiel Borkent
a95c51998f
limit space of InetAddress4/6 2021-11-23 11:34:30 +01:00
Michiel Borkent
ef232bd432 sci 2021-11-22 23:22:55 +01:00
Michiel Borkent
29b693181c Merge branch 'master' into reader-resolver 2021-11-22 22:02:02 +01:00
Michiel Borkent
ffbfdd7a29 [#1071] Fix --version option, don't read cp file. Thanks @bobisageek 2021-11-22 16:47:59 +01:00
Michiel Borkent
369ee94c90
Add java.net.Inet4Address and java.net.Inet6Address (#1072) 2021-11-22 10:42:50 +01:00
Michiel Borkent
d897baff28 reader-resolver 2021-11-21 23:51:21 +01:00
Michiel Borkent
7b403b8052 Bump SCI 2021-11-21 22:33:04 +01:00
Michiel Borkent
8ae4fc5128 sci: default-reader-fn 2021-11-21 21:19:52 +01:00
Michiel Borkent
e360a8666a Support read-eval 2021-11-21 17:38:56 +01:00
Michiel Borkent
d04e897ef4 clojure.core/read improvements: support :eof + :read-cond 2021-11-21 14:37:14 +01:00
Michiel Borkent
2a826ac432 Fix fs 2021-11-21 12:23:00 +01:00
Michiel Borkent
2e2f6205c3 fs: fs/home and fs/expand-home 2021-11-21 11:46:35 +01:00
Michiel Borkent
a9d1612316 sci 2021-11-20 21:37:59 +01:00
Michiel Borkent
ef5c2cee2e clj-kondo config 2021-11-19 21:49:39 +01:00
Michiel Borkent
0428d983d9 update to newest sci 2021-11-19 21:46:16 +01:00
Michiel Borkent
1ebe142655 use sci/copy-ns 2021-11-19 18:43:18 +01:00
Michiel Borkent
44e8ea36fd Update with fs/with-temp-dir 2021-11-19 18:43:18 +01:00
Michiel Borkent
923adab737 Update with fs/with-temp-dir 2021-11-19 18:43:18 +01:00
Michael Glaesemann
5940b95cd2
Add javax.crypto classes necessary for calculating hmac shas. (#1066)
* Add javax.crypto classes necessary for calculating hmac shas.

* Add hmac-256-sha test for javax.crypto.
2021-11-18 08:49:59 +01:00
Michiel Borkent
bd79e6344a [skip ci] 2021-11-15 20:43:20 +01:00
Michiel Borkent
c651f1f944 [skip ci] 2021-11-15 20:40:03 +01:00
Michiel Borkent
66faeabc18 README [skip ci] 2021-11-14 18:02:04 +01:00
Michiel Borkent
bc151116dc Version bump 2021-11-13 15:37:34 +01:00
Michiel Borkent
dbac5791ab v0.6.5 2021-11-13 14:50:49 +01:00
Michiel Borkent
547c338de9 deps.clj: bump tools jar 2021-11-13 13:12:45 +01:00
Michiel Borkent
aae5f75215 CHANGELOG [skip ci] 2021-11-13 13:10:19 +01:00
Michiel Borkent
a0d03427d9 CHANGELOG [skip ci] 2021-11-13 13:09:04 +01:00
Michiel Borkent
52f9dc8f28
Add various tools.build related classes (#1062)
Co-authored-by: Hugo Duncan <hugo@hugoduncan.org>
2021-11-13 11:11:42 +01:00
Michiel Borkent
948c38c035 Add support for BasicFileAttributes 2021-11-13 11:05:21 +01:00
Michiel Borkent
aaaab5f6eb [#1061] Calling close on DirectoryStream fails 2021-11-13 10:44:16 +01:00
Michiel Borkent
321c47297d [#1061] Calling close on DirectoryStream fails 2021-11-13 10:38:21 +01:00
Michiel Borkent
877700710a fs: fix for unzip 2021-11-12 12:50:58 +01:00
Bob
fb1a1cfbfb
[#1046] add PGProperty fields to reflection config 2021-11-07 21:44:10 +01:00
Michiel Borkent
2bb7499fd5 [#1055] Segfault when reifying FileVisitor with visitFileFailed 2021-11-07 12:05:16 +01:00
Michiel Borkent
c86b28a210 edamame v0.0.14 2021-11-06 20:43:39 +01:00
Michiel Borkent
1e5ab961c2 edamame 0.0.13 2021-11-06 20:01:44 +01:00
Michiel Borkent
7c7053119a Expose babashka.deps/clojure 2021-11-06 13:01:35 +01:00
Michiel Borkent
552bcc7931 README [skip ci] 2021-11-06 09:38:23 +01:00
Michiel Borkent
8ebb890b26 Bump core.async to 1.4.627 2021-11-05 20:22:18 +01:00
Michiel Borkent
fe2138e71e Bump deps.clj 2021-11-05 17:15:05 +01:00
Michiel Borkent
c48ae27da3
Disable some service loader features for smaller image size (#1054)
This also excludes `java.awt.Toolkit`.

```
     -H:ServiceLoaderFeatureExcludeServices=java.net.ContentHandlerFactory \
     -H:ServiceLoaderFeatureExcludeServices=java.nio.charset.spi.CharsetProvider
```
2021-11-05 10:39:48 +01:00
Michiel Borkent
73c9f3b3ba
Add alias for musl (#1053) 2021-11-04 11:27:41 +01:00
Michiel Borkent
a9cc6e301e Bump to GraalVM 21.3.0 JVM 11 2021-11-04 11:01:41 +01:00
Michiel Borkent
19415f6363 Fix remaining args when invoking -m 2021-11-02 13:46:51 +01:00
Michiel Borkent
73426de206 deps.clj: tools jar upgrade 2021-11-02 10:40:05 +01:00
Michiel Borkent
11379deca1
[#999] Support Object.toString override on defrecords (#1050) 2021-11-02 10:29:52 +01:00
Rahuλ Dé
5ba275395d
add contajners to libraries (#1049) [skip ci] 2021-11-01 18:50:18 +01:00
Karol Wójcik
147e12f041
Add clojure.lang.IPersistentList (#1048) 2021-11-01 13:58:53 +01:00
Michiel Borkent
71b8d7fd37 deps.clj: manifest staleness 2021-10-30 11:49:59 +02:00
Michiel Borkent
d06837bc68 CHANGELOG [skip ci] 2021-10-29 14:51:05 +02:00
Michiel Borkent
b7030fd629 CHANGELOG [skip ci] 2021-10-29 14:50:19 +02:00
Michiel Borkent
a60427ecd7 Version bump 2021-10-29 14:49:34 +02:00
Michiel Borkent
0e3d0d03f0 v0.6.4 2021-10-29 14:27:34 +02:00
Michiel Borkent
7b6075232a deps.clj: delay version to runtime 2021-10-29 14:27:30 +02:00
Michiel Borkent
50914da542 deps.clj 2021-10-29 12:33:45 +02:00
Michiel Borkent
b3083f2c1d Version bump 2021-10-29 12:05:48 +02:00
Michiel Borkent
b115a80181 v0.6.3 2021-10-29 11:44:04 +02:00
Michiel Borkent
b39a666d73 deps.clj [skip ci] 2021-10-29 11:37:24 +02:00
Michiel Borkent
c96668e402 deps.clj upgrade 2021-10-29 11:26:05 +02:00
Michiel Borkent
973938134b Add Dr. Evidence to sponsoring companies [skip ci] 2021-10-26 18:01:23 +02:00
Michiel Borkent
66197ae416 [#1040] build time, not run time 2021-10-25 12:07:34 +02:00
Michiel Borkent
bfd78e7c56 Bump rewrite-clj 2021-10-25 12:05:49 +02:00
Michiel Borkent
cbfb1b54b7 [#1040] Add java.sql.SQLException to init at build time 2021-10-25 11:37:27 +02:00
Michiel Borkent
11cf09b6f3 sci: org change 2021-10-25 11:37:27 +02:00
Yann Vanhalewyn
37ec9f4638
Bump rewrite-clj to v1.0.699-alpha (#1042)
There is a bug in rewrite-clj v644 causing users to be unable to use
`:track-position` and `:auto-resolve` options at the same time in
rewrite zippers. See:

https://github.com/clj-commons/rewrite-clj/issues/159

This makes, for example, building static code analysis tools with
babashka much harder. In fact when analysing code, the position is
relevant for the script output and resolving keywords and symbols might
be required for the analysis.
2021-10-25 11:33:21 +02:00
Wojciech Wojtyniak
3f5bbdf118
Fix URL for Fluent (#1039)
The url was missing a colon after 'https'.
2021-10-24 22:10:27 +02:00
Michiel Borkent
e819cd1fb5 Update babashka.fs 2021-10-20 21:31:34 +02:00
Michiel Borkent
588e56d4e5 Add Schnaq to companies [skip ci] 2021-10-20 11:57:10 +02:00
Michiel Borkent
d24d56d832 README [skip ci] 2021-10-19 19:31:44 +02:00
Michiel Borkent
ace7c80534 deps.clj: make Java 17 compatible 2021-10-19 17:54:33 +02:00
Bob
5a80e1603e
- correct --init to be a global option (#1036)
- test --init before subcommands and task names
2021-10-18 15:39:08 +02:00
Bob
8dad1fa473
ruuter and clj-digest tests (#1034)
* add lib tests for using ruuter with built-in httpkit server

* just to be safe, add a timeout to ruuter's HTTP requests

* add tests for clj-commons.digest

* add newly-tested libraries to the library list

* undo paren moves I missed that were done by parinfer

* typo
2021-10-17 23:12:28 +02:00
Bob
bf3b6d2dca
add support for --init as a file to be loaded before evaluation actions (#1033) 2021-10-17 10:44:31 +02:00
Michiel Borkent
b9396ac318 bb.curl: support :follow-redirects false 2021-10-15 22:15:03 +02:00
Michiel Borkent
fd41f96cb7 Pods: support metadata - thanks @quoll 2021-10-15 19:46:12 +02:00
Michiel Borkent
7112153c46 fs [skip ci] 2021-10-14 13:39:36 +02:00
Michiel Borkent
e2d4b815d0
Add fluent.to to companies [skip ci] (#1031) 2021-10-14 13:21:26 +02:00
Michiel Borkent
83f2441bfd [#1030] Add fs/unzip 2021-10-12 17:23:09 +02:00
Michiel Borkent
405c34b668
Add java.security.Provider and java.security.Security (#1028)
This adds about 80k to the binary.
2021-10-11 17:28:12 +02:00
Michiel Borkent
8b8ba47f65 sci 2021-10-09 15:27:20 +02:00
Michiel Borkent
ffd8125925 Version bump 2021-10-08 15:08:22 +02:00
Michiel Borkent
ce6d4aaf34 Fix test 2021-10-08 14:43:57 +02:00
Michiel Borkent
5d4568188e v0.6.2 2021-10-08 14:30:30 +02:00
Michiel Borkent
eebe6627d7 babashka.nrepl with middleware 2021-10-07 23:57:01 +02:00
Michiel Borkent
bc63da1612
babashka fs: add unzip function (#1027) 2021-10-07 12:39:33 +02:00
Michiel Borkent
7af56d73e4 bb.curl [skip ci] added test 2021-10-06 20:58:35 +02:00
Michiel Borkent
1d67ab02e5 companies [skip ci] 2021-10-06 09:40:36 +02:00
Michiel Borkent
23480a4eb4 bb.curl: add :err :inherit 2021-10-05 22:37:18 +02:00
Michiel Borkent
b11925bd02 bb.nrepl #45 2021-10-05 19:39:40 +02:00
Michiel Borkent
0d01083780 companies [skip ci] 2021-10-05 15:32:42 +02:00
Michiel Borkent
77b1e344e2 companies [skip ci] 2021-10-05 10:01:14 +02:00
Michiel Borkent
9409d21f74 companies [skip ci] 2021-10-05 10:00:36 +02:00
Michiel Borkent
70af222d9d companies [skip ci] 2021-10-05 09:19:43 +02:00
Michiel Borkent
bbb2907029 companies [skip ci] 2021-10-05 08:43:33 +02:00
Michiel Borkent
7fc03e4bb4 companies [skip ci] 2021-10-04 21:24:45 +02:00
Michiel Borkent
0b2f70247f companies [skip ci] 2021-10-04 21:23:50 +02:00
Michiel Borkent
1ea18a3771 companies [skip ci] 2021-10-04 21:04:36 +02:00
Michiel Borkent
d5b7524264 Companies [skip ci] 2021-10-04 18:57:51 +02:00
Michiel Borkent
d30782403e
Companies [skip ci] (#1025) 2021-10-04 17:57:35 +02:00
Bob
b799ac7897
add mysql pprint example and minimallist doc [skip ci] (#1024)
* add mysql pretty-printing example

* add minimallist to libraries list

* fix typos
2021-10-04 12:01:31 +02:00
Michiel Borkent
19e3e84e05 sci: more tests 2021-10-01 21:52:54 +02:00
Michiel Borkent
09ac438cc2 sci: more extend-with-meta ordering fixes 2021-10-01 21:41:14 +02:00
Michiel Borkent
629d795980 sci: prefer meta in extend 2021-10-01 20:34:59 +02:00
Michiel Borkent
36f1b30778 sci: protocol order 2021-10-01 11:54:36 +02:00
Bob
d4ac7365e0
[#1015] print locals only when debug option is enabled (#1021) 2021-09-29 09:24:51 +02:00
Michiel Borkent
20610687de SCI callstack change 2021-09-27 22:51:31 +02:00
Michiel Borkent
774e4739ba README [skip ci] 2021-09-27 14:22:56 +02:00
Michiel Borkent
7063021f19
SCI: use public stacktrace logic (#1017) 2021-09-26 23:48:36 +02:00
Bob
a39cdc7e8c
Component lib test (#1016)
* add lib test for component

* add example of using GZip
2021-09-26 23:47:39 +02:00
Michiel Borkent
17bb2f93ad deps.clj 2021-09-25 12:23:53 +02:00
Michiel Borkent
4880a3ebe6 deps.clj 2021-09-25 11:11:31 +02:00
Bob
7df81f1273
make core.async and rewrite-clj integral (#1014)
* make core.async integral (not a feature)

tasks (in particular, parallel tasks) require core.async

* make rewrite_clj integral (not a feature)

* cleanup mistakes
2021-09-23 18:15:01 +02:00
Michael Glaesemann
7cb972fdec
Include java.util.stream.BaseStream in classes. (#1013) 2021-09-23 16:01:42 +02:00
Bob
407bd74a00
[#1004] XML edn reading and populating *data-readers* for feature deps (#1012)
* add XML edn reading and make *data-readers* closer to Clojure

- initial value of *data-readers*: empty map
- add XML readers to feature-flagged edn-readers for parsing *input*
- add edn-readers to *data-readers* to emulate data_readers.clj handling

* add YAML round-trip testing

* set root val of *data-readers* at top level
2021-09-20 18:31:57 +02:00
Michiel Borkent
58cbfd987b Templates [skip ci] 2021-09-17 12:45:59 +02:00
Michiel Borkent
f37a61a848 Templates [skip ci] 2021-09-17 12:19:16 +02:00
Michiel Borkent
664d708f1c Templates [skip ci] 2021-09-17 12:17:00 +02:00
Michiel Borkent
c8e170bba2 Templates [skip ci] 2021-09-17 12:15:59 +02:00
Michiel Borkent
9bb200b193 README [skip ci] 2021-09-16 11:04:43 +02:00
Kimmo Koskinen
89d07602e8
Add ZipFile (#1010) 2021-09-15 14:34:58 +02:00
Thiago Kenji Okada
9ca3a3bd31
Use Debian bullseye on CI/CD/Dockerfile (#1005)
* Migrate `Dockerfile` to use a bullseye-based image

Also, some QoL changes on the `Dockerfile`:
- Parametrize GRAALVM_VERSION to make it easier to update
- Remove installing programs already included on base image
- Remove `deps.edn` from `.dockerignore` since it is necessary to build

* Migrate CircleCI to use a bullseye-based image

Also some modifications necessary to make it work:
- Migrate from `circleci` images to `clojure` since they're out-of-date
  and also seem to be considered legacy:
  https://circleci.com/docs/2.0/circleci-images/#legacy-language-images
- Remove unnecessary usage of `sudo`, since all commands runs as root
- Sync packages with `Dockerfile`. This will make easier to test locally
  if everything will work (of course, it is not 100% guarantee)

* Remove lsof

* Remove "Install {Clojure,Leiningen}" steps

Already included on the base image.

* Do not change directory when downloading GraalVM

* Move "Download GraalVM" to script/download-graalvm

* Set GRAALVM_HOME correctly

* Unbreak mac build

* Revert "Set GRAALVM_HOME correctly"

This reverts commit 5e2a6158dc.

* Set GRAALVM_HOME correctly, take 2

* Improve download-graalvm script

* Re-added "Install Clojure" steps

* Set amd64 as default GRAALVM_ARCH

* Unbreak linux-aarch64

* Ubreak jvm

* Do not change directory

* Fix yaml

* Fix mac/linux-aarch64

* Add missing Clojure

* Fix cache

* Move GraalVM installation to /tmp

* Use script/install-clojure

* Use /opt instead of /tmp to install GraalVM

* Revert "Use /opt instead of /tmp to install GraalVM"

This reverts commit 3cfad03c8e.

* Use CircleCI's Clojure images again

* Go back to installing GraalVM on $HOME
2021-09-13 23:28:13 +02:00
Michiel Borkent
29c2fbb86d Version bump 2021-09-12 14:45:31 +02:00
Michiel Borkent
14362cdf5f CHANGELOGS [skip ci] 2021-09-12 14:42:49 +02:00
Michiel Borkent
500a4f9f60 v0.6.1 2021-09-12 14:22:45 +02:00
Michiel Borkent
11f0e1a566 Get rid of single segment namespace 2021-09-12 12:39:58 +02:00
Michiel Borkent
13d38ba455
Clj easy graal build time (#1008) 2021-09-12 11:50:32 +02:00
Michiel Borkent
0f723a1e7c
Fix aarch64 test (#1007) 2021-09-11 18:13:12 +02:00
Michiel Borkent
4c075e07e4 CHANGELOGS [skip ci] 2021-09-11 00:20:06 +02:00
Michiel Borkent
8ca21887be [#1006] Self-referential function returns wrong binding
Also see https://github.com/borkdude/sci/issues/613
2021-09-10 23:32:43 +02:00
Michiel Borkent
149fc261fa sci 2021-09-10 18:27:05 +02:00
Victor Bjelkholm
031080bfba
Add docs badge to top of README (#1002)
Finding myself scrolling around the readme for some seconds trying to find the link to the docs, which is a couple of sections down from the top. In order to help people (and myself) to find the reference faster, I added a badge in the top that links to the book/docs.
2021-09-09 14:03:21 +02:00
Michiel Borkent
a43e75ffd6
Add PipedInput/OutputStream (#1001) 2021-09-07 11:30:52 +02:00
Michiel Borkent
943dc69c66 Fix test 2021-09-01 23:30:33 +02:00
Michiel Borkent
1a764f3120 [#997] Add smoke test 2021-09-01 23:14:35 +02:00
Michiel Borkent
f5cdf89608 [#997] Fix for schmee java-http-clj send-async 2021-09-01 23:09:02 +02:00
Michiel Borkent
f6dd96a281 CHANGELOGS [skip ci] 2021-09-01 19:48:26 +02:00
Michiel Borkent
09dcd58ee8 Version bump 2021-09-01 17:50:33 +02:00
Michiel Borkent
5d07faa051 CHANGELOGS [skip ci] 2021-09-01 17:38:21 +02:00
Michiel Borkent
e3d6e433b2 v0.6.0 2021-09-01 17:34:52 +02:00
Michiel Borkent
faec6aeced v0.5.2 2021-09-01 17:34:25 +02:00
Michiel Borkent
e915e14612 Upgrade deps.clj, fix flaky test 2021-09-01 17:34:19 +02:00
Michiel Borkent
4be3abdd81 docs [skip ci] 2021-09-01 14:49:28 +02:00
Michiel Borkent
c69852eb9f Update projects.md page [skip ci] 2021-09-01 14:07:48 +02:00
Michiel Borkent
5422946eee CHANGELOGS [skip ci] 2021-09-01 14:00:37 +02:00
Michiel Borkent
e55559f727 CHANGELOGS [skip ci] 2021-09-01 13:59:26 +02:00
Michiel Borkent
c832819a76 Fix test 2021-09-01 13:45:23 +02:00
Michiel Borkent
cddd4ce581 [#995] Add clojure.data.xml/alias-uri 2021-09-01 13:34:47 +02:00
Michiel Borkent
1da01203ce Fix test 2021-09-01 11:54:09 +02:00
Michiel Borkent
23ba52a813
[#979] More java net http tests and tweaks (#996) 2021-09-01 11:36:24 +02:00
Michael Glaesemann
125e227976
Java http insecure context (#994)
* Add support for creating insecure context.

* Add BABASHKA_FEATURE_JAVA_NET_HTTP flag.

* Clean up java.net.http tests
2021-08-31 17:37:11 +02:00
Michiel Borkent
b71278cc68
[#979] JDK 11 Http Client
Co-authored-by: Michael Glaesemann <grzm@seespotcode.net>
2021-08-31 11:13:11 +02:00
Michiel Borkent
cebdd19c00
Upgrade to GraalVM 21.2.0 2021-08-30 20:16:18 +02:00
Bob
242c3d442f
Logging feature flag and tools.logging.readable (#981) (#987)
* put tools.logging behind a feature flag

* add tools.logging.readable

- move logging namespace to feature folder
- add logging.readable namespace
- add tests for logging.readable

* cleanup logging changes

- add logging env var to compile script
- remove unconditional require of logging namespace

* move old-config capture to before alter

* remove feature check from logging tests
2021-08-29 23:43:53 +02:00
Michiel Borkent
ad73a09c0e sci [skip ci] 2021-08-28 12:32:18 +02:00
Bob
4ee84947c9
use tagged-literal for unknown EDN tags when creating *input* (#975) (#976)
* use tagged-literal as default for unknown tags when using -I (or --stream without -i)

* use tagged-literal as default for unknown tags
2021-08-25 17:57:17 +02:00
Bob
a85d593767
make the REPL requires available to command-line scripts (#972) 2021-08-22 23:20:41 +02:00
Eric Dallo
72d3afa698
Migrate GraalVM configuration to jar (#973) 2021-08-22 23:19:28 +02:00
Thiago Kenji Okada
ef0af1244d
script: use musl from bullseye instead of unstable (#974)
Now that bullseye was released, Debian is starting to make bigger
changes on unstable. To avoid breakage, let's use musl from bullseye
that is the correct version that we were using until now (1.22-1):
https://packages.debian.org/bullseye/musl-tools

Eventually a better solution would be to simply use Debian bullseye to
compile everything, however the official Clojure image from Docker is
still using stretch. So this is a temporary solution until them.
2021-08-22 19:54:12 +02:00
Michiel Borkent
078cab1199 [#960] Support :clojure.core/eval-file metadata 2021-08-17 16:43:22 +02:00
Michiel Borkent
d4f5e57866 [#959] Add *print-readably* and *flush-on-newline* 2021-08-16 22:57:59 +02:00
Michiel Borkent
6c1c33e9ac sci [skip ci] 2021-08-14 21:08:23 +02:00
Michiel Borkent
f1fa47837a
[#969] Add java.lang.reflect.Method (getName only) (#970) 2021-08-13 11:25:00 +02:00
Bob
83b6d1e662
add lib test and an example for multigrep (#461) (#968)
* fix lanterna constants ns name

* add multigrep lib test and example
2021-08-11 10:52:00 +02:00
Bob
bb57d220d0
test that var metadata matches containing ns (#967)
* - change namespace on 'quick-check' to match clojure version
- add test for var meta->namespace alignment

* - add ns to with-transaction macro
2021-08-08 21:23:58 +02:00
Bob
116d73f0b0
- add :ns meta to more vars (#966)
- add a couple more tests for Coercions
2021-08-08 15:38:56 +02:00
Michiel Borkent
12c66351b3 Bump sci 2021-08-08 15:36:07 +02:00
Michiel Borkent
ed5c958d76 Bump sci: varify more vars 2021-08-07 09:39:27 +02:00
Bob
05e963bb6f
varify some core dynamic vars (#957) (#965)
* refer clojure core ns from sci.impl.vars instead
of sci.impl.namespaces

* add :ns meta to dynamic vars in b.i.clojure.core
2021-08-06 13:11:10 +02:00
Michiel Borkent
f1ebc854fe Bump sci 2021-08-06 13:10:46 +02:00
Michiel Borkent
4f4e222d40 Bump sci 2021-08-05 12:56:52 +02:00
Bob
ffd66d514a
add META-INF resource to windows compilation (to mirror linux compilation) (fixes #963) (#964) 2021-08-04 14:20:59 +02:00
Michiel Borkent
64fc58cd80 Update deps.edn on uberjar [skip ci] 2021-08-03 16:49:35 +02:00
Michiel Borkent
985079371c CHANGELOGS [skip ci] 2021-08-03 12:35:07 +02:00
Michiel Borkent
df3130ec66 Version bump 2021-08-03 10:57:19 +02:00
Michiel Borkent
bda2017d0d Skip print-deps-test on Windows for now 2021-08-03 10:36:56 +02:00
Michiel Borkent
cc71e2884e v0.5.1 2021-08-03 09:36:42 +02:00
Michiel Borkent
ff8ad66350 CHANGELOGS [skip ci] 2021-08-02 23:41:15 +02:00
Michiel Borkent
be29d791a8 [#733] print-deps tests 2021-08-02 23:34:38 +02:00
Michiel Borkent
5a0f056a42 deps.clj 2021-08-02 22:52:50 +02:00
Michiel Borkent
768b0c4594 Fix deps.clj 2021-08-02 17:20:00 +02:00
Michiel Borkent
67b77c121a Update deps.clj to 1.10.3.933 2021-08-02 17:08:48 +02:00
Michiel Borkent
1235ad0f9a [#957]: more varify in SCI 2021-08-01 22:08:19 +02:00
Michiel Borkent
3f72507f77
[#957] Repair ns meta 2021-07-31 14:44:26 +02:00
Michiel Borkent
89695d8f7a babashka.nrepl#43 2021-07-27 13:46:53 +02:00
Michiel Borkent
f5125a6f37 nREPL server: get rid of SCI internals 2021-07-27 13:46:53 +02:00
Michiel Borkent
84430c60f8
[#720, #733] print-deps (#958) 2021-07-27 11:29:00 +02:00
Bob
a9e445e5a1
fix windows lib tests (#956)
- add lib-tests path to deps.edn and remove it from shell scripts
- change windows lib test batch script to write a bb.edn file
- re-enable native lib tests on windows
2021-07-25 23:49:01 +02:00
Michiel Borkent
2282b2922d process update 2021-07-23 17:21:39 +02:00
Michiel Borkent
8387109166 Fix flaky test on Windows 2021-07-23 11:51:39 +02:00
Michiel Borkent
294cfe403c Fix flaky bb-edn test 2021-07-23 11:15:03 +02:00
Michiel Borkent
d1b7c6edea CHANGELOGS [skip ci] 2021-07-23 11:01:41 +02:00
Michiel Borkent
25390103fd [#953] Support full reflection on printwriter 2021-07-23 10:59:28 +02:00
Michiel Borkent
f685d9d036 CHANGELOGS [skip ci] 2021-07-22 20:24:54 +02:00
Michiel Borkent
7e0b19ad43 Update babashka.fs 2021-07-22 20:17:46 +02:00
Bob
2863dce99c
add windows-specific clojure test (#950) 2021-07-22 12:34:07 +02:00
Michiel Borkent
7fac0f1eb9
[#947] Vault tests, part 1 (#949) 2021-07-21 12:35:38 +02:00
Michiel Borkent
9c338c9b7f Add timbre/merge-config! 2021-07-18 11:19:47 +02:00
Eugen Stan
d25dd17510
Added InterruptedExcpetion to bb (#943) 2021-07-16 09:52:08 +02:00
Eugen Stan
c1eb47a262
Added IllegalStateException to automatic imports (#942) 2021-07-16 09:48:13 +02:00
Eugen Stan
95a6bc0d54
Added IllegalStateException to bb (#941) 2021-07-15 22:16:25 +02:00
Michiel Borkent
1e4315d1b8 Cut down on Windows tests for now 2021-07-15 16:39:01 +02:00
Michiel Borkent
0df46ab8ff Fix Windows? 2021-07-15 13:52:32 +02:00
Michiel Borkent
7b76eaf956 Disable task test for Windows 2021-07-15 13:16:38 +02:00
Michiel Borkent
fabc0c6ccd Upgrade clj-yaml 2021-07-15 11:18:37 +02:00
Michiel Borkent
8eff166244 [skip ci] 2021-07-15 10:58:36 +02:00
Michiel Borkent
d525428f15 Bump deps 2021-07-15 10:52:29 +02:00
Michiel Borkent
f058463685 Thanks @justone for the better name [skip ci] 2021-07-15 10:36:07 +02:00
Michiel Borkent
403dd8fb3d CHANGELOG [skip ci] 2021-07-14 23:59:39 +02:00
Michiel Borkent
4058afd40e Version bump 2021-07-14 23:46:54 +02:00
Michiel Borkent
0f37149740 CHANGELOG [skip ci] 2021-07-14 23:43:41 +02:00
Michiel Borkent
051cae8b6e 0.5.0 for real 2021-07-14 23:16:26 +02:00
Michiel Borkent
2aa4d26df2 v0.4.7 2021-07-14 23:16:00 +02:00
Michiel Borkent
299ca0515b CHANGELOG [skip ci] 2021-07-14 22:54:54 +02:00
Michiel Borkent
2c7e559351 0.5.0 but with trace 2021-07-14 22:51:18 +02:00
Michiel Borkent
cdc4a4987d FIX THE BLOAT 2021-07-14 22:06:19 +02:00
Michiel Borkent
2932e24652 v0.5.0 2021-07-14 16:31:56 +02:00
Michiel Borkent
a888a340ae Update Slmer: include << macro 2021-07-14 16:30:27 +02:00
Michiel Borkent
3ec7ced8cd Fix Windows test 2021-07-14 16:03:15 +02:00
Michiel Borkent
a8eea0dfd7 Fix Windows test 2021-07-14 14:59:49 +02:00
Michiel Borkent
36ab5ab299 [#935] Fix logging test for windows 2021-07-14 14:25:32 +02:00
Michiel Borkent
3d45f62dd2 [#935] Add logging tests 2021-07-14 12:43:12 +02:00
Hans Bugge Grathwohl
c1a48443d4
Fix typo in CHANGELOG.md (#937) [skip ci] 2021-07-13 14:38:38 +02:00
Michiel Borkent
24d1de51a0 sci: add another self-ref test 2021-07-13 12:57:47 +02:00
Michiel Borkent
51b1fb58d2 Fix tests 2021-07-13 12:52:21 +02:00
Michiel Borkent
5b459da10a Fix tests 2021-07-13 11:47:35 +02:00
Michiel Borkent
588cda9eac [#934] Environment variables not picked up by tools.deps 2021-07-13 11:31:36 +02:00
Michiel Borkent
e996351dc9 Add clojure.tools.logging + timbre 2021-07-12 22:59:07 +02:00
Michiel Borkent
a359bd1746 Use data.json 2.4.0 2021-07-12 22:50:22 +02:00
Michiel Borkent
0a9d7cbc6f Add Dig Gashinsky to sponsors [skip ci] 2021-07-12 17:07:29 +02:00
Michiel Borkent
28f986e201 [#934] pick up env vars from :extra-env in deps step 2021-07-12 16:59:10 +02:00
Michiel Borkent
bb50b6a942 Update links in dev doc [skip ci] 2021-07-12 15:32:31 +02:00
Michiel Borkent
220037c681 borkdude/sci#589: fix stacktrace with invalid import 2021-07-12 12:12:31 +02:00
Bob
af6f94ef81
run lib tests in Windows CI (#933)
* run lib tests in Windows CI

- add batch scripts for invoking tests
- skip some tests on windows
- tweak a couple tests to run on linux and windows

* configure git to checkout with Windows line endings on Appveyor
2021-07-12 00:00:14 +02:00
Bob
b6e65c08a8
add cl-format tests for nil and Writer args (#931) 2021-07-10 21:39:23 +02:00
Michiel Borkent
6a76a73e18 Use direct linking in profiler [skip ci] 2021-07-10 20:34:38 +02:00
Michiel Borkent
8c37594006 Add clojure.data.json tests 2021-07-10 17:16:14 +02:00
Michiel Borkent
3deb154fca sci: function reference equality 2021-07-10 16:51:34 +02:00
Michiel Borkent
02237c47ce Fix windows tests 2021-07-10 14:00:14 +02:00
Michiel Borkent
0832b0a480 Fully support PushbackReader 2021-07-10 11:40:19 +02:00
Michiel Borkent
9b6929e745 CHANGELOG [skip ci] 2021-07-10 11:33:45 +02:00
Michiel Borkent
d47290e996
[#922,#927] pprint/formatter-out + cl-format with-out-str support (#930) 2021-07-10 11:32:21 +02:00
Bob
5430fee1fd
ffclj link and logger example (#839 and #806) (#924)
* add ffclj to libraries list

* add simple logger macro to examples

* add a missing link on projects page
2021-07-08 20:18:01 +02:00
Michiel Borkent
39e17f149b CHANGELOG [skip ci] 2021-07-07 21:20:21 +02:00
Michiel Borkent
46892580c2
[#921, #922] clojure.data.json support, first steps 2021-07-07 21:17:57 +02:00
Michiel Borkent
b95a40c4f2 sci docs [skip ci] 2021-07-07 16:16:29 +02:00
Bob
b53be25b94
[#817] add crispin to lib tests and projects.md (#918)
* add crispin to lib tests and projects.md

* add a missing line in crispin example
2021-07-07 10:01:36 +02:00
Michiel Borkent
4c0578c56c CHANGELOGS [skip ci] 2021-07-05 21:27:54 +02:00
Michiel Borkent
789b8f701e deps.clj update 2021-07-05 21:27:54 +02:00
Bob
097e45d180
[#877] add omniconf lib tests 2021-07-05 21:12:11 +02:00
Michiel Borkent
f47f8b9ad1 Catch up with clojure CLI 2021-07-05 18:45:16 +02:00
Michiel Borkent
277029caae [#914] Fix failing test 2021-07-05 18:26:29 +02:00
Michiel Borkent
2dd18e7cc6 Failing test, fix later 2021-07-05 00:05:48 +02:00
Michiel Borkent
a7d669b47b Fix tests 2021-07-04 22:27:14 +02:00
Michiel Borkent
432680b2f3 [#914] Fix cache dir 2021-07-04 22:18:16 +02:00
Michiel Borkent
1efed2c3c7 minor help edit [skip ci] 2021-07-04 20:41:09 +02:00
Michiel Borkent
3cf3a83c49 [#914] clojure with :dir option doesn't resolve deps in :dir (2) 2021-07-04 12:16:16 +02:00
Michiel Borkent
9eb3c8189c CHANGELOG [skip ci] 2021-07-04 11:47:28 +02:00
Michiel Borkent
b809dd55e8 [#914] clojure with :dir option doesn't resolve deps in :dir 2021-07-04 11:45:51 +02:00
Bob
a542227442
add examples for #324 and #369 [skip ci] (#911)
* add examples for:
- checking stdin for available input
- using data.xml lib

* fix some string contents left over from an XML change
2021-07-03 23:53:58 +02:00
Bob
47bcb4be5e
add heap size and 'expert' flags to help text (#908) 2021-06-30 18:21:35 +02:00
Michiel Borkent
42dffdad84 doc [skip ci] 2021-06-29 23:39:07 +02:00
Michiel Borkent
ac957dada4 doc [skip ci] 2021-06-29 23:38:21 +02:00
Michiel Borkent
9fa5b600d9 doc [skip ci] 2021-06-29 23:37:29 +02:00
Michiel Borkent
000e88f0c6 sci: minor cleanup 2021-06-28 18:19:59 +02:00
Michiel Borkent
c447bc3f2c Revert last cleanup 2021-06-27 23:46:04 +02:00
Michiel Borkent
9acf8145d0 sci: minor cleanup 2021-06-27 23:24:45 +02:00
Michiel Borkent
07c9f58cf8 sci: minor cleanups 2021-06-27 23:14:56 +02:00
Michiel Borkent
98ab1338ab sci: refactor error reporting structure 2021-06-27 16:31:14 +02:00
Michiel Borkent
4133c9f562 sci [skip ci] 2021-06-25 12:53:09 +02:00
Bob
16911a54f0
add more windows testing (#902)
- add default test selector to skip "windows only" tests
- in cases where the differences between *nix shell and windows shell
  make the test very messy, add a separate "windows only" test
- make more tests work on Windows
2021-06-24 22:34:57 +02:00
Michiel Borkent
6843eb6d2e sci: minor cleanup [skip ci] 2021-06-24 15:09:50 +02:00
Michiel Borkent
e42603dac0 example [skip ci] 2021-06-24 13:22:34 +02:00
Michiel Borkent
c7942badfb sci: issue 575 2021-06-24 10:35:06 +02:00
Michiel Borkent
b1992e028d sci: tests [skip ci] 2021-06-22 22:29:10 +02:00
Michiel Borkent
9df9566836 CHANGELOG [skip ci] 2021-06-21 22:41:24 +02:00
Michiel Borkent
ef64e93238 replikativ/hasch tests in CI 2021-06-21 21:58:41 +02:00
Michiel Borkent
e47e77c3d6 Add java.io.FileInputStream 2021-06-21 19:42:04 +02:00
Michiel Borkent
d90f4e7bac
sci: pull apart bindings in eval (#900) 2021-06-21 12:00:53 +02:00
Michiel Borkent
e143eb1cb1 [#899] Fix JVM test 2021-06-20 14:26:40 +02:00
Michiel Borkent
f27098f877 CHANGELOG [skip ci] 2021-06-20 13:33:04 +02:00
Michiel Borkent
af754d013f [#899] (read-line) is buggy in REPL 2021-06-20 13:32:33 +02:00
Michiel Borkent
13773d0104 sci: minor map eval 2021-06-20 12:42:28 +02:00
Bob
35e2cd9d05
make tests run on windows as the default (#235) (#898)
* make tests run on windows as the default

- change from selecting tests to run to selecting tests to skip (remove all :windows tags, add
  :skip-windows tag to tests that don't currently work on windows)
- handfuls of calls to `normalize` and `escape-file-paths` to handle platform differences
- split `task-test` to make most of the tests run on windows, and exclude just a couple of Unix-y tests

* make a binding name clearer

* skip nrepl-server-test on Windows

- test fails on CI, so disabling it for now

* unset bb environment vars after running tests

* unset bb environment var after running release-artifact

BABASHKA_EDN being set can interfere with some tests, so unset it before running the
native tests

* skip uberjar test on Windows

uberjar-test's 'throw on empty classpath' test failing on Windows native
 (but passes on JVM) - skip it for now
2021-06-20 09:23:58 +02:00
Michiel Borkent
55f9458f65 sci: minor map eval stuff 2021-06-19 23:02:24 +02:00
Michiel Borkent
f6cd060c83 doc [skip ci] 2021-06-19 16:39:55 +02:00
Michiel Borkent
99c01b7261 Add normalize-keywords example [skip ci] 2021-06-19 16:33:01 +02:00
Michiel Borkent
cacb516e48 sci: get rid of needs-ctx in evaluator 2021-06-19 14:00:12 +02:00
Bob
ce4702318a
add more windows testing (#894)
- just handling line endings and escaping backslashes in file paths
2021-06-18 23:51:46 +02:00
Bob
e056cb96aa
add more windows testing (#891)
- add `normalize` call to `bb-native` output
- add `escape-file-paths` function to double up backslashes for Windows paths
  passed as strings
- add :windows selector to about 10 more tests, along with various small changes
  for Windows testing
- update test.bat to more closely mirror the Linux/Mac test script
2021-06-17 19:43:43 +02:00
Michiel Borkent
dfbbd4fda5 sci [skip ci] 2021-06-17 18:19:40 +02:00
Michiel Borkent
23eaed140c CHANGELOG [skip ci] 2021-06-16 21:20:16 +02:00
Michiel Borkent
af036f9d3a
Passing form on Windows with question mark breaks evaluation #889 2021-06-16 21:18:31 +02:00
Michiel Borkent
7d696f0dc5 deps.clj [skip ci] 2021-06-16 17:37:43 +02:00
Bob
63619fd66b
add windows selector to a couple of tests (#235) (#888) 2021-06-16 16:40:02 +02:00
Michiel Borkent
90ac55d588
Start porting Windows tests (#235) (#887) 2021-06-16 11:01:17 +02:00
Michiel Borkent
f519c35823 doc [skip ci] 2021-06-13 22:52:32 +02:00
Michiel Borkent
535b70093d Version bump 2021-06-13 22:26:46 +02:00
Michiel Borkent
0dc4c59794 v0.4.6 2021-06-13 21:55:43 +02:00
Michiel Borkent
35103f40ef
Upgrade to graal 21.1, fixes #884 (#885) 2021-06-13 21:53:07 +02:00
Michiel Borkent
4492db289e CHANGELOG [skip ci] 2021-06-10 12:38:35 +02:00
Michiel Borkent
d382eb9fc9 Version bump 2021-06-10 12:37:16 +02:00
Michiel Borkent
1a4c627702 v0.4.5 2021-06-10 12:21:45 +02:00
Michiel Borkent
637f0bb757 CHANGELOG [skip ci] 2021-06-10 12:21:38 +02:00
Michiel Borkent
6e4044c623 Async is not optional 2021-06-10 12:10:47 +02:00
Michiel Borkent
732d2b5a8b
Allow .notify / .wait interop call #879 2021-06-10 12:04:23 +02:00
Michiel Borkent
12d6afc885 STM: add commute 2021-06-09 22:47:17 +02:00
Michiel Borkent
6e86e69010 minor [skip ci] 2021-06-09 20:19:44 +02:00
Michiel Borkent
bda6c0f36e borkdude/deps.clj#46: fix passing JVM opts 2021-06-09 20:15:32 +02:00
Michiel Borkent
9385805423
STM (#882) 2021-06-09 15:47:34 +02:00
Michiel Borkent
18f5c566cc Add doc [skip ci] 2021-06-09 10:49:34 +02:00
Michiel Borkent
daa8eb06d7 Add doc [skip ci] 2021-06-09 10:48:33 +02:00
Michiel Borkent
ac4867daf7 Add doc [skip ci] 2021-06-09 10:40:12 +02:00
Michiel Borkent
15e54ef0a1
Add support for slingshot #675 (#881)
* Add java.util.Arrays/copyOfRange for slingshot

* add exception for tests

* Add slingshot tests
2021-06-09 10:39:43 +02:00
Michiel Borkent
426e97d1df sci: get rid of eval-call 2021-06-08 17:40:58 +02:00
Michiel Borkent
267c478e58 sci: only case for CLJS 2021-06-08 15:40:23 +02:00
Michiel Borkent
d6ac0687d9 sci: Get rid of static via meta call 2021-06-08 15:31:23 +02:00
Michiel Borkent
c1f621930d sci: Get rid of static via meta call 2021-06-08 15:20:54 +02:00
Michiel Borkent
ac8f9b4f8f Sci: get rid of call via meta op 2021-06-08 11:36:31 +02:00
Michiel Borkent
9af436a0d4
Add java.net.InetSocketAddress (#878) 2021-06-07 20:20:28 +02:00
Michiel Borkent
cc21fcc9ef sci: more ctx-fn 2021-06-06 20:59:36 +02:00
Michiel Borkent
fcc57e08bc sci: return direct fn call 2021-06-06 13:56:21 +02:00
Michiel Borkent
f6e52b37d5 sci: emit error at analysis time for invalid keyword call 2021-06-06 12:59:52 +02:00
Michiel Borkent
e5a6c5b7a5 sci: clean 2021-06-03 11:33:40 +02:00
Michiel Borkent
3764b52f3a Implement custom deref outside of sci 2021-06-03 00:25:57 +02:00
Michiel Borkent
225c04d784 sci: minor 2021-06-02 23:34:59 +02:00
Michiel Borkent
957f97fd15 sci: revert optimizations 2021-06-02 21:39:44 +02:00
Michiel Borkent
5d89c623c3 sci: minor 2021-06-02 21:18:01 +02:00
Michiel Borkent
ef4bd8e5f6 sci: count at analysis time 2021-06-02 20:48:47 +02:00
Michiel Borkent
99475511e0 sci: fn destructure at analysis 2021-06-02 20:13:00 +02:00
Michiel Borkent
d8ea844058 sci: minor fn optimization 2021-06-02 18:01:22 +02:00
Michiel Borkent
c71beafcd3 sci: minor fn enhance 2021-06-02 16:18:00 +02:00
Michiel Borkent
d4bf1d1a1d sci: clean up symbol resolution 2021-06-02 12:02:31 +02:00
Michiel Borkent
dddc32adfd Version bump 2021-06-01 12:08:31 +02:00
Michiel Borkent
952af31296 doc [skip ci] 2021-06-01 11:58:53 +02:00
Michiel Borkent
6bd17bad98 CHANGELOG [skip ci] 2021-06-01 11:50:36 +02:00
Michiel Borkent
3a9022be04 v0.4.4 2021-06-01 11:47:04 +02:00
Michiel Borkent
e833fb2703 CHANGELOG [skip ci] 2021-06-01 11:46:53 +02:00
Michiel Borkent
beb7d8a9a8
Add java.lang.StackTraceElement 2021-06-01 11:45:12 +02:00
Michiel Borkent
e7bcb2170a Additional fix for borkdude/sci#567 2021-06-01 11:29:17 +02:00
Michiel Borkent
97298ab0f1 CHANGELOG [skip ci] 2021-06-01 11:13:30 +02:00
Michiel Borkent
fa82ec5087 sci: support trailing metadata in defn 2021-06-01 11:12:41 +02:00
Michiel Borkent
cc26984ab7 Update babashka.nrepl 2021-05-31 14:28:45 +02:00
Michiel Borkent
b0490a0161 CHANGELOG [skip ci] 2021-05-31 10:34:02 +02:00
Michiel Borkent
a8f5ef7287 CHANGELOG [skip ci] 2021-05-31 00:08:06 +02:00
Michiel Borkent
42bf790068
[#872] Add java.lang.ProcessHandle$Info (#873)
And java.util.Optional
2021-05-31 00:06:21 +02:00
Michiel Borkent
524a260c26 sci: minor cleanup 2021-05-30 23:24:31 +02:00
Michiel Borkent
4bb2ba8b2c sci: in-ns minor 2021-05-30 22:11:30 +02:00
Michiel Borkent
8efc710fb3 sci: interop refactor 2021-05-30 21:37:03 +02:00
Michiel Borkent
dceb3d7f10 sci: interop refactor 2021-05-30 21:35:52 +02:00
Michiel Borkent
d1cee42c9d CHANGELOG [skip ci] 2021-05-30 13:24:05 +02:00
Michiel Borkent
82625b57dd Tasks: fix edge case 2021-05-30 12:30:06 +02:00
Michiel Borkent
35874fa5ce babashka.nrepl#40 2021-05-30 12:23:41 +02:00
Michiel Borkent
ac576bd6e7 [#865] Stable namespace 2021-05-30 11:36:30 +02:00
Michiel Borkent
94fc8298e6 [#865] Use print-meta when emitting tasks 2021-05-30 11:27:11 +02:00
Michiel Borkent
9347bfd3d3 sci: new/constructor enhancement 2021-05-29 13:47:14 +02:00
Michiel Borkent
b731cf7f10 sci: lazy-seq enhancement 2021-05-29 11:07:07 +02:00
Thiago Kenji Okada
0a3149ae8a
Do not exit when --static is called on non-Linux [skip ci] (#871)
While creating [this gist](https://gist.github.com/thiagokokada/115b2588ff65a48d54b8832488801c92)
I realized that exiting if the --static flag is passed on non-Linux systems
just make more difficult to handle those cases.

Instead, let's just print a message informing the user of their mistake,
and keep running the script with the correct filename.
2021-05-28 23:43:31 +02:00
Michiel Borkent
fa410a7b5e sci: enhancement for throw 2021-05-28 19:03:02 +02:00
Michiel Borkent
f5deafffb8 sci: try / catch 2021-05-28 17:15:39 +02:00
Thiago Kenji Okada
e955926ee9
Improvements to install script [skip ci] (#870)
- Use `mktemp -d` to generate a temporary directory, only if user
  doesn't use `--download-dir`
- Clean-up the temporary directory using `trap`. Remove
  other `rm` calls from code since they're not necessary
  anymore
- Run download in a subshell, so after finishing it the
  script is still on the directory where the user ran
  the script. Fix `./install --dir .` usage
- Fix backup of old Babashka install
2021-05-28 17:07:52 +02:00
Michiel Borkent
1c1d4b531f Install script: default download dir to TMPDIR [skip ci] 2021-05-28 13:33:11 +02:00
Michiel Borkent
745e2b0848 sci minor [skip ci] 2021-05-28 11:50:48 +02:00
Michiel Borkent
1fe1e46e71 sci: minor improvements 2021-05-28 11:44:20 +02:00
Michiel Borkent
b9524e5d6e sci: case improvements 2021-05-28 11:30:16 +02:00
Michiel Borkent
7a3c30ab3f babashka.fs [skip ci] 2021-05-28 09:28:14 +02:00
Michiel Borkent
48a9ec6c0d Install script [skip ci] 2021-05-27 17:35:55 +02:00
Michiel Borkent
ec479f049a Example: xml-zip [skip ci] 2021-05-27 09:31:35 +02:00
Michiel Borkent
17f35b4d48 sci and tweak aot 2021-05-26 17:38:34 +02:00
Thiago Kenji Okada
4b4ada9617
Improve script/setup-musl (#867) 2021-05-25 18:52:30 +02:00
Michiel Borkent
3eafacac2b sci: set! for CLJS 2021-05-25 15:44:56 +02:00
Michiel Borkent
6bcc0e4a3f deps.clj 2021-05-25 15:44:56 +02:00
Michiel Borkent
5890238666 deps.clj 2021-05-25 15:44:56 +02:00
Jakub Holy
4a5972f15e
projects: + oidc-client (#862) [skip ci] 2021-05-21 19:35:51 +02:00
Thiago Kenji Okada
20cc3b4cdd
Use shasum instead of sha256sum [skip ci] (#861)
sha256sum is not available in macOS by default.

See: https://github.com/ESGF/esg-search/issues/84#issuecomment-213694850

However, shasum seems to be avaialble, so use that instead.
2021-05-21 16:52:38 +02:00
rng-dynamics
512a6f2220
feat: print data of uncaught ExceptionInfo to output (#854)
* feat: print data of uncaught ExceptionInfo to output

* println -> prn, add tests
2021-05-20 22:49:58 +02:00
Michiel Borkent
6f15b507c6 Version bump 2021-05-20 13:10:18 +02:00
Michiel Borkent
22f3464066 v0.4.3 2021-05-20 12:52:41 +02:00
Michiel Borkent
ab9d2a0c2c Version bump 2021-05-20 12:43:01 +02:00
Michiel Borkent
66e4d1936c CHANGELOG [skip ci] 2021-05-20 12:41:31 +02:00
Michiel Borkent
ce5fdcd564 v0.4.2 2021-05-20 12:09:41 +02:00
Michiel Borkent
add033324b 0.4.2 2021-05-20 12:09:35 +02:00
Michiel Borkent
47cc09908a Pods: minor 2021-05-20 12:04:41 +02:00
Michiel Borkent
ae9eaa4bc4 Pods: transit fns 2021-05-19 21:32:25 +02:00
Michiel Borkent
703b517718 Add transit read-handler-map and write-handler-map 2021-05-19 19:19:23 +02:00
Michiel Borkent
a4b97cb1e7 babashka.curl README 2021-05-19 15:55:47 +02:00
Michiel Borkent
a942befc65
Add more agent vars (#857) 2021-05-19 14:00:48 +02:00
Andrea Richiardi
7e3b1f58d5
Use sequential? for identifying if the script output needs splitting (#853) 2021-05-19 00:07:39 +02:00
Michiel Borkent
9f48048472 [#847] Better error handling for parallel tasks (2) 2021-05-18 13:19:09 +02:00
Michiel Borkent
e18f4302a8
[#847] Better error handling for parallel tasks 2021-05-18 12:39:21 +02:00
Michiel Borkent
00091136d3 CHANGELOGS [skip ci] 2021-05-18 10:56:48 +02:00
Michiel Borkent
5ce7f2d67d babashka.pods: transit read+write handlers 2021-05-17 11:45:11 +02:00
Michiel Borkent
454ed43ae4 Fix deps.edn 2021-05-16 23:13:10 +02:00
Michiel Borkent
42104a617d deps.edn [skip ci] 2021-05-16 23:00:16 +02:00
Thiago Kenji Okada
21fc124b1c
Fix link in README.md [skip ci] (#848) 2021-05-16 17:29:02 +02:00
Michiel Borkent
a832b85ab5 browse-url: Use open in macOS without specifying location 2021-05-15 23:22:02 +02:00
Thiago Kenji Okada
69e58440ab
Improve clojure.java.browse (#846)
* Remove xdg-open hardcoded path in impl.clojure.java.browse

Binaries in Linux are not guarantee to be located on /usr/bin.

For example, NixOS the binaries are located in
/run/current-system/sw/bin/xdg-open (that is actually just a symlink to
/nix/store). The distro may also not have xdg-open installed at /,
instead the user may put it somewhere else like $HOME/bin.

This commit fixes this by using not hardcoding the PATH of xdg-open,
instead relying on shell path to search it.

* Implement clojure.java.browse/*open-url-script*

This allows usage of a custom URL script, like:

```clojure
(binding [*open-url-script* (atom "my-browse-url-script")]
  (browse-url "https://google.com"))
```

*open-url-script* is an atom just to keep compatibility with Clojure.

Described here: https://clojuredocs.org/clojure.java.browse/*open-url-script*
2021-05-15 22:10:52 +02:00
Thiago Kenji Okada
e4d5988921
Document install new flags in README.md (#844) [skip ci] 2021-05-14 21:27:53 +02:00
Thiago Kenji Okada
c39d4bc320
Improve install script (#842)
* Add checksum to install script

This will allow someone to check if Babashka is correctly downloaded,
e.g.:

```
$ ./install --dir /tmp --checksum 3cb19f158b9f1655e0165b6c4067d35faaa05882bbdb230616c91085b02b5bf4
Downloading https://github.com/babashka/babashka/releases/download/v0.4.1/babashka-0.4.1-linux-amd64.tar.gz to /tmp
Failed checksum on babashka-0.4.1-linux-amd64.tar.gz
Got: 3cb19f158b9f1655e0165b6c4067d35faaa05882bbdb230616c91085b02b5bf3
Expected: 3cb19f158b9f1655e0165b6c4067d35faaa05882bbdb230616c91085b02b5bf4
```

There is no check by default. This makes this change backwards
compatible (e.g.: if the machine doesn't have sha256sum, this change
will not break installation).

* Add --static to install script

This will allow installation of static instead of dynamically binaries
on Linux.

* Add checksum to print_help

* Add check that --checksum and --options should be provided together
2021-05-14 21:05:38 +02:00
Michiel Borkent
e6a2fdbb45
Add HoneySql v2 tests (#841) 2021-05-14 12:04:56 +02:00
Michiel Borkent
17a7129595 README [skip ci] 2021-05-14 10:30:52 +02:00
Michiel Borkent
439a1b1053 Version bump 2021-05-13 13:46:44 +02:00
Michiel Borkent
4c816cbfba v0.4.1 2021-05-13 13:26:14 +02:00
Michiel Borkent
6aca41a48a
[#829] Allow thread-first in combination with shell 2021-05-13 13:10:56 +02:00
Michiel Borkent
11b066ae70 Include binary size in msg 2021-05-13 12:13:02 +02:00
Michiel Borkent
c01700c9c7 Update release link 2021-05-13 12:10:37 +02:00
Michiel Borkent
c8e6e7ad4c Update release link 2021-05-13 12:02:01 +02:00
Michiel Borkent
7462d86afd [#837] Add babashka.task System property 2021-05-13 11:53:28 +02:00
Michiel Borkent
5014012bd6 [#836] Add :error-fn option to shell 2021-05-13 11:45:27 +02:00
Michiel Borkent
5554619a9d Selmer: util/set-missing-value-formatter! 2021-05-11 22:13:50 +02:00
Michiel Borkent
00fd7820c3 Fix Windows httpkit config 2021-05-11 14:16:35 +02:00
Michiel Borkent
4ffd08f360 [#835] Expose escaping functions from selmer.util 2021-05-11 13:19:31 +02:00
Michiel Borkent
e3413600c6 Add thread-bound? 2021-05-11 11:42:38 +02:00
Michiel Borkent
c18be0a157 Import NullPointerException 2021-05-11 10:15:42 +02:00
Thiago Kenji Okada
14e053e0a3
Add BABASHKA_MUSL build variable (#834)
This allows building a Babashka binary using musl C libraries instead,
instead of hardcoding this accordingly to the CPU arch.
2021-05-11 00:10:11 +02:00
Michiel Borkent
43ba26e11a musl workaround 2021-05-10 23:31:08 +02:00
Michiel Borkent
f8944f1286 Another bash fix 2021-05-10 23:27:54 +02:00
Michiel Borkent
562922a586 Fix order in Dockerfile 2021-05-10 23:25:01 +02:00
Michiel Borkent
a8528e4a4a Fix bash 2021-05-10 23:16:59 +02:00
Michiel Borkent
f4fb27be98 Fix bash script 2021-05-10 23:08:11 +02:00
Michiel Borkent
3800245849 musl 2021-05-10 23:03:46 +02:00
Michiel Borkent
798ec2e3d4 musl 2021-05-10 23:03:39 +02:00
Michiel Borkent
34bbea0204
Move setup-musl to .circleci scripts (#833) 2021-05-10 22:46:32 +02:00
Michiel Borkent
7106c1554f docs [skip ci] 2021-05-10 20:06:30 +02:00
Michiel Borkent
6edc26c834
[#831] Workaround for musl stack size issues 2021-05-10 18:29:26 +02:00
Thiago Kenji Okada
73d454be46
Add sha256sum check to zlib (#830)
Just to make sure that we are using the correct source code.
2021-05-10 17:33:10 +02:00
Michiel Borkent
f4b9f8a59d Temporarily enable static build on master] 2021-05-09 23:48:30 +02:00
Thiago Kenji Okada
ddc900a656
Build BABASHKA_STATIC with musl C library (#828)
* Build BABASHKA_STATIC with musl C library

Based on https://github.com/babashka/pod-babashka-aws/pull/37.

This is the recommended way to build static binaries with GraalVM by the
documentation and multiple issues on GitHub. See:

- https://www.graalvm.org/reference-manual/native-image/StaticImages/
- oracle/graal#571 (comment)

The reason that building a statically binary with glibc is complicated
is explained in the glib documentation:

https://sourceware.org/glibc/wiki/FAQ#Even_statically_linked_programs_need_some_shared_libraries_which_is_not_acceptable_for_me.__What_can_I_do.3F

* Bring back zlib1g-dev

Seems it is necessary for the non-static build.
2021-05-09 23:30:27 +02:00
Michiel Borkent
36e50e0f0d Add help for tasks and run 2021-05-08 23:51:15 +02:00
Michiel Borkent
f8a18b56ec Version bump 2021-05-08 18:42:39 +02:00
Michiel Borkent
83925e432d 0.4.0 2021-05-08 18:09:15 +02:00
Michiel Borkent
7912aa764c v0.3.9 2021-05-08 18:04:36 +02:00
Michiel Borkent
d4ed910c22 Update selmer 2021-05-08 16:37:33 +02:00
Michiel Borkent
fe9370e04b Tasks: inherit parallel option 2021-05-08 16:21:54 +02:00
Michiel Borkent
b5a1dce4ec sci: better error msg for protocol not found or class 2021-05-08 11:59:21 +02:00
Michiel Borkent
f3a441ee3c minor 2021-05-08 11:06:34 +02:00
Michiel Borkent
9a8bf7d0c3 [#825] Handle uneval-ed expressions in bb tasks 2021-05-08 11:02:05 +02:00
Dirk Wetzel
69ee221eda
Add class java.util.zip.ZipOutputStream (#824) 2021-05-07 16:17:09 +02:00
Michiel Borkent
f6e3e81252 [#823] Add tests for jasentaa 2021-05-07 12:08:02 +02:00
Michiel Borkent
cab3307a07 [#823] Add tests for jasentaa 2021-05-07 11:58:18 +02:00
Michiel Borkent
d52ad92cb4 Add java.text.ParseException 2021-05-07 11:26:38 +02:00
Michiel Borkent
59cbfe43e0 Add java.text.ParserException 2021-05-07 11:22:37 +02:00
Michiel Borkent
b488c65d31 Bump Selmer to 1.12.39 2021-05-07 10:02:59 +02:00
Michiel Borkent
add7e7d216 Fix Selmer 2021-05-06 22:02:06 +02:00
Michiel Borkent
0a877f2976 Bump Selmer 2021-05-06 21:24:56 +02:00
Michiel Borkent
31f7732d4f Depend on selmer upstream 2021-05-06 18:09:36 +02:00
Michiel Borkent
4f70079f52 Version bump 2021-05-06 14:14:13 +02:00
Michiel Borkent
bf6f19dc97 Tasks: don't print context on shell error 2021-05-06 13:58:49 +02:00
Michiel Borkent
b779f45407 v0.3.8 2021-05-06 13:28:43 +02:00
Michiel Borkent
f49178786c [#818] Tasks: don't call System/exit 2021-05-06 13:28:24 +02:00
Michiel Borkent
87acecba52 CHANGELOG [skip ci] 2021-05-06 13:12:47 +02:00
Michiel Borkent
293dfbb8cb CHANGELOG [skip ci] 2021-05-06 13:12:30 +02:00
Michiel Borkent
cbd8a2d07d
[#821] Include Selmer 2021-05-06 12:53:59 +02:00
Michiel Borkent
29483d6740 Fix bug in deps.clj 2021-05-06 09:53:38 +02:00
Michiel Borkent
7b32287943 deps.clj: don't crash on nil PATH 2021-05-06 09:36:51 +02:00
Michiel Borkent
3e74aac4a5 Add NullPointerException class 2021-05-04 12:00:03 +02:00
Michiel Borkent
042934cc3c Ignore :min-bb-version when resolving deps 2021-05-04 11:11:55 +02:00
Michiel Borkent
e0e3aa422e [#770] Add test 2021-05-03 11:06:32 +02:00
Michiel Borkent
cf570cd913 Tasks: get rid of res local 2021-05-02 23:12:48 +02:00
Michiel Borkent
d0d18f9837 Tasks: integrate in doc subcommand 2021-05-02 20:48:40 +02:00
Michiel Borkent
76a6760516 Add some classes 2021-05-02 20:14:19 +02:00
Michiel Borkent
70e0566647 Tasks: detect cycles 2021-05-02 15:04:07 +02:00
Michiel Borkent
12c29eb308 Tasks: detect cycles 2021-05-02 14:51:51 +02:00
Michiel Borkent
fb3d24b23c Tasks: better error msg for unresolved task 2021-05-02 14:31:57 +02:00
Michiel Borkent
92dde5ce38 [#662] See commit 87b9d93911 2021-05-02 11:43:44 +02:00
Michiel Borkent
87b9d93911
[#622] with-precision 2021-05-02 11:41:57 +02:00
Michiel Borkent
6d540e2f06 Rename --verbose to --debug 2021-05-02 11:16:00 +02:00
Michiel Borkent
d1bbf844de Add --verbose to global opts 2021-05-02 11:00:44 +02:00
Michiel Borkent
cde72ebc45 sci: minor 2021-05-01 16:31:02 +02:00
Michiel Borkent
fed03289c4 sci minor [skip ci] 2021-05-01 15:39:02 +02:00
Michiel Borkent
d0abfefc9d sci minor 2021-05-01 12:32:58 +02:00
Michiel Borkent
a9502b1578 CHANGELOG [skip ci] 2021-04-30 12:16:12 +02:00
Michiel Borkent
bfcd2fefdc Version bump 2021-04-30 12:14:47 +02:00
Michiel Borkent
129131020d v0.3.7 2021-04-30 12:01:36 +02:00
Michiel Borkent
3bcc392760 Tasks: add explicit run function 2021-04-30 11:55:24 +02:00
Michiel Borkent
f0adfb450e Tasks: remove log-level 2021-04-30 11:17:48 +02:00
Michiel Borkent
06be620d71
[#805] Support :enter and :leave hooks + current-task fn (#813) 2021-04-30 11:11:12 +02:00
Thiago Kenji Okada
a8247c9762
Add examples/is_tty.clj (#812) [skip ci] 2021-04-29 16:39:13 +02:00
Michiel Borkent
e26f26c1ba [#811] Fix --classpath when no additional args are passed 2021-04-28 20:14:39 +02:00
Michiel Borkent
8deb96b931 sci: fix native tests [skip ci] 2021-04-28 13:16:01 +02:00
Michiel Borkent
567db4cf15 [#809] Use IllegalArgumentException in case 2021-04-28 12:50:33 +02:00
Michiel Borkent
66867e1ddb [#807] Ignore local and global deps.edn 2021-04-28 12:09:05 +02:00
Michiel Borkent
f2ec857c66 Add min-version tests 2021-04-28 11:26:49 +02:00
Michiel Borkent
514fc84cde [#810] Support :extra-paths and :extra-deps in tasks 2021-04-27 23:32:37 +02:00
Michiel Borkent
75ffb3867d sci [skip ci] 2021-04-27 12:33:54 +02:00
Michiel Borkent
3cb85851ad sci v0.2.5 2021-04-27 12:31:23 +02:00
Michiel Borkent
7ab0ccd19e minor [skip ci] 2021-04-27 11:13:57 +02:00
Michiel Borkent
d7075ffad0 Tasks: fix listing of tasks 2021-04-26 10:59:05 +02:00
Michiel Borkent
386cbd4ad6 Tasks: add clojure to logging 2021-04-25 23:47:42 +02:00
Michiel Borkent
6a4dd5cd26 Fix test 2021-04-25 23:31:39 +02:00
Michiel Borkent
c8c49f42fe Fix tests 2021-04-25 23:28:53 +02:00
Michiel Borkent
6da8fc99b8 Tasks: sort by occurence 2021-04-25 23:10:48 +02:00
Ben Brinckerhoff
e6e82906f4
Adds Expound to projects.md (#803) [skip ci] 2021-04-25 17:02:32 +02:00
Michiel Borkent
0c130b5a5d CHANGELOG [skip ci] 2021-04-25 14:32:23 +02:00
Michiel Borkent
131d1c5e8d CHANGELOG [skip ci] 2021-04-25 14:19:46 +02:00
Michiel Borkent
abd679292e CHANGELOG [skip ci] 2021-04-25 14:12:31 +02:00
Michiel Borkent
4c8c8c09f2 Version bump 2021-04-25 14:03:24 +02:00
Michiel Borkent
4ebd4c392a CHANGELOG [skip ci] 2021-04-25 13:51:32 +02:00
Michiel Borkent
71f5a3aae4 CHANGELOG [skip ci] 2021-04-25 13:48:11 +02:00
Michiel Borkent
c49ec83746 v0.3.6 2021-04-25 13:47:18 +02:00
Michiel Borkent
c5d61996d4 Tasks: support :continue in shell fn 2021-04-25 13:34:26 +02:00
Michiel Borkent
21bb768e9f Tasks: fix execution of fully qualified symbol 2021-04-25 11:42:11 +02:00
Michiel Borkent
647ef40250 Tasks: accept alias in fully qualified namespace 2021-04-25 11:27:34 +02:00
Michiel Borkent
f7e881479b Tasks: support :continue in shell 2021-04-25 00:24:33 +02:00
Michiel Borkent
a2f7bb835e Tasks: default log level = :error 2021-04-24 23:48:42 +02:00
Michiel Borkent
4f0795f522 Tasks: logging 2021-04-24 23:35:03 +02:00
Michiel Borkent
38d3d3784b CHANGELOG [skip ci] 2021-04-24 23:20:48 +02:00
Michiel Borkent
12cb5d637c [#802] Support resolving docstring from function 2021-04-24 23:19:37 +02:00
Michiel Borkent
bd08635793 Default log level :info 2021-04-24 18:10:31 +02:00
Michiel Borkent
ea62c99853 default log level 2021-04-24 17:47:28 +02:00
Michiel Borkent
4c5e7cc86d Tasks: simplify logging 2021-04-24 17:35:41 +02:00
Michiel Borkent
b71b5d2c50 Tasks: logging 2021-04-24 17:16:59 +02:00
Michiel Borkent
cb07196de9 Tasks: add :log option 2021-04-24 14:47:03 +02:00
Michiel Borkent
b7ebf9c915 CHANGELOG [skip ci] 2021-04-24 13:06:28 +02:00
Michiel Borkent
5ff9d8328a [#796] Support map literal in task 2021-04-24 13:05:27 +02:00
Michiel Borkent
3e9ddc55bb [#663] :min-bb-version 2021-04-24 12:54:41 +02:00
Michiel Borkent
3c6cf3f37e Fix test 2021-04-24 12:05:15 +02:00
Michiel Borkent
86d4a7319f CHANGELOG [skip ci] 2021-04-24 11:52:23 +02:00
Michiel Borkent
6806398722 [#800] Fix task priority 2021-04-24 11:51:03 +02:00
Michiel Borkent
c6beb03635 fs 0.0.5 2021-04-24 09:59:44 +02:00
Michiel Borkent
2852ef01cc fs: allow dir as dest in copy 2021-04-23 23:56:49 +02:00
Michiel Borkent
ad93155d4f sci: minor perf 2021-04-22 23:30:30 +02:00
Michiel Borkent
350066858c CHANGELOG [skip ci] 2021-04-22 22:58:08 +02:00
Michiel Borkent
5a2a756649 [#767] Add arg count check for clojure.core/for 2021-04-22 22:55:34 +02:00
Michiel Borkent
8011bb02bd docs [skip ci] 2021-04-22 19:32:07 +02:00
Michiel Borkent
d07c90bce3 docs [skip ci] 2021-04-22 19:31:24 +02:00
Michiel Borkent
657a88c348 [#780] Ignore empty classpath entries 2021-04-22 12:33:17 +02:00
Michiel Borkent
15e71b0807
[#780] Fix uberjar CLI parsing and throw when no classpath is provided 2021-04-22 11:56:13 +02:00
Michiel Borkent
3dfc15f5a4 README [skip ci] 2021-04-21 20:05:47 +02:00
Aleksander Madland Stapnes
5652dc7e7f
Add install instructions for asdf (#797) [skip ci] 2021-04-21 20:01:18 +02:00
Michiel Borkent
24c4c62ae3 Use correct branch on appveyor 2021-04-21 13:46:47 +02:00
Michiel Borkent
acd9c389f9 clean 2021-04-21 11:53:54 +02:00
Michiel Borkent
906d009fc0 Fix version 2021-04-21 11:49:35 +02:00
Michiel Borkent
eddb098947
Release artifacts to Github automatically (#795) 2021-04-21 11:47:46 +02:00
Michiel Borkent
c39fc76702
Automatically upload artifacts to Github release 2021-04-21 00:10:59 +02:00
Michiel Borkent
ff460f323d .gitignore 2021-04-20 18:02:13 +02:00
Michiel Borkent
1d2d155eaf More test fixes 2021-04-19 23:33:51 +02:00
Michiel Borkent
f9cea604ad Fix JVM tests 2021-04-19 23:30:33 +02:00
Michiel Borkent
0014840506 Tasks: don't tokenize when string refers to file 2021-04-19 23:18:00 +02:00
Michiel Borkent
cf1c8649c0 process tweaks 2021-04-19 23:06:06 +02:00
Michiel Borkent
8a7c740292 process tweaks 2021-04-19 16:54:34 +02:00
Michiel Borkent
625e062763 fs: modified-since lazy 2021-04-17 13:21:48 +02:00
Michiel Borkent
55f6577327 deps.clj: windows fixes 2021-04-16 20:52:46 +02:00
Michiel Borkent
db8e839de1 Remove set support in tasks 2021-04-16 16:14:01 +02:00
Michiel Borkent
2f1744cbc8 Version bump 2021-04-15 12:47:33 +02:00
Michiel Borkent
3d076b07cc CHANGELOGS [skip ci] 2021-04-15 12:30:58 +02:00
Michiel Borkent
b4984a5628 v0.3.5 2021-04-15 12:28:09 +02:00
Michiel Borkent
337096cde7 Tasks: set means parallel 2021-04-15 12:22:31 +02:00
Michiel Borkent
cc50b5f441 CHANGELOGS [skip ci] 2021-04-15 12:11:29 +02:00
Michiel Borkent
4925b51de7 [#788] Add bound-fn and bound-fn* 2021-04-15 12:09:52 +02:00
Michiel Borkent
76e2a241e7 sci: add aset-* fns 2021-04-15 10:46:08 +02:00
Michiel Borkent
330377bcd6 sci: add aset-byte 2021-04-15 10:34:59 +02:00
Michiel Borkent
adbe1a830e CHANGELOGS [skip ci] 2021-04-15 00:05:52 +02:00
Michiel Borkent
f3630d2fb3
[#790] Add java.security.SecureRandom 2021-04-15 00:04:19 +02:00
Michiel Borkent
970ab1bee9 CHANGELOGS [skip ci] 2021-04-14 23:36:54 +02:00
Michiel Borkent
1ee580e254 CHANGELOGS [skip ci] 2021-04-14 23:36:48 +02:00
Michiel Borkent
e0b1c1b01e
[#784] Support binf.cljc library by adding ByteBuffer and Charset-related classes (#789) 2021-04-14 23:27:31 +02:00
Michiel Borkent
0ecee5bf94 [#785] :requires option 2021-04-12 22:55:10 +02:00
Michiel Borkent
478dd780b7 Add shutdown-tree 2021-04-12 17:37:29 +02:00
Michiel Borkent
80a06a62f9 Tasks: fix parallel 2021-04-12 11:55:56 +02:00
Michiel Borkent
567b1b1c1f CHANGELOGS [skip ci] 2021-04-12 10:52:32 +02:00
Michiel Borkent
8286ebb689 Version bump 2021-04-12 10:51:04 +02:00
Michiel Borkent
e86aac02f9 Use pr-str in tasks 2021-04-12 10:35:41 +02:00
Michiel Borkent
d2e137d5d1 v0.3.4 2021-04-12 09:47:34 +02:00
Michiel Borkent
00b33dab4d CHANGELOG 2021-04-12 09:47:28 +02:00
Michiel Borkent
ac307708ba parallel 2021-04-12 00:02:52 +02:00
Michiel Borkent
f18ec3feeb Fix parallel tasks 2021-04-11 23:20:27 +02:00
Michiel Borkent
e1cfdc6e23 Fix parallel 2021-04-11 23:07:48 +02:00
Michiel Borkent
da27843544 shortcut static aarch build 2021-04-11 21:37:12 +02:00
Michiel Borkent
2b2e602eac bb tasks: support parallel via future 2021-04-11 21:25:15 +02:00
Michiel Borkent
ed17a190d2 CHANGELOG [skip ci] 2021-04-11 12:53:26 +02:00
Michiel Borkent
bd0495f88b tasks output test 2021-04-11 12:49:42 +02:00
Michiel Borkent
7194763c32 deps.clj#42 2021-04-11 12:37:41 +02:00
Michiel Borkent
9e59c65e5c deps.clj#42 2021-04-11 12:23:16 +02:00
Michiel Borkent
da6ba8a450 CHANGELOG [skip ci] 2021-04-10 17:55:35 +02:00
Michiel Borkent
2526c4d9f3 CHANGELOG [skip ci] 2021-04-10 17:55:09 +02:00
Michiel Borkent
225a68da06 CHANGELOG [skip ci] 2021-04-10 17:53:28 +02:00
Michiel Borkent
94a4550f3d Version bump 2021-04-10 17:33:41 +02:00
Michiel Borkent
b16de694b9 Fix Docker 2021-04-10 17:22:44 +02:00
Michiel Borkent
d5c51cf6ad CHANGELOG [skip ci] 2021-04-10 17:11:52 +02:00
Michiel Borkent
20f3da9db2 v0.3.3 2021-04-10 17:08:03 +02:00
Michiel Borkent
45109685e1 Get rid of :when for now 2021-04-10 16:50:20 +02:00
Michiel Borkent
6087b94d32 Clojure test 2021-04-10 16:12:30 +02:00
Michiel Borkent
36abd4152a List tasks test 2021-04-10 16:07:06 +02:00
Michiel Borkent
0ae56e7098 Fix bug in topological sorting 2021-04-10 15:57:03 +02:00
Michiel Borkent
cf55681114 Task tests 2021-04-10 15:16:12 +02:00
Michiel Borkent
1020a8c335
[#788] First cut of bb tasks 2021-04-10 14:42:58 +02:00
Michiel Borkent
4dac03da26 CHANGELOG [skip ci] 2021-04-10 11:17:02 +02:00
Michiel Borkent
5d84d75f80 Upgrade to Clojure 1.11.0-alpha1 2021-04-10 11:12:36 +02:00
Michiel Borkent
848a73c666 fs#22 2021-04-10 11:06:56 +02:00
Michiel Borkent
8bcb2ea0cc deps.clj: bump to 1.10.3.822 2021-04-10 09:51:36 +02:00
Michiel Borkent
53bd7cd0c0 [#782] rename 2021-04-09 17:40:01 +02:00
Michiel Borkent
322b30ad6f [#782] fix 2021-04-09 17:02:44 +02:00
Michiel Borkent
8add2d90b2 [#782] fix 2021-04-09 16:59:20 +02:00
Michiel Borkent
d968b96082 [#782] linux arm64 static 2021-04-09 16:56:26 +02:00
Michiel Borkent
076fa07b00 sci#558 2021-04-09 16:23:02 +02:00
Michiel Borkent
db85195991 sci#557 2021-04-08 21:20:24 +02:00
Andrea Richiardi
a0ace650f1
[#776] Use get-classpath when build an uberjar
It was previously using the classpath coming from the parameters/env. We need to use
cp/get-classpath for taking into consideration the classpath coming from bb.edn.
2021-04-07 10:21:09 +02:00
Michiel Borkent
8e30cd350e sci [skip ci] 2021-04-06 13:49:35 +02:00
Michiel Borkent
430cc6b187 news.md [skip ci] 2021-04-05 11:18:13 +02:00
Michiel Borkent
70fee2405c news.md [skip ci] 2021-04-05 11:16:32 +02:00
Michiel Borkent
8c6efbbb37 news.md [skip ci] 2021-04-05 11:14:42 +02:00
Michiel Borkent
bda38a384b news.md [skip ci] 2021-04-05 11:12:27 +02:00
Michiel Borkent
b8e95aeadc Version bump 2021-04-04 20:06:33 +02:00
Michiel Borkent
97ed35fb3e v0.3.2 2021-04-04 19:49:16 +02:00
Michiel Borkent
85dea47573 changelog [skip ci] 2021-04-04 16:48:39 +02:00
Michiel Borkent
1870e2729e
[#769] rewrite-clj support 2021-04-04 16:22:45 +02:00
Michiel Borkent
2aa8c88822 fix help text [skip ci] 2021-04-02 18:10:29 +02:00
Michiel Borkent
d25019aeaf sci: clean meta on nested map 2021-04-01 21:27:20 +02:00
Michiel Borkent
e898d1fea3 CHANGELOG [skip ci] 2021-03-30 19:29:24 +02:00
Michiel Borkent
bf4e4a0283 Version bump 2021-03-30 19:18:15 +02:00
Michiel Borkent
34a6960aad CHANGELOG [skip ci] 2021-03-30 18:12:53 +02:00
Michiel Borkent
95485ba8be CHANGELOG [skip ci] 2021-03-30 18:11:09 +02:00
Michiel Borkent
6a7baf2a90 v0.3.1 2021-03-30 18:06:56 +02:00
Michiel Borkent
02cecb259d help 2021-03-30 17:57:07 +02:00
Michiel Borkent
e95a10cf6b help 2021-03-30 11:41:12 +02:00
Michiel Borkent
c9826b9694 help 2021-03-30 11:32:30 +02:00
Michiel Borkent
6f133ed9f2 help 2021-03-30 11:31:58 +02:00
Michiel Borkent
093f9828f0 help 2021-03-30 11:29:46 +02:00
Michiel Borkent
69c1b65689 help 2021-03-30 11:27:23 +02:00
Michiel Borkent
4e667679a5 CHANGELOG [skip ci] 2021-03-29 23:57:13 +02:00
Michiel Borkent
86cb997def babashka.nrepl: fix arglists formatting 2021-03-29 10:05:52 +02:00
Michiel Borkent
76c7167d2b babashka.repl#30: info and lookup support 2021-03-28 23:42:03 +02:00
Michiel Borkent
c8e630ce75 babashka.repl#30: info and lookup support 2021-03-28 23:31:16 +02:00
Michiel Borkent
88c621c1ec sci: allow dynamic doc 2021-03-28 23:12:04 +02:00
Michiel Borkent
c1670e8670 Improve doc 2021-03-28 22:48:44 +02:00
Michiel Borkent
99f6cd6ed4 CHANGELOG [skip ci] 2021-03-28 20:57:15 +02:00
Michiel Borkent
66c0c8515f CHANGELOG [skip ci] 2021-03-28 20:56:28 +02:00
Michiel Borkent
f941b394f4 CHANGELOG [skip ci] 2021-03-28 20:52:48 +02:00
Michiel Borkent
642cea3e16 [#758] allow fully qualified symbol as --main opt [skip ci] 2021-03-28 17:38:57 +02:00
Michiel Borkent
722de8ec75 [#680] bb.edn [skip ci] 2021-03-28 17:38:22 +02:00
Michiel Borkent
40d34c27d7 help [skip ci] 2021-03-28 17:33:40 +02:00
Michiel Borkent
d71c3622ec
bb.edn: first iteration 2021-03-28 17:30:44 +02:00
Michiel Borkent
2bc935d3d8 deps.clj 2021-03-27 16:52:35 +01:00
Michiel Borkent
2c871dfd1d process [changelog] [skip ci] 2021-03-27 12:21:47 +01:00
Michiel Borkent
0ce64d83fb process: #40 2021-03-27 12:15:40 +01:00
Michiel Borkent
bfe139eacc add vars 2021-03-27 11:52:33 +01:00
Michiel Borkent
a026e1eeba process: #39 2021-03-27 11:33:34 +01:00
Joey Bloom
74ba198201
Update example notes app to use org.httpkit.server (#762) [skip ci] 2021-03-26 23:25:47 +01:00
Joey Bloom
1533a2d0b5
Fix cookie-parsing bug in the example note-taking app (#761) 2021-03-26 22:07:52 +01:00
Michiel Borkent
8936060d42 Upgrade deps.clj and fs 2021-03-22 20:32:47 +01:00
Michiel Borkent
ee3aae6316 sci readme [skip ci] 2021-03-22 17:27:06 +01:00
Michiel Borkent
ca056984ba [skip ci] 2021-03-21 10:53:04 +01:00
Grazfather
716d5ff94c
install: Use $download_url (#759)
We were only using this var in the echo, but it always said .zip, even
if we were using .tar.gz
2021-03-20 16:24:56 +01:00
Michiel Borkent
a8883bd5f2 clojure [skip ci] 2021-03-18 21:28:17 +01:00
Michiel Borkent
19b8e429bc sci#553: new kw-arg handling from clojure 1.11.0 2021-03-18 21:07:06 +01:00
Michiel Borkent
7652295d84 pods release v0.0.1 [skip ci] 2021-03-17 19:56:04 +01:00
Michiel Borkent
95c53a9e49 CHANGELOG [skip ci] 2021-03-15 23:23:34 +01:00
Michiel Borkent
8a22a11b8d README [skip ci] 2021-03-15 23:18:45 +01:00
Michiel Borkent
dc3da33749 Version bump 2021-03-15 23:16:39 +01:00
Michiel Borkent
be96692739 Fix aarch64 on CircleCI 2021-03-15 23:03:38 +01:00
Michiel Borkent
7e570bcfdd CHANGELOG [skip ci] 2021-03-15 22:59:36 +01:00
Michiel Borkent
7cf63245af v0.3.0 2021-03-15 22:55:17 +01:00
Michiel Borkent
0635e22810 v0.2.14 2021-03-15 22:51:23 +01:00
Michiel Borkent
ac2bc23365 Fix tests 2021-03-15 22:44:16 +01:00
Michiel Borkent
2d81c3a8e3 Add FileInputStream 2021-03-15 22:37:03 +01:00
Michiel Borkent
ede9ed3466 sci: :reload-all 2021-03-15 22:10:01 +01:00
Michiel Borkent
fbcfb9a118 Prepare install script [skip ci] 2021-03-15 21:46:03 +01:00
Michiel Borkent
2749eb7149 CHANGELOG [skip ci] 2021-03-15 17:24:15 +01:00
Michiel Borkent
126d2ff728 Fix release script 2021-03-15 17:21:17 +01:00
Michiel Borkent
6c8f9a1038 [#241] AArch64 linux binaries 2021-03-15 16:56:32 +01:00
Michiel Borkent
194fe2e2b2 CHANGELOG [skip ci] 2021-03-15 11:37:48 +01:00
Michiel Borkent
58532c76de Better fix for fs/copy 2021-03-15 11:37:18 +01:00
Michiel Borkent
14a1e83930 CHANGELOG [skip ci] 2021-03-14 22:16:14 +01:00
Michiel Borkent
e048b30d02 babashka.fs/copy-tree: create dir if needed 2021-03-14 22:15:43 +01:00
Michiel Borkent
ab674f8348 CHANGELOG [skip ci] 2021-03-14 22:02:47 +01:00
Michiel Borkent
4229cab9b4 Update version-clj tests 2021-03-14 21:04:55 +01:00
Michiel Borkent
db908004c7 Revert "Reduce size"
This reverts commit 1d3392e60e.
2021-03-14 18:43:06 +01:00
Michiel Borkent
1d3392e60e Reduce size 2021-03-14 18:34:12 +01:00
Michiel Borkent
aacbcc3602 Add java.util.regex.Matcher to increase compatibility with version-clj. 2021-03-14 17:38:04 +01:00
Michiel Borkent
d13f1295f1 CHANGELOG [skip ci] 2021-03-13 23:36:26 +01:00
Michiel Borkent
0737e951a0 fs: Windows updates 2021-03-13 23:35:35 +01:00
Michiel Borkent
0b332431d3 Fix proxy instance check 2021-03-13 18:08:36 +01:00
Michiel Borkent
c79d48cdde Fix proxy exception 2021-03-13 17:49:19 +01:00
Michiel Borkent
7262e1e709 note [skip ci] 2021-03-13 17:30:54 +01:00
Michiel Borkent
7c608452b5 clean [skip ci] 2021-03-13 17:30:08 +01:00
Michiel Borkent
a426cddd4a proxy + protocols 2021-03-13 17:25:24 +01:00
Michiel Borkent
c0e512e304 proxy 2021-03-13 17:04:35 +01:00
Wilker Lúcio
6a911fc54f
Augment proxy to fulfill custom maps interfaces (#755) 2021-03-13 16:37:51 +01:00
Michiel Borkent
ae047b5809 Support this in proxy 2021-03-13 14:59:44 +01:00
Michiel Borkent
a44f66e9a1 CHANGELOG [skip ci] 2021-03-13 12:51:34 +01:00
Michiel Borkent
ea88219ad6 Fix 2021-03-13 12:47:25 +01:00
Michiel Borkent
8551817724 Narrow scope of reify 2021-03-13 12:44:12 +01:00
Michiel Borkent
f58748ebbe Remove proxy-super 2021-03-13 11:18:53 +01:00
Michiel Borkent
5555ea4ede APersistentMap test 2021-03-12 20:31:58 +01:00
Michiel Borkent
fa92537bdf Preliminary proxy support 2021-03-12 14:47:18 +01:00
Michiel Borkent
6a47a4dc29 Preliminary proxy support 2021-03-12 14:47:03 +01:00
Michiel Borkent
02da9336c4 CHANGELOG [skip ci] 2021-03-12 11:00:11 +01:00
Michiel Borkent
04cd32b84b [#754] Fix interop with System/out 2021-03-12 10:57:43 +01:00
Michiel Borkent
686a72e1b4 CHANGELOG [skip ci] 2021-03-12 10:54:42 +01:00
Michiel Borkent
38c7bc1c17 [#667] Add test 2021-03-12 10:52:11 +01:00
Michiel Borkent
45faf1ec63
Add java.io.OutputStreamWriter and java.io.PrintStream 2021-03-12 10:24:29 +01:00
Grazfather
38d18acd4d
Update install to support future tar.gz releases (#752)
* Update install to support future tar.gz releases

* CI: Release as .tar.gz instead of .zip
2021-03-12 10:16:39 +01:00
Wilker Lúcio
39284ae707
Add IndexOutOfBoundsException and Map$Entry (#751)
* Add IndexOutOfBoundsException, IHashEq and Map$Entry

* Remove IHashEq interface
2021-03-10 23:21:35 +01:00
Toni Dahl
16e92fa581
Guess and add correct "Content-Type" headers for responses. (#750) [skip ci]
* A correct MIME type of a served file is guessed by file extension.
* For example, SVG images are now displayed correctly in a web browser.
2021-03-10 22:42:09 +01:00
Michiel Borkent
bb3e453f62 sci: add delay? 2021-03-10 22:41:12 +01:00
Michiel Borkent
e1408f2bfb Update examples [skip ci] 2021-03-09 10:58:27 +01:00
Michiel Borkent
6246e1e605 CHANGELOG [skip ci] 2021-03-09 09:49:39 +01:00
Michiel Borkent
20285cb677 CHANGELOG [skip ci] 2021-03-09 09:47:15 +01:00
Michiel Borkent
90d089e78b Version bump 2021-03-09 09:45:55 +01:00
Michiel Borkent
d69b8de80f v0.2.13 2021-03-09 09:33:57 +01:00
Michiel Borkent
333dc6bbf9 sci#546 2021-03-08 23:46:52 +01:00
Michiel Borkent
169f26e2b1 sci#546 2021-03-08 23:27:54 +01:00
Wilker Lúcio
2ad4d3342c
Map type extensions (#749) 2021-03-08 22:58:43 +01:00
Michiel Borkent
9e1cb2f9de babashka.curl#35 2021-03-08 22:21:38 +01:00
Michiel Borkent
515a78f979 CHANGELOG [skip ci] 2021-03-08 21:12:12 +01:00
Michiel Borkent
c6c1be0fa1 babashka.curl#35 2021-03-08 20:43:01 +01:00
Michiel Borkent
2d91171dd9 sci: master branch 2021-03-08 11:19:07 +01:00
Michiel Borkent
8235ec7afd CHANGELOG [skip ci] 2021-03-08 10:49:01 +01:00
Michiel Borkent
fcb2554ff3 CHANGELOG [skip ci] 2021-03-08 10:46:38 +01:00
Michiel Borkent
0d59c0f43b Reify improvements 2021-03-07 13:56:12 +01:00
Michiel Borkent
bc8739a57e sci: reify 2021-03-07 12:34:01 +01:00
Michiel Borkent
d72aa3158a sci#540: one reify to rule them all 2021-03-07 11:43:35 +01:00
Michiel Borkent
874593bae9 Add clojure.lang.Associative 2021-03-06 16:02:41 +01:00
Michiel Borkent
1391f028bf sci: update to new reify config 2021-03-06 11:17:39 +01:00
Michiel Borkent
0fae952d4d CHANGELOG [skip ci] 2021-03-06 11:12:08 +01:00
Michiel Borkent
ca7520b25d sci: allow combinations of classes and protocols in reify 2021-03-06 11:09:28 +01:00
Michiel Borkent
a3e1337111 NEWS [skip ci] 2021-03-05 14:30:40 +01:00
Michiel Borkent
63b7ed3dab Clean in first test step 2021-03-04 10:49:16 +01:00
Michiel Borkent
b81990cdee CHANGELOG [skip ci] 2021-03-04 10:38:34 +01:00
Michiel Borkent
45c2f23d42 babashka/fs#18 2021-03-03 23:38:08 +01:00
Michiel Borkent
7fc14aaf08 NEWS [skip ci] 2021-03-03 23:12:20 +01:00
Michiel Borkent
b3f90a81ce NEWS [skip ci] 2021-03-03 23:08:52 +01:00
Kamil Toman
bb3c95ea4e
Hint creating submodules using update --init in build.md [skip ci] (#745) 2021-03-03 13:49:14 +01:00
Michiel Borkent
7c380d0156 [skip ci] projects.md 2021-03-03 12:10:14 +01:00
Michiel Borkent
2eb27ae183 [skip ci] projects.md 2021-03-03 12:00:41 +01:00
Michiel Borkent
f335716d1d fs: add regular-file? 2021-03-01 23:54:47 +01:00
Michiel Borkent
f5d899bf6e Version bump 2021-03-01 12:28:40 +01:00
Michiel Borkent
2236203cbc v0.2.12 2021-03-01 12:18:38 +01:00
Michiel Borkent
19115df834 v0.2.12 2021-03-01 12:17:43 +01:00
Michiel Borkent
d0431b8bb6 [#741] Fix cyclic dep problem with doric lib 2021-03-01 12:17:04 +01:00
Michiel Borkent
0df893e081 CHANGELOG [skip ci] 2021-02-28 20:55:15 +01:00
Michiel Borkent
7c3ea37a00 Bump version again 2021-02-28 19:11:05 +01:00
Michiel Borkent
fbdbbcf1a9 Attempt to fix Docker 2021-02-28 18:54:17 +01:00
Michiel Borkent
9b705eeeea Version bump 2021-02-28 18:41:06 +01:00
Michiel Borkent
62207a101a v0.2.11 2021-02-28 18:28:35 +01:00
Michiel Borkent
937c2d1bd1 CHANGELOG [skip ci] 2021-02-28 18:27:26 +01:00
Michiel Borkent
f5e2e73638 v0.2.11 2021-02-28 18:25:50 +01:00
Michiel Borkent
e64dbc7691
Support reifying clojure.lang.IFn and clojure.lang.ILookup (#740) 2021-02-28 18:23:45 +01:00
Michiel Borkent
f59b0efab4 sci [skip ci] 2021-02-28 16:31:29 +01:00
Michiel Borkent
250b1e1c5f CHANGELOG [skip ci] 2021-02-28 10:50:09 +01:00
Michiel Borkent
8819e1dc46 tools.cli update to 1.0.206 2021-02-28 10:49:07 +01:00
Michiel Borkent
a5a0eb73d2 README [skip ci] 2021-02-27 21:38:41 +01:00
Michiel Borkent
94cd930d4f README [skip ci] 2021-02-27 21:18:11 +01:00
Michiel Borkent
5376acb80d CHANGELOG [skip ci] 2021-02-27 11:15:11 +01:00
Michiel Borkent
8733bcb795
Add classes for instance checks (#739) 2021-02-27 10:15:28 +01:00
Michiel Borkent
17694a328b CHANGELOG [skip ci] 2021-02-26 22:18:28 +01:00
Michiel Borkent
00e65f0416 [#738] upgrade to httpkit 2.5.3 2021-02-26 22:17:24 +01:00
Michiel Borkent
d31bcabeb2 Add force 2021-02-26 13:59:08 +01:00
Michiel Borkent
acc8972a40 sci: add force 2021-02-26 13:58:46 +01:00
Michiel Borkent
23704a7db6 sci: fix ns-unmap on referred var 2021-02-25 20:41:06 +01:00
Michiel Borkent
338fc2ac13 sci: fix instance on IAtom 2021-02-25 20:19:46 +01:00
Michiel Borkent
0b300c134a sci: add dissoc! 2021-02-25 14:51:01 +01:00
Michiel Borkent
d725499035 doc [skip ci] 2021-02-25 10:22:39 +01:00
Michiel Borkent
63c94fdd35 [skip ci] Add download_aliases.clj example 2021-02-25 10:19:53 +01:00
Michiel Borkent
dab1020622 [#736] Update link in nREPL server [skip ci] 2021-02-24 21:03:16 +01:00
Michiel Borkent
925271db01 [skip ci] feature template 2021-02-23 11:40:16 +01:00
Michiel Borkent
938ab9723b [skip ci] CHANGELOG 2021-02-21 21:35:40 +01:00
Michiel Borkent
97e933491c babashka/fs: add copy-link 2021-02-19 17:31:15 +01:00
Michiel Borkent
c143f9f716 Issue template 2021-02-18 12:45:24 +01:00
Michiel Borkent
abd551bb7d Issue template 2021-02-18 12:44:41 +01:00
Michiel Borkent
ac24efe5bd Simplify arg picking 2021-02-17 11:28:18 +01:00
Michiel Borkent
ae5943fc4b sci: pick arity independent of order 2021-02-17 10:40:23 +01:00
Michiel Borkent
9e7e0a28c2 sci: don't merge ex-data 2021-02-17 09:36:55 +01:00
Michiel Borkent
1736adb171 Use default print-right-margin 2021-02-15 14:09:43 +01:00
Michiel Borkent
9f9f04b626 [skip ci] news 2021-02-15 13:07:29 +01:00
alimak17
a5fbd80b06
Add concrete steps to install babashka on Windows. (#732) 2021-02-14 20:54:44 +01:00
Michiel Borkent
1f9ef4eab4 Sci: cyclic load deps improvement 2021-02-13 17:31:25 +01:00
Michiel Borkent
24fbe8a855 sci: cyclic load deps 2021-02-13 17:10:14 +01:00
Michiel Borkent
b61a65fb9e [skip ci] doc 2021-02-13 10:57:32 +01:00
Michiel Borkent
1dd20b0a0c Add failjure to libtests 2021-02-13 10:48:59 +01:00
Michiel Borkent
27198fe6bb babashka/babashka.nrepl#36 2021-02-12 14:53:56 +01:00
Michiel Borkent
e4a9660670 [#728] Update fs lib with split-paths 2021-02-10 10:07:28 +01:00
Michiel Borkent
2c2237ec4c Version bump 2021-02-09 20:49:42 +01:00
Michiel Borkent
8a562222e8 v0.2.10 2021-02-09 20:36:55 +01:00
Michiel Borkent
849b4a223c [skip ci] news 2021-02-09 11:34:28 +01:00
Michiel Borkent
1a3dc38d58 sci: prioritize referred var over current ns vars 2021-02-09 11:00:50 +01:00
Michiel Borkent
dd6d7624f2 [skip ci] doc 2021-02-08 19:47:13 +01:00
Michiel Borkent
6f95c82279 [skip ci] doc 2021-02-08 11:53:30 +01:00
Michiel Borkent
0e203e7bbb news [skip ci] 2021-02-07 20:22:51 +01:00
Michiel Borkent
368dfe2d83 doc [skip ci] 2021-02-07 18:00:39 +01:00
Michiel Borkent
b2a4e63e45 Version bump 2021-02-07 14:29:57 +01:00
Michiel Borkent
4cc4a7204d v0.2.9 2021-02-07 14:09:44 +01:00
Michiel Borkent
77daea7362
[#712] Upgrade to GraalVM 21.0.0 (#725) 2021-02-07 12:23:20 +01:00
Michiel Borkent
61ca2720fd fs 2021-02-07 11:17:57 +01:00
Michiel Borkent
304b242148 fs [skip ci] 2021-02-06 22:22:30 +01:00
Michiel Borkent
24032734e7 fs 2021-02-06 21:24:25 +01:00
Michiel Borkent
7cbcd4440a compile opts [skip ci] 2021-02-06 18:01:51 +01:00
Michiel Borkent
4daef2fbcc fs [skip ci] 2021-02-06 17:51:19 +01:00
Michiel Borkent
8326825494 dashboard [skip ci] 2021-02-06 16:32:27 +01:00
Michiel Borkent
4823b2d4e7 fs [skip ci] 2021-02-06 15:46:56 +01:00
Michiel Borkent
ba8b9e9f19 fs [skip ci] 2021-02-06 14:39:44 +01:00
Michiel Borkent
e7b1c2f0e5 [skip ci] fs 2021-02-06 14:13:15 +01:00
Michiel Borkent
52f2728735 fs update 2021-02-06 14:11:16 +01:00
Michiel Borkent
6c5f20f786 fs: fix delete-tree 2021-02-06 10:11:53 +01:00
Michiel Borkent
eb9c87b7fd CHANGELOG [skip ci] 2021-02-05 23:43:19 +01:00
Michiel Borkent
86fff7afa2 fs 2021-02-05 23:41:59 +01:00
Michiel Borkent
549c2166b4 fs 2021-02-05 23:29:23 +01:00
Michiel Borkent
6de95254e8 [skip ci] fs 2021-02-05 23:21:58 +01:00
Michiel Borkent
59cd1a76c5 fs 2021-02-05 11:41:54 +01:00
Michiel Borkent
d208a115fc [skip ci] changelog 2021-02-05 09:30:18 +01:00
Michiel Borkent
2d55ee8946 Bump submodules 2021-02-05 00:16:31 +01:00
Édipo Féderle
6351068f4a
Update README install command to work with Linux as well (#724) 2021-02-04 15:33:09 +01:00
Michiel Borkent
114e144c6c news [skip ci] 2021-02-04 10:55:07 +01:00
Michiel Borkent
9220b983c5 Fix gaka tests 2021-02-03 23:06:18 +01:00
Michiel Borkent
095dd0db99 sci 2021-02-03 22:47:57 +01:00
Michiel Borkent
a41eececfb sci 2021-02-03 17:17:24 +01:00
Michiel Borkent
2136c0a19b Add gaka lib tests 2021-02-03 14:50:58 +01:00
Michiel Borkent
d751976e30 [skip ci] news.md 2021-02-03 14:23:09 +01:00
Michiel Borkent
e1f21b044f [skip ci] news.md 2021-02-03 14:20:08 +01:00
Michiel Borkent
49bb63f0c0 sci 2021-02-03 14:02:11 +01:00
Michiel Borkent
79f8f92ef4 Move curl to normal deps [skip ci] 2021-02-02 23:10:05 +01:00
Michiel Borkent
6eaecc3df0 Bump sci 2021-02-02 22:51:23 +01:00
Michiel Borkent
44ed105432 sci issue 520: fix ns-publics 2021-02-02 12:36:06 +01:00
Michiel Borkent
8b9b132116 Add fs submodule 2021-01-31 20:19:43 +01:00
Michiel Borkent
23e12a11ee sci as local/root 2021-01-29 23:18:15 +01:00
Michiel Borkent
77a95cf778 Fix core.match test 2021-01-28 23:19:10 +01:00
Michiel Borkent
d81bcfcf76 fix sci 2021-01-28 20:11:27 +01:00
Michiel Borkent
b5c1b31cfc Bump yaml and httpkit deps 2021-01-28 19:53:34 +01:00
Michiel Borkent
e519d0ee36 [skip ci] minor 2021-01-27 21:42:08 +01:00
Michiel Borkent
ce26997d31 [skip ci] CHANGELOG 2021-01-27 21:04:44 +01:00
Michiel Borkent
34777e3d7a [#719] Fix error reporting in case of arity error 2021-01-27 20:56:46 +01:00
Michiel Borkent
16fff3736f [skip ci] Update portal example 2021-01-27 13:15:31 +01:00
Michiel Borkent
06123c78a8 [skip ci] Update portal example 2021-01-27 13:07:09 +01:00
Michiel Borkent
b95e826179 sci 2021-01-26 11:02:06 +01:00
Michiel Borkent
079f662e0c sci: minor 2021-01-25 16:11:01 +01:00
Michiel Borkent
47b973463a sci: shadow record field names 2021-01-25 16:03:42 +01:00
Michiel Borkent
51a1d92b97 [skip ci] CHANGELOG 2021-01-25 14:03:33 +01:00
Michiel Borkent
319f6ca4d2 [skip ci] doc 2021-01-25 13:41:58 +01:00
Michiel Borkent
a1b35bae8c [#718] Fix destructuring in protocol method of record 2021-01-25 11:06:19 +01:00
Michiel Borkent
11810916cc [skip ci] build.md 2021-01-24 23:34:22 +01:00
Michiel Borkent
a7bf3ccc41 [skip ci] WIP 2021-01-24 22:39:10 +01:00
Michiel Borkent
632cdea60a [skip ci] CHANGELOG 2021-01-24 22:34:33 +01:00
Michiel Borkent
fa47444c4e [skip ci] CHANGELOG 2021-01-24 22:05:26 +01:00
Michiel Borkent
3bda60d815 [skip ci] CHANGELOG 2021-01-24 22:04:57 +01:00
Michiel Borkent
66c732e0b6 Version bump 2021-01-24 22:03:22 +01:00
Michiel Borkent
d70fb04186 v0.2.8 2021-01-24 21:16:07 +01:00
Michiel Borkent
931fadabb2
[#487] Include clojure.test.check as preparation for clojure.spec 2021-01-24 21:07:07 +01:00
Michiel Borkent
c4bb42df3e
[#646] Add hiccup.core and hiccup2.core 2021-01-23 22:47:35 +01:00
Michiel Borkent
6dc6cbab12 Add clojure.lang.Ratio 2021-01-23 15:47:28 +01:00
Michiel Borkent
57497f850b [skip ci] Document feature flag 2021-01-23 14:04:21 +01:00
Michiel Borkent
497bfb01da
[#594] Include clojure.core.match 2021-01-23 14:02:00 +01:00
Michiel Borkent
0f97da2d9c Add IllegalArgumentException 2021-01-23 13:45:09 +01:00
Michiel Borkent
75ca9be7ce
sci: faster processing of colls 2021-01-23 11:30:31 +01:00
Michiel Borkent
a932ce3fa7 sci: prioritize current ns in syntax quote 2021-01-21 11:03:03 +01:00
Michiel Borkent
14c33625ec [skip ci] Changelog 2021-01-20 21:40:08 +01:00
Michiel Borkent
f46c844474 Version bump 2021-01-20 21:38:57 +01:00
Michiel Borkent
ccce015216 v0.2.7 2021-01-20 21:27:01 +01:00
Michiel Borkent
bd84a42d36 [skip ci] CHANGELOG 2021-01-20 21:25:57 +01:00
Michiel Borkent
bb4ef582d6 Add instance check for clojure.lang.Fn 2021-01-20 12:52:56 +01:00
Michiel Borkent
5305260fd4 rm classes [skip ci] 2021-01-20 00:30:26 +01:00
Michiel Borkent
c2938ebd0c Revert 2021-01-20 00:20:05 +01:00
Michiel Borkent
fd9c82050b Cut off more 2021-01-19 23:32:46 +01:00
Michiel Borkent
6efd927c67 Cut off more 2021-01-19 23:29:57 +01:00
Michiel Borkent
09fcd97b9d Cut off ObjectStreamClass 2021-01-19 23:24:23 +01:00
Michiel Borkent
55db949ca8 Also cut off on linux 2021-01-19 23:18:02 +01:00
Michiel Borkent
fecefc3f92 Note 2021-01-19 15:21:25 +01:00
Michiel Borkent
428b946f45 minor 2021-01-19 14:33:01 +01:00
Michiel Borkent
6a3594deeb core.match compat 2021-01-19 14:09:52 +01:00
Michiel Borkent
4c704da85b sci [skip ci] 2021-01-18 00:00:24 +01:00
Michiel Borkent
a7bdbdb8d0 sci [skip ci] 2021-01-17 23:55:50 +01:00
Michiel Borkent
888d743a51 [skip ci] 2021-01-17 23:50:22 +01:00
Michiel Borkent
1be2378e28 sci 2021-01-17 14:56:30 +01:00
Michiel Borkent
80b372e0b2 [#711] (.keySet {:a 1}) returns nil 2021-01-17 13:38:12 +01:00
Michiel Borkent
70292f2015
sci: resolve binding via ctx fn 2021-01-16 16:55:34 +01:00
Michiel Borkent
e039777935
sci: unroll more (#709) 2021-01-16 15:57:21 +01:00
Michiel Borkent
6b5850e92e babashka.curl: allow keyword as header name 2021-01-15 22:27:55 +01:00
Michiel Borkent
d8ac8756eb sci: unroll local binding calls 2021-01-15 19:51:48 +01:00
Michiel Borkent
280730cbac Doc environ [skip ci] 2021-01-15 13:10:17 +01:00
Michiel Borkent
73647b9f89 sci: minor 2021-01-14 16:28:30 +01:00
Michiel Borkent
e85ea4f013 Sci: fix needs-ctx fn 2021-01-14 14:49:56 +01:00
Michiel Borkent
f2b50e1f9d sci: unroll needs-ctx fns 2021-01-14 14:37:12 +01:00
Michiel Borkent
f4d6bebddd sci: unroll inlined fn calls 2021-01-14 11:28:43 +01:00
Michiel Borkent
8607fe64a1 sci: perf 2021-01-14 11:12:00 +01:00
Michiel Borkent
fd37e7ae36 sci: perf 2021-01-13 23:14:15 +01:00
Michiel Borkent
85e7988e08 sci: unroll recur 2021-01-13 22:14:01 +01:00
Michiel Borkent
693c6d90aa sci: unroll and and or 2021-01-13 13:18:29 +01:00
Michiel Borkent
2e025b0ee1 sci 2021-01-13 12:53:50 +01:00
Michiel Borkent
12a8e65078 sci: unroll do 2021-01-13 12:22:58 +01:00
Michiel Borkent
c6f2d36767 sci: minor perf 2021-01-13 10:59:43 +01:00
Michiel Borkent
f96fcc58b6 news [skip ci] 2021-01-11 14:57:58 +01:00
Michiel Borkent
bd241af705 CHANGELOG [skip ci] 2021-01-10 15:43:43 +01:00
Michiel Borkent
3d27677186 [#707] Add pp from clojure.pprint 2021-01-10 15:40:13 +01:00
Michiel Borkent
721e3a4fdb [#705] Tests cannot be defined conditionally 2021-01-10 13:24:22 +01:00
Michiel Borkent
ebb5adeafd sci: defrecord type improvements 2021-01-09 15:19:40 +01:00
Michiel Borkent
3f4e9b8283 news [skip ci] 2021-01-08 11:17:52 +01:00
Michiel Borkent
0f2ce84b42 news [skip ci] 2021-01-07 22:05:33 +01:00
Michiel Borkent
c135052a35 Document cljc.java-time [skip ci] 2021-01-04 12:20:30 +01:00
Michiel Borkent
075543d206 pod: minor 2021-01-03 18:32:41 +01:00
Rahul De
2314c82a1a
Revert "[#699] Test alpine builds"
This reverts commit f3deca41d7.
2021-01-03 15:57:30 +01:00
Rahul De
f3deca41d7
[#699] Test alpine builds 2021-01-03 15:47:00 +01:00
Rahul De
e05b6903ec
[#699] Remove redundant checks for snapshot, fix actions build 2021-01-03 14:53:52 +01:00
Rahul De
8b61d855a8
[#699] Build images only when non snapshot 2021-01-03 14:29:25 +01:00
Rahuλ Dé
7b1e9cbe62
[#699] Add alpine builds
* [#699] Add Dockerfile for alpine

* [#699] Add pod tests

* [#699] Add alpine image build

* [#699] Build images on CI

* [#699] Add actions

* [#699] Amend actions to the new flow
2021-01-03 14:18:34 +01:00
Michiel Borkent
cbe1210e62 [#695] Only build static image on non-SNAPSHOTs 2021-01-03 10:56:21 +01:00
Michiel Borkent
f4478769df [#695] Only build static image on non-SNAPSHOTs 2021-01-03 10:48:03 +01:00
Rahul De
6b6493c4d8
[#696] Use released zip as binary source 2021-01-02 17:43:33 +01:00
Rahul De
1f49e71964
[#696] Copy linux bin correctly into docker 2021-01-02 17:13:38 +01:00
Rahuλ Dé
922de495e1
[#696] Reuse linux binaries for docker builds
* Reuse linux binary in docker build

* Have a dedicated Dockerfile for CI

* Reuse linux binary in GH Actions

* Make docker action depend only on linux

* Run Actions only on master
2021-01-02 16:00:28 +01:00
Michiel Borkent
ee22efdb40
Carve 2021-01-02 15:03:06 +01:00
Michiel Borkent
4819a9b434 rm patreon [skip ci] 2021-01-01 12:02:07 +01:00
Michiel Borkent
bae7c8ad88 Test repo transfer (2) 2021-01-01 12:01:06 +01:00
Michiel Borkent
e3ee4d2119 sci 2021-01-01 11:33:39 +01:00
Michiel Borkent
e309b49e1b Rename 2021-01-01 11:26:31 +01:00
Michiel Borkent
bbf144fbce Test repo transfer 2021-01-01 11:13:37 +01:00
Michiel Borkent
b3942a2dde news [skip ci] 2020-12-31 21:54:17 +01:00
Michiel Borkent
25966e273f Add clj-commons/fs to projects [skip ci] 2020-12-29 23:54:45 +01:00
Michiel Borkent
e1f1fbdaff CHANGELOG [skip ci] 2020-12-29 16:15:16 +01:00
Michiel Borkent
647f0d46be CHANGELOG [skip ci] 2020-12-29 14:00:32 +01:00
Michiel Borkent
fa1421eb75 [babashka/pod-registry#4] Fix issue with unzipping file 2020-12-29 13:57:50 +01:00
Michiel Borkent
da30e30d7d Version bump 2020-12-29 13:07:15 +01:00
Michiel Borkent
3755b24601 CHANGELOG [skip ci] 2020-12-29 12:59:24 +01:00
Michiel Borkent
a194a2d720 v0.2.6 2020-12-29 12:57:04 +01:00
Michiel Borkent
b608277535 [#690] Pod resolver tests 2020-12-29 11:15:33 +01:00
Michiel Borkent
eb8b3f3aaf Babashka pods: registry 2020-12-29 10:35:20 +01:00
Michiel Borkent
10f6aa00a9 README [skip ci] 2020-12-27 16:33:57 +01:00
Michiel Borkent
6a89012660 doc [skip ci] 2020-12-27 16:10:17 +01:00
Michiel Borkent
ed2edc0d00 Changelog [skip ci] 2020-12-27 15:54:18 +01:00
Michiel Borkent
5e15150560 News [skip ci] 2020-12-27 14:36:39 +01:00
Michiel Borkent
b0be0db5af doc [skip ci] 2020-12-27 14:33:37 +01:00
Michiel Borkent
33cc3d0702
[#690] Download pods via pod-registry 2020-12-27 14:25:46 +01:00
Michiel Borkent
76096d3760 README [skip ci] 2020-12-26 21:54:10 +01:00
Eugen Stan
610763415d
Article about Passwordstore exporter w/ babashka (#691)
[skip ci]
2020-12-26 21:52:58 +01:00
Michiel Borkent
4c1a4fbbbc sci: minor 2020-12-25 20:14:57 +01:00
Michiel Borkent
4d686b8e5c sci: minor enhancement to def 2020-12-25 17:27:11 +01:00
Michiel Borkent
2c86f87c35 gitignore [skip ci] 2020-12-24 22:29:33 +01:00
Michiel Borkent
ad100cb4d4 sci 2020-12-24 21:48:26 +01:00
Michiel Borkent
c371e50a2b
Sci: get rid of end-line and end-col metadata 2020-12-24 16:22:09 +01:00
Michiel Borkent
19c497d6b8 Install script minor [skip ci] 2020-12-23 19:55:40 +01:00
Michiel Borkent
e520f4092d README [skip ci] 2020-12-23 19:35:15 +01:00
Michiel Borkent
85fde995f0 [#688] Add --download-dir to bb install script [skip ci] 2020-12-23 19:30:36 +01:00
Michiel Borkent
21e3e283c1 [#684] Auto-resolved map fix 2020-12-23 17:21:29 +01:00
Michiel Borkent
d55e972999
Sci: less meta (#686) 2020-12-23 16:07:58 +01:00
Michiel Borkent
41b6cfe0f7 News [skip ci] 2020-12-22 13:54:58 +01:00
Michiel Borkent
29fa0dd1df Edamame: handle whitespace after read-cond splice 2020-12-21 23:50:20 +01:00
Michiel Borkent
728e935973 fix test 2020-12-21 15:00:08 +01:00
Michiel Borkent
d1550794a3 sci: deref inlined vars 2020-12-21 14:48:22 +01:00
Michiel Borkent
697c5b6152 sci: rename error key 2020-12-20 23:25:03 +01:00
Michiel Borkent
00dd395f54 sci: letfn fix 2020-12-20 16:54:18 +01:00
Michiel Borkent
84834433c1 sci: add with-local-vars 2020-12-20 15:47:37 +01:00
Michiel Borkent
84932c6704 sci 2020-12-19 13:16:15 +01:00
Michiel Borkent
d5962419b0 sci: optimization for user-defined fns 2020-12-19 11:32:44 +01:00
Michiel Borkent
8c277bd10e sci 2020-12-18 18:37:41 +01:00
Michiel Borkent
3b60d2c6e2 sci 2020-12-18 18:23:17 +01:00
Michiel Borkent
e27b9a6410 sci 2020-12-18 18:05:15 +01:00
Michiel Borkent
4c4f7105e3 sci 2020-12-17 23:50:23 +01:00
Michiel Borkent
aefdd36868 [#682] Excluded clojure var in macro still gets resolved to in syntax-quote 2020-12-16 23:29:59 +01:00
Michiel Borkent
80dd1e99db sci: remove dead code 2020-12-16 17:23:16 +01:00
Michiel Borkent
391dec4a50 sci: optimization for if 2020-12-16 17:14:33 +01:00
Michiel Borkent
e88dc25709 sci: restructure internal ns 2020-12-16 13:03:35 +01:00
Michiel Borkent
663a2710dd sci: detect macro as val at analysis time 2020-12-14 23:22:23 +01:00
Michiel Borkent
98a53f8261 CHANGELOG [skip ci] 2020-12-13 21:10:09 +01:00
Michiel Borkent
f3d15b42aa CHANGELOG [skip ci] 2020-12-13 21:03:06 +01:00
Michiel Borkent
29414947f4 Version bump 2020-12-13 20:58:16 +01:00
Michiel Borkent
6323a47d62 CHANGELOG [skip ci] 2020-12-13 20:52:46 +01:00
Michiel Borkent
eee5d3218a CHANGELOG [skip ci] 2020-12-13 20:50:06 +01:00
Michiel Borkent
d6e5df659c v0.2.5 2020-12-13 20:48:13 +01:00
Michiel Borkent
7a8e8a1b9d CHANGELOG [skip ci] 2020-12-13 20:42:43 +01:00
Michiel Borkent
c3524d6156 CHANGELOG [skip ci] 2020-12-13 20:40:51 +01:00
Michiel Borkent
44d632718d Rename clojure to --clojure 2020-12-13 18:02:30 +01:00
Michiel Borkent
a95808bf9e [#677, #678] Correct namespace name 2020-12-13 15:56:24 +01:00
Michiel Borkent
7b8745806f
[#677, #678] babashka.deps add-deps + clojure + clojure subcommand 2020-12-13 11:41:20 +01:00
Michiel Borkent
af3128527a sci [skip ci] 2020-12-11 11:03:54 +01:00
Michael Salihi
83f16421c0
Add DigitalOcean util example [skip ci] (#673) 2020-12-08 15:54:10 +01:00
590 changed files with 60218 additions and 4285 deletions

6
.build/bb.edn Normal file
View file

@ -0,0 +1,6 @@
{:paths ["script"]
:deps {borkdude/gh-release-artifact
#_{:local/root "../gh-release-artifact"}
{:git/url "https://github.com/borkdude/gh-release-artifact"
:git/sha "4a9a74f0e50e897c45df8cc70684360eb30fce80"}}
:tasks {release-artifact babashka.release-artifact/release}}

4
.carve/ignore Normal file
View file

@ -0,0 +1,4 @@
babashka.impl.pipe-signal-handler/pipe-signal-received?
babashka.impl.pipe-signal-handler/handle-pipe!
babashka.impl.sigint-handler/handle-sigint!
babashka.impl.classes/generate-reflection-file

View file

@ -3,340 +3,38 @@
# Check https://circleci.com/docs/2.0/language-clojure/ for more details
#
version: 2.1
jobs:
jvm:
docker:
# specify the version you desire here
- image: circleci/clojure:lein-2.9.1
working_directory: ~/repo
environment:
LEIN_ROOT: "true"
BABASHKA_PLATFORM: linux # could be used in jar name
resource_class: large
steps:
- checkout
- run:
name: "Pull Submodules"
command: |
git submodule init
git submodule update
- restore_cache:
keys:
- v1-dependencies-{{ checksum "project.clj" }}-{{ checksum "deps.edn" }}
# fallback to using the latest cache if no exact match is found
- v1-dependencies-
- run:
name: Install Clojure
command: |
wget -nc https://download.clojure.org/install/linux-install-1.10.1.447.sh
chmod +x linux-install-1.10.1.447.sh
sudo ./linux-install-1.10.1.447.sh
- run:
name: Install lsof
command: |
sudo apt-get install lsof
- run:
name: Run JVM tests
command: |
export BABASHKA_FEATURE_JDBC=true
export BABASHKA_FEATURE_POSTGRESQL=true
script/test
script/run_lib_tests
# - run:
# name: Run as tools.deps dependency
# command: |
# .circleci/script/tools.deps
- run:
name: Run as lein command
command: |
.circleci/script/lein
- run:
name: Create uberjar
command: |
mkdir -p /tmp/release
script/uberjar
VERSION=$(cat resources/BABASHKA_VERSION)
cp target/babashka-$VERSION-standalone.jar /tmp/release/babashka-$VERSION-standalone.jar
- store_artifacts:
path: /tmp/release
destination: release
- save_cache:
paths:
- ~/.m2
key: v1-dependencies-{{ checksum "project.clj" }}-{{ checksum "deps.edn" }}
linux:
docker:
- image: circleci/clojure:lein-2.9.1
working_directory: ~/repo
environment:
LEIN_ROOT: "true"
GRAALVM_HOME: /home/circleci/graalvm-ce-java11-20.3.0
BABASHKA_PLATFORM: linux # used in release script
BABASHKA_TEST_ENV: native
BABASHKA_XMX: "-J-Xmx6500m"
resource_class: large
steps:
- checkout
- run:
name: "Pull Submodules"
command: |
git submodule init
git submodule update
- restore_cache:
keys:
- linux-{{ checksum "project.clj" }}-{{ checksum ".circleci/config.yml" }}
- run:
name: Install Clojure
command: |
wget https://download.clojure.org/install/linux-install-1.10.1.447.sh
chmod +x linux-install-1.10.1.447.sh
sudo ./linux-install-1.10.1.447.sh
- run:
name: Install lsof
command: |
sudo apt-get install lsof
- run:
name: Install native dev tools
command: |
sudo apt-get update
sudo apt-get -y install gcc g++ zlib1g-dev
- run:
name: Download GraalVM
command: |
cd ~
if ! [ -d graalvm-ce-java11-20.3.0 ]; then
curl -O -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/graalvm-ce-java11-linux-amd64-20.3.0.tar.gz
tar xzf graalvm-ce-java11-linux-amd64-20.3.0.tar.gz
fi
- run:
name: Build binary
command: |
script/uberjar
script/compile
no_output_timeout: 30m
- run:
name: Run tests
command: |
script/test
script/run_lib_tests
- run:
name: Release
command: |
.circleci/script/release
- save_cache:
paths:
- ~/.m2
- ~/graalvm-ce-java11-20.3.0
key: linux-{{ checksum "project.clj" }}-{{ checksum ".circleci/config.yml" }}
- store_artifacts:
path: /tmp/release
destination: release
- run:
name: Publish artifact link to Slack
command: |
./bb .circleci/script/publish_artifact.clj
linux-static:
docker:
- image: circleci/clojure:lein-2.9.1
working_directory: ~/repo
environment:
LEIN_ROOT: "true"
GRAALVM_HOME: /home/circleci/graalvm-ce-java11-20.3.0
BABASHKA_PLATFORM: linux-static # used in release script
BABASHKA_TEST_ENV: native
BABASHKA_STATIC: true
BABASHKA_XMX: "-J-Xmx6500m"
resource_class: large
steps:
- checkout
- run:
name: "Pull Submodules"
command: |
git submodule init
git submodule update
- restore_cache:
keys:
- linux-{{ checksum "project.clj" }}-{{ checksum ".circleci/config.yml" }}
- run:
name: Install Clojure
command: |
wget https://download.clojure.org/install/linux-install-1.10.1.447.sh
chmod +x linux-install-1.10.1.447.sh
sudo ./linux-install-1.10.1.447.sh
- run:
name: Install lsof
command: |
sudo apt-get install lsof
- run:
name: Install native dev tools
command: |
sudo apt-get update
sudo apt-get -y install gcc g++ zlib1g-dev
- run:
name: Download GraalVM
command: |
cd ~
if ! [ -d graalvm-ce-java11-20.3.0 ]; then
curl -O -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/graalvm-ce-java11-linux-amd64-20.3.0.tar.gz
tar xzf graalvm-ce-java11-linux-amd64-20.3.0.tar.gz
fi
- run:
name: Build binary
command: |
script/uberjar
script/compile
no_output_timeout: 30m
- run:
name: Run tests
command: |
script/test
script/run_lib_tests
- run:
name: Release
command: |
.circleci/script/release
- save_cache:
paths:
- ~/.m2
- ~/graalvm-ce-java11-20.3.0
key: linux-{{ checksum "project.clj" }}-{{ checksum ".circleci/config.yml" }}
- store_artifacts:
path: /tmp/release
destination: release
- run:
name: Publish artifact link to Slack
command: |
./bb .circleci/script/publish_artifact.clj
mac:
macos:
xcode: "12.0.0"
environment:
MACOSX_DEPLOYMENT_TARGET: 10.13 # 10.12 is EOL
GRAALVM_HOME: /Users/distiller/graalvm-ce-java11-20.3.0/Contents/Home
BABASHKA_PLATFORM: macos # used in release script
BABASHKA_TEST_ENV: native
BABASHKA_XMX: "-J-Xmx6500m"
resource_class: large
steps:
- checkout
- run:
name: "Pull Submodules"
command: |
git submodule init
git submodule update
- restore_cache:
keys:
- mac-{{ checksum "project.clj" }}-{{ checksum ".circleci/config.yml" }}
- run:
name: Install Clojure
command: |
script/install-clojure /usr/local
- run:
name: Install Leiningen
command: |
script/install-leiningen
- run:
name: Download GraalVM
command: |
cd ~
ls -la
if ! [ -d graalvm-ce-java11-20.3.0 ]; then
curl -O -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/graalvm-ce-java11-darwin-amd64-20.3.0.tar.gz
tar xzf graalvm-ce-java11-darwin-amd64-20.3.0.tar.gz
fi
- run:
name: Build binary
command: |
export PATH=$GRAALVM_HOME/bin:$PATH
script/uberjar
script/compile
no_output_timeout: 30m
- run:
name: Run tests
command: |
export PATH=$GRAALVM_HOME/bin:$PATH
script/test
script/run_lib_tests
- run:
name: Release
command: |
.circleci/script/release
- save_cache:
paths:
- ~/.m2
- ~/graalvm-ce-java11-20.3.0
key: mac-{{ checksum "project.clj" }}-{{ checksum ".circleci/config.yml" }}
- store_artifacts:
path: /tmp/release
destination: release
- run:
name: Publish artifact link to Slack
command: |
./bb .circleci/script/publish_artifact.clj
deploy:
resource_class: large
docker:
- image: circleci/clojure:lein-2.9.1
working_directory: ~/repo
environment:
LEIN_ROOT: "true"
steps:
- checkout
- run:
name: "Pull Submodules"
command: |
git submodule init
git submodule update
- restore_cache:
keys:
- v1-dependencies-{{ checksum "project.clj" }}
# fallback to using the latest cache if no exact match is found
- v1-dependencies-
- run: .circleci/script/deploy
- save_cache:
paths:
- ~/.m2
key: v1-dependencies-{{ checksum "project.clj" }}
docker:
resource_class: large
docker:
- image: circleci/buildpack-deps:stretch
steps:
- checkout
- run:
name: "Pull Submodules"
command: |
git submodule init
git submodule update
- setup_remote_docker:
version: 19.03.12
- run:
name: Build Docker image
command: .circleci/script/docker
# this allows you to use CircleCI's dynamic configuration feature
setup: true
# the continuation orb is required in order to use dynamic configuration
orbs:
continuation: circleci/continuation@0.1.2
# our defined job, and its steps
jobs:
setup:
docker:
- image: cimg/clojure:1.11.1
steps:
- checkout
- run:
name: Bootstrap Babashka
command: |
curl -sLO https://raw.githubusercontent.com/babashka/babashka/master/install
sudo bash install --dir /tmp
- run:
name: Rename bb binary
command: mv /tmp/bb /tmp/bbb
- run:
name: Generate config
command: |
/tmp/bbb .circleci/script/gen_ci.clj > generated_config.yml
- continuation/continue:
configuration_path: generated_config.yml
# our single workflow, that triggers the setup job defined above
workflows:
version: 2
ci:
setup:
jobs:
- jvm
- linux
- linux-static
- mac
- deploy:
filters:
branches:
only: master
requires:
- jvm
- linux
- linux-static
- mac
- docker:
filters:
branches:
only: master
requires:
- jvm
- linux
- linux-static
- mac
- setup

View file

@ -1,34 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
image_name="borkdude/babashka"
image_tag=$(cat resources/BABASHKA_VERSION)
latest_tag="latest"
if [[ $image_tag =~ SNAPSHOT$ ]]; then
echo "This is a snapshot version"
snapshot="true"
else
echo "This is a non-snapshot version"
snapshot="false"
fi
if [ -z "$CIRCLE_PULL_REQUEST" ] && [ "$CIRCLE_BRANCH" = "master" ]; then
echo "Building Docker image $image_name:$image_tag"
echo "$DOCKERHUB_PASS" | docker login -u "$DOCKERHUB_USER" --password-stdin
docker build -t "$image_name" --build-arg BABASHKA_XMX="-J-Xmx6300m" .
docker tag "$image_name:$latest_tag" "$image_name:$image_tag"
# we only update latest when it's not a SNAPSHOT version
if [ "false" = "$snapshot" ]; then
echo "Pushing image $image_name:$latest_tag"
docker push "$image_name:$latest_tag"
fi
# we update the version tag, even if it's a SNAPSHOT version
echo "Pushing image $image_name:$image_tag"
docker push "$image_name:$image_tag"
else
echo "Not publishing Docker image"
fi
exit 0;

125
.circleci/script/docker.clj Normal file
View file

@ -0,0 +1,125 @@
(require '[babashka.fs :as fs]
'[babashka.process :as proc]
'[clojure.string :as str])
(import '[java.time Instant])
(defn read-env
([k]
(read-env k nil))
([k default]
(or (System/getenv k)
default)))
(def image-name "babashka/babashka")
(def ghcr-image-name "ghcr.io/babashka/babashka")
(def image-tag (str/trim (slurp "resources/BABASHKA_VERSION")))
(def latest-tag "latest")
(def platforms (read-env "PLATFORMS" "linux/amd64"))
(def circle-repository-url (read-env "CIRCLE_REPOSITORY_URL"))
(def label-args
["--label" "'org.opencontainers.image.description=Native, fast starting Clojure interpreter for scripting'"
"--label" "org.opencontainers.image.title=Babashka"
"--label" (str "org.opencontainers.image.created=" (Instant/now))
"--label" (str "org.opencontainers.image.url=" circle-repository-url)
"--label" (str "org.opencontainers.image.documentation=" circle-repository-url)
"--label" (str "org.opencontainers.image.source=" circle-repository-url)
"--label" (str "org.opencontainers.image.revision=" (read-env "CIRCLE_SHA1"))
"--label"
(format "org.opencontainers.image.ref.name=%s:%s"
(read-env "CIRCLE_TAG")
(read-env "CIRCLE_BRANCH"))
"--label" (str "org.opencontainers.image.version=" image-tag)])
(def snapshot? (str/includes? image-tag "SNAPSHOT"))
(defn exec
[cmd]
(-> cmd
(proc/process {:out :inherit :err :inherit})
(proc/check)))
(defn docker-login
[username password]
(exec ["docker" "login" "-u" username "-p" password]))
(defn docker-login-ghcr
[username password]
(exec ["docker" "login" "ghcr.io" "-u" username "-p" password]))
;; TODO: Remove this when Dockerhub goes off
(defn build-push
[image-tag platform docker-file]
(println (format "Building and pushing %s Docker image(s) %s:%s"
platform
image-name
image-tag))
(let [base-cmd ["docker" "buildx" "build"
"-t" (str image-name ":" image-tag)
"--platform" platform
"--progress" "plain"
"--push"
"-f" docker-file]]
(exec (concat base-cmd label-args ["."]))))
(defn build-push-ghcr
[image-tag platform docker-file]
(println (format "Building and pushing %s Docker image(s) %s:%s to GHCR"
platform
ghcr-image-name
image-tag))
(let [base-cmd ["docker" "buildx" "build"
"-t" (str ghcr-image-name ":" image-tag)
"--platform" platform
"--progress" "plain"
"--push"
"-f" docker-file]]
(exec (concat base-cmd label-args ["."]))))
(defn build-push-images
[]
(doseq [platform (str/split platforms #",")]
(let [tarball-platform (str/replace platform #"\/" "-")
tarball-platform (if (= "linux-arm64" tarball-platform)
"linux-aarch64-static"
tarball-platform)
tarball-path (format "/tmp/release/babashka-%s-%s.tar.gz"
image-tag
tarball-platform)]
(fs/create-dirs platform)
(exec ["tar" "zxvf" tarball-path "-C" platform])
; this overwrites, but this is to work around having built the uberjar/metabom multiple times
(fs/copy (format "/tmp/release/%s-metabom.jar" tarball-platform) "metabom.jar" {:replace-existing true})))
(build-push image-tag platforms "Dockerfile.ci")
(build-push-ghcr image-tag platforms "Dockerfile.ci")
(when-not snapshot?
(build-push latest-tag platforms "Dockerfile.ci")
(build-push-ghcr latest-tag platforms "Dockerfile.ci")))
(defn build-push-alpine-images
"Build alpine image for linux-amd64 only (no upstream arm64 support yet)"
[]
(exec ["tar" "zxvf" (str "/tmp/release/babashka-" image-tag "-linux-amd64-static.tar.gz")])
(build-push (str image-tag "-alpine") "linux/amd64" "Dockerfile.alpine")
(build-push-ghcr (str image-tag "-alpine") "linux/amd64" "Dockerfile.alpine")
(when-not snapshot?
(build-push "alpine" "linux/amd64" "Dockerfile.alpine")
(build-push-ghcr "alpine" "linux/amd64" "Dockerfile.alpine")))
(when (= *file* (System/getProperty "babashka.file"))
(if (and (nil? (read-env "CIRCLE_PULL_REQUEST"))
(= "master" (read-env "CIRCLE_BRANCH")))
(do
(if snapshot?
(println "This is a snapshot version")
(println "This is a non-snapshot version"))
(docker-login (read-env "DOCKERHUB_USER") (read-env "DOCKERHUB_PASS"))
(docker-login-ghcr (read-env "CONTAINER_REGISTRY_USER") (read-env "BB_GHCR_TOKEN"))
(build-push-images)
(build-push-alpine-images))
(println "Not publishing docker image(s).")))

281
.circleci/script/gen_ci.clj Normal file
View file

@ -0,0 +1,281 @@
(ns gen-ci
(:require
[babashka.tasks :as tasks]
[clj-yaml.core :as yaml]
[clojure.string :as str]
[flatland.ordered.map :refer [ordered-map]]))
(def graalvm-version "24")
(defn run
([cmd-name cmd]
(run cmd-name cmd nil))
([cmd-name cmd no-output-timeout]
(let [base {:run {:name cmd-name
:command cmd}}]
(if no-output-timeout
(assoc-in base [:run :no_output_timeout] no-output-timeout)
base))))
(defn gen-steps
[shorted? steps]
(if shorted?
[(run "Shorted" "echo 'Skipping Run'")]
steps))
(defn gen-job
[shorted? conf]
(if shorted?
(-> conf
(dissoc :machine :macos)
(assoc :resource_class "small" :docker [{:image "ubuntu:latest"}]))
conf))
(defn pull-submodules
[]
(run "Pull Submodules" "git submodule init\ngit submodule update"))
(defn deploy
[shorted?]
(gen-job shorted?
(ordered-map
:resource_class "large"
:docker [{:image "circleci/clojure:lein-2.9.8"}]
:working_directory "~/repo"
:environment {:LEIN_ROOT "true"}
:steps (gen-steps
shorted?
[:checkout
(pull-submodules)
{:restore_cache {:keys ["v1-dependencies-{{ checksum \"project.clj\" }}"
"v1-dependencies-"]}}
{:run ".circleci/script/deploy"}
{:save_cache {:paths ["~/.m2"]
:key "v1-dependencies-{{ checksum \"project.clj\" }}"}}]))))
(defn docker
[shorted?]
(gen-job
shorted?
(ordered-map
:machine {:image "ubuntu-2004:2024.05.1"}
:steps
(gen-steps
shorted?
[:checkout
(pull-submodules)
"setup-docker-buildx"
{:attach_workspace {:at "/tmp"}}
(run "Build uberjar" "script/uberjar")
{:run
{:name "Build Docker image"
:environment {:PLATFORMS "linux/amd64,linux/arm64"}
:command
"java -jar ./target/babashka-$(cat resources/BABASHKA_VERSION)-standalone.jar .circleci/script/docker.clj"}}]))))
(defn jvm
[shorted? graalvm-home]
(gen-job
shorted?
(ordered-map
:docker [{:image "circleci/clojure:openjdk-11-lein-2.9.8-bullseye"}]
:working_directory "~/repo"
:environment {:LEIN_ROOT "true"
:BABASHKA_PLATFORM "linux"
:GRAALVM_VERSION graalvm-version
:GRAALVM_HOME graalvm-home
:BABASHKA_TEST_ENV "jvm"
:BABASHKA_SHA (System/getenv "CIRCLE_SHA1")}
:resource_class "large"
:steps
(gen-steps
shorted?
[:checkout
(pull-submodules)
{:restore_cache {:keys ["v1-dependencies-{{ checksum \"project.clj\" }}-{{ checksum \"deps.edn\" }}"
"v1-dependencies-"]}}
(run "Install Clojure" "sudo script/install-clojure")
(run "Download GraalVM" "script/install-graalvm")
(run
"Run JVM tests"
"export BABASHKA_FEATURE_JDBC=true
export BABASHKA_FEATURE_POSTGRESQL=true
script/test\nscript/run_lib_tests")
(run
"Create uberjar"
"mkdir -p /tmp/release
script/uberjar
VERSION=$(cat resources/BABASHKA_VERSION)
jar=target/babashka-$VERSION-standalone.jar
cp $jar /tmp/release
export PATH=$GRAALVM_HOME/bin:$PATH
export JAVA_HOME=$GRAALVM_HOME
java -jar $jar script/reflection.clj
reflection=\"babashka-$VERSION-reflection.json\"
java -jar \"$jar\" --config .build/bb.edn --deps-root . release-artifact \"$jar\"
java -jar \"$jar\" --config .build/bb.edn --deps-root . release-artifact \"$reflection\"")
{:store_artifacts {:path "/tmp/release"
:destination "release"}}
{:save_cache {:paths ["~/.m2"]
:key "v1-dependencies-{{ checksum \"project.clj\" }}-{{ checksum \"deps.edn\" }}"}}]))))
(defn unix
[shorted? static? musl? arch executor-conf resource-class graalvm-home platform]
(let [env {:LEIN_ROOT "true"
:GRAALVM_VERSION graalvm-version
:GRAALVM_HOME graalvm-home
:BABASHKA_PLATFORM (if (= "mac" platform)
"macos"
platform)
:BABASHKA_TEST_ENV "native"
:BABASHKA_XMX "-J-Xmx6500m"
:BABASHKA_SHA (System/getenv "CIRCLE_SHA1")}
env (if (= "aarch64" arch)
(assoc env :BABASHKA_ARCH arch)
env)
env (if static?
(assoc env :BABASHKA_STATIC "true")
env)
env (if musl?
(assoc env :BABASHKA_MUSL "true")
env)
env (if (= "mac" platform)
(assoc env :MACOSX_DEPLOYMENT_TARGET 10.13)
env)
base-install-cmd "sudo apt-get update\nsudo apt-get -y install build-essential zlib1g-dev"
cache-key (format "%s-%s{{ checksum \"project.clj\" }}-{{ checksum \".circleci/config.yml\" }}"
platform
(if (= "aarch64" arch)
"aarch64-"
""))]
(gen-job shorted?
(merge
executor-conf
(ordered-map
:working_directory "~/repo"
:environment env
:resource_class resource-class
:steps (gen-steps shorted?
(filter some?
[:checkout
(when (contains? #{"linux" "linux-aarch64"} platform)
(run "Check max glibc version" "script/check_glibc.sh"))
{:attach_workspace {:at "/tmp"}}
(run "Pull Submodules" "git submodule init\ngit submodule update")
{:restore_cache
{:keys [cache-key]}}
(when (= "mac" platform)
(run "Install Rosetta" "sudo /usr/sbin/softwareupdate --install-rosetta --agree-to-license"))
(run "Install Clojure" "sudo script/install-clojure")
(when (= "mac" platform)
(run "Install Leiningen" "script/install-leiningen"))
(when (not= "mac" platform)
(run "Install native dev tools"
(if (and static? musl? (not= "aarch64" arch))
(str base-install-cmd "\nsudo -E script/setup-musl")
base-install-cmd)))
(run "Download GraalVM" "script/install-graalvm")
#_(run "Download iprof" "curl -sLO 'https://github.com/babashka/pgo-profiles/releases/download/2023.10.11/default.iprof'")
(run "Build binary" (if (= "aarch64" arch)
"script/uberjar\nscript/compile -H:PageSize=64K # --pgo=default.iprof"
"script/uberjar\nscript/compile # --pgo=default.iprof") "30m")
(run "Release" ".circleci/script/release")
{:persist_to_workspace {:root "/tmp"
:paths ["release"]}}
(run "Run tests" "script/test\nscript/run_lib_tests")
(run "Release + publish"
(str/join "\n" ["export BABASHKA_RELEASE=true"
".circleci/script/release"]))
{:save_cache
{:paths ["~/.m2" "~/graalvm"]
:key cache-key}}
{:store_artifacts {:path "/tmp/release"
:destination "release"}}
(run "Publish artifact link to Slack"
"./bb .circleci/script/publish_artifact.clj || true")])))))))
(defn make-config
[shorted?]
(let [docker-executor-conf {:docker [{:image "circleci/clojure:openjdk-11-lein-2.9.8-bullseye"}]}
machine-executor-conf {:machine {:image "ubuntu-2004:2024.05.1"}}
mac-executor-conf {:macos {:xcode "13.4.1"}}
linux-graalvm-home (str "/home/circleci/graalvm-" graalvm-version)
mac-graalvm-home (format "/Users/distiller/graalvm-%s/Contents/Home" graalvm-version)]
(ordered-map
:version 2.1
:commands
{:setup-docker-buildx
{:steps
[{:run
{:name "Create multi-platform capabale buildx builder"
:command
"docker run --privileged --rm tonistiigi/binfmt --install all\ndocker buildx create --name ci-builder --use"}}]}}
:jobs (ordered-map
:jvm (jvm shorted? linux-graalvm-home)
:linux (unix shorted? false false "amd64" docker-executor-conf "large" linux-graalvm-home "linux")
:linux-static
(unix shorted? true true "amd64" docker-executor-conf "large" linux-graalvm-home "linux")
:linux-aarch64-static
(unix shorted? true false "aarch64" machine-executor-conf "arm.large" linux-graalvm-home "linux")
:mac (unix shorted? false false "amd64" mac-executor-conf "macos.m1.medium.gen1" mac-graalvm-home "mac")
:deploy (deploy shorted?)
:docker (docker shorted?))
:workflows (ordered-map
:version 2
:ci {:jobs ["jvm"
"linux"
"linux-static"
"mac"
"linux-aarch64-static"
{:deploy {:filters {:branches {:only "master"}}
:requires ["jvm" "linux"]}}
{:docker {:filters {:branches {:only "master"}}
:requires ["linux" "linux-static" "linux-aarch64-static"]}}]}))))
(def skip-config
{:skip-if-only [#".*.md$"
#"^logo\/.*$"]})
(defn get-changes
[]
(-> (tasks/shell {:out :string} "git diff --name-only HEAD~1")
(:out)
(str/split-lines)))
(defn irrelevant-change?
[change regexes]
(some? (some #(re-matches % change) regexes)))
(defn relevant?
[change-set regexes]
(some? (some #(not (irrelevant-change? % regexes)) change-set)))
(defn main
[]
(let [{:keys [skip-if-only]} skip-config
changed-files (get-changes)
conf (make-config (not (relevant? changed-files skip-if-only)))]
(println (yaml/generate-string conf
:dumper-options
{:flow-style :block}))))
(when (= *file* (System/getProperty "babashka.file"))
(main))
(comment
(main)
(def regexes
[#".*.md$"
#".*.clj$" ; ignore clojure files
#"^logo\/.*$"])
(:out (tasks/shell {:out :string} "ls"))
(irrelevant-change? "src/file.png" regexes)
(re-matches #".*.clj$" "src/file.clj.dfff")
(re-matches #"^logo\/.*$" "logo/foo/bar.jpg")
(relevant? ["src/file.clj"] regexes))

View file

@ -3,7 +3,7 @@
'[clojure.java.io :as io]
'[clojure.string :as str])
(def channel "#babashka_circleci_builds")
(def channel "#babashka-circleci-builds")
#_(def channel "#_test")
(def babashka-version (str/trim (slurp (io/file "resources" "BABASHKA_VERSION"))))
(def slack-hook-url (System/getenv "SLACK_HOOK_URL"))
@ -16,19 +16,28 @@
(curl/post slack-hook-url {:headers {"content-type" "application/json"}
:body json}))))
(def release-text (format "[%s - %s@%s]: https://%s-201467090-gh.circle-artifacts.com/0/release/babashka-%s-%s-amd64.zip"
(System/getenv "BABASHKA_PLATFORM")
(def platform
(str (System/getenv "BABASHKA_PLATFORM")
"-"
(or (System/getenv "BABASHKA_ARCH") "amd64")
(when (= "true" (System/getenv "BABASHKA_STATIC"))
"-static")))
(def release-text (format "[%s - %s@%s - %s]: https://%s-201467090-gh.circle-artifacts.com/0/release/babashka-%s-%s.tar.gz"
platform
(System/getenv "CIRCLE_BRANCH")
(System/getenv "CIRCLE_SHA1")
(slurp (io/file "/tmp/bb_size/size"))
(System/getenv "CIRCLE_BUILD_NUM")
babashka-version
(System/getenv "BABASHKA_PLATFORM")))
platform
))
(slack! release-text)
(def binary-size-text
#_#_(def binary-size-text
(format "[%s - %s@%s] binary size: %s"
(System/getenv "BABASHKA_PLATFORM")
platform
(System/getenv "CIRCLE_BRANCH")
(System/getenv "CIRCLE_SHA1")
(slurp (io/file "/tmp/bb_size/size"))))

View file

@ -3,18 +3,37 @@
rm -rf /tmp/release
mkdir -p /tmp/release
cp bb /tmp/release
# cp src-bash/bbk /tmp/release
VERSION=$(cat resources/BABASHKA_VERSION)
## release binary as tar.gz archive
arch=${BABASHKA_ARCH:-amd64}
if [ "$BABASHKA_STATIC" = "true" ]; then
arch="$arch-static"
fi
# because circle won't allow the same file to be saved/restored in the same workspace concurrently
cp metabom.jar "/tmp/release/$BABASHKA_PLATFORM-$arch-metabom.jar"
cd /tmp/release
mkdir -p /tmp/bb_size
./bb '(spit "/tmp/bb_size/size" (.length (io/file "bb")))'
## release binary as zip archive
archive="babashka-$VERSION-$BABASHKA_PLATFORM-$arch.tar.gz"
zip "babashka-$VERSION-$BABASHKA_PLATFORM-amd64.zip" bb # bbk
tar zcvf "$archive" bb # bbk
cd -
if [ "$BABASHKA_RELEASE" = "true" ]; then
./bb --config .build/bb.edn --deps-root . release-artifact "/tmp/release/$archive"
fi
## cleanup
cd /tmp/release
rm bb # bbk

42
.cirrus.yml Normal file
View file

@ -0,0 +1,42 @@
macos_instance:
image: ghcr.io/cirruslabs/macos-monterey-base:latest
task:
skip: "changesIncludeOnly('logo/*', '**.md')"
env:
LEIN_ROOT: "true"
GRAALVM_VERSION: "24"
GRAALVM_HOME: ${HOME}/graalvm-${GRAALVM_VERSION}/Contents/Home
BABASHKA_PLATFORM: macos # used in release script
BABASHKA_ARCH: aarch64
BABASHKA_TEST_ENV: native
BABASHKA_XMX: "-J-Xmx6500m"
GITHUB_TOKEN: ENCRYPTED[d6ff8cdc392157f211c754fa0763875434d1bfde0c00a05e48ba9470003a76c14c9213adb80623f81e13f2f0fa8fbd57]
script: |
git submodule init
git submodule update
sudo script/install-clojure
sudo script/install-leiningen
script/install-graalvm
export PATH=$GRAALVM_HOME/bin:$PATH
export JAVA_HOME=$GRAALVM_HOME
sudo /usr/sbin/softwareupdate --install-rosetta --agree-to-license
java -version
export BABASHKA_SHA=$(git rev-parse HEAD)
script/uberjar
# curl -sLO 'https://github.com/babashka/pgo-profiles/releases/download/2023.10.11/default.iprof'
script/compile # --pgo=default.iprof
# script/test
# script/run_lib_tests
VERSION=$(cat resources/BABASHKA_VERSION)
arch=${BABASHKA_ARCH:-amd64}
archive="babashka-$VERSION-$BABASHKA_PLATFORM-$arch.tar.gz"
tar zcvf "$archive" bb
./bb --config .build/bb.edn --deps-root . release-artifact "$archive" || true
binaries_artifacts:
path: "babashka-*.tar.gz"

View file

@ -0,0 +1 @@
{:lint-as {babashka.fs/with-temp-dir clojure.core/let}}

View file

@ -0,0 +1 @@
{:hooks {:macroexpand {sci.core/copy-ns sci.core/copy-ns}}}

View file

@ -0,0 +1,9 @@
(ns sci.core)
(defmacro copy-ns
([ns-sym sci-ns]
`(copy-ns ~ns-sym ~sci-ns nil))
([ns-sym sci-ns opts]
`[(quote ~ns-sym)
~sci-ns
(quote ~opts)]))

View file

@ -1,7 +1,9 @@
{:lint-as {me.raynes.conch/let-programs clojure.core/let
{:config-paths ["babashka/sci"]
:lint-as {me.raynes.conch/let-programs clojure.core/let
babashka.impl.File/gen-wrapper-fn clojure.core/def
babashka.impl.Pattern/gen-wrapper-fn clojure.core/def
babashka.impl.File/gen-wrapper-fn-2 clojure.core/def
babashka.impl.Pattern/gen-wrapper-fn-2 clojure.core/def
babashka.impl.Pattern/gen-constants clojure.core/declare}
:linters {:unsorted-required-namespaces {:level :warning}}}
:linters {:unsorted-required-namespaces {:level :warning}}
:hooks {:analyze-call {clojure.core/requiring-resolve hooks.mine/req-resolve}}}

View file

@ -0,0 +1,5 @@
{:lint-as
{rewrite-clj.zip/subedit-> clojure.core/->
rewrite-clj.zip/subedit->> clojure.core/->>
rewrite-clj.zip/edit-> clojure.core/->
rewrite-clj.zip/edit->> clojure.core/->>}}

2
.dir-locals.el Normal file
View file

@ -0,0 +1,2 @@
((clojure-mode
(cider-clojure-cli-aliases . "test")))

View file

@ -12,7 +12,8 @@ test/
.gitmodules
appveyor.yml
CHANGES.md
deps.edn
Dockerfile
LICENSE
README.md
.cpcache/
target/

1
.github/FUNDING.yml vendored
View file

@ -1,7 +1,6 @@
# These are supported funding model platforms
github: borkdude # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: borkdude
open_collective: babashka
ko_fi: borkdude
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel

View file

@ -7,6 +7,9 @@ assignees: ''
---
[ To keep development of this project going, consider sponsoring. If you are
already a sponsor, thank you! ]
**version**
[ Please specify which version of babashka you're using. You can find this with `babashka --version`. The documentation on the master branch may be ahead of the most released version. ]

View file

@ -7,6 +7,9 @@ assignees: ''
---
[ To keep development of this project going, consider sponsoring. If you are
already a sponsor, thank you! ]
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

9
.github/pull_request_template.md vendored Normal file
View file

@ -0,0 +1,9 @@
Please answer the following questions and leave the below in as part of your PR.
- [ ] I have read the [developer documentation](https://github.com/babashka/babashka/blob/master/doc/dev.md).
- [ ] This PR corresponds to an [issue with a clear problem statement](https://github.com/babashka/babashka/blob/master/doc/dev.md#start-with-an-issue-before-writing-code).
- [ ] This PR contains a [test](https://github.com/babashka/babashka/blob/master/doc/dev.md#tests) to prevent against future regressions
- [ ] I have updated the [CHANGELOG.md](https://github.com/babashka/babashka/blob/master/CHANGELOG.md) file with a description of the addressed issue.

15
.github/script/docker vendored
View file

@ -2,7 +2,7 @@
set -eo pipefail
image_name="borkdude/babashka"
image_name="babashka/babashka"
image_tag=$(cat resources/BABASHKA_VERSION)
latest_tag="latest"
@ -19,16 +19,27 @@ if [ -z "$GITHUB_HEAD_REF" ] && [ "${GITHUB_REF##*/}" = "master" ]
then
echo "Building Docker image $image_name:$image_tag"
echo "$DOCKERHUB_PASS" | docker login -u "$DOCKERHUB_USER" --password-stdin
docker build -t "$image_name" --build-arg BABASHKA_XMX="-J-Xmx6300m" .
mv /tmp/release/bb .
docker build -t "$image_name" -f Dockerfile.ci .
docker tag "$image_name:$latest_tag" "$image_name:$image_tag"
if [[ $snapshot == "false" ]]; then
mv /tmp/release-static/bb .
docker build -t "$image_name:alpine" -f Dockerfile.alpine .
docker tag "$image_name:alpine" "$image_name:$image_tag-alpine"
fi
# we only update latest when it's not a SNAPSHOT version
if [ "false" = "$snapshot" ]; then
echo "Pushing image $image_name:$latest_tag"
docker push "$image_name:$latest_tag"
echo "Pushing image $image_name:alpine"
docker push "$image_name:alpine"
fi
# we update the version tag, even if it's a SNAPSHOT version
echo "Pushing image $image_name:$image_tag"
docker push "$image_name:$image_tag"
if [[ $snapshot == "false" ]]; then
docker push "$image_name:$image_tag-alpine"
fi
else
echo "Not publishing Docker image"
fi

99
.github/workflows/build-windows.yml vendored Normal file
View file

@ -0,0 +1,99 @@
name: build
on:
push:
paths-ignore:
- "**.md"
- "logo/**"
pull_request:
paths-ignore:
- "**.md"
- "logo/**"
# TODO: Add deploy if needed
jobs:
native:
if: "!contains(github.event.head_commit.message, 'skip ci')"
strategy:
matrix:
include:
- os: windows-2022
name: windows
static: false
runs-on: ${{ matrix.os }}
env:
LEIN_ROOT: "true"
GRAALVM_VERSION: "24"
BABASHKA_PLATFORM: ${{ matrix.name }} # used in release script
BABASHKA_TEST_ENV: native
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BABASHKA_SHA: ${{ github.sha }}
steps:
- name: Git checkout
uses: actions/checkout@v2
with:
fetch-depth: 1
submodules: 'true'
- name: Cache deps
uses: actions/cache@v4
id: cache-deps
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('project.clj') }}
restore-keys: ${{ runner.os }}-maven-
- name: Setup GraalVM
if: "matrix.static == false"
uses: graalvm/setup-graalvm@v1.3.3
with:
java-version: '24'
distribution: 'graalvm'
components: 'native-image'
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Install clojure tools
uses: DeLaGuardo/setup-clojure@13.2
with:
cli: latest
# lein: latest -- skipped because this uses some PS bullshit
- name: Babashka version
id: babashka-version
shell: bash
run: |
BABASHKA_VERSION=$(cat resources/BABASHKA_VERSION)
echo "##[set-output name=version;]${BABASHKA_VERSION}"
- name: Build
shell: cmd
run: |
powershell -Command "(New-Object Net.WebClient).DownloadFile('https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein.bat', 'lein.bat')"
call lein self-install
set GRAALVM_HOME=%JAVA_HOME%
call script/uberjar.bat
call script/compile.bat
echo Creating zip archive
set zip=babashka-%BABASHKA_VERSION%-windows-amd64.zip
jar -cMf %zip% bb.exe
bb --config .build/bb.edn --deps-root . release-artifact %zip%
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
path: bb.exe
name: babashka-${{ steps.babashka-version.outputs.version }}-${{ matrix.name }}-amd64
- name: Test binary and libs
shell: cmd
run: |
set BABASHKA_CLASSPATH=
set BABASHKA_TEST_ENV=native
call script/test.bat :windows
call script/run_lib_tests.bat

View file

@ -1,82 +1,76 @@
name: build
on: [push
, pull_request
]
on:
push:
paths-ignore:
- "**.md"
- "logo/**"
branches:
- master
pull_request:
paths-ignore:
- "**.md"
- "logo/**"
branches:
- master
# TODO: Add deploy if needed
jobs:
scratch:
if: "!contains(github.event.head_commit.message, 'skip ci')"
runs-on: ubuntu-18.04
steps:
- name: Git checkout
uses: actions/checkout@v1
with:
fetch-depth: 1
submodules: 'true'
- name: Scratch
run: |
echo "Scratch"
jvm:
if: "!contains(github.event.head_commit.message, 'skip ci')"
# ubuntu 18.04 comes with lein + java8 installed
runs-on: ubuntu-18.04
if: ${{ false }} # Disabled
# if: "!contains(github.event.head_commit.message, 'skip ci')"
runs-on: ubuntu-latest
env:
LEIN_ROOT: "true"
BABASHKA_PLATFORM: linux # could be used in jar name
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BABASHKA_SHA: ${{ github.sha }}
steps:
- name: Git checkout
uses: actions/checkout@v1
uses: actions/checkout@v2
with:
fetch-depth: 1
submodules: 'true'
- name: Cache deps
uses: actions/cache@v1
uses: actions/cache@v4
id: cache-deps
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('project.clj') }}
restore-keys: |
${{ runner.os }}-maven-
restore-keys: ${{ runner.os }}-maven-
- name: Cache GraalVM
uses: actions/cache@v1
id: cache-graalvm
- name: Prepare java
uses: actions/setup-java@v2
with:
path: ~/graalvm-ce-java11-20.3.0
key: ${{ runner.os }}-graalvm-20.3.0
restore-keys: |
${{ runner.os }}-graalvm-20.3.0
distribution: 'adopt-hotspot'
java-version: '19'
- name: Download GraalVM
run: |
cd ~
if ! [ -d graalvm-ce-java11-20.3.0 ]; then
curl -O -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/graalvm-ce-java11-linux-amd64-20.3.0.tar.gz
tar xzf graalvm-ce-java11-linux-amd64-20.3.0.tar.gz
fi
- name: Fetch deps
if: steps.cache-deps.outputs.cache-hit != 'true'
run: |
lein deps
- name: Install clojure tools
uses: DeLaGuardo/setup-clojure@5.0
with:
cli: 1.10.3.1040
lein: 2.9.8
- name: Run tests
env:
BABASHKA_FEATURE_JDBC: "true"
BABASHKA_FEATURE_POSTGRESQL: "true"
run: |
export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.3.0"
script/test
- name: Test libraries
run: |
export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.3.0"
sudo script/install-clojure
script/run_lib_tests
- name: Build uberjar
run: |
export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.3.0"
mkdir -p /tmp/release
script/uberjar
VERSION=$(cat resources/BABASHKA_VERSION)
jar=target/babashka-$VERSION-standalone.jar
cp $jar /tmp/release
java -jar $jar script/reflection.clj
reflection="babashka-$VERSION-reflection.json"
java -jar "$jar" --config .build/bb.edn --deps-root . release-artifact "$jar"
java -jar "$jar" --config .build/bb.edn --deps-root . release-artifact "$reflection"
- name: Babashka version
id: babashka-version
@ -84,66 +78,79 @@ jobs:
BABASHKA_VERSION=$(cat resources/BABASHKA_VERSION)
echo "##[set-output name=version;]${BABASHKA_VERSION}"
- name: Reflection artifact
run: |
cp reflection.json babashka-${{ steps.babashka-version.outputs.version }}-reflection.json
- uses: actions/upload-artifact@v1
- uses: actions/upload-artifact@v4
with:
name: jar
name: babashka-${{ steps.babashka-version.outputs.version }}-standalone.jar
path: target/babashka-${{ steps.babashka-version.outputs.version }}-standalone.jar
- uses: actions/upload-artifact@v1
with:
name: reflection.json
path: babashka-${{ steps.babashka-version.outputs.version }}-reflection.json
linux:
native:
if: "!contains(github.event.head_commit.message, 'skip ci')"
needs: [jvm]
runs-on: ubuntu-18.04
strategy:
matrix:
include:
- os: macos-13
name: macos
static: false
#- os: ubuntu-latest
# name: linux
# static: false
#- os: ubuntu-latest
# name: linux
# static: true
runs-on: ${{ matrix.os }}
env:
LEIN_ROOT: "true"
GRAALVM_VERSION: "24"
BABASHKA_PLATFORM: ${{ matrix.name }} # used in release script
BABASHKA_TEST_ENV: native
BABASHKA_XMX: "-J-Xmx6500m"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BABASHKA_SHA: ${{ github.sha }}
steps:
- name: Git checkout
uses: actions/checkout@v1
uses: actions/checkout@v2
with:
fetch-depth: 1
submodules: 'true'
- uses: actions/download-artifact@v1
with:
name: jar
path: .
- uses: actions/download-artifact@v1
with:
name: reflection.json
path: .
- name: Cache deps
uses: actions/cache@v1
uses: actions/cache@v4
id: cache-deps
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('project.clj') }}
restore-keys: |
${{ runner.os }}-maven-
restore-keys: ${{ runner.os }}-maven-
- name: Cache GraalVM
uses: actions/cache@v1
id: cache-graalvm
- name: Setup GraalVM
if: "matrix.static == false"
uses: graalvm/setup-graalvm@v1
with:
path: ~/graalvm-ce-java11-20.3.0
key: ${{ runner.os }}-graalvm-20.3.0
restore-keys: |
${{ runner.os }}-graalvm-20.3.0
java-version: '24'
distribution: 'graalvm'
components: 'native-image'
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Download GraalVM
- name: Setup GraalVM+musl
if: "matrix.static == true"
uses: graalvm/setup-graalvm@v1
with:
version: '24'
distribution: 'graalvm'
components: 'native-image'
native-image-musl: true
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Install clojure tools
uses: DeLaGuardo/setup-clojure@5.0
with:
cli: 1.10.3.1040
lein: 2.9.8
- name: Install native dev tools
if: matrix.os == 'ubuntu-latest'
run: |
cd ~
if ! [ -d graalvm-ce-java11-20.3.0 ]; then
curl -O -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/graalvm-ce-java11-linux-amd64-20.3.0.tar.gz
tar xzf graalvm-ce-java11-linux-amd64-20.3.0.tar.gz
fi
sudo apt-get update
sudo apt-get -y install build-essential zlib1g-dev
- name: Babashka version
id: babashka-version
@ -151,225 +158,85 @@ jobs:
BABASHKA_VERSION=$(cat resources/BABASHKA_VERSION)
echo "##[set-output name=version;]${BABASHKA_VERSION}"
- name: Build Linux native image
run: |
export BABASHKA_JAR=babashka-${{ steps.babashka-version.outputs.version }}-standalone.jar
export BABASHKA_XMX="-J-Xmx6g"
export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.3.0"
cp babashka-${{ steps.babashka-version.outputs.version }}-reflection.json reflection.json
script/compile
- name: Build uberjar
run: script/uberjar
- name: Test binary
run: |
export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.3.0"
BABASHKA_TEST_ENV=native script/test
- name: Build native image
if: "matrix.static == false"
run: script/compile
- name: Install clojure
run: |
sudo script/install-clojure /usr/local
- name: Test libraries
run: |
export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.3.0"
BABASHKA_TEST_ENV=native script/run_lib_tests
- uses: actions/upload-artifact@v1
with:
path: bb
name: babashka-${{ steps.babashka-version.outputs.version }}-linux-amd64.zip
linux-static:
if: "!contains(github.event.head_commit.message, 'skip ci')"
needs: [jvm]
runs-on: ubuntu-16.04
steps:
- name: Git checkout
uses: actions/checkout@v1
with:
fetch-depth: 1
submodules: 'true'
- uses: actions/download-artifact@v1
with:
name: jar
path: .
- uses: actions/download-artifact@v1
with:
name: reflection.json
path: .
- name: Cache deps
uses: actions/cache@v1
id: cache-deps
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('project.clj') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Cache GraalVM
uses: actions/cache@v1
id: cache-graalvm
with:
path: ~/graalvm-ce-java11-20.3.0
key: ${{ runner.os }}-graalvm-20.3.0
restore-keys: |
${{ runner.os }}-graalvm-20.3.0
- name: Download GraalVM
run: |
cd ~
if ! [ -d graalvm-ce-java11-20.3.0 ]; then
curl -O -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/graalvm-ce-java11-linux-amd64-20.3.0.tar.gz
tar xzf graalvm-ce-java11-linux-amd64-20.3.0.tar.gz
fi
- name: Babashka version
id: babashka-version
run: |
BABASHKA_VERSION=$(cat resources/BABASHKA_VERSION)
echo "##[set-output name=version;]${BABASHKA_VERSION}"
- name: Build Linux native image
run: |
export BABASHKA_JAR=babashka-${{ steps.babashka-version.outputs.version }}-standalone.jar
export BABASHKA_XMX="-J-Xmx6g"
export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.3.0"
export BABASHKA_STATIC=true
cp babashka-${{ steps.babashka-version.outputs.version }}-reflection.json reflection.json
script/compile
- name: Test binary
run: |
./bb '(+ 1 2 3)'
export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.3.0"
BABASHKA_TEST_ENV=native script/test
- name: Install clojure
run: |
sudo script/install-clojure
- name: Test libraries
run: |
export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.3.0"
BABASHKA_TEST_ENV=native script/run_lib_tests
- uses: actions/upload-artifact@v1
with:
path: bb
name: babashka-${{ steps.babashka-version.outputs.version }}-linux-static-amd64.zip
mac:
if: "!contains(github.event.head_commit.message, 'skip ci')"
needs: [jvm]
runs-on: macOS-latest
steps:
- name: Git checkout
uses: actions/checkout@v1
with:
fetch-depth: 1
submodules: 'true'
- uses: actions/download-artifact@v1
with:
name: jar
path: .
- uses: actions/download-artifact@v1
with:
name: reflection.json
path: .
- name: Cache GraalVM
uses: actions/cache@v1
id: cache-graalvm
with:
path: ~/graalvm-ce-java11-20.3.0
key: ${{ runner.os }}-graalvm-20.3.0
restore-keys: |
${{ runner.os }}-graalvm-20.3.0
- name: Download GraalVM
run: |
cd ~
if ! [ -d graalvm-ce-java11-20.3.0 ]; then
curl -O -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/graalvm-ce-java11-darwin-amd64-20.3.0.tar.gz
tar xzf graalvm-ce-java11-darwin-amd64-20.3.0.tar.gz
fi
- name: Babashka version
id: babashka-version
run: |
BABASHKA_VERSION=$(cat resources/BABASHKA_VERSION)
echo "##[set-output name=version;]${BABASHKA_VERSION}"
- name: Build macOS native image
run: |
export BABASHKA_JAR=babashka-${{ steps.babashka-version.outputs.version }}-standalone.jar
export BABASHKA_XMX="-J-Xmx6g"
export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.3.0/Contents/Home"
cp babashka-${{ steps.babashka-version.outputs.version }}-reflection.json reflection.json
script/compile
- name: Test binary
run: |
export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.3.0/Contents/Home"
sudo script/install-leiningen
BABASHKA_TEST_ENV=native script/test
- name: Test libraries
run: |
export GRAALVM_HOME="$HOME/graalvm-ce-java11-20.3.0/Contents/Home"
sudo script/install-clojure
BABASHKA_TEST_ENV=native script/run_lib_tests
- uses: actions/upload-artifact@v1
with:
path: bb
name: babashka-${{ steps.babashka-version.outputs.version }}-macos-amd64.zip
deploy:
if: "!contains(github.event.head_commit.message, 'skip ci') && github.event_name == 'push' && github.ref == 'refs/heads/master'"
needs: [jvm, linux, linux-static, mac]
runs-on: ubuntu-18.04
steps:
- name: Git checkout
uses: actions/checkout@v1
with:
fetch-depth: 1
submodules: 'true'
- name: Cache deps
uses: actions/cache@v1
id: cache-deps
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('project.clj') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Deploy
- name: Build static native image
if: "matrix.static == true"
env:
CLOJARS_USER: "${{ secrets.CLOJARS_USER }}"
CLOJARS_PASS: "${{ secrets.CLOJARS_PASS }}"
BABASHKA_STATIC: "true"
BABASHKA_MUSL: "true"
run: script/compile
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
path: bb
name: babashka-${{ steps.babashka-version.outputs.version }}-${{ matrix.name }}-amd64
- name: Upload static artifact
if: "matrix.static == true"
uses: actions/upload-artifact@v4
with:
path: bb
name: babashka-${{ steps.babashka-version.outputs.version }}-${{ matrix.name }}-static-amd64
- name: Test binary and libs
run: |
.github/script/deploy
script/test
script/run_lib_tests
- name: Release
run: .circleci/script/release
docker:
if: "!contains(github.event.head_commit.message, 'skip ci') && github.event_name == 'push' && github.ref == 'refs/heads/master'"
needs: [jvm, linux, linux-static, mac]
runs-on: ubuntu-18.04
if: ${{ false }} # Disabled
# if: "!contains(github.event.head_commit.message, 'skip ci') && github.event_name == 'push' && github.ref == 'refs/heads/master'"
needs:
- native
runs-on: ubuntu-latest
steps:
- name: Git checkout
uses: actions/checkout@v1
uses: actions/checkout@v2
with:
fetch-depth: 1
submodules: 'true'
- name: Babashka version
id: babashka-version
run: |
BABASHKA_VERSION=$(cat resources/BABASHKA_VERSION)
echo "##[set-output name=version;]${BABASHKA_VERSION}"
- name: Make release dir
run: mkdir -p /tmp/release
- name: Download linux binary
uses: actions/download-artifact@v4.1.7
with:
name: babashka-${{ steps.babashka-version.outputs.version }}-linux-amd64.zip
path: /tmp/release
- name: Download static linux binary
uses: actions/download-artifact@v4.1.7
with:
name: babashka-${{ steps.babashka-version.outputs.version }}-linux-static-amd64.zip
path: /tmp/release-static
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v2
- name: Build uberjar
run: script/uberjar
- name: Docker build
env:
DOCKERHUB_USER: "${{ secrets.DOCKERHUB_USER }}"
DOCKERHUB_PASS: "${{ secrets.DOCKERHUB_PASS }}"
run: |
.github/script/docker
PLATFORMS: linux/amd64,linux/arm64
run: java -jar ./target/babashka-$(cat resources/BABASHKA_VERSION)-standalone.jar .circleci/script/docker.clj

10
.gitignore vendored
View file

@ -16,7 +16,7 @@ pom.xml.asc
!test-resources/babashka/src_for_classpath_test/foo.jar
!test-resources/pom.xml
.cpcache
*reflection.json
*reflect-config.json
/tmp
/reports
*.dylib
@ -31,3 +31,11 @@ org_babashka*.h
/.calva
!test-resources/divide_by_zero.jar
.envrc
.lsp
bb.build_artifacts.txt
target
.nrepl-port
.DS_Store
.portal
default.iprof
scratch.clj

9
.gitmodules vendored
View file

@ -17,3 +17,12 @@
[submodule "pods"]
path = pods
url = https://github.com/babashka/pods
[submodule "deps.clj"]
path = deps.clj
url = https://github.com/borkdude/deps.clj
[submodule "fs"]
path = fs
url = https://github.com/babashka/fs
[submodule "babashka.core"]
path = babashka.core
url = https://github.com/babashka/babashka.core.git

File diff suppressed because it is too large Load diff

View file

@ -1,26 +1,41 @@
FROM clojure:lein-2.9.1 AS BASE
FROM clojure:openjdk-11-lein-2.9.6-bullseye AS BASE
ENV DEBIAN_FRONTEND=noninteractive
RUN apt update
RUN apt install --no-install-recommends -yy curl unzip build-essential zlib1g-dev
RUN apt install --no-install-recommends -yy build-essential zlib1g-dev
WORKDIR "/opt"
RUN curl -sLO https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/graalvm-ce-java11-linux-amd64-20.3.0.tar.gz
RUN tar -xzf graalvm-ce-java11-linux-amd64-20.3.0.tar.gz
ARG BABASHKA_XMX="-J-Xmx3g"
ENV GRAALVM_VERSION="24"
ARG TARGETARCH
# Do not set those directly, use TARGETARCH instead
ENV BABASHKA_ARCH=
ENV GRAALVM_ARCH=
RUN if [ "${TARGETARCH}" = "" ] || [ "${TARGETARCH}" = "amd64" ]; then \
export GRAALVM_ARCH=x64; export BABASHKA_ARCH=x86_64; \
elif [ "${TARGETARCH}" = "arm64" ]; then \
export GRAALVM_ARCH=aarch64; \
fi && \
echo "Installing GraalVM for ${GRAALVM_ARCH}" && \
curl -sLO https://download.oracle.com/graalvm/${GRAALVM_VERSION}/archive/graalvm-jdk-${GRAALVM_VERSION}_linux-${GRAALVM_ARCH}_bin.tar.gz && \
mkdir "graalvm-$GRAALVM_VERSION" && \
tar -xzf graalvm-jdk-${GRAALVM_VERSION}_linux-${GRAALVM_ARCH}_bin.tar.gz -C graalvm-$GRAALVM_VERSION --strip-components 1
ENV GRAALVM_HOME="/opt/graalvm-ce-java11-20.3.0"
ENV JAVA_HOME="/opt/graalvm-ce-java11-20.3.0/bin"
ARG BABASHKA_XMX="-J-Xmx4500m"
ENV GRAALVM_HOME="/opt/graalvm-$GRAALVM_VERSION"
ENV JAVA_HOME="$GRAALVM_HOME/bin"
ENV PATH="$JAVA_HOME:$PATH"
ENV BABASHKA_XMX=$BABASHKA_XMX
# Make it possible to use Docker to build bb with a particular set of features
# by setting them at build time via `docker build --build-arg ARG_NAME=true ...`
ARG BABASHKA_LEAN=
ARG BABASHKA_FEATURE_CORE_ASYNC=
ARG BABASHKA_MUSL=
ARG BABASHKA_FEATURE_CSV=
ARG BABASHKA_FEATURE_JAVA_NET_HTTP=
ARG BABASHKA_FEATURE_JAVA_NIO=
ARG BABASHKA_FEATURE_JAVA_TIME=
ARG BABAHSKA_FEATURE_TRANSIT=
ARG BABASHKA_FEATURE_TRANSIT=
ARG BABASHKA_FEATURE_XML=
ARG BABASHKA_FEATURE_YAML=
ARG BABASHKA_FEATURE_HTTPKIT_CLIENT=
@ -31,12 +46,13 @@ ARG BABASHKA_FEATURE_HSQLDB=
ARG BABASHKA_FEATURE_ORACLEDB=
ARG BABASHKA_FEATURE_DATASCRIPT=
ARG BABASHKA_FEATURE_LANTERNA=
ARG BABASHKA_STATIC=
ENV BABASHKA_LEAN=$BABASHKA_LEAN
ENV BABASHKA_FEATURE_CORE_ASYNC=$BABASHKA_FEATURE_CORE_ASYNC
ENV BABASHKA_FEATURE_CSV=$BABASHKA_FEATURE_CSV
ENV BABASHKA_FEATURE_JAVA_NET_HTTP=$BABASHKA_FEATURE_JAVA_NET_HTTP
ENV BABASHKA_FEATURE_JAVA_NIO=$BABASHKA_FEATURE_JAVA_NIO
ENV BABASHKA_FEATURE_JAVA_TIME=$BABASHKA_FEATURE_JAVA_TIME
ENV BABAHSKA_FEATURE_TRANSIT=$BABAHSKA_FEATURE_TRANSIT
ENV BABASHKA_FEATURE_TRANSIT=$BABASHKA_FEATURE_TRANSIT
ENV BABASHKA_FEATURE_XML=$BABASHKA_FEATURE_XML
ENV BABASHKA_FEATURE_YAML=$BABASHKA_FEATURE_YAML
ENV BABASHKA_FEATURE_HTTPKIT_CLIENT=$BABASHKA_FEATURE_HTTPKIT_CLIENT
@ -47,13 +63,19 @@ ENV BABASHKA_FEATURE_HSQLDB=$BABASHKA_FEATURE_HSQLDB
ENV BABASHKA_FEATURE_ORACLEDB=$BABASHKA_FEATURE_ORACLEDB
ENV BABASHKA_FEATURE_DATASCRIPT=$BABASHKA_FEATURE_DATASCRIPT
ENV BABASHKA_FEATURE_LANTERNA=$BABASHKA_FEATURE_LANTERNA
ENV BABASHKA_STATIC=$BABASHKA_STATIC
ENV BABASHKA_MUSL=$BABASHKA_MUSL
COPY . .
RUN ./script/uberjar
RUN ./script/setup-musl
RUN ./script/compile
FROM ubuntu:latest
RUN apt-get update && apt-get install -y curl \
&& mkdir -p /usr/local/bin
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /usr/local/bin
COPY --from=BASE /opt/target/metabom.jar /opt/babashka-metabom.jar
COPY --from=BASE /opt/bb /usr/local/bin/bb
CMD ["bb"]

35
Dockerfile.alpine Normal file
View file

@ -0,0 +1,35 @@
FROM alpine:3 AS tester
COPY bb /bin/bb
RUN chmod +x /bin/bb
# TODO: See https://github.com/sgerrand/alpine-pkg-glibc/issues/185 and remove the `--force-overwrite`s when resolved.
RUN apk --no-cache add curl ca-certificates tar && \
curl -Ls https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.28-r0/glibc-2.28-r0.apk > /tmp/glibc-2.28-r0.apk && \
apk add --allow-untrusted --force-overwrite /tmp/glibc-2.28-r0.apk
RUN echo 'hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4' >> /etc/nsswitch.conf
# TODO: Run actual native tests when they are ported
RUN curl --version
# RUN bb -e '(prn (java.io.File/createTempFile "babashka.curl" ".headers"))'
# RUN bb -e '(spit (java.io.File/createTempFile "babashka.curl" ".headers") "hello")'
# RUN bb -e "(curl/get \"https://clojure.org\")" # cURL http test
RUN bb -e "(require '[org.httpkit.client :as http]) (when-let [error (:error @(http/get \"https://clojure.org\"))] (throw error))" # JVM http test
RUN bb -e "(.length \"Hello, Babashka\")" # Java interop test
RUN bb -e "(require '[babashka.pods :as pods]) (pods/load-pod 'org.babashka/go-sqlite3 \"0.0.1\") (require '[pod.babashka.go-sqlite3 :as sqlite]) (sqlite/execute! \"/tmp/foo.db\" [\"SELECT 1 + 1\"])" # Pod test
FROM alpine:3
RUN apk --no-cache add curl ca-certificates tar && \
curl -Ls https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.28-r0/glibc-2.28-r0.apk > /tmp/glibc-2.28-r0.apk && \
apk add --allow-untrusted --force-overwrite /tmp/glibc-2.28-r0.apk && rm /tmp/glibc-2.28-r0.apk
RUN echo 'hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4' >> /etc/nsswitch.conf
COPY metabom.jar /opt/babashka-metabom.jar
COPY --from=tester /bin/bb /bin/bb
CMD ["bb"]

16
Dockerfile.ci Normal file
View file

@ -0,0 +1,16 @@
FROM ubuntu:latest
RUN apt-get update \
&& apt-get install -y curl \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /usr/local/bin
ARG TARGETARCH
ARG TARGETOS
COPY metabom.jar /opt/babashka-metabom.jar
COPY ${TARGETOS}/${TARGETARCH}/bb /usr/local/bin/bb
RUN chmod +x /usr/local/bin/bb
CMD ["bb"]

337
README.md
View file

@ -1,11 +1,10 @@
<img src="logo/babashka.svg" width="425px">
[<img src="logo/babashka.svg" alt="Babashka" width="425px">](https://babashka.org)
[![CircleCI](https://circleci.com/gh/borkdude/babashka/tree/master.svg?style=shield)](https://circleci.com/gh/borkdude/babashka/tree/master)
[![CircleCI](https://circleci.com/gh/babashka/babashka/tree/master.svg?style=shield)](https://circleci.com/gh/babashka/babashka/tree/master)
[![project chat](https://img.shields.io/badge/slack-join_chat-brightgreen.svg)](https://app.slack.com/client/T03RZGPFR/CLX41ASCS)
[![Financial Contributors on Open Collective](https://opencollective.com/babashka/all/badge.svg?label=financial+contributors)](https://opencollective.com/babashka) [![Clojars Project](https://img.shields.io/clojars/v/borkdude/babashka.svg)](https://clojars.org/borkdude/babashka)
[![Financial Contributors on Open Collective](https://opencollective.com/babashka/all/badge.svg?label=financial+contributors)](https://opencollective.com/babashka) [![Clojars Project](https://img.shields.io/clojars/v/babashka/babashka.svg)](https://clojars.org/babashka/babashka)
[![twitter](https://img.shields.io/badge/twitter-%23babashka-blue)](https://twitter.com/search?q=%23babashka&src=typed_query&f=live)
A Clojure [babushka](https://en.wikipedia.org/wiki/Headscarf) for the grey areas of Bash.
[![docs](https://img.shields.io/badge/website-docs-blue)](https://book.babashka.org) [![Gurubase](https://img.shields.io/badge/Gurubase-Ask%20Babashka%20Guru-006BFF)](https://gurubase.io/g/babashka)
<blockquote class="twitter-tweet" data-lang="en">
<p lang="en" dir="ltr">Life's too short to remember how to write Bash code. I feel liberated.</p>
@ -15,8 +14,9 @@ A Clojure [babushka](https://en.wikipedia.org/wiki/Headscarf) for the grey areas
## Introduction
The main idea behind babashka is to leverage Clojure in places where you would
be using bash otherwise.
Babashka is a native Clojure interpreter for scripting with fast startup. Its
main goal is to leverage Clojure in places where you would be using bash
otherwise.
As one user described it:
@ -34,43 +34,70 @@ As one user described it:
### Non-goals
* Performance
* Provide a mixed Clojure/Bash DSL (see portability).
* Replace existing shells. Babashka is a tool you can use inside existing shells like bash and it is designed to play well with them. It does not aim to replace them.
## Quickstart
For installation options check [Installation](https://github.com/borkdude/babashka#installation).
For quick installation use:
For installation options check [Installation](https://github.com/babashka/babashka#installation).
For quick installation using `bash`, use:
``` shell
$ bash <(curl -s https://raw.githubusercontent.com/borkdude/babashka/master/install)
bash < <(curl -s https://raw.githubusercontent.com/babashka/babashka/master/install)
```
or grab a binary from [Github
releases](https://github.com/borkdude/babashka/releases) yourself and place it
releases](https://github.com/babashka/babashka/releases) yourself and place it
anywhere on the path.
Then you're ready to go:
``` shellsession
$ ls | bb -i '(filter #(-> % io/file .isDirectory) *input*)'
("doc" "resources" "sci" "script" "src" "target" "test")
bb took 4ms.
time bb -e '(->> (fs/list-dir ".") (filter fs/directory?) (map fs/normalize) (map str) (take 3))'
```
### Babashka users
``` clojure
(".build" "feature-lanterna" ".repl")
bb -e 0,01s user 0,01s system 70% cpu 0,017 total
```
Are you using babashka in your company or personal projects? Let us know [here](https://github.com/borkdude/babashka/issues/254).
## Support :heart:
### Setting expectations
You can support this project via [Github
Sponsors](https://github.com/sponsors/borkdude),
[OpenCollective](https://opencollective.com/babashka),
[Ko-fi](https://ko-fi.com/borkdude) or indirectly via [Clojurists
Together](https://www.clojuriststogether.org/).
Babashka uses [sci](https://github.com/borkdude/sci) for interpreting
Clojure. Sci implements a substantial subset of Clojure. Interpreting code is in
<details>
<summary>Top sponsors</summary>
- [Clojurists Together](https://clojuriststogether.org/)
- [Roam Research](https://roamresearch.com/)
- [Nextjournal](https://nextjournal.com/)
- [Toyokumo](https://toyokumo.co.jp/)
- [Cognitect](https://www.cognitect.com/)
- [Kepler16](https://kepler16.com/)
- [Adgoji](https://www.adgoji.com/)
</details>
## Babashka users
See [companies](doc/companies.md) for a list of companies using babashka.
Are you using babashka in your company or personal projects? Let us know
[here](https://github.com/babashka/babashka/issues/254).
## Setting expectations
Babashka uses [SCI](https://github.com/borkdude/sci) for interpreting
Clojure. SCI implements a substantial subset of Clojure. Interpreting code is in
general not as performant as executing compiled code. If your script takes more
than a few seconds to run or has lots of loops, Clojure on the JVM may be a
better fit as the performance on JVM is going to outweigh its
startup time penalty. Read more about the differences with Clojure
better fit as the performance on JVM is going to outweigh its startup time
penalty. Read more about the differences with Clojure
[here](#differences-with-clojure).
## Status
@ -80,7 +107,7 @@ and is unlikely to change. Changes may happen in other parts of babashka,
although we will try our best to prevent them. Always check the release notes or
[CHANGELOG.md](CHANGELOG.md) before upgrading.
### Talk
## Talk
To get an overview of babashka, you can watch this talk ([slides](https://speakerdeck.com/borkdude/babashka-and-the-small-clojure-interpreter-at-clojured-2020)):
@ -91,44 +118,10 @@ To get an overview of babashka, you can watch this talk ([slides](https://speake
The [babashka book](https://book.babashka.org) contains detailed information
about how to get the most out of babashka scripting.
## Examples
Read the output from a shell command as a lazy seq of strings:
``` shell
$ ls | bb -i '(take 2 *input*)'
("CHANGES.md" "Dockerfile")
```
Read EDN from stdin and write the result to stdout:
``` shell
$ bb '(vec (dedupe *input*))' <<< '[1 1 1 1 2]'
[1 2]
```
Read more about input and output flags [here](doc/io-flags.md).
Execute a script. E.g. print the current time in California using the
`java.time` API:
File `pst.clj`:
``` clojure
#!/usr/bin/env bb
(def now (java.time.ZonedDateTime/now))
(def LA-timezone (java.time.ZoneId/of "America/Los_Angeles"))
(def LA-time (.withZoneSameInstant now LA-timezone))
(def pattern (java.time.format.DateTimeFormatter/ofPattern "HH:mm"))
(println (.format LA-time pattern))
```
``` shell
$ pst.clj
05:17
```
More examples can be found [here](examples/README.md).
There is also the book [Babashka Babooka](https://www.braveclojure.com/quests/babooka/),
by Daniel Higginbotham, who has also helped a lot of people learn Clojure with
[Clojure for the Brave and
True](https://www.braveclojure.com/clojure-for-the-brave-and-true/).
## Try online
@ -149,6 +142,30 @@ Upgrade:
brew upgrade babashka
### Nix
Linux and macOS (including ARM Macs) binaries are provided via nix (see the installation instructions for nix [here](https://nixos.org/download.html)).
Install:
# Adding `nixpkgs-unstable` channel for more up-to-date binaries, skip this if you already have `nixpkgs-unstable` in your channel list
nix-channel --add https://nixos.org/channels/nixpkgs-unstable nixpkgs-unstable
nix-channel --update
nix-env -iA nixpkgs-unstable.babashka
Upgrade:
nix-channel --update
nix-env -iA nixpkgs-unstable.babashka
You can find more documentation on how to use babashka with nix [here](./doc/nix.md).
### Alpine
On Alpine it's recommended to download the binary manually from [Github
Releases](https://github.com/babashka/babashka/releases) and use the static
linux binary.
### Arch (Linux)
`babashka` is [available](https://aur.archlinux.org/packages/babashka-bin/) in the [Arch User Repository](https://aur.archlinux.org). It can be installed using your favorite [AUR](https://aur.archlinux.org) helper such as
@ -156,17 +173,67 @@ Upgrade:
yay -S babashka-bin
### asdf
[asdf](https://github.com/asdf-vm/asdf) is an extendable version manager for linux and macOS. Note that asdf will add significant startup time to any babashka script, consider using [mise](#mise) instead.
Babashka can be installed using a plugin as follows:
asdf plugin add babashka https://github.com/pitch-io/asdf-babashka
asdf install babashka latest
### mise
[mise](https://mise.jdx.dev/) is a development environment setup tool for linux and macOS.
Install:
mise use --global babashka@latest
Upgrade:
mise upgrade babashka
### Windows
#### Scoop
On Windows you can install using [scoop](https://scoop.sh/) and the
[scoop-clojure](https://github.com/littleli/scoop-clojure) bucket.
Or just follow these concrete steps:
``` powershell
# Note: if you get an error you might need to change the execution policy (i.e. enable Powershell) with
# Set-ExecutionPolicy RemoteSigned -scope CurrentUser
Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')
scoop bucket add scoop-clojure https://github.com/littleli/scoop-clojure
scoop bucket add extras
scoop install babashka
```
#### Manual
If scoop does not work for you, then you can also just download the `bb.exe`
binary from [Github releases](https://github.com/babashka/babashka/releases) and
place it on your path manually.
#### WSL1
> Note: WSL1 users might experience a BSOD, please use the --static install option when installing
``` shell
$ curl -sLO https://raw.githubusercontent.com/babashka/babashka/master/install
$ chmod +x install
$ ./install --static
```
### Installer script
Install via the installer script:
Install via the installer script for linux and macOS:
``` shell
$ curl -sLO https://raw.githubusercontent.com/borkdude/babashka/master/install
$ curl -sLO https://raw.githubusercontent.com/babashka/babashka/master/install
# or
$ wget -qO install https://raw.githubusercontent.com/babashka/babashka/master/install
$ chmod +x install
$ ./install
```
@ -175,24 +242,55 @@ By default this will install into `/usr/local/bin` (you may need `sudo` for
this). To change this, provide the directory name:
``` shell
$ ./install --dir /tmp
$ ./install --dir .
```
To install a specific version, the script also supports `--version`:
``` shell
$ ./install --dir /tmp --version 0.2.1
$ ./install --dir . --version 0.4.1
```
To force the download of the zip archive to a different directory than `/tmp`
use the `--download-dir` argument:
``` shell
$ ./install --dir . --version 0.4.1 --download-dir .
```
On Linux, if you want to install the static binary version:
``` shell
$ ./install --dir . --version 0.4.1 --download-dir . --static
```
In case you want to check the download, you can use the `--checksum` option.
This maybe useful for unattended installations:
``` shell
$ sha256sum babashka-0.4.1-linux-amd64-static.tar.gz
ab70fb39fdbb5206c0a2faab178ffb54dd9597991a4bc13c65df2564e8f174f6 babashka-0.4.1-linux-amd64-static.tar.g
$ ./install --dir /tmp --checksum ab70fb39fdbb5206c0a2faab178ffb54dd9597991a4bc13c65df2564e8f174f6 --static --version 0.4.1
```
Note that the `--checksum` option only works when `--version` option is also
provided. This is to avoid breakage when a new version of Babashka is released.
### Github releases
You may also download a binary from
[Github](https://github.com/borkdude/babashka/releases). For linux there is a
[Github](https://github.com/babashka/babashka/releases). For linux there is a
static binary available which can be used on Alpine.
### CI
- On Github Actions it's recommended to use [setup-clojure](https://github.com/DeLaGuardo/setup-clojure) with `bb: latest`.
- You can use the [installer script](https://github.com/babashka/babashka#installer-script) on any non-Windows CI system. CircleCI requires `sudo`.
- On Appveyor + Windows you can use a bit of [Powershell](https://github.com/clj-kondo/clj-kondo/blob/39b5cb2b0d3d004c005e8975b6fafe0e314eec68/appveyor.yml#L60-L64).
## Docker
Check out the image on [Docker hub](https://hub.docker.com/r/borkdude/babashka/).
Check out the image on [Docker hub](https://hub.docker.com/r/babashka/babashka/).
## [News](doc/news.md)
@ -202,17 +300,33 @@ Check out the [news](doc/news.md) page to keep track of babashka-related news it
Go [here](https://book.babashka.org/#built-in-namespaces) to see the full list of built-in namespaces.
## [Projects](doc/projects.md)
## [Compatible Projects](doc/projects.md)
A list of projects (scripts, libraries, pods and tools) known to work with babashka.
## Badges
[![bb compatible](/logo/badge.svg)](https://book.babashka.org#badges)
The babashka compatible badge indicates that a library can be used as babashka dependency.
If this is the case for your library, we encourage you to proudly display this badge.
[![bb built-in](/logo/built-in-badge.svg)](https://book.babashka.org#badges)
The babashka built-in badge means that a library has been built directly into babashka and requires no extra dependencies to use it.
If this rare honor belongs to your library, you should display this badge.
See [the babashka book for details](https://book.babashka.org#badges).
## Swag
- [t-shirt](https://www.etsy.com/listing/1241766068/babashka-clj-kondo-nbb-shirt)
## [Pods](https://github.com/babashka/babashka.pods)
Pods are programs that can be used as a Clojure library by
babashka. Documentation is available in the [pod library
repo](https://github.com/babashka/babashka.pods).
repo](https://github.com/babashka/pods).
A list of available pods can be found [here](doc/projects.md#pods).
A list of available pods can be found in the [pod registry](https://github.com/babashka/pod-registry).
## Differences with Clojure
@ -243,7 +357,8 @@ Differences with Clojure:
- Currently `reify` works only for one class at a time
- The `clojure.core.async/go` macro is not (yet) supported. For compatibility it
currently maps to `clojure.core.async/thread`. More info [here](#coreasync).
currently maps to `clojure.core.async/thread`. More info
[here](https://book.babashka.org/#core_async).
## Package babashka script as a AWS Lambda
@ -253,6 +368,46 @@ handling of SIGINT and SIGPIPE. This can be done by setting
## Articles, podcasts and videos
- [Blambda analyses sites](https://jmglov.net/blog/2023-01-04-blambda-analyses-sites.html) by Josh Glover
- [The wizard of HOP - How we built the web based HOP CLI Settings Editor using Babashka and Scittle](https://www.gethop.dev/post/the-wizard-of-hop-how-we-built-the-web-based-hop-cli-settings-editor-using-babashka-and-scittle) by Bingen Galartza
- [Simple TUIs with Babashka and Gum](https://rattlin.blog/bbgum.html) by Rattlin.blog
- [Babashka And Dialog Part Ii: Announcing The Bb-Dialog Library](https://www.pixelated-noise.com/blog/2023/01/20/bb-dialog-announcement/index.html) by A.C. Danvers
- [Babashka Babooka](https://www.braveclojure.com/quests/babooka/): Write Command-Line Clojure by Daniel Higginbotham
- [Re-Writing a GlobalProtect OpenConnect VPN Connect script in Babashka](https://tech.toryanderson.com/2023/01/14/re-writing-a-globalprotect-openconnect-vpn-connect-script-in-babashka/) by Tory Anderson
- [Babashka: How GraalVM Helped Create a Fast-Starting Scripting Environment for Clojure](https://medium.com/graalvm/babashka-how-graalvm-helped-create-a-fast-starting-scripting-environment-for-clojure-b0fcc38b0746) by Michiel Borkent (Japanese version [here]((https://logico-jp.io/2023/01/07/babashka-how-graalvm-helped-create-a-fast-starting-scripting-environment-for-clojure/)))
- [Adding Prompts To Your Babashka Scripts With Dialog](https://www.pixelated-noise.com/blog/2022/12/09/dialog-and-babashka/index.html) by A.C. Danvers
- [Scraping an HTML dictionary with Babashka and Bootleg](https://blog.exupero.org/scraping-an-html-dictionary-with-babashka-and-bootleg/) by exupero
- [Using Babashka to Get Electricity Prices](https://www.karimarttila.fi/clojure/2022/12/04/using-babashka-to-get-electricity-prices.html) by Kari Marttila
- [How to Do Things With Babashka](https://presumably.de/how-to-do-things-with-babashka.html) by Paulus Esterhazy (2022-12)
- [Using nREPL as a system interface](https://yogthos.net/posts/2022-11-26-nREPL-system-interaction.html) by Dmitri Sotnikov
- [Manage git hooks with babashka tasks](https://blaster.ai/blog/posts/manage-git-hooks-w-babashka.html) by Mykhaylo Bilyanskyy
- [Messing around with babashka](https://ian-muge.medium.com/messing-around-with-babashka-f181a9003faa) by Ian Muge
- Introducing [bbin](https://radsmith.com/bbin) by Radford Smith (2022-09)
- [Deleting AWS Glacier vaults with babashka](https://javahippie.net/clojure/2022/07/23/deleting-aws-glacier-vaults-with-babashka.html) by Tim Zöller
- [Recursive document transformations with Pandoc and Clojure](https://play.teod.eu/document-transform-pandoc-clojure/) by Teodor Heggelund
- [Blambda!](https://jmglov.net/blog/2022-07-03-blambda.html) by Josh Glover
- [Babashka CLI](https://blog.michielborkent.nl/babashka-cli.html): turn Clojure functions into CLIs!
- [Breakneck Babashka on K8s](https://www.linkedin.com/pulse/breakneck-babashka-k8s-heow-goodman/) by Heow Goodman
- [Recursive document transformations with Pandoc and Clojure](https://play.teod.eu/document-transform-pandoc-clojure/)
- [Detecting inconsistent aliases in a clojure codebase](https://www.youtube.com/watch?v=bf8KLKkCH2g) by Oxalorg
- [I, too, Wrote Myself a Static Site Generator](https://dawranliou.com/blog/i-too-wrote-myself-a-static-site-generator/) by Daw-Ran Liou
- [Babashka and Clojure](https://youtu.be/ZvOs5Ele6VE) by Rahul Dé at North Virginia Linux Users Group
- [Create a password manager with Clojure using Babashka, sqlite, honeysql and stash](https://youtu.be/jm0RXmyjRJ8) by Daniel Amber
- [Writing Clojure-living-cookbooks](https://www.loop-code-recur.io/live-clojure-cookbooks) by Cyprien Pannier
- [Using babashka with PHP](https://blog.michielborkent.nl/using-babashka-with-php.html) by Michiel Borkent
- [Moldable Emacs: a Clojure Playground with Babashka](https://ag91.github.io/blog/2021/11/05/moldable-emacs-a-clojure-playground-with-babashka/) by Andrea
- [Finding my inner Wes Anderson with #Babashka](https://javahippie.net/clojure/2021/10/18/finding-my-inner-wes-anderson.html) by Tim Zöller
- [Awesome Babashka: Parse & produce HTML and SQLite](https://blog.jakubholy.net/2021/awesome-babashka-dash/) by Jakub Holý
- [Babashka tasks](https://youtu.be/u5ECoR7KT1Y), talk by Michiel Borkent
- [Rewriting a clojure file with rewrite-clj and babashka](https://youtu.be/b7NPKsm8gkc), video by Oxalorg
- [Integrating Babashka into Bazel](https://timjaeger.io/20210627-integrating-babashka-with-bazel.html) by Tim Jäger
- [Talk](https://youtu.be/Yjeh57eE9rg): Babashka: a native Clojure interpreter for scripting — The 2021 Graal Workshop at CGO
- [Blog](https://savo.rocks/posts/playing-new-music-on-old-car-stereo-with-clojure-and-babashka/): Playing New Music On Old Car Stereo With Clojure And Babashka
- [Homoiconicity and feature flags](https://martinklepsch.org/posts/homoiconicity-and-feature-flags.html) by Martin Klepsch
- [Clojure like its PHP](https://eccentric-j.com/blog/clojure-like-its-php.html) by Jay Zawrotny (eccentric-j)
- [Deploy babashka script to AWS Lambda](https://www.jocas.lt/blog/post/babashka-aws-lambda/) by Dainius Jocas.
- [Automating Video Edits with Clojure and ffmpeg](https://youtu.be/Tmgy57R9HZM) by Adam James.
- [Exporter for passwordstore.org](https://www.ieugen.ro/posts/2020/2020-12-26-export-passwords-with-babashka/) by Eugen Stan
- [Babashka and sci internals](https://youtu.be/pgNp4Lk3gf0), a talk by Michiel Borkent at the [London Clojurians Meetup](https://www.meetup.com/London-Clojurians).
- [Writing Clojure on the Command Line with Babashka](https://youtu.be/RogyxI-GaGQ), a talk by Nate Jones.
- [Using Clojure in Command Line with Babashka](http://www.karimarttila.fi/clojure/2020/09/01/using-clojure-in-command-line-with-babashka.html), a blog article by Kari Marttila.
@ -264,7 +419,7 @@ handling of SIGINT and SIGPIPE. This can be done by setting
- [The REPL podcast](https://www.therepl.net/episodes/36/) Michiel Borkent talks about [clj-kondo](https://github.com/borkdude/clj-kondo), [Jet](https://github.com/borkdude/jet), Babashka, and [GraalVM](https://github.com/oracle/graal) with Daniel Compton.
- [Implementing an nREPL server for babashka](https://youtu.be/0YmZYnwyHHc): impromptu presentation by Michiel Borkent at the online [Dutch Clojure Meetup](http://meetup.com/The-Dutch-Clojure-Meetup)
- [ClojureScript podcast](https://soundcloud.com/user-959992602/s3-e5-babashka-with-michiel-borkent) with Jacek Schae interviewing Michiel Borkent
- [Babashka talk at ClojureD](https://www.youtube.com/watch?v=Nw8aN-nrdEk) ([slides](https://speakerdeck.com/borkdude/babashka-and-the-small-clojure-interpreter-at-clojured-2020)) by Michiel Borkent
- [Babashka talk at ClojureD](https://www.youtube.com/watch?v=Nw8aN-nrdEk) ([slides](https://speakerdeck.com/babashka/babashka-and-the-small-clojure-interpreter-at-clojured-2020)) by Michiel Borkent
- [Babashka: a quick example](https://juxt.pro/blog/posts/babashka.html) by Malcolm Sparks
- [Clojure Start Time in 2019](https://stuartsierra.com/2019/12/21/clojure-start-time-in-2019) by Stuart Sierra
- [Advent of Random
@ -288,7 +443,7 @@ binary, these evaluation criteria are considered:
- The library cannot be interpreted by with babashka using `--classpath`.
- The functionality can't be met by shelling out to another CLI or can't be
written as a small layer over an existing CLI (like `babashka.curl`) instead.
- The library cannot be implemented a
- The library cannot be implemented as a
[pod](https://github.com/babashka/babashka.pods).
If not all of the criteria are met, but adding a feature is still useful to a
@ -301,7 +456,7 @@ babashka is interesting to share with the world, they are free to distribute it
using a different binary name (like `bb-sql`, `bb-docker`, `bb-yourcompany`,
etc.). See the [feature flag documentation](doc/build.md#feature-flags) and the
implementation of the existing feature flags ([example
commit](https://github.com/borkdude/babashka/commit/02c7c51ad4b2b1ab9aa95c26a74448b138fe6659)).
commit](https://github.com/babashka/babashka/commit/02c7c51ad4b2b1ab9aa95c26a74448b138fe6659)).
## Related projects
@ -314,42 +469,10 @@ commit](https://github.com/borkdude/babashka/commit/02c7c51ad4b2b1ab9aa95c26a744
Thanks to all the people that contributed to babashka:
- [Adgoji](https://www.adgoji.com/) for financial support
- [CircleCI](https://circleci.com/) for CI and additional support
- [Nikita Prokopov](https://github.com/tonsky) for the logo
- [Contributors](https://github.com/borkdude/babashka/graphs/contributors) and
- [Contributors](https://github.com/babashka/babashka/graphs/contributors) and
other users posting issues with bug reports and ideas
- [Github sponsors](https://github.com/sponsors/borkdude)
- [OpenCollective sponsors](https://opencollective.com/babashka)
- [Clojurists Together](https://www.clojuriststogether.org/)
### Code Contributors
This project exists thanks to all the people who contribute. [[Contribute](doc/dev.md)].
<a href="https://github.com/borkdude/babashka/graphs/contributors"><img src="https://opencollective.com/babashka/contributors.svg?width=890&button=false" /></a>
### Financial Contributors
Become a financial contributor and help us sustain our community. [[Contribute](https://opencollective.com/babashka/contribute)]
#### Individuals
<a href="https://opencollective.com/babashka"><img src="https://opencollective.com/babashka/individuals.svg?width=890"></a>
#### Organizations
Support this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/babashka/contribute)]
<a href="https://opencollective.com/babashka/organization/0/website"><img src="https://opencollective.com/babashka/organization/0/avatar.svg"></a>
<a href="https://opencollective.com/babashka/organization/1/website"><img src="https://opencollective.com/babashka/organization/1/avatar.svg"></a>
<a href="https://opencollective.com/babashka/organization/2/website"><img src="https://opencollective.com/babashka/organization/2/avatar.svg"></a>
<a href="https://opencollective.com/babashka/organization/3/website"><img src="https://opencollective.com/babashka/organization/3/avatar.svg"></a>
<a href="https://opencollective.com/babashka/organization/4/website"><img src="https://opencollective.com/babashka/organization/4/avatar.svg"></a>
<a href="https://opencollective.com/babashka/organization/5/website"><img src="https://opencollective.com/babashka/organization/5/avatar.svg"></a>
<a href="https://opencollective.com/babashka/organization/6/website"><img src="https://opencollective.com/babashka/organization/6/avatar.svg"></a>
<a href="https://opencollective.com/babashka/organization/7/website"><img src="https://opencollective.com/babashka/organization/7/avatar.svg"></a>
<a href="https://opencollective.com/babashka/organization/8/website"><img src="https://opencollective.com/babashka/organization/8/avatar.svg"></a>
<a href="https://opencollective.com/babashka/organization/9/website"><img src="https://opencollective.com/babashka/organization/9/avatar.svg"></a>
## License

View file

@ -2,20 +2,30 @@
version: "v-{build}"
image: Visual Studio 2017
image: Visual Studio 2022
clone_folder: C:\projects\babashka
environment:
GRAALVM_HOME: C:\projects\babashka\graalvm\graalvm-ce-java11-20.3.0
GRAALVM_HOME: C:\projects\babashka\graalvm\graalvm-jdk-24+36.1
JAVA_HOME: C:\projects\babashka\graalvm\graalvm-jdk-24+36.1
BABASHKA_XMX: "-J-Xmx5g"
skip_commits:
files:
- "logo/*"
- "**/*.md"
cache:
- C:\ProgramData\chocolatey\lib -> project.clj, appveyor.yml
- '%USERPROFILE%\.m2 -> project.clj'
- 'graalvm -> appveyor.yml'
clone_script:
- cmd: git config --global core.autocrlf true
- cmd: git config --global core.symlinks true
- ps: >-
if(-not $env:APPVEYOR_PULL_REQUEST_NUMBER) {
git clone -q --branch=$env:APPVEYOR_REPO_BRANCH https://github.com/$env:APPVEYOR_REPO_NAME.git $env:APPVEYOR_BUILD_FOLDER
@ -29,35 +39,53 @@ clone_script:
}
- cmd: git submodule update --init --recursive
- cmd: git reset --hard
build_script:
# TODO: Extract the zip by removing the top level folder to remove the hardcoded path for GRAALVM_HOME
- cmd: >-
powershell -Command "if (Test-Path('graalvm')) { return } else { (New-Object Net.WebClient).DownloadFile('https://download.oracle.com/graalvm/24/archive/graalvm-jdk-24_windows-x64_bin.zip', 'graalvm.zip') }"
powershell -Command "if (Test-Path('graalvm')) { return } else { Expand-Archive graalvm.zip graalvm }"
- cmd: >-
powershell -Command "(New-Object Net.WebClient).DownloadFile('https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein.bat', 'lein.bat')"
call lein self-install
# set CLJ_KONDO_TEST_ENV=jvm
#- cmd: >-
# set BABASHKA_TEST_ENV=jvm
# call script/test.bat
# call script/test.bat
# see https://github.com/quarkusio/quarkus/pull/7663
- cmd: >-
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
powershell -Command "if (Test-Path('graalvm')) { return } else { (New-Object Net.WebClient).DownloadFile('https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/graalvm-ce-java11-windows-amd64-20.3.0.zip', 'graalvm.zip') }"
powershell -Command "if (Test-Path('graalvm')) { return } else { Expand-Archive graalvm.zip graalvm }"
set BABASHKA_SHA=%APPVEYOR_REPO_COMMIT%
call script/uberjar.bat
call script/compile.bat
# - cmd: >-
# lein clean
echo Creating zip archive
# set CLJ_KONDO_TEST_ENV=native
set zip=babashka-%BABASHKA_VERSION%-windows-amd64.zip
# call script/test.bat
jar -cMf %zip% bb.exe
bb --config .build/bb.edn --deps-root . release-artifact %zip%
before_test:
- cmd: >-
set BABASHKA_CLASSPATH=
set BABASHKA_TEST_ENV=native
test_script:
- cmd: >-
call script/test.bat :windows
call script/run_lib_tests.bat
artifacts:
- path: babashka-*-windows-amd64.zip

1
babashka.core Submodule

@ -0,0 +1 @@
Subproject commit 52a6037bd4b632bffffb04394fb4efd0cdab6b1e

@ -1 +1 @@
Subproject commit d09b29ef356d8ff3f5cda8a912acbb28256b6cfc
Subproject commit e936acd40544eb637b6041c7e89454b21eb7ee34

@ -1 +1 @@
Subproject commit 8830a500e1c49923921c4bb8d26a7aba8c72d7a8
Subproject commit edd3d613bfb9bf3adabfd0bda5c3f5c6ee85ec20

1
deps.clj Submodule

@ -0,0 +1 @@
Subproject commit 976cf7b0e54901ada3f7e83f12a4c0aed039adc9

212
deps.edn
View file

@ -1,63 +1,76 @@
{:paths ["src" "feature-xml" "feature-core-async"
{:paths ["src" "feature-xml"
"feature-yaml" "feature-csv" "feature-transit"
"feature-java-time" "feature-java-nio"
"feature-httpkit-client" "feature-httpkit-server"
"feature-ring" "feature-reitit" "feature-selmer"
"feature-lanterna"
"sci/src" "babashka.curl/src" "pods/src"
"feature-core-match"
"feature-hiccup"
"feature-test-check"
"feature-spec-alpha"
"feature-selmer"
"feature-logging"
"feature-priority-map"
"feature-rrb-vector"
"feature-jdbc"
"pods/src"
"babashka.nrepl/src"
"depstar/src" "process/src"
"resources" "sci/resources"],
:deps {org.clojure/clojure {:mvn/version "1.10.2-alpha2"},
org.clojure/tools.reader {:mvn/version "1.3.3"},
borkdude/edamame {:mvn/version "0.0.11-alpha.21"},
borkdude/graal.locking {:mvn/version "0.0.2"},
borkdude/sci.impl.reflector {:mvn/version "0.0.1"}
org.clojure/core.async {:mvn/version "1.3.610"},
org.clojure/tools.cli {:mvn/version "1.0.194"},
"deps.clj/src" "deps.clj/resources"
"resources" "sci/resources"
"impl-java/src"],
:deps {org.clojure/clojure {:mvn/version "1.12.0"},
org.babashka/sci {:local/root "sci"}
org.babashka/babashka.impl.java {:mvn/version "0.1.10"}
org.babashka/sci.impl.types {:mvn/version "0.0.2"}
babashka/babashka.curl {:local/root "babashka.curl"}
babashka/fs {:local/root "fs"}
babashka/babashka.core {:local/root "babashka.core"}
org.clojure/core.async {:mvn/version "1.8.741"},
org.clojure/tools.cli {:mvn/version "1.0.214"},
org.clojure/data.csv {:mvn/version "1.0.0"},
cheshire/cheshire {:mvn/version "5.10.0"}
org.clojure/data.xml {:mvn/version "0.2.0-alpha6"}
clj-commons/clj-yaml {:mvn/version "0.7.2"}
com.cognitect/transit-clj {:mvn/version "1.0.324"}
nrepl/bencode {:mvn/version "1.1.0"}
ring/ring-core {:mvn/version "1.8.1"}
ring/ring-defaults {:mvn/version "0.3.2"}
ring-webjars {:mvn/version"0.2.0"}
metosin/reitit {:mvn/version "0.5.5"}
metosin/muuntaja {:mvn/version "0.6.7"}
metosin/ring-http-response {:mvn/version "0.9.1"}
selmer {:mvn/version "1.12.29"}
cheshire/cheshire {:mvn/version "6.0.0"}
org.clojure/data.xml {:mvn/version "0.2.0-alpha8"}
clj-commons/clj-yaml {:mvn/version "1.0.29"}
com.cognitect/transit-clj {:mvn/version "1.0.333"}
org.clojure/test.check {:mvn/version "1.1.1"}
nrepl/bencode {:mvn/version "1.2.0"}
seancorfield/next.jdbc {:mvn/version "1.1.610"}
org.postgresql/postgresql {:mvn/version "42.2.18"}
org.hsqldb/hsqldb {:mvn/version "2.5.1"}
datascript/datascript {:mvn/version "1.0.1"}
http-kit/http-kit {:mvn/version "2.5.0"}
http-kit/http-kit {:mvn/version "2.8.0-RC1"}
babashka/clojure-lanterna {:mvn/version "0.9.8-SNAPSHOT"}
org.clojure/math.combinatorics {:mvn/version "0.1.6"}}
:aliases {:main
org.clojure/core.match {:mvn/version "1.0.0"}
hiccup/hiccup {:mvn/version "2.0.0-RC1"}
rewrite-clj/rewrite-clj {:mvn/version "1.1.49"}
selmer/selmer {:mvn/version "1.12.59"}
com.taoensso/timbre {:mvn/version "6.6.0"}
org.clojure/tools.logging {:mvn/version "1.1.0"}
org.clojure/data.priority-map {:mvn/version "1.1.0"}
insn/insn {:mvn/version "0.5.2"}
org.clojure/core.rrb-vector {:mvn/version "0.1.2"}
org.babashka/cli {:mvn/version "0.8.65"}
org.babashka/http-client {:mvn/version "0.4.22"}
org.flatland/ordered {:mvn/version "1.15.12"}
org.jsoup/jsoup {:mvn/version "1.20.1"}}
:aliases {:babashka/dev
{:main-opts ["-m" "babashka.main"]}
:profile
{:extra-deps
{com.clojure-goes-fast/clj-async-profiler {:mvn/version "0.4.1"}}
{com.clojure-goes-fast/clj-async-profiler {:mvn/version "0.5.0"}}
:extra-paths ["test"]
:jvm-opts ["-Djdk.attach.allowAttachSelf"]
:jvm-opts ["-Djdk.attach.allowAttachSelf"
"-Dclojure.compiler.direct-linking=true"]
:main-opts ["-m" "babashka.profile"]}
:lib-tests
{:extra-paths ["process/src" "process/test"]
:extra-deps {babashka/clj-http-lite
{:git/url "https://github.com/babashka/clj-http-lite"
:sha "f44ebe45446f0f44f2b73761d102af3da6d0a13e"}
borkdude/spartan.spec {:git/url "https://github.com/borkdude/spartan.spec"
:sha "16f7eec4b6589c77c96c9fcf989f78fffcee7c4c"}
lambdaisland/regal {:git/url "https://github.com/lambdaisland/regal"
:sha "f902d2c43121f9e1c48603d6eb99f5900eb6a9f6"}
weavejester/medley {:git/url "https://github.com/weavejester/medley"
:sha "a4e5fb5383f5c0d83cb2d005181a35b76d8a136d"}
babashka/babasha.curl {:local/root "babashka.curl"}
{:extra-paths ["process/src" "process/test" "test-resources/lib_tests"]
:extra-deps {org.clj-commons/clj-http-lite {:mvn/version "0.4.392"}
#_#_org.babashka/spec.alpha {:git/url "https://github.com/babashka/spec.alpha"
:sha "0dec1f88cbde74a0470b454396f09a03adb4ae39"}
lambdaisland/regal {:mvn/version "0.0.143"}
cprop/cprop {:mvn/version "0.1.16"}
comb/comb {:mvn/version "0.1.1"}
mvxcvi/arrangement {:mvn/version "1.2.0"}
mvxcvi/arrangement {:mvn/version "2.0.0"}
org.clojure/data.zip {:mvn/version "1.0.0"}
clojure-csv/clojure-csv {:mvn/version "2.0.2"}
org.clojure/math.combinatorics {:mvn/version "0.1.6"}
@ -65,14 +78,121 @@
henryw374/cljc.java-time
{:git/url "https://github.com/henryw374/cljc.java-time.git"
:sha "e3d184b78e933322b3fcaa6ca66cbb8f42a6b35c"}
camel-snake-kebab/camel-snake-kebab {:mvn/version "0.4.1"}
camel-snake-kebab/camel-snake-kebab {:mvn/version "0.4.2"}
aero/aero {:mvn/version "1.1.6"}
org.clojure/data.generators {:mvn/version "1.0.0"}
honeysql/honeysql {:mvn/version "1.0.444"}
minimallist/minimallist {:mvn/version "0.0.6"}
circleci/bond {:mvn/version "0.4.0"}
version-clj/version-clj {:mvn/version "0.1.2"}}}
honeysql/honeysql {:mvn/version "1.0.461"}
com.github.seancorfield/honeysql {:mvn/version "2.2.840"}
minimallist/minimallist {:mvn/version "0.0.10"}
circleci/bond {:mvn/version "0.6.0"}
version-clj/version-clj {:mvn/version "2.0.2"}
gaka/gaka {:mvn/version "0.3.0"}
failjure/failjure {:mvn/version "2.2.0"}
io.helins/binf {:mvn/version "1.1.0-beta0"}
rm-hull/jasentaa {:mvn/version "0.2.5"}
slingshot/slingshot {:mvn/version "0.12.2"}
io.replikativ/hasch {:mvn/version "0.3.7"}
com.grammarly/omniconf {:mvn/version "0.4.3"}
crispin/crispin {:mvn/version "0.3.8"}
org.clojure/data.json {:mvn/version "2.4.0"}
clj-commons/multigrep {:mvn/version "0.5.0"}
amperity/vault-clj {:mvn/version "1.0.4"}
java-http-clj/java-http-clj {:mvn/version "0.4.3"}
com.stuartsierra/component {:mvn/version "1.0.0"}
org.clojars.askonomm/ruuter {:mvn/version "1.2.2"}
org.clj-commons/digest {:mvn/version "1.4.100"}
hato/hato {:mvn/version "0.8.2"}
better-cond/better-cond {:mvn/version "2.1.1"}
org.clojure/core.specs.alpha {:mvn/version "0.2.62"}
reifyhealth/specmonstah {:git/url "https://github.com/reifyhealth/specmonstah", :sha "a2b357009a3aa99a0c2d2361f3bbcd0b0e36505e"}
exoscale/coax {:mvn/version "1.0.0-alpha14"}
orchestra/orchestra {:mvn/version "2021.01.01-1"}
expound/expound {:mvn/version "0.8.10"}
integrant/integrant {:git/url "https://github.com/weavejester/integrant", :git/sha "a9fd7c02bd7201f36344b47142badc3c3ef22f88"}
com.stuartsierra/dependency {:mvn/version "1.0.0"}
listora/again {:mvn/version "1.0.0"}
org.clojure/tools.gitlibs {:mvn/version "2.4.172"}
environ/environ {:mvn/version "1.2.0"}
table/table {:git/url "https://github.com/cldwalker/table", :sha "f6293c5f3dac1dd6f525a80fc80930f8ccdf16b7"}
markdown-clj/markdown-clj {:mvn/version "1.10.8"}
org.clojure/tools.namespace {:git/sha "daf82a10e70182aea4c0716a48f3922163441b32",
:git/url "https://github.com/clojure/tools.namespace"}
medley/medley {:mvn/version "1.3.0"}
io.github.cognitect-labs/test-runner {:git/url "https://github.com/cognitect-labs/test-runner",
:git/sha "7284cda41fb9edc0f3bc6b6185cfb7138fc8a023"}
borkdude/missing.test.assertions {:git/url "https://github.com/borkdude/missing.test.assertions", :sha "603cb01bee72fb17addacc53c34c85612684ad70"}
dev.nubank/docopt {:mvn/version "0.6.1-fix7"}
testdoc/testdoc {:mvn/version "1.4.1"}
org.clojars.lispyclouds/contajners {:mvn/version "0.0.6"}
borkdude/rewrite-edn {:mvn/version "0.1.0"}
clojure-term-colors/clojure-term-colors {:mvn/version "0.1.0"}
io.aviso/pretty {:mvn/version "1.1.1"}
progrock/progrock {:mvn/version "0.1.2"}
djblue/portal {:mvn/version "0.19.0"}
com.wsscode/cljc-misc {:mvn/version "2021.10.16"}
edn-query-language/eql {:mvn/version "2021.07.18"}
meta-merge/meta-merge {:mvn/version "1.0.0"}
com.exoscale/lingo {:mvn/version "1.0.0-alpha14"}
io.github.swirrl/dogstatsd {:mvn/version "0.1.39"}
org.clojure/algo.monads {:mvn/version "0.1.6"}
io.lambdaforge/datalog-parser {:mvn/version "0.1.9"}
clj-stacktrace/clj-stacktrace {:mvn/version "0.2.8"}
clojure-msgpack/clojure-msgpack {:mvn/version "1.2.1"}
cli-matic/cli-matic {:git/url "https://github.com/l3nz/cli-matic.git", :git/sha "9cd53ba7336363e3d06650dbad413b6f8b06e471"}
aysylu/loom {:mvn/version "1.0.2"}
com.layerware/hugsql-core {:mvn/version "0.5.3"}
com.github.seancorfield/expectations {:mvn/version "2.0.157"}
com.rpl/specter {:mvn/version "1.1.4"}
com.github.askonomm/clarktown {:mvn/version "1.1.2"}
org.clojure/math.numeric-tower {:git/tag "math.numeric-tower-0.0.5", :git/sha "12eb9c5", :git/url "https://github.com/clojure/math.numeric-tower"}
prismatic/schema {:git/url "https://github.com/plumatic/schema"
:git/sha "6846dc7c3a9df5bfd718f68f183c683ce0f621ff"
:git/tag "schema-1.3.0"}
metosin/malli {:git/url "https://github.com/metosin/malli"
:git/sha "588147ef49b2e41c7d12a8aa994b39c1c6fedd99"
:git/tag "0.8.9"}
meander/epsilon {:git/url "https://github.com/noprompt/meander"
:git/sha "55f5ce70e6ef717e95c58260f6bc725d70c0cb6d"}
cc.qbits/auspex {:git/url "https://github.com/mpenet/auspex"
:git/sha "1a9d7427e60e1a434a764aa820d1c53f7e22504a"
:deps/manifest :deps}
exoscale/interceptor {:git/url "https://github.com/exoscale/interceptor"
:git/sha "ca115fe00a0abf3a2f78452ab309c3aa4c00fc4e"
:deps/manifest :deps}
lambdaisland/uri {:git/url "https://github.com/lambdaisland/uri"
:git/sha "ac4f1f9c8e4f45a088db1c6383ce2191c973987c"
:deps/manifest :deps}
clj-commons/fs {:mvn/version "1.6.310"}
postmortem/postmortem {:git/url "https://github.com/athos/Postmortem"
:git/sha "1a29775a3d286f9f6fe3f979c78b6e2bf298d5ba"}
com.github.rawleyfowler/sluj {:git/url "https://github.com/rawleyfowler/sluj"
:git/sha "4a92e772b4e07bf127423448d4140748b5782198"
:deps/manifest :deps}
net.cgrand/xforms {:git/url "https://github.com/cgrand/xforms"
:git/sha "550dbc150a79c6ecc148d8a7e260e10bc36321c6"
:deps/manifest :deps}
prismatic/plumbing {:git/url "https://github.com/plumatic/plumbing",
:git/sha "424bc704f2db422de34269c139a5494314b3a43b"}
org.clj-commons/hickory {:git/url "https://github.com/clj-commons/hickory"
:git/sha "9385b6708ef35f161732d8464b3a3aa57dd79f30"}
com.potetm/fusebox {:git/url "https://github.com/potetm/fusebox"
:git/sha "ac6d6a0a69510b009b3c1bb2247cd110fd9f7246"}
net.sekao/odoyle-rules {:git/url "https://github.com/oakes/odoyle-rules"
:git/sha "0b1d825ec45a998c4d3481dfb292e08ce6a47f0b"}}
:classpath-overrides {org.clojure/clojure nil
org.clojure/spec.alpha nil}}
:clj-nvd
{:extra-deps {clj-nvd/clj-nvd {:git/url "https://github.com/miikka/clj-nvd.git"
:sha "f2ec98699e057a379baf170cb49cf7ad76874a70"}}
:main-opts ["-m" "clj-nvd.core"]}}}
:main-opts ["-m" "clj-nvd.core"]}
:test
{:extra-paths ["test"]
:extra-deps {io.github.cognitect-labs/test-runner
{:git/tag "v0.5.0" :git/sha "b3fd0d2"}
nubank/matcher-combinators {:mvn/version "3.6.0"}}
:main-opts ["-m" "cognitect.test-runner"]
:exec-fn cognitect.test-runner.api/test}
:test-pod
{:extra-paths ["test-resources"]
:main-opts ["-m" "babashka.main" "test-resources/pod.clj"]}}}
;; release

@ -1 +1 @@
Subproject commit e74b8ac05c64efb815153fbfdd2d31e3cad098cb
Subproject commit 2bf9d3c9f15298d7dd9de033674a42f830e23d6f

View file

@ -3,24 +3,24 @@
## Prerequisites
- Install [lein](https://leiningen.org/) for producing uberjars
- Download [GraalVM](https://www.graalvm.org/downloads/). Currently we use *java11-20.3.0*.
- Download [GraalVM](https://www.graalvm.org/downloads/). Currently we use *Oracle GraalVM 24*.
- For Windows, installing Visual Studio 2019 with the "Desktop development
with C++" workload is recommended.
- Set `$GRAALVM_HOME` to the GraalVM distribution directory. On macOS this can look like:
``` shell
export GRAALVM_HOME=~/Downloads/graalvm-ce-java11-20.1.0/Contents/Home
export GRAALVM_HOME=~/Downloads/graalvm-jdk-21.0.0.1/Contents/Home
```
On linux:
``` shell
export GRAALVM_HOME=~/Downloads/graalvm-ce-java11-20.1.0
export GRAALVM_HOME=~/Downloads/graalvm-jdk-21.0.0.1
```
On Windows, from the [Visual Studio 2019 x64 Native Tools Command Prompt](https://github.com/oracle/graal/issues/2116#issuecomment-590470806) or `cmd.exe` (not Powershell):
```
set GRAALVM_HOME=%USERPROFILE%\Downloads\graalvm-ce-java11-20.1.0
set GRAALVM_HOME=%USERPROFILE%\Downloads\graalvm-ce-jdk-21.0.0.1
```
If you are not running from the x64 Native Tools Command Prompt, you will need to set additional environment variables using:
```
@ -33,13 +33,13 @@ NOTE: the babashka repository contains submodules. You need to use the
`--recursive` flag to clone these submodules along with the main repo.
``` shellsession
$ git clone https://github.com/borkdude/babashka --recursive
$ git clone https://github.com/babashka/babashka --recursive
```
To update later on:
``` shellsession
$ git submodule update --recursive
$ git submodule update --init --recursive
```
## Build
@ -62,7 +62,7 @@ take long to complete.
### Alternative: Build inside Docker
To build a Linux version of babashka, you can use `docker build`, enabling the
To build a Linux version of babashka, you can use `docker build`, enabling the
desired features via `--build-arg` like this:
```shell
@ -70,26 +70,31 @@ docker build --build-arg BABASHKA_FEATURE_JDBC=true --target BASE -t bb-builder
container_id=$(docker create bb-builder)
docker cp $container_id:/opt/bb bb # copy to ./bb on the host file system
docker rm $container_id
```
```
NOTE: If you get _Error: Image build request failed with exit status 137_ then
check whether Docker is allowed to use enough memory (e.g. in Docker Desktop
preferences). If it is, then increase the memory GraalVM can use, for example
by adding `--build-arg BABASHKA_XMX="-J-Xmx8g"`
by adding `--build-arg BABASHKA_XMX="-J-Xmx8g"`
(or whatever Docker has available, bigger than the default).
## Windows
Run `script\uberjar.bat` followed by `script\compile.bat`.
## Static
To compile babashka as a static binary for linux, set the `BABASHKA_STATIC`
environment variable to `true`.
## Feature flags
Babashka supports the following feature flags:
| Name | Description | Default |
|--------|----------------------------------------------|----------|
| `BABASHKA_FEATURE_CORE_ASYNC` | Includes the [clojure.core.async](https://github.com/clojure/core.async) library | `true` |
| `BABASHKA_FEATURE_CSV` | Includes the [clojure.data.csv](https://github.com/clojure/data.csv) library | `true` |
| `BABASHKA_FEATURE_JAVA_NET_HTTP` | Includes commonly used classes from the `java.net.http` package | `true` |
| `BABASHKA_FEATURE_JAVA_NIO` | Includes commonly used classes from the `java.nio` package | `true` |
| `BABASHKA_FEATURE_JAVA_TIME` | Includes commonly used classes from the `java.time` package | `true` |
| `BABASHKA_FEATURE_TRANSIT` | Includes the [transit-clj](https://github.com/cognitect/transit-clj) library | `true` |
@ -97,19 +102,26 @@ Babashka supports the following feature flags:
| `BABASHKA_FEATURE_YAML` | Includes the [clj-yaml](https://github.com/clj-commons/clj-yaml) library | `true` |
| `BABASHKA_FEATURE_HTTPKIT_CLIENT` | Includes the [http-kit](https://github.com/http-kit/http-kit) client library | `true` |
| `BABASHKA_FEATURE_HTTPKIT_SERVER` | Includes the [http-kit](https://github.com/http-kit/http-kit) server library | `true` |
| `BABASHKA_FEATURE_CORE_MATCH` | Includes the [clojure.core.match](https://github.com/clojure/core.match) library | `true` |
| `BABASHKA_FEATURE_HICCUP` | Includes the [hiccup](https://github.com/weavejester/hiccup) library | `true` |
| `BABASHKA_FEATURE_TEST_CHECK` | Includes the [clojure.test.check](https://github.com/clojure/test.check) library | `true` |
| `BABASHKA_FEATURE_SPEC_ALPHA` | Includes the [clojure.spec.alpha](https://github.com/clojure/spec.alpha) library (WIP) | `false` |
| `BABASHKA_FEATURE_JDBC` | Includes the [next.jdbc](https://github.com/seancorfield/next-jdbc) library | `false` |
| `BABASHKA_FEATURE_SQLITE` | Includes the [sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) library | `false` |
| `BABASHKA_FEATURE_POSTGRESQL` | Includes the [PostgresSQL](https://jdbc.postgresql.org/) JDBC driver | `false` |
| `BABASHKA_FEATURE_HSQLDB` | Includes the [HSQLDB](http://www.hsqldb.org/) JDBC driver | `false` |
| `BABASHKA_FEATURE_ORACLEDB` | Includes the [Oracle](https://www.oracle.com/database/technologies/appdev/jdbc.html) JDBC driver | `false` |
| `BABASHKA_FEATURE_DATASCRIPT` | Includes [datascript](https://github.com/tonsky/datascript) | `false` |
| `BABASHKA_FEATURE_LANTERNA` | Includes [clojure-lanterna](https://github.com/babashka/clojure-lanterna) | `false` |
| `BABASHKA_FEATURE_LOGGING` | Includes [clojure.tools.logging](https://github.com/clojure/tools.logging) with [taoensso.timbre](https://github.com/ptaoussanis/timbre) as the default implementation| `true` |
| `BABASHKA_FEATURE_PRIORITY_MAP` | Includes [clojure.data.priority-map](https://github.com/clojure/data.priority-map) | `true` |
Note that httpkit server is currently experimental, the feature flag could be toggled to `false` in a future release.
To disable all of the above features, you can set `BABASHKA_LEAN` to `true`.
Here is an [example
commit](https://github.com/borkdude/babashka/commit/13f65f05aeff891678e88965d9fbd146bfa87f4e)
commit](https://github.com/babashka/babashka/commit/13f65f05aeff891678e88965d9fbd146bfa87f4e)
that can be used as a checklist when you want to create a new feature flag.
### HyperSQL

77
doc/companies.md Normal file
View file

@ -0,0 +1,77 @@
# Companies using babashka
Is your company using babashka? Mention it in
[this](https://github.com/babashka/babashka/discussions/1026) discussion to get
yours listed!
If your company is using clj-kondo as well, mention it
[here](https://github.com/clj-kondo/clj-kondo/discussions/1397).
If your company is sponsoring, it will be listed first (in order of sponsorship
size) with a logo and hiring link (if applicable)!
## Sponsoring companies
### [Adgoji](https://www.adgoji.com/)
![adgoji](https://images.squarespace-cdn.com/content/v1/5e5f79dcaeba9e2b64132975/1585646545419-5DOZS4SVO5AU0MFA3ZB3/adgoji_logofull.png?format=300w)
### [Nubank](https://nubank.com.br/)
<img src="https://upload.wikimedia.org/wikipedia/commons/f/f7/Nubank_logo_2021.svg" width="200">
Sponsoring via [Cognitect](https://www.cognitect.com/).
### [Nextjournal](https://nextjournal.com/)
<img src="https://cdn.nextjournal.com/images/nextjournal-logo.svg" width="300">
### [ATA](https://ata-llc.com) - [hiring](https://www.ziprecruiter.com/c/ATA-LLC/Jobs)
<img width="250" alt="Screen Shot 2022-01-07 at 21 21 00" src="https://user-images.githubusercontent.com/284934/148602984-6c333501-505b-4692-ad7a-62383510fb9a.png">
### [Cognician](https://www.cognician.com)
<img src="https://avatars.githubusercontent.com/u/1450774?s=150&v=4">
### [Fluent](https://fluent.to)
<img src="https://uploads-ssl.webflow.com/600fdbbcf0cbfe02f1a48030/600fdf0fffe881c3e8e298f4_Fluent%20logotype-p-500.png" width="300">
### [180seg](https://www.180s.com.br)
<img src="https://avatars.githubusercontent.com/u/75583439?s=200&v=4">
### [Dr. Evidence](https://www.drevidence.com/)
<img src="https://user-images.githubusercontent.com/284934/138914250-f447ca3d-c1c1-4c60-bfaf-9000541d4a0d.png" width="325">
### [EnjoyHQ](https://getenjoyhq.com/)
<img src="https://getenjoyhq.com/wp-content/uploads/2021/07/EnjoyHQ_uz-blue_cropp.svg" width="300">
### [Epic Castle](https://epiccastle.io)
<img src="https://epiccastle.io/images/logo.png" width="100">
## Companies
- [AWS](https://aws.amazon.com/)
- [Barracuda](https://www.barracuda.com/)
- [Datil](https://datil.com/)
- [Deon Digital](https://www.deondigital.com/)
- [Fluent](https://fluent.to/)
- [Fluree](https://flur.ee/)
- [Hi](https://www.hi.group/)
- [Juxt](https://www.juxt.pro/)
- [Kleene](https://www.kleene.ai/)
- [Latacora](https://www.latacora.com/)
- [Metosin](https://www.metosin.fi/en/)
- [Nextdoc](https://www.nextdoc.io/)
- [PractiTest](https://www.practitest.com/)
- [Reify Health](https://www.reifyhealth.com/)
- [Schnaq](https://schnaq.com/)
- [Splash Financial](https://www.splashfinancial.com/)
- [TOYOKUMO, Inc.](https://toyokumo.co.jp/)
- [Xcoo](https://xcoo.com/)
- [Zero one group](https://zero-one-group.com/)

View file

@ -1,13 +1,53 @@
# Developing Babashka
You need [lein](https://leiningen.org/) for running JVM tests and/or producing uberjars. For building binaries you need GraalVM. Currently we use java11-20.3.0.
## Workflow
### Start with an issue before writing code
Before writing any code, please create an issue first that describes the problem
you are trying to solve with alternatives that you have considered. A little bit
of prior communication can save a lot of time on coding. Keep the problem as
small as possible. If there are two problems, make two issues. We discuss the
issue and if we reach an agreement on the approach, it's time to move on to a
PR.
### Follow up with a pull request
Post a corresponding PR with the smallest change possible to address the
issue. Then we discuss the PR, make changes as needed and if we reach an
agreement, the PR will be merged.
### Tests
Each bug fix, change or new feature should be tested well to prevent future
regressions.
If possible, tests should use public APIs. If the bug is in private/internal
code, try to trigger it from a public API.
### Force-push
Please do not use `git push --force` on your PR branch for the following
reasons:
- It makes it more difficult for others to contribute to your branch if needed.
- It makes it harder to review incremental commits.
- Links (in e.g. e-mails and notifications) go stale and you're confronted with:
this code isn't here anymore, when clicking on them.
- CircleCI doesn't play well with it: it might try to fetch a commit which
doesn't exist anymore.
- Your PR will be squashed anyway.
## Requirements
You need [lein](https://leiningen.org/) for running JVM tests and/or producing uberjars. For building binaries you need GraalVM. Currently we use Oracle GraalVM 24.
## Clone repository
To work on Babashka itself make sure Git submodules are checked out.
``` shellsession
$ git clone https://github.com/borkdude/babashka --recursive
$ git clone https://github.com/babashka/babashka --recursive
```
To update later on:
@ -44,12 +84,76 @@ Test the native version:
## Tests for Libraries
Babashka runs tests of libraries that are compatible with it through
`script/run_lib_tests`. To add tests for a new library, do the following:
`script/run_lib_tests`.
You can check out [this
commit](https://github.com/babashka/babashka/commit/8d9ac4c4d18a5588a4a258a61a9db3835b4f4e5c)
for how to add tests for a library that needs no changes to its tests.
The library is cloned as a git dependency, which also includes the tests, that are then added to the test's classpath and ran.
If a library's tests needs changes, we copy the tests using the `add-libtest.clj` script. Examples:
```sh
# To add tests for a new library on clojars
script/add-libtest.clj com.exoscale/lingo -t
# To add tests for a new library that is git based only
script/add-libtest.clj '{borkdude/carve {:git/url "https://github.com/borkdude/carve" :sha "df552797a198b6701fb2d92390fce7c59205ea77"}}' -t
# There are a number of options for specifying how to copy tests
script/add-libtest.clj -h
```
If the library you want to add doesn't work automatically, you can manually do the following:
* Add an entry for the library in `deps.edn` under the `:lib-tests` alias.
* Create a directory for the library in `test-resources/lib_tests/` and copy its tests to there.
* Add an entry in `run_all_libtests.clj` to run the added test namespaces.
* Add a manual lib entry using `add-libtest.clj` e.g. `script/add-libtest.clj http-kit/http-kit -m '{:test-namespaces [httpkit.client-test]}'`.
* Run the tests `script/lib_tests/run_all_libtests NS1 NS2`
Note: If you have to modify any test file or configuration to have it work with
bb, add an inline comment with prefix `BB-TEST-PATCH:` explaining what you did.
## Windows
We have corresponding `.bat` scripts for Windows, examples from a CMD Shell:
```shell
script\test.bat
script\run_lib_tests.bat
set BABASHKA_TEST_ENV=native
script\run_lib_tests.bat
```
### Enable Windows Symbolic Links
You'll need to **enable symbolic links**.
You must do this before you git clone babashka otherwise some tests will fail.
There seems to be many ways to achieve this; I found the following worked from PowerShell:
```shell
Install-Module -Name Carbon -Force
Import-Module Carbon
Grant-CPrivilege -Identity lee -Privilege SeCreateSymbolicLinkPrivilege
```
You'll need to reboot:
```shell
shutdown /r /t 0
```
After reboot, verify the new privilege via:
```shell
whoami /priv
```
Test if you can create a symbolic link via:
```
mklink foofoo barbar
```
> **TIP**: Symbolic links are not supported in some folder-sharing technologies.
For example, if you are running Windows as a VirtualBox guest, sharing babashka
source folders from your host OS will not share the symbolic links as symbolic links.
One solution is to re-clone babashka to a non-shared folder on Windows.
### Git for Windows
Install [Git for Windows](https://gitforwindows.org/).
It includes a version of `cat` that babashka tests currently rely on.
## Build
@ -66,7 +170,7 @@ Findings from various experiments with JDBC drivers in babashka:
20MB to the binary. Since sqlite has a nice CLI we could also just shell out
to it (there's an example in the examples dir). We could also build a
`babashka.sqlite` namespace around the CLI maybe similar to
`babashka.curl`. See [#385](https://github.com/borkdude/babashka/issues/385)
`babashka.curl`. See [#385](https://github.com/babashka/babashka/issues/385)
for details.
- HSQLDB: easy to get going with Graalvm. Adds 10 MB to the binary. It's under a
feature flag right now on master. See [build.md](build.md) for details. Derby
@ -75,17 +179,47 @@ Findings from various experiments with JDBC drivers in babashka:
got it to crash. 4800m did work, but it took 17 minutes (compared to 10
minutes without this feature).
- MySQL / MariaDB: can't get those to work yet. Work in progress in issue
[#387](https://github.com/borkdude/babashka/issues/387).
[#387](https://github.com/babashka/babashka/issues/387).
To progress work on sqlite and mySQL, I need a working Clojure example. If you
want to contribute, consider making a an example Clojure GraalVM CLI that puts
something in a sqlite / mysql DB and reads something from it.
## Design decisions
Some design decisions:
### bb.edn
- We chose the name `bb.edn` (rather than `babashka.edn`) for the configuration
file based on this
[poll](https://twitter.com/borkdude/status/1374720217608302595). The name `bb`
combined with `.edn` is not likely to cause conflicts with other tools.
- We did not choose to put the babashka configuration in `deps.edn` to keep bb config isolated (and more flexible) and also support it in projects that do not use `deps.edn`
### .babashka
- Rather than naming the home config dir `~/.bb` we chose `~/.babashka` to
prevent conflicts with other global tools. We might introduce a project local
`~/.babashka` directory for storing caches or whatnot too.
### Tasks
Some of these design decisions were formed in [these discussions](https://github.com/babashka/babashka/discussions/779).
- Tasks do not allow passing arguments to dependent tasks, other than by rebinding `*command-line-args*` (see discussion).
- Does the list of dependencies need to be dynamic? No, see discussion (same reason as args)
- bb &lt;foo&gt; is resolved as file > task > bb subcommand. Shadowing future subcommand is a problem that a user can solve by renaming a task or file. (same as lein aliases). Also see Conflicts.
- It is a feature that tasks are defined as top-level vars (instead of local let-bound symbols). This plays well with the Gilardi scenario, e.g. here: https://github.com/babashka/babashka.github.io/blob/ad276625f6c41f269d19450f236cb54cab2591e1/bb.edn#L7.
- The parallel option trickles down into run calls. People who use parallel will be confused if its dropped magically, people who dont use parallel wont notice anything either way so it doesnt matter
## Binary size
Keep notes here about how adding libraries and classes to Babashka affects the binary size.
We're registering the size of the macOS binary (as built on CircleCI).
2021/06/13 Upgrading from GraalvM 21.0 to 21.1 added roughly 3mb. Issue [here](https://github.com/oracle/graal/issues/3280#issuecomment-846402115).
2020/10/30 Without httpkit client+server: 68113436. With: 69503316 = 1390kb added.
2020/05/01 Removed `next.jdbc` and postgres JDBC driver: 48304980

5
doc/fly_io/Dockerfile Normal file
View file

@ -0,0 +1,5 @@
FROM babashka/babashka:0.8.2
COPY example.clj /
ENTRYPOINT bb /example.clj

19
doc/fly_io/README.md Normal file
View file

@ -0,0 +1,19 @@
# Deploying a babashka app to fly.io
[Fly.io](https://fly.io/) is a service that can run full stack apps with minimal
configuration. If you like the ease of Heroku, you might like fly.io and perhaps
even better! This document shows how to get a minimal babashka application up
and running on `fly.io`.
In `example.clj` we start an http-kit web server which spits out some HTML. You
can run this locally by invoking `bb example.clj` from the command line.
To get this site running on `fly.io`, you need to
[install](https://fly.io/docs/getting-started/installing-flyctl/) and [log
in](https://fly.io/docs/getting-started/log-in-to-fly/).
Then run `flyctl launch` to create a new application. After making changes, you
can re-deploy the site with `flyctl deploy`.
That's it! See this
[tweet](https://twitter.com/borkdude/status/1526175120825401344) for a demo.

21
doc/fly_io/example.clj Normal file
View file

@ -0,0 +1,21 @@
(ns example
(:require [hiccup2.core :refer [html]]
[org.httpkit.server :refer [run-server]]))
(def port (or (some-> (System/getenv "PORT")
parse-long)
8092))
(run-server
(fn [_]
{:body
(str (html
[:html
[:body
[:h1 "Hello world!"]
[:p (str "This site is running with babashka v"
(System/getProperty "babashka.version"))]]]))})
{:port port})
(println "Site running on port" port)
@(promise)

41
doc/fly_io/fly.toml Normal file
View file

@ -0,0 +1,41 @@
# fly.toml file generated for shy-sound-2847 on 2022-05-16T14:12:38+02:00
app = "shy-sound-2847"
kill_signal = "SIGINT"
kill_timeout = 5
processes = []
[env]
PORT = "8092"
[experimental]
allowed_public_ports = []
auto_rollback = true
[[services]]
http_checks = []
internal_port = 8092
processes = ["app"]
protocol = "tcp"
script_checks = []
[services.concurrency]
hard_limit = 25
soft_limit = 20
type = "connections"
[[services.ports]]
force_https = true
handlers = ["http"]
port = 80
[[services.ports]]
handlers = ["tls", "http"]
port = 443
[[services.tcp_checks]]
grace_period = "1s"
interval = "15s"
restart_limit = 0
timeout = "2s"

99
doc/libraries.csv Normal file
View file

@ -0,0 +1,99 @@
maven-name,git-url
aero/aero,http://github.com/juxt/aero
amperity/vault-clj,https://github.com/amperity/vault-clj
aysylu/loom,https://github.com/aysylu/loom
babashka/babashka.curl,https://github.com/babashka/babashka.curl
better-cond/better-cond,https://github.com/Engelberg/better-cond
borkdude/deps,https://github.com/borkdude/deps.clj
borkdude/missing.test.assertions,https://github.com/borkdude/missing.test.assertions
borkdude/rewrite-edn,https://github.com/borkdude/rewrite-edn
camel-snake-kebab/camel-snake-kebab,https://github.com/clj-commons/camel-snake-kebab
cc.qbits/auspex,https://github.com/mpenet/auspex
cheshire/cheshire,https://github.com/dakrone/cheshire
circleci/bond,https://github.com/circleci/bond
cli-matic/cli-matic,https://github.com/l3nz/cli-matic.git
clj-commons/clj-yaml,https://github.com/clj-commons/clj-yaml
clj-commons/fs,https://github.com/clj-commons/fs
clj-commons/multigrep,https://github.com/clj-commons/multigrep
clj-stacktrace/clj-stacktrace,https://github.com/mmcgrana/clj-stacktrace
clojure-csv/clojure-csv,https://github.com/davidsantiago/clojure-csv
clojure-msgpack/clojure-msgpack,https://github.com/edma2/clojure-msgpack
clojure-term-colors/clojure-term-colors,https://github.com/trhura/clojure-term-colors
com.exoscale/lingo,https://github.com/exoscale/lingo
com.github.askonomm/clarktown,https://github.com/askonomm/clarktown
com.github.rawleyfowler/sluj,https://github.com/rawleyfowler/sluj
com.github.seancorfield/expectations,https://github.com/clojure-expectations/clojure-test
com.github.seancorfield/honeysql,https://github.com/seancorfield/honeysql
com.grammarly/omniconf,https://github.com/grammarly/omniconf
com.layerware/hugsql-core,
com.rpl/specter,https://github.com/redplanetlabs/specter
com.stuartsierra/component,https://github.com/stuartsierra/component
com.stuartsierra/dependency,https://github.com/stuartsierra/dependency
com.wsscode/cljc-misc,https://github.com/wilkerlucio/cljc-misc
comb/comb,https://github.com/weavejester/comb
cprop/cprop,https://github.com/tolitius/cprop
crispin/crispin,https://github.com/dunaj-project/crispin
dev.nubank/docopt,https://github.com/nubank/docopt.clj
djblue/portal,https://github.com/djblue/portal
doric/doric,https://github.com/joegallo/doric
douglass/clj-psql,https://github.com/DarinDouglass/clj-psql
edn-query-language/eql,https://github.com/edn-query-language/eql
environ/environ,https://github.com/weavejester/environ
exoscale/coax,https://github.com/exoscale/coax
exoscale/interceptor,https://github.com/exoscale/interceptor
expound/expound,https://github.com/bhb/expound
failjure/failjure,https://github.com/adambard/failjure
ffclj/ffclj,https://github.com/luissantos/ffclj
gaka/gaka,https://github.com/cdaddr/gaka
hato/hato,https://github.com/gnarroway/hato
henryw374/cljc.java-time,https://github.com/henryw374/cljc.java-time
hiccup/hiccup,http://github.com/weavejester/hiccup
honeysql/honeysql,https://github.com/seancorfield/honeysql
http-kit/http-kit,https://github.com/http-kit/http-kit
integrant/integrant,https://github.com/weavejester/integrant
io.aviso/pretty,https://github.com/AvisoNovate/pretty
io.github.cognitect-labs/test-runner,https://github.com/cognitect-labs/test-runner
io.github.swirrl/dogstatsd,https://github.com/swirrl/dogstatsd
io.github.technomancy/limit-break,https://github.com/technomancy/limit-break
io.helins/binf,https://github.com/helins/binf.cljc
io.lambdaforge/datalog-parser,https://github.com/lambdaforge/datalog-parser
io.replikativ/hasch,https://github.com/replikativ/hasch
java-http-clj/java-http-clj,http://www.github.com/schmee/java-http-clj
lambdaisland/regal,https://github.com/lambdaisland/regal
listora/again,https://github.com/liwp/again
markdown-clj/markdown-clj,https://github.com/yogthos/markdown-clj
meander/epsilon,https://github.com/noprompt/meander
medley/medley,https://github.com/weavejester/medley
meta-merge/meta-merge,https://github.com/weavejester/meta-merge
metosin/malli,https://github.com/metosin/malli
minimallist/minimallist,https://github.com/green-coder/minimallist
mvxcvi/arrangement,https://github.com/greglook/clj-arrangement
net.cgrand/xforms,https://github.com/cgrand/xforms
orchestra/orchestra,https://github.com/jeaye/orchestra
org.babashka/spec.alpha,https://github.com/babashka/spec.alpha
org.clj-commons/clj-http-lite,https://github.com/clj-commons/clj-http-lite
org.clj-commons/digest,https://github.com/clj-commons/clj-digest
org.clojars.askonomm/ruuter,https://github.com/askonomm/ruuter
org.clojars.lispyclouds/contajners,https://github.com/lispyclouds/contajners
org.clojure/algo.monads,https://github.com/clojure/algo.monads
org.clojure/core.match,https://github.com/clojure/core.match
org.clojure/data.csv,https://github.com/clojure/data.csv
org.clojure/data.generators,https://github.com/clojure/data.generators
org.clojure/data.json,https://github.com/clojure/data.json
org.clojure/data.zip,https://github.com/clojure/data.zip
org.clojure/math.combinatorics,https://github.com/clojure/math.combinatorics
org.clojure/math.numeric-tower,https://github.com/clojure/math.numeric-tower
org.clojure/test.check,https://github.com/clojure/test.check
org.clojure/tools.gitlibs,https://github.com/clojure/tools.gitlibs
org.clojure/tools.namespace,https://github.com/clojure/tools.namespace
postmortem/postmortem,https://github.com/athos/Postmortem
prismatic/schema,https://github.com/plumatic/schema
progrock/progrock,https://github.com/weavejester/progrock
reifyhealth/specmonstah,https://github.com/reifyhealth/specmonstah
rewrite-clj/rewrite-clj,https://github.com/clj-commons/rewrite-clj
rm-hull/jasentaa,https://github.com/rm-hull/jasentaa
selmer/selmer,https://github.com/yogthos/Selmer
slingshot/slingshot,https://github.com/scgilardi/slingshot
table/table,https://github.com/cldwalker/table
testdoc/testdoc,https://github.com/liquidz/testdoc
version-clj/version-clj,https://github.com/xsc/version-clj
1 maven-name git-url
2 aero/aero http://github.com/juxt/aero
3 amperity/vault-clj https://github.com/amperity/vault-clj
4 aysylu/loom https://github.com/aysylu/loom
5 babashka/babashka.curl https://github.com/babashka/babashka.curl
6 better-cond/better-cond https://github.com/Engelberg/better-cond
7 borkdude/deps https://github.com/borkdude/deps.clj
8 borkdude/missing.test.assertions https://github.com/borkdude/missing.test.assertions
9 borkdude/rewrite-edn https://github.com/borkdude/rewrite-edn
10 camel-snake-kebab/camel-snake-kebab https://github.com/clj-commons/camel-snake-kebab
11 cc.qbits/auspex https://github.com/mpenet/auspex
12 cheshire/cheshire https://github.com/dakrone/cheshire
13 circleci/bond https://github.com/circleci/bond
14 cli-matic/cli-matic https://github.com/l3nz/cli-matic.git
15 clj-commons/clj-yaml https://github.com/clj-commons/clj-yaml
16 clj-commons/fs https://github.com/clj-commons/fs
17 clj-commons/multigrep https://github.com/clj-commons/multigrep
18 clj-stacktrace/clj-stacktrace https://github.com/mmcgrana/clj-stacktrace
19 clojure-csv/clojure-csv https://github.com/davidsantiago/clojure-csv
20 clojure-msgpack/clojure-msgpack https://github.com/edma2/clojure-msgpack
21 clojure-term-colors/clojure-term-colors https://github.com/trhura/clojure-term-colors
22 com.exoscale/lingo https://github.com/exoscale/lingo
23 com.github.askonomm/clarktown https://github.com/askonomm/clarktown
24 com.github.rawleyfowler/sluj https://github.com/rawleyfowler/sluj
25 com.github.seancorfield/expectations https://github.com/clojure-expectations/clojure-test
26 com.github.seancorfield/honeysql https://github.com/seancorfield/honeysql
27 com.grammarly/omniconf https://github.com/grammarly/omniconf
28 com.layerware/hugsql-core
29 com.rpl/specter https://github.com/redplanetlabs/specter
30 com.stuartsierra/component https://github.com/stuartsierra/component
31 com.stuartsierra/dependency https://github.com/stuartsierra/dependency
32 com.wsscode/cljc-misc https://github.com/wilkerlucio/cljc-misc
33 comb/comb https://github.com/weavejester/comb
34 cprop/cprop https://github.com/tolitius/cprop
35 crispin/crispin https://github.com/dunaj-project/crispin
36 dev.nubank/docopt https://github.com/nubank/docopt.clj
37 djblue/portal https://github.com/djblue/portal
38 doric/doric https://github.com/joegallo/doric
39 douglass/clj-psql https://github.com/DarinDouglass/clj-psql
40 edn-query-language/eql https://github.com/edn-query-language/eql
41 environ/environ https://github.com/weavejester/environ
42 exoscale/coax https://github.com/exoscale/coax
43 exoscale/interceptor https://github.com/exoscale/interceptor
44 expound/expound https://github.com/bhb/expound
45 failjure/failjure https://github.com/adambard/failjure
46 ffclj/ffclj https://github.com/luissantos/ffclj
47 gaka/gaka https://github.com/cdaddr/gaka
48 hato/hato https://github.com/gnarroway/hato
49 henryw374/cljc.java-time https://github.com/henryw374/cljc.java-time
50 hiccup/hiccup http://github.com/weavejester/hiccup
51 honeysql/honeysql https://github.com/seancorfield/honeysql
52 http-kit/http-kit https://github.com/http-kit/http-kit
53 integrant/integrant https://github.com/weavejester/integrant
54 io.aviso/pretty https://github.com/AvisoNovate/pretty
55 io.github.cognitect-labs/test-runner https://github.com/cognitect-labs/test-runner
56 io.github.swirrl/dogstatsd https://github.com/swirrl/dogstatsd
57 io.github.technomancy/limit-break https://github.com/technomancy/limit-break
58 io.helins/binf https://github.com/helins/binf.cljc
59 io.lambdaforge/datalog-parser https://github.com/lambdaforge/datalog-parser
60 io.replikativ/hasch https://github.com/replikativ/hasch
61 java-http-clj/java-http-clj http://www.github.com/schmee/java-http-clj
62 lambdaisland/regal https://github.com/lambdaisland/regal
63 listora/again https://github.com/liwp/again
64 markdown-clj/markdown-clj https://github.com/yogthos/markdown-clj
65 meander/epsilon https://github.com/noprompt/meander
66 medley/medley https://github.com/weavejester/medley
67 meta-merge/meta-merge https://github.com/weavejester/meta-merge
68 metosin/malli https://github.com/metosin/malli
69 minimallist/minimallist https://github.com/green-coder/minimallist
70 mvxcvi/arrangement https://github.com/greglook/clj-arrangement
71 net.cgrand/xforms https://github.com/cgrand/xforms
72 orchestra/orchestra https://github.com/jeaye/orchestra
73 org.babashka/spec.alpha https://github.com/babashka/spec.alpha
74 org.clj-commons/clj-http-lite https://github.com/clj-commons/clj-http-lite
75 org.clj-commons/digest https://github.com/clj-commons/clj-digest
76 org.clojars.askonomm/ruuter https://github.com/askonomm/ruuter
77 org.clojars.lispyclouds/contajners https://github.com/lispyclouds/contajners
78 org.clojure/algo.monads https://github.com/clojure/algo.monads
79 org.clojure/core.match https://github.com/clojure/core.match
80 org.clojure/data.csv https://github.com/clojure/data.csv
81 org.clojure/data.generators https://github.com/clojure/data.generators
82 org.clojure/data.json https://github.com/clojure/data.json
83 org.clojure/data.zip https://github.com/clojure/data.zip
84 org.clojure/math.combinatorics https://github.com/clojure/math.combinatorics
85 org.clojure/math.numeric-tower https://github.com/clojure/math.numeric-tower
86 org.clojure/test.check https://github.com/clojure/test.check
87 org.clojure/tools.gitlibs https://github.com/clojure/tools.gitlibs
88 org.clojure/tools.namespace https://github.com/clojure/tools.namespace
89 postmortem/postmortem https://github.com/athos/Postmortem
90 prismatic/schema https://github.com/plumatic/schema
91 progrock/progrock https://github.com/weavejester/progrock
92 reifyhealth/specmonstah https://github.com/reifyhealth/specmonstah
93 rewrite-clj/rewrite-clj https://github.com/clj-commons/rewrite-clj
94 rm-hull/jasentaa https://github.com/rm-hull/jasentaa
95 selmer/selmer https://github.com/yogthos/Selmer
96 slingshot/slingshot https://github.com/scgilardi/slingshot
97 table/table https://github.com/cldwalker/table
98 testdoc/testdoc https://github.com/liquidz/testdoc
99 version-clj/version-clj https://github.com/xsc/version-clj

View file

@ -5,29 +5,526 @@ you have anything to add. Also see
[#babashka](https://twitter.com/hashtag/babashka?src=hashtag_click&f=live) on
Twitter.
## 2023-05 ([Twitter](https://twitter.com/search?q=(%23babashka%20OR%20babashka)%20since%3A2023-05-01%20until%3A2023-06-01&src=typed_query&f=live), [Mastodon](https://mastodon.social/tags/babashka))
### Releases
1.3.178
Mostly a boring maintenance release with lib upgrades!
### Events
- [Babashka-conf](https://babashka.org/conf/) is happening June 10th in
Berlin. Only a few tickets left! See the [schedule](https://babashka.org/conf/schedule.html). Also you can buy a [conf t-shirt](https://www.etsy.com/listing/1475981599/babashka-conf-berlin-2023-t-shirt) now! See Nikita wearing it [here](https://twitter.com/nikitonsky/status/1658066530800742400)!
Thanks to conference sponsors:
<img src="https://pbs.twimg.com/media/Fw5h-0_XwA4DTIj?format=jpg&name=medium" width="200px">
- Babashka is going to the [Strange Loop](https://www.thestrangeloop.com/) conference!
### Projects
- [beep-boop](https://github.com/pesterhazy/beep-boop): Audible and visual feedback for test runs
- [panas.example](https://github.com/keychera/panas.example): All htmx examples ported to babashka!
- [utility-scripts](https://github.com/somecho/utility-scripts): A collection of helper scripts for Clojure, Java, Ledger and Taskwarrior. Written in Clojure
- [bb-scripts](https://github.com/techconative/bb-scripts): Babashka scripts for common utilities
- [Launching bb tasks from emacs](https://mastodon.social/@mykhaylo@fosstodon.org/110456087708592838)
### Articles
- [Clojure in security: Docker](https://www.juxt.pro/blog/clojure-in-docker/): mentions babashka and clj-kondo
- [Changing my mind: Converting a script from bash to Babashka](https://blog.agical.se/en/posts/changing-my-mind--converting-a-script-from-bash-to-babashka/)
- [How to create a really simple ClojureCLR dependency tool](https://blog.agical.se/en/posts/how-to-create-a-really-simple-clojureclr-dependency-tool/) with babashka
- [Making a resume with Node.js babashka (nbb)](https://yogthos.net/posts/2023-05-12-nbb-resume.html)
## 2023-04 ([Twitter](https://twitter.com/search?q=(%23babashka%20OR%20babashka)%20since%3A2023-04-01%20until%3A2023-05-01&src=typed_query&f=live), [Mastodon](https://mastodon.social/tags/babashka))
[Babashka-conf](https://babashka.org/conf/) is happening June 10th in
Berlin. Save the date and/or submit your babashka/clojure-related talk or workshop
in the CfP!
### Releases
1.3.177
Biggest highlight: `bb.edn` is now respected relative of a script, no matter the directory you invoke it from! See [docs](https://book.babashka.org/#_script_adjacent_bb_edn).
### Projects
- [babashka-dl](https://github.com/mjhika/babashka-dl): simple install script for babashka on windows
- [instaparse-bb](https://github.com/babashka/instaparse-bb): Use instaparse from babashka, a new release
### Videos
- [Learning clojure w/ @lispyclouds](https://youtu.be/uBTRLBU-83A): a stream with teej_dv, a neovim core dev
## 2023-03 ([Twitter](https://twitter.com/search?q=(%23babashka%20OR%20babashka)%20since%3A2023-03-01%20until%3A2023-04-01&src=typed_query&f=top), [Mastodon](https://mastodon.social/tags/babashka))
### Releases
1.3.176, 1.3.175, 1.2.174:
Biggest highlight: Switch to GraalVM 19 and enable virtual threads!
### Videos
- [Blambda! The sound of babashka and AWS colliding](https://pitch.com/public/03fa9c7e-2b0e-45fb-8a22-d4a4d4d79d24), by Josh Glover from Pitch!
### Projects
- [babashka.json](https://github.com/babashka/json): JSON abstraction library
- [martian](https://github.com/oliyh/martian) is now babashka compatible!
- [panas.reload](https://github.com/keychera/panas.reload): a hot reload for babashka serving html+css (or htmx)
- [cljs-exif-reader](https://git.sr.ht/~rwv/cljs-exif-reader): Extract information from TIFF and JPEG images (works in babashka, despite the name)
### Jobs
- Write babashka at [Cognician](https://twitter.com/RobStuttaford/status/1641694501793038336)!
## 2023-02 ([Twitter](https://twitter.com/search?q=(%23babashka%20OR%20babashka)%20since%3A2023-02-01%20until%3A2023-03-01&src=typed_query&f=live), [Mastodon](https://mastodon.social/tags/babashka))
## Releases
1.1.173: mostly bugfixes
### Articles
- [A technique for live coding simple web pages](https://github.com/whacked/cow/blob/main/a%20technique%20for%20live%20coding%20simple%20web%20pages.md) with babashka
### Videos
- [Stockholm Clojure Meetup Feb 23: Blambda! The sound of Babashka and Lambda colliding](https://www.youtube.com/watch?v=NfgYon96dsE)
### Projects
- [debux](https://github.com/philoskim/debux) is now babaskha-compatible
- [lines-of-code-bb](https://github.com/matthewdowney/linesofcode-bb): Babashka script to count lines of Clojure code, docs, comments, and more
- [deps-try](https://github.com/eval/deps-try): a babashka-script to try out Clojure libraries in rebel-readline
- [bb-dialog](https://github.com/pixelated-noise/bb-dialog) adds support for `--treeview`
- [A duckduck go CLI with babashka and (bbl)gum](https://mastodon.me.uk/@choffee/109845697304457129)
- [babashka http-client](https://github.com/babashka/http-client) now supports multipart uploads
- [sublime-pretty-edn](https://github.com/oakmac/sublime-pretty-edn): Format, Validate, Minify EDN files in Sublime Text
- [Play console tetris in babashka!](https://twitter.com/borkdude/status/1628473136969576449)
- [kaocha test runner](https://github.com/lambdaisland/kaocha) became babashka compatible!
## 2023-01 ([Twitter](https://twitter.com/search?q=%28%23babashka%20OR%20babashka%29%20until%3A2023-02-01%20since%3A2023-01-01&src=typed_query&f=live), [Mastodon](https://mastodon.social/tags/babashka))
### Releases
New releases in the past month: 1.0.170 - 1.1.173
Release highlights:
- Support for `data_readers.clj(c)`
- Include [http-client](https://github.com/babashka/http-client) as built-in library
- Compatibility with [clojure.tools.namespace.repl/refresh](https://github.com/clojure/tools.namespace)
- Compatibility with [clojure.java.classpath](https://github.com/clojure/java.classpath) (and other libraries which rely on `java.class.path` and `RT/baseLoader`)
- Compatibility with [eftest](https://github.com/weavejester/eftest) test runner (see demo)
- Compatibility with [cljfmt](https://github.com/weavejester/cljfmt)
- Support for `*loaded-libs*` and `(loaded-libs)`
- Support `add-watch` on vars (which adds compatibility with `potemkin.namespaces`)
- BREAKING: make printing of script results explicit with `--prn`
### Events
- [Babashka Workshop](https://clojure.stream/workshops/babashka) at ClojureStream with Rahul De
- [Blambda! The sound of Babashka and Lambda colliding](https://www.meetup.com/sthlm-clj/events/291204199/?utm_medium=referral&utm_campaign=share-btn_savedevents_share_modal&utm_source=twitter): sthlm.clj (Stockholm, Sweden)
### Articles
- [Babooka: write command line Clojure](https://www.braveclojure.com/quests/babooka/) by Daniel Higginbotham
- [Blambda analyses sites](https://jmglov.net/blog/2023-01-04-blambda-analyses-sites.html) by Josh Glover
- [Babashka: How GraalVM Helped Create a Fast-Starting Scripting Environment for Clojure](https://logico-jp.io/2023/01/07/babashka-how-graalvm-helped-create-a-fast-starting-scripting-environment-for-clojure/) in Japanese
- [The wizard of HOP - How we built the web based HOP CLI Settings Editor using Babashka and Scittle](https://www.gethop.dev/post/the-wizard-of-hop-how-we-built-the-web-based-hop-cli-settings-editor-using-babashka-and-scittle) by Bingen Galartza
- [Simple TUIs with Babashka and Gum](https://rattlin.blog/bbgum.html) by Rattlin.blog
- [Babashka And Dialog Part Ii: Announcing The Bb-Dialog Library](https://www.pixelated-noise.com/blog/2023/01/20/bb-dialog-announcement/index.html) by A.C. Danvers
- [Re-Writing a GlobalProtect OpenConnect VPN Connect script in Babashka](https://tech.toryanderson.com/2023/01/14/re-writing-a-globalprotect-openconnect-vpn-connect-script-in-babashka/) by Tory Anderson
### Projects
Projects that were new, had updates or were made compatible with babashka:
- [asdf-babashka](https://github.com/pitch-io/asdf-babashka): babashka plugin for the asdf version manager
- [babashka-htmx-todoapp](https://github.com/prestancedesign/babashka-htmx-todoapp): Quick example of a todo list SPA using Babashka and HTMX
- [bblgum](https://github.com/lispyclouds/bblgum): An extremely tiny and simple wrapper around charmbracelet/gum
- [bb-dialog](https://github.com/pixelated-noise/bb-dialog): A simple wrapper library for working with dialog from Babashka
- [carve](https://github.com/borkdude/carve): Remove unused Clojure vars
- [chr](https://github.com/ThaddeusJiang/chr): native commands history report for the default terminal users
- [clj-kondo-bb](https://github.com/clj-kondo/clj-kondo-bb): Invoke clj-kondo from babashka scripts!
- [cljfmt](https://github.com/weavejester/cljfmt): A tool for formatting Clojure code
- [drepl](https://github.com/claytn/drepl): Node JS dependency-repl. The node repl you already know with easy library installations
- [instaparse-bb](https://github.com/babashka/instaparse-bb): Wrapper library aroud pod-babashka-instaparse
- [lein2deps](https://github.com/borkdude/lein2deps): Lein project.clj to deps.edn converter
- [neil](https://github.com/babashka/neil): A CLI to add common aliases and features to deps.edn-based projects
- [obsidian-babashka](https://github.com/filipesilva/obsidian-babashka): Run Obsidian Clojure(Script) codeblocks in Babashka
- [pod-babashka-buddy](https://github.com/babashka/pod-babashka-buddy): A pod around buddy core (Cryptographic Api for Clojure)
- [quickblog](https://github.com/borkdude/quickblog): Light-weight static blog engine for Clojure and babashka
- [solenoid](https://github.com/adam-james-v/solenoid): A small clojure tool for making little control UIs while using the REPL!
- [tools.bbuild](https://github.com/babashka/tools.bbuild): babashka version of tools.build
- [weather](https://gist.github.com/yogthos/f86e63b856e1413180b2262024ece977): command line util for grabbing current weather for a city using OpenWeather API
## [2022-12](https://twitter.com/search?q=%28%23babashka%20OR%20babashka%29%20until%3A2023-01-01%20since%3A2022-12-01&src=typed_query&f=live)
- Releases: [1.0.168](https://github.com/babashka/babashka/blob/master/CHANGELOG.md).
- [How GraalVM Helped Create a Fast-Starting Scripting Environment for Clojure](https://medium.com/graalvm/babashka-how-graalvm-helped-create-a-fast-starting-scripting-environment-for-clojure-b0fcc38b0746)
- [http-client](https://github.com/babashka/http-client): a new HTTP client library for babashka
- [How to Do Things With Babashka](https://presumably.de/how-to-do-things-with-babashka.html) by Paulus Esterhazy (2022-12)
- [Using Babashka to Get Electricity Prices](https://www.karimarttila.fi/clojure/2022/12/04/using-babashka-to-get-electricity-prices) by Kari Marttila
- [Adding prompts to your babashka scripts with dialog](https://www.pixelated-noise.com/blog/2022/12/09/dialog-and-babashka/index.html) by A.C. Danvers
- [Scraping an HTML dictionary with Babashka and Bootleg](https://blog.exupero.org/scraping-an-html-dictionary-with-babashka-and-bootleg/) by exupero
- [quickblog](https://github.com/borkdude/quickblog) v0.1.0: Light-weight static blog engine for Clojure and babashka
- [bb-excel](https://github.com/kbosompem/bb-excel): Read Excel Files in babashka scripts
- [Get paginated list of issues from gitlab with clojure/babashka](https://gist.github.com/MrGung/29d0547fe45316c3438032fd164d42c6) by Steffen Glückselig
- Install development builds: `bash <(curl https://raw.githubusercontent.com/babashka/babashka/master/install) --dev-build --dir /tmp`
- [JVM interop improvements in bb](https://twitter.com/borkdude/status/1606280110692352001)
- [A little trick to have conditional code for babashka in a .clj file without resorting to .cljc reader conditionals](https://twitter.com/borkdude/status/1599067149187764224)
- [Get Advent of Code input in babashka](https://gist.github.com/jeeger/6e39fea94ce49e33d1fa43f40cc36630) by Jan Seeger
- [Grabbing current weather for a city using OpenWeather API](https://gist.github.com/yogthos/f86e63b856e1413180b2262024ece977) by Dmitri Sotnikov
## [2022-11](https://twitter.com/search?q=%28%23babashka%29%20until%3A2022-12-01%20since%3A2022-11-01&src=typed_query&f=live)
- Releases: [1.0.165 - 1.0.167](https://github.com/babashka/babashka/blob/master/CHANGELOG.md).
- Registration for a [Babashka workshop](https://clojure.stream/workshops/babashka) with Rahul De at ClojureStream is now open!
- [Tutkain, a Sublime plugin for clojure based on socket REPL now with support for babashka](https://github.com/eerohele/Tutkain)
- [Manage git hooks in babashka](https://blaster.ai/blog/posts/manage-git-hooks-w-babashka.html) by Mykhaylo Bilyanskyy
- [Messing around with babashka](Messing around with Babashka) by Ian Muge
- [A babashka one liner to inspect data in portal](https://twitter.com/borkdude/status/1597505695800516609)
- [Using nREPL as a system interface](https://yogthos.net/posts/2022-11-26-nREPL-system-interaction.html) by Dmitri Sotnikov
- [deep-diff2](https://github.com/lambdaisland/deep-diff2) is now babashka-compatible!
- [A script to normalize auto-resolved keywords](https://github.com/babashka/babashka/blob/master/examples/normalize-keywords.clj)
- [Sum up page counts of books from Calibre library with babashka](https://gist.github.com/jeeger/d13159fefaee33c771be979639900ebc) by Jan Seeger
- [Tiny babashka script that returns a random clojure doc](https://gist.github.com/CarnunMP/c592cd3b6e711d56ddd4ca7832b9b251) by Carnun Marcus-Page
## [2022-10](https://twitter.com/search?q=%28%23babashka%29%20until%3A2022-11-01%20since%3A2022-10-01&src=typed_query&f=live)
- Releases: [1.0.164](https://github.com/babashka/babashka/blob/master/CHANGELOG.md).
- [bb-pod-racer](https://github.com/justone/bb-pod-racer): Speed up development of Babashka pods by Nate Jones
- [Babashka tasks VSCode plugin](https://marketplace.visualstudio.com/items?itemName=fbeyer.babashka-tasks) by Ferdinand Beyer
- A [PR](https://github.com/nextjournal/clerk/pull/232) to get Clerk working in babashka
- [lein2deps](https://github.com/borkdude/lein2deps): lein to deps.edn converter
- [awyeah-api](https://github.com/grzm/awyeah-api) by Michael Glaesemann v0.8.41 is now available! aws-api for Babashka. Aw yeah!
- [bbssh](https://github.com/epiccastle/bbssh/releases/tag/v0.2.0) by Crispin Wellington, v0.2.0 released
- [safely use rsync --archive --delete to backup a directory](https://gist.github.com/stelcodes/ddc8ff53de2192dca7d3fee1081ddb77) by Stel Abrego
## [2022-09](https://twitter.com/search?q=%28%23babashka%29%20until%3A2022-10-01%20since%3A2022-09-01&src=typed_query&f=live)
- Releases: [0.9.162 - 0.10.163](https://github.com/babashka/babashka/blob/master/CHANGELOG.md).
- Introducing [bbin](https://radsmith.com/bbin): a tool to install babashka scripts on your system by Radford Smith
- [bbssh](https://github.com/epiccastle/bbssh): Babashka pod for SSH support by [Epic Castle](https://github.com/epiccastle)
- [Loom virtual threads are coming to babashka](https://twitter.com/borkdude/status/1572222344684531717)
- [Tiny script to cycle through pulseaudio outputs (aka sinks)](https://gist.github.com/stelcodes/7d9136a5839b645b6cd5bc829a9fe541) by Stel Abrego
- [Tetris in the console via pod-babashka-lantera](https://twitter.com/borkdude/status/1569351199404576770)
- [org-mode gets support for babashka](https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=764642f55b7a9821acbabcfa1e2d354afab99be7)
- [docs for combining babashka process with promesa](https://github.com/babashka/process#promesa)
[exoscale/interceptor](https://github.com/exoscale/interceptor) became babashka-compatible!
- [Tutkain, socket REPL Sublime plugin, gets better support for babashka](https://twitter.com/borkdude/status/1568315151404924933)
- [babashka tweepy](https://github.com/davclark/babashka-tweepy): kicking the tires on using the tweepy library from a babashka task by Dav Clark
- [aoc helper](https://github.com/jjcomer/aoc-helper) by Josh Comer
- [Dogfooding blambda part 5](https://jmglov.net/blog/2022-09-02-dogfooding-blambda-logs.html) by Josh Glover
## [2022-08](https://twitter.com/search?q=%28%23babashka%29%20until%3A2022-09-01%20since%3A2022-08-01&src=typed_query&f=live)
- It's babashka's third birthday on August 9th 2022!
- [etaoin](https://github.com/clj-commons/etaoin), Pure Clojure Webdriver protocol implementation, is now babashka-compatible!
- [xforms](https://github.com/cgrand/xforms) is now babashka-compatible!
- [squint](https://github.com/squint-cljs/squint) and [cherry](https://github.com/squint-cljs/cherry) are CLJS-compilers that work with babashka!
## [2022-07](https://twitter.com/search?q=%28%23babashka%29%20until%3A2022-08-01%20since%3A2022-07-01&src=typed_query&f=live)
- Releases: [0.8.157 - 0.9.161](https://github.com/babashka/babashka/blob/master/CHANGELOG.md).
- [Recursive document transformations with Pandoc and Clojure](https://play.teod.eu/document-transform-pandoc-clojure/) by Teodor Heggelund
- [Babashka toolbox](https://babashka.org/toolbox/): A categorised directory of libraries and tools for Babashka
- [Quickblog](https://github.com/borkdude/quickblog): Light-weight static blog engine for Clojure and babashka
- Win a babashka t-shirt by participating in [this](https://twitter.com/borkdude/status/1547847843381030912) contest!
- [AWS Lambda, now with first class parentheses](https://www.juxt.pro/blog/nbb-lambda) by Ray McDermott (about nbb)
- [bb-github-app](https://github.com/brandonstubbs/bb-github-app): An example Babashka Script authenticating as a Github App and interacting with the Checks API
- [Ruuter](https://github.com/askonomm/ruuter#setting-up-with-babashka) is a routing library which works very well with bb
- [Blambda!](https://jmglov.net/blog/2022-07-03-blambda.html) by Josh Glover
- Files with the `.bb` extension are now correctly highlighted as Clojure code on Github! See [this](https://twitter.com/borkdude/status/1543937735429431298) tweet.
- Encode and decode files as kroki url diagrams, a [gist](https://gist.github.com/henryw374/070845dbd8cfb4672a3c0d06cf8b00e4) by Henry Widd
- Customized bb builds with clj-nix: [tweet](https://twitter.com/jlesquembre/status/1543686641461694470)
- Expose Clojure functions in the CLI with babashka and nix: [tweet](https://twitter.com/jlesquembre/status/1546777332471455745)
- [Meander](https://github.com/noprompt/meander) is now compatible with bb: [tweet](https://twitter.com/borkdude/status/1542881167338250242)
- [Deleting AWS Glacier vaults with babashka](https://javahippie.net/clojure/2022/07/23/deleting-aws-glacier-vaults-with-babashka.html) by Tim Zöller
## [2022-06](https://twitter.com/search?q=%28%23babashka%29%20until%3A2022-07-01%20since%3A2022-06-01&src=typed_query&f=live)
- Releases: [0.8.156](https://github.com/babashka/babashka/blob/master/CHANGELOG.md).
- [AWS wiki page](https://github.com/babashka/babashka/wiki/AWS)
- [blambda](https://github.com/jmglov/blambda): Blambda! is a custom runtime for AWS Lambda that lets you write functions using Babashka
- [Babashka CLI](https://blog.michielborkent.nl/babashka-cli.html): turn Clojure functions into CLIs!
- [Http-server](https://github.com/babashka/http-server#babashka): Serve static assets
- [Deps-bundler](https://github.com/MrGung/deps-bundler): Bundle dependencies on
a computer that has access to maven and clojars (PC-A) and bring these over to
a computer with limited access (PC-L).
- [Prismatic/schema](https://github.com/plumatic/schema/blob/master/CHANGELOG.md#130-2022-06-10) and babashka are now compatible
- [Logseq bb tasks](https://github.com/logseq/bb-tasks): Reusable babashka tasks used by logseq team
- [Breakneck Babashka on K8s](Breakneck Babashka on K8s) by Heow Goodman
## [2022-05](https://twitter.com/search?q=%28%23babashka%29%20until%3A2022-06-01%20since%3A2022-05-01&src=typed_query&f=live)
- Releases: [0.8.2](https://github.com/babashka/babashka/blob/master/CHANGELOG.md).
- [Etaoin](https://github.com/clj-commons/etaoin) moved to clj-commons and now works with babashka as well.
- [Nix docs for babashka](https://github.com/babashka/babashka/blob/master/doc/nix.md)
- [Fly.io docs for babashka](https://github.com/babashka/babashka/tree/master/doc/fly_io)
- [Babashka survey results](https://blog.michielborkent.nl/babashka-survey-q1-2022.html)
- [Quickdoc](https://github.com/borkdude/quickdoc): (Quick and minimal API doc generation for Clojure
- [Awyeah-api](https://github.com/grzm/awyeah-api) - Cognitect's aws-api for babashka
## [2022-04](https://twitter.com/search?q=%28%23babashka%29%20until%3A2022-05-01%20since%3A2022-04-01&src=typed_query&f=live)
- Releases: [0.8.0 - 0.8.1](https://github.com/babashka/babashka/blob/master/CHANGELOG.md).
- [Babashka and Clojure](https://youtu.be/ZvOs5Ele6VE) by Rahul Dé at North Virginia Linux Users Group
- [Setup-Clojure](https://github.com/DeLaGuardo/setup-clojure/releases/tag/5.0) Github action is now able to install babashka!
- Control Chrome via devtools using [clj-chrome-devtools](https://github.com/tatut/clj-chrome-devtools/blob/master/bb.clj) which runs with bb!
- Use pods directly in `bb.edn`: [tweet](https://twitter.com/borkdude/status/1510995356229767172)
## [2022-03](https://twitter.com/search?q=%28%23babashka%29%20until%3A2022-04-01%20since%3A2022-03-01&src=typed_query&f=live)
- Releases: [0.7.7 - 0.7.8](https://github.com/babashka/babashka/blob/master/CHANGELOG.md).
- [Create a password manager with Clojure using Babashka, sqlite, honeysql and stash](https://youtu.be/jm0RXmyjRJ8) by Daniel Amber
- [Detecting inconsistent aliases in a clojure codebase](https://www.youtube.com/watch?v=bf8KLKkCH2g) by Oxalorg
- [Clj-konmari](https://github.com/oxalorg/clj-konmari/) by Oxalorg
- [Logseq-query](https://github.com/cldwalker/logseq-query) by Gabriel Horner [(announcement tweet with video)](https://twitter.com/cldwalker/status/1506991213030871041)
- The [loom](https://github.com/aysylu/loom) library is now compatible [(tweet)](https://twitter.com/borkdude/status/1502237220811550723)
- The [at-at](https://github.com/overtone/at-at) library is now compatible
## [2022-02](https://twitter.com/search?q=%28%23babashka%29%20until%3A2022-03-01%20since%3A2022-02-01&src=typed_query&f=live)
- Releases: [0.7.5 - 0.7.6](https://github.com/babashka/babashka/blob/master/CHANGELOG.md).
- [Spire is available as a babashka pod](https://twitter.com/epic_castle/status/1496784352256008194)
- Babashka Clojure template on [Repl.it](https://replit.com/@eccentric-j/Babashka-Clojure-Template?v=1#replit.nix) by Eccentric J
- Create a self-contained executable with [caxa](https://github.com/babashka/babashka/wiki/Self-contained-executable)
- Cli-matic is now compatible due to this [PR](https://github.com/l3nz/cli-matic/pull/145)
- [I, too, Wrote Myself a Static Site Generator](https://dawranliou.com/blog/i-too-wrote-myself-a-static-site-generator/) by Daw-Ran Liou
- [Staplegun](https://github.com/escherize/staplegun): Single file clipboard-manager
- [Bbb](https://github.com/nikvdp/bbb): make executable CLI tools from bb scripts
- [Apptemplate](https://github.com/redstarssystems/apptemplate): Application project template for Clojure featuring bb tasks
## [2022-01](https://twitter.com/search?f=live&q=%28%23babashka%29%20until%3A2022-02-01%20since%3A2022-01-01&src=typed_query)
- Releases: [0.7.4](https://github.com/babashka/babashka/blob/master/CHANGELOG.md).
- [Babashka dev builds](https://github.com/babashka/babashka-dev-builds)
- [Writing Clojure-living-cookbooks](https://www.loop-code-recur.io/live-clojure-cookbooks/) by Cyprien Pannier
- [HTMX Todo App](https://github.com/prestancedesign/babashka-htmx-todoapp)
- [Better linting for `bb.edn`](https://twitter.com/borkdude/status/1484100071134220291)
- [Unwordle](https://github.com/mknoszlig/unwordle): solver for wordle puzzles
- [Using babashka with PHP](https://blog.michielborkent.nl/using-babashka-with-php.html) by Michiel Borkent
## 2021-12
- Releases: [0.6.8 - 0.7.3](https://github.com/babashka/babashka/blob/master/CHANGELOG.md).
- [Scripting with Babashka on Alfred](https://blog.wsscode.com/babashka-and-alfred/) by Wilker Lucio
- [babashka/spec.alpha](https://github.com/babashka/spec.alpha): a fork of spec.alpha that works with babashka.
- Several people are doing [Advent of Code puzzles with babashka](https://twitter.com/search?q=%23babashka%20%20%23AdventOfCode&src=typed_query&f=live)
- Compatibility with a [fork of tools.namespace](https://github.com/babashka/tools.namespace). This allows
running the Cognitect [test-runner](https://github.com/cognitect-labs/test-runner) (Cognitest) from source.
- [bb-components](https://github.com/vedang/bb-scripts#bb-components): A script to find all the components that you should deploy your code to.
- [Babashka workshop at JavaLand](https://github.com/ijug-ev/JavaLand/tree/main/Community-Aktivit%C3%A4ten#bash-war-gestern-shell-scripting-mit-babashka-clojure-ug-d%C3%BCsseldorf-christian-meter-rheinjug-jens-bendisposto)
- Install babashka [dev builds](https://twitter.com/borkdude/status/1475234968146227203)
- [Combine babashka and PHP](https://gist.github.com/borkdude/843548cba14ae9d283191e31bc483959)
- [System wide babashka tasks](https://twitter.com/borkdude/status/1476656022282551300)
- [Run an http file server as a babashka task](https://twitter.com/borkdude/status/1476870516233445377)
## 2021-11
- Releases: [0.6.5 - 0.6.7](https://github.com/babashka/babashka/blob/master/CHANGELOG.md).
- [Contajners](https://github.com/lispyclouds/contajners): An idiomatic,
data-driven, REPL friendly clojure client for OCI container engines.
- [deps-modules](https://github.com/exoscale/deps-modules#babashka): a clojure "tool" that attempts to solve one of the "multi module" project problems with tools.deps in a minimalistic way.
- [Moldable Emacs: a Clojure Playground with Babashka](https://ag91.github.io/blog/2021/11/05/moldable-emacs-a-clojure-playground-with-babashka/)
- [aws pod 0.1.0](https://twitter.com/borkdude/status/1459117378441261056)
- [tools.bbuild](https://github.com/babashka/tools.bbuild): a fork of tools.build that runs with babashka and [tools-deps-native](https://github.com/babashka/tools-deps-native)
- [Making markdown-clj babashka compatible](https://blog.michielborkent.nl/markdown-clj-babashka-compatible.html) by Michiel Borkent
- [radiale](https://github.com/xlfe/radiale): radiale: home automation project written using #babashka and Python
- [Writing a Clojure shell script with Babashka](https://www.youtube.com/watch?v=D-_Mz7rz1po), a video by Max Weber
- [makejack](https://github.com/hugoduncan/makejack): A clojure CLI build tool, and build library which can run with babashka.
- [I wrote myself a static site generator](https://freeston.me/posts/2021-11-29-new-site-generator/) (in babashka) by Dominic Freeston.
- [bipe](https://gist.github.com/borkdude/82dcdd36a1e61ef36f19221876e7b1b6): vipe for babashka
## 2021-10
- Releases: [0.6.2-0.6.4](https://github.com/babashka/babashka/blob/master/CHANGELOG.md).
- Babashka on the [Thoughtworks Technology Radar](https://www.thoughtworks.com/radar/platforms/babashka)
- [ruuter](https://github.com/askonomm/ruuter#setting-up-with-babashka) is a
routing library compatible with babashka.
- A list of [companies](https://github.com/babashka/babashka/blob/master/doc/companies.md) using babashka
- Ilshat Sultanov shares his [babashka tasks](https://twitter.com/just_sultanov/status/1446118161258987534)
- [Slack the music](https://github.com/javahippie/slack-the-music), a babashka script to update your slack status with your current Apple Music track by Tim Zöller.
- [Finding my inner Wes Anderson](https://javahippie.net/clojure/2021/10/18/finding-my-inner-wes-anderson.html) by Tim Zöller.
- [Run a local babashka script in a remote server](https://twitter.com/borkdude/status/1451110414062870528)
- [Replacing my Octopress blog with 200 lines of Babashka](https://blog.michielborkent.nl/migrating-octopress-to-babashka.html) by Michiel Borkent
- The babashka wiki now has a [GNU Emacs](https://github.com/babashka/babashka/wiki/GNU-Emacs) section
- Invoke babashka tasks in a [monorepo](https://github.com/babashka/babashka/discussions/1044#discussioncomment-1544956)
- [Speeding up builds with fs/modified-since](https://blog.michielborkent.nl/speeding-up-builds-fs-modified-since.html) by Michiel Borkent
## 2021-09
- New babashka 0.6.0 released. Highlight: support for `java.net.http` which
enables running [java-http-clj](https://github.com/schmee/java-http-clj) from
source. The raw interop is the first part of a multi-stage plan to move all
http related scripting towards `java.net.http` in favor of the other two
solutions currently available in `bb`: `babashka.curl` and
`org.httpkit.client`.
- [rss-saver](https://github.com/adam-james-v/rss-saver): Simple Clojure (Babashka) script that saves articles from world.hey.com RSS feeds.
- [babashka-docker-action-example](https://github.com/borkdude/babashka-docker-action-example)
- [script](https://gist.github.com/rutenkolk/dbd970d03a0d012b671db38434ccbfa7) to upgrade zig lang to the latest dev release
- [Cursive](https://twitter.com/CursiveIDE/status/1439022267187433472) adds support for babashka in 1.11.0
- How to filter tail output with babashka on [StackOverflow](https://stackoverflow.com/questions/69241046/how-to-filter-output-of-tail-with-babashka/69241911?stw=2#69241911)
- [Awesome Babashka: Parse & produce HTML and SQLite](https://blog.jakubholy.net/2021/awesome-babashka-dash/) by Jakub Holy
- [Neil](https://github.com/babashka/neil): an installable babashka script to add common aliases and features to deps.edn-based projects.
## 2021-08
- New babashka 0.5.1 released. Highlight: new `print-deps` command for printing
a `deps.edn` map and classpath which includes all built-in deps. This can be
used for editor tooling like Cursive and clojure-lsp, but also for migrating a
babashka project to a Graal native-image project.
- Babashka receives long term funding from [Clojurists Together](https://www.clojuriststogether.org/news/long-term-funding-selections/). Thanks!
- Babashka is 2 years old this month: the [first commit](https://github.com/babashka/babashka/commit/6dee50b0face0b890a7f628a63b21d5d706a48ee) was on 9 August 2019!
- [nbb](https://github.com/borkdude/nbb): babashka's Node.js cousin
- [Cursive](https://twitter.com/CursiveIDE/status/1422540023207915520) adds
support for babashka in the latest EAP
- [clojure-lsp](https://twitter.com/ericdallo/status/1422559744712138753) adds support for babashka scripts
- [bb guestbook](https://github.com/SVMBrown/bb-guestbook) by Scot Brown.
- [bb htmx todo app](https://github.com/prestancedesign/babashka-htmx-todoapp) by Michael Sahili.
- [bb aws lambda runtime](https://github.com/tatut/bb-lambda) by Tatu Tarvainen.
## 2021-07
- New babashka 0.5.0 released. Highlights: `clojure.tools.logging` + `taoensso.timbre` added, source compatibility with `clojure.data.json`.
- [Babashka tasks](https://youtu.be/u5ECoR7KT1Y), talk by Michiel Borkent
- [Rewriting a clojure file with rewrite-clj and babashka](https://youtu.be/b7NPKsm8gkc), video by Oxalorg
- [Babashka tasks for PostgreSQL](https://github.com/babashka/babashka/discussions/929) by Stel Abrego
- [String interpolation](https://twitter.com/yogthos/status/1415324124361154561) with Selmer in bb
- [Jirazzz](https://github.com/rwstauner/jirazzz): a babashka JIRA client by Randy Stauner
- [Babashka + scittle guestbook](https://github.com/kloimhardt/babashka-scittle-guestbook) by Kloimhardt
- [Paillier cryptosystem](https://github.com/babashka/babashka/discussions/948) by litteli
- [csv-to-yaml.clj](https://github.com/babashka/babashka/discussions/939) by Cora
## 2021-06
- New babashka 0.4.4 - 0.4.5 released.
- Share your babashka creations on the [Show and tell](https://github.com/babashka/babashka/discussions/categories/show-and-tell) forum on Github.
- [Integrating Babashka into Bazel](https://timjaeger.io/20210627-integrating-babashka-with-bazel.html) by Tim Jäger
- [Babashka + scittle guestbook example](https://github.com/kloimhardt/babashka-scittle-guestbook)
- [Slingshot works with babashka](https://twitter.com/borkdude/status/1402547783295504387)
- [Spire gets a babashka pod](https://twitter.com/epic_castle/status/1402212817533431808)
- [Text to speech AWS example](https://twitter.com/FieryCodDev/status/1401843357555511301) with scittle and babashka.
- [Game of Life](https://gist.github.com/mmzsource/655b9dcfe56eed8a045022837186ed84)
- [ob-babashka](https://gist.github.com/adam-james-v/f4d2b75a70b095d14a351a1eff96b4b0): Emacs org-babel functions for babashka.
- [Normalize auto-resolved keywords](https://github.com/babashka/babashka/tree/master/examples#normalize-keywordsclj)
- [Create PostgreSQL backups](https://twitter.com/stelstuff/status/1400559261025980418) using babashka.
- [Change flutter SDK](https://gist.github.com/ampersanda/aac70cc0644df12199ea32988f3c4d73) using babashka.
## 2021-05
- Babashka 0.3.7 - 0.4.3 released. Highlights:
- New [task runner feature](https://book.babashka.org/#tasks).
- Add [Selmer](https://github.com/yogthos/Selmer) to built-in libraries.
- Add compatibility with [jasentaa](https://github.com/rm-hull/jasentaa).
- New [website](https://babashka.org).
- [Talk](https://youtu.be/Yjeh57eE9rg): Babashka: a native Clojure interpreter for scripting — The 2021 Graal Workshop at CGO
- [Blog](https://savo.rocks/posts/playing-new-music-on-old-car-stereo-with-clojure-and-babashka/): Playing New Music On Old Car Stereo With Clojure And Babashka
- [Homoiconicity and feature flags](https://martinklepsch.org/posts/homoiconicity-and-feature-flags.html) by Martin Klepsch.
- [Manage your macOS setup](https://github.com/cldwalker/osx-setup) using babashka.
- [Localizing a Ghost theme](https://martinklepsch.org/posts/localizing-a-ghost-theme.html) by Martin Klepsch.
- [Babashka SQL pods 0.0.8](https://twitter.com/borkdude/status/1396136828479188997) including a MySQL pod
## 2021-04
- Babashka 0.3.2 - 0.3.6 released. See [CHANGELOG.md](https://github.com/babashka/babashka/blob/master/CHANGELOG.md). Highlights:
- Add [rewrite-clj](https://github.com/clj-commons/rewrite-clj).
- Support for the [binf](https://github.com/helins/binf.cljc) library.
- [Sort requires and imports](https://gist.github.com/laurio/01530ea7700752885df21e92bb926f75) using rewrite-clj
- Babashka [tasks proposal](https://github.com/babashka/babashka/issues/778), available in babashka 0.3.5
- A new useful function in `babashka.fs`: [modified-since](https://babashka.org/fs/babashka.fs.html#var-modified-since)
- Using babashka [for animations](https://twitter.com/RustyVermeer/status/1385269161106972673)
- [rewrite-edn](https://github.com/borkdude/rewrite-edn) is now compatible with babashka
## 2021-03
- Babashka 0.3.0 - 0.3.1 released. See [CHANGELOG.md](https://github.com/babashka/babashka/blob/master/CHANGELOG.md). Highlights: Raspberry Pi support, bb.edn, more flexible main invocation.
- [Babashka shebang](https://github.com/borkdude/deps.clj/blob/master/deps.bat#L1-L7) for Windows .bat files
- [Datalevin](https://twitter.com/huahaiy/status/1371689142585753604) now works as a babashka pod
- [Babashka sql pods](https://github.com/babashka/babashka-sql-pods/blob/master/CHANGELOG.md) update
- [JPoint](https://jpoint.ru/en/2021/talks/3nr1czuok3dvtewtcdjalm/) is going to have a talk on babashka
- A `python -m http.server` [replacement in babashka](https://gist.github.com/holyjak/36c6284c047ffb7573e8a34399de27d8)
- A [PR](https://github.com/ring-clojure/ring-codec/issues/26) to make `ring-codec` compatible with babashka
- The [stuartsierra/component](https://github.com/stuartsierra/component) library [seems to work with babashka](https://github.com/babashka/babashka/issues/742)
- [pathom3](https://pathom3.wsscode.com/docs/tutorials/babashka/) works with babashka!
- [VPN Connect](https://tech.toryanderson.com/2021/03/06/re-writing-an-openconnect-vpn-connect-script-in-babashka/) script
- [Github code search](https://gist.github.com/ertugrulcetin/4f35557962fac3d159d8c931e94873e9) script
## 2021-02
- Babashka 0.2.9 - 0.2.12 released
- [babashka.fs](https://github.com/babashka/fs): utility library for dealing with files (based on java.nio). Bundled with bb 0.2.9.
- New [Youtube channel](https://www.youtube.com/channel/UCRCl_R1ihLJt7IOgICdb9Lw) with babashka related videos
- MS SQL support for the [babashka sql pods](https://github.com/babashka/babashka-sql-pods/)
- [Clojure like its PHP](https://eccentric-j.com/blog/clojure-like-its-php.html): run babashka scripts as CGI scripts
- [Automating Video Edits with Clojure and ffmpeg](https://youtu.be/Tmgy57R9HZM) by Adam James
- [Gaka](https://github.com/cdaddr/gaka), a CSS-generating library that works with babashka.
- [Deploy babashka script to AWS Lambda](https://www.jocas.lt/blog/post/babashka-aws-lambda/) by Dainius Jocas.
- [Elisp](https://gist.github.com/llacom/f391f41cbf4de91739b52bf8bb1a6d54) and cider commands to spawn a babashka repl and connect to it
- [klein](https://gist.github.com/borkdude/c34e8e44eb5b4a6ca735bf8a86ff64fa), a
lein imitation script built on deps.edn
- [failjure](https://github.com/adambard/failjure) works with babashka.
- A [script](https://gist.github.com/borkdude/58f099b2694d206e6eec18daedc5077b) to solve our mono-repo problem with deps.edn at work.
- [Single-script vega-lite plotter](https://gist.github.com/vdikan/6b6063d6e1b00a3cd79bc7b3ce3853d6/)
- [Find vars with the clj-kondo pod](https://gist.github.com/borkdude/841d85d5ad04c517337166b3928697bd). Also see [video](https://youtu.be/TvBmtGS0KJE).
- [Another setup babashka Github action](https://github.com/marketplace/actions/setup-babashka)
- [AWS Lambda + babashka + minimal container image](https://gist.github.com/lukaszkorecki/a1fe27bf08f9b98e9def9da4bcb3264e)
- [football script](https://gist.github.com/mmzsource/a732950aa43d19c5a9b63bbb7f20b7eb)
- [ffclj](https://github.com/luissantos/ffclj): Clojure ffmpeg wrapper
- [clj-lineart](https://github.com/eccentric-j/clj-lineart): Generative line art from a clojure-cgi script
- [bunpack](https://github.com/robertfw/bunpack): remembers how to unpack things, so you don't have to
- A script to download deps for [all `deps.edn` aliases](https://github.com/babashka/babashka/blob/master/examples/download-aliases.clj)
## 2021-01
- Babashka [0.2.8](https://github.com/babashka/babashka/blob/master/CHANGELOG.md#v028) released. This includes new libraries: hiccup, core.match and clojure.test.check.
- On 27th of February, Michiel (a.k.a. @borkdude) will do a talk about babashka at the [2021 GraalVM workshop](https://graalworkshop.github.io/2021/).
- First release of the [aws pod](https://github.com/babashka/pod-babashka-aws).
- A [script](https://gist.github.com/borkdude/ba372c8cee311e31020b04063d88e1be) to print API breakage warnings.
- A [script](https://gist.github.com/lgouger/2262e2d2503306f2595e48a7888f4e73) to lazily page through AWS results using the new [aws pod](https://github.com/babashka/pod-babashka-aws).
- [Environ](https://github.com/weavejester/environ) works with babashka.
- [Expound](https://github.com/bhb/expound) now works with [spartan.spec](https://github.com/borkdude/spartan.spec/blob/master/examples/expound.clj)
- A basic [logger](https://gist.github.com/borkdude/c97da85da67c7bcc5671765aef5a89ad) that works in babashka scripts
- A basic [router](https://gist.github.com/borkdude/1627f39d072ea05557a324faf5054cf3) based on core.match
- A minimal [Github GraphQL client](https://gist.github.com/lagenorhynque/c1419487965c0fa3cf34862852825483)
- New developments around babashka on [Raspberry Pi](https://github.com/babashka/babashka/issues/241#issuecomment-763976749)
## 2020-12
A new babashka talk: [Babashka and sci
- A new babashka talk: [Babashka and sci
internals](https://youtu.be/pgNp4Lk3gf0). Also see
[slides](https://speakerdeck.com/borkdude/babashka-and-sci-internals-at-london-clojurians-december-2020)
[slides](https://speakerdeck.com/babashka/babashka-and-sci-internals-at-london-clojurians-december-2020)
and [REPL
session](https://gist.github.com/borkdude/66a4d844668e12ae1a8277af10d6cc4b).
The data from the babashka survey is now available
- Babashka 0.2.6 released. See [release
notes](https://github.com/babashka/babashka/blob/master/CHANGELOG.md#v026).
- Babashka 0.2.5 released. See [release
notes](https://github.com/babashka/babashka/blob/master/CHANGELOG.md#v025).
- First release of the [sqlite pod](https://github.com/babashka/pod-babashka-sqlite3)
- First release of the [buddy pod](https://github.com/babashka/pod-babashka-buddy)
- The data from the babashka survey is now available
[here](https://nl.surveymonkey.com/results/SM-8W8V36DZ7/). I have provided a
summary [here](surveys/2020-11.md).
- Blog article: [exporter for passwordstore.org](https://www.ieugen.ro/posts/2020/2020-12-26-export-passwords-with-babashka/) by Eugen Stan
- [weavejester/progrock](https://github.com/weavejester/progrock) is a babashka-compatible library
for printing progress bars.
- A [maze animation](https://gist.github.com/mmzsource/e8c383f69244ebefde058004fee72a8a) babashka script by [mmz](https://gist.github.com/mmzsource)
## 2020-11
Babashka [survey](https://nl.surveymonkey.com/r/H2HK3RC). Feedback will be used
- Babashka [survey](https://nl.surveymonkey.com/r/H2HK3RC). Feedback will be used
for future development.
Babashka 0.2.4 released. See [release
notes](https://github.com/borkdude/babashka/blob/master/CHANGELOG.md#v024).
- Babashka 0.2.4 released. See [release
notes](https://github.com/babashka/babashka/blob/master/CHANGELOG.md#v024).
- [Gaiwan.co](https://github.com/lambdaisland/gaiwan_co#tech-stack) are building their static HTML with babashka and [bootleg](https://github.com/retrogradeorbit/bootleg#babashka-pod-usage).
- [sha-words](https://github.com/ordnungswidrig/sha-words): A clojure program to
turn a sha hash into list of nouns in a predictable jar.
@ -38,24 +535,23 @@ notes](https://github.com/borkdude/babashka/blob/master/CHANGELOG.md#v024).
dependencies using Clojure's tools.deps and babashka.
- LA Clojure Meetup [presentation](https://youtu.be/RogyxI-GaGQ) by Nate Jones. Recorded in April 2020.
- [Github action](https://github.com/turtlequeue/setup-babashka) for babashka by Nicolas Ha.
- Oracle DB [feature flag](https://github.com/borkdude/babashka/blob/master/doc/build.md#feature-flags) by Jakub Holy added.
- Oracle DB [feature flag](https://github.com/babashka/babashka/blob/master/doc/build.md#feature-flags) by Jakub Holy added.
- Torrent viewer [gist](https://gist.github.com/zelark/49ffbc0cd701c9299e35421ac2e3d5ab) by Aleksandr Zhuravlёv.
- Clone all repositories from a Gitlab group:
[gist](https://gist.github.com/MrGung/81bee21eb52cb9307f336705d5ab08ad) by
Steffen Glückselig.
- [Matchete](https://github.com/xapix-io/matchete), a pattern matching library,
works with babashka. See
[example](https://github.com/borkdude/babashka/issues/631).
[example](https://github.com/babashka/babashka/issues/631).
## 2020-10
Babashka 0.2.3 released. See [release
notes](https://github.com/borkdude/babashka/blob/master/CHANGELOG.md#v023-2020-10-21).
- Babashka 0.2.3 released. See [release
notes](https://github.com/babashka/babashka/blob/master/CHANGELOG.md#v023-2020-10-21).
- [Malcolm Sparks](https://twitter.com/malcolmsparks/status/1320274099952848896) posted a
[script](https://gist.github.com/malcolmsparks/61418b6bbcd0962536add1ccb07033b5) that
sorts his photo collection.
- [Image viewer](https://github.com/borkdude/babashka/tree/master/examples#image-viewer) example
- [Image viewer](https://github.com/babashka/babashka/tree/master/examples#image-viewer) example
- SQL Server [pod](https://github.com/xledger/pod_sql_server) by Isak Sky
- [SSH Auth Github](https://github.com/nextjournal/ssh-auth-github) by
NextJournal.
@ -64,10 +560,9 @@ notes](https://github.com/borkdude/babashka/blob/master/CHANGELOG.md#v023-2020-1
## 2020-09
Babashka
[0.2.1](https://github.com/borkdude/babashka/blob/master/CHANGELOG.md#v021-2020-09-25)
- Babashka
[0.2.1](https://github.com/babashka/babashka/blob/master/CHANGELOG.md#v021-2020-09-25)
and 0.2.2 released.
- Code Quality report for Clojure projects in Gitlab using babashka and clj-kondo. See [gist](https://gist.github.com/hansbugge/4be701d771057e8ef6bbbb0912656355). By Hans Bugge.
- [pod-tzzh-aws](https://github.com/tzzh/pod-tzzh-aws): a pod to interact with AWS.
- [spotifyd-notification](https://github.com/dharrigan/spotifyd-notification) by
@ -75,8 +570,7 @@ and 0.2.2 released.
## 2020-08
Babashka [0.2.0](https://github.com/borkdude/babashka/blob/master/CHANGELOG.md#v020-2020-08-28) released.
- Babashka [0.2.0](https://github.com/babashka/babashka/blob/master/CHANGELOG.md#v020-2020-08-28) released.
- Maarten Metz
[blogs](https://www.mxmmz.nl/blog/building-a-website-with-babashka.html) about
how he rebuilt his blog using babashka.
@ -92,7 +586,6 @@ Babashka [0.2.0](https://github.com/borkdude/babashka/blob/master/CHANGELOG.md#v
## 2020-06
Babashka [0.1.3](https://github.com/borkdude/babashka/blob/master/CHANGELOG.md#v013-2020-06-27) and 0.1.2 released.
- Babashka [0.1.3](https://github.com/babashka/babashka/blob/master/CHANGELOG.md#v013-2020-06-27) and 0.1.2 released.
- New release of [brisk](https://github.com/justone/brisk), a CLI around nippy which can be used as a pod from babashka.
- [passphrase.clj](https://gist.github.com/snorremd/43c49649d2d844ee1e646fee67c141bb) script by Snorre Magnus Davøen

87
doc/nix.md Normal file
View file

@ -0,0 +1,87 @@
# Using Babashka with Nix
Babashka is [packaged](https://search.nixos.org/packages?type=packages&query=babashka) in nixpkgs and can be easily used from the Nix package manager.
The following assumes a recent installation of nix and uses the unstable [nix cli](https://nixos.org/manual/nix/stable/command-ref/new-cli/nix.html) and [Flakes](https://nixos.org/manual/nix/stable/command-ref/new-cli/nix3-flake.html).
To enable the unstable cli and flakes add the following to `/etc/nix/nix.conf`:
```
extra-experimental-features flakes nix-command
```
## Imperative install on Nix
To imperatively install nix for the current user, run `nix profile install babashka`.
## Declarative global install on NixOS
To install babashka for all users on a NixOS system, place it in `environment.systemPackages` in your `configuration.nix`:
```nix
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
babashka
];
}
```
Then run `nixos-rebuild switch`, to activate the new configuration.
## Declarative per-user install with home-manager
You can install babashka for a specific user using [home-manager](https://github.com/nix-community/home-manager). Add the following to your `~/.config/nixpkgs/home.nix`:
```nix
{ pkgs, ... }:
{
home.packages = with pkgs; [
babashka
];
}
```
Then run `home-manager switch`, to activate the new configuration.
## Per project install with direnv
To make babashka available on a per-project basis, you can use [direnv](https://direnv.net/).
Create a file `.envrc` in the project directory with the following contents:
```
use flake
```
Create a file `flake.nix` in the project directory with the following contents:
```nix
{
outputs = {nixpkgs, ...}: let
supportedSystems = ["x86_64-linux" "x86_64-darwin"];
forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
nixpkgsFor = system: import nixpkgs {inherit system;};
in {
devShell = forAllSystems (system: let
pkgs = nixpkgsFor system;
in
pkgs.mkShell {
packages = with pkgs; [
babashka
];
});
};
}
```
After running `direnv allow`, babashka should be available on the `$PATH`, when you are inside the project directory.
## Write Babashka Application
You can write babashka scripts with native dependencies using [WriteBabashkaApplication](https://github.com/sohalt/write-babashka-application).
The WriteBabashkaApplication repository has an [example](https://github.com/Sohalt/write-babashka-application/tree/main/example) `flake.nix` using `cowsay` as an external dependency.
You can download that example, and then build the application using `nix build` or run it using `nix run`.

View file

@ -2,23 +2,134 @@
The following libraries and projects are known to work with babashka.
Table of contents:
- [Libraries](#libraries)
- [Pods](#pods)
- [Projects](#projects)
- [Libraries](#libraries)
- [tools.namespace](#toolsnamespace)
- [test-runner](#test-runner)
- [spec.alpha](#specalpha)
- [clj-http-lite](#clj-http-lite)
- [spartan.spec](#spartanspec)
- [missing.test.assertions](#missingtestassertions)
- [medley](#medley)
- [limit-break](#limit-break)
- [clojure-csv](#clojure-csv)
- [regal](#regal)
- [cprop](#cprop)
- [comb](#comb)
- [nubank/docopt](#nubankdocopt)
- [arrangement](#arrangement)
- [clojure.math.combinatorics](#clojuremathcombinatorics)
- [testdoc](#testdoc)
- [doric](#doric)
- [clojure.data.zip](#clojuredatazip)
- [clj-psql](#clj-psql)
- [camel-snake-kebab](#camel-snake-kebab)
- [aero](#aero)
- [clojure.data.generators](#clojuredatagenerators)
- [honeysql](#honeysql)
- [bond](#bond)
- [portal](#portal)
- [version-clj](#version-clj)
- [matchete](#matchete)
- [progrock](#progrock)
- [clj-commons/fs](#clj-commonsfs)
- [cljc.java-time](#cljcjava-time)
- [environ](#environ)
- [gaka](#gaka)
- [failjure](#failjure)
- [pretty](#pretty)
- [clojure-term-colors](#clojure-term-colors)
- [binf](#binf)
- [rewrite-edn](#rewrite-edn)
- [expound](#expound)
- [omniconf](#omniconf)
- [slingshot](#slingshot)
- [hasch](#hasch)
- [crispin](#crispin)
- [ffclj](#ffclj)
- [multigrep](#multigrep)
- [java-http-clj](#java-http-clj)
- [component](#component)
- [minimallist](#minimallist)
- [ruuter](#ruuter)
- [clj-commons.digest](#clj-commonsdigest)
- [contajners](#contajners)
- [dependency](#dependency)
- [specmonstah](#specmonstah)
- [markdown-clj](#markdown-clj)
- [algo.monads](#algomonads)
- [datalog-parser](#datalog-parser)
- [at-at](#at-at)
- [aysylu/loom](#aysyluloom)
- [Clarktown](#clarktown)
- [Malli](#malli)
- [Meander](#meander)
- [Schema](#schema)
- [Sluj](#sluj)
- [malli-cli](#malli-cli)
- [Pods](#pods)
- [Projects](#projects-1)
- [babashka-test-action](#babashka-test-action)
- [deps.clj](#depsclj)
- [4bb](#4bb)
- [babashka lambda layer](#babashka-lambda-layer)
- [Release on push Github action](#release-on-push-github-action)
- [justone/bb-scripts](#justonebb-scripts)
- [nativity](#nativity)
- [cldwalker/bb-clis](#cldwalkerbb-clis)
- [krell template](#krell-template)
- [wee-httpd](#wee-httpd)
- [covid19-babashka](#covid19-babashka)
- [bb-spotify](#bb-spotify)
- [lambdaisland/open-source](#lambdaislandopen-source)
- [dharrigan/spotifyd-notification](#dharriganspotifyd-notification)
- [nextjournal/ssh-github-auth](#nextjournalssh-github-auth)
- [turtlequeue/setup-babashka](#turtlequeuesetup-babashka)
- [interdep](#interdep)
- [sha-words](#sha-words)
- [adam-james-v/scripts](#adam-james-vscripts)
- [oidc-client](#oidc-client)
- [jirazzz](#jirazzz)
- [Babashka + scittle guestbook](#babashka--scittle-guestbook)
- [bb htmx todo app](#bb-htmx-todo-app)
- [bb aws lambda runtime](#bb-aws-lambda-runtime)
- [bb-github-app](#bb-github-app)
Also keep an eye on the [news](news.md) page for new projects, gists and other
developments around babashka.
## Libraries
### [clj-http-lite](https://github.com/babashka/clj-http-lite)
For a full list of libraries, see [libraries.csv](./libraries.csv). To add a
library, see [these instructions](./dev.md#tests-for-libraries).
A fork of a fork of `clj-http-lite`. Example:
### [tools.namespace](https://github.com/babashka/tools.namespace)
A fork of `tools.namespace`. This is used by other libraries and enables them to
be supported by babashka.
### [test-runner](https://github.com/cognitect-labs/test-runner)
This library works with the
[tools.namespace](https://github.com/babashka/tools.namespace) fork. See its
readme for an example task for running tests.
### [spec.alpha](https://github.com/babashka/spec.alpha)
A fork of `clojure.spec.alpha` that includes support for generation and
instrumentation! Its readme also contains instructions on how to use
`clojure.core.specs.alpha`.
<!-- ### [tools.bbuild](https://github.com/babashka/tools.bbuild) -->
<!-- A fork of `tools.build`. -->
### [clj-http-lite](https://github.com/clj-commons/clj-http-lite)
Example:
``` shell
$ export BABASHKA_CLASSPATH="$(clojure -Sdeps '{:deps {clj-http-lite {:git/url "https://github.com/babashka/clj-http-lite" :sha "f44ebe45446f0f44f2b73761d102af3da6d0a13e"}}}' -Spath)"
$ export BABASHKA_CLASSPATH="$(clojure -Sdeps '{:deps {org.clj-commons/clj-http-lite {:mvn/version "0.4.392"}}}' -Spath)"
$ bb "(require '[clj-http.lite.client :as client]) (:status (client/get \"https://www.clojure.org\"))"
200
@ -26,7 +137,8 @@ $ bb "(require '[clj-http.lite.client :as client]) (:status (client/get \"https:
### [spartan.spec](https://github.com/borkdude/spartan.spec/)
An babashka-compatible implementation of `clojure.spec.alpha`.
An babashka-compatible implementation of `clojure.spec.alpha`. See
[spec.alpha](#specalpha) for a more complete implementation.
### [missing.test.assertions](https://github.com/borkdude/missing.test.assertions)
@ -47,16 +159,10 @@ Ran 1 tests containing 0 assertions.
### [medley](https://github.com/weavejester/medley/)
Requires `bb` >= v0.0.71. Latest coordinates checked with with bb:
``` clojure
{:git/url "https://github.com/weavejester/medley" :sha "a4e5fb5383f5c0d83cb2d005181a35b76d8a136d"}
```
Example:
``` shell
$ export BABASHKA_CLASSPATH=$(clojure -Spath -Sdeps '{:deps {medley {:git/url "https://github.com/weavejester/medley" :sha "a4e5fb5383f5c0d83cb2d005181a35b76d8a136d"}}}')
$ export BABASHKA_CLASSPATH=$(clojure -Spath -Sdeps '{:deps {medley/medley {:mvn/version "1.3.0"}}}')
$ bb -e "(require '[medley.core :as m]) (m/index-by :id [{:id 1} {:id 2}])"
{1 {:id 1}, 2 {:id 2}}
@ -103,16 +209,10 @@ export BABASHKA_CLASSPATH="$(clojure -Sdeps '{:deps {clojure-csv {:mvn/version "
### [regal](https://github.com/lambdaisland/regal)
Requires `bb` >= v0.0.71. Latest coordinates checked with with bb:
``` clojure
{:git/url "https://github.com/lambdaisland/regal" :sha "d4e25e186f7b9705ebb3df6b21c90714d278efb7"}
```
Example:
``` shell
$ export BABASHKA_CLASSPATH=$(clojure -Spath -Sdeps '{:deps {regal {:git/url "https://github.com/lambdaisland/regal" :sha "d4e25e186f7b9705ebb3df6b21c90714d278efb7"}}}')
$ export BABASHKA_CLASSPATH=$(clojure -Spath -Sdeps '{:deps {lambdaisland/regal {:mvn/version "0.0.143"}}}')
$ bb -e "(require '[lambdaisland.regal :as regal]) (regal/regex [:* \"ab\"])"
#"(?:\Qab\E)*"
@ -120,24 +220,20 @@ $ bb -e "(require '[lambdaisland.regal :as regal]) (regal/regex [:* \"ab\"])"
### [cprop](https://github.com/tolitius/cprop/)
A clojure configuration libary. Latest test version: `"0.1.16"`.
A clojure configuration library. Latest test version: `"0.1.16"`.
### [comb](https://github.com/weavejester/comb)
Simple templating system for Clojure. Latest tested version: `"0.1.1"`.
``` clojure
$ export BABASHKA_CLASSPATH=$(clojure -Spath -Sdeps '{:deps {comb {:mvn/version "0.1.1"}}}')
$ rlwrap bb
...
user=> (require '[comb.template :as template])
user=> (template/eval "<% (dotimes [x 3] %>foo<% ) %>")
"foofoofoo"
user=> (template/eval "Hello <%= name %>" {:name "Alice"})
"Hello Alice"
user=> (def hello (template/fn [name] "Hello <%= name %>"))
user=> (hello "Alice")
"Hello Alice"
(require '[babashka.deps :as deps])
(deps/add-deps '{:deps {comb/comb {:mvn/version "0.1.1"}}})
(require '[comb.template :as template])
(template/eval "<% (dotimes [x 3] %>foo<% ) %>") ;;=> "foofoofoo"
```
### [nubank/docopt](https://github.com/nubank/docopt.clj#babashka)
@ -240,6 +336,16 @@ user> (psql/query conn "select name, subject from grades where grade = 100")
A library for word case conversions.
``` clojure
(require '[babashka.deps :as deps])
(deps/add-deps '{:deps {camel-snake-kebab/camel-snake-kebab {:mvn/version "0.4.2"}}})
(require '[camel-snake-kebab.core :as csk])
(csk/->camelCase 'flux-capacitor) ;;=> 'fluxCapacitor
```
### [aero](https://github.com/juxt/aero/)
A small library for explicit, intentful configuration.
@ -261,9 +367,13 @@ Spying and stubbing library, primarily intended for tests.
A clojure tool to navigate through your data. This example will launch a browser to view your `deps.edn`:
``` clojure
$ cat deps.edn | bb -cp `clojure -Spath -Sdeps '{:deps {djblue/portal {:mvn/version "0.4.1"}}}'` -m portal.main edn
$ cat deps.edn | bb -e "(babashka.deps/add-deps '{:deps {djblue/portal {:mvn/version \"0.9.0\"}}})" \
-e "(require 'portal.main)" \
-e '(portal.main/-main "edn")'
```
Also see [examples](https://github.com/babashka/babashka/tree/master/examples#portal).
### [version-clj](https://github.com/xsc/version-clj)
Analysis and comparison of artifact version numbers.
@ -302,38 +412,446 @@ A functional Clojure progress bar for the command line.
Tested version: 0.1.2.
### [clj-commons/fs](https://github.com/clj-commons/fs)
File system utilities for Clojure.
``` clojure
(require '[babashka.deps :as deps])
(deps/add-deps '{:deps {clj-commons/fs {:mvn/version "1.5.2"}}})
(require '[me.raynes.fs :as fs])
(fs/link? "/tmp") ;; true
```
### [cljc.java-time](https://github.com/henryw374/cljc.java-time)
``` clojure
(require '[babashka.deps :as deps])
(deps/add-deps '{:deps {cljc.java-time/cljc.java-time {:mvn/version "0.1.12"}}})
(require '[cljc.java-time.local-date :as ld])
(def a-date (ld/parse "2019-01-01"))
(ld/plus-days a-date 99)
```
### [environ](https://github.com/weavejester/environ)
Library for managing environment variables in Clojure.
``` clojure
(require '[babashka.deps :as deps])
(babashka.deps/add-deps '{:deps {environ/environ {:mvn/version "1.2.0"}}})
(require '[environ.core :refer [env]])
(prn (:path env))
```
### [gaka](https://github.com/cdaddr/gaka)
``` clojure
(ns script
(:require [babashka.deps :as deps]))
(deps/add-deps '{:deps {gaka/gaka {:mvn/version "0.3.0"}}})
(require '[gaka.core :as gaka])
(def rules [:div#foo
:margin "0px"
[:span.bar
:color "black"
:font-weight "bold"
[:a:hover
:text-decoration "none"]]])
(println (gaka/css rules))
```
Output:
``` css
div#foo {
margin: 0px;}
div#foo span.bar {
color: black;
font-weight: bold;}
div#foo span.bar a:hover {
text-decoration: none;}
```
### [failjure](https://github.com/adambard/failjure)
Working with failed computations in Clojure.
``` clojure
(require '[babashka.deps :as deps])
(deps/add-deps '{:deps {failjure/failjure {:mvn/version "2.1.1"}}})
(require '[failjure.core :as f])
(f/fail "foo")
```
### [pretty](https://github.com/AvisoNovate/pretty)
The `io.aviso.ansi` namespace provides ANSI font and background color support.
``` clojure
(require '[babashka.deps :as deps])
(deps/add-deps
'{:deps {io.aviso/pretty {:mvn/version "0.1.36"}}})
(require '[io.aviso.ansi :as ansi])
(println
(str "The following text will be "
ansi/bold-red-font "bold and red "
ansi/reset-font "but this text will not."))
```
### [clojure-term-colors](https://github.com/trhura/clojure-term-colors)
Clojure ASCII color formatting for terminal output.
``` clojure
(require '[babashka.deps :as deps])
(deps/add-deps
'{:deps {clojure-term-colors/clojure-term-colors {:mvn/version "0.1.0"}}})
(require '[clojure.term.colors :as c])
(println
(c/yellow "Yellow")
(c/red "Red")
"No color")
```
### [binf](https://github.com/helins/binf.cljc)
Handling binary formats in all shapes and forms.
### [rewrite-edn](https://github.com/borkdude/rewrite-edn)
Rewrite EDN with preservation of whitespace, based on rewrite-clj.
Example:
``` clojure
#!/usr/bin/env bb
(require '[babashka.deps :as deps])
(deps/add-deps '{:deps {borkdude/rewrite-edn {:mvn/version "0.0.2"}}})
(require '[borkdude.rewrite-edn :as r])
(def edn-string (slurp "deps.edn"))
(def nodes (r/parse-string edn-string))
(println (str (r/assoc-in nodes [:deps 'my-other-dep] {:mvn/version "0.1.2"})))
```
### [expound](https://github.com/bhb/expound)
Formats `spartan.spec` error messages in a way that is optimized for humans to read.
Example:
``` clojure
#!/usr/bin/env bb
(ns expound
(:require [babashka.deps :as deps]))
(deps/add-deps
'{:deps {borkdude/spartan.spec {:git/url "https://github.com/borkdude/spartan.spec"
:sha "bf4ace4a857c29cbcbb934f6a4035cfabe173ff1"}
expound/expound {:mvn/version "0.8.9"}}})
;; Loading spartan.spec will create a namespace clojure.spec.alpha for compatibility:
(require 'spartan.spec)
(alias 's 'clojure.spec.alpha)
;; Expound expects some vars to be there, like `fdef`. Spartan prints warnings that these are used, but doesn't implement them yet.
(require '[expound.alpha :as expound])
(s/def ::a (s/cat :i int? :j string?))
(expound/expound ::a [1 2])
```
### [omniconf](https://github.com/grammarly/omniconf)
script.clj:
``` clojure
#!/usr/bin/env bb
(ns script
(:require [babashka.deps :as deps]))
(deps/add-deps
'{:deps {com.grammarly/omniconf {:mvn/version "0.4.3"}}})
(require '[omniconf.core :as cfg])
(cfg/define {:foo {}})
(cfg/populate-from-env)
(cfg/get :foo)
```
``` text
FOO=1 script.clj
Populating Omniconf from env: 1 value(s)
"1"
```
### [slingshot](https://github.com/scgilardi/slingshot)
Enhanced try and throw for Clojure leveraging Clojure's capabilities.
``` clojure
$ export BABASHKA_CLASSPATH=$(clojure -Spath -Sdeps '{:deps {slingshot/slingshot {:mvn/version "0.12.2"}}}')
$ bb -e "(require '[slingshot.slingshot :as s]) (s/try+ (s/throw+ {:type ::foo}) (catch [:type ::foo] [] 1))"
1
```
NOTE: slingshot's tests pass with babashka except one: catching a record types
by name. This is due to a difference in how records are implemented in
babashka. This may be fixed later if this turns out to be really useful.
### [hasch](https://github.com/replikativ/hasch)
Cross-platform (JVM and JS atm.) edn data structure hashing for Clojure.
``` clojure
$ export BABASHKA_CLASSPATH=$(clojure -Spath -Sdeps '{:deps {io.replikativ/hasch {:mvn/version "0.3.7"}}}')
$ bb -e "(use 'hasch.core) (edn-hash (range 100))"
(168 252 48 247 180 148 51 182 108 76 20 251 155 187 66 8 124 123 103 28 250 151 26 139 10 216 119 168 101 123 130 225 66 168 48 63 53 99 25 117 173 29 198 229 101 196 162 30 23 145 7 166 232 193 57 239 226 238 240 41 254 78 135 122)
```
NOTE: hasch's tests pass with babashka except the test around hashing
records. This is due to a difference in how records are implemented in
babashka. This may be fixed later if this turns out to be really useful.
### [crispin](https://github.com/dunaj-project/crispin)
Populate a configuration map from multiple sources (environment variables,
system variables, config files, etc.)
Example:
script.clj
``` clojure
#!/usr/bin/env bb
(ns script
(:require [babashka.deps :as deps]))
(deps/add-deps
'{:deps {crispin/crispin {:mvn/version "0.3.8"}}})
(require '[crispin.core :as crispin])
(def app-cfg (crispin/cfg))
(app-cfg :foo)
```
``` text
FOO=1 script.clj
"1"
```
### [ffclj](https://github.com/luissantos/ffclj)
A wrapper around executing `ffmpeg` and `ffprobe`. Supports progress reporting via core.async channels.
### [multigrep](https://github.com/clj-commons/multigrep)
Regex-based file grepping and/or text substitution.
Example:
- find the words that are exactly four letters long in some strings:
```clj
(ns multigrep-demo
(:require [babashka.deps :as deps]
[clojure.pprint :refer [pprint]])
(:import (java.io StringReader)))
(deps/add-deps '{:deps {clj-commons/multigrep {:mvn/version "0.5.0"}}})
(require '[multigrep.core :as grep])
; the StringReaders could be anything that clojure.java.io/reader will accept (files, URLs, etc.)
(let [sentence1 (StringReader. "the quick brown fox jumps over the lazy dog")
sentence2 (StringReader. "Lorem ipsum dolor sit amet")]
(pprint (grep/grep #"\b[a-z]{4}\b" [sentence1 sentence2])))
```
outputs:
```
({:file
#object[java.io.StringReader...],
:line "the quick brown fox jumps over the lazy dog",
:line-number 1,
:regex #"\b[a-z]{4}\b",
:re-seq ("over" "lazy")}
{:file
#object[java.io.StringReader...],
:line "Lorem ipsum dolor sit amet",
:line-number 1,
:regex #"\b[a-z]{4}\b",
:re-seq ("amet")})
```
### [java-http-clj](https://github.com/schmee/java-http-clj)
Http client based on `java.net.http`.
### [component](https://github.com/stuartsierra/component)
A tiny Clojure framework for managing the lifecycle and dependencies of software components which have runtime state.
### [minimallist](https://github.com/green-coder/minimallist)
A minimalist data-driven data model library, inspired by Clojure Spec and Malli.
Example partially borrowed from [minimallist's cljdoc](https://cljdoc.org/d/minimallist/minimallist/CURRENT/doc/usage-in-babashka)
```clj
(require '[babashka.deps :refer [add-deps]])
(add-deps '{:deps {minimallist/minimallist {:git/url "https://github.com/green-coder/minimallist"
:sha "b373bb18b8868526243735c760bdc67a88dd1e9a"}}})
(require '[minimallist.core :as m])
(require '[minimallist.helper :as h])
(def contact (h/map [:name (h/fn string?)]
[:phone (h/fn string?)]))
(m/valid? contact {:name "Lucy" :phone "5551212"}) ;=> true
(m/valid? contact {:name "Lucy" :phone 5551212}) ;=> false
(m/describe contact {:name "Lucy" :phone "5551212"}) ;=> {:valid? true, :entries {...}}
(m/describe contact {:name "Lucy" :phone 5551212}) ;=> {:valid? false, :entries {... :phone {:valid? false...}}}
;; Does not work for now.
;(require '[clojure.test.check.generators :as tcg])
;(require '[minimallist.generator :as mg])
;(tcg/sample (mg/gen (h/fn int?)))
```
### [ruuter](https://github.com/askonomm/ruuter)
A zero-dependency router where each route is a map. Works with the httpkit server built into babashka.
### [clj-commons.digest](https://github.com/clj-commons/digest)
A message digest library, providing functions for MD5, SHA-1, SHA-256, etc.
### [contajners](https://github.com/lispyclouds/contajners)
An idiomatic, data-driven, REPL friendly clojure client for OCI container engines.
Example:
``` clojure
#!/usr/bin/env bb
(require '[babashka.deps :as deps])
(deps/add-deps '{:deps {org.clojars.lispyclouds/contajners {:mvn/version "0.0.6"}}})
(require '[contajners.core :as c])
(def images-docker (c/client {:engine :docker
:category :images
:version "v1.41"
:conn {:uri "unix:///var/run/docker.sock"}}))
; Pull an image
(c/invoke images-docker {:op :ImageCreate
:params {:fromImage "busybox:musl"}})
; list all images
(c/invoke images-docker {:op :ImageList})
```
### [dependency](https://github.com/stuartsierra/dependency)
Represent dependency graphs as a directed acylic graph.
### [specmonstah](https://github.com/reifyhealth/specmonstah)
Write concise, maintainable test fixtures with clojure.spec.alpha.
### [markdown-clj](https://github.com/yogthos/markdown-clj)
Markdown parser that translates markdown to html.
### [algo.monads](https://github.com/clojure/algo.monads)
Macros for defining monads, and definition of the most common monads.
### [datalog-parser](https://github.com/lambdaforge/datalog-parser)
Datalog parser that is compliant with datomic, datascript and datahike.
### [at-at](https://github.com/overtone/at-at)
Ahead-of-time function scheduler. Compatible with babashka 0.7.7+.
### [aysylu/loom](https://github.com/aysylu/loom)
Graph library for Clojure. Compatible with babashka 0.7.8+.
### [Clarktown](https://github.com/askonomm/clarktown)
An extensible and modular zero-dependency, pure-Clojure Markdown parser.
### [Malli](https://github.com/metosin/malli#babashka)
Data-Driven Schemas for Clojure/Script
### [Meander](https://github.com/noprompt/meander)
Tools for transparent data transformation
### [Schema](https://github.com/plumatic/schema)
Clojure(Script) library for declarative data description and validation
### [Sluj](https://github.com/rawleyfowler/sluj)
Sluj is a very small library for converting strings of UTF-16 text to slugs. A slug is a piece of text that is URL safe.
### [malli-cli](https://github.com/piotr-yuxuan/malli-cli)
Configuration and CLI powertool with `metosin/malli`.
## Pods
[Babashka pods](https://github.com/babashka/babashka.pods) are programs that can
be used as Clojure libraries by babashka.
be used as Clojure libraries by babashka. See
[pod-registry](https://github.com/babashka/pod-registry) for an overview of available pods.
Pods not available in the pod registry:
- [babashka-sql-pods](https://github.com/babashka/babashka-sql-pods): pods for
interacting with SQL databases (PostgreSQL and HSQLDB).
- [bootleg](https://github.com/retrogradeorbit/bootleg): static HTML website
generation.
- [brisk](https://github.com/justone/brisk): Freeze and thaw with Nippy at the
command line.
- [clj-kondo](https://github.com/borkdude/clj-kondo/#babashka-pod): a Clojure
linter.
- [stash](https://github.com/rorokimdim/stash): encrypted text storage.
- [pod-babashka-filewatcher](https://github.com/babashka/pod-babashka-filewatcher): a
filewatcher pod based on Rust notify.
- [pod-babashka-lanterna](https://github.com/babashka/pod-babashka-lanterna): a
pod for making TUIs based on
[clojure-lanterna](https://github.com/babashka/clojure-lanterna).
- [pod-babashka-parcera](https://github.com/babashka/pod-babashka-parcera): pod around the parcera Clojure parser.
- [pod-janet-peg](https://github.com/sogaiu/pod-janet-peg): a pod for
calling [Janet](https://github.com/janet-lang/janet)'s PEG
functionality.
- [pod-jaydeesimon-jsoup](https://github.com/jaydeesimon/pod-jaydeesimon-jsoup):
a pod for parsing HTML using CSS queries backed by Jsoup.
- [pod-lispyclouds-docker](https://github.com/lispyclouds/pod-lispyclouds-docker):
A pod for interacting with docker.
- [pod-tzzh-aws](https://github.com/tzzh/pod-tzzh-aws): pod for interacting with AWS.
- [pod-tzzh-kafka](https://github.com/tzzh/pod-tzzh-kafka): pod for interacting with Kafka.
- [pod-tzzh-mail](https://github.com/tzzh/pod-tzzh-mail): pod for sending mail.
- [pod.xledger.sql-server](https://github.com/xledger/pod_sql_server): pod for interacting with SQL Server.
- [tabl](https://github.com/justone/tabl): Make tables from data in your terminal.
## Projects
@ -387,12 +905,12 @@ A babashka script to obtain covid-19 related information.
### [bb-spotify](https://github.com/kolharsam/bb-spotify)
Contol your spotify player using babashka.
Control your spotify player using babashka.
### [lambdaisland/open-source](https://github.com/lambdaisland/open-source)
[Internal
tooling](https://github.com/borkdude/babashka/issues/457#issuecomment-636739415)
tooling](https://github.com/babashka/babashka/issues/457#issuecomment-636739415)
used by Lambda Island projects. Noteworthy: a [babashka-compatible hiccup
script](https://github.com/lambdaisland/open-source/blob/2cfde3dfb460e72f047bf94e6f5ec7f519c6d7a0/src/lioss/hiccup.clj).
@ -421,3 +939,34 @@ Manage interdependent dependencies using Clojure's tools.deps and babashka.
### [sha-words](https://github.com/ordnungswidrig/sha-words)
A clojure program to turn a sha hash into list of nouns in a predictable jar.
### [adam-james-v/scripts](https://github.com/adam-james-v/scripts)
A collection of useful scripts. Mainly written with Clojure/babashka
### [oidc-client](https://gist.github.com/holyjak/ad4e1e9b863f8ed57ef0cb6ac6b30494)
Tired of being forced to use the browser every time you need to refresh an OIDC token to authenticate with a backend service? Finally there is a CLI tool for that - the babashka and Docker powered oidc_client.clj.
Upon first invocation it opens up a browser for the OIDC provider login, thereafter it caches the refresh token and uses it as long as it remains valid.
### [jirazzz](https://github.com/rwstauner/jirazzz)
A babashka JIRA client by Randy Stauner
### [Babashka + scittle guestbook](https://github.com/kloimhardt/babashka-scittle-guestbook)
Luminus guestbook example for Babashka + Scittle.
### [bb htmx todo app](https://github.com/prestancedesign/babashka-htmx-todoapp)
Quick example of a todo list SPA using Babashka and htmx.
### [bb aws lambda runtime](https://github.com/tatut/bb-lambda)
AWS Lambda custom runtime for Babashka scripts.
### [bb-github-app](https://github.com/brandonstubbs/bb-github-app)
An example Babashka script that can authenticate as a Github Application,
this example focuses on the checks api.

View file

@ -73,7 +73,7 @@ that widely used from babashka.
Some people are using babashka for interacting with SQL databases. There are two
ways to do this: compile babashka with extra [feature
flags](https://github.com/borkdude/babashka/blob/master/doc/build.md#feature-flags)
flags](https://github.com/babashka/babashka/blob/master/doc/build.md#feature-flags)
enabled or use
[babashka-sql-pods](https://github.com/babashka/babashka-sql-pods/).
@ -139,7 +139,7 @@ into the next question.
*My comment:*
Clearly users want an easier way to include libraries and pods. We are thinking
about that in [this](https://github.com/borkdude/babashka/issues/473) issue.
about that in [this](https://github.com/babashka/babashka/issues/473) issue.
The second most mentioned missing feature was a library around files. This is
work in progress [here](https://github.com/babashka/fs).
@ -152,7 +152,7 @@ ways of making http requests.
*My comment:* If have attempted to write about HTTP request in babashka
[here](https://book.babashka.org/#_choosing_the_right_client) and
[here](https://github.com/borkdude/babashka/wiki/HTTP-client-and-server-considerations).
[here](https://github.com/babashka/babashka/wiki/HTTP-client-and-server-considerations).
The summary is that both `babashka.curl` and `org.httpkit.client` have different
optimal use cases. In most small scripting scenarios `babashka.curl` will
do. For making many small requests `org.httpkit.client` is more optimal since it

View file

@ -1,5 +1,47 @@
# Examples
- [Examples](#examples)
- [Delete a list of files returned by a Unix command](#delete-a-list-of-files-returned-by-a-unix-command)
- [Calculate aggregate size of directory](#calculate-aggregate-size-of-directory)
- [Shuffle the lines of a file](#shuffle-the-lines-of-a-file)
- [Fetch latest Github release tag](#fetch-latest-github-release-tag)
- [Generate deps.edn entry for a gitlib](#generate-depsedn-entry-for-a-gitlib)
- [View download statistics from Clojars](#view-download-statistics-from-clojars)
- [Portable tree command](#portable-tree-command)
- [List outdated maven dependencies](#list-outdated-maven-dependencies)
- [Convert project.clj to deps.edn](#convert-projectclj-to-depsedn)
- [Print current time in California](#print-current-time-in-california)
- [Tiny http server](#tiny-http-server)
- [Print random docstring](#print-random-docstring)
- [Cryptographic hash](#cryptographic-hash)
- [Package script as Docker image](#package-script-as-docker-image)
- [Extract single file from zip](#extract-single-file-from-zip)
- [Note taking app](#note-taking-app)
- [which](#which)
- [pom.xml version](#pomxml-version)
- [Whatsapp frequencies](#whatsapp-frequencies)
- [Find unused vars](#find-unused-vars)
- [List contents of jar file](#list-contents-of-jar-file)
- [Invoke vim inside a script](#invoke-vim-inside-a-script)
- [Portal](#portal)
- [Image viewer](#image-viewer)
- [HTTP server](#http-server)
- [Torrent viewer](#torrent-viewer)
- [cprop.clj](#cpropclj)
- [fzf](#fzf)
- [digitalocean-ping.clj](#digitalocean-pingclj)
- [download-aliases.clj](#download-aliasesclj)
- [Is TTY?](#is-tty)
- [normalize-keywords.clj](#normalize-keywordsclj)
- [Check stdin for data](#check-stdin-for-data)
- [Using org.clojure/data.xml](#using-orgclojuredataxml)
- [Simple logger](#simple-logger)
- [Using GZip streams (memo utility)](#using-gzip-streams-to-make-a-note-utility)
- [Pretty-printing mySQL results](#pretty-printing-mysql-results)
- [Single page application with Babashka + htmx](#single-page-application-with-babashka--htmx)
- [Wikipedia translation](#wikipedia-translation)
Here's a gallery of useful examples. Do you have a useful example? PR welcome!
## Delete a list of files returned by a Unix command
@ -52,7 +94,7 @@ $ < /tmp/test.txt bb -io '(shuffle *input*)'
'[cheshire.core :as json])
(defn babashka-latest-version []
(-> (sh "curl" "https://api.github.com/repos/borkdude/babashka/tags")
(-> (sh "curl" "https://api.github.com/repos/babashka/babashka/tags")
:out
(json/parse-string true)
first
@ -105,7 +147,7 @@ less
## Portable tree command
See [examples/tree.clj](https://github.com/borkdude/babashka/blob/master/examples/tree.clj).
See [examples/tree.clj](https://github.com/babashka/babashka/blob/master/examples/tree.clj).
``` shellsession
$ clojure -Sdeps '{:deps {org.clojure/tools.cli {:mvn/version "0.4.2"}}}' examples/tree.clj src
@ -127,7 +169,7 @@ src
## List outdated maven dependencies
See [examples/outdated.clj](https://github.com/borkdude/babashka/blob/master/examples/outdated.clj).
See [examples/outdated.clj](https://github.com/babashka/babashka/blob/master/examples/outdated.clj).
Inspired by an idea from [@seancorfield](https://github.com/seancorfield).
``` shellsession
@ -157,17 +199,19 @@ A script with the same goal can be found [here](https://gist.github.com/swlkr/3f
## Print current time in California
See [examples/pst.clj](https://github.com/borkdude/babashka/blob/master/examples/pst.clj)
See [examples/pst.clj](https://github.com/babashka/babashka/blob/master/examples/pst.clj)
## Tiny http server
See [examples/http_server.clj](https://github.com/borkdude/babashka/blob/master/examples/http_server.clj)
This implements an http server from scratch. Note that babashka comes with `org.httpkit.server` now, so you don't need to build an http server from scratch anymore.
See [examples/http_server_from_scratch.clj](https://github.com/babashka/babashka/blob/master/examples/http_server_from_scratch.clj)
Original by [@souenzzo](https://gist.github.com/souenzzo/a959a4c5b8c0c90df76fe33bb7dfe201)
## Print random docstring
See [examples/random_doc.clj](https://github.com/borkdude/babashka/blob/master/examples/random_doc.clj)
See [examples/random_doc.clj](https://github.com/babashka/babashka/blob/master/examples/random_doc.clj)
``` shell
$ examples/random_doc.clj
@ -205,7 +249,7 @@ $ sha1.clj babashka
`Dockerfile`:
``` dockerfile
FROM borkdude/babashka
FROM babashka/babashka
RUN echo $'\
(println "Your command line args:" *command-line-args*)\
'\
@ -244,15 +288,15 @@ Your command line args: (1 2 3)
## Note taking app
See
[examples/notes.clj](https://github.com/borkdude/babashka/blob/master/examples/notes.clj). This
[examples/notes.clj](https://github.com/babashka/babashka/blob/master/examples/notes.clj). This
is a variation on the
[http-server](https://github.com/borkdude/babashka/#tiny-http-server)
[http-server](https://github.com/babashka/babashka/#tiny-http-server)
example. If you get prompted with a login, use `admin`/`admin`.
## which
The `which` command re-implemented in Clojure. See
[examples/which.clj](https://github.com/borkdude/babashka/blob/master/examples/which.clj).
[examples/which.clj](https://github.com/babashka/babashka/blob/master/examples/which.clj).
Prints the canonical file name.
``` shell
@ -265,6 +309,8 @@ $ examples/which.clj rg
A script to retrieve the version from a `pom.xml` file. See
[pom_version_get.clj](pom_version_get.clj). Written by [@wilkerlucio](https://github.com/wilkerlucio).
See [pom_version_get_xml_zip.clj](pom_version_get_xml_zip.clj) for how to do the same using zippers.
Also see [pom_version_set.clj](pom_version_set.clj) to set the pom version.
## Whatsapp frequencies
@ -307,11 +353,11 @@ META-INF/leiningen/borkdude/sci/project.clj
...
```
### Invoke vim inside a script
## Invoke vim inside a script
See [examples/vim.clj](vim.clj).
### Portal
## Portal
This script uses [djblue/portal](https://github.com/djblue/portal/) for inspecting EDN, JSON, XML or YAML files.
@ -323,19 +369,32 @@ $ examples/portal.clj ~/git/clojure/pom.xml
See [portal.clj](portal.clj).
### Image viewer
## Image viewer
Opens browser window and lets user navigate through images of all sub-directories.
Example usage:
``` shell
$ examples/image_viewer.clj
$ examples/image-viewer.clj
```
See [image_viewer.clj](image_viewer.clj).
See [image-viewer.clj](image-viewer.clj).
### Torrent viewer
## HTTP Server
Opens browser window and lets user navigate through filesystem, similar to
`python3 -m http.server`.
Example usage:
``` shell
$ examples/http-server.clj
```
See [http-server.clj](http-server.clj).
## Torrent viewer
Shows the content of a torrent file. Note that pieces' content is hidden.
@ -346,7 +405,7 @@ $ examples/torrent-viewer.clj file.torrent
See [torrent-viewer.clj](torrent-viewer.clj).
### [cprop.clj](cprop.clj)
## [cprop.clj](cprop.clj)
This script uses [tolitius/cprop](https://github.com/tolitius/cprop) library.
@ -358,7 +417,7 @@ Example usage:
$ ( cd examples && bb cprop.clj )
```
### [fzf](fzf.clj)
## [fzf](fzf.clj)
Invoke [fzf](https://github.com/junegunn/fzf), a command line fuzzy finder, from babashka.
@ -370,14 +429,142 @@ Example usage:
$ cat src/babashka/main.clj | bb examples/fzf.clj
```
### [rofi](rofi.clj)
## [digitalocean-ping.clj](digitalocean-ping.clj)
Invoke [rofi](https://github.com/davatorium/rofi), a type-to-filter menu on linux, from babashka.
The script allows to define which DigitalOcean cloud datacenter (region) has best network performance (ping latency).
See [rofi.clj](rofi.clj)
See [digitalocean-ping.clj](digitalocean-ping.clj)
Example usage:
``` shell
$ cat src/babashka/main.clj | bb examples/rofi.clj
$ bb digitalocean-ping.clj
```
## [download-aliases.clj](download-aliases.clj)
Download deps for all aliases in a deps.edn project.
## [Is TTY?](is_tty.clj)
An equivalent of Python's `os.isatty()` in Babashka, to check if the
`stdin`/`stdout`/`stderr` is connected to a TTY or not (useful to check if the
script output is being redirect to `/dev/null`, for example).
Only works in Unix systems.
``` shell
$ bb is-tty.clj
STDIN is TTY?: true
STDOUT is TTY?: true
STDERR is TTY?: true
$ bb is-tty.clj </dev/null
STDIN is TTY?: false
STDOUT is TTY?: true
STDERR is TTY?: true
$ bb is-tty.clj 1>&2 >/dev/null
STDIN is TTY?: true
STDOUT is TTY?: false
STDERR is TTY?: true
$ bb is-tty.clj 2>/dev/null
STDIN is TTY?: true
STDOUT is TTY?: true
STDERR is TTY?: false
```
## [normalize-keywords.clj](normalize-keywords.clj)
Provide a Clojure file to the script and it will print the Clojure file with
auto-resolved keywords normalized to fully qualified ones without double colons:
`::set/foo` becomes `:clojure.set/foo`.
``` clojure
$ cat /tmp/test.clj
(ns test (:require [clojure.set :as set]))
[::set/foo ::bar]
$ bb examples/normalize-keywords.clj /tmp/test.clj
(ns test (:require [clojure.set :as set]))
[:clojure.set/foo :test/bar]
```
## Check stdin for data
```shell
# when piping something in, we get a positive number
$ echo 'abc' | bb '(pos? (.available System/in))'
true
# even if we echo an empty string, we still get the newline
$ echo '' | bb '(pos? (.available System/in))'
true
# with nothing passed in, we finally return false
$ bb '(pos? (.available System/in))'
false
```
## Using org.clojure/data.xml
[xml-example.clj](xml-example.clj) explores some of the capabilities provided
by the `org.clojure/data.xml` library (required as `xml` by default in Babashka).
While running the script will show some output, reading the file shows the library
in use.
```shell
$ bb examples/xml-example.clj
... some vaguely interesting XML manipulation output
```
## Simple logger
[logger.clj](logger.clj) is a simple logger that works in bb.
``` clojure
$ bb "(require 'logger) (logger/log \"the logger says hi\")"
<expr>:1:19 the logger says hi
```
## Using GZip streams to make a note utility
[memo.clj](memo.clj) creates zip files in /tmp for stashing notes (possibly the most inefficient KV store ever)
```shell
$ echo "8675309" | memo.clj put jenny
ok
$ memo.clj get jenny
8675309
```
## Pretty-printing mySQL results
[db_who.clj](db_who.clj) will query mysql for all the connected sessions and pretty-print the user and what program they're using.
```
$ bb db_who.clj
| user | program_name |
|------------------+----------------|
| root@localhost | mysql |
| fred@192.168.1.2 | workbench |
| jane@192.168.1.3 | Toad for mySQL |
```
## Single page application with Babashka + htmx
Example of a todo list SPA using Babashka and htmx
See [htmx_todoapp.clj](htmx_todoapp.clj)
Contributed by [@prestancedesign](https://github.com/prestancedesign).
## Wikipedia translation
[wiki-translate.clj](wiki-translate.clj) uses Wikipedia to translate words from English to Dutch (other languages are available).
``` shell
$ bb wiki-translate.clj window
"Venster (muur) Dutch"
```
Shared by Janne Himanka on Clojurians Slack

11
examples/db_who.clj Normal file
View file

@ -0,0 +1,11 @@
(ns db-who
(:require [clojure.java.shell :as shell]
[clojure.string :as str]
[clojure.pprint :as pp]))
(defn tsv->maps [tsv]
(let [lines (str/split-lines tsv)
[headers & rows] (map #(str/split % #"\t") lines)]
(map #(zipmap headers %) rows)))
(-> (shell/sh "mysql" "--column-names" "-e" "select user, program_name from sys.session;")
:out tsv->maps pp/print-table)

View file

@ -0,0 +1,30 @@
#!/usr/bin/env bb
(require '[babashka.curl :as curl]
'[clojure.java.shell :as shell]
'[clojure.string :as str])
(def url "http://speedtest-ams2.digitalocean.com/")
(def get-endpoints
(let [{:keys [body]} (curl/get url)]
(re-seq #"speedtest\-.+.digitalocean.com" body)))
(defn get-average [result]
(-> result
str/split-lines
last
(str/split #"/")
(get 4)))
(def mac? (str/starts-with? (System/getProperty "os.name") "Mac"));; TODO: test on Windows
(def timeout-arg (if mac? "-t3" "-w3"))
(defn ping-result [endpoint]
(let [{:keys [out]} (shell/sh "ping" "-c5" timeout-arg endpoint)
msg (str endpoint " => " (get-average out) "ms")]
(println msg)))
(doseq [endpoint get-endpoints]
(ping-result endpoint))

16
examples/download-aliases.clj Executable file
View file

@ -0,0 +1,16 @@
#!/usr/bin/env bb
(require '[clojure.edn :as edn]
'[clojure.string :as str])
(def edn (edn/read-string (slurp "deps.edn")))
(def aliases (keys (:aliases edn)))
(require '[babashka.deps :as deps])
(def cmd ["-P" (str "-A" (str/join aliases))])
(println "Downloading deps using:" cmd)
(deps/clojure cmd)

240
examples/htmx_todoapp.clj Normal file
View file

@ -0,0 +1,240 @@
#!/usr/bin/env bb
;; Source: https://github.com/prestancedesign/babashka-htmx-todoapp
(require '[org.httpkit.server :as srv]
'[clojure.java.browse :as browse]
'[clojure.core.match :refer [match]]
'[clojure.pprint :refer [cl-format]]
'[clojure.string :as str]
'[hiccup.core :as h])
(import '[java.net URLDecoder])
;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Config
;;;;;;;;;;;;;;;;;;;;;;;;;;
(def port 3000)
;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Mimic DB (in-memory)
;;;;;;;;;;;;;;;;;;;;;;;;;;
(def todos (atom (sorted-map 1 {:id 1 :name "Taste htmx with Babashka" :done true}
2 {:id 2 :name "Buy a unicorn" :done false})))
(def todos-id (atom (count @todos)))
;;;;;;;;;;;;;;;;;;;;;;;;;;
;; "DB" queries
;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn add-todo! [name]
(let [id (swap! todos-id inc)]
(swap! todos assoc id {:id id :name name :done false})))
(defn toggle-todo! [id]
(swap! todos update-in [(Integer. id) :done] not))
(defn remove-todo! [id]
(swap! todos dissoc (Integer. id)))
(defn filtered-todo [filter-name todos]
(case filter-name
"active" (remove #(:done (val %)) todos)
"completed" (filter #(:done (val %)) todos)
"all" todos
todos))
(defn get-items-left []
(count (remove #(:done (val %)) @todos)))
(defn todos-completed []
(count (filter #(:done (val %)) @todos)))
(defn remove-all-completed-todo []
(reset! todos (into {} (remove #(:done (val %)) @todos))))
;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Template and components
;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn todo-item [{:keys [id name done]}]
[:li {:id (str "todo-" id)
:class (when done "completed")}
[:div.view
[:input.toggle {:hx-patch (str "/todos/" id)
:type "checkbox"
:checked done
:hx-target (str "#todo-" id)
:hx-swap "outerHTML"}]
[:label {:hx-get (str "/todos/edit/" id)
:hx-target (str "#todo-" id)
:hx-swap "outerHTML"} name]
[:button.destroy {:hx-delete (str "/todos/" id)
:_ (str "on htmx:afterOnLoad remove #todo-" id)}]]])
(defn todo-list [todos]
(for [todo todos]
(todo-item (val todo))))
(defn todo-edit [id name]
[:form {:hx-post (str "/todos/update/" id)}
[:input.edit {:type "text"
:name "name"
:value name}]])
(defn item-count []
(let [items-left (get-items-left)]
[:span#todo-count.todo-count {:hx-swap-oob "true"}
[:strong items-left] (cl-format nil " item~p " items-left) "left"]))
(defn todo-filters [filter]
[:ul#filters.filters {:hx-swap-oob "true"}
[:li [:a {:hx-get "/?filter=all"
:hx-push-url "true"
:hx-target "#todo-list"
:class (when (= filter "all") "selected")} "All"]]
[:li [:a {:hx-get "/?filter=active"
:hx-push-url "true"
:hx-target "#todo-list"
:class (when (= filter "active") "selected")} "Active"]]
[:li [:a {:hx-get "/?filter=completed"
:hx-push-url "true"
:hx-target "#todo-list"
:class (when (= filter "completed") "selected")} "Completed"]]])
(defn clear-completed-button []
[:button#clear-completed.clear-completed
{:hx-delete "/todos"
:hx-target "#todo-list"
:hx-swap-oob "true"
:hx-push-url "/"
:class (when-not (pos? (todos-completed)) "hidden")}
"Clear completed"])
(defn template [filter]
(str
"<!DOCTYPE html>"
(h/html
[:head
[:meta {:charset "UTF-8"}]
[:title "Htmx + Babashka"]
[:link {:href "https://unpkg.com/todomvc-app-css@2.4.1/index.css" :rel "stylesheet"}]
[:script {:src "https://unpkg.com/htmx.org@1.5.0/dist/htmx.min.js" :defer true}]
[:script {:src "https://unpkg.com/hyperscript.org@0.8.1/dist/_hyperscript.min.js" :defer true}]]
[:body
[:section.todoapp
[:header.header
[:h1 "todos"]
[:form
{:hx-post "/todos"
:hx-target "#todo-list"
:hx-swap "beforeend"
:_ "on htmx:afterOnLoad set #txtTodo.value to ''"}
[:input#txtTodo.new-todo
{:name "todo"
:placeholder "What needs to be done?"
:autofocus ""}]]]
[:section.main
[:input#toggle-all.toggle-all {:type "checkbox"}]
[:label {:for "toggle-all"} "Mark all as complete"]]
[:ul#todo-list.todo-list
(todo-list (filtered-todo filter @todos))]
[:footer.footer
(item-count)
(todo-filters filter)
(clear-completed-button)]]
[:footer.info
[:p "Click to edit a todo"]
[:p "Created by "
[:a {:href "https://twitter.com/PrestanceDesign"} "Michaël Sλlihi"]]
[:p "Part of "
[:a {:href "http://todomvc.com"} "TodoMVC"]]]])))
;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Helpers
;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn parse-body [body]
(-> body
slurp
(str/split #"=")
second
URLDecoder/decode))
(defn parse-query-string [query-string]
(when query-string
(-> query-string
(str/split #"=")
second)))
;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Handlers
;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn app-index [{:keys [query-string headers]}]
(let [filter (parse-query-string query-string)
ajax-request? (get headers "hx-request")]
(if (and filter ajax-request?)
(h/html (todo-list (filtered-todo filter @todos))
(todo-filters filter))
(template filter))))
(defn add-item [{body :body}]
(let [name (parse-body body)
todo (add-todo! name)]
(h/html (todo-item (val (last todo)))
(item-count))))
(defn edit-item [id]
(let [{:keys [id name]} (get @todos (Integer. id))]
(h/html (todo-edit id name))))
(defn update-item [{body :body} id]
(let [name (parse-body body)
todo (swap! todos assoc-in [(Integer. id) :name] name)]
(h/html (todo-item (get todo (Integer. id))))))
(defn patch-item [id]
(let [todo (toggle-todo! id)]
(h/html (todo-item (get todo (Integer. id)))
(item-count)
(clear-completed-button))))
(defn delete-item [id]
(remove-todo! id)
(h/html (item-count)))
(defn clear-completed []
(remove-all-completed-todo)
(h/html (todo-list @todos)
(item-count)
(clear-completed-button)))
;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Routes
;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn routes [{:keys [request-method uri] :as req}]
(let [path (vec (rest (str/split uri #"/")))]
(match [request-method path]
[:get []] {:body (app-index req)}
[:get ["todos" "edit" id]] {:body (edit-item id)}
[:post ["todos"]] {:body (add-item req)}
[:post ["todos" "update" id]] {:body (update-item req id)}
[:patch ["todos" id]] {:body (patch-item id)}
[:delete ["todos" id]] {:body (delete-item id)}
[:delete ["todos"]] {:body (clear-completed)}
:else {:status 404 :body "Error 404: Page not found"})))
;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Server
;;;;;;;;;;;;;;;;;;;;;;;;;;
(when (= *file* (System/getProperty "babashka.file"))
(let [url (str "http://localhost:" port "/")]
(srv/run-server #'routes {:port port})
(println "serving" url)
(browse/browse-url url)
@(promise)))

196
examples/http-server.clj Executable file
View file

@ -0,0 +1,196 @@
#!/usr/bin/env bb
#_" -*- mode: clojure; -*-"
;; Source: https://gist.github.com/holyjak/36c6284c047ffb7573e8a34399de27d8
;; Based on https://github.com/babashka/babashka/blob/master/examples/image-viewer.clj
(ns http-server
(:require [babashka.fs :as fs]
[clojure.java.browse :as browse]
[clojure.string :as str]
[clojure.tools.cli :refer [parse-opts]]
[hiccup2.core :as html]
[org.httpkit.server :as server])
(:import [java.net URLDecoder URLEncoder]))
(def cli-options [["-p" "--port PORT" "Port for HTTP server" :default 8090 :parse-fn #(Integer/parseInt %)]
["-d" "--dir DIR" "Directory to serve files from" :default "."]
["-h" "--help" "Print usage info"]])
(def parsed-args (parse-opts *command-line-args* cli-options))
(def opts (:options parsed-args))
(cond
(:help opts)
(do (println "Start a http server for static files in the given dir. Usage:\n" (:summary parsed-args))
(System/exit 0))
(:errors parsed-args)
(do (println "Invalid arguments:\n" (str/join "\n" (:errors parsed-args)))
(System/exit 1))
:else
:continue)
(def port (:port opts))
(def dir (fs/path (:dir opts)))
(assert (fs/directory? dir) (str "The given dir `" dir "` is not a directory."))
;; A simple mime type utility from https://github.com/ring-clojure/ring/blob/master/ring-core/src/ring/util/mime_type.clj
(def ^{:doc "A map of file extensions to mime-types."}
default-mime-types
{"7z" "application/x-7z-compressed"
"aac" "audio/aac"
"ai" "application/postscript"
"appcache" "text/cache-manifest"
"asc" "text/plain"
"atom" "application/atom+xml"
"avi" "video/x-msvideo"
"bin" "application/octet-stream"
"bmp" "image/bmp"
"bz2" "application/x-bzip"
"class" "application/octet-stream"
"cer" "application/pkix-cert"
"crl" "application/pkix-crl"
"crt" "application/x-x509-ca-cert"
"css" "text/css"
"csv" "text/csv"
"deb" "application/x-deb"
"dart" "application/dart"
"dll" "application/octet-stream"
"dmg" "application/octet-stream"
"dms" "application/octet-stream"
"doc" "application/msword"
"dvi" "application/x-dvi"
"edn" "application/edn"
"eot" "application/vnd.ms-fontobject"
"eps" "application/postscript"
"etx" "text/x-setext"
"exe" "application/octet-stream"
"flv" "video/x-flv"
"flac" "audio/flac"
"gif" "image/gif"
"gz" "application/gzip"
"htm" "text/html"
"html" "text/html"
"ico" "image/x-icon"
"iso" "application/x-iso9660-image"
"jar" "application/java-archive"
"jpe" "image/jpeg"
"jpeg" "image/jpeg"
"jpg" "image/jpeg"
"js" "text/javascript"
"json" "application/json"
"lha" "application/octet-stream"
"lzh" "application/octet-stream"
"mov" "video/quicktime"
"m3u8" "application/x-mpegurl"
"m4v" "video/mp4"
"mjs" "text/javascript"
"mp3" "audio/mpeg"
"mp4" "video/mp4"
"mpd" "application/dash+xml"
"mpe" "video/mpeg"
"mpeg" "video/mpeg"
"mpg" "video/mpeg"
"oga" "audio/ogg"
"ogg" "audio/ogg"
"ogv" "video/ogg"
"pbm" "image/x-portable-bitmap"
"pdf" "application/pdf"
"pgm" "image/x-portable-graymap"
"png" "image/png"
"pnm" "image/x-portable-anymap"
"ppm" "image/x-portable-pixmap"
"ppt" "application/vnd.ms-powerpoint"
"ps" "application/postscript"
"qt" "video/quicktime"
"rar" "application/x-rar-compressed"
"ras" "image/x-cmu-raster"
"rb" "text/plain"
"rd" "text/plain"
"rss" "application/rss+xml"
"rtf" "application/rtf"
"sgm" "text/sgml"
"sgml" "text/sgml"
"svg" "image/svg+xml"
"swf" "application/x-shockwave-flash"
"tar" "application/x-tar"
"tif" "image/tiff"
"tiff" "image/tiff"
"ts" "video/mp2t"
"ttf" "font/ttf"
"txt" "text/plain"
"webm" "video/webm"
"wmv" "video/x-ms-wmv"
"woff" "font/woff"
"woff2" "font/woff2"
"xbm" "image/x-xbitmap"
"xls" "application/vnd.ms-excel"
"xml" "text/xml"
"xpm" "image/x-xpixmap"
"xwd" "image/x-xwindowdump"
"zip" "application/zip"})
;; https://github.com/ring-clojure/ring/blob/master/ring-core/src/ring/util/mime_type.clj
(defn- filename-ext
"Returns the file extension of a filename or filepath."
[filename]
(if-let [ext (second (re-find #"\.([^./\\]+)$" filename))]
(str/lower-case ext)))
;; https://github.com/ring-clojure/ring/blob/master/ring-core/src/ring/util/mime_type.clj
(defn ext-mime-type
"Get the mimetype from the filename extension. Takes an optional map of
extensions to mimetypes that overrides values in the default-mime-types map."
([filename]
(ext-mime-type filename {}))
([filename mime-types]
(let [mime-types (merge default-mime-types mime-types)]
(mime-types (filename-ext filename)))))
(defn index [f]
(let [files (map #(str (.relativize dir %))
(fs/list-dir f))]
{:body (-> [:html
[:head
[:meta {:charset "UTF-8"}]
[:title (str "Index of `" f "`")]]
[:body
[:h1 "Index of " [:code (str f)]]
[:ul
(for [child files]
[:li [:a {:href (URLEncoder/encode (str child))} child
(when (fs/directory? (fs/path dir child)) "/")]])]
[:hr]
[:footer {:style {"text-aling" "center"}} "Served by http-server.clj"]]]
html/html
str)}))
(defn body [path]
{:headers {"Content-Type" (ext-mime-type (fs/file-name path))}
:body (fs/file path)})
(server/run-server
(fn [{:keys [:uri]}]
(let [f (fs/path dir (str/replace-first (URLDecoder/decode uri) #"^/" ""))
index-file (fs/path f "index.html")]
(cond
(and (fs/directory? f) (fs/readable? index-file))
(body index-file)
(fs/directory? f)
(index f)
(fs/readable? f)
(body f)
:else
{:status 404 :body (str "Not found `" f "` in " dir)})))
{:port port})
(println "Starting http server at " port "for" (str dir))
(browse/browse-url (format "http://localhost:%s/" port))
@(promise)

View file

@ -1,10 +1,13 @@
#!/usr/bin/env bb
;; This example creates a file serving web server
;; This example creates a file serving web server from scratch.
;; It accepts a single connection from a browser and serves content to the connected browser
;; after the connection times out, this script will serve no more.
;; Also see notes.clj for another web app example.
;; Note that babashka comes with org.httpkit.server now, so you don't need to
;; build an http server from scratch anymore. We leave this script here for educational purposes.
(import (java.net ServerSocket))
(require '[clojure.java.io :as io]
'[clojure.string :as string])

21
examples/is_tty.clj Executable file
View file

@ -0,0 +1,21 @@
#!/usr/bin/env bb
(ns is-tty
(:require [babashka.process :as p]))
(defn- is-tty
[fd key]
(-> ["test" "-t" (str fd)]
(p/process {key :inherit :env {}})
deref
:exit
(= 0)))
(defn in-is-tty? [] (is-tty 0 :in))
(defn out-is-tty? [] (is-tty 1 :out))
(defn err-is-tty? [] (is-tty 2 :err))
(when (= *file* (System/getProperty "babashka.file"))
(println "STDIN is TTY?:" (in-is-tty?))
(println "STDOUT is TTY?:" (out-is-tty?))
(println "STDERR is TTY?:" (err-is-tty?)))

11
examples/logger.clj Normal file
View file

@ -0,0 +1,11 @@
(ns logger)
(defmacro log [& msgs]
(let [m (meta &form)
_ns (ns-name *ns*) ;; can also be used for logging
file *file*]
`(binding [*out* *err*] ;; or bind to (io/writer log-file)
(println (str ~file ":"
~(:line m) ":"
~(:column m))
~@msgs))))

16
examples/memo.clj Normal file
View file

@ -0,0 +1,16 @@
#!/usr/bin/env bb
(defn stash [file-name]
(with-open [os (java.util.zip.GZIPOutputStream. (io/output-stream (str "/tmp/" file-name ".zip")))]
(.write os (.getBytes (slurp *in*)))
(.finish os))
'ok)
(defn unstash [file-name]
(print (slurp (java.util.zip.GZIPInputStream. (io/input-stream (str "/tmp/" file-name ".zip"))))))
(let [[action stash-name] *command-line-args*]
(case action
"put" (stash stash-name)
"get" (unstash stash-name)
(println "Invalid op:" action)))

View file

@ -0,0 +1,43 @@
(ns normalize-keywords
(:require [babashka.pods :as pods]
[clojure.java.io :as io]
[rewrite-clj.node :as node]
[rewrite-clj.zip :as z]))
(pods/load-pod 'clj-kondo/clj-kondo "2022.11.02")
(require '[pod.borkdude.clj-kondo :as clj-kondo])
(def code (first *command-line-args*))
(defn findings [file-path]
(->> (clj-kondo/run! {:lint [file-path]
:config {:output {:analysis {:keywords true}}}})
:analysis
:keywords
(filter (some-fn :alias :auto-resolved))))
(defn finding->keyword [{:keys [:ns :name]}]
(keyword (str ns) (str name)))
(defn remove-locs [zloc findings]
(loop [zloc zloc
findings (seq findings)]
(if findings
(let [{:keys [:row :col] :as finding} (first findings)
node (z/node zloc)
m (meta node)]
(if (and (= row (:row m))
(= col (:col m)))
(let [k (finding->keyword finding)
zloc (z/replace zloc (node/coerce k))]
(recur zloc (next findings)))
(recur (z/next zloc) findings)))
(str (z/root zloc)))))
(doseq [f (file-seq (io/file code))
:when (re-find #"\.clj[cdsx]?$" (str f))
:let [file-path (str f)]]
(when-let [findings' (findings file-path)]
(prn (format "Rewriting %s" file-path))
(spit f (remove-locs (z/of-file file-path) findings'))))

View file

@ -1,8 +1,9 @@
#!/usr/bin/env bb
(import (java.net ServerSocket))
(require '[clojure.java.io :as io]
'[clojure.string :as str])
'[clojure.pprint :refer [pprint]]
'[clojure.string :as str]
'[org.httpkit.server :as server])
(def debug? true)
(def user "admin")
@ -35,43 +36,23 @@
(str/join " " (map html v))
:else (str v)))
(defn write-response [out session-id status headers content]
(let [cookie-header (str "Set-Cookie: notes-id=" session-id)
headers (str/join "\r\n" (conj headers cookie-header))
response (str "HTTP/1.1 " status "\r\n"
(str headers "\r\n")
"Content-Length: " (if content (count content)
0)
"\r\n\r\n"
(when content
(str content)))]
(when debug? (println response))
(binding [*out* out]
(print response)
(flush))))
;; the home page
(defn home-response [out session-id]
(let [body (str
"<!DOCTYPE html>\n"
(html
[:html
[:head
[:title "Notes"]]
[:body
[:h1 "Notes"]
[:pre (when (.exists notes-file)
(slurp notes-file))]
[:form {:action "/" :method "post"}
[:input {:type "text" :name "note"}]
[:input {:type "submit" :value "Submit"}]]]]))]
(write-response out session-id "200 OK" nil body)))
(defn basic-auth-response [out session-id]
(write-response out session-id
"401 Unauthorized"
["WWW-Authenticate: Basic realm=\"notes\""]
nil))
(defn home-response [session-id]
{:status 200
:headers {"Set-Cookie" (str "notes-id=" session-id)}
:body (str
"<!DOCTYPE html>\n"
(html
[:html
[:head
[:title "Notes"]]
[:body
[:h1 "Notes"]
[:pre (when (.exists notes-file)
(slurp notes-file))]
[:form {:action "/" :method "post"}
[:input {:type "text" :name "note"}]
[:input {:type "submit" :value "Submit"}]]]]))})
(def known-sessions
(atom #{}))
@ -81,67 +62,54 @@
(swap! known-sessions conj uuid)
uuid))
(defn get-session-id [headers]
(if-let [cookie-header (first (filter #(str/starts-with? % "Cookie: ") headers))]
(let [parts (str/split cookie-header #"; ")]
(if-let [notes-id (first (filter #(str/starts-with? % "notes-id") parts))]
(str/replace notes-id "notes-id=" "")
(new-session!)))
(new-session!)))
(defn basic-auth-header [headers]
(some #(str/starts-with? % "Basic-Auth: ") headers))
(def authenticated-sessions
(atom #{}))
(defn authenticate! [session-id headers]
(or (contains? @authenticated-sessions session-id)
(when (some #(= % (str "Authorization: Basic " base64)) headers)
(when (= (headers "authorization") (str "Basic " base64))
(swap! authenticated-sessions conj session-id)
true)))
(defn parse-session-id [cookie]
(when cookie
(when-let [notes-id (first (filter #(str/starts-with? % "notes-id")
(str/split cookie #"; ")))]
(str/replace notes-id "notes-id=" ""))))
(defn basic-auth-response [session-id]
{:status 401
:headers {"WWW-Authenticate" "Basic realm=\"notes\""
"Set-Cookie" (str "notes-id=" session-id)}})
;; run the server
(with-open [server-socket (let [s (new ServerSocket 8080)]
(println "Server started on port 8080.")
s)]
(loop []
(let [client-socket (.accept server-socket)]
(future
(with-open [conn client-socket]
(try
(let [out (io/writer (.getOutputStream conn))
is (.getInputStream conn)
in (io/reader is)
[_req & headers :as response]
(loop [headers []]
(let [line (.readLine in)]
(if (str/blank? line)
headers
(recur (conj headers line)))))
session-id (get-session-id headers)
form-data (let [sb (StringBuilder.)]
(loop []
(when (.ready in)
(.append sb (char (.read in)))
(recur)))
(-> (str sb)
(java.net.URLDecoder/decode)))
_ (when debug? (println (str/join "\n" response)))
_ (when-not (str/blank? form-data)
(when debug? (println form-data))
(let [note (str/replace form-data "note=" "")]
(write-note! note)))
_ (when debug? (println))]
(cond
;; if we didn't see this session before, we want the user to re-authenticate
(not (contains? @known-sessions session-id))
(let [uuid (new-session!)]
(basic-auth-response out uuid))
(not (authenticate! session-id headers))
(basic-auth-response out session-id)
:else (home-response out session-id)))
(catch Throwable t
(binding [*err* *out*]
(println t)))))))
(recur)))
(defn handler [req]
(when debug?
(println "Request:")
(pprint req))
(let [body (some-> req :body slurp java.net.URLDecoder/decode)
session-id (parse-session-id (get-in req [:headers "cookie"]))
_ (when (and debug? body)
(println "Request body:" body))
response (cond
;; if we didn't see this session before, we want the user to
;; re-authenticate
(not (contains? @known-sessions session-id))
(basic-auth-response (new-session!))
(not (authenticate! session-id (:headers req)))
(basic-auth-response session-id)
:else (do (when-not (str/blank? body)
(let [note (str/replace body "note=" "")]
(write-note! note)))
(home-response session-id)))]
(when debug?
(println "Response:")
(pprint (dissoc response :body))
(println))
response))
(server/run-server handler {:port 8080})
(println "Server started on port 8080.")
@(promise) ;; wait until SIGINT

View file

@ -0,0 +1,15 @@
(require '[babashka.deps :as deps])
(deps/add-deps '{:deps {org.clojure/data.zip {:mvn/version "RELEASE"}}})
(require '[clojure.data.xml :as xml]
'[clojure.data.zip.xml :as xmlz]
'[clojure.zip :as zip])
(def xml "<pom><version>1.0.0</version></pom>")
(-> xml
xml/parse-str
zip/xml-zip
(xmlz/xml1-> :pom :version zip/down zip/node))
;; => 1.0.0

View file

@ -1,16 +1,20 @@
#!/usr/bin/env bb
(ns portal
(:require [babashka.classpath :as cp]
(:require [babashka.deps :as deps]
[cheshire.core :as json]
[clj-yaml.core :as yaml]
[clojure.data.xml :as xml]
[clojure.edn :as edn]
[clojure.java.shell :refer [sh]]
[clojure.string :as str]))
(def cp (str/trim (:out (sh "clojure" "-Spath" "-Sdeps" "{:deps {djblue/portal {:mvn/version \"0.6.1\"}}}"))))
(cp/add-classpath cp)
(deps/add-deps '{:deps {djblue/portal {:mvn/version "0.9.0"}}})
(require '[portal.api :as p])
(.addShutdownHook (Runtime/getRuntime)
(Thread. (fn [] (p/close))))
(def file (first *command-line-args*))
(when-not file
@ -42,11 +46,6 @@
:namespace-aware false)
(xml->hiccup))))
(require '[portal.api :as p])
(.addShutdownHook (Runtime/getRuntime)
(Thread. (fn [] (p/close))))
(p/open)
(p/tap)

View file

@ -1,12 +0,0 @@
(require '[babashka.process :as p])
(defn rofi [s]
(let [proc (p/process
["rofi" "-i" "-dmenu" "-mesg" "Select" "-sync" "-p" "*"]
{:in s :err :inherit
:out :string})]
(:out @proc)))
(rofi (slurp *in*))
;; `echo "hi\nthere\nclj" | bb examples/rofi.clj`

View file

@ -0,0 +1,11 @@
#!/usr/bin/env bb
;; by Janne Himanka shared on Clojurians Slack
(require '[babashka.curl :as curl])
(let [url (str "https://en.wikipedia.org/wiki/" (first *command-line-args*))
page (:body (curl/get url))]
(cond
(re-find #"Disambiguation" page)
(doseq [item (map last (re-seq #"<li><a href...wiki/([^\"]+)" page))]
(println item))
:else (last (re-find #"nl.wikipedia.org/.+?title..([^\"]+)" page))))

78
examples/xml-example.clj Normal file
View file

@ -0,0 +1,78 @@
; let's build up a little data structure to play with
(def pet-store-sexp
[:pet-store
[:family
[:owners
[:name "Terry Smith"]
[:name "Sam Smith"]
[:phone "555-1212"]]
[:animals
[:animal {:type "dog"} "Sparky"]]]
[:family
[:owners
[:name "Pat Jones"]
[:phone "555-2121"]]
[:animals
[:animal {:type "hamster"} "Oliver"]
[:animal {:type "cat"} "Kat"]]]])
; we can build XML from this
(def xml-str (xml/indent-str (xml/sexp-as-element pet-store-sexp)))
(println "Our XML as a string is:")
(println xml-str)
(comment xml-str is
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<pet-store>
<family>
<owners>
<name>Terry Smith</name>...")
; and then we can parse that XML back into a data structure
(def xml-tree (xml/parse-str xml-str))
#_"xml-tree is a nested associative structure:
{:tag :pet-store,
:attrs {},
:content
({:tag :family,
:attrs {},
:content ...})}"
; with a couple of quick helper functions...
(defn get-by-tag
"takes a seq of XML elements (or a 'root-ish' element) and a tag, filters by tag name, and gets the content of each"
[elems tag-name]
; if we get (presumably) a root element, wrap it in a vector so we can still
; filter by its tag
(if (xml/element? elems)
(recur [elems] tag-name)
(->> (filter #(= (:tag %) tag-name) elems)
(mapcat :content))))
(defn get-in-by-tag
"takes a seq of XML elements and a vector of tags, and drills into each
element by the tags, sort of like a mash-up of core/get-in and an XPath
lookup"
[elems tag-vec]
(reduce get-by-tag elems tag-vec))
; we can do things like...
(println "all the owner names:" (get-in-by-tag
xml-tree
[:pet-store :family :owners :name]))
(println "all the animal names:" (get-in-by-tag
xml-tree
[:pet-store :family :animals :animal]))
(println "all the phone numbers:" (get-in-by-tag
xml-tree
[:pet-store :family :owners :phone]))

View file

@ -1,109 +0,0 @@
(ns babashka.impl.async
{:no-doc true}
(:require [clojure.core.async :as async]
[clojure.core.async.impl.protocols :as protocols]
[sci.impl.vars :as vars]))
(def ^java.util.concurrent.Executor executor @#'async/thread-macro-executor)
(defn thread-call
"Executes f in another thread, returning immediately to the calling
thread. Returns a channel which will receive the result of calling
f when completed, then close."
[f]
(let [c (async/chan 1)]
(let [binds (vars/get-thread-binding-frame)]
(.execute executor
(fn []
(vars/reset-thread-binding-frame binds)
(try
(let [ret (f)]
(when-not (nil? ret)
(async/>!! c ret)))
(finally
(async/close! c))))))
c))
(defn thread
[_ _ & body]
`(~'clojure.core.async/thread-call (fn [] ~@body)))
(defn alt!!
"Like alt!, except as if by alts!!, will block until completed, and
not intended for use in (go ...) blocks."
[_ _ & clauses]
(async/do-alt 'clojure.core.async/alts!! clauses))
(defn go-loop
[_ _ bindings & body]
(list 'clojure.core.async/thread (list* 'loop bindings body)))
(def async-namespace
{'<!! async/<!!
'>!! async/>!!
'admix async/admix
'alts! async/alts!
'alts!! async/alts!!
'alt!! (with-meta alt!! {:sci/macro true})
'buffer async/buffer
'chan async/chan
'close! async/close!
'do-alt async/do-alt
'do-alts async/do-alts
'dropping-buffer async/dropping-buffer
'filter< async/filter<
'filter> async/filter>
'into async/into
'map async/map
'map< async/map<
'map> async/map>
'mapcat< async/mapcat<
'mapcat> async/mapcat>
'merge async/merge
'mix async/mix
'mult async/mult
'offer! async/offer!
'onto-chan async/onto-chan
'partition async/partition
'partition-by async/partition-by
'pipe async/pipe
'pipeline async/pipeline
'pipeline-async async/pipeline-async
'pipeline-blocking async/pipeline-blocking
'poll! async/poll!
'promise-chan async/promise-chan
'pub async/pub
'put! async/put!
'reduce async/reduce
'remove< async/remove<
'remove> async/remove>
'sliding-buffer async/sliding-buffer
'solo-mode async/solo-mode
'split async/split
'sub async/sub
'take async/take
'take! async/take!
'tap async/tap
'thread (with-meta thread {:sci/macro true})
'thread-call thread-call
'timeout async/timeout
'to-chan async/to-chan
'toggle async/toggle
'transduce async/transduce
'unblocking-buffer? async/unblocking-buffer?
'unique async/unique
'unmix async/unmix
'unmix-all async/unmix-all
'unsub async/unsub
'unsub-all async/unsub-all
'untap async/untap
'untap-all async/untap-all
;; polyfill
'go (with-meta thread {:sci/macro true})
'<! async/<!!
'>! async/>!!
'alt! (with-meta alt!! {:sci/macro true})
'go-loop (with-meta go-loop {:sci/macro true})})
(def async-protocols-namespace
{'ReadPort protocols/ReadPort})

View file

@ -0,0 +1,16 @@
(ns babashka.impl.match
{:no-doc true}
(:require [clojure.core.match :as match]
clojure.core.match.array ;; side effecting
clojure.core.match.debug ;; side effecting
clojure.core.match.protocols ;; side effecting
clojure.core.match.regex ;; side effecting
[sci.core :as sci :refer [copy-var]]))
(def mns (sci/create-ns 'clojure.core.match nil))
(def core-match-namespace
{'match (copy-var match/match mns)
'backtrack (copy-var match/backtrack mns)
'val-at* (copy-var match/val-at* mns)
'defpred (copy-var match/defpred mns)})

View file

@ -1,7 +1,10 @@
(ns babashka.impl.csv
{:no-doc true}
(:require [clojure.data.csv :as csv]))
(:require [clojure.data.csv :as csv]
[sci.core :as sci]))
(def cns (sci/create-ns 'clojure.data.csv nil))
(def csv-namespace
{'read-csv csv/read-csv
'write-csv csv/write-csv})
{'read-csv (sci/copy-var csv/read-csv cns)
'write-csv (sci/copy-var csv/write-csv cns)})

View file

@ -1,12 +1,26 @@
(ns babashka.impl.datascript
{:no-doc true}
(:require [datascript.core :as d]
[sci.impl.namespaces :refer [copy-var]]
[sci.impl.vars :as vars]))
[datascript.db :as db]
[sci.core :as sci :refer [copy-var]]))
(def datascript-ns (vars/->SciNamespace 'datascript.core nil))
(def datascript-ns (sci/create-ns 'datascript.core nil))
(def datascript-db-ns (sci/create-ns 'datascript.db nil))
(def datascript-namespace
{'create-conn (copy-var d/create-conn datascript-ns)
'transact! (copy-var d/transact! datascript-ns)
'q (copy-var d/q datascript-ns)})
'q (copy-var d/q datascript-ns)
'empty-db (copy-var d/empty-db datascript-ns)
'db-with (copy-var d/db-with datascript-ns)
'filter (copy-var d/filter datascript-ns)
'init-db (copy-var d/init-db datascript-ns)
'datom (copy-var d/datom datascript-ns)
'pull (copy-var d/pull datascript-ns)
'pull-many (copy-var d/pull-many datascript-ns)})
(def datascript-db-namespace
{'db-from-reader (copy-var db/db-from-reader datascript-db-ns)
'datom-from-reader (copy-var db/datom-from-reader datascript-db-ns)
'datom-added (copy-var db/datom-added datascript-db-ns)
'datom-tx (copy-var db/datom-tx datascript-db-ns)})

View file

@ -0,0 +1,76 @@
(ns babashka.impl.hiccup
{:no-doc true}
(:require [hiccup.compiler :as compiler]
[hiccup.util :as util]
[sci.core :as sci :refer [copy-var]]))
(def hns (sci/create-ns 'hiccup.core nil))
(def hns2 (sci/create-ns 'hiccup2.core nil))
(def uns (sci/create-ns 'hiccup.util nil))
(def cns (sci/create-ns 'hiccup.compiler nil))
(defmacro html-2
"Render Clojure data structures to a compiled representation of HTML. To turn
the representation into a string, use clojure.core/str. Strings inside the
macro are automatically HTML-escaped. To insert a string without it being
escaped, use the [[raw]] function.
A literal option map may be specified as the first argument. It accepts two
keys that control how the HTML is outputted:
`:mode`
: One of `:html`, `:xhtml`, `:xml` or `:sgml` (defaults to `:xhtml`).
Controls how tags are rendered.
`:escape-strings?`
: True if strings should be escaped (defaults to true)."
{:added "2.0"}
[options & content]
;; (prn :escape-strings util/*escape-strings?*)
(if (map? options)
(let [mode (:mode options :xhtml)
escape-strings? (:escape-strings? options true)]
`(binding
[util/*html-mode* ~mode
util/*escape-strings?* ~escape-strings?]
(util/raw-string (compiler/render-html (list ~@content)))))
`(util/raw-string (compiler/render-html (list ~@(cons options content))))))
(defmacro html-1
"Render Clojure data structures to a string of HTML. Strings are **not**
automatically escaped, but must be manually escaped with the [[h]] function.
A literal option map may be specified as the first argument. It accepts the
following keys:
`:mode`
: One of `:html`, `:xhtml`, `:xml` or `:sgml` (defaults to `:xhtml`).
Controls how tags are rendered."
;; {:deprecated "2.0"}
[options & content]
(if (map? options)
`(str (hiccup2.core/html ~(assoc options :escape-strings? false) ~@content))
`(str (hiccup2.core/html {:escape-strings? false} ~options ~@content))))
(def ^{:added "2.0"} raw
"Short alias for [[hiccup.util/raw-string]]."
util/raw-string)
(def hiccup-namespace
{'html (copy-var html-1 hns {:name 'html})})
(def hiccup2-namespace
{'html (copy-var html-2 hns2 {:name 'html})
'raw (copy-var util/raw-string hns2 {:name 'raw})})
(def html-mode (copy-var util/*html-mode* uns))
(def escape-strings? (copy-var util/*escape-strings?* uns))
(def hiccup-util-namespace
{'*html-mode* html-mode
'*escape-strings?* escape-strings?
'raw-string (copy-var util/raw-string uns)
'to-uri (copy-var util/to-uri uns)})
(defn render-html [& contents]
(binding [util/*html-mode* @html-mode
util/*escape-strings?* @escape-strings?]
(apply compiler/render-html contents)))
(def hiccup-compiler-namespace
{'render-html (copy-var render-html cns)})

View file

@ -72,8 +72,10 @@
'acl (copy-var acl cns)
'unlock (copy-var unlock cns)
'default-client (copy-var client/default-client cns)
'*default-client* default-client})
'*default-client* default-client
'query-string (copy-var client/query-string cns)
'url-encode (copy-var client/url-encode cns)})
(def sni-client-namespace
{'ssl-configurer (copy-var sni-client/ssl-configurer sns)
'default-client (sci/new-var 'sni-client sni-client {:ns sns})})
'default-client (sci/new-var 'default-client sni-client {:ns sns})})

View file

@ -8,10 +8,15 @@
{:obj sns
'server-stop! (copy-var server/server-stop! sns)
'server-port (copy-var server/server-port sns)
'server-status (copy-var server/server-status sns)
'run-server (copy-var server/run-server sns)
'sec-websocket-accept (copy-var server/sec-websocket-accept sns)
'websocket-handshake-check (copy-var server/websocket-handshake-check sns)
'send-checked-websocket-handshake! (copy-var server/send-checked-websocket-handshake! sns)
'send-websocket-handshake! (copy-var server/send-websocket-handshake! sns)
'as-channel (copy-var server/as-channel sns)
'send! (copy-var server/send! sns)})
'send! (copy-var server/send! sns)
'with-channel (copy-var server/with-channel sns)
'on-close (copy-var server/on-close sns)
'close (copy-var server/close sns)}
)

View file

@ -1,11 +1,12 @@
(ns babashka.impl.jdbc
{:no-doc true}
(:require [next.jdbc :as njdbc]
[next.jdbc.sql :as sql]
[sci.impl.namespaces :refer [copy-var]]
[sci.impl.vars :as vars]))
(:require
[next.jdbc :as njdbc]
[next.jdbc.result-set :as rs]
[next.jdbc.sql :as sql]
[sci.core :as sci]))
(def next-ns (vars/->SciNamespace 'next.jdbc nil))
(def next-ns (sci/create-ns 'next.jdbc nil))
(defn with-transaction
"Given a transactable object, gets a connection and binds it to `sym`,
@ -18,20 +19,30 @@
* `:rollback-only` -- `true` / `false`."
[_ _ [sym transactable opts] & body]
(let [con (vary-meta sym assoc :tag 'java.sql.Connection)]
`(next.jdbc/transact ~transactable (^{:once true} fn* [~con] ~@body) ~(or opts {}))))
`(njdbc/transact ~transactable (^{:once true} fn* [~con] ~@body) ~(or opts {}))))
(def njdbc-namespace
{'get-datasource (copy-var njdbc/get-datasource next-ns)
'execute! (copy-var njdbc/execute! next-ns)
'execute-one! (copy-var njdbc/execute-one! next-ns)
'get-connection (copy-var njdbc/get-connection next-ns)
'plan (copy-var njdbc/plan next-ns)
'prepare (copy-var njdbc/prepare next-ns)
'transact (copy-var njdbc/transact next-ns)
'with-transaction (with-meta with-transaction
{:sci/macro true})})
{'get-datasource (sci/copy-var njdbc/get-datasource next-ns)
'execute! (sci/copy-var njdbc/execute! next-ns)
'execute-one! (sci/copy-var njdbc/execute-one! next-ns)
'get-connection (sci/copy-var njdbc/get-connection next-ns)
'plan (sci/copy-var njdbc/plan next-ns)
'prepare (sci/copy-var njdbc/prepare next-ns)
'transact (sci/copy-var njdbc/transact next-ns)
'with-transaction (sci/copy-var with-transaction next-ns)})
(def sns (vars/->SciNamespace 'next.jdbc.sql nil))
(def sns (sci/create-ns 'next.jdbc.sql nil))
(def next-sql-namespace
{'insert-multi! (copy-var sql/insert-multi! sns)})
{'insert-multi! (sci/copy-var sql/insert-multi! sns)})
(def rsns (sci/create-ns 'next.jdbc.result-set nil))
(def result-set-namespace
{'as-maps (sci/copy-var rs/as-maps rsns)
'as-unqualified-maps (sci/copy-var rs/as-unqualified-maps rsns)
'as-modified-maps (sci/copy-var rs/as-modified-maps rsns)
'as-unqualified-modified-maps (sci/copy-var rs/as-unqualified-modified-maps rsns)
'as-lower-maps (sci/copy-var rs/as-lower-maps rsns)
'as-unqualified-lower-maps (sci/copy-var rs/as-unqualified-lower-maps rsns)
'as-maps-adapter (sci/copy-var rs/as-maps-adapter rsns)})

View file

@ -8,7 +8,7 @@
(def tns (sci/create-ns 'lanterna.terminal nil))
(def sns (sci/create-ns 'lanterna.screen nil))
(def cns (sci/create-ns 'lanterna.screen nil))
(def cns (sci/create-ns 'lanterna.constants nil))
(def lanterna-terminal-namespace
{'add-resize-listener (copy-var lanterna.terminal/add-resize-listener tns)

View file

@ -0,0 +1,233 @@
(ns babashka.impl.logging
(:require [clojure.tools.logging]
[clojure.tools.logging.impl :as impl]
[clojure.tools.logging.readable]
[sci.core :as sci]
[taoensso.encore :as encore :refer [have]]
[taoensso.timbre :as timbre]))
;;;; timbre
(def tns (sci/create-ns 'taoensso.timbre nil))
(defn- fline [and-form] (:line (meta and-form)))
(defonce callsite-counter
(encore/counter))
(defmacro log! ; Public wrapper around `-log!`
"Core low-level log macro. Useful for tooling/library authors, etc.
* `level` - must eval to a valid logging level
* `msg-type` - must eval to e/o #{:p :f nil}
* `args` - arguments seq (ideally vec) for logging call
* `opts` - ks e/o #{:config ?err ?base-data spying?
:?ns-str :?file :?line :?column}
Supports compile-time elision when compile-time const vals
provided for `level` and/or `?ns-str`.
Logging wrapper examples:
(defn log-wrapper-fn [& args] (timbre/log! :info :p args))
(defmacro log-wrapper-macro [& args] (timbre/keep-callsite `(timbre/log! :info :p ~args)))"
([{:as opts
:keys [loc level msg-type args vargs
config ?err ?base-data spying?]
:or
{config 'taoensso.timbre/*config*
?err :auto}}]
(have [:or nil? sequential? symbol?] args)
(let [callsite-id (callsite-counter)
{:keys [line column]} (merge (meta &form) loc)
{:keys [ns file line column]} {:ns @sci/ns :file @sci/file :line line :column column}
ns (or (get opts :?ns-str) ns)
file (or (get opts :?file) file)
line (or (get opts :?line) line)
column (or (get opts :?column) column)
elide? (and #_(enc/const-forms? level ns) (timbre/-elide? level ns))]
(when-not elide?
(let [vargs-form
(or vargs
(if (symbol? args)
`(taoensso.timbre/-ensure-vec ~args)
`[ ~@args]))]
;; Note pre-resolved expansion
`(taoensso.timbre/-log! ~config ~level ~ns ~file ~line ~column ~msg-type ~?err
(delay ~vargs-form) ~?base-data ~callsite-id ~spying?
~(get opts :instant)
~(get opts :may-log?))))))
([level msg-type args & [opts]]
(let [{:keys [line column]} (merge (meta &form))
{:keys [ns file line column]} {:ns @sci/ns :file @sci/file :line line :column column}
loc {:ns ns :file file :line line :column column}
opts (assoc (conj {:loc loc} opts)
:level level, :msg-type msg-type, :args args)]
`(taoensso.timbre/log! ~opts))))
(defn make-ns [ns sci-ns ks]
(reduce (fn [ns-map [var-name var]]
(let [m (meta var)
doc (:doc m)
arglists (:arglists m)]
(assoc ns-map var-name
(sci/new-var (symbol var-name) @var
(cond-> {:ns sci-ns
:name (:name m)}
(:macro m) (assoc :macro true)
doc (assoc :doc doc)
arglists (assoc :arglists arglists))))))
{}
(select-keys (ns-publics ns) ks)))
(defn println-appender
"Returns a simple `println` appender for Clojure/Script.
Use with ClojureScript requires that `cljs.core/*print-fn*` be set.
:stream (clj only) - e/o #{:auto :*out* :*err* :std-err :std-out <io-stream>}."
;; Unfortunately no easy way to check if *print-fn* is set. Metadata on the
;; default throwing fn would be nice...
[& [{:keys [stream] :or {stream :auto}}]]
(let [stream
(case stream
:std-err timbre/default-err
:std-out timbre/default-out
stream)]
{:enabled? true
:async? false
:min-level nil
:rate-limit nil
:output-fn :inherit
:fn
(fn [data]
(let [{:keys [output_]} data
stream
(case stream
:auto (if (:error-level? data) @sci/err @sci/out)
:*out* @sci/out
:*err* @sci/err
stream)]
(binding [*out* stream]
(encore/println-atomic (force output_)))))}))
(def default-config (assoc-in timbre/*config* [:appenders :println]
(println-appender {:stream :auto})))
(def config (sci/new-dynamic-var '*config* default-config
{:ns tns}))
(defn swap-config! [f & args]
(apply sci/alter-var-root config f args))
(defn set-level! [level] (swap-config! (fn [m] (assoc m :min-level level))))
(defn merge-config! [m] (swap-config! (fn [old] (encore/nested-merge old m))))
(defmacro -log-and-rethrow-errors [?line & body]
`(try (do ~@body)
(catch Throwable e#
(do
#_(error e#) ; CLJ-865
(timbre/log! :error :p [e#] ~{:?line ?line})
(throw e#)))))
(def timbre-namespace
(assoc (make-ns 'taoensso.timbre tns ['trace 'tracef 'debug 'debugf
'info 'infof 'warn 'warnf
'error 'errorf
'-log! 'with-level
'spit-appender '-spy 'spy
'color-str])
'log! (sci/copy-var log! tns)
'*config* config
'swap-config! (sci/copy-var swap-config! tns)
'merge-config! (sci/copy-var merge-config! tns)
'set-level! (sci/copy-var set-level! tns)
'println-appender (sci/copy-var println-appender tns)
'-log-and-rethrow-errors (sci/copy-var -log-and-rethrow-errors tns)
'-ensure-vec (sci/copy-var encore/ensure-vec tns)))
(def enc-ns (sci/create-ns 'taoensso.encore))
(def encore-namespace
{'catching (sci/copy-var encore/catching enc-ns)
'try* (sci/copy-var encore/try* enc-ns)})
(def timbre-appenders-namespace
(let [tan (sci/create-ns 'taoensso.timbre.appenders.core nil)]
{'println-appender (sci/copy-var println-appender tan)
'spit-appender (sci/copy-var #_:clj-kondo/ignore timbre/spit-appender tan)}))
;;;; clojure.tools.logging
(defn- force-var "To support dynamic vars, etc."
[x] (if (instance? clojure.lang.IDeref x) (deref x) x))
(deftype Logger [logger-ns-str timbre-config]
clojure.tools.logging.impl/Logger
(enabled? [_ level]
;; No support for per-call config
(timbre/may-log? level logger-ns-str
(force-var timbre-config)))
(write! [_ level throwable message]
(log! level :p
[message] ; No support for pre-msg raw args
{:config (force-var timbre-config) ; No support for per-call config
:?ns-str logger-ns-str
:?file nil ; No support
:?line nil ; ''
:?err throwable})))
(deftype LoggerFactory [get-logger-fn]
clojure.tools.logging.impl/LoggerFactory
(name [_] "Timbre")
(get-logger [_ logger-ns] (get-logger-fn logger-ns)))
(alter-var-root
#'clojure.tools.logging/*logger-factory*
(fn [_]
(LoggerFactory.
(encore/memoize (fn [logger-ns] (Logger. (str logger-ns) config))))))
(def lns (sci/create-ns 'clojure.tools.logging nil))
(defmacro log
"Evaluates and logs a message only if the specified level is enabled. See log*
for more details."
([level message]
`(clojure.tools.logging/log ~level nil ~message))
([level throwable message]
`(clojure.tools.logging/log ~(deref sci/ns) ~level ~throwable ~message))
([logger-ns level throwable message]
`(clojure.tools.logging/log clojure.tools.logging/*logger-factory* ~logger-ns ~level ~throwable ~message))
([logger-factory logger-ns level throwable message]
`(let [logger# (impl/get-logger ~logger-factory ~logger-ns)]
(if (impl/enabled? logger# ~level)
(clojure.tools.logging/log* logger# ~level ~throwable ~message)))))
(def tools-logging-namespace
(assoc (make-ns 'clojure.tools.logging lns ['debug 'debugf 'info 'infof 'warn 'warnf 'error 'errorf
'logp 'logf '*logger-factory* 'log*
'trace 'tracef])
'log (sci/copy-var log lns)))
(def lins (sci/create-ns 'clojure.tools.logging.impl nil))
(def tools-logging-impl-namespace
(make-ns 'clojure.tools.logging.impl lins ['get-logger 'enabled?]))
(def tlr-ns (sci/create-ns 'clojure.tools.logging.readable nil))
(def tools-logging-readable-namespace
(make-ns 'clojure.tools.logging.readable tlr-ns ['trace 'tracef 'debug 'debugf 'info 'infof
'warn 'warnf 'error 'errorf 'fatal 'fatalf
'logf 'logp 'spyf]))

View file

@ -0,0 +1,11 @@
(ns babashka.impl.priority-map
(:require [clojure.data.priority-map :as pm]
[sci.core :as sci]))
(def pmns (sci/create-ns 'clojure.data.priority-map))
(def priority-map-namespace
{'priority-map (sci/copy-var pm/priority-map pmns)
'priority-map-keyfn (sci/copy-var pm/priority-map-keyfn pmns)
'subseq (sci/copy-var pm/subseq pmns)
'rsubseq (sci/copy-var pm/rsubseq pmns)})

View file

@ -1,10 +0,0 @@
(ns babashka.impl.muuntaja-core
(:require [muuntaja.core :as m]
[sci.core :as sci :refer [copy-var]]))
(def mns (sci/create-ns 'muuntaja.core nil))
(def muuntaja-core-namespace
{:obj mns
'create (copy-var m/create mns)
'default-options (copy-var m/default-options mns)})

View file

@ -1,10 +0,0 @@
(ns babashka.impl.muuntaja-middleware
(:require [muuntaja.middleware :as m]
[sci.core :as sci :refer [copy-var]]))
(def mns (sci/create-ns 'muuntaja.middleware nil))
(def muuntaja-middleware-namespace
{:obj mns
'wrap-format (copy-var m/wrap-format mns)
'wrap-params (copy-var m/wrap-params mns)})

View file

@ -1,13 +0,0 @@
(ns babashka.impl.reitit-ring
(:require [reitit.ring :as ring]
[sci.core :as sci :refer [copy-var]]))
(def rns (sci/create-ns 'reitit.ring nil))
(def reitit-ring-namespace
{:obj rns
'ring-handler (copy-var ring/ring-handler rns)
'router (copy-var ring/router rns)
'routes (copy-var ring/routes rns)
'create-resource-handler (copy-var ring/create-resource-handler rns)
'create-default-handler (copy-var ring/create-default-handler rns)})

View file

@ -1,452 +0,0 @@
(ns reitit.trie
(:refer-clojure :exclude [compile])
(:require [clojure.string :as str]
[reitit.exception :as ex])
#?(:clj (:import [reitit Trie Trie$Match Trie$Matcher]
(java.net URLDecoder))))
(defn ^:no-doc into-set [x]
(cond
(or (set? x) (sequential? x)) (set x)
(nil? x) #{}
:else (conj #{} x)))
(defrecord Wild [value])
(defrecord CatchAll [value])
(defrecord Match [params data])
(defrecord Node [children wilds catch-all params data])
(defn wild? [x] (instance? Wild x))
(defn catch-all? [x] (instance? CatchAll x))
(defprotocol Matcher
(match [this i max path])
(view [this])
(depth ^long [this])
(length [this]))
(defprotocol TrieCompiler
(data-matcher [this params data])
(static-matcher [this path matcher])
(wild-matcher [this key end matcher])
(catch-all-matcher [this key params data])
(linear-matcher [this matchers ordered?])
(-pretty [this matcher])
(-path-matcher [this matcher]))
(defn- assoc-param [match k v]
(let [params (:params match)]
(assoc match :params (assoc params k v))))
;; https://stackoverflow.com/questions/8033655/find-longest-common-prefix
(defn- common-prefix [s1 s2]
(let [max (min (count s1) (count s2))]
(loop [i 0]
(cond
;; full match
(> i max)
(subs s1 0 max)
;; partial match
(not= (get s1 i) (get s2 i))
(if-not (zero? i) (subs s1 0 i))
;; recur
:else (recur (inc i))))))
(defn- -keyword [s]
(if-let [^long i (str/index-of s "/")]
(keyword (subs s 0 i) (subs s (inc i)))
(keyword s)))
(defn split-path [s {:keys [syntax] :or {syntax #{:bracket :colon}}}]
(let [bracket? (-> syntax (into-set) :bracket)
colon? (-> syntax (into-set) :colon)
-static (fn [from to] (if-not (= from to) [(subs s from to)]))
-wild (fn [^long from to] [(->Wild (-keyword (subs s (inc from) to)))])
-catch-all (fn [^long from to] [(->CatchAll (keyword (subs s (inc from) to)))])]
(loop [ss nil, from 0, to 0]
(if (= to (count s))
(concat ss (-static from to))
(let [c (get s to)]
(cond
(and bracket? (= \{ c))
(let [^long to' (or (str/index-of s "}" to) (ex/fail! ::unclosed-brackets {:path s}))]
(if (= \* (get s (inc to)))
(recur (concat ss (-static from to) (-catch-all (inc to) to')) (long (inc to')) (long (inc to')))
(recur (concat ss (-static from to) (-wild to to')) (long (inc to')) (long (inc to')))))
(and colon? (= \: c))
(let [^long to' (or (str/index-of s "/" to) (count s))]
(if (= 1 (- to' to))
(recur ss from (inc to))
(recur (concat ss (-static from to) (-wild to to')) (long to') (long to'))))
(and colon? (= \* c))
(let [to' (count s)]
(recur (concat ss (-static from to) (-catch-all to to')) (long to') (long to')))
:else
(recur ss from (inc to))))))))
(defn join-path [xs]
(reduce
(fn [s x]
(str s (cond
(string? x) x
(instance? Wild x) (str "{" (-> x :value str (subs 1)) "}")
(instance? CatchAll x) (str "{*" (-> x :value str (subs 1)) "}"))))
"" xs))
(defn normalize [s opts]
(-> s (split-path opts) (join-path)))
;;
;; Conflict Resolution
;;
(defn- -slice-start [[p1 :as p1s] [p2 :as p2s]]
(let [-split (fn [p]
(if-let [i (and p (str/index-of p "/"))]
[(subs p 0 i) (subs p i)]
[p]))
-slash (fn [cp p]
(cond
(not (string? cp)) [cp]
(and (string? cp) (not= (count cp) (count p))) [(subs p (count cp))]
(and (string? p) (not cp)) (-split p)))
-postcut (fn [[p :as pps]]
(let [^long i (and p (str/index-of p "/"))]
(if (and i (pos? i))
(concat [(subs p 0 i) (subs p i)] (rest pps))
pps)))
-tailcut (fn [cp [p :as ps]] (concat (-slash cp p) (rest ps)))]
(if (or (nil? p1) (nil? p2))
[(-postcut p1s) (-postcut p2s)]
(if-let [cp (and (string? p1) (string? p2) (common-prefix p1 p2))]
[(-tailcut cp p1s) (-tailcut cp p2s)]
[p1s p2s]))))
(defn- -slice-end [x xs]
(let [i (if (string? x) (str/index-of x "/"))]
(if (and (number? i) (pos? ^long i))
(concat [(subs x i)] xs)
xs)))
(defn conflicting-parts? [parts1 parts2]
(let [[[s1 & ss1] [s2 & ss2]] (-slice-start parts1 parts2)]
(cond
(= s1 s2 nil) true
(or (nil? s1) (nil? s2)) false
(or (catch-all? s1) (catch-all? s2)) true
(or (wild? s1) (wild? s2)) (recur (-slice-end s1 ss1) (-slice-end s2 ss2))
(not= s1 s2) false
:else (recur ss1 ss2))))
(defn conflicting-paths? [path1 path2 opts]
(conflicting-parts? (split-path path1 opts) (split-path path2 opts)))
;;
;; Creating Tries
;;
(defn- -node [m]
(map->Node (merge {:children {}, :wilds {}, :catch-all {}, :params {}} m)))
(defn- -insert [node [path & ps] fp params data]
(let [node' (cond
(nil? path)
(assoc node :data data :params params)
(instance? Wild path)
(let [next (first ps)]
(if (or (instance? Wild next) (instance? CatchAll next))
(ex/fail! ::following-parameters {:path fp, :parameters (map :value [path next])})
(update-in node [:wilds path] (fn [n] (-insert (or n (-node {})) ps fp params data)))))
(instance? CatchAll path)
(assoc-in node [:catch-all path] (-node {:params params, :data data}))
(str/blank? path)
(-insert node ps fp params data)
:else
(or
(reduce
(fn [_ [p n]]
(if-let [cp (common-prefix p path)]
(if (= cp p)
;; insert into child node
(let [n' (-insert n (conj ps (subs path (count p))) fp params data)]
(reduced (assoc-in node [:children p] n')))
;; split child node
(let [rp (subs p (count cp))
rp' (subs path (count cp))
n' (-insert (-node {}) ps fp params data)
n'' (-insert (-node {:children {rp n, rp' n'}}) nil nil nil nil)]
(reduced (update node :children (fn [children]
(-> children
(dissoc p)
(assoc cp n'')))))))))
nil (:children node))
;; new child node
(assoc-in node [:children path] (-insert (-node {}) ps fp params data))))]
(if-let [child (get-in node' [:children ""])]
;; optimize by removing empty paths
(-> (merge-with merge (dissoc node' :data) child)
(update :children dissoc ""))
node')))
(defn- decode [path start end percent?]
(let [param (subs path start end)]
(if percent?
#?(:cljs (js/decodeURIComponent param)
:clj (URLDecoder/decode
(if (.contains ^String param "+")
(.replace ^String param "+" "%2B")
param)
"UTF-8"))
param)))
;;
;; Compilers
;;
(defn clojure-trie-compiler []
(reify
TrieCompiler
(data-matcher [_ params data]
(let [match (->Match params data)]
(reify Matcher
(match [_ i max _]
(if (= i max)
match))
(view [_] data)
(depth [_] 1)
(length [_]))))
(static-matcher [_ path matcher]
(let [size (count path)]
(reify Matcher
(match [_ i max p]
(if-not (< ^long max (+ ^long i size))
(loop [j 0]
(if (= j size)
(match matcher (+ ^long i size) max p)
(if (= (get p (+ ^long i j)) (get path j))
(recur (inc j)))))))
(view [_] [path (view matcher)])
(depth [_] (inc (depth matcher)))
(length [_] (count path)))))
(wild-matcher [_ key end matcher]
(reify Matcher
(match [_ i max path]
(if (and (< ^long i ^long max) (not= (get path i) end))
(loop [percent? false, j ^long i]
(if (= max j)
(if-let [match (match matcher max max path)]
(assoc-param match key (decode path i max percent?)))
(let [c ^char (get path j)]
(condp = c
end (if-let [match (match matcher j max path)]
(assoc-param match key (decode path i j percent?)))
\% (recur true (inc j))
(recur percent? (inc j))))))))
(view [_] [key (view matcher)])
(depth [_] (inc (depth matcher)))
(length [_])))
(catch-all-matcher [_ key params data]
(let [match (->Match params data)]
(reify Matcher
(match [_ i max path]
(if (<= ^long i ^long max) (assoc-param match key (decode path i max true))))
(view [_] [key [data]])
(depth [_] 1)
(length [_]))))
(linear-matcher [_ matchers ordered?]
(let [matchers (vec (if ordered? matchers (reverse (sort-by (juxt depth length) matchers))))
size (count matchers)]
(reify Matcher
(match [_ i max path]
(loop [j 0]
(if (< j size)
(or (match (get matchers j) i max path)
(recur (inc j))))))
(view [_] (mapv view matchers))
(depth [_] (inc ^long (apply max 0 (map depth matchers))))
(length [_]))))
(-pretty [_ matcher]
(view matcher))
(-path-matcher [_ matcher]
(fn [path]
(if-let [match (match matcher 0 (count path) path)]
(->Match (:params match) (:data match)))))))
#?(:clj
(defn java-trie-compiler []
(reify
TrieCompiler
(data-matcher [_ params data]
(Trie/dataMatcher params data))
(static-matcher [_ path matcher]
(Trie/staticMatcher ^String path ^Trie$Matcher matcher))
(wild-matcher [_ key end matcher]
(Trie/wildMatcher key (if end (Character. end)) matcher))
(catch-all-matcher [_ key params data]
(Trie/catchAllMatcher key params data))
(linear-matcher [_ matchers ordered?]
(Trie/linearMatcher matchers ordered?))
(-pretty [_ matcher]
(-> matcher str read-string eval))
(-path-matcher [_ matcher]
(fn [path]
(if-let [match ^Trie$Match (Trie/lookup ^Trie$Matcher matcher ^String path)]
(->Match (.params match) (.data match))))))))
;;
;; Managing Tries
;;
(defn- map-parameters [keys]
(zipmap keys (repeat nil)))
#?(:clj
(def record-parameters
"Memoized function to transform parameters into runtime generated Record."
(memoize
(fn [keys]
(if (some qualified-keyword? keys)
(map-parameters keys)
(let [sym (gensym "PathParams")
ctor (symbol (str "map->" sym))]
(binding [*ns* (find-ns 'user)]
(eval `(do (defrecord ~sym ~(mapv (comp symbol name) keys)) (~ctor {}))))))))))
(defn insert
"Returns a trie with routes added to it."
([routes]
(insert nil routes))
([node routes]
(reduce
(fn [acc [p d]]
(insert acc p d))
node routes))
([node path data]
(insert node path data nil))
([node path data {::keys [parameters] :or {parameters map-parameters} :as opts}]
(let [parts (split-path path opts)
params (parameters (->> parts (remove string?) (map :value)))]
(-insert (or node (-node {})) (split-path path opts) path params data))))
(defn babashka-message [& _]
(println "Reitit compiler not supported by Babashka"))
(def compiler babashka-message)
(def compile babashka-message)
#_(defn compiler
"Returns a default [[TrieCompiler]]."
[]
#?(:cljs (clojure-trie-compiler)
:clj (java-trie-compiler)))
#_(defn compile
"Returns a compiled trie, to be used with [[pretty]] or [[path-matcher]]."
([options]
(compile options (compiler)))
([options compiler]
(compile options compiler []))
([{:keys [data params children wilds catch-all] :or {params {}}} compiler cp]
(let [ends (fn [{:keys [children]}] (or (keys children) ["/"]))
matchers (-> []
(cond-> data (conj (data-matcher compiler params data)))
(into (for [[p c] children] (static-matcher compiler p (compile c compiler (conj cp p)))))
(into
(for [[p c] wilds]
(let [pv (:value p)
ends (ends c)]
(if (next ends)
(ex/fail! ::multiple-terminators {:terminators ends, :path (join-path (conj cp p))})
(wild-matcher compiler pv (ffirst ends) (compile c compiler (conj cp pv)))))))
(into (for [[p c] catch-all] (catch-all-matcher compiler (:value p) params (:data c)))))]
(cond
(> (count matchers) 1) (linear-matcher compiler matchers false)
(= (count matchers) 1) (first matchers)
:else (data-matcher compiler {} nil)))))
(defn pretty
"Returns a simplified EDN structure of a compiled trie for printing purposes."
([compiled-trie]
(pretty compiled-trie (compiler)))
([compiled-trie compiler]
(-pretty compiler compiled-trie)))
(defn path-matcher
"Returns a function of `path -> Match` from a compiled trie."
([compiled-trie]
(path-matcher compiled-trie (compiler)))
([compiled-trie compiler]
(-path-matcher compiler compiled-trie)))
;;
;; spike
;;
(comment
(->
[["/v2/whoami" 1]
["/v2/users/:user-id/datasets" 2]
["/v2/public/projects/:project-id/datasets" 3]
["/v1/public/topics/:topic" 4]
["/v1/users/:user-id/orgs/:org-id" 5]
["/v1/search/topics/:term" 6]
["/v1/users/:user-id/invitations" 7]
["/v1/users/:user-id/topics" 9]
["/v1/users/:user-id/bookmarks/followers" 10]
["/v2/datasets/:dataset-id" 11]
["/v1/orgs/:org-id/usage-stats" 12]
["/v1/orgs/:org-id/devices/:client-id" 13]
["/v1/messages/user/:user-id" 14]
["/v1/users/:user-id/devices" 15]
["/v1/public/users/:user-id" 16]
["/v1/orgs/:org-id/errors" 17]
["/v1/public/orgs/:org-id" 18]
["/v1/orgs/:org-id/invitations" 19]
["/v1/users/:user-id/device-errors" 22]
["/v2/login" 23]
["/v1/users/:user-id/usage-stats" 24]
["/v2/users/:user-id/devices" 25]
["/v1/users/:user-id/claim-device/:client-id" 26]
["/v2/public/projects/:project-id" 27]
["/v2/public/datasets/:dataset-id" 28]
["/v2/users/:user-id/topics/bulk" 29]
["/v1/messages/device/:client-id" 30]
["/v1/users/:user-id/owned-orgs" 31]
["/v1/topics/:topic" 32]
["/v1/users/:user-id/bookmark/:topic" 33]
["/v1/orgs/:org-id/members/:user-id" 34]
["/v1/users/:user-id/devices/:client-id" 35]
["/v1/users/:user-id" 36]
["/v1/orgs/:org-id/devices" 37]
["/v1/orgs/:org-id/members" 38]
["/v2/orgs/:org-id/topics" 40]
["/v1/whoami" 41]
["/v1/orgs/:org-id" 42]
["/v1/users/:user-id/api-key" 43]
["/v2/schemas" 44]
["/v2/users/:user-id/topics" 45]
["/v1/orgs/:org-id/confirm-membership/:token" 46]
["/v2/topics/:topic" 47]
["/v1/messages/topic/:topic" 48]
["/v1/users/:user-id/devices/:client-id/reset-password" 49]
["/v2/topics" 50]
["/v1/login" 51]
["/v1/users/:user-id/orgs" 52]
["/v2/public/messages/dataset/:dataset-id" 53]
["/v1/topics" 54]
["/v1/orgs" 55]
["/v1/users/:user-id/bookmarks" 56]
["/v1/orgs/:org-id/topics" 57]]
(insert)
(compile)
(pretty)))

View file

@ -1,13 +0,0 @@
(ns babashka.impl.ring-middleware-anti-forgery
(:require [ring.middleware.anti-forgery :as anti-forgery]
[sci.core :as sci :refer [copy-var]]))
(def ans (sci/create-ns 'ring.middleware.anti-forgery nil))
(defn get-anti-forgery-token []
anti-forgery/*anti-forgery-token*)
(def ring-middleware-anti-forgery-namespace
{:obj ans
'wrap-anti-forgery (copy-var anti-forgery/wrap-anti-forgery ans)
'get-anti-forgery-token (copy-var get-anti-forgery-token ans)})

View file

@ -1,9 +0,0 @@
(ns babashka.impl.ring-middleware-content-type
(:require [ring.middleware.content-type :as content-type]
[sci.core :as sci :refer [copy-var]]))
(def cns (sci/create-ns 'ring.middleware.content-type nil))
(def ring-middleware-content-type-namespace
{:obj cns
'wrap-content-type (copy-var content-type/wrap-content-type cns)})

View file

@ -1,15 +0,0 @@
(ns babashka.impl.ring-middleware-defaults
(:require [ring.middleware.defaults :as defaults]
[ring.middleware.multipart-params]
[ring.middleware.multipart-params.temp-file]
[sci.core :as sci :refer [copy-var]]))
(alter-var-root #'ring.middleware.multipart-params/default-store (constantly (delay ring.middleware.multipart-params.temp-file/temp-file-store)))
(def dns (sci/create-ns 'ring.middleware.defaults nil))
(def ring-middleware-defaults-namespace
{:obj dns
'wrap-defaults (copy-var defaults/wrap-defaults dns)
'api-defaults (copy-var defaults/api-defaults dns)
'site-defaults (copy-var defaults/site-defaults dns)})

View file

@ -1,9 +0,0 @@
(ns babashka.impl.ring-middleware-webjars
(:require [ring.middleware.webjars :as webjars]
[sci.core :as sci :refer [copy-var]]))
(def wns (sci/create-ns 'ring.middleware.webjars nil))
(def ring-middleware-webjars-namespace
{:obj wns
'wrap-webjars (copy-var webjars/wrap-webjars wns)})

View file

@ -1,12 +0,0 @@
(ns babashka.impl.ring-util-http-response
(:require [ring.util.http-response :as http-response]
[sci.core :as sci :refer [copy-var]]))
(def hns (sci/create-ns 'ring.util.http-response nil))
(def ring-util-http-response-namespace
{:obj hns
'ok (copy-var http-response/ok hns)
'content-type (copy-var http-response/content-type hns)
'bad-request (copy-var http-response/bad-request hns)
'internal-server-error (copy-var http-response/internal-server-error hns)})

View file

@ -1,9 +0,0 @@
(ns babashka.impl.ring-util-request
(:require [ring.util.request :as request]
[sci.core :as sci :refer [copy-var]]))
(def rns (sci/create-ns 'ring.util.request nil))
(def ring-util-request-namespace
{:obj rns
'body-string (copy-var request/body-string rns)})

View file

@ -1,11 +0,0 @@
(ns babashka.impl.ring-util-response
(:require [ring.util.response :as response]
[sci.core :as sci :refer [copy-var]]))
(def rns (sci/create-ns 'ring.util.response nil))
(def ring-util-response-namespace
{:obj rns
'response (copy-var response/response rns)
'resource-data (copy-var response/resource-data rns)
'header (copy-var response/header rns)})

View file

@ -1,117 +0,0 @@
(ns ring.middleware.defaults
"Middleware for providing a handler with sensible defaults."
(:require [ring.middleware.x-headers :as x]
[ring.middleware.flash :refer [wrap-flash]]
[ring.middleware.session :refer [wrap-session]]
[ring.middleware.keyword-params :refer [wrap-keyword-params]]
[ring.middleware.nested-params :refer [wrap-nested-params]]
[ring.middleware.anti-forgery :refer [wrap-anti-forgery]]
[ring.middleware.multipart-params :refer [wrap-multipart-params]]
[ring.middleware.params :refer [wrap-params]]
[ring.middleware.cookies :refer [wrap-cookies]]
[ring.middleware.resource :refer [wrap-resource]]
[ring.middleware.file :refer [wrap-file]]
[ring.middleware.not-modified :refer [wrap-not-modified]]
[ring.middleware.content-type :refer [wrap-content-type]]
[ring.middleware.default-charset :refer [wrap-default-charset]]
[ring.middleware.absolute-redirects :refer [wrap-absolute-redirects]]
[ring.middleware.ssl :refer [wrap-ssl-redirect wrap-hsts wrap-forwarded-scheme]]
[ring.middleware.proxy-headers :refer [wrap-forwarded-remote-addr]]))
(def api-defaults
"A default configuration for a HTTP API."
{:params {:urlencoded true
:keywordize true}
:responses {:not-modified-responses true
:absolute-redirects true
:content-types true
:default-charset "utf-8"}})
(def secure-api-defaults
"A default configuration for a HTTP API that's accessed securely over HTTPS."
(-> api-defaults
(assoc-in [:security :ssl-redirect] true)
(assoc-in [:security :hsts] true)))
(def site-defaults
"A default configuration for a browser-accessible website, based on current
best practice."
{:params {:urlencoded true
:multipart true
:nested true
:keywordize true}
:cookies true
:session {:flash true
:cookie-attrs {:http-only true, :same-site :strict}}
:security {:anti-forgery true
:xss-protection {:enable? true, :mode :block}
:frame-options :sameorigin
:content-type-options :nosniff}
:static {:resources "public"}
:responses {:not-modified-responses true
:absolute-redirects true
:content-types true
:default-charset "utf-8"}})
(def secure-site-defaults
"A default configuration for a browser-accessible website that's accessed
securely over HTTPS."
(-> site-defaults
(assoc-in [:session :cookie-attrs :secure] true)
(assoc-in [:session :cookie-name] "secure-ring-session")
(assoc-in [:security :ssl-redirect] true)
(assoc-in [:security :hsts] true)))
(defn- wrap [handler middleware options]
(if (true? options)
(middleware handler)
(if options
(middleware handler options)
handler)))
(defn- wrap-multi [handler middleware args]
(wrap handler
(fn [handler args]
(if (coll? args)
(reduce middleware handler args)
(middleware handler args)))
args))
(defn- wrap-xss-protection [handler options]
(x/wrap-xss-protection handler (:enable? options true) (dissoc options :enable?)))
(defn- wrap-x-headers [handler options]
(-> handler
(wrap wrap-xss-protection (:xss-protection options false))
(wrap x/wrap-frame-options (:frame-options options false))
(wrap x/wrap-content-type-options (:content-type-options options false))))
(defn wrap-defaults
"Wraps a handler in default Ring middleware, as specified by the supplied
configuration map.
See: api-defaults
site-defaults
secure-api-defaults
secure-site-defaults"
[handler config]
(-> handler
(wrap wrap-anti-forgery (get-in config [:security :anti-forgery] false))
(wrap wrap-flash (get-in config [:session :flash] false))
(wrap wrap-session (:session config false))
(wrap wrap-keyword-params (get-in config [:params :keywordize] false))
(wrap wrap-nested-params (get-in config [:params :nested] false))
(wrap wrap-multipart-params (get-in config [:params :multipart] false))
(wrap wrap-params (get-in config [:params :urlencoded] false))
(wrap wrap-cookies (get-in config [:cookies] false))
(wrap wrap-absolute-redirects (get-in config [:responses :absolute-redirects] false))
(wrap-multi #(wrap-resource %1 %2 config) (get-in config [:static :resources] false))
(wrap-multi wrap-file (get-in config [:static :files] false))
(wrap wrap-content-type (get-in config [:responses :content-types] false))
(wrap wrap-default-charset (get-in config [:responses :default-charset] false))
(wrap wrap-not-modified (get-in config [:responses :not-modified-responses] false))
(wrap wrap-x-headers (:security config))
(wrap wrap-hsts (get-in config [:security :hsts] false))
(wrap wrap-ssl-redirect (get-in config [:security :ssl-redirect] false))
(wrap wrap-forwarded-scheme (boolean (:proxy config)))
(wrap wrap-forwarded-remote-addr (boolean (:proxy config)))))

View file

@ -1,348 +0,0 @@
(ns ring.util.response
"Functions for generating and augmenting response maps."
(:require [clojure.java.io :as io]
[clojure.string :as str]
[ring.util.io :refer [last-modified-date]]
[ring.util.parsing :as parsing]
[ring.util.time :refer [format-date]])
(:import [java.io File]
[java.util Date]
[java.net URL URLDecoder URLEncoder]))
(def ^{:added "1.4"} redirect-status-codes
"Map a keyword to a redirect status code."
{:moved-permanently 301
:found 302
:see-other 303
:temporary-redirect 307
:permanent-redirect 308})
(defn redirect
"Returns a Ring response for an HTTP 302 redirect. Status may be
a key in redirect-status-codes or a numeric code. Defaults to 302"
([url] (redirect url :found))
([url status]
{:status (redirect-status-codes status status)
:headers {"Location" url}
:body ""}))
(defn redirect-after-post
"Returns a Ring response for an HTTP 303 redirect. Deprecated in favor
of using redirect with a :see-other status."
{:deprecated "1.4"}
[url]
{:status 303
:headers {"Location" url}
:body ""})
(defn created
"Returns a Ring response for a HTTP 201 created response."
{:added "1.2"}
([url] (created url nil))
([url body]
{:status 201
:headers {"Location" url}
:body body}))
(defn bad-request
"Returns a 400 'bad request' response."
{:added "1.7"}
[body]
{:status 400
:headers {}
:body body})
(defn not-found
"Returns a 404 'not found' response."
{:added "1.1"}
[body]
{:status 404
:headers {}
:body body})
(defn response
"Returns a skeletal Ring response with the given body, status of 200, and no
headers."
[body]
{:status 200
:headers {}
:body body})
(defn status
"Returns an updated Ring response with the given status."
([status]
{:status status
:headers {}
:body nil})
([resp status]
(assoc resp :status status)))
(defn header
"Returns an updated Ring response with the specified header added."
[resp name value]
(assoc-in resp [:headers name] (str value)))
(defn- canonical-path ^String [^File file]
(str (.getCanonicalPath file)
(if (.isDirectory file) File/separatorChar)))
(defn- safe-path? [^String root ^String path]
(.startsWith (canonical-path (File. root path))
(canonical-path (File. root))))
(defn- directory-transversal?
"Check if a path contains '..'."
[^String path]
(-> (str/split path #"/|\\")
(set)
(contains? "..")))
(defn- find-file-named [^File dir ^String filename]
(let [path (File. dir filename)]
(if (.isFile path)
path)))
(defn- find-file-starting-with [^File dir ^String prefix]
(first
(filter
#(.startsWith (.toLowerCase (.getName ^File %)) prefix)
(.listFiles dir))))
(defn- find-index-file
"Search the directory for an index file."
[^File dir]
(or (find-file-named dir "index.html")
(find-file-named dir "index.htm")
(find-file-starting-with dir "index.")))
(defn- safely-find-file [^String path opts]
(if-let [^String root (:root opts)]
(if (or (safe-path? root path)
(and (:allow-symlinks? opts) (not (directory-transversal? path))))
(File. root path))
(File. path)))
(defn- find-file [^String path opts]
(if-let [^File file (safely-find-file path opts)]
(cond
(.isDirectory file)
(and (:index-files? opts true) (find-index-file file))
(.exists file)
file)))
(defn- file-data [^File file]
{:content file
:content-length (.length file)
:last-modified (last-modified-date file)})
(defn- content-length [resp len]
(if len
(header resp "Content-Length" len)
resp))
(defn- last-modified [resp last-mod]
(if last-mod
(header resp "Last-Modified" (format-date last-mod))
resp))
(defn file-response
"Returns a Ring response to serve a static file, or nil if an appropriate
file does not exist.
Options:
:root - take the filepath relative to this root path
:index-files? - look for index.* files in directories (defaults to true)
:allow-symlinks? - allow symlinks that lead to paths outside the root path
(defaults to false)"
([filepath]
(file-response filepath {}))
([filepath options]
(if-let [file (find-file filepath options)]
(let [data (file-data file)]
(-> (response (:content data))
(content-length (:content-length data))
(last-modified (:last-modified data)))))))
;; In Clojure 1.5.1, the as-file function does not correctly decode
;; UTF-8 byte sequences.
;;
;; See: http://dev.clojure.org/jira/browse/CLJ-1177
;;
;; As a work-around, we'll backport the fix from CLJ-1177 into
;; url-as-file.
(defn- ^File url-as-file [^java.net.URL u]
(-> (.getFile u)
(str/replace \/ File/separatorChar)
(str/replace "+" (URLEncoder/encode "+" "UTF-8"))
(URLDecoder/decode "UTF-8")
io/as-file))
(defn content-type
"Returns an updated Ring response with the a Content-Type header corresponding
to the given content-type."
[resp content-type]
(header resp "Content-Type" content-type))
(defn find-header
"Looks up a header in a Ring response (or request) case insensitively,
returning the header map entry, or nil if not present."
{:added "1.4"}
[resp ^String header-name]
(->> (:headers resp)
(filter #(.equalsIgnoreCase header-name (key %)))
(first)))
(defn get-header
"Looks up a header in a Ring response (or request) case insensitively,
returning the value of the header, or nil if not present."
{:added "1.2"}
[resp header-name]
(some-> resp (find-header header-name) val))
(defn update-header
"Looks up a header in a Ring response (or request) case insensitively,
then updates the header with the supplied function and arguments in the
manner of update-in."
{:added "1.4"}
[resp header-name f & args]
(let [header-key (or (some-> resp (find-header header-name) key) header-name)]
(update-in resp [:headers header-key] #(apply f % args))))
(defn charset
"Returns an updated Ring response with the supplied charset added to the
Content-Type header."
{:added "1.1"}
[resp charset]
(update-header resp "Content-Type"
(fn [content-type]
(-> (or content-type "text/plain")
(str/replace #";\s*charset=[^;]*" "")
(str "; charset=" charset)))))
(defn get-charset
"Gets the character encoding of a Ring response."
{:added "1.6"}
[resp]
(some-> (get-header resp "Content-Type")
parsing/find-content-type-charset))
(defn set-cookie
"Sets a cookie on the response. Requires the handler to be wrapped in the
wrap-cookies middleware."
{:added "1.1"}
[resp name value & [opts]]
(assoc-in resp [:cookies name] (merge {:value value} opts)))
(defn response?
"True if the supplied value is a valid response map."
{:added "1.1"}
[resp]
(and (map? resp)
(integer? (:status resp))
(map? (:headers resp))))
(defmulti resource-data
"Returns data about the resource specified by url, or nil if an
appropriate resource does not exist.
The return value is a map with optional values for:
:content - the content of the URL, suitable for use as the :body
of a ring response
:content-length - the length of the :content, nil if not available
:last-modified - the Date the :content was last modified, nil if not
available
This dispatches on the protocol of the URL as a keyword, and
implementations are provided for :file and :jar. If you are on a
platform where (Class/getResource) returns URLs with a different
protocol, you will need to provide an implementation for that
protocol.
This function is used internally by url-response."
{:arglists '([url]), :added "1.4"}
(fn [^java.net.URL url]
(keyword (.getProtocol url))))
(defmethod resource-data :file
[url]
(if-let [file (url-as-file url)]
(if-not (.isDirectory file)
(file-data file))))
(defn- add-ending-slash [^String path]
(if (.endsWith path "/")
path
(str path "/")))
(defn- jar-directory? [^java.net.JarURLConnection conn]
(let [jar-file (.getJarFile conn)
entry-name (.getEntryName conn)
dir-entry (.getEntry jar-file (add-ending-slash entry-name))]
(and dir-entry (.isDirectory dir-entry))))
(defn- connection-content-length [^java.net.URLConnection conn]
(let [len (.getContentLength conn)]
(if (<= 0 len) len)))
(defn- connection-last-modified [^java.net.URLConnection conn]
(let [last-mod (.getLastModified conn)]
(if-not (zero? last-mod)
(Date. last-mod))))
(defmethod resource-data :jar
[^java.net.URL url]
(let [conn (.openConnection url)]
(if-not (jar-directory? conn)
{:content (.getInputStream conn)
:content-length (connection-content-length conn)
:last-modified (connection-last-modified conn)})))
(defn url-response
"Return a response for the supplied URL."
{:added "1.2"}
[^URL url]
(if-let [data (resource-data url)]
(-> (response (:content data))
(content-length (:content-length data))
(last-modified (:last-modified data)))))
(defn- get-resources [path ^ClassLoader loader]
(-> (or loader (.getContextClassLoader (Thread/currentThread)))
(.getResources path)
(enumeration-seq)))
(defn- safe-file-resource? [{:keys [body]} {:keys [root loader allow-symlinks?]}]
(or allow-symlinks?
(nil? root)
(let [root (.replaceAll (str root) "^/" "")]
(or (str/blank? root)
(let [path (canonical-path body)]
(some #(and (= "file" (.getProtocol ^URL %))
(.startsWith path (canonical-path (url-as-file %))))
(get-resources root loader)))))))
(defn resource-response
"Returns a Ring response to serve a packaged resource, or nil if the
resource does not exist.
Options:
:root - take the resource relative to this root
:loader - resolve the resource in this class loader
:allow-symlinks? - allow symlinks that lead to paths outside the root
classpath directories (defaults to false)"
([path]
(resource-response path {}))
([path options]
(let [path (-> (str "/" path) (.replace "//" "/"))
root+path (-> (str (:root options) path) (.replaceAll "^/" ""))
;; babashka patch
io-resource-fn (or (get-in options [:static :io-resource-fn]) io/resource)
load #(if-let [loader (:loader options)]
(io-resource-fn % loader)
(io-resource-fn %))]
(if-not (directory-transversal? root+path)
(if-let [resource (load root+path)]
(let [response (url-response resource)]
(if (or (not (instance? File (:body response)))
;; babashka patch
true #_(safe-file-resource? response options))
response)))))))

View file

@ -0,0 +1,7 @@
(ns babashka.impl.rrb-vector
(:require [clojure.core.rrb-vector :as rrb]
[sci.core :as sci]))
(def rrbns (sci/create-ns 'clojure.core.rrb-vector))
(def rrb-vector-namespace {'catvec (sci/copy-var rrb/catvec rrbns)})

View file

@ -0,0 +1,157 @@
(ns babashka.impl.selmer
{:no-doc true}
(:require [babashka.impl.classpath :refer [resource]]
[babashka.impl.common :refer [ctx]]
[sci.core :as sci]
[selmer.filters :as filters]
[selmer.filter-parser :as fp]
[selmer.parser]
[selmer.tags :as tags]
[selmer.util :as util]
[selmer.validator :as validator]))
(def spns (sci/create-ns 'selmer.parser nil))
(def include #{'env-map})
(defn make-ns [ns sci-ns]
(reduce (fn [ns-map [var-name var]]
(let [m (meta var)
no-doc (:no-doc m)
doc (:doc m)
arglists (:arglists m)]
(if (and no-doc (not (contains? include var-name)))
ns-map
(assoc ns-map var-name
(sci/new-var (symbol var-name) @var
(cond-> {:ns sci-ns
:name (:name m)}
(:macro m) (assoc :macro true)
doc (assoc :doc doc)
arglists (assoc :arglists arglists)))))))
{}
(ns-publics ns)))
(def selmer-parser-ns (make-ns 'selmer.parser spns))
(def suns (sci/create-ns 'selmer.util nil))
(def escape-variables
(sci/new-dynamic-var '*escape-variables* util/*escape-variables* {:ns suns}))
(defn render-file
"Parses files if there isn't a memoized post-parse vector ready to go,
renders post-parse vector with passed context-map regardless. Double-checks
last-modified on files. Uses classpath for filename-or-url path "
[& args]
(binding [util/*resource-fn* resource
util/*escape-variables* @escape-variables]
(apply selmer.parser/render-file args)))
(defn render
" render takes the string, the context-map and possibly also opts. "
[& args]
(binding [util/*escape-variables* @escape-variables]
(apply selmer.parser/render args)))
(defn render-template
" vector of ^selmer.node.INodes and a context map."
[template context-map]
(binding [util/*escape-variables* @escape-variables]
(selmer.parser/render-template template context-map)))
(defn sci-ns-resolve [ns fqs]
(sci/eval-form (ctx) (list 'clojure.core/ns-resolve ns (list 'quote fqs))))
(defn force! [x]
(if (instance? clojure.lang.IDeref x) @x x))
(defn ^:no-doc resolve-var-from-kw [ns env kw]
(if (namespace kw)
(when-let [v (sci-ns-resolve ns (symbol (str (namespace kw) "/" (name kw))))] {kw (force! v)})
(or
;; check local env first
(when-let [[_ v] (find env kw)] {kw v})
(when-let [v (sci-ns-resolve ns (symbol (name kw)))] {kw (force! v)}))))
(defmacro <<
"Resolves the variables from your template string from the local-env, or the
namespace and puts them into your template for you.
e.g. (let [a 1] (<< \"{{a}} + {{a}} = 2\")) ;;=> \"1 + 1 = 2\" "
[s]
`(->> (selmer.parser/known-variables ~s)
(mapv #(selmer.parser/resolve-var-from-kw ~(deref sci/ns) (selmer.parser/env-map) %))
(apply merge)
(selmer.parser/render ~s)))
(defn resolve-arg
"Resolves an arg as passed to an add-tag! handler using the provided
context-map.
A custom tag handler will receive a seq of args as its first argument.
With this function, you can selectively resolve one or more of those args
so that if they contain literals, the literal value is returned, and if they
contain templates of any sort, which can itself have variables, filters or
tags in it, they will be returned resolved, applied and rendered.
Example:
(resolve-arg {{header-name|upper}} {:header-name \"My Page\"})
=> \"MY PAGE\""
[arg context-map]
(if (fp/literal? arg)
(fp/parse-literal arg)
(render arg context-map)))
(def selmer-parser-namespace
(-> selmer-parser-ns
(assoc 'render-file (sci/copy-var render-file spns)
'render (sci/copy-var render spns)
'render-template (sci/copy-var render-template spns)
'resolve-var-from-kw (sci/copy-var resolve-var-from-kw spns)
'resolve-arg (sci/copy-var resolve-arg spns )
'<< (sci/copy-var << spns))))
(def stns (sci/create-ns 'selmer.tags nil))
(def selmer-tags-ns (sci/create-ns 'selmer.tags stns))
(def selmer-tags-namespace
{;; needed by selmer.parser/add-tag!
'expr-tags (sci/copy-var tags/expr-tags stns)
;; needed by selmer.parser/add-tag!
'tag-handler (sci/copy-var tags/tag-handler stns)})
(def sfns (sci/create-ns 'selmer.filters nil))
(def selmer-filters-namespace
{'add-filter! (sci/copy-var filters/add-filter! sfns)
'remove-filter! (sci/copy-var filters/remove-filter! sfns)
'get-filter (sci/copy-var filters/get-filter sfns)
'filters (sci/copy-var filters/filters sfns)})
(defn turn-off-escaping! []
(sci/alter-var-root escape-variables (constantly false)))
(defn turn-on-escaping! []
(sci/alter-var-root escape-variables (constantly true)))
(defmacro with-escaping [& body]
`(binding [selmer.util/*escape-variables* true]
~@body))
(defmacro without-escaping [& body]
`(binding [selmer.util/*escape-variables* false]
~@body))
(def selmer-util-namespace
{'turn-off-escaping! (sci/copy-var turn-off-escaping! suns)
'turn-on-escaping! (sci/copy-var turn-on-escaping! suns)
'*escape-variables* escape-variables
'with-escaping (sci/copy-var with-escaping suns)
'without-escaping (sci/copy-var without-escaping suns)
'set-missing-value-formatter! (sci/copy-var util/set-missing-value-formatter! suns)})
(def svns (sci/create-ns 'selmer.validator nil))
(def selmer-validator-namespace
{'validate-off! (sci/copy-var validator/validate-off! svns)})

View file

@ -1,11 +0,0 @@
(ns babashka.impl.selmer-parser
(:require [selmer.parser :as parser]
[sci.core :as sci :refer [copy-var]]))
(def pns (sci/create-ns 'selmer.parser nil))
(def selmer-parser-namespace
{:obj pns
'render-file (copy-var parser/render-file pns)
'render (copy-var parser/render pns)
'set-resource-path! (copy-var parser/set-resource-path! pns)})

View file

@ -0,0 +1,60 @@
(ns babashka.impl.spec
{:no-doc true}
(:require [babashka.impl.clojure.spec.alpha :as s]
[babashka.impl.clojure.spec.gen.alpha :as gen]
[babashka.impl.clojure.spec.test.alpha :as test]
[clojure.core :as c]
[sci.core :as sci :refer [copy-var]]))
(def sns (sci/create-ns 'clojure.spec.alpha nil))
(def tns (sci/create-ns 'clojure.spec.test.alpha nil))
(def gns (sci/create-ns 'clojure.spec.gen.alpha nil))
(defn- ns-qualify
"Qualify symbol s by resolving it or using the current *ns*."
[s]
(if-let [ns-sym (some-> s namespace symbol)]
(c/or (some-> (get (ns-aliases *ns*) ns-sym) str (symbol (name s)))
s)
(symbol (str (.name *ns*)) (str s))))
(c/defn def
"Given a namespace-qualified keyword or resolvable symbol k, and a
spec, spec-name, predicate or regex-op makes an entry in the
registry mapping k to the spec. Use nil to remove an entry in
the registry for k."
[_ _ k spec-form]
(let [k (if (symbol? k) (ns-qualify k) k)]
`(clojure.spec.alpha/def-impl '~k '~(s/res spec-form) ~spec-form)))
;; TODO: fix error in clj-kondo: def is a special form which should always be resolved as the special form
#_:clj-kondo/ignore
(def spec-namespace
{'def (sci/copy-var s/def sns)
'def-impl (copy-var s/def-impl sns)
'valid? (copy-var s/valid? sns)
'gen (copy-var s/gen sns)
'cat (copy-var s/cat sns)
'cat-impl (copy-var s/cat-impl sns)
'fdef (copy-var s/fdef sns)
'fspec (copy-var s/fspec sns)
'fspec-impl (copy-var s/fspec-impl sns)
;; 372
'spec (copy-var s/spec sns)
'spec-impl (copy-var s/spec-impl sns)
#_#_'explain-data (copy-var s/explain-data sns)})
#_:clj-kondo/ignore
(def test-namespace
{'instrument (copy-var test/instrument tns)
'unstrument (copy-var test/unstrument tns)})
#_:clj-kondo/ignore
(def gen-namespace
{'generate (copy-var gen/generate gns)})
;; def-impl
;; -> spec? ;; OK
;; regex?
;; spec-impl
;; with-name

View file

@ -0,0 +1,199 @@
(ns babashka.impl.clojure.test.check
{:no-doc true}
(:require [clojure.test.check.random :as random]
[sci.core :as sci]))
(def next-rng
"Returns a random-number generator. Successive calls should return
independent results."
(let [a (atom (delay (random/make-java-util-splittable-random (System/currentTimeMillis))))
thread-local
(proxy [ThreadLocal] []
(initialValue []
(first (random/split (swap! a #(second (random/split (force %))))))))]
(fn []
(let [rng (.get thread-local)
[rng1 rng2] (random/split rng)]
(.set thread-local rng2)
rng1))))
(defn make-random
"Given an optional Long seed, returns an object that satisfies the
IRandom protocol."
([] (next-rng))
([seed] (random/make-java-util-splittable-random seed)))
(alter-var-root #'random/next-rng (constantly next-rng))
(alter-var-root #'random/make-random (constantly make-random))
(def r-ns (sci/create-ns 'clojure.test.check.random nil))
#_(doseq [k (sort (keys (ns-publics 'clojure.test.check.random)))]
(println (str "'" k) (format "(sci/copy-var random/%s r-ns)" k)))
(def random-namespace
{'make-java-util-splittable-random (sci/copy-var random/make-java-util-splittable-random r-ns)
'make-random (sci/copy-var random/make-random r-ns)
'rand-double (sci/copy-var random/rand-double r-ns)
'rand-long (sci/copy-var random/rand-long r-ns)
'split (sci/copy-var random/split r-ns)
'split-n (sci/copy-var random/split-n r-ns)})
(require '[clojure.test.check.generators :as gen])
(def gen-ns (sci/create-ns 'clojure.test.check.generators nil))
#_(doseq [k (sort (keys (ns-publics 'clojure.test.check.generators)))]
(println (str "'" k) (format "(sci/copy-var gen/%s gen-ns)" k)))
(def generators-namespace
{'->Generator (sci/copy-var gen/->Generator gen-ns)
'any (sci/copy-var gen/any gen-ns)
'any-equatable (sci/copy-var gen/any-equatable gen-ns)
'any-printable (sci/copy-var gen/any-printable gen-ns)
'any-printable-equatable (sci/copy-var gen/any-printable-equatable gen-ns)
'big-ratio (sci/copy-var gen/big-ratio gen-ns)
'bind (sci/copy-var gen/bind gen-ns)
'boolean (sci/copy-var gen/boolean gen-ns)
'byte (sci/copy-var gen/byte gen-ns)
'bytes (sci/copy-var gen/bytes gen-ns)
'call-gen (sci/copy-var gen/call-gen gen-ns)
'char (sci/copy-var gen/char gen-ns)
'char-alpha (sci/copy-var gen/char-alpha gen-ns)
'char-alpha-numeric (sci/copy-var gen/char-alpha-numeric gen-ns)
'char-alphanumeric (sci/copy-var gen/char-alphanumeric gen-ns)
'char-ascii (sci/copy-var gen/char-ascii gen-ns)
'choose (sci/copy-var gen/choose gen-ns)
'container-type (sci/copy-var gen/container-type gen-ns)
'double (sci/copy-var gen/double gen-ns)
'double* (sci/copy-var gen/double* gen-ns)
'elements (sci/copy-var gen/elements gen-ns)
'fmap (sci/copy-var gen/fmap gen-ns)
'frequency (sci/copy-var gen/frequency gen-ns)
'gen-bind (sci/copy-var gen/gen-bind gen-ns)
'gen-fmap (sci/copy-var gen/gen-fmap gen-ns)
'gen-pure (sci/copy-var gen/gen-pure gen-ns)
'generate (sci/copy-var gen/generate gen-ns)
'generator? (sci/copy-var gen/generator? gen-ns)
'hash-map (sci/copy-var gen/hash-map gen-ns)
'int (sci/copy-var gen/int gen-ns)
'keyword (sci/copy-var gen/keyword gen-ns)
'keyword-ns (sci/copy-var gen/keyword-ns gen-ns)
'large-integer (sci/copy-var gen/large-integer gen-ns)
'large-integer* (sci/copy-var gen/large-integer* gen-ns)
'lazy-random-states (sci/copy-var gen/lazy-random-states gen-ns)
'let (sci/copy-var gen/let gen-ns)
'list (sci/copy-var gen/list gen-ns)
'list-distinct (sci/copy-var gen/list-distinct gen-ns)
'list-distinct-by (sci/copy-var gen/list-distinct-by gen-ns)
'make-size-range-seq (sci/copy-var gen/make-size-range-seq gen-ns)
'map (sci/copy-var gen/map gen-ns)
'map->Generator (sci/copy-var gen/map->Generator gen-ns)
'nat (sci/copy-var gen/nat gen-ns)
'neg-int (sci/copy-var gen/neg-int gen-ns)
'no-shrink (sci/copy-var gen/no-shrink gen-ns)
'not-empty (sci/copy-var gen/not-empty gen-ns)
'one-of (sci/copy-var gen/one-of gen-ns)
'pos-int (sci/copy-var gen/pos-int gen-ns)
'ratio (sci/copy-var gen/ratio gen-ns)
'recursive-gen (sci/copy-var gen/recursive-gen gen-ns)
'resize (sci/copy-var gen/resize gen-ns)
'return (sci/copy-var gen/return gen-ns)
's-neg-int (sci/copy-var gen/s-neg-int gen-ns)
's-pos-int (sci/copy-var gen/s-pos-int gen-ns)
'sample (sci/copy-var gen/sample gen-ns)
'sample-seq (sci/copy-var gen/sample-seq gen-ns)
'scale (sci/copy-var gen/scale gen-ns)
'set (sci/copy-var gen/set gen-ns)
'shrink-2 (sci/copy-var gen/shrink-2 gen-ns)
'shuffle (sci/copy-var gen/shuffle gen-ns)
'simple-type (sci/copy-var gen/simple-type gen-ns)
'simple-type-equatable (sci/copy-var gen/simple-type-equatable gen-ns)
'simple-type-printable (sci/copy-var gen/simple-type-printable gen-ns)
'simple-type-printable-equatable (sci/copy-var gen/simple-type-printable-equatable gen-ns)
'size-bounded-bigint (sci/copy-var gen/size-bounded-bigint gen-ns)
'sized (sci/copy-var gen/sized gen-ns)
'small-integer (sci/copy-var gen/small-integer gen-ns)
'sorted-set (sci/copy-var gen/sorted-set gen-ns)
'string (sci/copy-var gen/string gen-ns)
'string-alpha-numeric (sci/copy-var gen/string-alpha-numeric gen-ns)
'string-alphanumeric (sci/copy-var gen/string-alphanumeric gen-ns)
'string-ascii (sci/copy-var gen/string-ascii gen-ns)
'such-that (sci/copy-var gen/such-that gen-ns)
'symbol (sci/copy-var gen/symbol gen-ns)
'symbol-ns (sci/copy-var gen/symbol-ns gen-ns)
'tuple (sci/copy-var gen/tuple gen-ns)
'uuid (sci/copy-var gen/uuid gen-ns)
'vector (sci/copy-var gen/vector gen-ns)
'vector-distinct (sci/copy-var gen/vector-distinct gen-ns)
'vector-distinct-by (sci/copy-var gen/vector-distinct-by gen-ns)})
(require '[clojure.test.check.rose-tree :as rose-tree])
(def rose-ns (sci/create-ns 'clojure.test.check.rose-tree nil))
#_(doseq [k (sort (keys (ns-publics 'clojure.test.check.rose-tree)))]
(println (str "'" k) (format "(sci/copy-var rose-tree/%s rose-ns)" k)))
(def rose-tree-namespace
{'->RoseTree (sci/copy-var rose-tree/->RoseTree rose-ns)
'bind (sci/copy-var rose-tree/bind rose-ns)
'children (sci/copy-var rose-tree/children rose-ns)
'collapse (sci/copy-var rose-tree/collapse rose-ns)
'filter (sci/copy-var rose-tree/filter rose-ns)
'fmap (sci/copy-var rose-tree/fmap rose-ns)
'join (sci/copy-var rose-tree/join rose-ns)
'make-rose (sci/copy-var rose-tree/make-rose rose-ns)
'permutations (sci/copy-var rose-tree/permutations rose-ns)
'pure (sci/copy-var rose-tree/pure rose-ns)
'remove (sci/copy-var rose-tree/remove rose-ns)
'root (sci/copy-var rose-tree/root rose-ns)
'seq (sci/copy-var rose-tree/seq rose-ns)
'shrink (sci/copy-var rose-tree/shrink rose-ns)
'shrink-vector (sci/copy-var rose-tree/shrink-vector rose-ns)
'zip (sci/copy-var rose-tree/zip rose-ns)})
(require '[clojure.test.check.properties :as properties])
(def p-ns (sci/create-ns 'clojure.test.check.properties nil))
#_(doseq [k (sort (keys (ns-publics 'clojure.test.check.properties)))]
(println (str "'" k) (format "(sci/copy-var properties/%s p-ns)" k)))
(def properties-namespace
{'->ErrorResult (sci/copy-var properties/->ErrorResult p-ns)
'for-all (sci/copy-var properties/for-all p-ns)
'for-all* (sci/copy-var properties/for-all* p-ns)
'map->ErrorResult (sci/copy-var properties/map->ErrorResult p-ns)})
(require '[clojure.test.check :as tc])
(def tc-ns (sci/create-ns 'clojure.test.check nil))
#_(doseq [k (sort (keys (ns-publics 'clojure.test.check)))]
(println (str "'" k) (format "(sci/copy-var tc/%s p-ns)" k)))
(def test-check-namespace
{'quick-check (sci/copy-var tc/quick-check tc-ns)})
#_(require '[clojure.test.check.clojure-test :as tct])
#_(def tct-ns (sci/create-ns 'clojure.test.check nil))
#_(doseq [k (sort (keys (ns-publics 'clojure.test.check.clojure-test)))]
(println (str "'" k) (format "(sci/copy-var tct/%s tct-ns)" k)))
#_(def test-check-clojure-test-namespace
{'*default-opts* (sci/copy-var tct/*default-opts* tct-ns)
'*default-test-count* (sci/copy-var tct/*default-test-count* tct-ns)
'*report-completion* (sci/copy-var tct/*report-completion* tct-ns)
'*report-shrinking* (sci/copy-var tct/*report-shrinking* tct-ns)
'*report-trials* (sci/copy-var tct/*report-trials* tct-ns)
'*trial-report-period* (sci/copy-var tct/*trial-report-period* tct-ns)
'assert-check (sci/copy-var tct/assert-check tct-ns)
'default-reporter-fn (sci/copy-var tct/default-reporter-fn tct-ns)
'defspec (sci/copy-var tct/defspec tct-ns)
'process-options (sci/copy-var tct/process-options tct-ns)
'trial-report-dots (sci/copy-var tct/trial-report-dots tct-ns)
'trial-report-periodic (sci/copy-var tct/trial-report-periodic tct-ns)
'with-test-out* (sci/copy-var tct/with-test-out* tct-ns)})

View file

@ -1,16 +1,19 @@
(ns babashka.impl.transit
(:require [cognitect.transit :as transit]
[sci.impl.namespaces :refer [copy-var]]
[sci.impl.vars :as vars]))
(:require
[cognitect.transit :as transit]
[sci.core :as sci :refer [copy-var]]))
(def tns (vars/->SciNamespace 'cognitect.transit nil))
(def tns (sci/create-ns 'cognitect.transit nil))
(def transit-namespace
{'write (copy-var transit/write tns)
'writer (copy-var transit/writer tns)
'write-handler (copy-var transit/write-handler tns)
'write-handler-map (copy-var transit/write-handler-map tns)
'write-meta (copy-var transit/write-meta tns)
'read (copy-var transit/read tns)
'reader (copy-var transit/reader tns)
'read-handler (copy-var transit/read-handler tns)})
'read-handler (copy-var transit/read-handler tns)
'read-handler-map (copy-var transit/read-handler-map tns)
'default-write-handlers (copy-var transit/default-write-handlers tns)
'tagged-value (copy-var transit/tagged-value tns)})

View file

@ -1,13 +1,52 @@
(ns babashka.impl.xml
{:no-doc true}
(:require [clojure.data.xml :as xml]
[sci.impl.namespaces :refer [copy-var]]
[sci.impl.vars :as vars]))
(:require [babashka.impl.common :refer [ctx]]
[clojure.data.xml :as xml]
[clojure.data.xml.event :as event]
[clojure.data.xml.tree :as tree]
[sci.core :as sci :refer [copy-var]]
[sci.impl.vars]))
(def xns (vars/->SciNamespace 'clojure.data.xml nil))
(def xns (sci/create-ns 'clojure.data.xml nil))
(def xens (sci/create-ns 'clojure.data.xml.event nil))
(def xtns (sci/create-ns 'clojure.data.xml.tree nil))
(defn- clj-ns-name [ns]
(cond (instance? sci.lang.Namespace ns) (str ns)
(keyword? ns) (name ns)
:else (str ns)))
(defn alias-uri
"Define a Clojure namespace aliases for xmlns uris.
This sets up the current namespace for reading qnames denoted with
Clojure's ::alias/keywords reader feature.
## Example
(alias-uri :D \"DAV:\")
; similar in effect to
;; (require '[xmlns.DAV%3A :as D])
; but required namespace is auto-created
; henceforth, shorthand keywords can be used
{:tag ::D/propfind}
; ::D/propfind will be expanded to :xmlns.DAV%3A/propfind
; in the current namespace by the reader
## Clojurescript support
Currently, namespaces can't be auto-created in Clojurescript.
Dummy files for aliased uris have to exist. Have a look at `uri-file` and `print-uri-file-command!` to create those."
{:arglists '([& {:as alias-nss}])}
[& ans]
(loop [[a n & rst :as ans] ans]
(when (seq ans)
#_(assert (<= (count ans)) (pr-str ans))
(let [xn (xml/uri-symbol n)
al (symbol (clj-ns-name a))]
(sci/eval-form (ctx) `(create-ns (quote ~xn)))
(sci/eval-form (ctx) `(alias (quote ~al) (quote ~xn)))
(recur rst)))))
(def xml-namespace
{'aggregate-xmlns (copy-var xml/aggregate-xmlns xns)
'alias-uri (copy-var alias-uri xns)
'as-qname (copy-var xml/as-qname xns)
'cdata (copy-var xml/cdata xns)
'element (copy-var xml/element xns)
@ -33,3 +72,11 @@
'uri-file (copy-var xml/uri-file xns)
'uri-symbol (copy-var xml/uri-symbol xns)
'xml-comment (copy-var xml/xml-comment xns)})
(def xml-event-namespace
{'event-element (copy-var event/event-element xens)
'event-exit? (copy-var event/event-exit? xens)
'event-node (copy-var event/event-node xens)})
(def xml-tree-namespace
{'seq-tree (copy-var tree/seq-tree xtns)})

View file

@ -1,9 +1,14 @@
(ns babashka.impl.ordered
{:no-doc true}
(:require [flatland.ordered.map :as omap]
[flatland.ordered.set :as oset]
[sci.core :as sci]))
(def omap-ns (sci/create-ns 'flatland.ordered.map nil))
(def oset-ns (sci/create-ns 'flatland.ordered.set nil))
(def ordered-map-ns
{'ordered-map (sci/copy-var omap/ordered-map omap-ns)})
(def ordered-set-ns
{'ordered-set (sci/copy-var oset/ordered-set oset-ns)})

Some files were not shown because too many files have changed in this diff Show more