defclass 5 лет назад
Родитель
Сommit
073df06617
6 измененных файлов с 69 добавлено и 25 удалено
  1. 2 3
      .github/workflows/build-stage.yml
  2. 4 2
      deps.edn
  3. 17 0
      resources/config.edn
  4. 6 3
      shadow-cljs.edn
  5. 17 17
      src/main/frontend/config.cljs
  6. 23 0
      src/main/frontend/env.cljc

+ 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 }}

+ 4 - 2
deps.edn

@@ -1,4 +1,4 @@
-{:paths ["src/main"]
+{:paths ["src/main" "resources"]
  :deps
  {org.clojure/clojure         {:mvn/version "1.10.0"}
   rum/rum                     {:mvn/version "0.12.3"}
@@ -37,7 +37,9 @@
                                 thheller/shadow-cljs        {:mvn/version "2.8.81"}
                                 binaryage/devtools          {:mvn/version "1.0.2"}
                                 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/"]

+ 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,13 +31,15 @@
     :http-root    "public"
     :http-port    3001
     :watch-path   "static"
-    :preloads     [devtools.preload]}}
+    :preloads     [devtools.preload]}
+   :build-hooks [(shadow-env.core/hook)]}
 
   :test
   {: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
@@ -63,4 +65,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)]}}}

+ 17 - 17
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,29 +14,28 @@
 
 ;; :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 asset-domain (util/format "https://asset.%s.com"
-                               app-name))
+(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))
 
 (defn asset-uri
   [path]
-  (if dev? path
-      (str asset-domain path)))
+  (cond
+    dev? path
 
-(goog-define GITHUB_APP_NAME "logseq-test")
+    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)))