From 409ac3e428869bda9860c7b488df461b8ab40278 Mon Sep 17 00:00:00 2001 From: Ilshat Sultanov Date: Wed, 21 Sep 2022 00:36:11 +0500 Subject: [PATCH] fix(cli/fragments/clojurescript): code review improvements - add a post init note about installing `java` and `clojure` - add an example using the `greet` command - move some resources to the `clojurescript` template - change ports for `shadow-cljs` and `tauri` - update ci pipeline - fix code formatting --- .github/workflows/templates-test.yml | 7 ++- .scripts/generate-templates-matrix.js | 2 +- .../fragment-clojurescript/_cta_manifest_ | 4 +- .../fragment-clojurescript/package.json | 25 +++++++---- .../public}/cljs.svg | 0 .../fragment-clojurescript/public/index.html | 1 + .../fragment-clojurescript/shadow-cljs.edn | 4 +- .../src/main/clojure/app/core.cljs | 43 +++++++++++++++++-- packages/cli/node/README.md | 1 + packages/cli/src/template.rs | 12 ++++++ 10 files changed, 77 insertions(+), 22 deletions(-) rename packages/cli/fragments/{_assets_ => fragment-clojurescript/public}/cljs.svg (100%) diff --git a/.github/workflows/templates-test.yml b/.github/workflows/templates-test.yml index e305e726f6..b756dd9511 100644 --- a/.github/workflows/templates-test.yml +++ b/.github/workflows/templates-test.yml @@ -95,6 +95,9 @@ jobs: cargo install --locked trunk if: matrix.settings.template == 'yew' + - run: sudo apt install -y clojure + if: matrix.settings.template == 'clojurescript' + - name: download cli artifact uses: actions/download-artifact@v3 @@ -115,10 +118,6 @@ jobs: sudo apt-get update sudo apt-get install -y libgtk-3-dev webkit2gtk-4.0 libayatana-appindicator3-dev librsvg2-dev patchelf - - run: | - sudo apt install -y clojure - if: matrix.settings.template == 'clojurescript' - - run: ${{ matrix.settings.run_cmd }} tauri build -b none if: matrix.settings.manager != 'npm' working-directory: tauri-app diff --git a/.scripts/generate-templates-matrix.js b/.scripts/generate-templates-matrix.js index 2ac93091a1..baf2f14efc 100644 --- a/.scripts/generate-templates-matrix.js +++ b/.scripts/generate-templates-matrix.js @@ -16,7 +16,7 @@ const nodeJsTemplates = [ "next-ts", "preact", "preact-ts", - "clojurescript" + "clojurescript", ]; const matrixConfig = [ diff --git a/packages/cli/fragments/fragment-clojurescript/_cta_manifest_ b/packages/cli/fragments/fragment-clojurescript/_cta_manifest_ index 78871efc26..72386762a8 100644 --- a/packages/cli/fragments/fragment-clojurescript/_cta_manifest_ +++ b/packages/cli/fragments/fragment-clojurescript/_cta_manifest_ @@ -4,10 +4,8 @@ beforeDevCommand = {{pkg_manager_run_command}} dev beforeBuildCommand = {{pkg_manager_run_command}} build -devPath = http://localhost:3000 +devPath = http://localhost:1420 distDir = ../dist -withGlobalTauri = true [files] -cljs.svg = public/cljs.svg tauri.svg = public/tauri.svg diff --git a/packages/cli/fragments/fragment-clojurescript/package.json b/packages/cli/fragments/fragment-clojurescript/package.json index f2e8876f6a..eb6e5dc580 100644 --- a/packages/cli/fragments/fragment-clojurescript/package.json +++ b/packages/cli/fragments/fragment-clojurescript/package.json @@ -3,14 +3,23 @@ "private": true, "version": "0.0.0", "scripts": { - "shadow:watch": "npx shadow-cljs watch app test", - "shadow:build": "npx shadow-cljs release app", - "test:build": "npx shadow-cljs compile ci", - "test:run": "npx karma start karma.config.js --single-run", - "clean": "rm -rf ./public/js ./target", - "dev": "npm run clean && npm run shadow:watch", - "test": "npm run clean && npm run test:build && npm run test:run", - "build": "npm run clean && npm run shadow:build", + "assets:build": "cp ./src/style.css ./public/", + "preshadow:watch": "npm run assets:build", + "shadow:watch": "npm run shadow-cljs watch app test", + "preshadow:build": "npm run assets:build", + "shadow:build": "npm run shadow-cljs release app", + "preshadow:test": "npm run assets:build", + "shadow:test": "npm run shadow-cljs compile ci && npm run karma start karma.config.js --single-run", + "clean": "rm -rf ./public/js ./target ./dist", + "predev": "npm run clean", + "dev": "npm run shadow:watch", + "pretest": "npm run clean", + "test": "npm run shadow:test", + "prebuild": "npm run clean", + "build": "npm run shadow:build", + "postbuild": "cp -R ./public ./dist", + "karma": "karma", + "shadow-cljs": "shadow-cljs", "tauri": "tauri" }, "devDependencies": { diff --git a/packages/cli/fragments/_assets_/cljs.svg b/packages/cli/fragments/fragment-clojurescript/public/cljs.svg similarity index 100% rename from packages/cli/fragments/_assets_/cljs.svg rename to packages/cli/fragments/fragment-clojurescript/public/cljs.svg diff --git a/packages/cli/fragments/fragment-clojurescript/public/index.html b/packages/cli/fragments/fragment-clojurescript/public/index.html index 89c9738ae2..c6c7005f4e 100644 --- a/packages/cli/fragments/fragment-clojurescript/public/index.html +++ b/packages/cli/fragments/fragment-clojurescript/public/index.html @@ -3,6 +3,7 @@ + Tauri + ClojureScript diff --git a/packages/cli/fragments/fragment-clojurescript/shadow-cljs.edn b/packages/cli/fragments/fragment-clojurescript/shadow-cljs.edn index 38c2396b25..9d9ba17eba 100644 --- a/packages/cli/fragments/fragment-clojurescript/shadow-cljs.edn +++ b/packages/cli/fragments/fragment-clojurescript/shadow-cljs.edn @@ -2,8 +2,8 @@ :nrepl {:init-ns user} - :dev-http {3000 "public" - 3001 "target/test"} + :dev-http {1420 "public" + 1421 "target/test"} :build-defaults {:closure-defines {goog.DEBUG true} :compiler-options {:output-feature-set :es-next}} diff --git a/packages/cli/fragments/fragment-clojurescript/src/main/clojure/app/core.cljs b/packages/cli/fragments/fragment-clojurescript/src/main/clojure/app/core.cljs index 51b65b02e9..bb5eb47a4d 100644 --- a/packages/cli/fragments/fragment-clojurescript/src/main/clojure/app/core.cljs +++ b/packages/cli/fragments/fragment-clojurescript/src/main/clojure/app/core.cljs @@ -1,7 +1,9 @@ (ns app.core (:require - [goog.dom :as gdom] - [reagent.dom :as dom])) + ["@tauri-apps/api/tauri" :as tauri] + [goog.dom :as gdom] + [reagent.core :as r] + [reagent.dom :as dom])) (defn square @@ -9,13 +11,46 @@ (* x x)) +;; Learn more about Tauri commands at https://tauri.app/v1/guides/features/command + +(def root + (let [*name (r/atom "") + *message (r/atom "") + handle-input (fn [new-value] + (reset! *name new-value)) + greet! (fn [name] + (-> (.invoke tauri "greet" #js {:name name}) + (.then (fn [res] + (reset! *message res)))))] + (fn [] + [:div.container + [:h1 "Welcome to Tauri!"] + + [:div.row + [:a {:href "https://tauri.app" :target "_blank"} + [:img {:src "/tauri.svg" :class "logo tauri" :alt "Tauri logo"}]] + [:a {:href "https://clojurescript.org" :target "_blank"} + [:img {:src "/cljs.svg" :class "logo tauri" :alt "ClojureScript logo"}]]] + + [:p "Click on the Tauri, ClojureScript logos to learn more."] + + [:div.row + [:input {:type "text" + :id "greet-input" + :on-change #(handle-input (.. % -target -value)) + :placeholder "Enter a name..."}] + [:button {:type "button" :on-click #(greet! @*name)} "Greet"]] + + [:p @*message]]))) + + (defn mount-root "Mount root component." {:dev/after-load true} [] (some->> - (gdom/getElement "root") - (dom/render [:h1 "Welcome to Tauri!"]))) + (gdom/getElement "root") + (dom/render [root]))) (defn -main diff --git a/packages/cli/node/README.md b/packages/cli/node/README.md index cae27eb583..a4563d17d7 100644 --- a/packages/cli/node/README.md +++ b/packages/cli/node/README.md @@ -59,6 +59,7 @@ Currently supported template presets include: - `preact` - `preact-ts` - `angular` +- `clojurescript` You can use `.` for the project name to scaffold in the current directory. diff --git a/packages/cli/src/template.rs b/packages/cli/src/template.rs index 4d2d12dfa1..c492a4fc60 100644 --- a/packages/cli/src/template.rs +++ b/packages/cli/src/template.rs @@ -87,6 +87,18 @@ impl<'a> Template { BLUE = BLUE, ), ), + Template::ClojureScript => Some( + format!( + "{ITALIC}{DIM}You also need to install{DIMRESET} {YELLOW}java{WHITE} {DIM}(e.g. {DIMRESET}{BLUE}https://adoptium.net{WHITE}{DIM}) and{DIMRESET} {YELLOW}clojure{WHITE} {DIM}({DIMRESET}{BLUE}https://clojure.org/guides/install_clojure{WHITE}{DIM}){DIMRESET}{RESET}", + ITALIC = ITALIC, + DIM = DIM, + DIMRESET = DIMRESET, + YELLOW = YELLOW, + WHITE = WHITE, + BLUE = BLUE, + RESET = RESET + ), + ), _ => None, } }