From 2277b5b284afec9a13620e8d8ffaa9673f5b3ccc Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Thu, 16 Jul 2020 10:13:45 -0600 Subject: [PATCH] Implement docusaurus build, deployment and CI hooks (#129) * Implement docs build, deployment and CI hooks * Fixup travis config * Update references to final domain choice --- .travis.yml | 69 ++++++++++------ .travis/affects.sh | 20 +++++ .travis/install-program-deps.sh | 16 ++++ ci/env.sh | 92 +++++++++++++++++++++ docs/.gitignore | 22 +++++ docs/.travis/before_install.sh | 9 ++ docs/.travis/script.sh | 4 + docs/README.md | 36 ++++++++ docs/babel.config.js | 3 + docs/build.sh | 17 ++++ docs/docusaurus.config.js | 67 +++++++++++++++ docs/package.json | 39 +++++++++ docs/publish-docs.sh | 28 +++++++ docs/sidebars.js | 10 +++ docs/src/css/custom.css | 69 ++++++++++++++++ docs/src/introduction.md | 10 +++ docs/src/memo.md | 6 ++ docs/src/token-swap.md | 10 +++ docs/src/token.md | 10 +++ docs/static/img/android-chrome-192x192.png | Bin 0 -> 2217 bytes docs/static/img/android-chrome-512x512.png | Bin 0 -> 6622 bytes docs/static/img/apple-touch-icon.png | Bin 0 -> 1998 bytes docs/static/img/dark-mark-white.inline.svg | 5 ++ docs/static/img/favicon-16x16.png | Bin 0 -> 204 bytes docs/static/img/favicon-32x32.png | Bin 0 -> 319 bytes docs/static/img/favicon.ico | Bin 0 -> 15406 bytes docs/static/img/logo-horizontal-dark.svg | 12 +++ docs/static/img/logo-horizontal.svg | 12 +++ docs/static/img/logo.svg | 6 ++ 29 files changed, 546 insertions(+), 26 deletions(-) create mode 100755 .travis/affects.sh create mode 100755 .travis/install-program-deps.sh create mode 100644 ci/env.sh create mode 100644 docs/.gitignore create mode 100644 docs/.travis/before_install.sh create mode 100644 docs/.travis/script.sh create mode 100644 docs/README.md create mode 100644 docs/babel.config.js create mode 100755 docs/build.sh create mode 100644 docs/docusaurus.config.js create mode 100644 docs/package.json create mode 100755 docs/publish-docs.sh create mode 100644 docs/sidebars.js create mode 100644 docs/src/css/custom.css create mode 100644 docs/src/introduction.md create mode 100644 docs/src/memo.md create mode 100644 docs/src/token-swap.md create mode 100644 docs/src/token.md create mode 100644 docs/static/img/android-chrome-192x192.png create mode 100644 docs/static/img/android-chrome-512x512.png create mode 100644 docs/static/img/apple-touch-icon.png create mode 100644 docs/static/img/dark-mark-white.inline.svg create mode 100644 docs/static/img/favicon-16x16.png create mode 100644 docs/static/img/favicon-32x32.png create mode 100644 docs/static/img/favicon.ico create mode 100644 docs/static/img/logo-horizontal-dark.svg create mode 100644 docs/static/img/logo-horizontal.svg create mode 100644 docs/static/img/logo.svg diff --git a/.travis.yml b/.travis.yml index 32821ff6..85e44a56 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,34 +1,51 @@ dist: bionic sudo: required -language: rust -services: -- docker -cache: - cargo: true - directories: - - "~/.npm" + notifications: email: false -install: - - cargo --version - - rustup install nightly - - rustup component add clippy --toolchain nightly - - docker --version - - wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - - - sudo apt-add-repository "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-10 main" - - sudo apt-get update - - sudo apt-get install -y clang-7 --allow-unauthenticated - - sudo apt-get install -y openssl --allow-unauthenticated - - sudo apt-get install -y libssl-dev --allow-unauthenticated - - sudo apt-get install -y libssl1.1 --allow-unauthenticated - - clang-7 --version - - nvm install node - - node --version +cache: + cargo: true + directories: + - "~/.npm" + +services: + - docker jobs: include: - - stage: "Test Programs" - script: ./ci/memo.sh - - script: ./ci/token-swap.sh - - script: ./ci/token.sh + - name: "Test Memo" + language: rust + install: + source .travis/install-program-deps.sh + script: + ./ci/memo.sh + + - name: "Test Token-Swap" + language: rust + install: + source .travis/install-program-deps.sh + script: + ./ci/token-swap.sh + + - name: "Test Token Program" + language: rust + install: + source .travis/install-program-deps.sh + script: + ./ci/token.sh + + + # docs pull request or commit to master + - name: "Build Docs" + if: type IN (push, pull_request) AND branch = master + language: node_js + node_js: + - "node" + + before_install: + - .travis/affects.sh docs/ .travis || travis_terminate 0 + - cd docs/ + - source .travis/before_install.sh + script: + - source .travis/script.sh diff --git a/.travis/affects.sh b/.travis/affects.sh new file mode 100755 index 00000000..0d6bf388 --- /dev/null +++ b/.travis/affects.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +# +# Check if files in the commit range match one or more prefixes +# + +( + set -x + git diff --name-only "$TRAVIS_COMMIT_RANGE" +) + +for file in $(git diff --name-only "$TRAVIS_COMMIT_RANGE"); do + for prefix in "$@"; do + if [[ $file =~ ^"$prefix" ]]; then + exit 0 + fi + done +done + +echo "No modifications to $*" +exit 1 diff --git a/.travis/install-program-deps.sh b/.travis/install-program-deps.sh new file mode 100755 index 00000000..9e13b172 --- /dev/null +++ b/.travis/install-program-deps.sh @@ -0,0 +1,16 @@ +# |source| this file + +cargo --version +rustup install nightly +rustup component add clippy --toolchain nightly +docker --version +wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - +sudo apt-add-repository "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-10 main" +sudo apt-get update +sudo apt-get install -y clang-7 --allow-unauthenticated +sudo apt-get install -y openssl --allow-unauthenticated +sudo apt-get install -y libssl-dev --allow-unauthenticated +sudo apt-get install -y libssl1.1 --allow-unauthenticated +clang-7 --version +nvm install node +node --version diff --git a/ci/env.sh b/ci/env.sh new file mode 100644 index 00000000..d075b259 --- /dev/null +++ b/ci/env.sh @@ -0,0 +1,92 @@ +# +# Normalized CI environment variables +# +# |source| me +# + +if [[ -n $CI ]]; then + export CI=1 + if [[ -n $TRAVIS ]]; then + export CI_BRANCH=$TRAVIS_BRANCH + export CI_BASE_BRANCH=$TRAVIS_BRANCH + export CI_BUILD_ID=$TRAVIS_BUILD_ID + export CI_COMMIT=$TRAVIS_COMMIT + export CI_JOB_ID=$TRAVIS_JOB_ID + if [[ $TRAVIS_PULL_REQUEST != false ]]; then + export CI_PULL_REQUEST=true + else + export CI_PULL_REQUEST= + fi + export CI_OS_NAME=$TRAVIS_OS_NAME + export CI_REPO_SLUG=$TRAVIS_REPO_SLUG + export CI_TAG=$TRAVIS_TAG + elif [[ -n $BUILDKITE ]]; then + export CI_BRANCH=$BUILDKITE_BRANCH + export CI_BUILD_ID=$BUILDKITE_BUILD_ID + export CI_COMMIT=$BUILDKITE_COMMIT + export CI_JOB_ID=$BUILDKITE_JOB_ID + # The standard BUILDKITE_PULL_REQUEST environment variable is always "false" due + # to how solana-ci-gate is used to trigger PR builds rather than using the + # standard Buildkite PR trigger. + if [[ $CI_BRANCH =~ pull/* ]]; then + export CI_BASE_BRANCH=$BUILDKITE_PULL_REQUEST_BASE_BRANCH + export CI_PULL_REQUEST=true + else + export CI_BASE_BRANCH=$BUILDKITE_BRANCH + export CI_PULL_REQUEST= + fi + export CI_OS_NAME=linux + if [[ -n $BUILDKITE_TRIGGERED_FROM_BUILD_PIPELINE_SLUG ]]; then + # The solana-secondary pipeline should use the slug of the pipeline that + # triggered it + export CI_REPO_SLUG=$BUILDKITE_ORGANIZATION_SLUG/$BUILDKITE_TRIGGERED_FROM_BUILD_PIPELINE_SLUG + else + export CI_REPO_SLUG=$BUILDKITE_ORGANIZATION_SLUG/$BUILDKITE_PIPELINE_SLUG + fi + # TRIGGERED_BUILDKITE_TAG is a workaround to propagate BUILDKITE_TAG into + # the solana-secondary pipeline + if [[ -n $TRIGGERED_BUILDKITE_TAG ]]; then + export CI_TAG=$TRIGGERED_BUILDKITE_TAG + else + export CI_TAG=$BUILDKITE_TAG + fi + elif [[ -n $APPVEYOR ]]; then + export CI_BRANCH=$APPVEYOR_REPO_BRANCH + export CI_BUILD_ID=$APPVEYOR_BUILD_ID + export CI_COMMIT=$APPVEYOR_REPO_COMMIT + export CI_JOB_ID=$APPVEYOR_JOB_ID + if [[ -n $APPVEYOR_PULL_REQUEST_NUMBER ]]; then + export CI_PULL_REQUEST=true + else + export CI_PULL_REQUEST= + fi + if [[ $CI_LINUX = True ]]; then + export CI_OS_NAME=linux + else + export CI_OS_NAME=windows + fi + export CI_REPO_SLUG=$APPVEYOR_REPO_NAME + export CI_TAG=$APPVEYOR_REPO_TAG_NAME + fi +else + export CI= + export CI_BRANCH= + export CI_BUILD_ID= + export CI_COMMIT= + export CI_JOB_ID= + export CI_OS_NAME= + export CI_PULL_REQUEST= + export CI_REPO_SLUG= + export CI_TAG= +fi + +cat <0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/docs/publish-docs.sh b/docs/publish-docs.sh new file mode 100755 index 00000000..2a19ba0d --- /dev/null +++ b/docs/publish-docs.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +set -ex + +if [[ -d .vercel ]]; then + rm -r .vercel +fi + +CONFIG_FILE=vercel.json +PROJECT_NAME=spl-solana-com + +PRODUCTION= +if [[ -n "$CI" ]]; then + PRODUCTION=--prod +fi + +cat > "$CONFIG_FILE" <*ibGYO`{DlO?utBQuspz)m8q+XqRcePC#k5&m1lpunjMP}MjV>`5q z)}%_P*R);}L>Mhvuh6N^sz<{fo*w7?6=T;yQ&&~={*!n$06;y?^W0xAl1kU62(=Fqjrul561AuacFO?Z zsQFMGBd4~~zZlN(H-KLQ1NGvv3gEgax6M3getuqgul_d>T|$B(}r!7^HshcXYorJCx}FNMh6oRyE#_G=9$qdPf}by#{ALG4rrySri$m+ zRk$Ge>i0BYa9$?9UM2_breL`94`faB3tq0$RL)Dvo;ZRDptex|;st58 z*+LcE*C(G+`{uKX?ezceZUX zp&;*_bfIAi*de`udo}2b0U>nkSMVU`v;c0|$fosAYru|9Q{n4q)bX_8;Ac)OAT z%ijKbp246MeZK3m@U$G(6i%`ANsVd*>`xp)x1N#1FKD0hp1`1@^|OO&1g05_`oFL& znxbN=-YxG|nCqgQt%Uh}!9k#-Gy2laC&IUm&N}vyv5-3HW!$fGbmzjL%)NT{^#SC( zgE*_-Q`XN`wpFCM00fIFp%@3WB&&aDDq+lIQ3wue2cVcVejOxlb%FY&X}Mc&;II~R zbZEq7929pggIjOk`I5$)W$om$YxLTCSw)~Yd~Dlbmhqj^N&Cj>p5SVg!(0vL%^%nv z`y5-|1R9wQ9T#^y1@Q(;ISaM*7Vv}y9lxW;*8_KD8 z>!>j9YO7e!Ga{$F9eI~7`J`LHLQKu2dS=FKkBkonZ4z_V=>~i`8kKL=u*Cn2M>oOt<8g(o)A^O#0bE+DcdMT;GM6lw^=xw1U&0y=`?sG~#iw%xQP`!Gdz^b>x z><&93{BNrl)wK_MTg7O>ek+Ckc$K6yjC4<`+}GH>yCGP`dF|+kb-AY#Nbb^-5PT}R zJJ&W4^IcnV$Rh7!y3rlApBMXwi6t|=7*xJxvs(&2vdw2+LVX6`Rd|~L-mWZ(uFWzh zzPT?4K4cpFXW;o3bx#u;duNSks1J1o_jtAI*Zl>V-w2a)9%GK6oosCg@!U6_eVVckflL=BWMI7=lSiCQkA?{`I;gpov3YWXaz1t zvkr5)uCIDtsmFfTk*~>IJxVzf@25-CvrcpW^U7@31aShT?dt7jL+yO=8=9}*qinc# zF`3I4q4yEl$^|9b!8+0*_$TCeCsH3{^&FC&5MX=7Ar|tr<-13A!C_3m2twB(7KqSc zFv#)T_jA0(E2r%OxY3l~N5Ai|eFb^Wfp>T7TDaYdd zPszJw*C4|Z3nl=Oegb>bLy?P{P0mtKagY-dx?ii$3A=<7r3L@4YssZ4u$>)_Ee-PUhNfD%1h)+@--XLmNH=hiTCk2M(`CDbm`pCnD9zkP;-r9o zZM8bA*ibrf_Q0HB&JJcQniL*%sQBh{+p&%TWIhaJG&KZ`u(hv-skF(A-Dbo%tIwL literal 0 HcmV?d00001 diff --git a/docs/static/img/android-chrome-512x512.png b/docs/static/img/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..598b8a1722b5adddce9eb9131ec8d654e5c0666b GIT binary patch literal 6622 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 literal 0 HcmV?d00001 diff --git a/docs/static/img/apple-touch-icon.png b/docs/static/img/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..282b79dee8a99ba17ed7666ff653b8cbbfd1924d GIT binary patch literal 1998 zcmdT_`B&0e6vs+va+J)9#sxJSb<%RO(A*&0kQSBFOw?+y5_4%WqzNI*Q$j|TspOKH z7H)yLkVi`FOmte5Fg4edBsXx20yTt~uk#N~KhFH{-aF@=`|f?8`}y2^8Nq=V!&RoM zKp>DIHo$j3a5gNhm0)1^5`mpTAV?0@7aelGaC$J}dg!Qy{%4-pEosB9;Qa@#VG##0 z%L6M{-0Co(SD?`bk4+5;#1}homF@c<5-f@Ps+DYGj?HlC%DV%xdmqLY_uEn{uR;no zm@pBgF1Uc`1fH|aqm+fLIb$~s`QTh*&+}R86<%Fmy%;Ic>%AB5GNRYE@%8dMep!&; zGd4kwuE)ZkIc9mLhHv^4R3GpKbmG?k$RK-^sVC*;2sKE;TzEG}f82z;)#h*?d$!?m z8tvO3gtvXZddreKu3bKK!CFz=tWJz`op1%yuWVP@yxRA~&y(CDkl+o~s+aT^THmsJ zmb(&74W)e)rA5z)b_m(nAV!uUe&2AQL*HjGX$zQ2gq_i{=>GSdkQk0_?I@U#a!5j& zOG7pk96ERD)b=+W_H@Hm26RsLgIB~nIP-C zM+mIA+Ayp<<0^l03Zk7Yrz2Q$199jRzYnzIJZ@W#g>rF`KI>?6VL&ZS3Rx?(2s768 zm(98_qBEh!aZY=56LM*iYPywCYyFSkS1ZrV^JLI@>5rJ#v)j~{OWS+zJ2~>jh1-x2sWUPR-Mwj9(IW-N|&fJzo*va)qj*V)R z!`b`+yivY|v}WGKVQZkoTZZc7BU&AqX@{V-uLR48Jtc6F*VNyfS}RWFXn79Xlgpip*Ar>pkzMS5rX8jr;4 zxp}aI*Mt^j!&b`EZ{B7kNXO&8q}2GpKb{A>E)7C&qPQCndD(XhK0RpWh#L^3PNg646z`)Q6M8 zf!srS*ey|AQ9XqAsnrnjny@1yI6y6ScMqy0t8U=oB@qxXJqI?~x+IHuJdP=`Z39g2 zqt>!SsvN!}$5!!tvPu;Y1pj!fc`i=+#tm?5tGw?(3Z>#_JQ0Q@EGT?bVI$n)O z1ls37=x2{wMOD5Z9hWz}7Vd${C|nW1iJil@BEC8E@_F@E>Pw#K4iBM+2g5;70@Q=; zKC7aOyOxL+87bs8!gVk?=4M7|0P3_FtzWdKb$Rw^uf5`v8KW=8c>L|7M5V}TtjOmB zIhuqtVnOUFUC}5&5fXQGEA_(;Ghuy! zO51&+Jsr}C9^$YC8uNWb + + + + diff --git a/docs/static/img/favicon-16x16.png b/docs/static/img/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..b1cb5f954825a886ca8f9667bb525d848a117f40 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`lRaG=Lo9le6MpRfX75^IAyu&O zyS?*9`MjEi;{A-~>i^RPp8h_6;6Q`yZplCCKlaJ=Gv=)F`YK5baf$;$U*?<;%f4%MI2PIv!H z-(f$Oi9MxyLjKM*C+gdFU)Jzpw$A!*{6&3IpSlWA+Wo+DXJv5{_kZah%+&bT>o0F& z7JK$DJt0X&pLc`N|MZAZpH__-vwim|N6h$dyhdY@lT^fn-}4W8ez$L)%=dDKUWtaf zlSG~2cl*P;HvQ+x_Vzq3UZq)bVDioXk|8Q5^d|_(XcQdSZ24dE%90b?@7(@jfB3to zh{b{PQ)*8C_4#l7C&DvP>cXtH3wVoO}=y9To|xpyo%;?>P7vWQFce_Vw2`fzqdj$JlA0hI`ia8}5QKGC|{K zgvZ7f>$;+$&Uc`FcdT*di+%mWPe5aQ;kgq|v-3bs?~pz!sI-Pt9}c&%5H=`8@KEB6 zpOM3m_+)hrH(rgu_G8`fWB3Vapz8zZ*b4=`1fBiqp2v9w)^iTWv#@h{=(*Gle068T ziPyn-H}uX(@3Q9Tb(mX2TwC4SUV+9cZuOqvx?RRmq^Q2&u5GLF z_%EN=T?5H?L&RtXwLEk0|B_NQ-AO!3n*=)g)SV4|KR^o#)ot)iVIH2lvmx*uG(p@5L(aWSR?k=P zGT1V&9-jg#Y31BL=Vf&IPxRrRgdkX<3P1n z^vnT$ykAho`(81l^w^%90jj&IkN3s_kWbV4A!Pz{b5;-Up>cHjJ!t(QP*I(?SjF$# zdsDCNAs@_LpT3>AJi*^4~}pOGx@(eIa>6;1c+i9K=2>_fNSF(B(sX+zig zU%rjpoQZJKkCe-IYRyHSzcj6# + + + + + + + + + + + diff --git a/docs/static/img/logo-horizontal.svg b/docs/static/img/logo-horizontal.svg new file mode 100644 index 00000000..2cab6185 --- /dev/null +++ b/docs/static/img/logo-horizontal.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/static/img/logo.svg b/docs/static/img/logo.svg new file mode 100644 index 00000000..4e78f610 --- /dev/null +++ b/docs/static/img/logo.svg @@ -0,0 +1,6 @@ + + + + + +