From 9e8a8f3e71bbc0e78927d23bb0653f0b2da984a5 Mon Sep 17 00:00:00 2001
From: Alexander Rose <alex.rose@rcsb.org>
Date: Fri, 7 Jun 2019 12:36:29 -0700
Subject: [PATCH] updated viewer

---
 README.md         |   7 ++--
 package-lock.json | Bin 575779 -> 562600 bytes
 package.json      |   2 ++
 scripts/deploy.js |  82 ++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 89 insertions(+), 2 deletions(-)
 create mode 100644 scripts/deploy.js

diff --git a/README.md b/README.md
index b0a85b9a1..043668a21 100644
--- a/README.md
+++ b/README.md
@@ -133,14 +133,17 @@ To get syntax highlighting for shader and graphql files add the following to Vis
 
 ## Publish
 
-## Prerelease
+### Prerelease
     npm version prerelease # asumes the current version ends with '-dev.X'
     npm publish --tag next
 
-## Release
+### Release
     npm version 0.X.0 # provide valid semver string
     npm publish
 
+## Deploy
+    node ./scripts/deploy.js # currently updates the viewer on molstar.org/viewer
+
 ## Contributing
 Just open an issue or make a pull request. All contributions are welcome.
 
diff --git a/package-lock.json b/package-lock.json
index 805fc449db497a93f5966f9ed63d5a797ff6f079..91b209bb516fc912f62571744d4237dd141b6399 100644
GIT binary patch
delta 2365
zcmZ2HNqNO;r42LAZ0<j+&As{SO*w<<rZ-uYr<Zmy2~W@e!o)W{wvE+vdj%JxH~;ki
z2~674-`!vq+Wtn8v5s*%vpKW=_J$QqGK`a#Zd0DV;WiV`^cX2d&gu25nZ8ecu+n(@
zd0EEkEYlauGpbBCf6d4{UEiCLbNYG(M!x9@X^f`Z&nq#$=bnDmf=zk*Sv^KR#_9Vj
zShT0l{Kq6e-FFt7<aR9s#=YEN?c2XwGkP;mFHvAr*&bxic$jT^$~z|I?J91JTNuF#
zroV7!ybp1^K>#D$_B$SoiTslfpI6@Q6Tz6lGksqYyU28bUrYwupQJE`FmGR3z*x*N
zeVsQG*Yt!&My2V0{xJz`cd2CjDZG8c1jYrD)2C>&iA;BJWaQs&zlzbCbGqwER^{!T
zn;C^9ryE~mRNKDx4C5p2>9JWXy4zRWU|h&OJ)fDGbNb%fj56D!o-q0fOurJtsyuzc
zCq|a-yS^}1@lHRymr-TA3lmd{)^xcHMy}}wf{g0Z^-9<Urr$ZsD6##m4pT74_EdAG
zc|2ghO`pcjED8!Mp6L%f*v+SBxiCdem*HUMoPKs6yVUkeE=<9!+h2PzvG7i>Q()wp
zyupwQ;y?KarYY>x`4=#1PnVTo;og2Vo~cZ6dvp_%ya3b_lbFPLKtZWIef>P9C)1aB
zGl5yG+n3L0GUVO<dM#6=<Mb(}EXvb^-!tu=p7)Lk>{{jR>K~YlSy)pmN{SLE3z|wW
zT1@}w!)hj)R;&va)7RC9F?B7b3u?0{PY#e~2@Thd@F_}9Pj;!w$w@UakI;|E3pRI)
zD2gbxEOyD)j!LzxD#%Mob*e~7FSD?4^YF<v^eD;A&TuVHEGsGvHp|XW%yY^rFtD^J
z3N7#`HZyh2bvK`W@E@b)^z-h_N-SB$`FYc2r?N@&l;&lYr4|(@=47T-PQExrczT{A
zi@^5z-<Tqprpt3Pb51^UUTQnrPbSI0>1&->b*8_$!p1ZGMLnay_Fyk&A*SgD0_^$I
z_466oroZ=M=G;D4hJ6Rq^a%xw65F%=nJ=(TKevw^91=+JHeDf&nPvLl1m<Vc-ydhx
zS^hhbnQOXu5%Z4e$sx=t+wT`Kch-VKczgK=W>!XU9@;+nBlBZsa4c_c{mNV@Jbj)i
z3&LQT?fRT7*ZIKVK6!(o;&xdHmYa-_Y{DwV(xL!P)-$YFtOTYX*~hLt&4-0$`%^EL
z8LXg4Q=Q%yz_NI{NCu<wc85TgU5sEg)9pi8cqgB}#68`tfk|}wfowMO>GLvKc(+#t
zvjl&b&ez2bNkIqBvdV3L?aX?bV>(M0yYln{UaYLsPx-K(n!e>WBZRwsg)gfz6LVT-
z&h(F7Op??7F!N8ZpTelY4~mDh%$!txU40O9`i2}<ZK(`n_d*ko+@vVSl%kZ}z<|p1
z@PIrgm#l!|=^Jk|icc3f$E-5lAeU8eI@2>oDUf|E+fVzm)-XcyCM=V1ZqE&5HBZ>S
zaTDuLw&~~pF=|iekYrYxu2aV-Fnz-=R+i~rlFS0r6-3zhrsqg9^G@eaW6_wrURY#$
z+%8t<>8B+@c{7Qf8<L~j_p?sr0DF4+2USMp>GH8`oZIbAux4{_-*bia4eR!Mw^=2m
zr|<dBx(XZ%(?94kDQ~a;!TN*^5`k6!Sz{TeZvmAlpdw=HGq&H1;KFD72PQUFesFw(
zqmD<2t%)5Rl-uV@vKcW=FG*$=nf`#0O<?+cX|^{I(;msNDN0QbHfGb<E^f}&#Rd-R
z?Hg>_B-yv`c4ZS3*`6EE<^_q7?Z?vDECi=d-NC55owt%LMP&Pjel~dyP=42)&Xvcg
zF#Y~UM&9WOFPVg<bN4dxOpncD6q;^%kX>T?+!<{4LJ%82uVUNAJY94bv;Ou2>)7}h
zL5217=<n=Wll*w5%Wq)YHNE8-tN!+a2~3QP)8`ejK??Wn9GlpLAZkB6X11T+z{M;+
zy?Zm;8<0uLlONbiY@fA-twRzLKMJ#%c(=QqW7C4@n5)ft7m}A6F0gH4n+`5d9j~(~
zMM9WG2JEdI(;sWHt88btWM9e;3EdC2>;lsTyxG|p)2A2qu*xtQ8ct_SW;C7tz>}Rr
zB(p?cSHCzjw;(4~H$AgN*HF*UaQeYj9BQGNmf>N=McziG2JZUFj=`Rmc^T$q`4#@z
zmbn>;dEt?ksqQ7=PA<Wbg*j%qCYF)eruuG)d1j?i#V$qq6}eSq7J1sKffk7w-p={1
zMHb0rp~e~7(?2FKSx(=-k%^Nj&Sbjc0Y>BP{@E<ejML-HnWd*+NM_NPu9U>68RDKD
zP@x@`<y(^LXyzMXWS;M6;^yS$>f`1d6=f1^5>c4y?jPY?W@b?mqMemwT$ZgLRGH`<
z9$*j<;$0bDlIs)fYmlU!m=YS|T9#C77~q=dVKjZA35)%9esA{Y8q@dPhEyNQ+xbh_
zV<aXQJmQ-EA)QHOx*b2e`1UzH?4FFE^q@Umeh(|(^nwCLf$8y$Yy#7@`q=kP2NitV
z`q`Nnr!U#b1c@}&3G7Fiwx5{H&Lg<}>q>SdrR}0;*)vo?btcq|16ph>(+&PH%S=D?
zk$vy<I#4187Zr0qv7Z%WhnBk2AHHXoot_uOVk(PV66@>gBXe~PrmbX!)C@&VUa6j@
z&Jm6|xs`?mVcKSf=HX73US`IjW)aDWRURI0MrlSVNnV*1CJ|Kyp>762!NyTZSq5(I
zp8n2`Wr?N%`YHPEPX3XJj?RIG<=O^`RiW9_9Z#~VZ_i-iSRpX|GarY_b_G$6Iu6u2
zS7tg#9;3ka=dv6D&C}l-vFL6OSjfS`I9*{e$M5O#jx0LUWe;-*OjkI-$g<si35T;N
TxX7KklVd$Am=(UC;|wPN)}cmb

delta 7211
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

diff --git a/package.json b/package.json
index e629d822c..44be598d2 100644
--- a/package.json
+++ b/package.json
@@ -68,6 +68,7 @@
     "css-loader": "^2.1.1",
     "extra-watch-webpack-plugin": "^1.0.3",
     "file-loader": "^3.0.1",
+    "fs-extra": "^8.0.1",
     "graphql-code-generator": "^0.18.2",
     "graphql-codegen-time": "^0.18.2",
     "graphql-codegen-typescript-template": "^0.18.2",
@@ -78,6 +79,7 @@
     "raw-loader": "^2.0.0",
     "resolve-url-loader": "^3.1.0",
     "sass-loader": "^7.1.0",
+    "simple-git": "^1.113.0",
     "style-loader": "^0.23.1",
     "ts-jest": "^24.0.2",
     "tslint": "^5.17.0",
diff --git a/scripts/deploy.js b/scripts/deploy.js
new file mode 100644
index 000000000..0468eb50f
--- /dev/null
+++ b/scripts/deploy.js
@@ -0,0 +1,82 @@
+/**
+ * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info.
+ *
+ * @author Alexander Rose <alexander.rose@weirdbyte.de>
+ */
+
+const git = require('simple-git')
+const path = require('path')
+const fs = require("fs")
+const fse = require("fs-extra")
+
+const remoteUrl = "https://github.com/molstar/molstar.github.io.git"
+const buildDir = path.resolve(__dirname, '../build/')
+const deployDir = path.resolve(buildDir, 'deploy/')
+const localPath = path.resolve(deployDir, 'molstar.github.io/')
+
+if (!fs.existsSync(localPath) || !git(localPath).checkIsRepo()) {
+    fs.mkdirSync(localPath, { recursive: true })
+    git(deployDir)
+        .silent(false)
+        .clone(remoteUrl)
+        .fetch(['--all'])
+} else {
+    git(localPath)
+        .silent(false)
+        .fetch(['--all'])
+        .reset(['--hard', 'origin/master'])
+}
+
+const viewerBuildPath = path.resolve(buildDir, '../build/viewer/')
+const viewerDeployPath = path.resolve(localPath, 'viewer/')
+fse.copySync(viewerBuildPath, viewerDeployPath, { overwrite: true })
+
+git(localPath)
+    .silent(false)
+    .add(['-A'])
+    .commit('updated viewer')
+    .push()
+
+// #!/usr/bin/env bash
+
+// LEVEL=$1
+// DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )";
+
+// cd ${DIR};
+// mkdir -p ../build/;
+// cd ../build/;
+
+// if [ -d "arose.github.io" ]; then
+// 	cd ./arose.github.io/;
+// 	git fetch --all;
+// 	git reset --hard origin/master;
+// 	cd ../
+// else
+// 	git clone "https://github.com/arose/arose.github.io.git";
+// fi
+
+// if [ "$LEVEL" = "prerelease" ]; then
+// 	cd ./arose.github.io/ngldev/;
+// else
+// 	cd ./arose.github.io/ngl/;
+// fi
+
+// cp -r ${DIR}/../data/. ./data/;
+// cp -r ${DIR}/../examples/css/. ./css/;
+// cp -r ${DIR}/../examples/fonts/. ./fonts/;
+// cp -r ${DIR}/../examples/js/. ./js/;
+// cp -r ${DIR}/../examples/scripts/. ./scripts/;
+// cp -r ${DIR}/../build/docs/. ./api/;
+// cp -r ${DIR}/../build/gallery/. ./gallery/;
+// cp ${DIR}/../build/scriptsList.json ./scripts/list.json;
+
+// cp ${DIR}/../dist/ngl.js ./js/ngl.js;
+
+// cd ../;
+// git add -A;
+// if [ "$LEVEL" = "prerelease" ]; then
+// 	git commit -m "ngldev update";
+// else
+// 	git commit -m "ngl update";
+// fi
+// git push;
-- 
GitLab