Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add initial code from Vello. #1

Merged
merged 34 commits into from
Mar 11, 2024
Merged
Show file tree
Hide file tree
Changes from 25 commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
c389032
build: initial commit
simbleau Mar 9, 2024
49e4894
Update Cargo.toml
simbleau Mar 9, 2024
c5153a8
Update rustfmt.toml
simbleau Mar 9, 2024
25eb0e0
feat: remove dependabot
simbleau Mar 9, 2024
c1fc370
refactor: fmt
simbleau Mar 9, 2024
49e85ad
fix: copyright notice
simbleau Mar 9, 2024
c7b4754
feat: cargo release
simbleau Mar 9, 2024
d7946b6
docs: add warning
simbleau Mar 9, 2024
712ec21
feat: publish on tags
simbleau Mar 9, 2024
db6af54
docs: update badges
simbleau Mar 9, 2024
05ac08a
build: pin versions
simbleau Mar 9, 2024
670d29d
fix: wasm demo
simbleau Mar 9, 2024
87e35d4
ci: pages release
simbleau Mar 9, 2024
98491aa
build: initial author list
simbleau Mar 9, 2024
d6ad412
build: badges
simbleau Mar 9, 2024
393f974
refactor: imports_granularity
simbleau Mar 9, 2024
b12f9b3
Update AUTHORS
simbleau Mar 9, 2024
810e0eb
Update Cargo.toml
simbleau Mar 9, 2024
0bd330b
Update Cargo.toml
simbleau Mar 9, 2024
a9673b0
Update .github/copyright.sh
simbleau Mar 9, 2024
e2a8814
Update .github/copyright.sh
simbleau Mar 9, 2024
e8a3f7e
Update .github/workflows/pages-release.yml
simbleau Mar 9, 2024
691abc6
Update examples/run_wasm/src/main.rs
simbleau Mar 9, 2024
253960a
build: ignore example assets
simbleau Mar 10, 2024
4440ff4
refactor: remove CI
simbleau Mar 10, 2024
c61c739
build: release on latest main push instead
simbleau Mar 11, 2024
63ac057
fix: .gitignore
simbleau Mar 11, 2024
b176f73
fix: remove trunk
simbleau Mar 11, 2024
c6911ad
docs: update the badge
simbleau Mar 11, 2024
139febd
docs: update authors
simbleau Mar 11, 2024
28f258d
docs: update title
simbleau Mar 11, 2024
b7f3d07
Update examples/scenes/Cargo.toml
simbleau Mar 11, 2024
b11b3ec
fix: pin to 0.19.3
simbleau Mar 11, 2024
1d4c9eb
docs: update
simbleau Mar 11, 2024
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
5 changes: 5 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[alias]
run_wasm = "run --release --package run_wasm --"
# Other crates use the alias run-wasm, even though crate names should use `_`s not `-`s
# Allow this to be used
run-wasm = "run_wasm"
24 changes: 24 additions & 0 deletions .github/copyright.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/bin/bash

# If there are new files with headers that can't match the conditions here,
# then the files can be ignored by an additional glob argument via the -g flag.
# For example:
# -g "!src/special_file.rs"
# -g "!src/special_directory"

# Check all the standard Rust source files
output=$(rg "^// Copyright (19|20)[\d]{2} (.+ and )?the Vello Authors( and .+)?$\n^// SPDX-License-Identifier: Apache-2\.0 OR MIT$\n\n" --files-without-match --multiline -g "*.rs" -g "!src/geom.rs" .)

if [ -n "$output" ]; then
echo -e "The following files lack the correct copyright header:\n"
echo $output
echo -e "\n\nPlease add the following header:\n"
echo "// Copyright $(date +%Y) the Vello Authors"
echo "// SPDX-License-Identifier: Apache-2.0 OR MIT"
echo -e "\n... rest of the file ...\n"
exit 1
fi

echo "All files have correct copyright headers."
exit 0

172 changes: 172 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
env:
# We aim to always test with the latest stable Rust toolchain, however we pin to a specific
# version like 1.70. Note that we only specify MAJOR.MINOR and not PATCH so that bugfixes still
# come automatically. If the version specified here is no longer the latest stable version,
# then please feel free to submit a PR that adjusts it along with the potential clippy fixes.
RUST_STABLE_VER: "1.76" # In quotes because otherwise (e.g.) 1.70 would be interpreted as 1.7


# Rationale
#
# We don't run clippy with --all-targets because then even --lib and --bins are compiled with
# dev dependencies enabled, which does not match how they would be compiled by users.
# A dev dependency might enable a feature of a regular dependency that we need, but testing
# with --all-targets would not catch that. Thus we split --lib & --bins into a separate step.

name: CI

on:
pull_request:
merge_group:

jobs:
rustfmt:
runs-on: ubuntu-latest
name: cargo fmt
steps:
- uses: actions/checkout@v4

- name: install stable toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_STABLE_VER }}
components: rustfmt

- name: cargo fmt
run: cargo fmt --all --check

- name: install ripgrep
run: |
sudo apt update
sudo apt install ripgrep

- name: check copyright headers
run: bash .github/copyright.sh

test-stable:
runs-on: ${{ matrix.os }}
strategy:
matrix:
# We use macos-14 as that is an arm runner. These have the virtgpu support we need
os: [windows-latest, macos-14, ubuntu-latest]
include:
- os: ubuntu-latest
gpu: 'yes'
- os: macos-14
gpu: 'yes'
- os: windows-latest
# TODO: The windows runners theoretically have CPU fallback for GPUs, but
# this failed in initial testing
gpu: 'no'
name: cargo clippy + test
steps:
- uses: actions/checkout@v4

- name: install stable toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_STABLE_VER }}
components: clippy

- name: restore cache
uses: Swatinem/rust-cache@v2

- name: Install native dependencies
if: matrix.os == 'ubuntu-latest'
run: sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev

# Adapted from https://github.com/bevyengine/bevy/blob/b446374392adc70aceb92621b080d1a6cf7a7392/.github/workflows/validation-jobs.yml#L74-L79
- name: install xvfb, llvmpipe and lavapipe
if: matrix.os == 'ubuntu-latest'
# https://launchpad.net/~kisak/+archive/ubuntu/turtle
run: |
sudo apt-get update -y -qq
sudo add-apt-repository ppa:kisak/turtle -y
sudo apt-get update
sudo apt install -y xvfb libegl1-mesa libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers

- name: cargo clippy (no default features)
run: cargo clippy --workspace --lib --bins --no-default-features -- -D warnings

- name: cargo clippy (no default features) (auxiliary)
run: cargo clippy --workspace --tests --benches --examples --no-default-features -- -D warnings

- name: cargo clippy (default features)
run: cargo clippy --workspace --lib --bins -- -D warnings

- name: cargo clippy (default features) (auxiliary)
run: cargo clippy --workspace --tests --benches --examples -- -D warnings

- name: cargo clippy (all features)
run: cargo clippy --workspace --lib --bins --all-features -- -D warnings

- name: cargo clippy (all features) (auxiliary)
run: cargo clippy --workspace --tests --benches --examples --all-features -- -D warnings

# At the time of writing, we don't have any tests. Nevertheless, it's better to still run this
- name: cargo test
run: cargo test --workspace --all-features
env:
VELLO_CI_GPU_SUPPORT: ${{ matrix.gpu }}

clippy-stable-wasm:
runs-on: ubuntu-latest
name: cargo test (wasm32)
steps:
- uses: actions/checkout@v4

- name: restore cache
uses: Swatinem/rust-cache@v2

- name: install stable toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_STABLE_VER }}
targets: wasm32-unknown-unknown
components: clippy

- name: cargo clippy (wasm)
run: cargo clippy --all-targets --target wasm32-unknown-unknown --workspace -- -D warnings

android-stable-check:
runs-on: ubuntu-latest
name: cargo check (aarch64-android)
steps:
- uses: actions/checkout@v4

- name: restore cache
uses: Swatinem/rust-cache@v2

- name: install stable toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_STABLE_VER }}
targets: aarch64-linux-android

- name: install cargo apk
run: cargo install cargo-apk

- name: cargo apk check (android)
run: cargo apk check -p with_winit --lib
env:
# This is a bit of a hack, but cargo apk doesn't seem to allow customising this
RUSTFLAGS: '-D warnings'

docs:
name: cargo doc
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [windows-latest, macos-latest, ubuntu-latest]
steps:
- uses: actions/checkout@v4

- name: install nightly toolchain
uses: dtolnay/rust-toolchain@nightly

- name: restore cache
uses: Swatinem/rust-cache@v2

# We test documentation using nightly to match docs.rs. This prevents potential breakages
- name: cargo doc
run: cargo doc --workspace --all-features --no-deps --document-private-items -Zunstable-options -Zrustdoc-scrape-examples
69 changes: 69 additions & 0 deletions .github/workflows/pages-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: Web Demo Update

on:
push:
tags:
- 'v*'
workflow_dispatch:

jobs:
release-web:
permissions:
contents: read
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Install | Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown

- name: Install | WASM Bindgen
uses: jetli/[email protected]
with:
version: 'latest'

- name: Build | WASM
run: cargo build -p with_winit --bin with_winit_bin --release --target wasm32-unknown-unknown

- name: Package | WASM
run: |
mkdir public
wasm-bindgen --target web --out-dir public target/wasm32-unknown-unknown/release/with_winit_bin.wasm --no-typescript
cat << EOF > public/index.html
<html>
<title>vello_svg Web Demo</title>
<meta content=no-cache http-equiv=Cache-control>
<meta content=-1 http-equiv=Expires>
<script type=module>import initSync from"/vello_svg/with_winit_bin.js";initSync(`/vello_svg/with_winit_bin_bg.wasm`);</script>
<link as=fetch crossorigin href=/vello_svg/with_winit_bin_bg.wasm rel=preload type=application/wasm>
<link crossorigin href=/vello_svg/with_winit_bin.js rel=modulepreload>
</head>
<body>
<style>
body {
margin: 0;
padding: 0;
}
</style>
</body>
</html>
EOF

- name: Setup Pages
uses: actions/configure-pages@v4

- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: './public'

- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
32 changes: 32 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
Cargo.lock

examples/assets/*
simbleau marked this conversation as resolved.
Show resolved Hide resolved

# Generated by Cargo
# will have compiled files and executables
target/

# Generated by Trunk
dist/

# These are backup files generated by rustfmt
**/*.rs.bk

# Some people use VSCode
/.vscode/

# Some people use IntelliJ with Rust
/.idea/
*.iml

# Some people use pre-commit
.pre-commit-config.yaml
.pre-commit-config.yml

# Some people have Apple
.DS_Store

# Generated on wasm-pack failure
**/unsupported.js
20 changes: 20 additions & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# This is the list of Vello's significant contributors.
#
# This does not necessarily list everyone who has contributed code,
# especially since many employees of one corporation may be contributing.
# To see the full list of contributors, see the revision history in
# source control.
Google LLC
Raph Levien
Chad Brokaw
Arman Uguray
Elias Naur
Daniel McNab
Spencer C. Imbleau
Bruce Mitchener
Tatsuyuki Ishi
Markus Siglreithmaier
Rose Hudson
Brian Merchant
Matt Rice
Kaur Kuut
36 changes: 36 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
[workspace]
resolver = "2"
members = ["examples/with_winit", "examples/run_wasm", "examples/scenes"]

[workspace.package]
edition = "2021"
version = "0.1.0"
license = "Apache-2.0 OR MIT"
repository = "https://github.com/linebender/vello_svg"

[workspace.dependencies]
vello = "0.1"

[package]
name = "vello_svg"
description = "An SVG integration for vello."
categories = ["rendering", "graphics"]
keywords = ["2d", "vector-graphics", "vello", "svg"]
version.workspace = true
license = "(Apache-2.0 OR MIT) AND MPL-2.0"
edition.workspace = true
repository.workspace = true

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
vello = { workspace = true }
usvg = "0.40"
image = { version = "0.24", default-features = false, features = [
"png",
"jpeg",
"gif",
] }


[target.'cfg(target_arch = "wasm32")'.dev-dependencies]
wasm-bindgen-test = "0.3"
Loading