Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -108,12 +108,18 @@ jobs:
- name: Test bounded original Vold source dependency resolver
run: python3 tests/vold_source_closure_test.py

- name: Test Sony vendor makefile-only regeneration guard
- name: Test immutable Sony vendor acquisition and regeneration
run: python3 tests/vold_vendor_makefiles_test.py

- name: Test original vold probe ordering and bounded expansion
run: python3 tests/vold_probe_orchestration_test.py

- name: Test persistent local original vold build commands
run: python3 tests/vold_local_test.py

- name: Test authenticated local build tool setup
run: python3 tests/vold_local_tools_test.py

- name: Generate the provisional original vold source plan
run: python3 src/ci/vold_source_closure.py plan --output "${RUNNER_TEMP}/vold-source-plan.json"

Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/vold-baseline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,8 @@ jobs:
with Path(os.environ["GITHUB_STEP_SUMMARY"]).open("a") as summary:
summary.write(f"### Provisional vold source graph: {count}/1243 manifest projects\n")
summary.write("This is a source probe, **not** a complete Soong closure or a reproduced binary.\n")
summary.write("Sony vendor declarations cannot be regenerated from the public lists alone: the pinned generator reads proprietary ELF inputs.\n")
summary.write("Sony proprietary inputs use separately locked TheMuppets candidate trees, verified before fetching toolchains.\n")
summary.write("Local builds need no Actions runner: see docs/vold-baseline-ci.md and src/ci/vold_local.py.\n")
PY
- name: Upload static source dependency selection
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
Expand Down
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,14 @@ This repository acts as a server.

## Usage

### Build the original pdx235 vold locally

The unmodified LineageOS `vold` reproduction workflow can run on a local Linux
x86_64 computer. It acquires pinned Sony vendor inputs from TheMuppets, retains
source downloads and incremental output, and checks the result against the
authenticated original OTA. See [local build setup and commands](docs/vold-baseline-ci.md).
This qualification workflow does not require a GitHub Actions runner.

### Getting Started

Reading the [AVBRoot docs](https://github.com/chenxiaolong/AVBRoot) is essential before proceeding with PixeneOS.
Expand Down
222 changes: 222 additions & 0 deletions docs/evidence/vold-local-vendor-integration-20261022.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,222 @@
{
"base_build_id": "lineage-24.0-20261016-nightly-pdx235-signed",
"environment_note": "An interrupted execution-environment file-transfer temporary artifact appeared after moving the vendor trees. The strict verifier rejected it. Its bytes were verified to be an exact prefix of the neighboring locked ELF, and only that task-created partial copy was removed before both successful runs. No verifier exception or tracked-input modification was made.",
"kind": "real-local-vold-vendor-integration",
"local_cli": {
"command": [
"python3",
"-B",
"src/ci/vold_local.py",
"vendor",
"--work-dir",
"/workspace/scratch/83e8e6988998/local-vold-integration",
"--jobs",
"2"
],
"fetch_metadata": {
"device/sony/pdx235": {
"mtime_ns": 1792671463480206515,
"sha256": "b7f0fe1fb0de8b13d57eb7cb936ce9d9ca464526561786f31f20012147e6ca2d",
"size": 267
},
"device/sony/sm6375-common": {
"mtime_ns": 1792671463451270665,
"sha256": "e3a1e94b4924ca377dc1973e3bb682535bffd0f319c59cc529ef67f1bcdc1eea",
"size": 281
},
"tools/extract-utils": {
"mtime_ns": 1792671463817701313,
"sha256": "896920cb620b08d65f710fbf84583780019aa82f3ed7b3ad7d61af411502d10d",
"size": 269
},
"vendor/sony/pdx235": {
"mtime_ns": 1792671138114364594,
"sha256": "a5a80542211fee18884d9452b0117a64838a0cf5984154013e1d359694ba282d",
"size": 149
},
"vendor/sony/sm6375-common": {
"mtime_ns": 1792671153566645275,
"sha256": "974a433e404d83140c82e75e53302e8309614ae95e785545e0546f91fdfc9609",
"size": 156
}
},
"fetch_metadata_unchanged_for_all_five_projects": true,
"receipts_identical": true,
"resume_redownloads": 0,
"successful_runs": [
{
"elapsed_seconds": 2.085,
"exit_status": 0,
"log_sha256": "ed2ee0e49d830366f548c49c93ae3506665bdb66e9a177c0949a6ee2f028b18a",
"receipt_sha256": "eda88f294855c91d946e2806d7d8f0149ae80c5d8487a4b7d94e327150635683",
"run_directory": "20261022T122040.119895Z-vendor"
},
{
"elapsed_seconds": 1.857,
"exit_status": 0,
"log_sha256": "1d3c33d35bc6f62deeffdd8394c76f31713e2cf7c871654b12c0a5219e20f6ae",
"receipt_sha256": "eda88f294855c91d946e2806d7d8f0149ae80c5d8487a4b7d94e327150635683",
"run_directory": "20261022T122042.217746Z-vendor"
}
]
},
"observed_on": "2026-10-22",
"qualification": {
"android_compilation_attempted": false,
"authenticated_ota_extraction_attempted": false,
"byte_identical_original_vold_proven": false,
"ota_published": false,
"patched_vold_authorized": false,
"source_dependency_closure_proven": false,
"vendor_candidates_available_and_verified": true
},
"repo": {
"active_manifest_uses_supported_single_include_wrapper": true,
"execution": "Locally materialized upstream Repo implementation through the prior integration wrapper; this checks actual Repo behavior, not launcher bootstrap authentication.",
"explicit_source_projects": [
{
"clean": true,
"path": "device/sony/pdx235",
"repository": "LineageOS/android_device_sony_pdx235",
"revision": "0559de69466e1e9af69b121985f592c4f4609283",
"shallow": true
},
{
"clean": true,
"path": "device/sony/sm6375-common",
"repository": "LineageOS/android_device_sony_sm6375-common",
"revision": "d1d80af1ad9032cb092ff6d85db437709cc54e28",
"shallow": true
},
{
"clean": true,
"path": "tools/extract-utils",
"repository": "LineageOS/android_tools_extract-utils",
"revision": "ff6589c6b0a4a00c592e98940e9e6b6a50c76569",
"shallow": true
}
],
"implementation_revision": "d744eb15f38b9351463900babffd732994e3a046",
"implementation_version": "2.71",
"init_options": [
"--depth=1"
],
"initial_source_sync_exit_status": 0,
"repository": "https://gerrit.googlesource.com/git-repo",
"selected_manifest_is_official_flattened_snapshot": true,
"selected_manifest_sha256": "d4ded1ca84de399497b68d7ac006808059b6be9cf76725029420a3495a2e5468",
"sync_options": [
"--current-branch",
"--no-tags",
"--no-clone-bundle",
"-j2"
]
},
"schema_version": 1,
"scope": "Actual local CLI with real Repo source checkout and actual pinned public vendor contents; no mocked generator or vendor files.",
"vendor_inputs": {
"acquisition": "Exact pinned public mirror commits fetched once and moved locally into this integration source root; CLI runs below verify and reuse them without another download.",
"lock_path": "locks/lineage-vold-vendor-candidate-20261016.json",
"lock_sha256": "b10dcfdf65930aed8e831df5dd17276ca24a3d66cee16dafc0989ca284bcc25d",
"pinned_common_blob_sha1_matches": 27,
"pinned_common_blob_sha1_mismatches": 0,
"projects": [
{
"content_bytes": 380859981,
"declaration_sha256": {
"Android.bp": "04efde7c0f819ca7b096efaf3d5186c4589d8a7a1109bb36771a732b64ec5d85",
"Android.mk": "7a5e9b2a048ce3b454ca66d2be7775eaf808c0cdac69b680a5deeb072ca08eb0",
"BoardConfigVendor.mk": "31932b8ede523a06046fb6287bdaf6495bf50508dd849cb619aec7ea7d61bdec",
"pdx235-vendor.mk": "8b46c82d0d0f8876288b00840eb127a965e774512f240611fda7e193cb414912"
},
"file_count": 232,
"inventory_sha256": "529efe19916b9dd2dd3aea6ed3d41a4bb18d4c780377299b6b5af69ef281ba94",
"path": "vendor/sony/pdx235",
"repository": "TheMuppets/proprietary_vendor_sony_pdx235",
"revision": "1e503a56c0d16de1f19f2b011581908dac29065b",
"tree": "87f37284815b03640bb3df0305356f31b43d393c",
"url": "https://github.com/TheMuppets/proprietary_vendor_sony_pdx235.git"
},
{
"content_bytes": 304006211,
"declaration_sha256": {
"Android.bp": "0da6991ffe51153e5af2919db465b1bbe44fb39b35f9d7567e84990c690a9718",
"Android.mk": "7a5e9b2a048ce3b454ca66d2be7775eaf808c0cdac69b680a5deeb072ca08eb0",
"BoardConfigVendor.mk": "31932b8ede523a06046fb6287bdaf6495bf50508dd849cb619aec7ea7d61bdec",
"sm6375-common-vendor.mk": "fc58774d6c95c3f3ebdf7eadc9c2dcc829152cbe86fed9672703aca200d69559"
},
"file_count": 882,
"inventory_sha256": "efb9f9e1903bb67e873125dbba5485fe6a53ab9fa370cced9b06f7cfb889469e",
"path": "vendor/sony/sm6375-common",
"repository": "TheMuppets/proprietary_vendor_sony_sm6375-common",
"revision": "2114108d5adfe787503ad0c87508d78123551991",
"tree": "7dd8d71c689778a4cdf246df63e6b76e4014d827",
"url": "https://github.com/TheMuppets/proprietary_vendor_sony_sm6375-common.git"
}
],
"proprietary_list_destinations_checked": 1106,
"regenerated_declarations": 8,
"regeneration": {
"declarations_byte_identical": true,
"exit_status": 0,
"method": "unchanged manifest-pinned extract-files.py --regenerate_makefiles"
}
},
"local_host_tool_setup": {
"setup_command": "/usr/bin/python3 -B src/ci/setup_vold_local_tools.py --work-dir <isolated-work>",
"exit_status": 0,
"repo_launcher_revision": "d744eb15f38b9351463900babffd732994e3a046",
"repo_launcher_sha256": "05f571deafd6ed6da0d20fa707dde29aa5624dbf35553d697a40dbdd4c8d178a",
"repo_normal_signed_bootstrap_used": true,
"fresh_repo_implementation_revision": "46e9866ca0f161604bd45a0c3b7c7887c9415dcb",
"fresh_repo_implementation_version": "v2.70",
"fresh_three_project_sync_exit_status": 0,
"avbroot_version_output": "avbroot 3.35.0",
"avbroot_installation": {
"schema_version": 1,
"tools": [
{
"arch": "x86_64-unknown-linux-gnu",
"archive_sha256": "bbc7f8b4df8d9e6d2162bf354ac9f06643b2f64247a6f345d71e963f645f58c5",
"archive_size": 4250535,
"id": "avbroot",
"layout": [
{
"mode": "0644",
"path": "LICENSE",
"sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986",
"size": 35149,
"type": "file"
},
{
"mode": "0644",
"path": "README.md",
"sha256": "398f4be471f467b40e33a042b13ef3a31ac47c969672521ed86cf29da335ffe6",
"size": 33214,
"type": "file"
},
{
"mode": "0755",
"path": "avbroot",
"sha256": "2539724e0add2b8f6d855b8311897d01a4c28e851d387551f130325f006fa614",
"size": 10916976,
"type": "file"
}
],
"signature": {
"identity": "chenxiaolong",
"namespace": "file",
"sha256": "7ab8b19e7c47bbaf7f846df5c601b3a0888d605f5a3176144b7bedf64600176b",
"signer_fingerprint": "SHA256:Ct0HoRyrFLrnF9W+A/BKEiJmwx7yWkgaW/JvghKrboA",
"type": "ssh",
"verified": true
},
"version": "3.35.0"
}
]
},
"avbroot_execution": "Existing publisher-authenticated sealed executable runner through the generated absolute Python wrapper",
"runtime_note": "Ubuntu system Python supplies Linux file-sealing constants absent from the execution environment custom Python; setup gives an actionable error before acquisition for unsupported interpreters.",
"system_tools_or_profiles_modified": false
}
}
Loading
Loading