Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
b5c4530
site: Forge redesign + CodeMirror-based daslang highlighting
borisbat May 13, 2026
76ed012
site: Playwright e2e scaffolding for /playground/
borisbat May 13, 2026
40d3a6c
playground: wire dropdowns + multi-file-ready selectSample
borisbat May 13, 2026
f05f91c
playground: multi-file tab strip + per-file Docs + autosave
borisbat May 13, 2026
9edf21c
playground: bundled multi-file Macros sample
borisbat May 13, 2026
1a979e1
playground: spec for the multi-file run flow
borisbat May 13, 2026
fdc3736
playground: ↗ share — compressed multi-file URL + is.gd shorten
borisbat May 13, 2026
fc23aad
playground: hero ↗ playground handoff backstop spec
borisbat May 13, 2026
3ecda76
playground: unified toolbar + draggable code/output splitter
borisbat May 13, 2026
cd2feda
site: link dasProfile source in benchmarks meta
borisbat May 13, 2026
5c8a737
blog: Disqus comments under each post
borisbat May 13, 2026
6f67001
site: mobile fallbacks for the hero + playground
borisbat May 13, 2026
6fe8b01
site: audit follow-up — mobile nav, blog grid, dead code + bits
borisbat May 13, 2026
58ff7c7
site/README: cover mobile gates, multi-file IDE, Disqus, Playwright s…
borisbat May 13, 2026
927e914
site: PR #2648 review — staging globs, rename regex, escapeHtml quotes
borisbat May 13, 2026
db94d1a
site: PR #2648 round 2 — daslang.io feed + MEMFS stale-file cleanup
borisbat May 13, 2026
86d5a67
site: PR #2648 round 3 — docs @import, hero-handoff race, dead legacy
borisbat May 13, 2026
7ff317c
site/playground: short-circuit mobile polling + gate prod playground …
borisbat May 13, 2026
5a60a96
site/playground: preserve shared `active` across late tab init + WASM…
borisbat May 13, 2026
0ba65e8
site: fix MIT→BSD 3-Clause footer + autosave on tab switch
borisbat May 13, 2026
a061bb6
Merge pull request #2648 from GaijinEntertainment/feat/website-forge-…
borisbat May 13, 2026
e49e6f3
docs: External modules section + dasImgui crosslink, news/cards rollup
borisbat May 14, 2026
52821ba
pages.yml: actually install Emscripten before building WASM
borisbat May 14, 2026
edc9017
Merge pull request #2649 from GaijinEntertainment/bbatkin/docs-extern…
borisbat May 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 78 additions & 1 deletion .github/workflows/pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@ jobs:
uses: actions/checkout@v4

- name: "Install Python dependencies"
run: pip install -r doc/requirements.txt
run: |
pip install -r doc/requirements.txt
pip install markdown

- name: "Install CMake and Ninja"
uses: lukka/get-cmake@latest
Expand Down Expand Up @@ -71,13 +73,40 @@ jobs:
working_directory: build/latex
continue_on_error: true

- name: "Build WASM (Emscripten) for /playground/ + /files/wasm/"
run: |
set -eux
cd web
# step0 only clones the emsdk wrapper — the toolchain itself
# (emsdk/upstream/emscripten/) lands via the install+activate pair
# that web/step1_emsdk_activate_linux.sh does locally. Without these,
# cmake's -DCMAKE_TOOLCHAIN_FILE points at a path that doesn't
# exist yet and the WASM build silently fails under continue-on-error.
bash step0_emsdk_install.sh
./emsdk/emsdk install latest
./emsdk/emsdk activate latest
bash -c "source emsdk/emsdk_env.sh && \
mkdir -p build && cd build && \
cmake -DCMAKE_BUILD_TYPE=Release -G Ninja \
-DCMAKE_TOOLCHAIN_FILE=../emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake ../ && \
ninja"
continue-on-error: true

- name: "Fetch dasProfile benchmark JSON"
run: |
set -eux
curl -sSL -o site/files/profile_results.json \
https://raw.githubusercontent.com/borisbat/dasProfile/main/profile_results.json
continue-on-error: true

- name: "Stage site for deployment"
run: |
set -eux
mkdir -p _site

# Static landing page and assets
cp site/index.html _site/
cp site/downloads.html _site/
cp site/robots.txt _site/
cp -r site/files _site/files

Expand All @@ -88,6 +117,54 @@ jobs:
cp build/latex/daslang.pdf _site/doc/daslang.pdf || echo "WARNING: daslang.pdf not found"
cp build/latex/daslangstdlib.pdf _site/doc/daslangstdlib.pdf || echo "WARNING: daslangstdlib.pdf not found"

# Blog + news + changelist (regenerated each publish). Pin --site-url
# explicitly so feed.xml entries point at the production domain even
# if the default in build_blog.py drifts.
python3 site/blog/build_blog.py \
--posts site/blog/_posts \
--news site/_news \
--template site/blog/template.html \
--site-url https://daslang.io \
--out _site/

# Playground: vendor web/ui IDE + WASM artifacts.
# The WASM build step has continue-on-error so docs/blog still publish
# when emsdk hiccups. The cost of that resilience is partial state:
# web/output may exist without the daslang_static.{js,wasm} artifacts.
# Refuse to stage a half-built playground in that case — Pages preserves
# the previously-deployed /playground/, so the visible Run button keeps
# working instead of 404'ing its runtime.
if [ -f web/output/daslang_static.js ] && [ -f web/output/daslang_static.wasm ]; then
mkdir -p _site/playground _site/files/wasm
# Copy IDE source files (CodeMirror, jQuery, main.js/css, etc.)
cp -r web/ui/src/* _site/playground/
# Copy WASM artifacts — known-present after the guard above.
cp web/output/daslang_static.js _site/playground/
cp web/output/daslang_static.wasm _site/playground/
cp web/output/daslang_static.js _site/files/wasm/
cp web/output/daslang_static.wasm _site/files/wasm/
# Copy sample data if present
cp -r web/ui/samples _site/playground/samples 2>/dev/null || true
# Our Forge-skinned playground/index.html + skin CSS + init shim take precedence.
# CodeMirror bundle (codemirror.min.js/css, simple-mode.js, daslang-*.js,
# cm-forge.css) is served from /files/cm/ — copied via `cp -r site/files`
# earlier, so nothing extra to copy here.
cp site/playground/index.html _site/playground/index.html
cp site/playground/forge-skin.css _site/playground/
# Forge playground scripts (init shim + tabs + share + splitter).
# Glob so future playground-*.js additions land automatically.
cp site/playground/playground-*.js _site/playground/
else
# WASM artifacts missing. actions/deploy-pages publishes _site as
# a complete snapshot (no layering over the prior deploy), so an
# absent _site/playground/ would 404 the route. Stage a
# placeholder instead — the URL keeps resolving to something
# useful while we re-roll the runtime.
echo "WARNING: daslang_static.{js,wasm} missing under web/output — staging placeholder /playground/."
mkdir -p _site/playground
cp site/playground/placeholder.html _site/playground/index.html
fi

# GitHub Pages control files
touch _site/.nojekyll

Expand Down
100 changes: 100 additions & 0 deletions .github/workflows/playground-e2e.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
name: Playground e2e (no WASM)

# Fast PR gate: builds the site without WASM (skips the 5-10 min Emscripten
# step) and runs the Playwright suite minus any specs tagged `@wasm`. The full
# WASM suite is reserved for the master-only workflow (forthcoming).

on:
pull_request:
paths:
- 'site/**'
- 'web/ui/**'
- '.github/workflows/playground-e2e.yml'
push:
branches-ignore: [master]
paths:
- 'site/**'
- 'web/ui/**'
- '.github/workflows/playground-e2e.yml'
workflow_dispatch:

jobs:
playwright:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
cache-dependency-path: site/tests/playground/package-lock.json

- uses: actions/setup-python@v5
with:
python-version: '3.x'

- name: "Install Python build deps"
run: pip install markdown

- name: "Stage _site (no WASM)"
run: |
set -eux
mkdir -p _site/playground

# Static landing page + assets
cp site/index.html _site/
cp site/downloads.html _site/ || true
cp -r site/files _site/files

# Playground: vendor web/ui IDE (no WASM artifacts)
cp -r web/ui/src/* _site/playground/
cp -r web/ui/samples _site/playground/samples 2>/dev/null || true
cp site/playground/index.html _site/playground/index.html
cp site/playground/forge-skin.css _site/playground/
# Forge playground scripts (init shim + tabs + share + splitter).
# Glob so future playground-*.js additions land automatically.
cp site/playground/playground-*.js _site/playground/

# Blog + news (template change validation). Match the production
# site-url so feed.xml output matches what pages.yml would emit.
python3 site/blog/build_blog.py \
--posts site/blog/_posts \
--news site/_news \
--template site/blog/template.html \
--site-url https://daslang.io \
--out _site/

touch _site/.nojekyll
ls _site _site/playground

- name: "Install Playwright"
working-directory: site/tests/playground
run: |
npm ci
npx playwright install --with-deps chromium

- name: "Serve _site and run tests"
working-directory: site/tests/playground
run: |
set -eux
python3 -m http.server 8765 --directory "${GITHUB_WORKSPACE}/_site" &
SERVER_PID=$!
# Wait for server to accept connections.
for _ in $(seq 1 30); do
if curl -fs http://localhost:8765/playground/ > /dev/null; then break; fi
sleep 0.2
done
BASE_URL=http://localhost:8765 npx playwright test --grep-invert '@wasm'
STATUS=$?
kill $SERVER_PID || true
exit $STATUS

- name: "Upload Playwright report on failure"
if: failure()
uses: actions/upload-artifact@v4
with:
name: playwright-report
path: site/tests/playground/playwright-report/
retention-days: 7
9 changes: 8 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,11 @@ mouse-data/*.db-wal
mouse-data/*.db-shm

modules/dasSFML/libsfml/
site/
# site/doc/ is the Sphinx HTML output deployed by .github/workflows/pages.yml.
# Source for site/* (forge.css, blog/_posts/*.md, _news/*.md, etc.) IS tracked;
# the build-time output (blog/*.html, news/*.html, files/wasm/, etc.) is
# ignored via site/.gitignore.
site/doc/
doc/sphinx-build/
doc/sphinx-build-latex/
doc/source/stdlib/generated/
Expand All @@ -58,6 +62,7 @@ web/output/daScript.wasm
web/output/.idea/

yzg.code-workspace
daScript.code-workspace

examples/wip.das
examples/wip_macro.das
Expand All @@ -70,6 +75,7 @@ src/parser/ds_parser.output
.mcp.json
sgconfig.yml
utils/mcp/mcp_server.log
.playwright-mcp/

# Emscripten SDK (local install)
emsdk/
Expand Down Expand Up @@ -118,3 +124,4 @@ modules/dasUnitTest/dasModuleUnitTest_debug.pdb
build-ubsan/.ninja_log
doc/sphinx-build-latex/environment.pickle
opencode.json
test-results/
Loading
Loading