From 1dbfcecea2ddabe34fe3cff62afe5d39efe9ecf6 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Mon, 21 Feb 2022 17:35:20 +0100 Subject: [PATCH 01/51] wip --- .clj-kondo/config.edn | 3 +- .github/workflows/main.yml | 5 + .gitignore | 2 +- nbb/package-lock.json | 347 +++++++++++++++++++++++++++++++++++++ nbb/package.json | 6 + nbb/playwright_tests.cljs | 87 ++++++++++ 6 files changed, 448 insertions(+), 2 deletions(-) create mode 100644 nbb/package-lock.json create mode 100644 nbb/package.json create mode 100644 nbb/playwright_tests.cljs diff --git a/.clj-kondo/config.edn b/.clj-kondo/config.edn index c642ac1b8..531c15aad 100644 --- a/.clj-kondo/config.edn +++ b/.clj-kondo/config.edn @@ -8,7 +8,8 @@ nextjournal.view/defview clojure.core/defn nextjournal.devcards/defcard clj-kondo.lint-as/def-catch-all taoensso.encore/defonce clojure.core/defonce - taoensso.encore/defalias clojure.core/def} + taoensso.encore/defalias clojure.core/def + promesa.core/let clojure.core/let} :skip-comments true :linters {:consistent-alias {:aliases {datomic.api datomic nextjournal.log log diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f3f8bdf74..16d1a67a7 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -102,3 +102,8 @@ jobs: state: 'success' sha: ${{github.event.pull_request.head.sha || github.sha}} target_url: https://snapshots.nextjournal.com/clerk/build/${{ github.sha }} + + - name: Run Playwright tests against static assets + run: | + cd nbb + npx nbb playwright_tests.cljs ${{ github.sha }} diff --git a/.gitignore b/.gitignore index 361e80bf1..c80b4b174 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,7 @@ .clerk/ .cpcache/ .lsp/ -/node_modules/ +node_modules /public/js/ /.shadow-cljs/ /target/ diff --git a/nbb/package-lock.json b/nbb/package-lock.json new file mode 100644 index 000000000..2e4fbfe0b --- /dev/null +++ b/nbb/package-lock.json @@ -0,0 +1,347 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@types/node": { + "version": "17.0.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.19.tgz", + "integrity": "sha512-PfeQhvcMR4cPFVuYfBN4ifG7p9c+Dlh3yUZR6k+5yQK7wX3gDgVxBly4/WkBRs9x4dmcy1TVl08SY67wwtEvmA==", + "optional": true + }, + "@types/yauzl": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", + "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "requires": { + "pend": "~1.2.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "jpeg-js": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz", + "integrity": "sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q==" + }, + "mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nbb": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/nbb/-/nbb-0.1.8.tgz", + "integrity": "sha512-VLJ30YcOaHBOZkLs6eRPXi4v8YYFt9d7AKKEXx+EW5k/bjEyPU4SUEDE/ZMIHSOnF2yFrjcdQvePEDYPed0kRA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "playwright": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.19.1.tgz", + "integrity": "sha512-h1iCJ1S2eAkZ67lZCmOxhRiT3OKa1JFGtyHLaZV30znqIjcsJLuyB/dmo78V3ajpMdz8iwxIb2xjpaSh1G+8UA==", + "requires": { + "playwright-core": "1.19.1" + }, + "dependencies": { + "playwright-core": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.19.1.tgz", + "integrity": "sha512-+ByjhWX39PlINVRXr4ef9Kle85mk5QzA2WLioCoMQc3bSUtZpLV1mbeUDtRp/bvFw6YDIEyptj4QvzzRTXN3vg==", + "requires": { + "commander": "8.3.0", + "debug": "4.3.3", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.0", + "jpeg-js": "0.4.3", + "mime": "3.0.0", + "pngjs": "6.0.0", + "progress": "2.0.3", + "proper-lockfile": "4.1.2", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "socks-proxy-agent": "6.1.1", + "stack-utils": "2.0.5", + "ws": "8.4.2", + "yauzl": "2.10.0", + "yazl": "2.5.1" + } + } + } + }, + "pngjs": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", + "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "requires": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + }, + "socks": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", + "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" + } + }, + "stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", + "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==" + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "requires": { + "buffer-crc32": "~0.2.3" + } + } + } +} diff --git a/nbb/package.json b/nbb/package.json new file mode 100644 index 000000000..c967d0768 --- /dev/null +++ b/nbb/package.json @@ -0,0 +1,6 @@ +{ + "dependencies": { + "nbb": "^0.1.8", + "playwright": "^1.19.1" + } +} diff --git a/nbb/playwright_tests.cljs b/nbb/playwright_tests.cljs new file mode 100644 index 000000000..22c88ee24 --- /dev/null +++ b/nbb/playwright_tests.cljs @@ -0,0 +1,87 @@ +(ns playwright-tests + (:require [cljs-bean.core :refer [bean]] + [clojure.string :as str] + [clojure.test :as t :refer [deftest is async use-fixtures]] + [promesa.core :as p])) + +(def sha (first *command-line-args*)) +(def index (str/replace "https://snapshots.nextjournal.com/clerk/build/{{sha}}/index.html" + "{{sha}}" sha)) + +(def chromium + (.-chromium (js/require "playwright"))) + +(def browser (atom nil)) + +(def default-launch-options + (clj->js {:args ["--no-sandbox"] + #_#_:headless false + #_#_:devtools true})) + + +(defn launch-browser [] + (p/let [b (.launch chromium #js {:headless false}) + _ (reset! browser b)])) + +(def close-browser true) + +(use-fixtures :once + {:before + (fn [] + (async done + (-> + (launch-browser) + (.finally done)))) + :after + (fn [] + (async done + (if close-browser + (p/let [_ (.close @browser)] + (done)) + (done))))}) + +(defn goto [page url] + (.goto page url #js{:waitUntil "networkidle"})) + +(defn sleep [ms] + (js/Promise. + (fn [resolve] + (js/setTimeout resolve ms)))) + +;; https://snapshots.nextjournal.com/clerk/build/549f9956870c69ef0951ca82d55a8e5ec2e49ed4/index.html + +(deftest index-page-test + (async done + (-> (p/let [page (.newPage @browser) + _ (goto page index) + elt (-> (.locator page "text=Clerk") + (.elementHandle #js {:timeout 1000}))] + (is elt)) + (.catch (fn [err] + (js/console.log err) + (is false))) + (.finally done)))) + +(defmethod t/report [:cljs.test/default :begin-test-var] [m] + (println "===" (-> m :var meta :name)) + (println)) + +(defn print-summary [] + (t/report (assoc (:report-counters (t/get-current-env)) :type :summary))) + +(defmethod t/report [:cljs.test/default :end-test-vars] [_] + (let [env (t/get-current-env) + counters (:report-counters env) + failures (:fail counters) + errors (:error counters)] + (when (or (pos? failures) + (pos? errors)) + (set! (.-exitCode js/process) 1)) + (print-summary))) + +(defn get-test-vars [] + (->> (ns-publics 'playwright-tests) + vals + (filter (comp :test meta)))) + +(t/test-vars (get-test-vars)) From 3e02617e70d556c2e04a90b96f066dedacc752f1 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Mon, 21 Feb 2022 18:24:13 +0100 Subject: [PATCH 02/51] wip --- .github/workflows/main.yml | 1 + nbb/playwright_tests.cljs | 25 +++++++++++++++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 16d1a67a7..643a28df8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -106,4 +106,5 @@ jobs: - name: Run Playwright tests against static assets run: | cd nbb + npm install npx nbb playwright_tests.cljs ${{ github.sha }} diff --git a/nbb/playwright_tests.cljs b/nbb/playwright_tests.cljs index 22c88ee24..a1d9b87e0 100644 --- a/nbb/playwright_tests.cljs +++ b/nbb/playwright_tests.cljs @@ -1,7 +1,7 @@ (ns playwright-tests - (:require [cljs-bean.core :refer [bean]] - [clojure.string :as str] + (:require [clojure.string :as str] [clojure.test :as t :refer [deftest is async use-fixtures]] + [nbb.core :refer [*file*]] [promesa.core :as p])) (def sha (first *command-line-args*)) @@ -54,7 +54,7 @@ (async done (-> (p/let [page (.newPage @browser) _ (goto page index) - elt (-> (.locator page "text=Clerk") + elt (-> (.locator page "h1:has-text(\"Clerk\")") (.elementHandle #js {:timeout 1000}))] (is elt)) (.catch (fn [err] @@ -84,4 +84,21 @@ vals (filter (comp :test meta)))) -(t/test-vars (get-test-vars)) +(defn -main [& _args] + (t/test-vars (get-test-vars))) + +(when (= *file* (:file (meta #'-main))) + (apply -main *command-line-args*)) + +(defmacro defp [name & body] + `(p/let [res (do ~@body)] + (def ~name res))) + +(comment + (launch-browser) + (defp p (.newPage @browser)) + (goto p "https://snapshots.nextjournal.com/clerk/build/549f9956870c69ef0951ca82d55a8e5ec2e49ed4/index.html") + (defp loc (.locator p "h1:has-text(\"Clerk\")")) + (defp elt (.elementHandle loc #js {:timeout 1000})) + elt + ) From 04260906693cebdc8e09be40e8bcb249ca7e0bab Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Mon, 21 Feb 2022 18:32:19 +0100 Subject: [PATCH 03/51] No headless in CI --- nbb/playwright_tests.cljs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nbb/playwright_tests.cljs b/nbb/playwright_tests.cljs index a1d9b87e0..e36a3cda9 100644 --- a/nbb/playwright_tests.cljs +++ b/nbb/playwright_tests.cljs @@ -18,9 +18,10 @@ #_#_:headless false #_#_:devtools true})) +(def headless true) (defn launch-browser [] - (p/let [b (.launch chromium #js {:headless false}) + (p/let [b (.launch chromium #js {:headless headless}) _ (reset! browser b)])) (def close-browser true) From cc01ff25a6ef8beede0512ee39b0aa311ad82fe9 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Mon, 21 Feb 2022 18:33:39 +0100 Subject: [PATCH 04/51] headless in CI --- nbb/playwright_tests.cljs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nbb/playwright_tests.cljs b/nbb/playwright_tests.cljs index e36a3cda9..e15830db1 100644 --- a/nbb/playwright_tests.cljs +++ b/nbb/playwright_tests.cljs @@ -18,7 +18,7 @@ #_#_:headless false #_#_:devtools true})) -(def headless true) +(def headless (.-CI js/process.env)) (defn launch-browser [] (p/let [b (.launch chromium #js {:headless headless}) @@ -101,5 +101,4 @@ (goto p "https://snapshots.nextjournal.com/clerk/build/549f9956870c69ef0951ca82d55a8e5ec2e49ed4/index.html") (defp loc (.locator p "h1:has-text(\"Clerk\")")) (defp elt (.elementHandle loc #js {:timeout 1000})) - elt ) From be87fcd34aafe3a4e3b4026b969e93af45ce2e29 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Mon, 21 Feb 2022 18:41:07 +0100 Subject: [PATCH 05/51] Fix test --- nbb/playwright_tests.cljs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/nbb/playwright_tests.cljs b/nbb/playwright_tests.cljs index e15830db1..d777b9654 100644 --- a/nbb/playwright_tests.cljs +++ b/nbb/playwright_tests.cljs @@ -18,7 +18,7 @@ #_#_:headless false #_#_:devtools true})) -(def headless (.-CI js/process.env)) +(def headless (boolean (.-CI js/process.env))) (defn launch-browser [] (p/let [b (.launch chromium #js {:headless headless}) @@ -32,6 +32,7 @@ (async done (-> (launch-browser) + (.catch js/console.log) (.finally done)))) :after (fn [] @@ -56,7 +57,7 @@ (-> (p/let [page (.newPage @browser) _ (goto page index) elt (-> (.locator page "h1:has-text(\"Clerk\")") - (.elementHandle #js {:timeout 1000}))] + (.elementHandle #js {:timeout 5000}))] (is elt)) (.catch (fn [err] (js/console.log err) From e1f023bf2e779d22d0182ebe753052c9a7d59f20 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Mon, 21 Feb 2022 21:42:16 +0100 Subject: [PATCH 06/51] wip --- nbb/playwright_tests.cljs | 49 ++++++++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git a/nbb/playwright_tests.cljs b/nbb/playwright_tests.cljs index d777b9654..8b1f82b9b 100644 --- a/nbb/playwright_tests.cljs +++ b/nbb/playwright_tests.cljs @@ -52,13 +52,33 @@ ;; https://snapshots.nextjournal.com/clerk/build/549f9956870c69ef0951ca82d55a8e5ec2e49ed4/index.html +(defn test-notebook [page link] + (println "Visiting" link) + (p/let [_ (goto page link) + _t (-> (.locator page "div.viewer") + (.allInnerTexts))] + (is true))) + +(def console-errors (atom [])) + (deftest index-page-test (async done (-> (p/let [page (.newPage @browser) + _ (.on page "console" + (fn [msg] + (when (= "error" (.type msg)) + (swap! console-errors conj msg)))) _ (goto page index) elt (-> (.locator page "h1:has-text(\"Clerk\")") - (.elementHandle #js {:timeout 5000}))] - (is elt)) + (.elementHandle #js {:timeout 5000})) + _ (is elt) + links (-> (.locator page "text=/.*\\.clj$/i") + (.allInnerTexts)) + links (map (fn [link] + (str index "#/" link)) links)] + ;; TODO: this isn't correct yet + (p/all (map #(test-notebook page %) links)) + (is (zero? (count @console-errors)))) (.catch (fn [err] (js/console.log err) (is false))) @@ -89,17 +109,28 @@ (defn -main [& _args] (t/test-vars (get-test-vars))) -(when (= *file* (:file (meta #'-main))) - (apply -main *command-line-args*)) - (defmacro defp [name & body] - `(p/let [res (do ~@body)] - (def ~name res))) + `(-> (p/let [res (do ~@body)] + (def ~name res)) + (.catch js/console.log))) (comment (launch-browser) (defp p (.newPage @browser)) + (.on p "console" (fn [msg] + (when (= "error" (.type msg)) + (swap! console-errors conj msg)))) + (goto p "https://dude.devx") (goto p "https://snapshots.nextjournal.com/clerk/build/549f9956870c69ef0951ca82d55a8e5ec2e49ed4/index.html") - (defp loc (.locator p "h1:has-text(\"Clerk\")")) - (defp elt (.elementHandle loc #js {:timeout 1000})) + (defp loc (.locator p "text=/.*\\.clj$/i")) + (defp elt (.elementHandles loc #js {:timeout 1000})) + + + (require '[cljs-bean.core :refer [bean]]) + (require '[cljs.pprint :as pp]) + (pp/pprint (bean m :recursive true)) + (.type m) + (require '[applied-science.js-interop :as j]) + (j/lookup m) + (js/console.log m) ) From f8ced61ac8b440eadfdb3824a6e94a742a005369 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 22 Feb 2022 12:08:22 +0100 Subject: [PATCH 07/51] Test for zero console errors --- nbb/playwright_tests.cljs | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/nbb/playwright_tests.cljs b/nbb/playwright_tests.cljs index 8b1f82b9b..ffaedb859 100644 --- a/nbb/playwright_tests.cljs +++ b/nbb/playwright_tests.cljs @@ -61,12 +61,17 @@ (def console-errors (atom [])) +(defn preduce [f coll] + (reduce #(p/then %1 (fn [_] (f %2))) (p/promise nil nil) coll)) + (deftest index-page-test (async done (-> (p/let [page (.newPage @browser) _ (.on page "console" (fn [msg] - (when (= "error" (.type msg)) + (when (and (= "error" (.type msg)) + (not (str/ends-with? + (.-url (.location msg)) "favicon.ico"))) (swap! console-errors conj msg)))) _ (goto page index) elt (-> (.locator page "h1:has-text(\"Clerk\")") @@ -76,13 +81,18 @@ (.allInnerTexts)) links (map (fn [link] (str index "#/" link)) links)] - ;; TODO: this isn't correct yet - (p/all (map #(test-notebook page %) links)) - (is (zero? (count @console-errors)))) + (preduce #(test-notebook page %) links) + (is (zero? (count @console-errors)) + (str/join "\n" (map (fn [msg] + [(.text msg) (.location msg)]) + @console-errors)))) (.catch (fn [err] (js/console.log err) (is false))) - (.finally done)))) + (.finally + (fn [] + (p/let [#_#__ (sleep 15000)] + (done))))))) (defmethod t/report [:cljs.test/default :begin-test-var] [m] (println "===" (-> m :var meta :name)) From 1037afd81e09e69126f2ed624489f99d5c4b9d87 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 22 Feb 2022 13:05:12 +0100 Subject: [PATCH 08/51] wip --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 643a28df8..9d8815952 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -108,3 +108,4 @@ jobs: cd nbb npm install npx nbb playwright_tests.cljs ${{ github.sha }} + echo 'Success!' From f8cb2405fb138db9860e1ce0444eaa7cd238fad5 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 22 Feb 2022 13:07:28 +0100 Subject: [PATCH 09/51] Use -m invocation --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9d8815952..6e8477c59 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -107,5 +107,5 @@ jobs: run: | cd nbb npm install - npx nbb playwright_tests.cljs ${{ github.sha }} + npx nbb -m playwright-tests ${{ github.sha }} echo 'Success!' From 459af2cd82c702e8bab30e441722ba7f3e3cb5ee Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 22 Feb 2022 18:20:51 +0100 Subject: [PATCH 10/51] Run ui tests via bb --- .github/workflows/main.yml | 11 +++++++---- bb.edn | 17 +++++++++++++---- deps.edn | 3 ++- nbb/package-lock.json | 6 +++--- nbb/package.json | 2 +- nbb/playwright_tests.cljs | 5 +---- 6 files changed, 27 insertions(+), 17 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6e8477c59..76a5dd56d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -63,6 +63,11 @@ jobs: with: cli: '1.10.3.943' + - name: Setup Babashka + uses: turtlequeue/setup-babashka@v1.3.0 + with: + babashka-version: 0.7.5 + - name: ๐Ÿ— maven cache uses: actions/cache@v2 with: @@ -105,7 +110,5 @@ jobs: - name: Run Playwright tests against static assets run: | - cd nbb - npm install - npx nbb -m playwright-tests ${{ github.sha }} - echo 'Success!' + bb test:static-app ${{ github.sha }} + diff --git a/bb.edn b/bb.edn index 539252d08..f0ca9ffd9 100644 --- a/bb.edn +++ b/bb.edn @@ -1,8 +1,11 @@ -{:tasks {:requires ([clojure.edn :as edn] +{:min-bb-version "0.7.5" + :paths ["bb"] + :tasks {:requires ([clojure.edn :as edn] [clojure.string :as str] [babashka.deps :as deps] [babashka.fs :as fs] - [babashka.process :as p]) + [babashka.process :as p] + [utils :as u]) :init (defn viewer-css-path [] (let [cp (str/trim (with-out-str (deps/clojure ["-A:sci" "-Spath"])))] (str/trim (:out (shell {:out :string} (str "bb -cp " cp " -e '(println (.getPath (clojure.java.io/resource \"css/viewer.css\")))'")))))) @@ -27,6 +30,13 @@ :depends [release:js release:css] :task (clojure "-X:demo nextjournal.clerk/build-static-app!")} + test:static-app {:doc "Run UI tests for current SHA. Provide SHA as command line arg." + :task (do + (shell {:dir "nbb"} "yarn install") + (apply shell {:dir "nbb"} + "npx nbb -m playwright-tests" + (or *command-line-args* [(u/latest-sha)])))} + release:jar {:doc "Builds the jar" :task (let [rev-count (-> (p/process ["git" "rev-list" "HEAD" "--count"] {:out :string}) p/check :out str/trim Integer/parseInt) version (format "0.5.%d" (inc rev-count))] @@ -47,5 +57,4 @@ -dev {:depends [watch:cljs copy-viewer-css]} dev {:doc "Start app in dev mode, compiles cljs and css" - :task (run '-dev {:parallel true})}} - :min-bb-version "0.5.1"} + :task (run '-dev {:parallel true})}}} diff --git a/deps.edn b/deps.edn index 4e8378f7e..811b8b8f3 100644 --- a/deps.edn +++ b/deps.edn @@ -3,7 +3,8 @@ org.clojure/java.classpath {:mvn/version "1.0.0"} org.clojure/tools.analyzer.jvm {:mvn/version "1.1.0"} org.clojure/tools.deps.alpha {:mvn/version "0.11.905"} - babashka/fs {:mvn/version "0.1.2"} + babashka/fs {:git/url "https://gitghub.com/babashka/fs" + :git/sha "47f5642b35db00f6bb70d2242e58dd91a00abfab"} borkdude/edamame {:mvn/version "0.0.11"} weavejester/dependency {:mvn/version "0.2.1"} diff --git a/nbb/package-lock.json b/nbb/package-lock.json index 2e4fbfe0b..d621c64a0 100644 --- a/nbb/package-lock.json +++ b/nbb/package-lock.json @@ -177,9 +177,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "nbb": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/nbb/-/nbb-0.1.8.tgz", - "integrity": "sha512-VLJ30YcOaHBOZkLs6eRPXi4v8YYFt9d7AKKEXx+EW5k/bjEyPU4SUEDE/ZMIHSOnF2yFrjcdQvePEDYPed0kRA==" + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/nbb/-/nbb-0.1.9.tgz", + "integrity": "sha512-HwRDhmfMnnuLZdOUMH7V9NzNr9eDz0vvEADoAHX6DSf9K0Lo038ro38R3lZ+2u7TfDGPTpjxh24s7lIQoylvjQ==" }, "once": { "version": "1.4.0", diff --git a/nbb/package.json b/nbb/package.json index c967d0768..0416287d3 100644 --- a/nbb/package.json +++ b/nbb/package.json @@ -1,6 +1,6 @@ { "dependencies": { - "nbb": "^0.1.8", + "nbb": "^0.1.9", "playwright": "^1.19.1" } } diff --git a/nbb/playwright_tests.cljs b/nbb/playwright_tests.cljs index ffaedb859..13dc0c25e 100644 --- a/nbb/playwright_tests.cljs +++ b/nbb/playwright_tests.cljs @@ -61,9 +61,6 @@ (def console-errors (atom [])) -(defn preduce [f coll] - (reduce #(p/then %1 (fn [_] (f %2))) (p/promise nil nil) coll)) - (deftest index-page-test (async done (-> (p/let [page (.newPage @browser) @@ -81,7 +78,7 @@ (.allInnerTexts)) links (map (fn [link] (str index "#/" link)) links)] - (preduce #(test-notebook page %) links) + (p/run! #(test-notebook page %) links) (is (zero? (count @console-errors)) (str/join "\n" (map (fn [msg] [(.text msg) (.location msg)]) From 155c923d1b2153e596198914be6daf797762b678 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 22 Feb 2022 18:21:02 +0100 Subject: [PATCH 11/51] Add bb dir --- bb/utils.clj | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 bb/utils.clj diff --git a/bb/utils.clj b/bb/utils.clj new file mode 100644 index 000000000..58a771626 --- /dev/null +++ b/bb/utils.clj @@ -0,0 +1,6 @@ +(ns utils + (:require [babashka.process :refer [sh]] + [clojure.string :as str])) + +(defn latest-sha [] + (str/trim (:out (sh "git rev-parse HEAD")))) From 75d47146d09598c07bcd49d612887a5a3809b46e Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 22 Feb 2022 18:23:46 +0100 Subject: [PATCH 12/51] Multitasking is hard --- deps.edn | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/deps.edn b/deps.edn index 811b8b8f3..4e8378f7e 100644 --- a/deps.edn +++ b/deps.edn @@ -3,8 +3,7 @@ org.clojure/java.classpath {:mvn/version "1.0.0"} org.clojure/tools.analyzer.jvm {:mvn/version "1.1.0"} org.clojure/tools.deps.alpha {:mvn/version "0.11.905"} - babashka/fs {:git/url "https://gitghub.com/babashka/fs" - :git/sha "47f5642b35db00f6bb70d2242e58dd91a00abfab"} + babashka/fs {:mvn/version "0.1.2"} borkdude/edamame {:mvn/version "0.0.11"} weavejester/dependency {:mvn/version "0.2.1"} From 923325054c49fe4fe3fae758fba05a9bfbbd4cf3 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 22 Feb 2022 18:31:00 +0100 Subject: [PATCH 13/51] dude From 3b679de99fd1be5bbb5c0f6719141fc1c162a687 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 22 Feb 2022 18:34:32 +0100 Subject: [PATCH 14/51] dude1 From 4f2448b3733af474e18aa144cbc8a133dcca270b Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 22 Feb 2022 19:27:13 +0100 Subject: [PATCH 15/51] dude1 From d053a664e246cc4fb8162af284eba5a82a17dba6 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 22 Feb 2022 19:33:33 +0100 Subject: [PATCH 16/51] solve bitrot --- .github/workflows/main.yml | 2 +- bb.edn | 7 +++++-- src/nextjournal/clerk/config.clj | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 76a5dd56d..32f7d3c75 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -85,7 +85,7 @@ jobs: key: ${{ runner.os }}-clerk-cache - name: ๐Ÿ— Build Clerk Static App with default Notebooks - run: clojure -X:demo nextjournal.clerk/build-static-app! :git/sha '"${{ github.sha }}"' :git/url '"https://github.com/nextjournal/clerk"' + run: bb build:static-app "${{ github.sha }}" - name: ๐Ÿ” Google Auth uses: google-github-actions/auth@v0 diff --git a/bb.edn b/bb.edn index f0ca9ffd9..f1610ca47 100644 --- a/bb.edn +++ b/bb.edn @@ -27,8 +27,11 @@ :depends [yarn-install]} build:static-app {:doc "Builds a static app with default notebooks" - :depends [release:js release:css] - :task (clojure "-X:demo nextjournal.clerk/build-static-app!")} + :depends [release:js] + :task (clojure "-X:demo nextjournal.clerk/build-static-app!" + {:git/sha (or (first *command-line-args*) + (u/latest-sha)) + :git/url "https://github.com/nextjournal/clerk"})} test:static-app {:doc "Run UI tests for current SHA. Provide SHA as command line arg." :task (do diff --git a/src/nextjournal/clerk/config.clj b/src/nextjournal/clerk/config.clj index 6a9e28c04..ce514f9e6 100644 --- a/src/nextjournal/clerk/config.clj +++ b/src/nextjournal/clerk/config.clj @@ -10,7 +10,7 @@ (not= "false" prop))) (def default-resource-manifest - {"/js/viewer.js" "https://storage.googleapis.com/nextjournal-cas-eu/data/8VwKauX6JACEP3K6ahNmP5p1w7rWdhKzeGXCDrHMnJiVrUxHVxcm3Xj84K2r3fcAKWxMQKzqoFe92osgFEHCuKCtZC"}) + {"/js/viewer.js" "https://storage.googleapis.com/nextjournal-cas-eu/data/8Vxcom3udwT7gVgFSWupPQQY7E7ggeRJw2DbMXZzPmqxMJLDyueBUaSGRQcwwULUuWNmSmxjafMN2dWvczHYi3YC4S"}) (def resource-manifest-from-props (when-let [prop (System/getProperty "clerk.resource_manifest")] From c7b2f721b7ff2c8a64c7b4f8b28b29529f46355e Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 22 Feb 2022 19:42:30 +0100 Subject: [PATCH 17/51] Revert "solve bitrot" This reverts commit d053a664e246cc4fb8162af284eba5a82a17dba6. --- .github/workflows/main.yml | 2 +- bb.edn | 7 ++----- src/nextjournal/clerk/config.clj | 2 +- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 32f7d3c75..76a5dd56d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -85,7 +85,7 @@ jobs: key: ${{ runner.os }}-clerk-cache - name: ๐Ÿ— Build Clerk Static App with default Notebooks - run: bb build:static-app "${{ github.sha }}" + run: clojure -X:demo nextjournal.clerk/build-static-app! :git/sha '"${{ github.sha }}"' :git/url '"https://github.com/nextjournal/clerk"' - name: ๐Ÿ” Google Auth uses: google-github-actions/auth@v0 diff --git a/bb.edn b/bb.edn index f1610ca47..f0ca9ffd9 100644 --- a/bb.edn +++ b/bb.edn @@ -27,11 +27,8 @@ :depends [yarn-install]} build:static-app {:doc "Builds a static app with default notebooks" - :depends [release:js] - :task (clojure "-X:demo nextjournal.clerk/build-static-app!" - {:git/sha (or (first *command-line-args*) - (u/latest-sha)) - :git/url "https://github.com/nextjournal/clerk"})} + :depends [release:js release:css] + :task (clojure "-X:demo nextjournal.clerk/build-static-app!")} test:static-app {:doc "Run UI tests for current SHA. Provide SHA as command line arg." :task (do diff --git a/src/nextjournal/clerk/config.clj b/src/nextjournal/clerk/config.clj index ce514f9e6..6a9e28c04 100644 --- a/src/nextjournal/clerk/config.clj +++ b/src/nextjournal/clerk/config.clj @@ -10,7 +10,7 @@ (not= "false" prop))) (def default-resource-manifest - {"/js/viewer.js" "https://storage.googleapis.com/nextjournal-cas-eu/data/8Vxcom3udwT7gVgFSWupPQQY7E7ggeRJw2DbMXZzPmqxMJLDyueBUaSGRQcwwULUuWNmSmxjafMN2dWvczHYi3YC4S"}) + {"/js/viewer.js" "https://storage.googleapis.com/nextjournal-cas-eu/data/8VwKauX6JACEP3K6ahNmP5p1w7rWdhKzeGXCDrHMnJiVrUxHVxcm3Xj84K2r3fcAKWxMQKzqoFe92osgFEHCuKCtZC"}) (def resource-manifest-from-props (when-let [prop (System/getProperty "clerk.resource_manifest")] From 7c858c7b43e7650561dc91b0641384040a30f636 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 1 Mar 2022 11:29:56 +0100 Subject: [PATCH 18/51] move ui tests to separate step --- .github/workflows/main.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 76a5dd56d..4ffb076cc 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -108,6 +108,9 @@ jobs: sha: ${{github.event.pull_request.head.sha || github.sha}} target_url: https://snapshots.nextjournal.com/clerk/build/${{ github.sha }} + ui-tests: + runs-on: ubuntu-latest + steps: - name: Run Playwright tests against static assets run: | bb test:static-app ${{ github.sha }} From eb3f2935fcfd1c19aab413440b52a89268e0c83a Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 1 Mar 2022 11:34:09 +0100 Subject: [PATCH 19/51] wip --- .github/workflows/main.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4ffb076cc..44d202174 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -110,7 +110,13 @@ jobs: ui-tests: runs-on: ubuntu-latest + steps: + - name: Setup Babashka + uses: turtlequeue/setup-babashka@v1.3.0 + with: + babashka-version: 0.7.5 + - name: Run Playwright tests against static assets run: | bb test:static-app ${{ github.sha }} From 5a86f7228b9850da6088076aec92230213bba597 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 1 Mar 2022 11:37:35 +0100 Subject: [PATCH 20/51] wip --- .github/workflows/main.yml | 1 + bb.edn | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 44d202174..6408408c4 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -119,5 +119,6 @@ jobs: - name: Run Playwright tests against static assets run: | + bb --version bb test:static-app ${{ github.sha }} diff --git a/bb.edn b/bb.edn index f0ca9ffd9..4045f754c 100644 --- a/bb.edn +++ b/bb.edn @@ -27,7 +27,7 @@ :depends [yarn-install]} build:static-app {:doc "Builds a static app with default notebooks" - :depends [release:js release:css] + :depends [release:js] :task (clojure "-X:demo nextjournal.clerk/build-static-app!")} test:static-app {:doc "Run UI tests for current SHA. Provide SHA as command line arg." From e97463453e51b853670fc77bd0e7358f19e42183 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 1 Mar 2022 11:39:46 +0100 Subject: [PATCH 21/51] wip --- .github/workflows/main.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6408408c4..54f64d3aa 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -109,9 +109,14 @@ jobs: target_url: https://snapshots.nextjournal.com/clerk/build/${{ github.sha }} ui-tests: + needs: static-build runs-on: ubuntu-latest steps: + - uses: actions/checkout@v2 + with: + fetch_depth: 0 + - name: Setup Babashka uses: turtlequeue/setup-babashka@v1.3.0 with: From bcb6337fa378393cac7bce233b3bf7e27eee4855 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 1 Mar 2022 11:47:04 +0100 Subject: [PATCH 22/51] use yarn instead of npx --- bb.edn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bb.edn b/bb.edn index 4045f754c..fd5dc866e 100644 --- a/bb.edn +++ b/bb.edn @@ -34,7 +34,7 @@ :task (do (shell {:dir "nbb"} "yarn install") (apply shell {:dir "nbb"} - "npx nbb -m playwright-tests" + "yarn nbb -m playwright-tests" (or *command-line-args* [(u/latest-sha)])))} release:jar {:doc "Builds the jar" From bee6aa1bde9dfe88828171b1217e1c596d402ad9 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 1 Mar 2022 11:52:13 +0100 Subject: [PATCH 23/51] delete package lock json --- nbb/package-lock.json | 347 ------------------------------------------ 1 file changed, 347 deletions(-) delete mode 100644 nbb/package-lock.json diff --git a/nbb/package-lock.json b/nbb/package-lock.json deleted file mode 100644 index d621c64a0..000000000 --- a/nbb/package-lock.json +++ /dev/null @@ -1,347 +0,0 @@ -{ - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "@types/node": { - "version": "17.0.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.19.tgz", - "integrity": "sha512-PfeQhvcMR4cPFVuYfBN4ifG7p9c+Dlh3yUZR6k+5yQK7wX3gDgVxBly4/WkBRs9x4dmcy1TVl08SY67wwtEvmA==", - "optional": true - }, - "@types/yauzl": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", - "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", - "optional": true, - "requires": { - "@types/node": "*" - } - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - }, - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "requires": { - "ms": "2.1.2" - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "requires": { - "pend": "~1.2.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "jpeg-js": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz", - "integrity": "sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q==" - }, - "mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "nbb": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/nbb/-/nbb-0.1.9.tgz", - "integrity": "sha512-HwRDhmfMnnuLZdOUMH7V9NzNr9eDz0vvEADoAHX6DSf9K0Lo038ro38R3lZ+2u7TfDGPTpjxh24s7lIQoylvjQ==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" - }, - "playwright": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.19.1.tgz", - "integrity": "sha512-h1iCJ1S2eAkZ67lZCmOxhRiT3OKa1JFGtyHLaZV30znqIjcsJLuyB/dmo78V3ajpMdz8iwxIb2xjpaSh1G+8UA==", - "requires": { - "playwright-core": "1.19.1" - }, - "dependencies": { - "playwright-core": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.19.1.tgz", - "integrity": "sha512-+ByjhWX39PlINVRXr4ef9Kle85mk5QzA2WLioCoMQc3bSUtZpLV1mbeUDtRp/bvFw6YDIEyptj4QvzzRTXN3vg==", - "requires": { - "commander": "8.3.0", - "debug": "4.3.3", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.0", - "jpeg-js": "0.4.3", - "mime": "3.0.0", - "pngjs": "6.0.0", - "progress": "2.0.3", - "proper-lockfile": "4.1.2", - "proxy-from-env": "1.1.0", - "rimraf": "3.0.2", - "socks-proxy-agent": "6.1.1", - "stack-utils": "2.0.5", - "ws": "8.4.2", - "yauzl": "2.10.0", - "yazl": "2.5.1" - } - } - } - }, - "pngjs": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", - "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==" - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - }, - "proper-lockfile": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", - "requires": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" - } - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" - }, - "socks": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", - "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", - "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", - "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" - } - }, - "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "requires": { - "escape-string-regexp": "^2.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "ws": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", - "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==" - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "yazl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", - "requires": { - "buffer-crc32": "~0.2.3" - } - } - } -} From bc2e5c10aa56e62d9fdcae5258c3f70fd1767d04 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 1 Mar 2022 12:30:15 +0100 Subject: [PATCH 24/51] increase timeout --- .github/workflows/main.yml | 7 +++---- nbb/playwright_tests.cljs | 13 +------------ 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 54f64d3aa..66882253d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v2 with: - fetch_depth: 0 + fetch-depth: 0 - name: ๐Ÿ”ง Install java uses: actions/setup-java@v1 @@ -51,7 +51,7 @@ jobs: steps: - uses: actions/checkout@v2 with: - fetch_depth: 0 + fetch-depth: 0 - name: ๐Ÿ”ง Install java uses: actions/setup-java@v1 @@ -115,7 +115,7 @@ jobs: steps: - uses: actions/checkout@v2 with: - fetch_depth: 0 + fetch-depth: 0 - name: Setup Babashka uses: turtlequeue/setup-babashka@v1.3.0 @@ -124,6 +124,5 @@ jobs: - name: Run Playwright tests against static assets run: | - bb --version bb test:static-app ${{ github.sha }} diff --git a/nbb/playwright_tests.cljs b/nbb/playwright_tests.cljs index 13dc0c25e..393819583 100644 --- a/nbb/playwright_tests.cljs +++ b/nbb/playwright_tests.cljs @@ -1,7 +1,6 @@ (ns playwright-tests (:require [clojure.string :as str] [clojure.test :as t :refer [deftest is async use-fixtures]] - [nbb.core :refer [*file*]] [promesa.core :as p])) (def sha (first *command-line-args*)) @@ -72,7 +71,7 @@ (swap! console-errors conj msg)))) _ (goto page index) elt (-> (.locator page "h1:has-text(\"Clerk\")") - (.elementHandle #js {:timeout 5000})) + (.elementHandle #js {:timeout 10000})) _ (is elt) links (-> (.locator page "text=/.*\\.clj$/i") (.allInnerTexts)) @@ -127,17 +126,7 @@ (.on p "console" (fn [msg] (when (= "error" (.type msg)) (swap! console-errors conj msg)))) - (goto p "https://dude.devx") (goto p "https://snapshots.nextjournal.com/clerk/build/549f9956870c69ef0951ca82d55a8e5ec2e49ed4/index.html") (defp loc (.locator p "text=/.*\\.clj$/i")) (defp elt (.elementHandles loc #js {:timeout 1000})) - - - (require '[cljs-bean.core :refer [bean]]) - (require '[cljs.pprint :as pp]) - (pp/pprint (bean m :recursive true)) - (.type m) - (require '[applied-science.js-interop :as j]) - (j/lookup m) - (js/console.log m) ) From ce47b258c27d4e2d5a441033cd4ffe0958b296aa Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 1 Mar 2022 12:32:40 +0100 Subject: [PATCH 25/51] weird --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 66882253d..2e3268774 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -21,6 +21,7 @@ jobs: - uses: actions/checkout@v2 with: fetch-depth: 0 + fetch_depth: 0 - name: ๐Ÿ”ง Install java uses: actions/setup-java@v1 From 15d8fc5063400135bcdd98b908171227b7d9575e Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 1 Mar 2022 12:35:28 +0100 Subject: [PATCH 26/51] remove bb dir --- bb.edn | 16 +++++++++------- bb/utils.clj | 6 ------ ui_tests/.nrepl-port | 1 + {nbb => ui_tests}/package.json | 0 {nbb => ui_tests}/playwright_tests.cljs | 0 5 files changed, 10 insertions(+), 13 deletions(-) delete mode 100644 bb/utils.clj create mode 100644 ui_tests/.nrepl-port rename {nbb => ui_tests}/package.json (100%) rename {nbb => ui_tests}/playwright_tests.cljs (100%) diff --git a/bb.edn b/bb.edn index fd5dc866e..497033eaf 100644 --- a/bb.edn +++ b/bb.edn @@ -4,12 +4,14 @@ [clojure.string :as str] [babashka.deps :as deps] [babashka.fs :as fs] - [babashka.process :as p] - [utils :as u]) - :init (defn viewer-css-path [] - (let [cp (str/trim (with-out-str (deps/clojure ["-A:sci" "-Spath"])))] - (str/trim (:out (shell {:out :string} (str "bb -cp " cp " -e '(println (.getPath (clojure.java.io/resource \"css/viewer.css\")))'")))))) + [babashka.process :as p]) + :init (do + (defn viewer-css-path [] + (let [cp (str/trim (with-out-str (deps/clojure ["-A:sci" "-Spath"])))] + (str/trim (:out (shell {:out :string} (str "bb -cp " cp " -e '(println (.getPath (clojure.java.io/resource \"css/viewer.css\")))'")))))) + (defn latest-sha [] + (str/trim (:out (sh "git rev-parse HEAD"))))) print-viewer-css {:task (println (viewer-css-path))} copy-viewer-css {:task (fs/copy (viewer-css-path) "resources/stylesheets/viewer.css" #{:replace-existing})} @@ -33,9 +35,9 @@ test:static-app {:doc "Run UI tests for current SHA. Provide SHA as command line arg." :task (do (shell {:dir "nbb"} "yarn install") - (apply shell {:dir "nbb"} + (apply shell {:dir "ui_tests"} "yarn nbb -m playwright-tests" - (or *command-line-args* [(u/latest-sha)])))} + (or *command-line-args* [(latest-sha)])))} release:jar {:doc "Builds the jar" :task (let [rev-count (-> (p/process ["git" "rev-list" "HEAD" "--count"] {:out :string}) p/check :out str/trim Integer/parseInt) diff --git a/bb/utils.clj b/bb/utils.clj deleted file mode 100644 index 58a771626..000000000 --- a/bb/utils.clj +++ /dev/null @@ -1,6 +0,0 @@ -(ns utils - (:require [babashka.process :refer [sh]] - [clojure.string :as str])) - -(defn latest-sha [] - (str/trim (:out (sh "git rev-parse HEAD")))) diff --git a/ui_tests/.nrepl-port b/ui_tests/.nrepl-port new file mode 100644 index 000000000..e90306643 --- /dev/null +++ b/ui_tests/.nrepl-port @@ -0,0 +1 @@ +52358 \ No newline at end of file diff --git a/nbb/package.json b/ui_tests/package.json similarity index 100% rename from nbb/package.json rename to ui_tests/package.json diff --git a/nbb/playwright_tests.cljs b/ui_tests/playwright_tests.cljs similarity index 100% rename from nbb/playwright_tests.cljs rename to ui_tests/playwright_tests.cljs From 6cc25b222ab135f7160c5eecbb71dec8da4080c6 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 1 Mar 2022 12:37:04 +0100 Subject: [PATCH 27/51] fetch depth --- .github/workflows/main.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2e3268774..4b89f582c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -20,7 +20,6 @@ jobs: steps: - uses: actions/checkout@v2 with: - fetch-depth: 0 fetch_depth: 0 - name: ๐Ÿ”ง Install java @@ -52,7 +51,7 @@ jobs: steps: - uses: actions/checkout@v2 with: - fetch-depth: 0 + fetch_depth: 0 - name: ๐Ÿ”ง Install java uses: actions/setup-java@v1 @@ -116,7 +115,7 @@ jobs: steps: - uses: actions/checkout@v2 with: - fetch-depth: 0 + fetch_depth: 0 - name: Setup Babashka uses: turtlequeue/setup-babashka@v1.3.0 From 284ceb369f48710d16781ca4b24e58dbe4381da4 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 1 Mar 2022 12:39:22 +0100 Subject: [PATCH 28/51] fix --- bb.edn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bb.edn b/bb.edn index 497033eaf..7d71a438d 100644 --- a/bb.edn +++ b/bb.edn @@ -11,7 +11,7 @@ (str/trim (:out (shell {:out :string} (str "bb -cp " cp " -e '(println (.getPath (clojure.java.io/resource \"css/viewer.css\")))'")))))) (defn latest-sha [] - (str/trim (:out (sh "git rev-parse HEAD"))))) + (str/trim (:out (p/sh "git rev-parse HEAD"))))) print-viewer-css {:task (println (viewer-css-path))} copy-viewer-css {:task (fs/copy (viewer-css-path) "resources/stylesheets/viewer.css" #{:replace-existing})} From 63ac0b3c09706a31527bfec1ac0790df595ffcc7 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 1 Mar 2022 12:42:35 +0100 Subject: [PATCH 29/51] fix dir --- bb.edn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bb.edn b/bb.edn index 7d71a438d..e5b330303 100644 --- a/bb.edn +++ b/bb.edn @@ -34,7 +34,7 @@ test:static-app {:doc "Run UI tests for current SHA. Provide SHA as command line arg." :task (do - (shell {:dir "nbb"} "yarn install") + (shell {:dir "ui_tests"} "yarn install") (apply shell {:dir "ui_tests"} "yarn nbb -m playwright-tests" (or *command-line-args* [(latest-sha)])))} From 7d1433b7112ee6ee006d220f2d54b59254dad30b Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 1 Mar 2022 12:46:58 +0100 Subject: [PATCH 30/51] trigger UI error --- src/nextjournal/clerk/sci_viewer.cljs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/nextjournal/clerk/sci_viewer.cljs b/src/nextjournal/clerk/sci_viewer.cljs index 331d0246d..bded4516a 100644 --- a/src/nextjournal/clerk/sci_viewer.cljs +++ b/src/nextjournal/clerk/sci_viewer.cljs @@ -8,8 +8,8 @@ [nextjournal.clerk.viewer :as viewer :refer [code html md plotly tex vl with-viewer with-viewers]] [nextjournal.devcards :as dc] [nextjournal.markdown.transform :as md.transform] - [nextjournal.ui.components.icon :as icon] [nextjournal.ui.components.d3-require :as d3-require] + [nextjournal.ui.components.icon :as icon] [nextjournal.view.context :as view-context] [nextjournal.viewer.code :as code] [nextjournal.viewer.katex :as katex] @@ -990,8 +990,8 @@ black")}]))} :disable-arity-checks true :classes {'js goog/global :allow :all} - :namespaces {'nextjournal.viewer sci-viewer-namespace - 'v sci-viewer-namespace}}))) + :namespaces {'nextjournal.viewer nil #_sci-viewer-namespace + 'v nil #_sci-viewer-namespace}}))) (defn eval-form [f] From fc9b119d272253418f05e1054fd6b7ccd1843b84 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 1 Mar 2022 17:05:06 +0100 Subject: [PATCH 31/51] wip --- build.clj | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/build.clj b/build.clj index 84296b630..22293f73f 100644 --- a/build.clj +++ b/build.clj @@ -1,6 +1,5 @@ (ns build (:require [babashka.fs :as fs] - [babashka.process :as process] [clojure.edn :as edn] [clojure.java.io :as io] [clojure.string :as str] @@ -58,20 +57,29 @@ url)) z/root-string)) -(defn upload! [opts file] (:url (cas/upload! opts file))) +(defn upload! [opts file] + (:url (cas/upload! opts file))) -(defn update-resource! [opts resource _ file] - (spit clerk-config-path - (replace-resource resource - (upload! opts file)))) +(defn update-resource! + [_opts resource _ file] + (spit clerk-config-path (replace-resource resource file))) -(defn get-gsutil [] (str/trim (:out (process/sh ["which" "gsutil"])))) +(defn get-gsutil [] (fs/which "gsutil")) (def resource->path '{viewer.js "/js/viewer.js"}) -(defn upload-to-cas+rewrite-sha [{:keys [resource]}] +(defn upload-to-cas [{:keys [resource]}] (if-let [target (resource->path resource)] - (update-resource! {:exec-path (str/trim (asserting (get-gsutil) "Can't find gsutil executable.")) - :target-path "gs://nextjournal-cas-eu/data/"} target :uploading (str "build/" resource)) + (let [opts {:exec-path (str/trim (asserting (get-gsutil) "Can't find gsutil executable.")) + :target-path "gs://nextjournal-cas-eu/data/"} + file (str "build/" resource) + uploaded (upload! opts file)] + {:target target + :uploaded uploaded}) + (throw (ex-info (str "unsupported resource " resource) {:supported-resources (keys resource->path)})))) + +(defn upload-to-cas+rewrite-sha [{:keys [resource] :as opts}] + (if-let [{:keys [target uploaded]} (upload-to-cas opts)] + (update-resource! opts target :uploading uploaded) (throw (ex-info (str "unsupported resource " resource) {:supported-resources (keys resource->path)})))) From 7695c39fda591fe4582c522a035d5509749dce1c Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 1 Mar 2022 17:05:47 +0100 Subject: [PATCH 32/51] Revert "wip" This reverts commit fc9b119d272253418f05e1054fd6b7ccd1843b84. --- build.clj | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/build.clj b/build.clj index 22293f73f..84296b630 100644 --- a/build.clj +++ b/build.clj @@ -1,5 +1,6 @@ (ns build (:require [babashka.fs :as fs] + [babashka.process :as process] [clojure.edn :as edn] [clojure.java.io :as io] [clojure.string :as str] @@ -57,29 +58,20 @@ url)) z/root-string)) -(defn upload! [opts file] - (:url (cas/upload! opts file))) +(defn upload! [opts file] (:url (cas/upload! opts file))) -(defn update-resource! - [_opts resource _ file] - (spit clerk-config-path (replace-resource resource file))) +(defn update-resource! [opts resource _ file] + (spit clerk-config-path + (replace-resource resource + (upload! opts file)))) -(defn get-gsutil [] (fs/which "gsutil")) +(defn get-gsutil [] (str/trim (:out (process/sh ["which" "gsutil"])))) (def resource->path '{viewer.js "/js/viewer.js"}) -(defn upload-to-cas [{:keys [resource]}] +(defn upload-to-cas+rewrite-sha [{:keys [resource]}] (if-let [target (resource->path resource)] - (let [opts {:exec-path (str/trim (asserting (get-gsutil) "Can't find gsutil executable.")) - :target-path "gs://nextjournal-cas-eu/data/"} - file (str "build/" resource) - uploaded (upload! opts file)] - {:target target - :uploaded uploaded}) - (throw (ex-info (str "unsupported resource " resource) {:supported-resources (keys resource->path)})))) - -(defn upload-to-cas+rewrite-sha [{:keys [resource] :as opts}] - (if-let [{:keys [target uploaded]} (upload-to-cas opts)] - (update-resource! opts target :uploading uploaded) + (update-resource! {:exec-path (str/trim (asserting (get-gsutil) "Can't find gsutil executable.")) + :target-path "gs://nextjournal-cas-eu/data/"} target :uploading (str "build/" resource)) (throw (ex-info (str "unsupported resource " resource) {:supported-resources (keys resource->path)})))) From b9eb5c304d010a2beeb5fcd1f4b4dbda264529eb Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 8 Mar 2022 17:00:56 +0100 Subject: [PATCH 33/51] hmm --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e214a5027..23a9c1e77 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -154,13 +154,13 @@ jobs: target_url: https://snapshots.nextjournal.com/clerk/build/${{ github.sha }} ui-tests: - needs: static-build + needs: [static-build] runs-on: ubuntu-latest steps: - name: Setup Babashka uses: turtlequeue/setup-babashka@v1.3.0 with: - babashka-version: 0.7.5 + babashka-version: 0.7.6 - name: Run Playwright tests against static assets run: | From b3dac1c4538b3e6e4931ed634d59e38b6a5d640f Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 8 Mar 2022 17:04:27 +0100 Subject: [PATCH 34/51] checkout --- .github/workflows/main.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 23a9c1e77..90c873f52 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -157,6 +157,10 @@ jobs: needs: [static-build] runs-on: ubuntu-latest steps: + - uses: actions/checkout@v2 + with: + fetch_depth: 0 + - name: Setup Babashka uses: turtlequeue/setup-babashka@v1.3.0 with: From 0465c742cc1bbba961291f90f7121ef288099699 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 8 Mar 2022 17:16:47 +0100 Subject: [PATCH 35/51] trigger error in render fn --- notebooks/rule_30.clj | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/notebooks/rule_30.clj b/notebooks/rule_30.clj index bc59cd17a..b9e6ee6f5 100644 --- a/notebooks/rule_30.clj +++ b/notebooks/rule_30.clj @@ -4,8 +4,10 @@ (:require [nextjournal.clerk :as clerk])) (clerk/set-viewers! - [{:pred number? :render-fn '#(v/html [:div.inline-block {:style {:width 16 :height 16} - :class (if (pos? %) "bg-black" "bg-white border-solid border-2 border-black")}])} + [{:pred number? :render-fn '#(do + (js/console.error "o noes, an error") + (v/html [:div.inline-block {:style {:width 16 :height 16} + :class (if (pos? %) "bg-black" "bg-white border-solid border-2 border-black")}]))} {:pred list? :render-fn '#(v/html (into [:div.flex.flex-col] (v/inspect-children %2) %1))} {:pred #(and (vector? %) (not (map-entry? %))) :render-fn '#(v/html (into [:div.flex.inline-flex] (v/inspect-children %2) %1))}]) From b94ccfb3a5e4f2580184c8206c3a688cd864a70a Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 8 Mar 2022 17:22:05 +0100 Subject: [PATCH 36/51] yeah --- notebooks/rule_30.clj | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/notebooks/rule_30.clj b/notebooks/rule_30.clj index b9e6ee6f5..bc59cd17a 100644 --- a/notebooks/rule_30.clj +++ b/notebooks/rule_30.clj @@ -4,10 +4,8 @@ (:require [nextjournal.clerk :as clerk])) (clerk/set-viewers! - [{:pred number? :render-fn '#(do - (js/console.error "o noes, an error") - (v/html [:div.inline-block {:style {:width 16 :height 16} - :class (if (pos? %) "bg-black" "bg-white border-solid border-2 border-black")}]))} + [{:pred number? :render-fn '#(v/html [:div.inline-block {:style {:width 16 :height 16} + :class (if (pos? %) "bg-black" "bg-white border-solid border-2 border-black")}])} {:pred list? :render-fn '#(v/html (into [:div.flex.flex-col] (v/inspect-children %2) %1))} {:pred #(and (vector? %) (not (map-entry? %))) :render-fn '#(v/html (into [:div.flex.inline-flex] (v/inspect-children %2) %1))}]) From f20187532257ca93f9593beffe6f076c809e8fa9 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 8 Mar 2022 17:28:43 +0100 Subject: [PATCH 37/51] nrepl port ignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index f2ae55fa4..47887431b 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ yarn.lock .work /build /public/build +.nrepl-port From 581502de212f280f99b990c920adc987a1b6ee45 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 8 Mar 2022 17:28:51 +0100 Subject: [PATCH 38/51] nrepl port ignore --- ui_tests/.nrepl-port | 1 - 1 file changed, 1 deletion(-) delete mode 100644 ui_tests/.nrepl-port diff --git a/ui_tests/.nrepl-port b/ui_tests/.nrepl-port deleted file mode 100644 index e90306643..000000000 --- a/ui_tests/.nrepl-port +++ /dev/null @@ -1 +0,0 @@ -52358 \ No newline at end of file From 957bb81d5cb68b0faf613688e89e62b936a8f9ef Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 8 Mar 2022 22:17:04 +0100 Subject: [PATCH 39/51] Process comments of #107 --- bb/viewer_resources_hashing.clj | 12 +++++------- src/nextjournal/clerk/config.clj | 8 ++++---- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/bb/viewer_resources_hashing.clj b/bb/viewer_resources_hashing.clj index a88a81662..d210b699b 100644 --- a/bb/viewer_resources_hashing.clj +++ b/bb/viewer_resources_hashing.clj @@ -9,10 +9,10 @@ "resources/public/build"]) ;; Example link in bucket: -;; "https://storage.googleapis.com/nextjournal-cas-eu/data/8VwKauX6JACEP3K6ahNmP5p1w7rWdhKzeGXCDrHMnJiVrUxHVxcm3Xj84K2r3fcAKWxMQKzqoFe92osgFEHCuKCtZC" +;; "https://storage.googleapis.com/nextjournal-cas-eu/8VwKauX6JACEP3K6ahNmP5p1w7rWdhKzeGXCDrHMnJiVrUxHVxcm3Xj84K2r3fcAKWxMQKzqoFe92osgFEHCuKCtZC" -(def gs-bucket "gs://nextjournal-cas-eu/data") -(def base-url "https://storage.googleapis.com/nextjournal-cas-eu/data") +(def gs-bucket "gs://nextjournal-cas-eu") +(def base-url "https://storage.googleapis.com/nextjournal-cas-eu") (defn sha512s [] (let [files (map str (mapcat #(fs/glob % "**.{js,css}") output-dirs)) @@ -48,13 +48,11 @@ (let [front-end-hash (str (djv/file-set-hash (file-set)))] (spit viewer-js-hash-file front-end-hash))) -(def gs-url-prefix "https://storage.googleapis.com/nextjournal-cas-eu/data") - (defn lookup-url [lookup-hash] (str gs-bucket "/lookup/" lookup-hash)) (defn cas-link [hash] - (str gs-url-prefix "/" hash)) + (str base-url "/" hash)) (defn build+upload-viewer-resources [] (let [front-end-hash (str/trim (slurp viewer-js-hash-file)) @@ -63,7 +61,7 @@ (when (= res ::djv/not-found) (tasks/run 'build:js) (let [content-hash (djv/sha512 (slurp "build/viewer.js")) - viewer-js-http-link (str (cas-link content-hash) "?cache=false")] + viewer-js-http-link (str (cas-link content-hash))] (spit manifest {"/js/viewer.js" viewer-js-http-link}) (println "Manifest:" (slurp manifest)) (println "Coping manifest to" (lookup-url front-end-hash)) diff --git a/src/nextjournal/clerk/config.clj b/src/nextjournal/clerk/config.clj index fe6744eb9..eb5bfc72a 100644 --- a/src/nextjournal/clerk/config.clj +++ b/src/nextjournal/clerk/config.clj @@ -11,7 +11,7 @@ (when-let [prop (System/getProperty "clerk.disable_cache")] (not= "false" prop))) -(def gs-url-prefix "https://storage.googleapis.com/nextjournal-cas-eu/data") +(def gs-url-prefix "https://storage.googleapis.com/nextjournal-cas-eu") (def lookup-hash (str/trim (slurp (io/resource "viewer-js-hash")))) (def lookup-url (str gs-url-prefix "/lookup/" lookup-hash)) @@ -21,12 +21,12 @@ (read-string prop)))) (defonce !resource->url + ;; contains asset manifest in the form: + ;; {"/js/viewer.js" "https://..."}1 (atom (or resource-manifest-from-props - ;; assume that CI will have published a CAS-link under this lookup, - ;; prior to hitting this code-path (edn/read-string (slurp lookup-url))))) -#_(swap! !resource->url assoc "/css/viewer.css" "https://storage.googleapis.com/nextjournal-cas-eu/data/8VvAV62HzsvhcsXEkHP33uj4cV9UvdDz7DU9qLeVRCfEP9kWLFAzaMKL77trdx898DzcVyDVejdfxvxj5XB84UpWvQ") +#_(swap! !resource->url assoc "/css/viewer.css" "https://storage.googleapis.com/nextjournal-cas-eu/8VvAV62HzsvhcsXEkHP33uj4cV9UvdDz7DU9qLeVRCfEP9kWLFAzaMKL77trdx898DzcVyDVejdfxvxj5XB84UpWvQ") #_(swap! !resource->url dissoc "/css/viewer.css") #_(reset! !resource->url identity) #_(reset! !resource->url default-resource-manifest) From f0977a4fc10c2b302b72e9596c607bf5120858e2 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 8 Mar 2022 22:18:45 +0100 Subject: [PATCH 40/51] clean --- src/nextjournal/clerk/config.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nextjournal/clerk/config.clj b/src/nextjournal/clerk/config.clj index eb5bfc72a..5461b0a1d 100644 --- a/src/nextjournal/clerk/config.clj +++ b/src/nextjournal/clerk/config.clj @@ -22,7 +22,7 @@ (defonce !resource->url ;; contains asset manifest in the form: - ;; {"/js/viewer.js" "https://..."}1 + ;; {"/js/viewer.js" "https://..."} (atom (or resource-manifest-from-props (edn/read-string (slurp lookup-url))))) From ff66b1960aeed2d50d2b6094510934c7c9e59662 Mon Sep 17 00:00:00 2001 From: Martin Kavalar Date: Tue, 8 Mar 2022 22:25:08 +0100 Subject: [PATCH 41/51] Keep data files in /data --- bb/viewer_resources_hashing.clj | 4 ++-- src/nextjournal/clerk/config.clj | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bb/viewer_resources_hashing.clj b/bb/viewer_resources_hashing.clj index d210b699b..ff845d37e 100644 --- a/bb/viewer_resources_hashing.clj +++ b/bb/viewer_resources_hashing.clj @@ -9,7 +9,7 @@ "resources/public/build"]) ;; Example link in bucket: -;; "https://storage.googleapis.com/nextjournal-cas-eu/8VwKauX6JACEP3K6ahNmP5p1w7rWdhKzeGXCDrHMnJiVrUxHVxcm3Xj84K2r3fcAKWxMQKzqoFe92osgFEHCuKCtZC" +;; "https://storage.googleapis.com/nextjournal-cas-eu/data/8VwKauX6JACEP3K6ahNmP5p1w7rWdhKzeGXCDrHMnJiVrUxHVxcm3Xj84K2r3fcAKWxMQKzqoFe92osgFEHCuKCtZC" (def gs-bucket "gs://nextjournal-cas-eu") (def base-url "https://storage.googleapis.com/nextjournal-cas-eu") @@ -52,7 +52,7 @@ (str gs-bucket "/lookup/" lookup-hash)) (defn cas-link [hash] - (str base-url "/" hash)) + (str base-url "/data/" hash)) (defn build+upload-viewer-resources [] (let [front-end-hash (str/trim (slurp viewer-js-hash-file)) diff --git a/src/nextjournal/clerk/config.clj b/src/nextjournal/clerk/config.clj index 5461b0a1d..d74831311 100644 --- a/src/nextjournal/clerk/config.clj +++ b/src/nextjournal/clerk/config.clj @@ -26,7 +26,7 @@ (atom (or resource-manifest-from-props (edn/read-string (slurp lookup-url))))) -#_(swap! !resource->url assoc "/css/viewer.css" "https://storage.googleapis.com/nextjournal-cas-eu/8VvAV62HzsvhcsXEkHP33uj4cV9UvdDz7DU9qLeVRCfEP9kWLFAzaMKL77trdx898DzcVyDVejdfxvxj5XB84UpWvQ") +#_(swap! !resource->url assoc "/css/viewer.css" "https://storage.googleapis.com/nextjournal-cas-eu/data/8VvAV62HzsvhcsXEkHP33uj4cV9UvdDz7DU9qLeVRCfEP9kWLFAzaMKL77trdx898DzcVyDVejdfxvxj5XB84UpWvQ") #_(swap! !resource->url dissoc "/css/viewer.css") #_(reset! !resource->url identity) #_(reset! !resource->url default-resource-manifest) From 9e3c21fd99935c58cd7f6eb769c9cfe4401819fc Mon Sep 17 00:00:00 2001 From: Martin Kavalar Date: Tue, 8 Mar 2022 22:27:33 +0100 Subject: [PATCH 42/51] Append data for copied file as well --- bb/viewer_resources_hashing.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bb/viewer_resources_hashing.clj b/bb/viewer_resources_hashing.clj index ff845d37e..3516cddbe 100644 --- a/bb/viewer_resources_hashing.clj +++ b/bb/viewer_resources_hashing.clj @@ -66,4 +66,4 @@ (println "Manifest:" (slurp manifest)) (println "Coping manifest to" (lookup-url front-end-hash)) (djv/gs-copy manifest (lookup-url front-end-hash)) - (djv/gs-copy "build/viewer.js" (str gs-bucket "/" content-hash)))))) + (djv/gs-copy "build/viewer.js" (str gs-bucket "/data/" content-hash)))))) From 40fab5ecc6b81f485b27e2ed9136c3a50990327e Mon Sep 17 00:00:00 2001 From: Martin Kavalar Date: Tue, 8 Mar 2022 22:30:02 +0100 Subject: [PATCH 43/51] Trigger rebuild --- resources/viewer-js-hash | 2 +- src/nextjournal/clerk/sci_viewer.cljs | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/viewer-js-hash b/resources/viewer-js-hash index eea7f3340..7ff0acb40 100644 --- a/resources/viewer-js-hash +++ b/resources/viewer-js-hash @@ -1 +1 @@ -LfX8kXxgonHRwUs8Af6W5ynMMwD \ No newline at end of file +pKDPHj6ynLncYNtkaD5yMFE1Ew6 \ No newline at end of file diff --git a/src/nextjournal/clerk/sci_viewer.cljs b/src/nextjournal/clerk/sci_viewer.cljs index da29cb5d4..c80977aaa 100644 --- a/src/nextjournal/clerk/sci_viewer.cljs +++ b/src/nextjournal/clerk/sci_viewer.cljs @@ -33,7 +33,6 @@ :label-color (if selected? "white-90" "black-60") :badge-background-color (if selected? "bg-white-20" "bg-black-10")}) - (declare inspect) (defn value-of From f71bcb47b315eac7fbbb0be9e1bf23dbf75341f0 Mon Sep 17 00:00:00 2001 From: Martin Kavalar Date: Tue, 8 Mar 2022 22:33:03 +0100 Subject: [PATCH 44/51] Don't make clojure tests dependent on cljs build --- .github/workflows/main.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 90c873f52..ad688ace1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -48,7 +48,6 @@ jobs: run: bb build+upload-viewer-resources test: - needs: [build-and-upload-viewer-resources] runs-on: ${{matrix.sys.os}} strategy: From 2512320003954da0ecf509eeb741a95237c05226 Mon Sep 17 00:00:00 2001 From: Martin Kavalar Date: Wed, 9 Mar 2022 08:34:40 +0100 Subject: [PATCH 45/51] Bust cache --- resources/viewer-js-hash | 2 +- src/nextjournal/clerk/sci_viewer.cljs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/viewer-js-hash b/resources/viewer-js-hash index 7ff0acb40..e69ae4038 100644 --- a/resources/viewer-js-hash +++ b/resources/viewer-js-hash @@ -1 +1 @@ -pKDPHj6ynLncYNtkaD5yMFE1Ew6 \ No newline at end of file +2J2k6JzV9umxeE5SXrpVeJRaH7kk \ No newline at end of file diff --git a/src/nextjournal/clerk/sci_viewer.cljs b/src/nextjournal/clerk/sci_viewer.cljs index c80977aaa..eb523ee83 100644 --- a/src/nextjournal/clerk/sci_viewer.cljs +++ b/src/nextjournal/clerk/sci_viewer.cljs @@ -124,7 +124,7 @@ (map (partial str/join "=")) (str/join "&"))) -#_(opts->query {:s 10 :num 42}) +#_(opts->query {:s 11 :num 42}) (defn unreadable-edn [edn] (html [:span.inspected-value.whitespace-nowrap.cmt-default edn])) From 59a9065e602b5a9bfb220d7df76ad96eb07dd0e4 Mon Sep 17 00:00:00 2001 From: Martin Kavalar Date: Wed, 9 Mar 2022 08:38:32 +0100 Subject: [PATCH 46/51] Bust cache & set clerk.resource_manifest to make tests run --- deps.edn | 3 ++- resources/viewer-js-hash | 2 +- src/nextjournal/clerk/sci_viewer.cljs | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/deps.edn b/deps.edn index 4bebc2ce1..70067b373 100644 --- a/deps.edn +++ b/deps.edn @@ -39,7 +39,8 @@ :test {:extra-deps {nubank/matcher-combinators {:mvn/version "3.3.1"} io.github.cognitect-labs/test-runner {:git/tag "v0.5.0" :git/sha "b3fd0d2"}} :extra-paths ["test"] - :exec-fn cognitect.test-runner.api/test} + :exec-fn cognitect.test-runner.api/test + :jvm-opts ["-Dclerk.resource_manifest={}"]} :demo {:extra-deps {com.github.seancorfield/next.jdbc {:mvn/version "1.2.659"} org.xerial/sqlite-jdbc {:mvn/version "3.34.0"} diff --git a/resources/viewer-js-hash b/resources/viewer-js-hash index e69ae4038..06b48e36f 100644 --- a/resources/viewer-js-hash +++ b/resources/viewer-js-hash @@ -1 +1 @@ -2J2k6JzV9umxeE5SXrpVeJRaH7kk \ No newline at end of file +MD4bQZ5Cmd4NrfS6aX2HNTJSL68 \ No newline at end of file diff --git a/src/nextjournal/clerk/sci_viewer.cljs b/src/nextjournal/clerk/sci_viewer.cljs index eb523ee83..61c041556 100644 --- a/src/nextjournal/clerk/sci_viewer.cljs +++ b/src/nextjournal/clerk/sci_viewer.cljs @@ -124,7 +124,7 @@ (map (partial str/join "=")) (str/join "&"))) -#_(opts->query {:s 11 :num 42}) +#_(opts->query {:s 12 :num 42}) (defn unreadable-edn [edn] (html [:span.inspected-value.whitespace-nowrap.cmt-default edn])) From 9a62fe7dd40850cd20b9b1afb7c78058da6de600 Mon Sep 17 00:00:00 2001 From: Martin Kavalar Date: Wed, 9 Mar 2022 08:40:59 +0100 Subject: [PATCH 47/51] Set resource_manifest value to a value that works --- deps.edn | 2 +- resources/viewer-js-hash | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/deps.edn b/deps.edn index 70067b373..4b6b0e6d1 100644 --- a/deps.edn +++ b/deps.edn @@ -40,7 +40,7 @@ io.github.cognitect-labs/test-runner {:git/tag "v0.5.0" :git/sha "b3fd0d2"}} :extra-paths ["test"] :exec-fn cognitect.test-runner.api/test - :jvm-opts ["-Dclerk.resource_manifest={}"]} + :jvm-opts ["-Dclerk.resource_manifest={\"/js/viewer.js\" \"http://localhost:7778/js/viewer.js\"}"]} :demo {:extra-deps {com.github.seancorfield/next.jdbc {:mvn/version "1.2.659"} org.xerial/sqlite-jdbc {:mvn/version "3.34.0"} diff --git a/resources/viewer-js-hash b/resources/viewer-js-hash index 06b48e36f..0cf483d29 100644 --- a/resources/viewer-js-hash +++ b/resources/viewer-js-hash @@ -1 +1 @@ -MD4bQZ5Cmd4NrfS6aX2HNTJSL68 \ No newline at end of file +2qvjUtnvEguryFhLN9ZpY4VRcKRo \ No newline at end of file From f9e7b1f4a270c564780c85ea9278fb77ce802872 Mon Sep 17 00:00:00 2001 From: Martin Kavalar Date: Wed, 9 Mar 2022 10:15:29 +0100 Subject: [PATCH 48/51] Try quoting jvm opt to fix windows failure --- deps.edn | 4 ++-- resources/viewer-js-hash | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/deps.edn b/deps.edn index 4b6b0e6d1..3f51232e7 100644 --- a/deps.edn +++ b/deps.edn @@ -33,14 +33,14 @@ cider/cider-nrepl {:mvn/version "0.26.0"} thheller/shadow-cljs {:mvn/version "2.16.7"}} :extra-paths ["dev"] - :jvm-opts ["-Dclerk.resource_manifest={\"/js/viewer.js\" \"http://localhost:7778/js/viewer.js\"}" "-Dpolyglot.engine.WarnInterpreterOnly=false" "-XX:-OmitStackTraceInFastThrow"] + :jvm-opts ["-Dclerk.resource_manifest='{\"/js/viewer.js\" \"http://localhost:7778/js/viewer.js\"}'" "-Dpolyglot.engine.WarnInterpreterOnly=false" "-XX:-OmitStackTraceInFastThrow"] :main-opts ["-m" "shadow.cljs.devtools.cli"]} :test {:extra-deps {nubank/matcher-combinators {:mvn/version "3.3.1"} io.github.cognitect-labs/test-runner {:git/tag "v0.5.0" :git/sha "b3fd0d2"}} :extra-paths ["test"] :exec-fn cognitect.test-runner.api/test - :jvm-opts ["-Dclerk.resource_manifest={\"/js/viewer.js\" \"http://localhost:7778/js/viewer.js\"}"]} + :jvm-opts ["-Dclerk.resource_manifest='{\"/js/viewer.js\" \"http://localhost:7778/js/viewer.js\"}'"]} :demo {:extra-deps {com.github.seancorfield/next.jdbc {:mvn/version "1.2.659"} org.xerial/sqlite-jdbc {:mvn/version "3.34.0"} diff --git a/resources/viewer-js-hash b/resources/viewer-js-hash index 0cf483d29..e31fe9539 100644 --- a/resources/viewer-js-hash +++ b/resources/viewer-js-hash @@ -1 +1 @@ -2qvjUtnvEguryFhLN9ZpY4VRcKRo \ No newline at end of file +c5ZQQyuJZUKkfnXZ7gBDvqraAmk \ No newline at end of file From ab696c2dc095d1a6277c68a8615c60167a840c4b Mon Sep 17 00:00:00 2001 From: Martin Kavalar Date: Wed, 9 Mar 2022 11:18:05 +0100 Subject: [PATCH 49/51] Try running tests via bb clojure --- .github/workflows/main.yml | 7 ++++++- resources/viewer-js-hash | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ad688ace1..0601c709f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -76,6 +76,11 @@ jobs: with: cli: '1.10.3.943' + - name: Setup Babashka + uses: turtlequeue/setup-babashka@v1.3.0 + with: + babashka-version: 0.7.6 + - name: ๐Ÿ— maven cache uses: actions/cache@v2 with: @@ -87,7 +92,7 @@ jobs: ${{ runner.os }}-maven- - name: ๐Ÿงช Run tests - run: clojure -X:test + run: bb clojure -X:test static-build: runs-on: ubuntu-latest diff --git a/resources/viewer-js-hash b/resources/viewer-js-hash index e31fe9539..0cf483d29 100644 --- a/resources/viewer-js-hash +++ b/resources/viewer-js-hash @@ -1 +1 @@ -c5ZQQyuJZUKkfnXZ7gBDvqraAmk \ No newline at end of file +2qvjUtnvEguryFhLN9ZpY4VRcKRo \ No newline at end of file From d05813012fe02074d31b54a4309e95c6116ab2ef Mon Sep 17 00:00:00 2001 From: Martin Kavalar Date: Wed, 9 Mar 2022 14:40:15 +0100 Subject: [PATCH 50/51] Revert "Try quoting jvm opt to fix windows failure" This reverts commit f9e7b1f4a270c564780c85ea9278fb77ce802872. --- deps.edn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deps.edn b/deps.edn index 3f51232e7..4b6b0e6d1 100644 --- a/deps.edn +++ b/deps.edn @@ -33,14 +33,14 @@ cider/cider-nrepl {:mvn/version "0.26.0"} thheller/shadow-cljs {:mvn/version "2.16.7"}} :extra-paths ["dev"] - :jvm-opts ["-Dclerk.resource_manifest='{\"/js/viewer.js\" \"http://localhost:7778/js/viewer.js\"}'" "-Dpolyglot.engine.WarnInterpreterOnly=false" "-XX:-OmitStackTraceInFastThrow"] + :jvm-opts ["-Dclerk.resource_manifest={\"/js/viewer.js\" \"http://localhost:7778/js/viewer.js\"}" "-Dpolyglot.engine.WarnInterpreterOnly=false" "-XX:-OmitStackTraceInFastThrow"] :main-opts ["-m" "shadow.cljs.devtools.cli"]} :test {:extra-deps {nubank/matcher-combinators {:mvn/version "3.3.1"} io.github.cognitect-labs/test-runner {:git/tag "v0.5.0" :git/sha "b3fd0d2"}} :extra-paths ["test"] :exec-fn cognitect.test-runner.api/test - :jvm-opts ["-Dclerk.resource_manifest='{\"/js/viewer.js\" \"http://localhost:7778/js/viewer.js\"}'"]} + :jvm-opts ["-Dclerk.resource_manifest={\"/js/viewer.js\" \"http://localhost:7778/js/viewer.js\"}"]} :demo {:extra-deps {com.github.seancorfield/next.jdbc {:mvn/version "1.2.659"} org.xerial/sqlite-jdbc {:mvn/version "3.34.0"} From c1d4a48ff5f38501cb3ed8674f96557fe6368458 Mon Sep 17 00:00:00 2001 From: Martin Kavalar Date: Wed, 9 Mar 2022 14:45:51 +0100 Subject: [PATCH 51/51] Also cache ~/.deps.clj --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0601c709f..bda2e46f0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -87,6 +87,7 @@ jobs: path: | ~/.m2 ~/.gitlibs + ~/.deps.clj key: ${{ runner.os }}-maven-${{ github.sha }} restore-keys: | ${{ runner.os }}-maven-