{"id":15647771,"url":"https://github.com/borkdude/boot-bundle","last_synced_at":"2025-04-30T13:21:18.540Z","repository":{"id":57713262,"uuid":"70322947","full_name":"borkdude/boot-bundle","owner":"borkdude","description":"boot-bundle: managed dependencies for boot, the clojure build tool","archived":false,"fork":false,"pushed_at":"2019-01-19T18:50:43.000Z","size":28,"stargazers_count":43,"open_issues_count":1,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-02-25T08:05:31.439Z","etag":null,"topics":["boot","boot-clj","boot-tasks","build-tool","clojure"],"latest_commit_sha":null,"homepage":"","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/borkdude.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-10-08T10:13:16.000Z","updated_at":"2024-05-31T07:55:02.000Z","dependencies_parsed_at":"2022-09-05T22:50:40.734Z","dependency_job_id":null,"html_url":"https://github.com/borkdude/boot-bundle","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/borkdude%2Fboot-bundle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/borkdude%2Fboot-bundle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/borkdude%2Fboot-bundle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/borkdude%2Fboot-bundle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/borkdude","download_url":"https://codeload.github.com/borkdude/boot-bundle/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242661652,"owners_count":20165329,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["boot","boot-clj","boot-tasks","build-tool","clojure"],"created_at":"2024-10-03T12:20:59.950Z","updated_at":"2025-03-09T07:31:55.383Z","avatar_url":"https://github.com/borkdude.png","language":"Clojure","readme":"# boot-bundle\nBoot-bundle: managed dependencies for [boot](https://github.com/boot-clj/boot).\n\n[![Clojars Project](https://img.shields.io/clojars/v/boot-bundle.svg)](https://clojars.org/boot-bundle)\n\nDon't repeat yourself for library coordinates. Upgrade once, upgrade everywhere.\n\n## Why\nThe most common scenario for usage of this library is when you have a repository with multiple boot projects and these projects have overlapping dependencies that you want to manage in one place. That one place is the bundle file. \n\n## Usage\nDefine a bundle file that contains a map of keywords to either:\n- a single dependency\n- a vector of dependencies and/or keywords\n\nExample:\n```clojure\n{:clojure [[org.clojure/clojure \"1.8.0\"]\n           [clojure-future-spec \"1.9.0-alpha13\"]\n           [org.clojure/test.check \"0.9.0\"]\n           [org.clojure/core.async \"0.2.391\"]]\n :schema [prismatic/schema \"1.1.3\"]\n :component [[com.stuartsierra/component \"0.3.1\"]\n             [org.clojure/tools.nrepl \"0.2.12\"]\n             [reloaded.repl \"0.2.3\"]]\n :base [:clojure\n        :schema\n        :component\n        [com.taoensso/timbre \"4.7.4\"]]\n :clojurescript [org.clojure/clojurescript \"1.9.229\"]}\n```\n\nLoad boot-bundle before you load your other dependencies in `build.boot`:\n\n```clojure\n(set-env! :dependencies\n          '[[boot-bundle \"0.1.1\" :scope \"test\"]\n            ;; if you share your bundle via clojars, uncomment and change:\n            ;; [your-bundle \"0.1.1\" :scope \"test\"]\n            ]\n          ;; if you use a bundle file from the current project's classpath, uncomment:\n          ;; :resource-paths #{\"resources\"}\n          )\n\n(require '[boot-bundle :refer [expand-keywords]])\n```\n\nWrap the `dependencies` vector in `set-env!` with `expand-keywords`:\n\n```clojure\n(set-env!\n :source-paths #{\"src\"}\n :dependencies\n (expand-keywords\n  '[:base\n    :clojurescript\n    ;; combine this with your remaining dependencies:\n    [reagent \"0.6.0\"]\n    ;; ...\n   ]))\n```      \nBy default boot-bundle searches for the file `boot.bundle.edn` on the classpath.\nThis can be overriden by setting either\n\n- the system property `boot.bundle.file`:\n```\nBOOT_JVM_OPTIONS=\"-Dboot.bundle.file=../bundle.edn\"\n```\n- the environment variable `BOOT_BUNDLE_FILE`:\n\n``` clojure\nBOOT_BUNDLE_FILE=\"../bundle.edn\"\n```\n\n- the atom `bundle-file-path`:\n\n``` clojure\n(reset! boot-bundle/bundle-file-path \"../bundle.edn\")\n```\n\nSearching the local file system has priority over searching the classpath.\n\nThat's it. You can now use boot as you normally would.\n\n## Advanced usage\n\n### Manipulating the bundle map\nBoot-bundle lets you set the bundle map if you want to. For example, just write\n\n```clojure\n(reset! boot-bundle/bundle-map\n        (boot-bundle/read-from-file \"../bundle.edn\"))\n```\nNote that validation only happens when using `read-from-file`, so when doing\nsomething else, you may want to validate yourself:\n\n```clojure\n(swap! boot-bundle/bundle-map\n       #(boot-bundle/validate-bundle\n         (assoc % :schema '[prismatic/schema \"1.1.3\"])))\n```\n\n### Versions\n\nThe function `get-version` returns the version for a dependency by its keyword. This can be used to define the version of a project in `build.boot`.\n\nFor example, in `boot.bundle.edn`:\n\n```clojure\n{:myproject [myproject \"0.1.0-SNAPSHOT\"]}\n```\n\nIn `myproject`'s `build.boot`:\n\n```clojure\n(set-env! :dependencies\n          '[[boot-bundle \"0.1.1\" :scope \"test\"]])\n(require '[boot-bundle :refer [expand-keywords get-version]])\n(def +version+ (get-version :myproject))\n```\n\nBoot-bundle also supports version keywords. They are convenient if you need the same version on multiple dependencies. Version keywords are qualified with `version` and must refer to a string.\n\nExample usage:\n\nIn `boot.bundle.edn`:\n\n```clojure\n{:version/pedestal \"0.5.1\"\n :pedestal [[io.pedestal/pedestal.service       :version/pedestal]\n            [io.pedestal/pedestal.service-tools :version/pedestal]\n            [io.pedestal/pedestal.jetty         :version/pedestal]\n            [io.pedestal/pedestal.immutant      :version/pedestal]\n            [io.pedestal/pedestal.tomcat        :version/pedestal]]}\n```\nWith every new Pedestal release, you only have to change the version in one place.\n\n## Funding\n\nThis software was commissioned and sponsored by [Doctor Evidence](http://doctorevidence.com/). The Doctor Evidence mission is to improve clinical outcomes by finding and delivering medical evidence to healthcare professionals, medical associations, policy makers and manufacturers through revolutionary solutions that enable anyone to make informed decisions and policies using medical data that is more accessible, relevant and readable.\n\n## FAQ\n### How can I distribute my bundle via clojars?\n\nCheck out [this example](https://github.com/borkdude/boot.bundle.edn).\n\n### Why isn't boot-bundle eating its own dog food?\n\nBoot-bundle is a lightweight library without any external dependencies.\n\n### Can I use multiple bundles and merge them?\n\nSure!\n```clojure\n(reset! boot-bundle/bundle-map\n  (merge\n    (boot-bundle/read-from-file \"bundle1.edn\")\n    (boot-bundle/read-from-file \"bundle2.edn\")))\n```\n### How do you use it?\nAt work we use it in a multi-project repository. We have a `bundle.edn` file in the root and refer to it from most of the Clojure projects.\n\n### How can I opt out?\n\nStart a REPL, eval the call to `expand-keywords` and substitute this result back into your `build.boot`.\n\n```clojure\n$ boot repl\nboot.user=\u003e (use 'clojure.pprint)\nboot.user=\u003e (pprint (expand-keywords '[:clojure]))\n[[org.clojure/clojure \"1.8.0\"]\n [clojure-future-spec \"1.9.0-alpha13\"]\n [org.clojure/test.check \"0.9.0\"]\n [org.clojure/core.async \"0.2.391\"]]\nnil\n```\n\n## License\n\nCopyright Michiel Borkent 2016.\n\nDistributed under the Eclipse Public License either version 1.0 or (at your option) any later version.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fborkdude%2Fboot-bundle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fborkdude%2Fboot-bundle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fborkdude%2Fboot-bundle/lists"}