Skip to content

Commit

Permalink
Merge vellottie (#13)
Browse files Browse the repository at this point in the history
Consolidate vellottie and velato

---------

Co-authored-by: Daniel McNab <36049421+DJMcNab@users.noreply.github.com>
Co-authored-by: Kaur Kuut <strom@nevermore.ee>
Co-authored-by: Sebastian Hamel <sebjfk@gmail.com>
  • Loading branch information
4 people authored Mar 22, 2024
1 parent de61b32 commit da8abdf
Show file tree
Hide file tree
Showing 138 changed files with 8,115 additions and 1,269 deletions.
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 Velato Authors( and .+)?$\n^// SPDX-License-Identifier: Apache-2\.0 OR MIT$\n\n" --files-without-match --multiline -g "*.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 Velato 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

171 changes: 171 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
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

- 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
68 changes: 68 additions & 0 deletions .github/workflows/pages-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: Web Demo Update

on:
push:
branches:
- main

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/wasm-bindgen-action@v0.2.0
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>Velato Web Demo</title>
<meta content=no-cache http-equiv=Cache-control>
<meta content=-1 http-equiv=Expires>
<script type=module>import initSync from"/velato/with_winit_bin.js";initSync(`/velato/with_winit_bin_bg.wasm`);</script>
<link as=fetch crossorigin href=/velato/with_winit_bin_bg.wasm rel=preload type=application/wasm>
<link crossorigin href=/velato/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
13 changes: 11 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,13 @@
/target
# 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

assets/*
# Don't commit example downloads
examples/assets/downloads/*

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

# Some people have Apple
.DS_Store
6 changes: 6 additions & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,9 @@
# To see the full list of contributors, see the revision history in
# source control.
Google LLC
Chad Brokaw
Daniel McNab
Spencer C. Imbleau
Bruce Mitchener
Sebastian Hamel
Kaur Kuut
28 changes: 18 additions & 10 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,28 +1,36 @@
[workspace]
resolver = "2"
members = ["demo"]
members = ["examples/with_winit", "examples/run_wasm", "examples/scenes"]

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

publish = false
[package]
name = "velato"
description = "Lottie renderer built on vello."
description = "A Lottie integration for vello."
categories = ["rendering", "graphics"]
keywords = ["2d", "vector-graphics", "animation", "lottie"]

keywords = ["2d", "vector-graphics", "vello", "animation", "lottie"]
version.workspace = true
license.workspace = true
edition.workspace = true
repository.workspace = true

[workspace.dependencies]
vello = { git = "https://github.com/linebender/vello", rev = "b0303ccf98df15a8b196272720d364a56f7304ba" }

# NOTE: Make sure to keep this in sync with the version badge in README.md
vello = "0.1.0"

[dependencies]
vello = { workspace = true }
bodymovin = { git = "https://github.com/vectorgameexperts/bodymovin-rs" }
keyframe = "1.1.1"
once_cell = "1.19.0"

# For the parser
serde = { version = "1.0.197", features = ["derive"] }
serde_json = "1.0.114"
serde_repr = "0.1.18"

[target.'cfg(target_arch = "wasm32")'.dev-dependencies]
wasm-bindgen-test = "0.3.42"
26 changes: 0 additions & 26 deletions LICENSE-APACHE
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
Expand Down Expand Up @@ -175,28 +174,3 @@
of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Loading

0 comments on commit da8abdf

Please sign in to comment.