Skip to content

Commit

Permalink
Add skeleton of wgpu-py (#3)
Browse files Browse the repository at this point in the history
* Clone wgpu-py 0.13.2

* Remove other tests

* Remove gui and backends

* Remove more files from wgpu subfolder

* Remove docs

* Remove other utils

* Remove non shadertoy examples

* Remove CODEOWNERS

* Remove unneeded CI jobs

* Fix missing script step

* Remove reference to deleted files

* Cleanup setup.py

* Cleanup __init__.py files

* Change name, version and attribution

* clean up packaging setup, readme and imports

* clean up ci pipelines accordingly

* make example testing compatible with shaderoty

* mock all time invocations in test suite

* add reference screenshot for test

* add publish ci steps back in

---------

Co-authored-by: Korijn van Golen <[email protected]>
  • Loading branch information
Vipitis and Korijn authored Jan 5, 2024
1 parent 14f566f commit 1b0bfb3
Show file tree
Hide file tree
Showing 35 changed files with 5,138 additions and 0 deletions.
169 changes: 169 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
name: CI

on:
push:
branches:
- main
tags:
- 'v*'
pull_request:
branches:
- main

jobs:

lint-build:
name: Test Linting
timeout-minutes: 5
runs-on: ubuntu-latest
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.9
uses: actions/setup-python@v4
with:
python-version: 3.9
- name: Install dev dependencies
run: |
python -m pip install --upgrade pip
pip install -U black flake8 flake8-black pep8-naming
- name: Flake8
run: |
flake8 .
lint-wheel:
name: Check Wheel
timeout-minutes: 5
runs-on: ubuntu-latest
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.9
uses: actions/setup-python@v4
with:
python-version: 3.9
- name: Install dev dependencies
run: |
python -m pip install --upgrade pip twine
- name: Build wheel
run: |
pip wheel -w dist --no-deps .
- name: Check wheel
run: |
twine check dist/*
test-examples-build:
name: Test Examples
timeout-minutes: 10
runs-on: ubuntu-latest
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.9
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install llvmpipe and lavapipe for offscreen canvas
run: |
sudo apt-get update -y -qq
sudo apt install -y libegl1-mesa libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers
- name: Install dev dependencies
run: |
python -m pip install --upgrade pip
pip install -e .[dev]
- name: Test examples
env:
EXPECT_LAVAPIPE: true
run: |
pytest -v examples
test-builds:
name: ${{ matrix.name }}
timeout-minutes: 5
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- name: Test Linux py38
os: ubuntu-latest
pyversion: '3.8'
- name: Test Linux py39
os: ubuntu-latest
pyversion: '3.9'
- name: Test Linux py310
os: ubuntu-latest
pyversion: '3.10'
- name: Test Linux py311
os: ubuntu-latest
pyversion: '3.11'
- name: Test Linux py312
os: ubuntu-latest
pyversion: '3.12'
- name: Test Linux pypy3
os: ubuntu-latest
pyversion: 'pypy3.9'
steps:
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.pyversion }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.pyversion }}
- name: Install llvmpipe and lavapipe for offscreen canvas
if: matrix.os == 'ubuntu-latest'
run: |
sudo apt-get update -y -qq
sudo apt install -y libegl1-mesa libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers
- name: Install dev dependencies
run: |
python -m pip install --upgrade pip
pip install -e .[dev]
- name: Unit tests
run: |
pytest -v tests
publish:
name: Publish to Github and Pypi
runs-on: ubuntu-latest
needs: [lint-build, lint-wheel, test-examples-build, test-builds]
if: success() && startsWith(github.ref, 'refs/tags/v')
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.9
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Build wheel
run: |
python -m pip install --upgrade pip
pip wheel -w dist --no-deps .
- name: Get version from git ref
id: get_version
run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
- name: Create GH release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.get_version.outputs.VERSION }}
release_name: Release ${{ steps.get_version.outputs.VERSION }}
body: |
Autogenerated wheels.
See [the changelog](https://github.com/pygfx/shadertoy/blob/main/CHANGELOG.md) for details.
draft: false
prerelease: false
- name: Upload release assets
# Move back to official action after fix https://github.com/actions/upload-release-asset/issues/4
uses: AButler/[email protected]
with:
release-tag: ${{ steps.get_version.outputs.VERSION }}
files: 'dist/*.tar.gz;dist/*.whl'
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@master
with:
user: __token__
password: ${{ secrets.PYPI_PASSWORD }}
37 changes: 37 additions & 0 deletions .github/workflows/screenshots.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Screenshots

on:
workflow_dispatch:
pull_request:
branches:
- main

jobs:
screenshots:
name: Regenerate
timeout-minutes: 10
runs-on: 'ubuntu-latest'
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.9
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install llvmpipe and lavapipe for offscreen canvas
run: |
sudo apt-get update -y -qq
sudo add-apt-repository ppa:oibaf/graphics-drivers -y
sudo apt-get update -y -qq
sudo apt install -y libegl1-mesa libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers
- name: Install dev dependencies
run: |
python -m pip install --upgrade pip
pip install -e .[dev]
- name: Regenerate screenshots
run: |
pytest -v --regenerate-screenshots -k test_examples_screenshots examples
- uses: actions/upload-artifact@v2
if: always()
with:
name: screenshots
path: examples/screenshots
119 changes: 119 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
# Special for this repo
nogit/
examples/screenshots/diffs

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# Renderdoc captures
*.cap
*.rdc

# C extensions
*.so

# Distribution / packaging
.DS_Store
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
wheelhouse/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/
docs/generated

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# VSCode project settings
.vscode

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/

20 changes: 20 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Changelog / release notes

WebGPU and wgpu-native are still changing fast, and with that we do to. We do
not yet attempt to make things backwards compatible. Instead we try to
be precise about tracking changes to the public API.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

Possible sections in each release:

* Added: for new features.
* Changed: for changes in existing functionality.
* Deprecated: for soon-to-be removed features.
* Removed: for now removed features.
* Fixed: for any bug fixes.
* Security: in case of vulnerabilities.


### [v0.1.0] - unreleased
25 changes: 25 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
BSD 2-Clause License

Copyright (c) 2024, Jan Kels
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Loading

0 comments on commit 1b0bfb3

Please sign in to comment.