This document describes the process used to modify, update, test, and release YoWASP packages. It is not useful to users of YoWASP, though it might be informative if you want to reproduce YoWASP’s approach for some other software.
Building and testing locally
YoWASP packages are developed on a Linux system.
All YoWASP repositories use an unified approach for building and packaging. Let’s use Yosys as an example. Check out the repository:
git clone --recurse-submodules firstname.lastname@example.org:YoWASP/yosys
Download any necessary dependencies and build the WASM binaries:
Build the Python packages for PyPI:
rm -rf py-env && python3 -m venv py-env
pip install setuptools_scm
Install the binary wheels directly and test their functionality:
pip install pypi/dist/*.whl
Alternatively, serve and install them from a local PyPI index:
pip install pypiserver
pip install -i http://localhost:8080/simple yowasp-yosys
All packages uploaded to the package repositories are produced without manual intervention using GitHub Actions. To produce a new build, simply push to the
develop branch, or merge a pull request into it:
git push origin develop
This will build packages in a clean environment and upload the Python wheels to Test PyPI. They can be installed directly from Test PyPI:
pip install -i https://test.pypi.org/simple yowasp-yosys
Once the packages are verified to work correctly, advance the
release branch to the
git push origin develop:release
Branch protection ensures that the history remains linear (which is important for the automatic versioning to work) and that the
release branch can only point to commits which successfully build and pass tests.
If you push a commit that has “autorelease” in its message, the branch advancement is done automatically.
Everything described above also applies to any branch matching the
develop* glob, and its corresponding
Routine YoWASP maintenance is completely automated.
Every day, the
develop branch is automatically updated with the latest upstream code. The update is pushed directly to the branch, so this can actually break the build.
On every upstream release, an autorelease commit is pushed to a new
develop-X.Y.Z branch, updating according to the newly found upstream tag. Once it is successfully built, the same commit is pushed to a new
release-X.Y.Z branch. If the build fails, new commits fixing the issues can be pushed to the
develop-X.Y.Z branch. YoWASP-specific issues can be addressed in a similar way per release branch.