Conversation
rkistner
reviewed
Aug 11, 2026
rkistner
left a comment
Contributor
There was a problem hiding this comment.
I didn't check the workflow changes in detail, but the approach and SBOM output look good.
simolus3
marked this pull request as ready for review
August 11, 2026 15:46
Contributor
Author
|
I'll need an approval then :) |
rkistner
approved these changes
Aug 12, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This generates an SBOM describing which Rust crates and versons contributed to compiled artifacts, and configures attestations allowing users to verify the provenance of a downloaded core extension file.
Build refactoring
To be able to attest builds, they need to run in a reusable workflow 1. Currently, we build binaries in composite actions we then reference from both
build.ymlandrelease.yml. This changes the build to happen in a dedicatedbuild.ymlworkflow, triggered through workflow calls from the main workflows. This copies the prior steps, the only exception is the Android build where GPG keys are now passed through with proper secrets instead of as regular inputs.For releases, the build workflow generates an attestation that binaries were generated by our workflow. Users will be able to run
gh attestation verify -o powersync-ja <their downloaded core extension>to verify this. We also create an attestation containing an SBOM, which can be used to reconstruct Rust dependencies from the final library, framework or WebAssembly file.SBOM generator
I have tried several SBOM generators, but none were a great fit for the core extension:
Cargo.tomlorCargo.lock. Only looking at the former misses transitive dependencies, scanning the latter without pruning includes development dependencies that aren't part of the final binary.proc-macrodependencies and generates an old format (1.5 is the latest version it supports, the latest version of the spec is 1.7).Given that the spec for CycloneDX SBOMs is simple and well documented, this adds a small SBOM generator written in Dart:
cargo treeis used to crawl actual runtime dependencies, skipping build and proc-macro crates.cargo tree, this parses a dependency graph and uses that to generate the SBOM.isExternal: true).The generated SBOM is attached to our releases.
AI use: CI refactoring is mostly copy-and-paste, using Claude to update the main workflows. I have also used Claude Code to write the SBOM generator (with careful guidance, I manually verified that cyclonedx.studio and grype can parse generated SBOMs).
Footnotes
https://docs.github.com/en/actions/how-tos/secure-your-work/use-artifact-attestations/increase-security-rating#building-with-a-reusable-workflow ↩