Publish curated Unraid-AppOps-Gateway source from 402a0ef2e7d14e98325504f79ab7d7651ffc88b1

This commit is contained in:
Public Source Publisher committed 2026-10-09 10:59:14 +00:00
1 parent e49634bb10
commit 58f5e3c8c2
6 files changed
+70 -24

No files matched your search

+1
View File
@@ -4,3 +4,4 @@ docker/Dockerfile text eol=lf
*.yml text eol=lf *.yml text eol=lf
*.yaml text eol=lf *.yaml text eol=lf
ops/gitea-deploy-broker/*.py text eol=lf ops/gitea-deploy-broker/*.py text eol=lf
scripts/*.py text eol=lf
+1 -1
View File
@@ -1,3 +1,3 @@
# Public source export # Public source export
This source snapshot was generated from the private canonical repository at revision `828f7274cafede223d37b2697367bfd89357b079`. It contains no private Git history or operational evidence. Changes are published from the canonical repository. This source snapshot was generated from the private canonical repository at revision `402a0ef2e7d14e98325504f79ab7d7651ffc88b1`. It contains no private Git history or operational evidence. Changes are published from the canonical repository.
+9 -9
View File
@@ -1,6 +1,6 @@
{ {
"schemaVersion": 1, "schemaVersion": 1,
"sourceRevision": "828f7274cafede223d37b2697367bfd89357b079", "sourceRevision": "402a0ef2e7d14e98325504f79ab7d7651ffc88b1",
"files": [ "files": [
{ {
"path": ".dockerignore", "path": ".dockerignore",
@@ -14,8 +14,8 @@
}, },
{ {
"path": ".gitattributes", "path": ".gitattributes",
"sha256": "42dc3628e28e73c43dae27bc792bcb5a697de95962261d3ae2d603fd18fba206", "sha256": "90bd4c4cb40336c70db4c69e6737eb8de370824aac69cbc5a624da37f0e509a2",
"bytes": 148 "bytes": 173
}, },
{ {
"path": ".gitignore", "path": ".gitignore",
@@ -979,13 +979,13 @@
}, },
{ {
"path": "backend/tests/test_controller_hub_release_volume.py", "path": "backend/tests/test_controller_hub_release_volume.py",
"sha256": "630ba534344dd11a499f32ed6aa53816f1cefd0537a4d69f278ed2a11fa68f6a", "sha256": "e13f1f01799fe74821eab9622d7eb4cf9add65196a67bde386f1c11231e04c5d",
"bytes": 160633 "bytes": 161342
}, },
{ {
"path": "backend/tests/test_controller_root_procedure_contract.py", "path": "backend/tests/test_controller_root_procedure_contract.py",
"sha256": "2e6a8645674c32f16d251b5cdcdc4f75d72759c4253aebc312b58e766b1b6581", "sha256": "09fa46cc3a9510bcc8303bf9c6cf5252d3cfa676cdb1a0dad86de108d4b0e542",
"bytes": 6445 "bytes": 7763
}, },
{ {
"path": "backend/tests/test_controller_runtime_capabilities.py", "path": "backend/tests/test_controller_runtime_capabilities.py",
@@ -994,8 +994,8 @@
}, },
{ {
"path": "backend/tests/test_controller_state_reconciliation.py", "path": "backend/tests/test_controller_state_reconciliation.py",
"sha256": "d1d90f6d4fe35e434797dccd2c0ec10357fc347900e6e148c0f85face9d12598", "sha256": "b6b5e82f7818fbfa7cc2faf44dad0aaa23e812fbfa9f09f3e738c80cd74237e1",
"bytes": 11084 "bytes": 11300
}, },
{ {
"path": "backend/tests/test_deluge_connector.py", "path": "backend/tests/test_deluge_connector.py",
@@ -2768,7 +2768,9 @@ def test_installer_explicit_archive_and_install_contract_includes_candidate_help
assert "ops/gitea-deploy-broker/prepare_mcp_hub_candidate.py" in archive_paths assert "ops/gitea-deploy-broker/prepare_mcp_hub_candidate.py" in archive_paths
assert "prepare_mcp_hub_candidate.py" in installed_modules assert "prepare_mcp_hub_candidate.py" in installed_modules
powershell = (ROOT / "scripts/upgrade_deployment_controller.ps1").read_text(encoding="utf-8") powershell = (ROOT / "scripts/upgrade_deployment_controller.ps1").read_text(encoding="utf-8")
assert "ops/gitea-deploy-broker" in powershell.split("& git archive", 1)[1].splitlines()[0] archive_command = next(line for line in powershell.splitlines()
if line.lstrip().startswith("& git ") and " archive --format=tar " in line)
assert "ops/gitea-deploy-broker" in archive_command
def test_current_release_digest_binds_the_role_password_helper(): def test_current_release_digest_binds_the_role_password_helper():
@@ -3280,7 +3282,13 @@ def test_legacy_crlf_compatibility_is_limited_to_one_attested_handoff(
assert module._matches_legacy_crlf_source(name, captured, source, identity) is accepted assert module._matches_legacy_crlf_source(name, captured, source, identity) is accepted
def test_current_e854_crlf_capture_requires_exact_full_release_identity(): @pytest.mark.parametrize("revision,tree,artifact", [
("e854334923cca574482d22b8424ba3ce46ec6aa1", "cf2a117f9222b952deb9902c646116612f3a7ea0",
"e88739bf091c8bac77ea0db5b97300666a1baa8ba984bbf6ae91e3bf25719e08"),
("aaf7d11821a86be65c91fead97a6a4758c4fbacd", "34a90f9bd06fa4efa26a19dbf5c7c13239d03721",
"ba8de75ba04f25b5298f81d107e6108bc7a92de95531b390ade0bcba9e4678e2"),
])
def test_current_attested_crlf_capture_requires_exact_full_release_identity(revision, tree, artifact):
checked_out_source = (ROOT / "scripts/run_repopulse_adoption.py").read_bytes() checked_out_source = (ROOT / "scripts/run_repopulse_adoption.py").read_bytes()
source = checked_out_source.replace(b"\r\n", b"\n") source = checked_out_source.replace(b"\r\n", b"\n")
captured = source.replace(b"\n", b"\r\n") captured = source.replace(b"\n", b"\r\n")
@@ -3291,10 +3299,10 @@ def test_current_e854_crlf_capture_requires_exact_full_release_identity():
"e3036cef0f6e1934297de2d35c0381f93441bbf6f28bd18c94c3f47fc116e4e1" "e3036cef0f6e1934297de2d35c0381f93441bbf6f28bd18c94c3f47fc116e4e1"
) )
identity = { identity = {
"sourceRevision": "e854334923cca574482d22b8424ba3ce46ec6aa1", "sourceRevision": revision,
"sourceTree": "cf2a117f9222b952deb9902c646116612f3a7ea0", "sourceTree": tree,
"controllerVersion": "2.1.14", "controllerVersion": "2.1.14",
"artifactSha256": "e88739bf091c8bac77ea0db5b97300666a1baa8ba984bbf6ae91e3bf25719e08", "artifactSha256": artifact,
} }
assert module._matches_legacy_crlf_source( assert module._matches_legacy_crlf_source(
@@ -3313,17 +3321,23 @@ def test_current_e854_crlf_capture_requires_exact_full_release_identity():
("run_repopulse_adoption.py", "", "", True), ("run_repopulse_adoption.py", "", "", True),
], ],
) )
def test_current_e854_crlf_compatibility_rejects_near_misses( @pytest.mark.parametrize("revision,tree,artifact", [
name, field, value, change_capture, ("e854334923cca574482d22b8424ba3ce46ec6aa1", "cf2a117f9222b952deb9902c646116612f3a7ea0",
"e88739bf091c8bac77ea0db5b97300666a1baa8ba984bbf6ae91e3bf25719e08"),
("aaf7d11821a86be65c91fead97a6a4758c4fbacd", "34a90f9bd06fa4efa26a19dbf5c7c13239d03721",
"ba8de75ba04f25b5298f81d107e6108bc7a92de95531b390ade0bcba9e4678e2"),
])
def test_current_attested_crlf_compatibility_rejects_near_misses(
name, field, value, change_capture, revision, tree, artifact,
): ):
checked_out_source = (ROOT / "scripts/run_repopulse_adoption.py").read_bytes() checked_out_source = (ROOT / "scripts/run_repopulse_adoption.py").read_bytes()
source = checked_out_source.replace(b"\r\n", b"\n") source = checked_out_source.replace(b"\r\n", b"\n")
captured = source.replace(b"\n", b"\r\n") captured = source.replace(b"\n", b"\r\n")
identity = { identity = {
"sourceRevision": "e854334923cca574482d22b8424ba3ce46ec6aa1", "sourceRevision": revision,
"sourceTree": "cf2a117f9222b952deb9902c646116612f3a7ea0", "sourceTree": tree,
"controllerVersion": "2.1.14", "controllerVersion": "2.1.14",
"artifactSha256": "e88739bf091c8bac77ea0db5b97300666a1baa8ba984bbf6ae91e3bf25719e08", "artifactSha256": artifact,
} }
if field: if field:
identity[field] = value identity[field] = value
@@ -1,18 +1,42 @@
from __future__ import annotations from __future__ import annotations
import io
import re import re
import shlex import shlex
import subprocess
import tarfile
from pathlib import Path from pathlib import Path
ROOT = Path(__file__).resolve().parents[2] ROOT = Path(__file__).resolve().parents[2]
def test_windows_archive_preserves_git_bytes_with_autocrlf_enabled(tmp_path):
wrapper = (ROOT / "scripts/upgrade_deployment_controller.ps1").read_text(encoding="utf-8")
command = re.search(r"& (git(?: -c \S+)*) archive --format=tar", wrapper)
assert command is not None
prefix = shlex.split(command.group(1))
subprocess.run(["git", "init", "-q", str(tmp_path)], check=True)
source = b"print('immutable source')\n"
(tmp_path / "scripts").mkdir()
(tmp_path / "scripts/run_repopulse_adoption.py").write_bytes(source)
def git(*arguments):
return subprocess.check_output(["git", "-C", str(tmp_path), *arguments])
git("-c", "core.autocrlf=false", "add", "scripts/run_repopulse_adoption.py")
git("-c", "commit.gpgsign=false", "-c", "user.name=Fixture", "-c",
"user.email=fixture@example.invalid", "commit", "-qm", "fixed source")
git("config", "core.autocrlf", "true")
archive = subprocess.check_output([*prefix, "-C", str(tmp_path), "archive", "--format=tar",
"HEAD", "scripts/run_repopulse_adoption.py"])
with tarfile.open(fileobj=io.BytesIO(archive)) as packaged:
assert packaged.extractfile("scripts/run_repopulse_adoption.py").read() == source
def test_windows_wrapper_archives_every_file_required_by_root_installer(): def test_windows_wrapper_archives_every_file_required_by_root_installer():
installer = (ROOT / "scripts/upgrade_deployment_controller.sh").read_text(encoding="utf-8") installer = (ROOT / "scripts/upgrade_deployment_controller.sh").read_text(encoding="utf-8")
wrapper = (ROOT / "scripts/upgrade_deployment_controller.ps1").read_text(encoding="utf-8") wrapper = (ROOT / "scripts/upgrade_deployment_controller.ps1").read_text(encoding="utf-8")
required = re.search(r"source_paths=\(\s*(.*?)\n\)", installer, re.DOTALL) required = re.search(r"source_paths=\(\s*(.*?)\n\)", installer, re.DOTALL)
archived = re.search(r"& git archive --format=tar .*? \$SourceRevision (.*?)\r?\n", wrapper) archived = re.search(r"& git(?: -c \S+)* archive --format=tar .*? \$SourceRevision (.*?)\r?\n", wrapper)
assert required is not None and archived is not None assert required is not None and archived is not None
archive_paths = set(shlex.split(archived.group(1))) archive_paths = set(shlex.split(archived.group(1)))
required_paths = shlex.split(required.group(1)) required_paths = shlex.split(required.group(1))
@@ -242,15 +242,22 @@ def test_upgrade_rolls_back_state_before_restoring_or_starting_the_old_writer():
def test_wrapper_binds_reconciliation_helper_to_the_immutable_revision(): def test_wrapper_binds_reconciliation_helper_to_the_immutable_revision():
wrapper = WRAPPER_PATH.read_text(encoding="utf-8") wrapper = WRAPPER_PATH.read_text(encoding="utf-8")
archive_line = next(
line for line in wrapper.splitlines()
if re.match(r"^\s*& git(?:\s+-c\s+\S+)*\s+archive\b", line)
)
assert "scripts/reconcile_controller_state.py" in wrapper assert "scripts/reconcile_controller_state.py" in archive_line
assert "git archive" in wrapper assert "$SourceRevision" in archive_line
def test_wrapper_archives_the_fixed_operator_handoff_required_by_root_upgrade(): def test_wrapper_archives_the_fixed_operator_handoff_required_by_root_upgrade():
wrapper = WRAPPER_PATH.read_text(encoding="utf-8") wrapper = WRAPPER_PATH.read_text(encoding="utf-8")
upgrade = UPGRADE_PATH.read_text(encoding="utf-8") upgrade = UPGRADE_PATH.read_text(encoding="utf-8")
archive_line = next(line for line in wrapper.splitlines() if "git archive" in line) archive_line = next(
line for line in wrapper.splitlines()
if re.match(r"^\s*& git(?:\s+-c\s+\S+)*\s+archive\b", line)
)
source_paths_match = re.search(r"(?ms)^source_paths=\((.*?)^\)", upgrade) source_paths_match = re.search(r"(?ms)^source_paths=\((.*?)^\)", upgrade)
assert "scripts/run_repopulse_adoption.py" in archive_line assert "scripts/run_repopulse_adoption.py" in archive_line