This guide defines the minimum verification bar for local development and CI.
See also:
- Compatibility Matrix
- Provenance and License Status
- SBOM Baseline
- License Notices Baseline
- Source Offer Notes Baseline
- JDK 17
- Android SDK and build-tools
- Go 1.21+
- Python 3 (for shared contract validation when the
shared-contractsworkspace is present)
Run from go-sidecar/:
go test ./...
go vet ./...Race checks require Linux/macOS with cgo enabled:
go test -race ./...Run from repository root:
gradle --no-daemon :app:lintUniversalDebug
gradle --no-daemon :app:testUniversalDebugUnitTest
gradle --no-daemon :app:assembleUniversalDebugassembleUniversalDebug produces the universal debug APK under app/build/outputs/apk/universal/debug/. ABI-flavored debug artifacts are available through the Gradle variant tasks when a device-specific package is needed.
From workspace root (when present):
py shared-contracts\validate_contracts.pyExpected summary includes OK schemas 22 and fixture pass lines.
The build.yml workflow enforces:
- Secret scanning (
gitleaks) - Go dependency lock resolution + test/vet/race
- Android lint, unit-test, and build checks
- Dependency image publication with SBOM/provenance enabled
Before every release:
- Manually bump
APP_VERSION_NAMEandAPP_BASE_VERSION_CODEingradle.properties. - Commit that version bump before building or tagging the release.
- Run
gradle --no-daemon :app:printResolvedVersionand confirm the output is not the previous release number. - Provide release signing material through either:
signing.properties(STORE_FILE,STORE_PASSWORD,KEY_ALIAS,KEY_PASSWORD), or- environment variables:
RELEASE_STORE_FILE,RELEASE_STORE_PASSWORD,RELEASE_KEY_ALIAS,RELEASE_KEY_PASSWORD.
- Build release artifact:
gradle --no-daemon :app:assembleUniversalRelease- Generate pre-release SBOM artifacts:
powershell -ExecutionPolicy Bypass -File .\scripts\generate-sbom-artifacts.ps1- Generate sidecar binary provenance manifest:
powershell -ExecutionPolicy Bypass -File .\scripts\generate-sidecar-provenance.ps1Release builds fail if the committed version properties are missing or the version name is not an explicit semantic version. APK filenames include version name and version code so new artifacts do not silently overwrite previous release outputs. Release jobs also verify signed APK outputs with apksigner, package sidecar artifacts, and publish benchmark/compliance assets.