Sfoglia il codice sorgente

Merge pull request #1158 from logseq/refacotor/add-cljs-env

Refacotor/add cljs env
Tienson Qin 4 anni fa
parent
commit
d82555a6f9

+ 2 - 3
.github/workflows/build-stage.yml

@@ -37,12 +37,11 @@ jobs:
         run: yarn cache clean && yarn install --frozen-lockfile
 
       - name: Build Released-Web
-        run: yarn gulp:build && clojure -M:cljs release app  --config-merge '{:asset-path "${{env.asset-path}}"}'
+        run: yarn gulp:build && rm -Rf .shadow-cljs && ENV=staging clojure -M:cljs release app  --config-merge '{:asset-path "${{env.asset-path}}"}'
 
       - uses: jakejarvis/s3-sync-action@master
         with:
-            #args: --acl public-read --follow-symlinks --delete
-            args: --acl public-read --follow-symlinks
+            args: --acl public-read --follow-symlinks --delete
         env:
           AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
           AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}

+ 1 - 1
README.md

@@ -86,7 +86,7 @@ Open <http://localhost:3001>.
 ### 4. Build a release
 
 ``` bash
-yarn release
+yarn release 
 ```
 
 ### 5. Run tests

+ 7 - 3
deps.edn

@@ -1,4 +1,4 @@
-{:paths ["src/main"]
+{:paths ["src/main" "resources"]
  :deps
  {org.clojure/clojure         {:mvn/version "1.10.0"}
   cheshire/cheshire {:mvn/version "5.10.0"}
@@ -37,12 +37,16 @@
  :aliases {:cljs {:extra-paths ["src/dev-cljs/" "src/test/" "src/electron/"]
                   :extra-deps  {org.clojure/clojurescript   {:mvn/version "1.10.764"}
                                 org.clojure/tools.namespace {:mvn/version "0.2.11"}
-                                cider/cider-nrepl           {:mvn/version "0.25.5"}}
+                                cider/cider-nrepl           {:mvn/version "0.25.5"}
+                                aero/aero                   {:mvn/version "1.1.6"}
+                                mhuebert/shadow-env         {:mvn/version "0.1.6"}}
                   :main-opts ["-m" "shadow.cljs.devtools.cli"]}
            :test
            {:extra-paths ["src/test/"]
             :extra-deps  {org.clojure/clojurescript {:mvn/version "1.10.764"}
-                          org.clojure/test.check {:mvn/version "RELEASE"}}
+                          org.clojure/test.check {:mvn/version "RELEASE"}
+                          aero/aero                   {:mvn/version "1.1.6"}
+                          mhuebert/shadow-env         {:mvn/version "0.1.6"}}
             :main-opts   ["-m" "shadow.cljs.devtools.cli"]}
 
            :test-clj

+ 6 - 5
package.json

@@ -27,13 +27,14 @@
     "scripts": {
         "watch": "run-p gulp:build gulp:watch cljs:watch",
         "electron-watch": "run-p gulp:build gulp:watch cljs:electron-watch",
-        "release": "run-s gulp:build cljs:release",
+        "release": "ENV=prod run-s gulp:build cljs:release",
+        "release-staging": "ENV=staging run-s gulp:build cljs:release",
         "watch-app": "run-p gulp:watch cljs:watch-app",
-        "release-app": "run-s gulp:build cljs:release-app",
-        "release-publishing": "run-s gulp:build cljs:release-publishing",
-        "dev-release-app": "run-s gulp:build cljs:dev-release-app",
+        "release-app": "ENV=prod run-s gulp:build cljs:release-app",
+        "release-publishing": "ENV=prod run-s gulp:build cljs:release-publishing",
+        "dev-release-app": "ENV=prod run-s gulp:build cljs:dev-release-app",
         "dev-electron-app": "gulp electron",
-        "release-electron": "gulp build && gulp electronMaker",
+        "release-electron": "gulp build && ENV=prod gulp electronMaker",
         "debug-electron": "cd static/ && yarn electron:debug",
         "clean": "gulp clean",
         "test": "run-s cljs:test cljs:run-test",

+ 17 - 0
resources/config.edn

@@ -0,0 +1,17 @@
+{:runtime #profile {:dev :dev
+                    :staging :staging
+                    :test :test
+                    :prod :prod}
+ :website #profile {:dev "http://localhost:3000"
+                    :staging "https://staging.logseq.com"
+                    :prod "https://logseq.com"}
+ :api #profile {:dev "http://localhost:3000/api/v1/"
+                :staging "https://staging.logseq.com/api/v1/"
+                :prod "https://logseq.com/api/v1/"}
+ :asset-domain #profile {:dev ""
+                         :staging "https://d2mcfbcftfbnmt.cloudfront.net"
+                         :prod "https://assets.logseq.com"}
+ :github-app-name #profile {:dev "logseq-test"
+                            :staging "logseq-staging"
+                            :prod "logseq"}}
+

+ 6 - 3
shadow-cljs.edn

@@ -31,7 +31,8 @@
     :http-root    "public"
     :http-port    3001
     :watch-path   "static"
-    :preloads     [devtools.preload]}}
+    :preloads     [devtools.preload]}
+   :build-hooks [(shadow-env.core/hook)]}
 
   :electron {:target :node-script
              :output-to "static/electron.js"
@@ -44,7 +45,8 @@
   {:target :node-test
    :output-to "static/tests.js"
    :closure-defines {frontend.util/NODETEST true}
-   :devtools {:enabled false}}
+   :devtools {:enabled false}
+   :build-hooks [(shadow-env.core/hook)]}
 
   :publishing
   {:target :browser
@@ -70,4 +72,5 @@
    {:before-load frontend.core/stop
     ;; after live-reloading finishes call this function
     :after-load frontend.core/start
-    :preloads     [devtools.preload]}}}}
+    :preloads     [devtools.preload]}
+   :build-hooks [(shadow-env.core/hook)]}}}

+ 20 - 14
src/main/frontend/config.cljs

@@ -2,7 +2,8 @@
   (:require [clojure.set :as set]
             [clojure.string :as string]
             [frontend.state :as state]
-            [frontend.util :as util]))
+            [frontend.util :as util]
+            [frontend.env :as env]))
 
 (goog-define DEV-RELEASE false)
 (defonce dev-release? DEV-RELEASE)
@@ -13,17 +14,17 @@
 
 ;; :TODO: How to do this?
 ;; (defonce desktop? ^boolean goog.DESKTOP)
+(def test? (= :test (env/get-static :runtime)))
+(def staging? (= :staging (env/get-static :runtime)))
+(def prod? (= :prod (env/get-static :runtime)))
 
 (def app-name "logseq")
-(def website
-  (if dev?
-    "http://localhost:3000"
-    (util/format "https://%s.com" app-name)))
 
-(def api
-  (if dev?
-    "http://localhost:3000/api/v1/"
-    (str website "/api/v1/")))
+
+(def website (env/get-static :website))
+(def api (env/get-static :api))
+(def asset-domain (env/get-static :asset-domain))
+(def github-app-name (env/get-static :github-app-name))
 
 ;; change if you want to use your own domain instead of default asset.logseq.com
 (def asset-domain (util/format "https://asset.%s.com"
@@ -31,14 +32,19 @@
 
 (defn asset-uri
   [path]
-  (if (util/file-protocol?)
+  (cond
+    (util/file-protocol?)
     (string/replace path "/static/" "./")
-    (if dev? path
-        (str asset-domain path))))
 
-(goog-define GITHUB_APP_NAME "logseq-test")
+    dev? path
+
+    staging?
+    (if-let [branch (-> (state/get-me) :git-branch)]
+      (str asset-domain "/" branch path)
+      (str asset-domain path))
 
-(def github-app-name (if dev? GITHUB_APP_NAME "logseq"))
+    :else
+    (str asset-domain path)))
 
 (defn git-pull-secs
   []

+ 23 - 0
src/main/frontend/env.cljc

@@ -0,0 +1,23 @@
+(ns frontend.env
+  #?(:clj (:require [aero.core :as aero]
+                    [clojure.java.io :as io]
+                    [clojure.string :as str]))
+  (:refer-clojure :exclude [get])
+  (:require [shadow-env.core :as env]))
+
+#?(:clj
+   (defn read-env [build-state]
+     (let [aero-config {:profile (or (some->
+                                       (System/getenv "ENV")
+                                       (str/lower-case)
+                                       (keyword))
+                                     :dev)}
+           client-config (some-> (io/resource "config.edn")
+                           (aero/read-config aero-config))]
+       {:cljs client-config})))
+
+(env/link get `read-env)
+
+(defmacro get-static [& ks]
+  (let [ks (into [:shadow-env.core/cljs] ks)]
+    (clojure.core/get-in get ks)))