Add auto deployment infrastructure for website

This commit is contained in:
Keavon Chambers
2023-08-16 12:58:42 -07:00
parent 0a7a69b315
commit a871ea6d69
9 changed files with 247 additions and 136 deletions
+18 -25
View File
@@ -1,4 +1,4 @@
name: Continuous Integration
name: "Editor: CI & Dev"
on:
push:
@@ -24,28 +24,29 @@ jobs:
SCCACHE_DIR: /var/lib/github-actions/.cache
steps:
- uses: actions/checkout@v3
- name: 📥 Clone and checkout repository
uses: actions/checkout@v3
- name: 🔧 Clear wasm-bindgen cache
- name: 🗑 Clear wasm-bindgen cache
run: rm -r ~/.cache/.wasm-pack
- name: 🔧 Set up Node
- name: 🟢 Set up Node
uses: actions/setup-node@v3
with:
node-version: '16'
node-version: "16"
- name: 🚧 Install Node dependencies
run: |
cd frontend
npm ci
- name: 🔼 Update Rust to latest stable
- name: 🦀 Update Rust to latest stable
run: |
rustc --version
rustup update stable
rustc --version
- name: Replace template in <head> of index.html
- name: ✂ Replace template in <head> of index.html
run: |
# Remove the INDEX_HTML_HEAD_REPLACEMENT environment variable for build links (not master deploys)
git rev-parse --abbrev-ref HEAD | grep master > /dev/null || export INDEX_HTML_HEAD_REPLACEMENT=""
@@ -58,7 +59,7 @@ jobs:
cd frontend
mold -run npm run build
- name: Publish
- name: 📤 Publish to Cloudflare Pages
id: cloudflare
uses: cloudflare/pages-action@1
continue-on-error: true
@@ -89,12 +90,12 @@ jobs:
run: |
mold -run cargo nextest run
#miri:
# miri:
# runs-on: self-hosted
#
# steps:
# - uses: actions/checkout@v3
#
# - name: 🧪 Run Rust miri
# run: |
# mold -run cargo +nightly miri nextest run -j32
@@ -102,24 +103,16 @@ jobs:
cargo-deny:
runs-on: ubuntu-latest
strategy:
matrix:
checks:
- 'crate security advisories'
- 'crate license compatibility'
# Prevent sudden announcement of a new advisory from failing ci:
continue-on-error: ${{ matrix.checks == 'crate security advisories' }}
steps:
- uses: actions/checkout@v3
- name: 📥 Clone and checkout repository
uses: actions/checkout@v3
- uses: EmbarkStudios/cargo-deny-action@v1
if: matrix.checks == 'crate security advisories'
- name: 🔒 Check crate security advisories
uses: EmbarkStudios/cargo-deny-action@v1
with:
command: check advisories
- uses: EmbarkStudios/cargo-deny-action@v1
if: matrix.checks == 'crate license compatibility'
- name: 📜 Check crate license compatibility
uses: EmbarkStudios/cargo-deny-action@v1
with:
command: check bans licenses sources
+10 -9
View File
@@ -1,9 +1,9 @@
name: Deploy release
name: "Editor: Production (Latest Stable)"
on:
push:
tags:
- 'latest-stable'
- "latest-stable"
env:
CARGO_TERM_COLOR: always
@@ -21,28 +21,29 @@ jobs:
INDEX_HTML_HEAD_REPLACEMENT: <script defer data-domain="editor.graphite.rs" data-api="https://graphite.rs/visit/event" src="https://graphite.rs/visit/script.outbound-links.file-downloads.js"></script>
steps:
- uses: actions/checkout@v3
- name: 📥 Clone and checkout repository
uses: actions/checkout@v3
- name: 🔧 Clear wasm-bindgen cache
- name: 🗑 Clear wasm-bindgen cache
run: rm -r ~/.cache/.wasm-pack
- name: 🔧 Set up Node
- name: 🟢 Set up Node
uses: actions/setup-node@v3
with:
node-version: '16'
node-version: "16"
- name: 🚧 Install Node dependencies
run: |
cd frontend
npm ci
- name: 🔼 Update Rust to latest stable
- name: 🦀 Update Rust to latest stable
run: |
rustc --version
rustup update stable
rustc --version
- name: Replace template in <head> of index.html
- name: ✂ Replace template in <head> of index.html
run: |
sed -i "s|<!-- INDEX_HTML_HEAD_REPLACEMENT -->|$INDEX_HTML_HEAD_REPLACEMENT|" frontend/index.html
@@ -53,7 +54,7 @@ jobs:
cd frontend
mold -run npm run build
- name: Publish
- name: 📤 Publish to Cloudflare Pages
id: cloudflare
uses: cloudflare/pages-action@1
with:
+94
View File
@@ -0,0 +1,94 @@
name: "Website"
on:
push:
branches:
- master
paths:
- website/**
pull_request:
branches:
- master
paths:
- website/**
env:
CARGO_TERM_COLOR: always
INDEX_HTML_HEAD_REPLACEMENT: <script defer data-domain="graphite.rs" data-api="/visit/event" src="/visit/script.outbound-links.file-downloads.js"></script>
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
deployments: write
pull-requests: write
steps:
- name: 📥 Clone and checkout repository
uses: actions/checkout@v3
- name: 🕸 Install Zola
uses: taiki-e/install-action@v2
with:
tool: zola@0.17.2
- name: ✂ Replace template in <head> of index.html
run: |
# Remove the INDEX_HTML_HEAD_REPLACEMENT environment variable for build links (not master deploys)
git rev-parse --abbrev-ref HEAD | grep master > /dev/null || export INDEX_HTML_HEAD_REPLACEMENT=""
sed -i "s|<!-- INDEX_HTML_HEAD_REPLACEMENT -->|$INDEX_HTML_HEAD_REPLACEMENT|" website/templates/base.html
- name: 🌐 Build Graphite website with Zola
run: |
cd website
zola build
- name: 🔍 Check if `website/other` directory changed
uses: dorny/paths-filter@v2
id: changes
with:
filters: |
other:
- "website/other/**"
- name: 💿 Restore cache of `website/other/dist` directory, if available and `website/other` didn't change
if: steps.changes.outputs.other != 'true'
id: cache-website-other-dist
uses: actions/cache/restore@v3
with:
path: website/other/dist
key: website-other-dist-${{ runner.os }}
- name: 🟢 Set up Node only if we are going to build in the next step
if: steps.cache-website-other-dist.outputs.cache-hit != 'true'
uses: actions/setup-node@v3
with:
node-version: "16"
- name: 📁 Build `website/other` directory only if changed or not cached
if: steps.cache-website-other-dist.outputs.cache-hit != 'true'
id: build-website-other
run: |
sh website/other/build.sh
- name: 💾 Save cache of `website/other/dist` directory if it was built above
if: steps.cache-website-other-dist.outputs.cache-hit != 'true'
uses: actions/cache/save@v3
with:
path: website/other/dist
key: ${{ steps.cache-website-other-dist.outputs.cache-primary-key }}
- name: 🚚 Move `website/other/dist` contents to `website/public`
run: |
mv website/other/dist/* website/public
- name: 📤 Publish to Cloudflare Pages
id: cloudflare
uses: cloudflare/pages-action@1
continue-on-error: true
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
projectName: graphite-website
directory: website/public
gitHubToken: ${{ secrets.GITHUB_TOKEN }}
+15
View File
@@ -0,0 +1,15 @@
{
"singleQuote": false,
"useTabs": true,
"tabWidth": 4,
"printWidth": 200,
"overrides": [
{
"files": ["*.yml", "*.yaml"],
"options": {
"useTabs": false,
"tabWidth": 2
}
}
]
}
+7 -5
View File
@@ -18,6 +18,12 @@
"source.fixAll.eslint": true
},
"editor.formatOnSave": true,
// Configured in `.prettierrc`
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[yaml][github-actions-workflow]": {
"editor.formatOnSave": true,
// Configured in `.prettierrc`
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
// Handlebars: don't save on format
@@ -37,9 +43,5 @@
// VS Code config
"html.format.wrapLineLength": 200,
"files.eol": "\n",
"files.insertFinalNewline": true,
"prettier.singleQuote": false,
"prettier.useTabs": true,
"prettier.tabWidth": 4,
"prettier.printWidth": 200
"files.insertFinalNewline": true
}
@@ -77,6 +77,6 @@ Graphene should recognize when a certain intermediate result already lives in RA
# Conclusion
Presently, we are [experimenting](https://github.com/GraphiteEditor/NodeGraphExperiments) with CPU and GPU node composition for the beginnings of the Graphene visual programming language. Most of what was described in this post will likely evolve as we get further into the implementation stage and when we learn more from experts in the fields of computer science that Graphene overlaps with.
Presently, we are experimenting with CPU and GPU node composition for the beginnings of the Graphene visual programming language. Most of what was described in this post will likely evolve as we get further into the implementation stage and when we learn more from experts in the fields of computer science that Graphene overlaps with.
If you have a background or interest in programming language design, functional programming, ECS and data-oriented design, scheduling, distributed computing, general-purpose GPU compute (GPGPU), or high-performance computing (HPC), we'd love to have your ideas steer our work. Or better yet, join the team to make this dream a reality. We discuss most of our architecture and designs on our [Discord server](https://discord.graphite.rs) through text and sometimes voice. Please come say hi!
@@ -18,7 +18,7 @@ module.exports = {
},
output: {
path: path.resolve(__dirname, "public/build"),
publicPath: "/build/",
publicPath: "./build/",
filename: "[name].js"
},
module: {
+14 -8
View File
@@ -1,21 +1,27 @@
#!/bin/sh
echo 🔧 Install Rust
echo 📁 Create output directory in 'website/other/dist'
cd website/other
mkdir dist
echo 🔧 Install the latest Rust
curl https://sh.rustup.rs -sSf | sh -s -- -y
export PATH=$PATH:/opt/buildhome/.cargo/bin
rustup update stable
echo rustc version:
rustc --version
echo 🚧 Install Node dependencies
echo 🚧 Print installed node and npm versions
echo node version:
node --version
echo npm version:
npm --version
echo 👷 Build Bezier-rs demos to 'website/other/dist/libraries/bezier-rs'
mkdir dist/libraries
mkdir dist/libraries/bezier-rs
cd bezier-rs-demos
npm ci
echo 👷 Build Bezier-rs Demos
export NODE_ENV=production
npm run build-prod-unix
mkdir ../../public/libraries
mv public ../../public/libraries/bezier-rs
NODE_ENV=production npm run build-prod-unix
mv public/* ../dist/libraries/bezier-rs
cd ..
+1 -1
View File
@@ -27,7 +27,7 @@
{% endif %}
<script src="/js/text-justification.js"></script>
<script src="/js/navbar.js"></script>
<script defer data-domain="graphite.rs" data-api="/visit/event" src="/visit/script.outbound-links.file-downloads.js"></script>
<!-- INDEX_HTML_HEAD_REPLACEMENT -->
<style>
.balance-text {
visibility: hidden;