π² Bundles Bikeshed for use without Python & pip
π Uses PyInstaller
π Compiles the bikeshed
PyPI package to a standalone program
π Distributed via GitHub releases
π» Builds for Windows x64, macOS M1 and Intel, and Linux x64
π If possible you should install Bikeshed directly from the bikeshed
PyPI package as is officially recommended on the Bikeshed Documentation website.
pipx install bikeshed
You can get Bikeshed builds built by this bikeshed-builder project from the GitHub releases tab; these are unofficial. You can use go-bikeshed π§ under construction, bikeshed-rs π§ under construction, or bikeshed.js π§ under construction to integrate bikeshed-builder binaries with your favorite language's package management toolchain. π
This project is intended to be used & integrated with software that works better without the Python & pip requirements that the official Bikeshed distribution method uses. You can also use it as a standalone way to install Bikeshed without a Python environment. For example an npm redistribution of the Bikeshed project to be npm install <bikeshed_package_name>
would not want to require a particular Python environment. Instead, they would opt for a premade AiO binary/package like bikeshed-builder! π
Here are the relevant URLs that you would use in your code to fetch releases from this bikeshed-builder project:
https://github.com/jcbhmr/bikeshed-builder/releases/download/$TAG/bikeshed-arm64-apple-darwin.tar.gz
https://github.com/jcbhmr/bikeshed-builder/releases/download/$TAG/bikeshed-x86_64-apple-darwin.tar.gz
https://github.com/jcbhmr/bikeshed-builder/releases/download/$TAG/bikeshed-x86_64-pc-windows-msvc.zip
https://github.com/jcbhmr/bikeshed-builder/releases/download/$TAG/bikeshed-x86_64-unknown-linux-gnu.tar.gz
βΉ bikeshed-builder matches the Bikeshed versions as they are released. bikeshed==4.1.6
would be built & tagged as v4.1.6
. Don't forget the v
prefix! π
Programs are encouraged to pin each of their versions to an exact version of Bikeshed and then update Bikeshed as a dependency as opposed to always fetching the latest bikeshed-builder release.
The .zip
and .tar.gz
archives all have the same layout:
.
βββ bikeshed
βββ _internal/
βββ ...
Note that everything is in the root folder! That means if you want to extract the contents to ~/.bikeshed
here's what you might do:
mkdir ~/.bikeshed
tar -xzvf bikeshed-x86_64-unknown-linux-gnu.tar.gz -C ~/.bikeshed
This entire project hinges on 1) getting the bikeshed
PyPI package to properly install, 2) creating a wrapper script that invokes the bikeshed CLI, and then 3) properly wrapping all that up with PyInstaller. There's also 4) get it to build on GitHub Actions and 5) uploading the public release artifacts.
Python's packaging and dependency landscape is a mess. This project uses Poetry, the most popular Python package manager (excluding plain pip
). Poe the Poet is used as a task runner since Poetry doesn't have a built-in task runner. You can install these tools using pipx.
pipx install poetry poethepoet
After cloning this project getting started is easy!
poetry install
And then you can run the build
or test
tasks to make sure everything works.
poe test
To create a new release:
- Change the
bikeshed
version dependency inpyproject.toml
. - Update the
version
field inpyproject.toml
to reflect the new Bikeshed version with the appropriate suffix. This version field is read by the gh release create workflow. - Go to the gh release create workflow page
- Manually run the workflow. You can choose to create a draft instead of immediately publishing it.
You can use rc1
or similar prereleases to try things out if needed but draft: true
should suffice in most cases to make sure things look good.