diff --git a/.circleci/config.yml b/.circleci/config.yml index a5670d6..a069265 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -98,7 +98,8 @@ jobs: - realworld-example-{{ checksum "deps.edn" }}-{{ checksum "projects/realworld-backend/deps.edn" }} - run: name: Run realworld backend - command: clojure -A:ring realworld-backend + command: clojure -A:ring + working_directory: projects/realworld-backend background: true - run: name: Wait for backend to initialize diff --git a/.idea/runConfigurations/REPL.xml b/.idea/runConfigurations/REPL.xml index 2bead77..5d56100 100644 --- a/.idea/runConfigurations/REPL.xml +++ b/.idea/runConfigurations/REPL.xml @@ -1,3 +1,4 @@ + @@ -10,5 +11,7 @@ + - \ No newline at end of file + + diff --git a/.media/how-to/01_workspace.png b/.media/how-to/01_workspace.png index 06b62ad..97a86b0 100644 Binary files a/.media/how-to/01_workspace.png and b/.media/how-to/01_workspace.png differ diff --git a/.media/how-to/02_dev_project.png b/.media/how-to/02_dev_project.png index cebadca..a7e6807 100644 Binary files a/.media/how-to/02_dev_project.png and b/.media/how-to/02_dev_project.png differ diff --git a/.media/how-to/03_components.png b/.media/how-to/03_components.png index 1315710..e3dd05f 100644 Binary files a/.media/how-to/03_components.png and b/.media/how-to/03_components.png differ diff --git a/.media/how-to/04_components_added_to_development_project.png b/.media/how-to/04_components_added_to_development_project.png index 2bce63d..1b5f02b 100644 Binary files a/.media/how-to/04_components_added_to_development_project.png and b/.media/how-to/04_components_added_to_development_project.png differ diff --git a/.media/how-to/05_base.png b/.media/how-to/05_base.png index b238cfe..a9d1665 100644 Binary files a/.media/how-to/05_base.png and b/.media/how-to/05_base.png differ diff --git a/.media/how-to/06_empty_project.png b/.media/how-to/06_empty_project.png index 4bab4dd..497309f 100644 Binary files a/.media/how-to/06_empty_project.png and b/.media/how-to/06_empty_project.png differ diff --git a/.media/how-to/07_filled_project.png b/.media/how-to/07_filled_project.png index 5dfc507..b97f4ba 100644 Binary files a/.media/how-to/07_filled_project.png and b/.media/how-to/07_filled_project.png differ diff --git a/.media/how-to/08_workspace_info.png b/.media/how-to/08_workspace_info.png index 3800fae..025668d 100644 Binary files a/.media/how-to/08_workspace_info.png and b/.media/how-to/08_workspace_info.png differ diff --git a/.media/how-to/09_workspace_info_after_commit.png b/.media/how-to/09_workspace_info_after_commit.png index ff3c77f..f24ea8d 100644 Binary files a/.media/how-to/09_workspace_info_after_commit.png and b/.media/how-to/09_workspace_info_after_commit.png differ diff --git a/.media/readme/02_polylith_info.png b/.media/readme/02_polylith_info.png index 3fd100f..509497f 100644 Binary files a/.media/readme/02_polylith_info.png and b/.media/readme/02_polylith_info.png differ diff --git a/bases/rest-api/deps.edn b/bases/rest-api/deps.edn new file mode 100644 index 0000000..845bb01 --- /dev/null +++ b/bases/rest-api/deps.edn @@ -0,0 +1,8 @@ +{:paths ["src" "resources"] + :deps {compojure/compojure {:mvn/version "1.6.0"} + org.clojure/data.json {:mvn/version "0.2.6"} + ring/ring-json {:mvn/version "0.5.0-beta1"} + ring/ring-jetty-adapter {:mvn/version "1.6.3"} + ring-logger-timbre/ring-logger-timbre {:mvn/version "0.7.6"}} + :aliases {:test {:extra-paths ["test"] + :extra-deps []}}} diff --git a/components/article/deps.edn b/components/article/deps.edn new file mode 100644 index 0000000..4f6c091 --- /dev/null +++ b/components/article/deps.edn @@ -0,0 +1,8 @@ +{:paths ["src" "resources"] + :deps {clj-time/clj-time {:mvn/version "0.15.2"} + honeysql/honeysql {:mvn/version "0.9.2"} + metosin/spec-tools {:mvn/version "0.6.1"} + org.clojure/java.jdbc {:mvn/version "0.7.5"} + slugger/slugger {:mvn/version "1.0.1"}} + :aliases {:test {:extra-paths ["test"] + :extra-deps []}}} diff --git a/components/comment/deps.edn b/components/comment/deps.edn new file mode 100644 index 0000000..9bcd21b --- /dev/null +++ b/components/comment/deps.edn @@ -0,0 +1,7 @@ +{:paths ["src" "resources"] + :deps {clj-time/clj-time {:mvn/version "0.15.2"} + honeysql/honeysql {:mvn/version "0.9.2"} + metosin/spec-tools {:mvn/version "0.6.1"} + org.clojure/java.jdbc {:mvn/version "0.7.5"}} + :aliases {:test {:extra-paths ["test"] + :extra-deps []}}} diff --git a/components/database/deps.edn b/components/database/deps.edn new file mode 100644 index 0000000..6590642 --- /dev/null +++ b/components/database/deps.edn @@ -0,0 +1,6 @@ +{:paths ["src" "resources"] + :deps {honeysql/honeysql {:mvn/version "0.9.2"} + org.clojure/java.jdbc {:mvn/version "0.7.5"} + org.xerial/sqlite-jdbc {:mvn/version "3.7.2"}} + :aliases {:test {:extra-paths [] + :extra-deps []}}} diff --git a/components/env/deps.edn b/components/env/deps.edn new file mode 100644 index 0000000..e88f6e8 --- /dev/null +++ b/components/env/deps.edn @@ -0,0 +1,4 @@ +{:paths ["src" "resources"] + :deps {} + :aliases {:test {:extra-paths [] + :extra-deps []}}} diff --git a/components/env/resources/spec/.keep b/components/env/resources/env/.keep similarity index 100% rename from components/env/resources/spec/.keep rename to components/env/resources/env/.keep diff --git a/components/log/deps.edn b/components/log/deps.edn new file mode 100644 index 0000000..ae89ed4 --- /dev/null +++ b/components/log/deps.edn @@ -0,0 +1,4 @@ +{:paths ["src" "resources"] + :deps {com.taoensso/timbre {:mvn/version "4.10.0"}} + :aliases {:test {:extra-paths [] + :extra-deps []}}} diff --git a/components/profile/deps.edn b/components/profile/deps.edn new file mode 100644 index 0000000..afec21b --- /dev/null +++ b/components/profile/deps.edn @@ -0,0 +1,6 @@ +{:paths ["src" "resources"] + :deps {honeysql/honeysql {:mvn/version "0.9.2"} + metosin/spec-tools {:mvn/version "0.6.1"} + org.clojure/java.jdbc {:mvn/version "0.7.5"}} + :aliases {:test {:extra-paths ["test"] + :extra-deps []}}} diff --git a/components/spec/deps.edn b/components/spec/deps.edn new file mode 100644 index 0000000..dbc2dc7 --- /dev/null +++ b/components/spec/deps.edn @@ -0,0 +1,4 @@ +{:paths ["src" "resources"] + :deps {metosin/spec-tools {:mvn/version "0.6.1"}} + :aliases {:test {:extra-paths [] + :extra-deps []}}} diff --git a/components/tag/deps.edn b/components/tag/deps.edn new file mode 100644 index 0000000..b111600 --- /dev/null +++ b/components/tag/deps.edn @@ -0,0 +1,5 @@ +{:paths ["src" "resources"] + :deps {honeysql/honeysql {:mvn/version "0.9.2"} + org.clojure/java.jdbc {:mvn/version "0.7.5"}} + :aliases {:test {:extra-paths ["test"] + :extra-deps []}}} diff --git a/components/user/deps.edn b/components/user/deps.edn new file mode 100644 index 0000000..e1c9e48 --- /dev/null +++ b/components/user/deps.edn @@ -0,0 +1,9 @@ +{:paths ["src" "resources"] + :deps {clj-jwt/clj-jwt {:mvn/version "0.1.1"} + clj-time/clj-time {:mvn/version "0.15.2"} + crypto-password/crypto-password {:mvn/version "0.2.0"} + honeysql/honeysql {:mvn/version "0.9.2"} + metosin/spec-tools {:mvn/version "0.6.1"} + org.clojure/java.jdbc {:mvn/version "0.7.5"}} + :aliases {:test {:extra-paths ["test"] + :extra-deps []}}} diff --git a/deps.edn b/deps.edn index e799e05..f6c0970 100644 --- a/deps.edn +++ b/deps.edn @@ -1,85 +1,56 @@ -{:polylith {:vcs "git" - :top-namespace "clojure.realworld" - :interface-ns "interface" - :default-profile-name "default" - :compact-views #{} - :release-tag-pattern "v[0-9]*" - :stable-tag-pattern "stable-*" - :project-to-alias {"development" "dev" - "realworld-backend" "rb"} - :ns-to-lib {clj-time clj-time/clj-time - clj-jwt clj-jwt/clj-jwt - clojure org.clojure/clojure - clojure.java.jdbc org.clojure/java.jdbc - compojure compojure/compojure - crypto.password crypto-password/crypto-password - honeysql honeysql/honeysql - slugger slugger/slugger - ring.logger ring-logger-timbre/ring-logger-timbre - ring.middleware.json ring/ring-json - spec-tools metosin/spec-tools - taoensso.timbre com.taoensso/timbre}} - - :aliases {:dev {:extra-paths ["development/src" - - ; Components - "components/article/src" - "components/article/resources" - "components/comment/src" - "components/comment/resources" - "components/database/src" - "components/database/resources" - "components/env/src" - "components/env/resources" - "components/log/src" - "components/log/resources" - "components/profile/src" - "components/profile/resources" - "components/spec/src" - "components/spec/resources" - "components/tag/src" - "components/tag/resources" - "components/user/src" - "components/user/resources" - - ; Bases - "bases/rest-api/src" - "bases/rest-api/resources"] - - :extra-deps {clj-time/clj-time {:mvn/version "0.14.2"} - clj-jwt/clj-jwt {:mvn/version "0.1.1"} - com.taoensso/timbre {:mvn/version "4.10.0"} - compojure/compojure {:mvn/version "1.6.0"} - crypto-password/crypto-password {:mvn/version "0.2.0"} - honeysql/honeysql {:mvn/version "0.9.2"} - metosin/spec-tools {:mvn/version "0.6.1"} - org.clojure/clojure {:mvn/version "1.10.0"} - org.clojure/data.json {:mvn/version "0.2.6"} - org.clojure/java.jdbc {:mvn/version "0.7.5"} - org.xerial/sqlite-jdbc {:mvn/version "3.7.2"} - ring-logger-timbre/ring-logger-timbre {:mvn/version "0.7.6"} - ring/ring-jetty-adapter {:mvn/version "1.6.3"} - ring/ring-json {:mvn/version "0.5.0-beta1"} - slugger/slugger {:mvn/version "1.0.1"}}} - - :test {:extra-paths ["components/article/test" - "components/comment/test" - "components/profile/test" - "components/tag/test" - "components/user/test" - - "bases/rest-api/test"] - :extra-deps {org.clojure/test.check {:mvn/version "0.10.0-alpha3"}}} - - :poly {:main-opts ["-m" "polylith.clj.core.poly-cli.core"] - :extra-deps {polyfy/polylith - {:git/url "https://github.com/polyfy/polylith.git" - :sha "ec38a83db7597e6f6f33dfbc1e4da665807ab091" - :deps/root "projects/poly"}}} - - :ring {:extra-deps {furkan3ayraktar/polylith-clj-deps-ring - {:git/url "https://github.com/furkan3ayraktar/polylith-clj-deps-ring.git" - :sha "15e5ab1cef84d574c3e49f5335a0dadb831445ce" - :deps/root "projects/core"}} - - :main-opts ["-m" "polylith.clj-deps-ring.cli.main" "start"]}}} +{:mvn/repos {"central" {:url "https://repo1.maven.org/maven2/"} + "clojars" {:url "https://clojars.org/repo"}} + + :aliases {:dev {:extra-paths ["development/src" + + ; Components + "components/article/src" + "components/article/resources" + "components/comment/src" + "components/comment/resources" + "components/database/src" + "components/database/resources" + "components/env/src" + "components/env/resources" + "components/log/src" + "components/log/resources" + "components/profile/src" + "components/profile/resources" + "components/spec/src" + "components/spec/resources" + "components/tag/src" + "components/tag/resources" + "components/user/src" + "components/user/resources" + + ; Bases + "bases/rest-api/src" + "bases/rest-api/resources"] + + :extra-deps {clj-time/clj-time {:mvn/version "0.15.2"} + clj-jwt/clj-jwt {:mvn/version "0.1.1"} + com.taoensso/timbre {:mvn/version "4.10.0"} + compojure/compojure {:mvn/version "1.6.0"} + crypto-password/crypto-password {:mvn/version "0.2.0"} + honeysql/honeysql {:mvn/version "0.9.2"} + metosin/spec-tools {:mvn/version "0.6.1"} + org.clojure/clojure {:mvn/version "1.10.3"} + org.clojure/data.json {:mvn/version "0.2.6"} + org.clojure/java.jdbc {:mvn/version "0.7.5"} + org.xerial/sqlite-jdbc {:mvn/version "3.7.2"} + ring-logger-timbre/ring-logger-timbre {:mvn/version "0.7.6"} + ring/ring-jetty-adapter {:mvn/version "1.6.3"} + ring/ring-json {:mvn/version "0.5.0-beta1"} + slugger/slugger {:mvn/version "1.0.1"}}} + + :test {:extra-paths ["components/article/test" + "components/comment/test" + "components/profile/test" + "components/tag/test" + "components/user/test" + + "bases/rest-api/test"] + :extra-deps {org.clojure/test.check {:mvn/version "0.10.0-alpha3"}}} + + :poly {:main-opts ["-m" "polylith.clj.core.poly-cli.core"] + :extra-deps {polylith/clj-poly {:mvn/version "0.2.12-alpha"}}}}} diff --git a/how-to.md b/how-to.md index f493a73..94a044e 100644 --- a/how-to.md +++ b/how-to.md @@ -54,17 +54,19 @@ However, our components are not yet added to development project's `` deps.edn ` ![components-added](.media/how-to/04_components_added_to_development_project.png) -As you can notice, we added the components' source and resource directories under the `` :dev `` alias and the test directories under the `` :test `` alias. Once you do this and load dev and test aliases, you can start working with your components. +notice that we added the components both under the `:dev` and `:test` alias. Once you do this and load dev and test aliases, you can start working with your components. ###### Create base - `` poly create base name:rest-api `` -This command will create a base named `` rest-api `` under bases directory. Same as components, you should add the source, resource and test directories of `` rest-api `` base to the `` deps.edn `` file in the workspace root. It will look as following: +This command will create a base named `` rest-api `` under bases directory. +Same as components, you should add the base to the `deps.edn` file in the workspace root. It will look like this: ![base](.media/how-to/05_base.png) ###### Add code to components and the base -You can take the code from the [repository]() to populate the components and the base. You should also add the necessary dependencies to the `` deps.edn `` file in the workspace root. +You can take the code from the [repository]() to populate the components and the base. +You should also add the necessary dependencies to the `` deps.edn `` file in the workspace root. Once your code is ready, you can move on to the next step to create a project. @@ -90,7 +92,7 @@ poly info This command will print out the information about the current workspace. You can find documentation about it in the [Polylith repository](https://github.com/polyfy/polylith). It should print an output like this: -![workspace-info](.media/how-to/08_workspace_info.png) + Here the asterisk symbol points the changed components and bases since the last stable point. diff --git a/projects/realworld-backend/deps.edn b/projects/realworld-backend/deps.edn index 7a156b9..3d5387a 100644 --- a/projects/realworld-backend/deps.edn +++ b/projects/realworld-backend/deps.edn @@ -1,26 +1,4 @@ -{:paths ["../../components/article/src" - "../../components/article/resources" - "../../components/comment/src" - "../../components/comment/resources" - "../../components/database/src" - "../../components/database/resources" - "../../components/env/src" - "../../components/env/resources" - "../../components/log/src" - "../../components/log/resources" - "../../components/profile/src" - "../../components/profile/resources" - "../../components/spec/src" - "../../components/spec/resources" - "../../components/tag/src" - "../../components/tag/resources" - "../../components/user/src" - "../../components/user/resources" - - "../../bases/rest-api/resources" - "../../bases/rest-api/src"] - - :ring {:init clojure.realworld.rest-api.api/init +{:ring {:init clojure.realworld.rest-api.api/init :destroy clojure.realworld.rest-api.api/destroy :handler clojure.realworld.rest-api.api/app :port 6003} @@ -28,28 +6,20 @@ :mvn/repos {"central" {:url "https://repo1.maven.org/maven2/"} "clojars" {:url "https://clojars.org/repo"}} - :deps {clj-time/clj-time {:mvn/version "0.14.2"} - clj-jwt/clj-jwt {:mvn/version "0.1.1"} - com.taoensso/timbre {:mvn/version "4.10.0"} - compojure/compojure {:mvn/version "1.6.0"} - crypto-password/crypto-password {:mvn/version "0.2.0"} - honeysql/honeysql {:mvn/version "0.9.2"} - metosin/spec-tools {:mvn/version "0.6.1"} - org.clojure/clojure {:mvn/version "1.10.0"} - org.clojure/data.json {:mvn/version "0.2.6"} - org.clojure/java.jdbc {:mvn/version "0.7.5"} - org.xerial/sqlite-jdbc {:mvn/version "3.7.2"} - ring-logger-timbre/ring-logger-timbre {:mvn/version "0.7.6"} - ring/ring-jetty-adapter {:mvn/version "1.6.3"} - ring/ring-json {:mvn/version "0.5.0-beta1"} - slugger/slugger {:mvn/version "1.0.1"}} - - :aliases {:test {:extra-paths ["../../components/article/test" - "../../components/comment/test" - "../../components/profile/test" - "../../components/tag/test" - "../../components/user/test" - "../../bases/rest-api/test"] + :deps {poly/article {:local/root "../../components/article"} + poly/comment {:local/root "../../components/comment"} + poly/database {:local/root "../../components/database"} + poly/env {:local/root "../../components/env"} + poly/log {:local/root "../../components/log"} + poly/profile {:local/root "../../components/profile"} + poly/spec {:local/root "../../components/spec"} + poly/tag {:local/root "../../components/tag"} + poly/user {:local/root "../../components/user"} + poly/rest-api {:local/root "../../bases/rest-api"} + + org.clojure/clojure {:mvn/version "1.10.3"}} + + :aliases {:test {:extra-paths [] :extra-deps {org.clojure/test.check {:mvn/version "0.10.0-alpha3"}}} :aot {:extra-paths ["classes"] @@ -58,4 +28,10 @@ :uberjar {:extra-deps {uberdeps/uberdeps {:mvn/version "0.1.10"}} :main-opts ["-m" "uberdeps.uberjar" "--aliases" "aot" - "--main-class" "clojure.realworld.rest_api.main"]}}} + "--main-class" "clojure.realworld.rest_api.main"]} + + :ring {:extra-deps {furkan3ayraktar/polylith-clj-deps-ring {:git/url "https://github.com/furkan3ayraktar/polylith-clj-deps-ring.git" + :sha "7bb68846bb8a200a486a2886f1af95984538ec25" + :deps/root "projects/core"}} + + :main-opts ["-m" "polylith.clj-deps-ring.cli.main" "start"]}}} diff --git a/readme.md b/readme.md index ee25c33..0ba7c1e 100644 --- a/readme.md +++ b/readme.md @@ -339,7 +339,7 @@ Run the following command from the root directory to print out workspace informa This command will print an output like below. Here you can see that changed components are marked with a * symbol. Refer to the [Polylith tool documentation](https://github.com/polyfy/polylith/blob/master/doc/commands.md#info) for more detailed information about this command and other commands that Polylith provides. -![polylith-info](.media/readme/02_polylith_info.png) + ### Check workspace integrity In order to guarantee workspace integrity, which means all components refer to each other throgh their interfaces. @@ -388,7 +388,7 @@ You can achieve the same result with fewer steps once you have learned the comma Information about the passed/failed tests will be printed in the job's output. - api-test - Runs end-to-end API tests using a [Postman](https://www.postman.com) collection defined under the `` api-tests `` directory. - Before running the tests, start the backend service by executing the `` clojure -A:ring realworld-backend `` statement. + Before running the tests, start the backend service by executing the `` clojure -A:ring `` statement under `` projects/realworld-backend `` directory. - build-uberjar - This job creates an aot compiled uberjar for the realworld-backend project. Created artifact can be found in the artifacts section of this job's output. - mark-as-stable diff --git a/workspace.edn b/workspace.edn new file mode 100644 index 0000000..7693ae4 --- /dev/null +++ b/workspace.edn @@ -0,0 +1,10 @@ +{:top-namespace "clojure.realworld" + :interface-ns "interface" + :default-profile-name "default" + :compact-views #{} + :vcs {:name "git" + :auto-add true} + :tag-patterns {:stable "stable-*" + :release "v[0-9]*"} + :projects {"development" {:alias "dev"} + "realworld-backend" {:alias "rb"}}}