Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
12 changes: 9 additions & 3 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ jobs:
- cppjswasm
- uitk-svelte
- uitk-webawesome
- site-sveltekit
- site-webawesome
os:
- ubuntu-latest
- macos-latest
Expand All @@ -41,6 +43,10 @@ jobs:
os: macos-latest
- template: uitk-webawesome
os: macos-latest
- template: site-sveltekit
os: macos-latest
- template: site-webawesome
os: macos-latest
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
Expand Down Expand Up @@ -86,7 +92,7 @@ jobs:
version: 22.x
pnpm_version: 11.11.0
js_folder: "."
if: matrix.template == 'js' || matrix.template == 'jupyter' || matrix.template == 'cppjswasm' || matrix.template == 'rustjswasm' || matrix.template == 'uitk-svelte' || matrix.template == 'uitk-webawesome'
if: matrix.template == 'js' || matrix.template == 'jupyter' || matrix.template == 'cppjswasm' || matrix.template == 'rustjswasm' || matrix.template == 'uitk-svelte' || matrix.template == 'uitk-webawesome' || matrix.template == 'site-sveltekit' || matrix.template == 'site-webawesome'

- name: Setup Rust
uses: actions-ext/rust/setup@2db8e3e4c56beb7320c7d730bd2c2d6a6447bf6b
Expand All @@ -103,12 +109,12 @@ jobs:
- name: Generate template
run: make gen-${{ matrix.template }}

- name: Install UI toolkit dependencies and browser
- name: Install JavaScript template dependencies and browser
run: |
cd ../javascript-template-${{ matrix.template }}
pnpm install
pnpm exec playwright install --with-deps chromium
if: matrix.template == 'uitk-svelte' || matrix.template == 'uitk-webawesome'
if: matrix.template == 'uitk-svelte' || matrix.template == 'uitk-webawesome' || matrix.template == 'site-sveltekit' || matrix.template == 'site-webawesome'

- name: Test template
run: make test-${{ matrix.template }}
28 changes: 26 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ fix: ## fix formatting in this repo
format: fix
test: ## run tests for this repo

.PHONY: gen-python gen-cpp gen-js gen-jupyter gen-rust gen-rustjswasm gen-cppjswasm gen-uitk-svelte gen-uitk-webawesome
.PHONY: gen-python gen-cpp gen-js gen-jupyter gen-rust gen-rustjswasm gen-cppjswasm gen-uitk-svelte gen-uitk-webawesome gen-site-sveltekit gen-site-webawesome
gen-python: ## regenerate the python template from scratch
mkdir -p ../python-template && cd ../python-template && rm -rf ./* && rm -rf .copier-answers.yaml .gitignore .github .gitattributes
copier copy -w . ../python-template --data-file examples/python.yaml
Expand Down Expand Up @@ -68,7 +68,15 @@ gen-uitk-webawesome: ## regenerate the Lit and Web Awesome UI toolkit template
mkdir -p ../javascript-template-uitk-webawesome && cd ../javascript-template-uitk-webawesome && rm -rf ./* && rm -rf .copier-answers.yaml .github .gitignore .prettierignore .prettierrc
copier copy -w . ../javascript-template-uitk-webawesome --data-file examples/uitk-webawesome.yaml

.PHONY: test-python test-cpp test-js test-jupyter test-rust test-rustjswasm test-cppjswasm test-uitk-svelte test-uitk-webawesome
gen-site-sveltekit: ## regenerate the SvelteKit site template from scratch
mkdir -p ../javascript-template-site-sveltekit && cd ../javascript-template-site-sveltekit && rm -rf ./* && rm -rf .copier-answers.yaml .github .gitignore .prettierignore .prettierrc
copier copy -w . ../javascript-template-site-sveltekit --data-file examples/site-sveltekit.yaml

gen-site-webawesome: ## regenerate the Web Awesome site template from scratch
mkdir -p ../javascript-template-site-webawesome && cd ../javascript-template-site-webawesome && rm -rf ./* && rm -rf .copier-answers.yaml .github .gitignore .prettierignore .prettierrc
copier copy -w . ../javascript-template-site-webawesome --data-file examples/site-webawesome.yaml

.PHONY: test-python test-cpp test-js test-jupyter test-rust test-rustjswasm test-cppjswasm test-uitk-svelte test-uitk-webawesome test-site-sveltekit test-site-webawesome
test-python:
cd ../python-template && git config --global user.name "github-actions" && git config --global user.email "41898282+github-actions[bot]@users.noreply.github.c@example.com" && git init && git add . && git commit -m "initial commit"
cd ../python-template && make develop
Expand Down Expand Up @@ -141,3 +149,19 @@ test-uitk-webawesome:
cd ../javascript-template-uitk-webawesome && pnpm build
cd ../javascript-template-uitk-webawesome && pnpm test:unit
cd ../javascript-template-uitk-webawesome && CI=1 pnpm test:e2e

test-site-sveltekit:
cd ../javascript-template-site-sveltekit && pnpm install
cd ../javascript-template-site-sveltekit && pnpm exec playwright install chromium
cd ../javascript-template-site-sveltekit && pnpm lint
cd ../javascript-template-site-sveltekit && pnpm check
cd ../javascript-template-site-sveltekit && pnpm build
cd ../javascript-template-site-sveltekit && CI=1 pnpm test:e2e

test-site-webawesome:
cd ../javascript-template-site-webawesome && pnpm install
cd ../javascript-template-site-webawesome && pnpm exec playwright install chromium
cd ../javascript-template-site-webawesome && pnpm lint
cd ../javascript-template-site-webawesome && pnpm check
cd ../javascript-template-site-webawesome && pnpm build
cd ../javascript-template-site-webawesome && CI=1 pnpm test:e2e
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,5 @@ One selector chooses a template:
- `Python / …` options generate pure Python, C++, JavaScript, Jupyter, Rust, and WebAssembly-backed Python packages from `python/`.
- `JavaScript / UI Toolkit / Svelte` generates a Svelte package and showcase from `javascript/uitk-svelte/`.
- `JavaScript / UI Toolkit / Lit + Web Awesome` generates custom elements and a showcase from `javascript/uitk-webawesome/`.
- `JavaScript / Site / SvelteKit` generates a SvelteKit site with static or Node deployment from `javascript/site-sveltekit/`.
- `JavaScript / Site / Web Awesome` generates a Vite site built with Web Awesome components from `javascript/site-webawesome/`.
35 changes: 28 additions & 7 deletions copier.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,12 @@ github:
team:
type: str
help: What is your name or your team's name?
when: "{{ add_extension not in ['uitk-svelte', 'uitk-webawesome'] }}"
when: "{{ add_extension not in ['uitk-svelte', 'uitk-webawesome', 'site-sveltekit', 'site-webawesome'] }}"

email:
type: str
help: What is your email?
when: "{{ add_extension not in ['uitk-svelte', 'uitk-webawesome'] }}"
when: "{{ add_extension not in ['uitk-svelte', 'uitk-webawesome', 'site-sveltekit', 'site-webawesome'] }}"

add_extension:
type: str
Expand All @@ -58,8 +58,12 @@ add_extension:
value: uitk-svelte
JavaScript / UI Toolkit / Lit + Web Awesome:
value: uitk-webawesome
JavaScript / Site / SvelteKit:
value: site-sveltekit
JavaScript / Site / Web Awesome:
value: site-webawesome

_subdirectory: "{% if add_extension == 'python' %}python/pure{% elif add_extension in ['uitk-svelte', 'uitk-webawesome'] %}javascript/{{ add_extension }}{% else %}python/{{ add_extension }}{% endif %}"
_subdirectory: "{% if add_extension == 'python' %}python/pure{% elif add_extension in ['uitk-svelte', 'uitk-webawesome', 'site-sveltekit', 'site-webawesome'] %}javascript/{{ add_extension }}{% else %}python/{{ add_extension }}{% endif %}"

add_vcpkg:
type: bool
Expand All @@ -80,19 +84,19 @@ python_version_primary:
"3.13":
value: "3.13"
help: Primary version of Python to use in CI/CD
when: "{{ add_extension not in ['uitk-svelte', 'uitk-webawesome'] }}"
when: "{{ add_extension not in ['uitk-svelte', 'uitk-webawesome', 'site-sveltekit', 'site-webawesome'] }}"

add_docs:
type: bool
default: false
help: Add documentation using Yardang/Sphinx
when: "{{ add_extension not in ['uitk-svelte', 'uitk-webawesome'] }}"
when: "{{ add_extension not in ['uitk-svelte', 'uitk-webawesome', 'site-sveltekit', 'site-webawesome'] }}"

add_wiki:
type: bool
default: false
help: Add documentation using GitHub wiki
when: "{{ add_extension not in ['uitk-svelte', 'uitk-webawesome'] }}"
when: "{{ add_extension not in ['uitk-svelte', 'uitk-webawesome', 'site-sveltekit', 'site-webawesome'] }}"

package_name:
type: str
Expand All @@ -104,7 +108,7 @@ brand_name:
type: str
help: What is the human-readable brand name?
default: "{{ project_name }}"
when: "{{ add_extension in ['uitk-svelte', 'uitk-webawesome'] }}"
when: "{{ add_extension in ['uitk-svelte', 'uitk-webawesome', 'site-sveltekit', 'site-webawesome'] }}"

css_prefix:
type: str
Expand All @@ -117,3 +121,20 @@ element_prefix:
help: What prefix should custom elements use?
default: brand
when: "{{ add_extension == 'uitk-webawesome' }}"

site_url:
type: str
help: What is the site's canonical URL?
default: https://example.com
when: "{{ add_extension in ['site-sveltekit', 'site-webawesome'] }}"

site_adapter:
type: str
help: How should SvelteKit deploy the site?
choices:
Static files:
value: static
Node server:
value: node
default: static
when: "{{ add_extension == 'site-sveltekit' }}"
8 changes: 8 additions & 0 deletions examples/site-sveltekit.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
add_extension: site-sveltekit
brand_name: Example
github: example
project_description: A fast, accessible SvelteKit website.
project_name: example-site
site_adapter: static
site_url: https://example.com
7 changes: 7 additions & 0 deletions examples/site-webawesome.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
add_extension: site-webawesome
brand_name: Example
github: example
project_description: A fast, accessible website built with Web Awesome.
project_name: example-site
site_url: https://example.com
32 changes: 32 additions & 0 deletions javascript/site-sveltekit/.github/workflows/build.yaml.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Build Status

on:
push:
branches: [main]
tags: [v*]
pull_request:
workflow_dispatch:

permissions:
contents: read

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: pnpm/action-setup@v6
with:
version: 11
- uses: actions/setup-node@v7
with:
node-version: 22.x
cache: pnpm
- run: pnpm install
- run: pnpm build
- run: pnpm check
- run: pnpm lint
- run: pnpm exec playwright install --with-deps chromium
- run: pnpm test:e2e
env:
CI: '1'
10 changes: 10 additions & 0 deletions javascript/site-sveltekit/.gitignore.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
node_modules
/.svelte-kit
/build
/coverage
/playwright-report
/test-results
.env
.env.*
!.env.example
.DS_Store
8 changes: 8 additions & 0 deletions javascript/site-sveltekit/.prettierignore.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
.svelte-kit
.copier-answers.yaml
build
coverage
node_modules
playwright-report
pnpm-lock.yaml
test-results
9 changes: 9 additions & 0 deletions javascript/site-sveltekit/.prettierrc.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"printWidth": 120,
"semi": true,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "none",
"plugins": ["prettier-plugin-svelte"],
"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
}
21 changes: 21 additions & 0 deletions javascript/site-sveltekit/README.md.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# {{ brand_name }}

{{ project_description }}

## Develop

```bash
pnpm install
pnpm dev
```

## Verify

```bash
pnpm check
pnpm lint
pnpm test
pnpm build
```

This site uses SvelteKit's `adapter-{{ site_adapter }}` deployment adapter.
38 changes: 38 additions & 0 deletions javascript/site-sveltekit/package.json.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"name": "{{ project_name_formatted }}",
"version": "0.1.0",
"description": "{{ project_description }}",
"private": true,
"packageManager": "pnpm@11.9.0",
"engines": {
"node": ">=22"
},
"type": "module",
"scripts": {
"dev": "vite dev",
"build": "vite build",
"preview": "vite preview",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"lint": "prettier --check .",
"fix": "prettier --write .",
"test": "pnpm test:e2e",
"test:e2e": "playwright test",
"test:e2e:update": "playwright test --update-snapshots"
},
"devDependencies": {
"@axe-core/playwright": "^4.12.1",
"@playwright/test": "^1.60.0",
"@sveltejs/adapter-{{ site_adapter }}": "{{ '^3.0.10' if site_adapter == 'static' else '^5.0.0' }}",
"@sveltejs/kit": "^2.70.1",
"@sveltejs/vite-plugin-svelte": "^7.1.2",
"@tailwindcss/vite": "^4.3.3",
"@types/node": "^24.0.0",
"prettier": "^3.8.4",
"prettier-plugin-svelte": "^4.1.1",
"svelte": "^5.56.0",
"svelte-check": "^4.3.0",
"tailwindcss": "^4.3.3",
"typescript": "^5.9.3",
"vite": "^8.1.5"
}
}
26 changes: 26 additions & 0 deletions javascript/site-sveltekit/playwright.config.ts.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { defineConfig, devices } from '@playwright/test';

export default defineConfig({
testDir: 'tests',
fullyParallel: true,
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 2 : 0,
reporter: process.env.CI ? 'github' : 'list',
use: {
baseURL: 'http://127.0.0.1:4177',
trace: 'retain-on-failure',
screenshot: 'only-on-failure'
},
webServer: {
command: 'vite build && vite preview --host 127.0.0.1 --port 4177 --strictPort',
port: 4177,
reuseExistingServer: !process.env.CI,
timeout: 120_000
},
projects: [
{
name: 'desktop',
use: { ...devices['Desktop Chrome'], viewport: { width: 1280, height: 800 } }
}
]
});
15 changes: 15 additions & 0 deletions javascript/site-sveltekit/src/app.css.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
@import 'tailwindcss';

:root {
color: #171717;
background: #ffffff;
font-family: system-ui, sans-serif;
}

body {
margin: 0;
}

a {
color: inherit;
}
5 changes: 5 additions & 0 deletions javascript/site-sveltekit/src/app.d.ts.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
declare global {
namespace App {}
}

export {};
12 changes: 12 additions & 0 deletions javascript/site-sveltekit/src/app.html.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#ffffff" />
%sveltekit.head%
</head>
<body data-sveltekit-preload-data="hover">
<div style="display: contents">%sveltekit.body%</div>
</body>
</html>
16 changes: 16 additions & 0 deletions javascript/site-sveltekit/src/routes/+layout.svelte.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<script lang="ts">
import '../app.css';

let { children } = $props();
</script>

<svelte:head>
<meta name="description" content="{{ project_description }}" />
<meta property="og:site_name" content="{{ brand_name }}" />
<meta property="og:type" content="website" />
<meta property="og:title" content="{{ brand_name }}" />
<meta property="og:description" content="{{ project_description }}" />
<meta property="og:url" content="{{ site_url }}" />
</svelte:head>

{@render children()}
1 change: 1 addition & 0 deletions javascript/site-sveltekit/src/routes/+layout.ts.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const prerender = {{ 'true' if site_adapter == 'static' else 'false' }};
Loading
Loading