Repository navigation
ci: remove the release workflow from 4.2, it cannot sign for oc10 - #642
Merged
Merged
Conversation
Reverts the workflow added in #640. That was my mistake: this branch ships to ownCloud 10, and the release pipeline cannot produce an artifact oc10 accepts. oc10 and oc11 do not share a signing generation: oc10 {hashes, signature, certificate} legacy G1, single root.crt oc11 {v, alg, hashes, signature, certificates} G2, roots/ + intermediates/ `lib/private/IntegrityCheck/Checker.php` on 10.16 reads `certificate` in the singular and verifies against the one `resources/codesigning/root.crt`. It has no code path for a `v`/`certificates` envelope, nor for the ECDSA P-384 signature G2 uses. oc11's verifier accepts both generations, which is why the same workflow is correct on master and wrong here. The reusable release workflow signs with `ocsign`, overriding the Makefile's `occ integrity:sign-app`. ocsign emits G2 only - its flags are --path --key --cert --chain --core --allow-vcs --out --dry-run, with no legacy mode - and the repository's signing secrets hold a G2 key. So a tag on this branch would have published a tarball that fails `occ integrity:check-app` on every oc10 server, with admins seeing a tamper warning. Confirmed against the real artifacts rather than the docs: the marketplace tarball for 4.2.3, which is what oc10 admins install, carries a legacy G1 envelope signed by a CN=richdocuments leaf issued by "ownCloud Code Signing Intermediate Authority", while v4.3.0 and v4.3.1 carry G2. Releases on this branch therefore stay manual, signed with the legacy G1 key by whoever holds it, and uploaded to the marketplace - exactly how 4.2.1, 4.2.2 and 4.2.3 shipped. The version bump from #640 stands; only the workflow goes. Signed-off-by: Thomas Müller <323649642+oc-tmueller@users.noreply.github.com> Co-authored-by: Thomas Müller <323649642+oc-tmueller@users.noreply.github.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
kw-tmueller
approved these changes
Sep 23, 2026
phil-davis
approved these changes
Sep 23, 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.
Reverts the release workflow added in #640. My mistake in that PR — this branch ships to
ownCloud 10, and the release pipeline cannot produce an artifact oc10 accepts.
4.2currently carriesinfo.xml4.2.4 andrelease.yml, so pushing av4.2.4tag todaywould publish a tarball that every oc10 server rejects. No such tag exists yet.
oc10 and oc11 are different signing generations
{hashes, signature, certificate}— legacy G1resources/codesigning/root.crt{v, alg, hashes, signature, certificates}— G2roots/root-g{1,2}.crt+intermediates/10.16's
Checker.phpreadscertificatein the singular and has no code path for av/certificatesenvelope, nor for the ECDSA P-384 signature G2 uses. oc11's verifier acceptsboth generations, which is why the identical workflow is correct on master and wrong here.
The reusable workflow signs with
ocsign, overriding the Makefile'socc integrity:sign-app.ocsignemits G2 only — flags are--path --key --cert --chain --core --allow-vcs --out --dry-run, no legacy mode — and this repository's signing secrets hold a G2 key.Demonstrated, not assumed
Same command, two envelope generations, two servers:
server:10.16.4server:11.0.0max-version="10"min/max-version="11"The top row rules out the obvious objection: an app declaring
max-version="10"verifies fine on11.0.0, so
integrity:check-appdoes not consult platform compatibility. The failure is theenvelope format, at the line that reads
certificate. On oc11 the G2 artifact also reportsINVALID_HASHwhen a signed file is tampered with, so the check is live rather than skipped.For reference, the marketplace tarball for 4.2.3 — what oc10 admins actually install — carries a
legacy G1 envelope signed by a
CN=richdocumentsleaf issued by ownCloud Code SigningIntermediate Authority.
What this means for 4.2.x releases
They stay manual:
make distplusocc integrity:sign-appwith the legacy G1 key, uploaded tothe marketplace — exactly how 4.2.1, 4.2.2 and 4.2.3 shipped, none of which have GitHub release
assets. The version bump from #640 stands; only the workflow goes.
Tracking the actual 4.2.4 release separately, since it needs the G1 key.