Skip to content
Closed
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
10 changes: 6 additions & 4 deletions .github/actions/setup-php-linux/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,12 @@ own review.
The candidate PHP archive is asset 739711545,
`php_8.3-nts+ubuntu26.04.tar.zst`, 40,568,012 bytes, SHA-256
`11c1a56755ec5d90567265719b21bc08e7c5ac4a539866a56f55c0fe5b6d196a`.
Upstream replaced every catalog archive except four PHP 8.1/8.2 rows on
2026-11-12, so the earlier asset IDs return 404. The catalog, archive records,
normalization plans and alternatives inventories now bind the replacement
bytes. Earlier installed qualifications covered the replaced bytes only.
The Ubuntu 24.04 archive was replaced again on 2026-11-14. Its current exact
asset is 747287433, `php_8.3-nts+ubuntu24.04.tar.zst`, 43,826,053 bytes,
SHA-256 `c60a4af4c7806c8c123268305b35ba1f7250a8356b195997bd0860359b101784`.
The catalog, archive records, normalization plans and alternatives inventories
bind those current bytes. Earlier installed qualifications covered replaced
bytes only.
The original installer is asset 713206915, 3,406 bytes, SHA-256
`7bc5bfea71696b0927367eb887e2710d44c6f17216fbd47add5a4cb181543e99`.
The reviewed snapshot of those exact bytes is committed under
Expand Down
8 changes: 5 additions & 3 deletions qualification/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,11 @@ directory or unresolved omissions; the derived inventory has 3,215 files and
26.04 x64 host and matching complete archive identity, PHP 8.3, both literal
PHARs, coverage none and no extension override. Other catalog tuples refuse.
The accepted installed runs recorded in
[#297](https://github.com/durable-workflow/.github/issues/297) covered the
earlier Ubuntu 26.04 and Ubuntu 24.04 assets, which upstream has since replaced.
Each consumer still needs its own source binding and actual caller qualification.
[#297](https://github.com/durable-workflow/.github/issues/297) covered earlier
archive identities. The current Ubuntu 24.04 records bind replacement asset
747287433; hosted qualification must use that exact identity before consumer
pins move. Each consumer still needs its own source binding and actual caller
qualification.

### Upstream asset replacement

Expand Down
6 changes: 3 additions & 3 deletions qualification/php-linux-bootstrap.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@
"thread_safety": "nts",
"build": "release",
"asset": {
"id": 739209532,
"id": 747287433,
"name": "php_8.3-nts+ubuntu24.04.tar.zst",
"size": 42500132,
"digest": "sha256:b81626ab8a7d91c23f3b8dee7fc0860fbd3ef99c9f4b22c5321b0e0545771768"
"size": 43826053,
"digest": "sha256:c60a4af4c7806c8c123268305b35ba1f7250a8356b195997bd0860359b101784"
}
},
{
Expand Down
2 changes: 1 addition & 1 deletion qualification/php-linux-ubuntu24-alternatives.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"schema": "durable-workflow.php-linux-initial-alternatives/v1",
"installer_sha256": "7bc5bfea71696b0927367eb887e2710d44c6f17216fbd47add5a4cb181543e99",
"archive_metadata_sha256": "e60de15982b6f0d71af4d27aff3f82fcd4551cb29efa00c92972cf2e5d44abb4",
"archive_metadata_sha256": "680f8c67e7d26d14fff95484e3b8ec3c5170082f0552ff29e824c553d9b56033",
"order": [
"install",
"fix_alternatives",
Expand Down
7,272 changes: 3,636 additions & 3,636 deletions qualification/php-linux-ubuntu24-archive.json

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions qualification/php-linux-ubuntu24-normalization.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
{
"schema": "durable-workflow.php-linux-normalization-proposal/v1",
"asset": {
"id": 739209532,
"id": 747287433,
"name": "php_8.3-nts+ubuntu24.04.tar.zst",
"size": 42500132,
"sha256": "b81626ab8a7d91c23f3b8dee7fc0860fbd3ef99c9f4b22c5321b0e0545771768"
"size": 43826053,
"sha256": "c60a4af4c7806c8c123268305b35ba1f7250a8356b195997bd0860359b101784"
},
"metadata_sha256": "e60de15982b6f0d71af4d27aff3f82fcd4551cb29efa00c92972cf2e5d44abb4",
"metadata_sha256": "680f8c67e7d26d14fff95484e3b8ec3c5170082f0552ff29e824c553d9b56033",
"materialize_regular_aliases": [
[
"etc/alternatives/libphp8",
Expand Down
2 changes: 1 addition & 1 deletion scripts/php_linux_alternatives.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
INVENTORY_SHA256 = '89f3829e8dc8561525dd6236f37263a051d6ef49ee476d82579f6d5252c3702e'
INVENTORIES = {
739711545: ('initial', INVENTORY_SHA256),
739209532: ('ubuntu24', 'c233d1d4bbbc987bdbe74152160b362431e4fb28aa699fed18a9c5855f28b2d9'),
747287433: ('ubuntu24', '4c5e438dc7eb415e0b02e55cd4d6b854a2ccb7951062e87b758e18e6ba66b4c8'),
}


Expand Down
2 changes: 1 addition & 1 deletion scripts/php_linux_configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
PROFILE = "ubuntu26.04-x64-php8.3-production-coverage-none"
PROFILES = {
739711545: PROFILE,
739209532: "ubuntu24.04-x64-php8.3-production-coverage-none",
747287433: "ubuntu24.04-x64-php8.3-production-coverage-none",
}
TEMPLATE = "usr/lib/php/8.3/php.ini-production.cli"
CLI = "etc/php/8.3/cli/php.ini"
Expand Down
6 changes: 3 additions & 3 deletions scripts/php_linux_normalize.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@
PLAN_SHA256 = '06d623e7793501d03b18902be0e4141bf2a3948f07b8cd60cf82036cc5d9197e'
SOURCE_PROFILES = {
739711545: ('initial', METADATA_SHA256, PLAN_SHA256, (3900, 3509, 391)),
739209532: ('ubuntu24',
'e60de15982b6f0d71af4d27aff3f82fcd4551cb29efa00c92972cf2e5d44abb4',
'424fded62f2f4b85d7b5eaa131a98497eed1ab9a35c933f027baf9460c50ddbd',
747287433: ('ubuntu24',
'680f8c67e7d26d14fff95484e3b8ec3c5170082f0552ff29e824c553d9b56033',
'42534e26b143b932099f98606f3439089ddf490d444e2c6111d3572290abeee1',
(3588, 3215, 373)),
}
SCHEMA = 'durable-workflow.php-linux-normalization/v1'
Expand Down
2 changes: 1 addition & 1 deletion scripts/setup_php_linux.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
NORMALIZED_RECEIPT_SCHEMA = "durable-workflow.php-linux-setup-receipt/v3"
CONFIGURED_RECEIPT_SCHEMA = "durable-workflow.php-linux-setup-receipt/v5"
MAX_RECEIPT = 60 * 1024
HOST_ARCHIVES = {'26.04': 739711545, '24.04': 739209532}
HOST_ARCHIVES = {'26.04': 739711545, '24.04': 747287433}
CA_SHA256 = "50f79f98dac192b20dbf73f35c56f0b0c557ab267ff5199d1117cc1180b70785"


Expand Down
2 changes: 1 addition & 1 deletion tests/test_php_linux_alternatives.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ def test_inventory_classifies_real_writers_without_conflating_plain_and_gzip_man
self.assertEqual(bootstrap.sha256(self.original.encode()), self.record['installer_sha256'])

def test_ubuntu24_inventory_binds_its_own_archive_and_the_same_nine_stock_writers(self):
asset = normalization.reviewed_profile(739209532).metadata['asset']
asset = normalization.reviewed_profile(747287433).metadata['asset']
original = {**{key:asset[key] for key in ('id', 'name', 'size')}, 'digest':'sha256:'+asset['sha256']}
previous = self.record
self.record, digest = alternatives.inventory_source(original)
Expand Down
2 changes: 1 addition & 1 deletion tests/test_php_linux_bootstrap.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ def execute(_command, **options):
def test_catalog_has_exact_distinct_current_asset_tuples(self):
self.assertIs(self.catalog, bootstrap.validate_catalog(self.catalog))
# Only the setup-profile archives are pinned (setup_php_linux.HOST_ARCHIVES).
self.assertEqual([("24.04", "x86_64", "8.3", 739209532), ("26.04", "x86_64", "8.3", 739711545)],
self.assertEqual([("24.04", "x86_64", "8.3", 747287433), ("26.04", "x86_64", "8.3", 739711545)],
sorted((row["release"], row["arch"], row["php"], row["asset"]["id"])
for row in self.catalog["archives"]))
self.assertEqual(713206915, self.catalog["installer"]["id"])
Expand Down
4 changes: 2 additions & 2 deletions tests/test_php_linux_configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ def archive_identity(self, asset_id):

def test_asset_profile_is_external_authority_for_configuration_recomputation(self):
template, files, initial, outputs = self.fixture()
original = self.archive_identity(739209532)
original = self.archive_identity(747287433)
document, actual = configuration.derive(template, files, self.source, original=original)
self.assertEqual(outputs, actual)
self.assertEqual('ubuntu24.04-x64-php8.3-production-coverage-none', document['profile'])
Expand All @@ -65,7 +65,7 @@ def test_asset_profile_is_external_authority_for_configuration_recomputation(sel

def test_asset_specific_manifest_capture_and_writer_refuse_a_foreign_profile(self):
template, files, _, _ = self.fixture()
original = self.archive_identity(739209532)
original = self.archive_identity(747287433)
document, outputs = configuration.derive(template, files, self.source, original=original)
with tempfile.TemporaryDirectory() as directory:
state = Path(directory)
Expand Down
6 changes: 3 additions & 3 deletions tests/test_php_linux_normalize.py
Original file line number Diff line number Diff line change
Expand Up @@ -445,8 +445,8 @@ def test_command_selects_only_the_cataloged_tuple_and_writes_both_records(self):
records.main(arguments, io.BytesIO(b'inert'))


UBUNTU24_ASSET = {'id': 739209532, 'name': 'php_8.3-nts+ubuntu24.04.tar.zst', 'size': 42500132,
'digest': 'sha256:b81626ab8a7d91c23f3b8dee7fc0860fbd3ef99c9f4b22c5321b0e0545771768'}
UBUNTU24_ASSET = {'id': 747287433, 'name': 'php_8.3-nts+ubuntu24.04.tar.zst', 'size': 43826053,
'digest': 'sha256:c60a4af4c7806c8c123268305b35ba1f7250a8356b195997bd0860359b101784'}


class Ubuntu24ArchiveMetadataTest(unittest.TestCase):
Expand Down Expand Up @@ -476,7 +476,7 @@ def test_complete_asset_and_observed_inventory_are_independently_pinned(self):
dict(Counter(member.type.decode() for member in self.index.values())))
self.assertEqual(0, self.metadata['pax_headers'])
self.assertEqual(0, self.metadata['sparse_members'])
self.assertEqual('caa3cfcc5c45016abe0acd1f0cf248f66003dd40cafda0ee0adbc5c665c40485',
self.assertEqual('f34b9bee51ba4486ef0b89f51fe3855b35a7bd46cd26603b63d2697e70018620',
self.metadata['raw_inventory_sha256'])
raw = (bootstrap.ROOT / 'qualification/php-linux-ubuntu24-archive.json').read_bytes()
self.assertEqual(hashlib.sha256(raw).hexdigest(), self.plan['metadata_sha256'])
Expand Down
2 changes: 1 addition & 1 deletion tests/test_php_linux_qualification.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ def test_ubuntu24_complete_catalog_shape_fits_unchanged_subject_and_terminal_bou
manifest['files'][name] = identity
report['subjects'] = manifest
report['host']['release'] = '24.04'
report['archive']['id'] = 739209532
report['archive']['id'] = 747287433
archive.require_subject_bound(manifest)
qualification.validate_normalized_subjects(manifest, document, configured)
self.assertEqual(69, len(manifest['configs']))
Expand Down
Loading