- Install dependencies:
pnpm install - Build the JS packages:
pnpm build - Lint:
pnpm lint
The @project516/ffmpeg-wasm-core, -core-mt and -core-jspi packages are prebuilt WebAssembly
artifacts. Building them requires Docker and runs through the Makefile:
make prd for the single-thread core, make prd-mt for the multi-thread
core, make prd-jspi for the experimental JSPI core. These builds are heavy; CI runs them on pushes to master and on pull
requests targeting master, and that is the recommended way to verify a core
change.
Pull requests target master.
All six packages share one version. To release:
- Open a PR that sets
versionin everypackages/*/package.jsonandCORE_VERSIONinpackages/ffmpeg/src/const.tsto the new version. It also setsCORE_VERSIONinapps/website/src/components/Playground/const.tsand the version in the CDN URLs underapps/website/docs. - On that PR, dispatch a full-subset CI run with
gh workflow run CI.yml --ref <branch> -f subset=fulland wait for it. With that run's id, runnode scripts/update-core-sizes.mjs <version> --run <run-id>andnode scripts/baseline/update.mjs <run-id>, then commit the changedapps/website/src/data/core-sizes.json,baseline/andapps/website/docs/results.mdin the same PR. CI fails untilcore-sizes.jsonis for the new version. - After it merges, tag the merge commit and push the tag:
git tag v<version> <sha> && git push origin v<version>.
The tag runs .github/workflows/release.yml, which runs CI, publishes every
package to npm with provenance, and creates the GitHub release. Publishing
uses npm trusted publishing, so no npm token is involved: each package on
npmjs.com trusts release.yml in this repository.