From 1b04070d5b93a49832a981bcdef715d41ad2b4ab Mon Sep 17 00:00:00 2001 From: Penguin <50603637+PenguinDOOM@users.noreply.github.com> Date: Sun, 2 Aug 2026 07:37:31 +0900 Subject: [PATCH 01/21] Add organization reference migration --- .../migrate-organization-references.yml | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 .github/workflows/migrate-organization-references.yml diff --git a/.github/workflows/migrate-organization-references.yml b/.github/workflows/migrate-organization-references.yml new file mode 100644 index 0000000..9e1874e --- /dev/null +++ b/.github/workflows/migrate-organization-references.yml @@ -0,0 +1,90 @@ +name: Migrate organization references + +on: + pull_request: + branches: + - master + types: + - opened + - reopened + - synchronize + +permissions: + contents: write + +jobs: + migrate: + if: github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'github-actions[bot]' + runs-on: ubuntu-latest + timeout-minutes: 15 + steps: + - name: Checkout migration branch + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + ref: ${{ github.event.pull_request.head.ref }} + fetch-depth: 0 + + - name: Replace legacy organization references + shell: python + run: | + from pathlib import Path + import json + import subprocess + + old = "Penguin" + "DOOM" + new = "Penguin-Repository" + workflow = Path(".github/workflows/migrate-organization-references.yml") + listing_path = Path("vpm.json") + changed = [] + + paths = subprocess.check_output(["git", "ls-files", "-z"]).decode().split("\0") + for value in paths: + if not value: + continue + path = Path(value) + if path in (workflow, listing_path): + continue + data = path.read_bytes() + if b"\0" in data: + continue + try: + text = data.decode("utf-8") + except UnicodeDecodeError: + continue + updated = text.replace(old, new) + if updated != text: + path.write_text(updated, encoding="utf-8", newline="") + changed.append(value) + + listing = json.loads(listing_path.read_text(encoding="utf-8")) + listing["url"] = "https://raw.githubusercontent.com/Penguin-Repository/VPM-Repository/refs/heads/master/vpm.json" + listing_path.write_text(json.dumps(listing, ensure_ascii=False, indent=2) + "\n", encoding="utf-8", newline="") + changed.append("vpm.json (top-level URL only)") + + print("Updated files:") + print("\n".join(changed)) + + - name: Verify active code uses the new organization + shell: bash + run: | + old="Penguin""DOOM" + if git grep -n -F "$old" -- ':!vpm.json' ':!.github/workflows/migrate-organization-references.yml'; then + echo "Legacy references remain outside historical VPM metadata." + exit 1 + fi + + - name: Run VPM receiver tests + shell: bash + run: | + python -m compileall -q .github/scripts .github/tests + python -m unittest discover -s .github/tests -p "test_*.py" -v + + - name: Remove migration workflow and commit + shell: bash + run: | + git rm -- .github/workflows/migrate-organization-references.yml + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add -A + git commit -m "Update organization references" + git push origin HEAD:${{ github.event.pull_request.head.ref }} From a0ecaa3fcfbf457f99d5583717ff52f84d69d9dd Mon Sep 17 00:00:00 2001 From: Penguin <50603637+PenguinDOOM@users.noreply.github.com> Date: Sun, 2 Aug 2026 07:39:51 +0900 Subject: [PATCH 02/21] Remove migration helper workflow --- .../migrate-organization-references.yml | 90 ------------------- 1 file changed, 90 deletions(-) delete mode 100644 .github/workflows/migrate-organization-references.yml diff --git a/.github/workflows/migrate-organization-references.yml b/.github/workflows/migrate-organization-references.yml deleted file mode 100644 index 9e1874e..0000000 --- a/.github/workflows/migrate-organization-references.yml +++ /dev/null @@ -1,90 +0,0 @@ -name: Migrate organization references - -on: - pull_request: - branches: - - master - types: - - opened - - reopened - - synchronize - -permissions: - contents: write - -jobs: - migrate: - if: github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'github-actions[bot]' - runs-on: ubuntu-latest - timeout-minutes: 15 - steps: - - name: Checkout migration branch - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - with: - ref: ${{ github.event.pull_request.head.ref }} - fetch-depth: 0 - - - name: Replace legacy organization references - shell: python - run: | - from pathlib import Path - import json - import subprocess - - old = "Penguin" + "DOOM" - new = "Penguin-Repository" - workflow = Path(".github/workflows/migrate-organization-references.yml") - listing_path = Path("vpm.json") - changed = [] - - paths = subprocess.check_output(["git", "ls-files", "-z"]).decode().split("\0") - for value in paths: - if not value: - continue - path = Path(value) - if path in (workflow, listing_path): - continue - data = path.read_bytes() - if b"\0" in data: - continue - try: - text = data.decode("utf-8") - except UnicodeDecodeError: - continue - updated = text.replace(old, new) - if updated != text: - path.write_text(updated, encoding="utf-8", newline="") - changed.append(value) - - listing = json.loads(listing_path.read_text(encoding="utf-8")) - listing["url"] = "https://raw.githubusercontent.com/Penguin-Repository/VPM-Repository/refs/heads/master/vpm.json" - listing_path.write_text(json.dumps(listing, ensure_ascii=False, indent=2) + "\n", encoding="utf-8", newline="") - changed.append("vpm.json (top-level URL only)") - - print("Updated files:") - print("\n".join(changed)) - - - name: Verify active code uses the new organization - shell: bash - run: | - old="Penguin""DOOM" - if git grep -n -F "$old" -- ':!vpm.json' ':!.github/workflows/migrate-organization-references.yml'; then - echo "Legacy references remain outside historical VPM metadata." - exit 1 - fi - - - name: Run VPM receiver tests - shell: bash - run: | - python -m compileall -q .github/scripts .github/tests - python -m unittest discover -s .github/tests -p "test_*.py" -v - - - name: Remove migration workflow and commit - shell: bash - run: | - git rm -- .github/workflows/migrate-organization-references.yml - git config user.name "github-actions[bot]" - git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - git add -A - git commit -m "Update organization references" - git push origin HEAD:${{ github.event.pull_request.head.ref }} From a4514a71ab438c265d22e1a58d6cc373004909d3 Mon Sep 17 00:00:00 2001 From: Penguin <50603637+PenguinDOOM@users.noreply.github.com> Date: Sun, 2 Aug 2026 07:40:32 +0900 Subject: [PATCH 03/21] Run organization migration through existing CI --- .github/workflows/receiver-tests.yml | 71 +++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) diff --git a/.github/workflows/receiver-tests.yml b/.github/workflows/receiver-tests.yml index 10c18b5..c6100ae 100644 --- a/.github/workflows/receiver-tests.yml +++ b/.github/workflows/receiver-tests.yml @@ -18,11 +18,80 @@ on: - .github/workflows/sync-vpm-yanks.yml permissions: - contents: read + contents: write jobs: + migrate: + name: Apply organization migration + if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'github-actions[bot]' + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Checkout migration branch + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + ref: ${{ github.event.pull_request.head.ref }} + fetch-depth: 0 + + - name: Replace active repository references + shell: python + run: | + from pathlib import Path + import json + import subprocess + + old = "Penguin" + "DOOM" + new = "Penguin-Repository" + listing_path = Path("vpm.json") + workflow_path = Path(".github/workflows/receiver-tests.yml") + + for value in subprocess.check_output(["git", "ls-files", "-z"]).decode().split("\0"): + if not value: + continue + path = Path(value) + if path in (listing_path, workflow_path): + continue + data = path.read_bytes() + if b"\0" in data: + continue + try: + text = data.decode("utf-8") + except UnicodeDecodeError: + continue + updated = text.replace(old, new) + if updated != text: + path.write_text(updated, encoding="utf-8", newline="") + + listing = json.loads(listing_path.read_text(encoding="utf-8")) + listing["url"] = "https://raw.githubusercontent.com/Penguin-Repository/VPM-Repository/refs/heads/master/vpm.json" + listing_path.write_text(json.dumps(listing, ensure_ascii=False, indent=2) + "\n", encoding="utf-8", newline="") + + - name: Verify active references + shell: bash + run: | + old="Penguin""DOOM" + if git grep -n -F "$old" -- ':!vpm.json' ':!.github/workflows/receiver-tests.yml'; then + exit 1 + fi + + - name: Compile and test receiver + run: | + python -m compileall -q .github/scripts .github/tests + python -m unittest discover -s .github/tests -p "test_*.py" -v + + - name: Restore CI workflow and commit migration + shell: bash + run: | + git show origin/master:.github/workflows/receiver-tests.yml > .github/workflows/receiver-tests.yml + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add -A + git commit -m "Update organization references" + git push origin HEAD:${{ github.event.pull_request.head.ref }} + test: name: Python 3.12 unit tests + if: github.actor == 'github-actions[bot]' || github.event_name == 'push' runs-on: ubuntu-latest timeout-minutes: 10 steps: From 5bd4b34d27f83b4933ec9b5c36a0a1dbf0d7828a Mon Sep 17 00:00:00 2001 From: Penguin <50603637+PenguinDOOM@users.noreply.github.com> Date: Sun, 2 Aug 2026 07:41:25 +0900 Subject: [PATCH 04/21] Trust the organization repository identity --- .github/scripts/vpm_common.py | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/.github/scripts/vpm_common.py b/.github/scripts/vpm_common.py index 6b785a0..ecd1af7 100644 --- a/.github/scripts/vpm_common.py +++ b/.github/scripts/vpm_common.py @@ -10,7 +10,9 @@ from typing import Any, Mapping PACKAGE_NAME = "jp.penguin.purebase" -SOURCE_REPOSITORY = "PenguinDOOM/Pure-Base" +SOURCE_REPOSITORY = "Penguin-Repository/Pure-Base" +LEGACY_SOURCE_REPOSITORY = "PenguinDOOM/Pure-Base" +TRUSTED_SOURCE_REPOSITORIES = frozenset((SOURCE_REPOSITORY, LEGACY_SOURCE_REPOSITORY)) EXPECTED_LICENSE = "Apache-2.0" LICENSE_PATH = "LICENSE" VPM_PATH = Path("vpm.json") @@ -123,7 +125,7 @@ def reject_non_finite_constant(value: str) -> None: def reject_duplicate_object_keys(pairs: list[tuple[str, Any]]) -> dict[str, Any]: - """Build one JSON object while rejecting duplicate object keys.""" + """Build one JSON object while rejecting duplicate keys.""" result: dict[str, Any] = {} for key, value in pairs: if key in result: @@ -146,20 +148,31 @@ def strict_json_dumps(value: Any) -> str: return json.dumps(value, ensure_ascii=False, indent=2, allow_nan=False) + "\n" -def expected_urls(version: str) -> tuple[str, str, str]: +def expected_urls( + version: str, + source_repository: str = SOURCE_REPOSITORY, +) -> tuple[str, str, str]: """Return the trusted asset name, asset URL, and release URL.""" + if source_repository not in TRUSTED_SOURCE_REPOSITORIES: + raise UpdateError(f"Unsupported sourceRepository: {source_repository!r}.") asset_name = f"{PACKAGE_NAME}-{version}.zip" package_url = ( - f"https://github.com/{SOURCE_REPOSITORY}/releases/download/" + f"https://github.com/{source_repository}/releases/download/" f"{version}/{asset_name}" ) - release_url = f"https://github.com/{SOURCE_REPOSITORY}/releases/tag/{version}" + release_url = f"https://github.com/{source_repository}/releases/tag/{version}" return asset_name, package_url, release_url -def immutable_source_url(commit_sha: str, path: str) -> str: +def immutable_source_url( + commit_sha: str, + path: str, + source_repository: str = SOURCE_REPOSITORY, +) -> str: """Build a source URL pinned to an immutable commit SHA.""" - return f"https://github.com/{SOURCE_REPOSITORY}/blob/{commit_sha}/{path}" + if source_repository not in TRUSTED_SOURCE_REPOSITORIES: + raise UpdateError(f"Unsupported sourceRepository: {source_repository!r}.") + return f"https://github.com/{source_repository}/blob/{commit_sha}/{path}" def version_key(version: str) -> SemanticVersion: From 8a7548c34c402e668b2b80646bf0c4d11b19d802 Mon Sep 17 00:00:00 2001 From: Penguin <50603637+PenguinDOOM@users.noreply.github.com> Date: Sun, 2 Aug 2026 07:41:47 +0900 Subject: [PATCH 05/21] Validate the transferred source repository --- .github/scripts/vpm_payload.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/.github/scripts/vpm_payload.py b/.github/scripts/vpm_payload.py index 50c09d9..0965a86 100644 --- a/.github/scripts/vpm_payload.py +++ b/.github/scripts/vpm_payload.py @@ -13,7 +13,7 @@ LICENSE_PATH, PACKAGE_NAME, SHA256_RE, - SOURCE_REPOSITORY, + TRUSTED_SOURCE_REPOSITORIES, UpdateError, expected_urls, immutable_source_url, @@ -42,7 +42,7 @@ def validate_payload(values: Mapping[str, str] | None = None) -> dict[str, str]: if package_name != PACKAGE_NAME: raise UpdateError(f"Unsupported packageName: {package_name!r}.") - if source_repository != SOURCE_REPOSITORY: + if source_repository not in TRUSTED_SOURCE_REPOSITORIES: raise UpdateError(f"Unsupported sourceRepository: {source_repository!r}.") parse_semver(version) if tag != version: @@ -54,7 +54,9 @@ def validate_payload(values: Mapping[str, str] | None = None) -> dict[str, str]: if not SHA256_RE.fullmatch(expected_sha256): raise UpdateError("sha256 must be a 64-character hexadecimal SHA-256 value.") - asset_name, trusted_package_url, trusted_release_url = expected_urls(version) + asset_name, trusted_package_url, trusted_release_url = expected_urls( + version, source_repository + ) if package_url != trusted_package_url: raise UpdateError( "packageUrl does not match the immutable Pure Base release asset URL: " @@ -69,7 +71,7 @@ def validate_payload(values: Mapping[str, str] | None = None) -> dict[str, str]: normalized_commit_sha = commit_sha.lower() return { "package_name": PACKAGE_NAME, - "source_repository": SOURCE_REPOSITORY, + "source_repository": source_repository, "version": version, "commit_sha": normalized_commit_sha, "policy_commit_sha": policy_commit_sha.lower(), @@ -78,7 +80,9 @@ def validate_payload(values: Mapping[str, str] | None = None) -> dict[str, str]: "expected_sha256": expected_sha256, "release_url": trusted_release_url, "changelog_url": trusted_release_url, - "licenses_url": immutable_source_url(normalized_commit_sha, LICENSE_PATH), + "licenses_url": immutable_source_url( + normalized_commit_sha, LICENSE_PATH, source_repository + ), } @@ -86,7 +90,7 @@ def github_api_get(url: str) -> dict[str, Any]: """Read one GitHub REST JSON object using the workflow token when available.""" headers = { "Accept": "application/vnd.github+json", - "User-Agent": "PenguinDOOM-VPM-Repository-Actions", + "User-Agent": "Penguin-Repository-VPM-Repository-Actions", "X-GitHub-Api-Version": "2022-11-28", } token = os.environ.get("GITHUB_TOKEN", "").strip() @@ -144,7 +148,7 @@ def verify_release_commit( ) -> None: """Confirm the released tag resolves to the dispatched source commit.""" actual_commit = resolve_tag_commit( - SOURCE_REPOSITORY, payload["version"], api_get=api_get + payload["source_repository"], payload["version"], api_get=api_get ) if actual_commit != payload["commit_sha"]: raise UpdateError( From 5f6804c4c3a85565d1db819be3e4049865209964 Mon Sep 17 00:00:00 2001 From: Penguin <50603637+PenguinDOOM@users.noreply.github.com> Date: Sun, 2 Aug 2026 07:42:01 +0900 Subject: [PATCH 06/21] Update yank workflow source repository --- .github/workflows/sync-vpm-yanks.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/sync-vpm-yanks.yml b/.github/workflows/sync-vpm-yanks.yml index a68eeaa..1a1edd4 100644 --- a/.github/workflows/sync-vpm-yanks.yml +++ b/.github/workflows/sync-vpm-yanks.yml @@ -13,7 +13,7 @@ on: source_repository: description: Fixed Pure Base source repository required: true - default: PenguinDOOM/Pure-Base + default: Penguin-Repository/Pure-Base type: string policy_commit_sha: description: Pure Base vpm-yanks.json policy commit SHA @@ -85,4 +85,4 @@ jobs: git config user.email "41898282+github-actions[bot]@users.noreply.github.com" git add -- vpm.json git commit -m "Sync ${PACKAGE_NAME} yank policy" - git push origin "HEAD:master" \ No newline at end of file + git push origin "HEAD:master" From 793b200cf9c85b6338b3fda0246742c47c561786 Mon Sep 17 00:00:00 2001 From: Penguin <50603637+PenguinDOOM@users.noreply.github.com> Date: Sun, 2 Aug 2026 07:42:18 +0900 Subject: [PATCH 07/21] Update release workflow source repository --- .github/workflows/update-vpm.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-vpm.yml b/.github/workflows/update-vpm.yml index 4695014..8588c59 100644 --- a/.github/workflows/update-vpm.yml +++ b/.github/workflows/update-vpm.yml @@ -37,7 +37,7 @@ on: source_repository: description: Source repository in owner/name form required: true - default: PenguinDOOM/Pure-Base + default: Penguin-Repository/Pure-Base type: string permissions: From 92d0228342c14b468c9345288c8261f22a4ed1f1 Mon Sep 17 00:00:00 2001 From: Penguin <50603637+PenguinDOOM@users.noreply.github.com> Date: Sun, 2 Aug 2026 07:42:28 +0900 Subject: [PATCH 08/21] Update the canonical VPM repository URL --- vpm.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vpm.json b/vpm.json index 417d190..7a5d56e 100644 --- a/vpm.json +++ b/vpm.json @@ -1,7 +1,7 @@ { "name": "Penguin VPM Repository", "id": "jp.penguin.vpm", - "url": "https://raw.githubusercontent.com/PenguinDOOM/VPM-Repository/refs/heads/master/vpm.json", + "url": "https://raw.githubusercontent.com/Penguin-Repository/VPM-Repository/refs/heads/master/vpm.json", "author": "Penguin", "packages": { "jp.penguin.purebase": { From 7c904d4f0d05c98a5ce3c37c991e4968de32bfd3 Mon Sep 17 00:00:00 2001 From: Penguin <50603637+PenguinDOOM@users.noreply.github.com> Date: Sun, 2 Aug 2026 07:42:37 +0900 Subject: [PATCH 09/21] Restore the receiver test workflow --- .github/workflows/receiver-tests.yml | 71 +--------------------------- 1 file changed, 1 insertion(+), 70 deletions(-) diff --git a/.github/workflows/receiver-tests.yml b/.github/workflows/receiver-tests.yml index c6100ae..10c18b5 100644 --- a/.github/workflows/receiver-tests.yml +++ b/.github/workflows/receiver-tests.yml @@ -18,80 +18,11 @@ on: - .github/workflows/sync-vpm-yanks.yml permissions: - contents: write + contents: read jobs: - migrate: - name: Apply organization migration - if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'github-actions[bot]' - runs-on: ubuntu-latest - timeout-minutes: 10 - steps: - - name: Checkout migration branch - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - with: - ref: ${{ github.event.pull_request.head.ref }} - fetch-depth: 0 - - - name: Replace active repository references - shell: python - run: | - from pathlib import Path - import json - import subprocess - - old = "Penguin" + "DOOM" - new = "Penguin-Repository" - listing_path = Path("vpm.json") - workflow_path = Path(".github/workflows/receiver-tests.yml") - - for value in subprocess.check_output(["git", "ls-files", "-z"]).decode().split("\0"): - if not value: - continue - path = Path(value) - if path in (listing_path, workflow_path): - continue - data = path.read_bytes() - if b"\0" in data: - continue - try: - text = data.decode("utf-8") - except UnicodeDecodeError: - continue - updated = text.replace(old, new) - if updated != text: - path.write_text(updated, encoding="utf-8", newline="") - - listing = json.loads(listing_path.read_text(encoding="utf-8")) - listing["url"] = "https://raw.githubusercontent.com/Penguin-Repository/VPM-Repository/refs/heads/master/vpm.json" - listing_path.write_text(json.dumps(listing, ensure_ascii=False, indent=2) + "\n", encoding="utf-8", newline="") - - - name: Verify active references - shell: bash - run: | - old="Penguin""DOOM" - if git grep -n -F "$old" -- ':!vpm.json' ':!.github/workflows/receiver-tests.yml'; then - exit 1 - fi - - - name: Compile and test receiver - run: | - python -m compileall -q .github/scripts .github/tests - python -m unittest discover -s .github/tests -p "test_*.py" -v - - - name: Restore CI workflow and commit migration - shell: bash - run: | - git show origin/master:.github/workflows/receiver-tests.yml > .github/workflows/receiver-tests.yml - git config user.name "github-actions[bot]" - git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - git add -A - git commit -m "Update organization references" - git push origin HEAD:${{ github.event.pull_request.head.ref }} - test: name: Python 3.12 unit tests - if: github.actor == 'github-actions[bot]' || github.event_name == 'push' runs-on: ubuntu-latest timeout-minutes: 10 steps: From c628e3dae88cc1d1a51383cd368aa0151240b946 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 1 Aug 2026 22:42:41 +0000 Subject: [PATCH 10/21] Update organization references --- .../sync_vpm_yanks.cpython-312.pyc | Bin 0 -> 4144 bytes .../__pycache__/update_vpm.cpython-312.pyc | Bin 0 -> 4541 bytes .../__pycache__/vpm_archive.cpython-312.pyc | Bin 0 -> 9372 bytes .../__pycache__/vpm_common.cpython-312.pyc | Bin 0 -> 9111 bytes .../__pycache__/vpm_listing.cpython-312.pyc | Bin 0 -> 6955 bytes .../__pycache__/vpm_payload.cpython-312.pyc | Bin 0 -> 7426 bytes .../__pycache__/vpm_policy.cpython-312.pyc | Bin 0 -> 5630 bytes .github/scripts/vpm_archive.py | 2 +- .github/scripts/vpm_common.py | 2 +- .../test_vpm_receiver.cpython-312.pyc | Bin 0 -> 26292 bytes .../test_vpm_yanks.cpython-312.pyc | Bin 0 -> 32550 bytes .github/tests/test_vpm_receiver.py | 22 +++++++++--------- .github/tests/test_vpm_yanks.py | 2 +- README.md | 20 ++++++++-------- 14 files changed, 24 insertions(+), 24 deletions(-) create mode 100644 .github/scripts/__pycache__/sync_vpm_yanks.cpython-312.pyc create mode 100644 .github/scripts/__pycache__/update_vpm.cpython-312.pyc create mode 100644 .github/scripts/__pycache__/vpm_archive.cpython-312.pyc create mode 100644 .github/scripts/__pycache__/vpm_common.cpython-312.pyc create mode 100644 .github/scripts/__pycache__/vpm_listing.cpython-312.pyc create mode 100644 .github/scripts/__pycache__/vpm_payload.cpython-312.pyc create mode 100644 .github/scripts/__pycache__/vpm_policy.cpython-312.pyc create mode 100644 .github/tests/__pycache__/test_vpm_receiver.cpython-312.pyc create mode 100644 .github/tests/__pycache__/test_vpm_yanks.cpython-312.pyc diff --git a/.github/scripts/__pycache__/sync_vpm_yanks.cpython-312.pyc b/.github/scripts/__pycache__/sync_vpm_yanks.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bce8b996594a88bcc860b731ed1f0658873a5393 GIT binary patch literal 4144 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 Ds0xve literal 0 HcmV?d00001 diff --git a/.github/scripts/__pycache__/vpm_archive.cpython-312.pyc b/.github/scripts/__pycache__/vpm_archive.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..96c6554d9771658746d8ec86ec29b684584c7cd3 GIT binary patch literal 9372 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 literal 0 HcmV?d00001 diff --git a/.github/scripts/__pycache__/vpm_common.cpython-312.pyc b/.github/scripts/__pycache__/vpm_common.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c12ecadce518c3064e4d3c1d20b9d8516e89e47 GIT binary patch literal 9111 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 literal 0 HcmV?d00001 diff --git a/.github/scripts/__pycache__/vpm_listing.cpython-312.pyc b/.github/scripts/__pycache__/vpm_listing.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e987851fcb7266ad92118bd76fdb18930c5724d GIT binary patch literal 6955 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 literal 0 HcmV?d00001 diff --git a/.github/scripts/__pycache__/vpm_payload.cpython-312.pyc b/.github/scripts/__pycache__/vpm_payload.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7a721547c3cce1fa894b2f0d16b6c1c5fd7bb227 GIT binary patch literal 7426 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 ar>$j2&pre9uN^+}4En6~83z(FuKxj{WN}jf literal 0 HcmV?d00001 diff --git a/.github/scripts/__pycache__/vpm_policy.cpython-312.pyc b/.github/scripts/__pycache__/vpm_policy.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..76b3dc49278eaa585046cc8e98b5c4df624b5365 GIT binary patch literal 5630 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 Z#kJvO8t&iv*O1@v+A-DlSr{SF{1*_Kt6~5E literal 0 HcmV?d00001 diff --git a/.github/scripts/vpm_archive.py b/.github/scripts/vpm_archive.py index d3af5c0..ce40cba 100644 --- a/.github/scripts/vpm_archive.py +++ b/.github/scripts/vpm_archive.py @@ -27,7 +27,7 @@ def download_archive(url: str, destination: Path) -> str: url, headers={ "Accept": "application/octet-stream", - "User-Agent": "PenguinDOOM-VPM-Repository-Actions", + "User-Agent": "Penguin-Repository-VPM-Repository-Actions", }, ) digest = hashlib.sha256() diff --git a/.github/scripts/vpm_common.py b/.github/scripts/vpm_common.py index ecd1af7..a3afdb7 100644 --- a/.github/scripts/vpm_common.py +++ b/.github/scripts/vpm_common.py @@ -11,7 +11,7 @@ PACKAGE_NAME = "jp.penguin.purebase" SOURCE_REPOSITORY = "Penguin-Repository/Pure-Base" -LEGACY_SOURCE_REPOSITORY = "PenguinDOOM/Pure-Base" +LEGACY_SOURCE_REPOSITORY = "Penguin-Repository/Pure-Base" TRUSTED_SOURCE_REPOSITORIES = frozenset((SOURCE_REPOSITORY, LEGACY_SOURCE_REPOSITORY)) EXPECTED_LICENSE = "Apache-2.0" LICENSE_PATH = "LICENSE" diff --git a/.github/tests/__pycache__/test_vpm_receiver.cpython-312.pyc b/.github/tests/__pycache__/test_vpm_receiver.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c98d66c4c4d62a895058b34a4f2501d5c999795d GIT binary patch literal 26292 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

FrZb83@|O9R>C%^ z%Etwe3}M05Y@?zaj!havQaCo_y@OQt95rMky>tM_ddsJNzCsWFfRbfOnCi^X;XDE3 z(A2s`7vkzF{Sv=@nbHJ{g?X_ zuIwjV?cX|b=P&(s`-;O8b9my8`W464m}Bepu9%~3$sTj;y<$yprr)xC&h}e*pUb;y zc%$d)#V__QbDjrg-e6qkkUVheInMBcA#YbM<9mR7LeSVCEf)~zU6+ru?%z0c(tEcYADh8_2FZHAt!7gkEP#7ef@M^s49 z{gNSrVc2lBWu>4YR?u*tV?XboF&;A*dav$TDQt`tHs0sx*Zof$dkupIy^wz0|E%E^ zgW+&eDf@ZYBnXlcK@xn3B=`U+N)V~l60;x|0*-A|{aYWZlizI3S)@;hQZo(u^Lp|vD)IQB_7A&AO(<-r=6X%?sKn5Kp zXiwAczw_E%EJ#3Na@><4acAbvoqO-x`@jGH-u=GU>*8>{bfvc|b(Z6PL^t|jS1}+edv9r)Fu(Q40&d!c@2Rn=HB0D?Vo$Tyt zcj0X7cK3MNJ*+OF+uM`Zp2u?*F60U2e~VXJ@2b|jW1hdIU3S%&dHR)PFUO_ih`Bkg zz3_?DC9=ATLSok%y%qD^wa&cOuOuGrE(sOt-|#JrA06yFo!zB9W$k6ScD0vF?)D1F z)4o*lwpU7d?Nw5K`!cCYS|<5k7220e%cX)>ZS8*K_@zSRR7=%T5prrQ+#yaXewC9- zLawfZYVGOix2)=2`wCWa2}+hersPUivJ555A5(G_D_Mb(OCM8mb!d%L`7%aLrkQYc zolftgdachT&kb4!t#viAJ^LfQQ90NV^+!WWRPlF4WdF&2Ipp6LR6_n|PagL_AMAbE z-xui)cMSTK!QPI`a-=sL3r53{-i9Ajt#y3L9qjFmL|LBFihJA1VDvK1LSHc2arwst zTq%drA&2{-O3FD9kzelYjtnUD=Gi_e7!9?^azu_5b@es$g?cabhkG0P(20xaL#*FcQHBYE+x{NS`%F0ky>+cfk(`^wHrbBI) zLoZ{VB|(SnHm=Sd+jBY;?U#G~9l>5qMMtpPfA-A5`bK?{E)HTU*+d5YQb-BQAxWJ? z1v3g|X~p*mjnp)rMq#Xq~e z;Zityx&Pt@25Bq}VDM7cNRf{Io)EyY0`D!O3L24&a38tzzt;46(}z{d z9+cKjEn5{|*6?ZY2CY);p-iz{CC(ChHnKgr`9-Y<5Jp8HZ{I^Q8InZdhU#;gg* zV6!%gi}YEG8nY(xVO}5eVa!sL-eJd(kskvsAGQoxB+JWqPj*L*nUk#gyFbU9Fp*Zf zZO9TsjbuhYqQ;ug_PPZL7 z(VDWNv6SoCV0XWYpmo-ijap0D`{Yn(_-e{4hl0SmfZ8dA$e`cvmx(8&O0#A&5a|ri z%koM*U5h{E5E9I)xAMlNG5Pw1q<7uO!Kvc18(Xel`R1-f@v4#IQ;y*@L{Y zc=_>UUTa)zec-ORacHbG^eevBUfN!`+ykuo4aTUh?;VSb(qv{R4n`e}AtW>IU*j{?2fyTf#J44o3Yw{Yum? z0|&#s{%}uEe>8ZpJJb*>yBv-7DNP$TV1j%4kQ44@@US6fYlwyWQhPf-;}I)4qPIo_ zf{|sAfS9WpG~jZmesjadSP4jRcewlNU~Hg4xg3;2az{iC#RMXS+h(0IJ`cU_3C+49 z_-Yjl>MSW6*Z{zTP&y>liMS8;gi;QTq@=9cgH1iaxFVfc{wC zj<={Dr5niz_t4H2R819COcm6PuO2VIy&|5!W2&TTsX3nAqp0X)l#ni#p zzp+}X3a57MyLM=zs($=ZvTA#xc>7N%bJ}WKnm28=m$;^_qQ^eXiGuy_eqzTH#fFOB zC|c?2z}Yx7a=_0VL)Kedh->E|Ra+#;!jS5$I9qVG;cUfOz}beg9cKY&2hMh!MVuWt zgE&Yc&aOdcojX-RV$n$^6}2%wdWOWO3^wCItBe8_ga6UQLYU`z_+be2!|)qD z#C1814=^r3ajd$4z;n6FL?ME!$B@B(03iAx%=4B7bj>U;*@$#UspssFgj}_ndC`2m zWZFA+ldb7&kXWV0@QnTpa&?YYnQm`dQYFWmp9?(S+r2&mj7Ok%wXY$O=SRY*W)TqH-RCFG|l|7l8y(Lgj+l#m>4`CNanTlQ1-a!N?F zxCt3X33YdxucWMUaDV|5*qFx0YDioO1UouH5MBcs(+zCj8hAN;QEM~Sm=hWr9{(oc zyfT1fg!>=j!H@D*j)jwX8%M2EqGwVpONd~54Y!>WVv~_^qv(3uH_PI+jT7QdBQsH6 zH(r}8Zy1jy%A3A(?rz5q+Ty3qeE+$L=U$jN|MEmnG=Al3yn8TtK9+p$mBjH^5(kIk zyNBS;b~r4t0e(03({<(;bvAh2#KOeXj;CvE7e=lgGY&p4ugV zF<_-9nYT3!Rt(U%vnf%#dqUhZ=>E=zcq-FOAU)yEv~toguGdA)7IQ~ik*H=j@r z%bryT=ihNSo6D{5lnc!@jto*J;vpktDO{uj1*X7CGVlTJ0totfVDqqb*aiY+$jf*^ zJBCQh(LjwR6QvA^SuX?PLv67my(}i4A2QyaJMr0o@Wx>qral`O-Y8aqVNQM^6G(3I zjDXZxAkmaXBYlu>uY|e-s-$eNu{QMbl^QkkSygAMY1*_tM~=ogYnp0uD7ZE2Yjnm~ z)AY*lFxo8AGXjx|1X6*QLxW0ip5_)&c@0x!(T&cqtVGeUey@Ze14uQ)!#AOklQ=*Y zfk0TgDX8c{73u_eKV7rOMN)qsBsfU9h61O^t@QW+5`_SQh^j_a z8#6G*e3ia55R3*wkVJJv>P4dvPSjb5wJrdM7Ezx>o$E(3!u_eZVcOK!tXkpOC0Z5L|nd8A~Y{^zf<9$ z>uRBSt@EEUGRn_ji0bS>3lWxw#=yl$50e}J`uG1Z7xpaz9T={8H0>%tmCq1)`g=6x z0|tb<3FrtLV2euVM}Tm|9YPN)jeL9_D1xhg-R6D(+iN^h_uo7tKsthvl~E@L&MESn}}5w<8Bki4=u2)k)B8IH+kZdy!O$j~o0X3TX@ zSWyUNWf;H6>Y2r`iHpV#E?~+RP|vIMecO;QuJPd)+;BEne@obrDQNwS&0sZ~!MP%iE}t-gMScmTWD-v@<|Y#l=ZvXFc-W*Y z1P>oo!B?p5N6f~4bvBwOJo{)i_Osd8&t_vkKPz|O^`B)t+JgSgq23TQA5FW5=b4wa zkH#5&YT3l>{WRE;Uc4E>UsuP zN8q238}w%8R#?{G8@k#D1qrm?RMSX>AiZPpD3jU3`kK&H$Y?c9G@MK=BUwPx$aElA znm=<(FI=F?D|8V@3H6|IUCU&uA31VAn|`xTfLDdFf)eQ3T;wrN0-tV_a~Q>LW1OH9W(7?*!&NhqN&U*F-AU@{cHVw%)Xm%Y~fKDO+o#Hw1&Y7zmKBClE-v0)d{0 z)Zb0lo7 z*o80fGd{aeGvmt_R?XCSku0+br}!CHqQ`b@gALAfE|{iQ$x4wm z!?vj5VCbTDvW}=>jGb$O)s=){VaV21ko6*NhXl!XOEAr`(L%jUwAi>>qF+h&8`fca zlspdX=pvhZ))B4LGrGv$pLGnuaeGVDqi@Kjm{yxVt1xcivUS3Wh>@jZLFHXT{4IC- z8&ITb)%VlW=nDN#A0uYrv~;c3^Ubq9Pf)B7J0Mxi@mlOX`ch}st6yPm*6G*gnavED zH*gH4%~5ungO)kg(PQ&iO;65~e`cQi=W^!{TGaeHPpr9_Icxkuc$CTTnHIl*$RmF* z%&@Y*k8G_Js}!UN7%5EgL%L71fjN{~XGJ)KSU`|WfCsCl$l@m;-rTe@zh$bR?ZnyB z`&$C1TTY&6J96g4>E}}gn(t}Ni+LfUk% zR6yws_9>SmQH094m9P{FggQIX{kkQoJPMgI!(38g6fCzh+#O04p21Z_4$6ZEpsaRK zT$4;#EtgP2Si=0I%w3go4al$&1)?O8kmFnaB9fHL?5RxbC}opi=tx;2O3D%Hy%L7F zm9nb>i>XYf3i{*-OihaV1=K(0??}O^4`&-SQRiU#c1j3QSe86WRTojmS$6}H-rtl* z_wORk>vBqr$l*)j-e7mit+h^3JPH~4$?%IqjSOi}eJTMqH0nen`~c?N;FXXP(5vi6 zs9CW0Qb>yJ&qXg6S;@aaCzL~g{}Jv-V%109l1cBHgm+ESyLOr@fleN8XnwGCdECDx zxpeF8SYm1O=&=W-OW%sU8Jnot@f}C9W^b~zdGzpV*!~Id$5GEr;2N)iZ@RAS3Y#u3JO1V;MsH`x1?gSWL2VM)!VNmOSZs% zP_P5#CX2TwinmS_Z->%Uu;Y^=6#azLlj$-J_6ScUEZ5i1PgZS7RBgF)E?%`IS=Dm) zDj6i!(Fd!a{mBZv4Ji*&tBr2IW1%DgYEMfvv|g%&>l{XGsmy=N0zyxx0G2g=;@ z2`%OBdnFE(yjLl-taRS1cA)&dHA2g#Ofw1L38*+f^H;dg`C~5EdKW2-S;vq?r_s6i zA9KMQJkWd=|!yAeyYl-PaeZL%qS5Ry?XHs5jFy0a z_ejw!4RCV+sARZDzamINml2tvx5;s%LMIQgRg4Y7 zTc`jcjX+iw!QWL(;AB8~p7SQhkeA~nP>xk(?^Z^&c zvkLB)`L}qUdm|5SV*cM+5g%arF$MXx%7aJ|=V)oz2-exzsf41$ODURF(t^rH7#Ev$ z?!FWv^Mm|U?8W(^R*xHjFDVolkb`}FKmaukHbCLch$GR$1vE!f!|v_~LVA^_8jSjr z=#o;6-sx}e_tvr;pLkso-sCn zOAd3b219+FC&(P)u5hvq0w7?pjgxHTHBgUla=(Jmvn#-7NnoXf*8w?_;|5|NCD9CI zrT6Nbt+UPz9g!Z;j?jjboo1+C!4zGFI5BHOpy-}i5TwpMJwXJd${6X?r0aL)iBbrqbIn0q%4bJL>q#VJ%Z~#$)vGe~R)1lQq ziB2$o8fIcDzv6mFBENd7%s;j|Ub;5!TMIw&FLhlzAJ4BD!;`x4^LN@3^?RpkH{5wH zQF<`$Lx5}f#M1hBQA6CLQV_uT@1af>)CBhj`$#KHaWYNEYynAhFW`2)Ulrso)Ol1& zPRPN+nACu#Z{s%QytsX<3alx+1fRYXLX>tS+?x`>1Q3kkr*~+C8FkmhJcee>NzXch z;9eHiCf}lRzl+3_;P&oSCAjU3A}<=YV@IFh%=}mC*=tDtj(jjXKgz4RF%Vy~JHBjB zGViHT>x06w$-Amo=sOBi$(_`S8$R*WDfeSO#-pg zuGJ^@>?fTT$UIg=@Ej%U0Hl>1%w@=S%b~LXEp{gdgNgd|UZs~+V|OUL`i8}{2;97=!kP8azuD zP9i~R7FFm+6sH4WE!H+aV(D>Zi>~y~(S3z@58>C=k92%``{`uu)@0$f$->=6 zoIXF{y8tZ+1u3lNMd&q@QpgQ*5ObsFu&5j3Mp=RHdS}&=ed~pHb{FjPJKpt*xPI3! z?5lIXyV60|>xF&WG9zyYRhfME^SF2|3#BFdChiQ|ik`4+#rG(hXnPCfbGN9iJ%!MCwzb@2kG3Iv6fiy@nEW>iy;;D^n{}UwK-jI zB0SJqHKZktJ^uvXrw|z;_U!R}?a1p#;!9fZd(^=DmVx%=R#2<_`zQxR=8tib z|9}!=x$=KjbNA9UO|*&PupKd_hvohr9x;jVCEc#ED+7ra_aU*9PkLznn)*kPc^C=s z$Di7G=Sd!+_IZU_F`Kq1VSZL2;`ZzA9oF9wnz>9h z+`xxX6vJT4q{|yk@uF36kLLIw5SPD$1e|FvU1vhHDh$T) zAaljc)(lWyU|(ZLp4eyqE%k^(wHfTr*sRXgU=(ve_W*(J+p#-4?tAtV=pJC8dw_xN z0S$D=@*Aypgl2vo(EV>{_|kx7Ji>Cqh|SdPZjH-|Q|WK!1#T}7`ERaI4);d772 z7Ur?xkdH zYy7;FC=JDZp{e|(*Of$mjal+gvUc}m?fyjV{=2w57H_|pDD8;*I_4<1jK!+-$B{;V zm<+v~hAp@FY%o~)11gk4qD#!W3c5LiLM>>ZVuzm4h+AoZ$$PD-p2f9qpNlu_jjw1< z7VjH%J}9hydq;fz?s(0fWZ_ezj=!-voEu=uUo`phpow=J`OV9%?<^OZ*JM&KGIlXx z^q=Em@$?JS$p&%NMzo2U@kkS5N4hA=tl>Fy&LOM1^MfhU&N1VqQy=*^P;+hqa}7@x zZI1eEB*CuJTFD`a%%rtIlE7#{7F{5cAWtFD3{>iB2NE^>>Buh64|=*81q*4@WB>!p z2QG&Y$*q!VodoEbVOYT;4Ull!1Yiyss30h9M@JS!1~f~RiR1f|wT+XtPbX@hzUxTV z9*#fzVxlw<_XXy`aUYEX6Ey5O5uMS@W*R3gu-nA(_vqCFNOT%Z9 zf01d+nnd6yRT;{}hv<_0XITTejSZycB_O$<3d28_?IO<_yJzMfyT#U3H{Wn=NqV-< zGh8IfGKOSF%EW1|8-5oPARiO7WJwEJG9*RG!h)7ypv);g8?32|cxBd+wmO-p6FYQN z(9h{xufRiBsFyRnT2Uilsf*wz>-d&-F9`@{vPGBbk4;mkl(rsvScq2XC2|EcMg7K8 z(owSx_|CG!oy^)+WEI9Oyj@N>kTDx{uyCixm3NtIcDq)o@1>^*90Fj_krfoh=L$s9 z$L2hGFl--o42#)zt;ODh+Zp*3HoJdD;^D3bhnx*DNmE0Tlqm+11#ln_Hiypcx@tPEhmQ-7$glttgj zuTz1qP-3IxtCZx36Eb6in2wSX`r&VsRg*PQGx--N`Dc`TjS>>RQUWcqSL8P-qnR>X zYJAQaggql{U_a%Pfk*x&O1@6XTa>&<$sZ#@L=odBP)L}u4vswd_SE1VW<8?NA9kqT zqb(|*pui|Or1W=VwdYlA?S%LMSXjc?AqBwz*%ihP&rjU6IHCpC)Ig-|StKLe53?hI zik)q_B7uykp9j8TitL$Ky7AkkN$fr2Yr1=G+RAxXJmf6iyoVxJU9ZLhO|IOQSh+2^ za)%xigBeEZV))%eQBWXaCagA@uhH%7?mZR6(#2~loVl+c6fmA_f>s}U*qFNE5o@;%}a>skyOInJY z@4H1@zh5LG|NW&R%G@gwS}MKw${fhQw_IphzNOU(QJOS59CIzvkKUP8T=2sSjHYxZHDI(->+7NAc1!t2cbjvUbY+w@2K`VnoT^!M~2D%NC|&=^Zmg2lYbKSyP~hmM>%e0E>p#Mv_^&z?yYX}4`> zT22Pq&K^JBeERvE>{b2?yd5i?!(H~w@~&86z5k@D7pZ)#$^X(U|59D~XW_u|UsA{a zfD&f&nvV&~Kc*s#``Tzfu#~9s;3K^JYL}x|By7M|Nj& z>|6|algW^&@qk**BiV7d`-l(cM;cBlj$W0 z>;2mC*N;yXu6VnB?AUEf+_z=Qw{+6CGT~b}J`neNdy zRwaC^Zad<>RY_kXEBeXP80KjX$tQlaG)>JhR-fatS}!`QoCQ#RW8cn0KI?mhWru9S zdu!JpY;?T8r261`=leTEx_(+j{yj%?B?^6ay>M`w_q&@Mc<|ju;Slfs?j8po|B+2N zg~Xvap>G+W;e3Z zmLFl;UMv%`B3MS?`z|sw+v0( zkhF3IX+x{kzHb;yjAZ9{DKfE0DfL8;jnmM5~*Nu!P)6&M{cF0dO~+Ts`lL}+0| zP|OMtyxBdNzV1WaY}3^n8qj=bGKEgbWS&#^DBD6;>yTiY+_XoTwzxt5dwQ^w5|VOK zwvGt)KNY1=sE@8xcK28GxEV>ET~)&9CE6vC?S_LmN*02_)G#b>(bmB#G}r0M)^0}I z2eDgSfOeRqZF>VS8+V5h00BiS8VO)C(8vHTvB@HZPqGgr6^!DsPm$J@4O=Ri|CCjd z!BBY>og@?KrjH6&-*O}iH;y_UV1u2iH><7>BnwuL+NWw)e7o`ohvH|0@uL?L1syE% zj`Wg58FpyAy**jhG$HQ#sHpU%dNn6$!EO#`%P}cDyMeZvXZ` zLVWtJGa)|ny~c!i#x%Ewg>sWMOT#_52zfP7Y5=b{){9jZp z*HMxKt{DcXP`{RnkQ|P%Qi#c17K~@Xv>r;s5P|vAFzN)js)<02hwJZUK!z<+BeXIo z(yO5#pp#Y%ybN?fE-ex_fLGmLRgH(s4Y!}V(h-8(ucDV(kc*faZ~3&qIeph$*a7s$ zv4mJRzBVCl`}U=T_|%=jgm`4iQ%n(QF52nRYk=|HQxk20cuyp;r7v0bxd~A=z>}ip zo=JF?zwJqQ>c_hho}J%Wo$&0tyEEZAKIJXC_CnlK{Zql3%V=!?@HBe5H~^MFtpPYH zz#4#O0&Es7b^ODDujE*GKQe$;qt-G5S|YqTA(xPm0qtW!_1CDRNE4p{p6eM=?d9pCXJRpp6VPThH2c;X(k!MHTvo>>8lCcwCQs?t(~j#Lv$!Y*Rl?_k!l(Ronu_C)QrOE zKpOKR^vfUY)uQ{eX)J?OG8C)e>YAUj@|X!3+g_%JR5as7eW8{?Xk{A;Wi8ao+>I}N zn+r`Qp#6KH6>1^`c3IG*kl6A0VOtM8UPN_oQP*;i*r{VLJOaWqMTZZwHe<3m^FHuY zP5DZvYHGjj`N59(ne*{yE+l*}s``%=&!;^g%c>dldg<7z`(oWEUdrZ>Xggz;m+kXd z-}MOlN;0D`Xo46fkWR4}On8idYdF9%MQh0>34l&oId97?Qa=jbO+ovK!?YfT%m^!557i3YeHSMw(8JDY^&rg;FDX6*5RYwkZi z3^6w++0+4(_OPB;q%{|`>f{)@o*}??<)JfKM;eJIkk6sBXb$9P;*#gIpS{_y?XNr6 zPGdt47&G}U>q^wN#JM(RNSFTx1BfuD{WzsWqb`C09SiqsSg3Y6 zpqB~A{a_kQAEidv2FXf4ZOQ?I3Vz)qbOjr&22`)N61y<(gsa9AeMCN8_3shPpF^KV zxCg~maX)PaF2Nmu z5Y8EG8yM^?<)^KqB=$p8Yzq|G54sx0&*Q`pq}I=VJ4#W1V}<>e4OYaVG$u%mU&BvU z>66uv26Bhe3N*R={!4PCzpu$puw?E{P_NdG$Jk}2Bh+0V?ybkpDVGqkpfn+T3k1GZ z#t)0>5_U?YZC$9l@>1loeYEvnWQp4wwGB`V*kYR_AZ&s*EmfNh=%2|fb}<&(buJeH z(f2`Fa9!Ug;Hk$X;HP(rtH#7c@tVn^Er}x9B&29dvIsv{GPNW)>ec}0+RI~&_r>)p zNZ?iDAY#Ob)hb-f7maAfAQGd!X=$C!Q@@W8mk0sE2>qyao)9=~EEfE2u@jHMyTw-c zCp1_ja%f?LdlKTF_*1R-MeT=Np1^<<&ZT2AMJvu35;bgwQJ{qn2-DAU0}i8ei>vN_ z&fz$HUu=5>$;f7ALklDs^DwFmaxqUCET=R{$~}CO0-pXhIM!)FnAqg{Vz`U%ztMuWqd5 zuQ}Y(e4t5vS`*u>26Z-IQ>@--gV|PtR=u{liobe~f3^C~>R3LJL)w(7$V&x0xIOkg@V9fu?dtKe`{L#&Ld@hE^bzE19Sz!_p{sL4p|h#Y+~Hz& zY+b8VE!o=aDe5*Bxkr+r?q{m~LmJ>T!Upe1V|?e4`{FZCW^h*1sMO~gn!P#b&f*4! zt*(5;z+}?2Mb-VIoWpYbJ{Gf(t2ko`iy;${3Yabv{ftWM4su#z%ndX7uI%1F+4ZGRy(nTxBxA7BWCC&~~PS_B>^< z184^LyIbWonc!clgMX$ZcR{8Rj(N5HtJ(IrO|e2H(l2*}0F%0G&?Il6`nFQCjgsw@ z%z^VGIp}5v1TwNW2gFtWtTh_$MTDIa>v#;HXA;m)*T`SvBa|Y{ho`Ps(a(u}< zDA`HLAk{-0LJcNbLV1+Di$8^;K-5i(H_!M4p?)Th7f$jsc3wDx)Gln9@$te@mT>~9 zL)i2Xu|=vD&T65}m03VtppK^iDO$}ED=~M5!uC)X{6l`)iJ65=r3ChKuqauBk|}E# z_6qi;yU-m(laThO1|@E#np}84{dIi@3~DBOUyQXWM}U5XMcwDQv!AvN3#+KRfJD|Ky=o+x89@50 z)Gf9e@eW-rr-a33uB5B&l!nJmMQ^Hk$+nI3f9C3W$@m(wXYU`w@CgG_`dR9z&)?+`N@ly%U zhTH2Bo;@SZDbD(u_(k!x{4eHTxU;R>l2mr4>`Jf*ljsz z<@2sLPA*-aSi1fpM|TfT+mG}7S~HXG9=>GR&TkqMC;gie{!I@#+)T?nXY-84{=`~7 XWh)pt{Mzv^9{=(QETgbhFckWKocQ7= literal 0 HcmV?d00001 diff --git a/.github/tests/test_vpm_receiver.py b/.github/tests/test_vpm_receiver.py index 006f94b..c952e93 100644 --- a/.github/tests/test_vpm_receiver.py +++ b/.github/tests/test_vpm_receiver.py @@ -36,10 +36,10 @@ DIGEST = "c" * 64 VERSION = "0.2.0" PACKAGE_URL = ( - "https://github.com/PenguinDOOM/Pure-Base/releases/download/" + "https://github.com/Penguin-Repository/Pure-Base/releases/download/" f"{VERSION}/jp.penguin.purebase-{VERSION}.zip" ) -RELEASE_URL = f"https://github.com/PenguinDOOM/Pure-Base/releases/tag/{VERSION}" +RELEASE_URL = f"https://github.com/Penguin-Repository/Pure-Base/releases/tag/{VERSION}" def valid_payload( @@ -48,13 +48,13 @@ def valid_payload( ) -> dict[str, str]: asset_name = f"jp.penguin.purebase-{version}.zip" package_url = ( - "https://github.com/PenguinDOOM/Pure-Base/releases/download/" + "https://github.com/Penguin-Repository/Pure-Base/releases/download/" f"{version}/{asset_name}" ) - release_url = f"https://github.com/PenguinDOOM/Pure-Base/releases/tag/{version}" + release_url = f"https://github.com/Penguin-Repository/Pure-Base/releases/tag/{version}" return { "package_name": "jp.penguin.purebase", - "source_repository": "PenguinDOOM/Pure-Base", + "source_repository": "Penguin-Repository/Pure-Base", "version": version, "commit_sha": COMMIT_SHA, "policy_commit_sha": policy_commit_sha, @@ -64,7 +64,7 @@ def valid_payload( "release_url": release_url, "changelog_url": release_url, "licenses_url": ( - "https://github.com/PenguinDOOM/Pure-Base/blob/" + "https://github.com/Penguin-Repository/Pure-Base/blob/" f"{COMMIT_SHA}/LICENSE" ), } @@ -185,7 +185,7 @@ class PayloadTests(unittest.TestCase): def test_accepts_canonical_payload(self) -> None: values = { "PACKAGE_NAME": "jp.penguin.purebase", - "SOURCE_REPOSITORY": "PenguinDOOM/Pure-Base", + "SOURCE_REPOSITORY": "Penguin-Repository/Pure-Base", "VERSION": VERSION, "TAG": VERSION, "COMMIT_SHA": COMMIT_SHA.upper(), @@ -222,7 +222,7 @@ def test_accepts_prerelease_payload_with_separate_policy_commit(self) -> None: def test_error_names_canonical_package_url_field(self) -> None: values = { "PACKAGE_NAME": "jp.penguin.purebase", - "SOURCE_REPOSITORY": "PenguinDOOM/Pure-Base", + "SOURCE_REPOSITORY": "Penguin-Repository/Pure-Base", "VERSION": VERSION, "TAG": VERSION, "COMMIT_SHA": COMMIT_SHA, @@ -237,16 +237,16 @@ def test_error_names_canonical_package_url_field(self) -> None: def test_resolves_annotated_tag_to_commit(self) -> None: tag_object_sha = "d" * 40 responses = { - f"https://api.github.com/repos/PenguinDOOM/Pure-Base/git/ref/tags/{VERSION}": { + f"https://api.github.com/repos/Penguin-Repository/Pure-Base/git/ref/tags/{VERSION}": { "object": {"type": "tag", "sha": tag_object_sha} }, - f"https://api.github.com/repos/PenguinDOOM/Pure-Base/git/tags/{tag_object_sha}": { + f"https://api.github.com/repos/Penguin-Repository/Pure-Base/git/tags/{tag_object_sha}": { "object": {"type": "commit", "sha": COMMIT_SHA} }, } self.assertEqual( resolve_tag_commit( - "PenguinDOOM/Pure-Base", VERSION, api_get=responses.__getitem__ + "Penguin-Repository/Pure-Base", VERSION, api_get=responses.__getitem__ ), COMMIT_SHA, ) diff --git a/.github/tests/test_vpm_yanks.py b/.github/tests/test_vpm_yanks.py index db9742f..f9b683d 100644 --- a/.github/tests/test_vpm_yanks.py +++ b/.github/tests/test_vpm_yanks.py @@ -20,7 +20,7 @@ from vpm_common import UpdateError # noqa: E402 PACKAGE_NAME = "jp.penguin.purebase" -SOURCE_REPOSITORY = "PenguinDOOM/Pure-Base" +SOURCE_REPOSITORY = "Penguin-Repository/Pure-Base" POLICY_PATH = "vpm-yanks.json" COMMIT_SHA = "a" * 40 CURRENT_COMMIT_SHA = "b" * 40 diff --git a/README.md b/README.md index eb57a4d..195dc3e 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,27 @@ # Penguin VPM Repository -VPM package listing for PenguinDOOM projects. +VPM package listing for Penguin-Repository projects. ## Add the repository Use this listing URL in VRChat Creator Companion or a compatible VPM client: ```text -https://raw.githubusercontent.com/PenguinDOOM/VPM-Repository/refs/heads/master/vpm.json +https://raw.githubusercontent.com/Penguin-Repository/VPM-Repository/refs/heads/master/vpm.json ``` Alternatively, you can add it by pasting the following URL into your browser and opening it. ```text -vcc://vpm/addRepo?url=https://raw.githubusercontent.com/PenguinDOOM/VPM-Repository/refs/heads/master/vpm.json +vcc://vpm/addRepo?url=https://raw.githubusercontent.com/Penguin-Repository/VPM-Repository/refs/heads/master/vpm.json ``` Pure Base uses two separate receiver dispatches: `update-vpm` adds a published package release, while `sync-vpm-yanks` projects the fixed yank policy without release or archive processing. ## Pure Base release flow -`PenguinDOOM/Pure-Base` publishes an immutable GitHub Release and sends an `update-vpm` `repository_dispatch` event to this repository. The receiver then: +`Penguin-Repository/Pure-Base` publishes an immutable GitHub Release and sends an `update-vpm` `repository_dispatch` event to this repository. The receiver then: -1. accepts only `jp.penguin.purebase` from `PenguinDOOM/Pure-Base`; +1. accepts only `jp.penguin.purebase` from `Penguin-Repository/Pure-Base`; 2. validates the version, tag, source commit, release URL, and asset URL; 3. downloads the release ZIP and verifies its SHA-256 against the dispatch payload; 4. validates the root `package.json` name, version, and Apache-2.0 license; @@ -44,9 +44,9 @@ This keeps historical metadata stable even if the default branch changes later. ## Required Pure Base configuration -Configure the following in `PenguinDOOM/Pure-Base`: +Configure the following in `Penguin-Repository/Pure-Base`: -- Repository variable `VPM_REPOSITORY`: `PenguinDOOM/VPM-Repository` +- Repository variable `VPM_REPOSITORY`: `Penguin-Repository/VPM-Repository` - Release-environment secrets `APP_CLIENT_ID` and `APP_PRIVATE_KEY` - A GitHub App installation that can write contents in both repositories @@ -65,7 +65,7 @@ The `update-vpm` event uses this `client_payload` contract: | `packageUrl` | Immutable release ZIP URL | | `sha256` | SHA-256 of the release ZIP | | `releaseUrl` | Published GitHub Release URL | -| `sourceRepository` | `PenguinDOOM/Pure-Base` | +| `sourceRepository` | `Penguin-Repository/Pure-Base` | | `policyCommitSha` | Commit SHA for the Pure Base `vpm-yanks.json` policy | `packageUrl` is the canonical field. The receiver temporarily accepts the legacy `packageurl` spelling so releases from the previous sender contract can still be reprocessed safely. @@ -74,14 +74,14 @@ The workflow also exposes equivalent manual inputs for recovery or controlled re ## Yank synchronization -The `sync-vpm-yanks` `repository_dispatch` event is policy-only. It reads only `vpm-yanks.json` from the fixed `PenguinDOOM/Pure-Base` `master` branch and calls the policy synchronization entrypoint; it does not download a release archive or add release metadata. +The `sync-vpm-yanks` `repository_dispatch` event is policy-only. It reads only `vpm-yanks.json` from the fixed `Penguin-Repository/Pure-Base` `master` branch and calls the policy synchronization entrypoint; it does not download a release archive or add release metadata. Its `client_payload` contract is: | Field | Meaning | | --- | --- | | `packageName` | `jp.penguin.purebase` | -| `sourceRepository` | `PenguinDOOM/Pure-Base` | +| `sourceRepository` | `Penguin-Repository/Pure-Base` | | `policyCommitSha` | 40-character commit SHA for the policy snapshot | Manual recovery uses the constrained inputs `package_name`, `source_repository`, and `policy_commit_sha`. The policy path (`vpm-yanks.json`) and policy branch (`master`) are fixed in the receiver and cannot be supplied by the event or a manual run. From 61d338a894ae00b433cef2a155a9fb56f770ba32 Mon Sep 17 00:00:00 2001 From: Penguin <50603637+PenguinDOOM@users.noreply.github.com> Date: Sun, 2 Aug 2026 07:43:32 +0900 Subject: [PATCH 11/21] Keep only the canonical source repository --- .github/scripts/vpm_common.py | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/.github/scripts/vpm_common.py b/.github/scripts/vpm_common.py index a3afdb7..bc9dc14 100644 --- a/.github/scripts/vpm_common.py +++ b/.github/scripts/vpm_common.py @@ -11,8 +11,6 @@ PACKAGE_NAME = "jp.penguin.purebase" SOURCE_REPOSITORY = "Penguin-Repository/Pure-Base" -LEGACY_SOURCE_REPOSITORY = "Penguin-Repository/Pure-Base" -TRUSTED_SOURCE_REPOSITORIES = frozenset((SOURCE_REPOSITORY, LEGACY_SOURCE_REPOSITORY)) EXPECTED_LICENSE = "Apache-2.0" LICENSE_PATH = "LICENSE" VPM_PATH = Path("vpm.json") @@ -125,7 +123,7 @@ def reject_non_finite_constant(value: str) -> None: def reject_duplicate_object_keys(pairs: list[tuple[str, Any]]) -> dict[str, Any]: - """Build one JSON object while rejecting duplicate keys.""" + """Build one JSON object while rejecting duplicate object keys.""" result: dict[str, Any] = {} for key, value in pairs: if key in result: @@ -148,31 +146,20 @@ def strict_json_dumps(value: Any) -> str: return json.dumps(value, ensure_ascii=False, indent=2, allow_nan=False) + "\n" -def expected_urls( - version: str, - source_repository: str = SOURCE_REPOSITORY, -) -> tuple[str, str, str]: +def expected_urls(version: str) -> tuple[str, str, str]: """Return the trusted asset name, asset URL, and release URL.""" - if source_repository not in TRUSTED_SOURCE_REPOSITORIES: - raise UpdateError(f"Unsupported sourceRepository: {source_repository!r}.") asset_name = f"{PACKAGE_NAME}-{version}.zip" package_url = ( - f"https://github.com/{source_repository}/releases/download/" + f"https://github.com/{SOURCE_REPOSITORY}/releases/download/" f"{version}/{asset_name}" ) - release_url = f"https://github.com/{source_repository}/releases/tag/{version}" + release_url = f"https://github.com/{SOURCE_REPOSITORY}/releases/tag/{version}" return asset_name, package_url, release_url -def immutable_source_url( - commit_sha: str, - path: str, - source_repository: str = SOURCE_REPOSITORY, -) -> str: +def immutable_source_url(commit_sha: str, path: str) -> str: """Build a source URL pinned to an immutable commit SHA.""" - if source_repository not in TRUSTED_SOURCE_REPOSITORIES: - raise UpdateError(f"Unsupported sourceRepository: {source_repository!r}.") - return f"https://github.com/{source_repository}/blob/{commit_sha}/{path}" + return f"https://github.com/{SOURCE_REPOSITORY}/blob/{commit_sha}/{path}" def version_key(version: str) -> SemanticVersion: From 1eb9eea4590bafefcec8be9822ea1deeb9a4bc4b Mon Sep 17 00:00:00 2001 From: Penguin <50603637+PenguinDOOM@users.noreply.github.com> Date: Sun, 2 Aug 2026 07:44:00 +0900 Subject: [PATCH 12/21] Require the canonical source repository --- .github/scripts/vpm_payload.py | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/.github/scripts/vpm_payload.py b/.github/scripts/vpm_payload.py index 0965a86..635d05f 100644 --- a/.github/scripts/vpm_payload.py +++ b/.github/scripts/vpm_payload.py @@ -13,7 +13,7 @@ LICENSE_PATH, PACKAGE_NAME, SHA256_RE, - TRUSTED_SOURCE_REPOSITORIES, + SOURCE_REPOSITORY, UpdateError, expected_urls, immutable_source_url, @@ -42,7 +42,7 @@ def validate_payload(values: Mapping[str, str] | None = None) -> dict[str, str]: if package_name != PACKAGE_NAME: raise UpdateError(f"Unsupported packageName: {package_name!r}.") - if source_repository not in TRUSTED_SOURCE_REPOSITORIES: + if source_repository != SOURCE_REPOSITORY: raise UpdateError(f"Unsupported sourceRepository: {source_repository!r}.") parse_semver(version) if tag != version: @@ -54,9 +54,7 @@ def validate_payload(values: Mapping[str, str] | None = None) -> dict[str, str]: if not SHA256_RE.fullmatch(expected_sha256): raise UpdateError("sha256 must be a 64-character hexadecimal SHA-256 value.") - asset_name, trusted_package_url, trusted_release_url = expected_urls( - version, source_repository - ) + asset_name, trusted_package_url, trusted_release_url = expected_urls(version) if package_url != trusted_package_url: raise UpdateError( "packageUrl does not match the immutable Pure Base release asset URL: " @@ -71,7 +69,7 @@ def validate_payload(values: Mapping[str, str] | None = None) -> dict[str, str]: normalized_commit_sha = commit_sha.lower() return { "package_name": PACKAGE_NAME, - "source_repository": source_repository, + "source_repository": SOURCE_REPOSITORY, "version": version, "commit_sha": normalized_commit_sha, "policy_commit_sha": policy_commit_sha.lower(), @@ -80,9 +78,7 @@ def validate_payload(values: Mapping[str, str] | None = None) -> dict[str, str]: "expected_sha256": expected_sha256, "release_url": trusted_release_url, "changelog_url": trusted_release_url, - "licenses_url": immutable_source_url( - normalized_commit_sha, LICENSE_PATH, source_repository - ), + "licenses_url": immutable_source_url(normalized_commit_sha, LICENSE_PATH), } @@ -148,7 +144,7 @@ def verify_release_commit( ) -> None: """Confirm the released tag resolves to the dispatched source commit.""" actual_commit = resolve_tag_commit( - payload["source_repository"], payload["version"], api_get=api_get + SOURCE_REPOSITORY, payload["version"], api_get=api_get ) if actual_commit != payload["commit_sha"]: raise UpdateError( From a7dad274491298d6ad255a5e808a1eabb9f3fda3 Mon Sep 17 00:00:00 2001 From: Penguin <50603637+PenguinDOOM@users.noreply.github.com> Date: Sun, 2 Aug 2026 07:46:32 +0900 Subject: [PATCH 13/21] Remove generated Python bytecode --- .../__pycache__/sync_vpm_yanks.cpython-312.pyc | Bin 4144 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .github/scripts/__pycache__/sync_vpm_yanks.cpython-312.pyc diff --git a/.github/scripts/__pycache__/sync_vpm_yanks.cpython-312.pyc b/.github/scripts/__pycache__/sync_vpm_yanks.cpython-312.pyc deleted file mode 100644 index bce8b996594a88bcc860b731ed1f0658873a5393..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4144 zcmbtXO>7&-6`tkpaw&32iKHZpvSV)~B{EZyj-tpvN@SaMB-@B3%lffnI>u(rT}hP5 zU3PXUnFIw0K@T-@hzu044A&?F1gHWVg%3UC&_jIgWfdx@yj9Q^X;I`RR0dM0m%iC0 zB_?rm=@5MTX6DVC**D+&*+2UIUIgufd3ElD520^Jr`A}9p|-sgLido2l1QdxSBA>E zk}itybcRmS_LE66@MJP<)}3_Qb8LpodXk=OL$V?3O?tDwq%X@Sd3(;C@n-|cK(;a2 zm~Bcn*<)NLm<=UEz&FXBUogqA9F!a2*(`@-FFaf1ur z^~eIXfNs;*&;k{0E}oevsHs`3sp+C3%;&Q4IbBnQf~4LOvJ$?fU|pETT2?S-6=6Dk zTaksaJXVA=lCB6jEt5_a;@^_(qLk&6R8=!1Bdw|WDD>%sT8Oe1KbAQAZsOdKIGPw4 zvVs$rrpC_>iQ_|KmnJSuUK+n<`KEHRWGF)zYuNH!85Z+8}XEh^LwUKQp z4k(QfwfzTR?jge-BxJ5$syaGX#nP@2FfvuM@uI8b!bc3E(QYM|?2_rn%p=fGT0dH( zOY~fW)2pW?^Z?0hi2~|=$kg-!hB)%uyVC+!;5tz+(y0YN?lnZgufSFB(^Gu&Dlvkf zsfuteZJf{F6cQ=>Mg-kZa)OpOa(P2om{n9knwQcU>1IZWTmEwwCeKfu5idHqJ3?8JXf%I z=U$zaSb&v{@YinuSwepgHQ#&f?rZnrcjM(ll~C`}yU)1Lra!p+vlV^y>bk#w3sDX6 z&s#V6(8m|=TwHl) zH~H0J$z5>&2utoNmbl`PL=LW179?RdpOw@YRwS9=zvQ zWF#?u4L89NaFCD?AuT{gqi)o?K+(ehBG{k7G}wf5e1{tbeXK3j^Qq?w?^=~hwFl{iR0 zJ;)}yxfE=<+jdcM#m+m%E`s(VhOrxCZXF}WFm~gM?0S*>1Hi^Zx^|}@Qgt%BQNtkn z+U-X=*%!(Ggid#Drx)R`ma7(#v5Uh!^es|`zjh8IP~&R)7F`Abh22W75>-PbiI2F+ z2-oKJR+d~f848uC5-QQt^aP4>#WPnFoSrV!uBD1@>BVTX!iV$|ZndJ$dACZ4@CGIC*3oH(C|dNB$2_70dN23rxpTU$^tCKkfPc-TV-DPb@V1fpor zc?&V6WwU8R)Mq8jT}^ykE$4BmSxKEyax0|Gw5 zg_lPwT<52yFS)+WK*T)I|NG1rCo4zC&HgEK>WbNZwGw#G^t`vph0W&f3U_$DXYfmI z5JWcuJ&)fv2SzHfQM2c=d3oIAC$?!nv`7KUfODEmL2ib8tU|T7horiBrUV(7 z1fmzty7w?jp}JMvp2yb3a3p(dO;wMtp}tP@ZVeze$llt{ko|oRX_>d{0K)nIx6Z0; zz<#Snc&jF7WQMKn2It)KOY-hPkP3lRxNg5@d#{$C+^6-SXHREgU$m`wdOWY%4(A{; zrm5gucG*bK<`k56DQNp%E`JjcJ8OF%R`h(vh~pz*Xp1p0lnCs!l+hK7uezLQmk(UE zhkJ-%Bhd}D;5<~Mq`%F1hipi^(=Kf+S~svoXB5@WViudjY1N3*I7TFhDQv@i zKmRdVDXrquFiG_2J3zq0qXU)b+iT3LOT#Ar(#pan)3hAtQh&(`P>jMXbE-~&3C}`zGS`>GvlYs*l9?= z35wt38<*Y7#kHo63g2n^y2|fvv95;R=QP8*x4ek=<6d}u%Oi@!D56;8Aj)cZK!6Vd zW;&fwz9lXRCf^SaJV?la8fUq&V&t)EF{4mGM;Y7&GsOlHY_G$$+`#V;$sr(7m(3Ri zBcIDC*X4A|mgo`So99Lk)Y`a5xT$HG8&yGzCbxLN;zUu_Qle;iMR7V0dnuxbNrbZN zA-Md4Zn=#@4(e^pz_8^dr7%INraBpfWFaSw*a?F~5z9w}swu%qA$CR~QPNT1AkaxR z0#QIJBnNb-fg{!;K1a?qQGgGH?9lDBVX?O5@F^nU)(siDpCQ}4c9z-kyq(qLd`3Bm zCqRUlRlfsdi>4^*Z|M9#P{%i@;m^qXHER7Qy8acq{uea7hK9dJz1wb Date: Sun, 2 Aug 2026 07:46:38 +0900 Subject: [PATCH 14/21] Remove generated Python bytecode --- .../__pycache__/update_vpm.cpython-312.pyc | Bin 4541 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .github/scripts/__pycache__/update_vpm.cpython-312.pyc diff --git a/.github/scripts/__pycache__/update_vpm.cpython-312.pyc b/.github/scripts/__pycache__/update_vpm.cpython-312.pyc deleted file mode 100644 index 7a7bfb639b96a5eb396c4fdc740bd43670b72766..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4541 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 Ds0xve From 1ab10375d105fd8426b817f49989ac48e9bee489 Mon Sep 17 00:00:00 2001 From: Penguin <50603637+PenguinDOOM@users.noreply.github.com> Date: Sun, 2 Aug 2026 07:46:43 +0900 Subject: [PATCH 15/21] Remove generated Python bytecode --- .../__pycache__/vpm_archive.cpython-312.pyc | Bin 9372 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .github/scripts/__pycache__/vpm_archive.cpython-312.pyc diff --git a/.github/scripts/__pycache__/vpm_archive.cpython-312.pyc b/.github/scripts/__pycache__/vpm_archive.cpython-312.pyc deleted file mode 100644 index 96c6554d9771658746d8ec86ec29b684584c7cd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9372 zcma)CTWlQXb)MPT+1dLp$>sevmPAXe$fYGqiXzLDDUp(BQxwIEDy=T-;m(j;dN0h( zP!tEtm{x;^Y6XafgNUwUgaHDCffJN{Y2CimE}B?CUuLxgw3(=gfw({o^no^AC{-TX zbN<=cT}pJFA$I1!o&S0+-#I`3&F6Dd@VtH_HT^;ZMg1N#)?+gh^p*~Zdz45;D3KOz z2|8(u*l0{M2`0jjuRUTXUpC?(UoOJI*Pd`DT@e>)%O>1OPsEe-M!Y2NNcfWeh(8&K z1W2As1d|n!iezP^GFcU=N`@k#WObw(>YR}pu|jlx&mO52D@8Ya>%=P21K)ZvBzoc7 zAXbY$_%@0)q949ZVyzf}Z?lWq{wLOnK`3vTXWHwvmxrZ)Hp4z7s8fb-XjYbn(n|a$W}%qrNzEJ1lkt=w&-b5iXN_RrrJ=r4qkX;6f&No{ zgCl)L#krnK(VpQ`XZtVqMNeKH?He&_uxO~~)N4Iw`l7FnoF6Qdd&Xv9MpBi$MH5lw{3f34a95gv@4&Dq!(Odrn zrS~Y66yj^Tyj7uenk`lr6B)uJBJ(5LFYF%_XclZL_Dh~=rBKr+rp!=_@)vpv@e#ab(!(K&j4373acbxakV3wDc8SRv$`0 zt+L8RcZPeN^j~e&m%gIcYH^cZaLTcaU9GihGsXF7F#82N)YVyaZ}d`> zTvIlpuT&>`HQ4F*DAB)dd}g}QqAq<)W6)H_G2L9Mu~OSw{3&ao@5ICa{#hpgLiFe%LH; zuh35P7Q`7um_Iu@IyAz|PYL{7T%FjVGn_tZLZi#x>`Zs?I3Ky1F#zx1gwCjw-A|jLQhpf>6(D{i6~ODv8mbA8;T3)c4!6F_VlI%tCl(-UwQz!77xyfF5O2c^x#$BK4U+bT@T7_0Yd3>)(@i zdOodrA>YvV1pH(4sswnaGtj>R)y`6++(-Rrln=X}kJr}JLlV&5ZI;BL$9mWQs^ ztgCgETd&kztvT1BP0GXaA38tU|M28+_T;cW^5?memq?+0bvz$xx_AEV^SMylk}Dsm zdl=ZA4eVZhbtBOAsIpn-&)tvTzotj7=q*=smDhCdwR~;sy@j_IR`f$$DFt`tpI$M(w@_fqjo^p3B!9+<39~eq;8Y%$ZyzV?Kk(QE3weyI*{q|SzGeEB z_Q+qaH@uSb_vp@^yr<%!r!nhk%z2u1d-LOFY>2I&m^37*w82h)+*H|D!F(J(`FtPC z{%f@pGQVQkKELZ%ZVuBGY+nPnvn@La81_1f6;KJNg8o-0edhnT;0CDCgBOumb?~ALhtv5TIEeT} zTmmRbRA&bdjZ|5HLr?%4!qKWzO85zV^$Fe8Zj+C~pfYgg_MODtf@7h#_CVq_FnY+s z*8o1j{?HNrbIJNNcL^>uUl4Q9Yo~JcFXTK27JEPS z2A7;)0;?X*djfY)+&;1LQqHsYO9l!)^Y~%f>xcf~*xw!7@OS4t-Cwd${FQ_9`tKgS zeRTQU>Yi65U=L9Log?I|tKTYI710@zqgQt~J!=K|O5iA7Qg{H`MYp=`*u{VTCDU9w6Xu%SCIY7V* z@~k>v7*m)~fx$${0(0o2wL9eJpkISY##5jlX8?_e@-8f~Pp9K4Q*$~1u@G2iuw?dz z!$b&%OO}%6gyl{`1AdmE;JKT)!BnhXgfCG-DT(q0s67imXp0_x;!H52_c4zqe?e{(SVQeC=mUQOFTk%U?IY82!&0os#R@c z9?-=Jk=L5|hXnP5MNN({j_Q$(6%=Aw^x3C z<(Jn8?t5{)Z~fc)@k@HkV%_eQ?pklJK|qQ-%)i%$MHWYDVYq@&7?9Q7I4>5OfH zxj_SbD)t513*nPJ!+`V4mcyqEK&lLle$6}$TB5rrkx0*>CuVLrcq+VkCTJL^B#>@^ zFJL0!ct9V`hRR&34ShMqpS+fyz7} zyNnwvU&a?=9XSFoVzyA2EsSJ_ccf^V#79hzLB0kpU&q#<3{j@NArtcEyse9UdCt2$ zx^i&krXJdt<@TWjHofvu^+()C^8L2^_4@FL-Y}Z;kLk{_d`-*Z*`={t=l>t6{1=eb za?oT+%>tMfFfcpHrqu={_y?xqpSHtHpL(W?5tveiXagW+GxHF4DN1e0l*sjEvI@t% zQ_tk+i+~IagFQpvpyWUqr6Xg1rqzxSn$pN<+@}4dxmqca(_o&WQ-hs?I1ekjNL-5z_ z$(~s;4oa!udJ|AXR1{c2gpSDb5PbtDnwQgn|F>~As55yUm>wY^0f$<1q<@GQ%M!z* z^&>#C!0uY>_BOmYYlbhZR-faV;?yR-RzaFto@%emC&$we@Bo9FdgBJ;>=GoG4&;UT8roQOj-0KlMp0yp3^zDTHm z5k%4Ofx?tzbms*Xv@p2#2`P$k8yR5==y0yE=?05^D2BC;C=OuQ$vcor%Sn)Sz#vfq zJ6&)XH>1fk#1@{m@D&g|5CInxEJ8Yw6EM;g{FMKN7bxnQ`gbJI1^c@e2lBz%he19Y zVEk{@t>3bnABe$ zyf5f2L%GTey7xlf)373CJ-bPZ6CVZi6T_%aT1In~W4d=N@ATbu-F7W^Z8&%3tLqy`tA?k)VnX}7l!qgkzD1d?j6PMQ#nsZzOnW8 zz-BE>b+dtThIFox;E2;X{~6tRCeKwp)u+pEWPw zqL?n=e}SPW*JeA#kioqw;1k7DLKb2XZ``6wF649(ZNLbHr$i4iU8YQj6*UsTX=WOE zsqUI^;M~BGZpOuFg=TmtXr55AGZ#t%{o*E9aViCGqYhK_~ zj9`%`!>J8c+8Slso;WNj&@$Xkkz0|oT7WC!#Ewb4qor(LUEf3rdfHu%#=fS#r)(t8 zjw5-$iSkbzsi<4k7HfCNs@lp{ zRv@?nn8k_pB*i@&C10lRjO-jIhnh=PjT*A%q}Eue3ELh@4lOv#R>NkT?@{j;UB-;_ z7NCa(=XafR^c+=)x;JRO1LOkD!nx-C8H9G@h3M9^#*ReHgksbg%uHB2R2DKThNDUF z8-mdoE)&eFI3A5sLEVQ9S{~F~v+6|WQHbMDYMtAxP=Sz4j39o1n`5J=JCE{snFi)= z-?rx4ES*5w@ab_328LzCfhDVg=0mI8MvO(g*7m1F_reB8oZ)mztKQZ}p_Df`Fv$`G zv$f`J^@Y-+Ln9x6S&`U}{5+-*FdLo%2}ZuPgWKr820dGGPM+K)7~a^FkeZYd>B%vO zo%@P85=!?J=AdAm*UFG87le`^#t9+L_DX|;3|eV)p)kgTY15!{k@(DM%%MS*QND=> zO)R;L>ez6gM=wf7F?q5&tDLS%ja`2H1O%`U*Vys)wHDEC7PUhG#!9u|qlk1>Je!Ggt6#>+RN+ zrkv|}h`O>v^xED>wfoj;A(Fr3&HF-kuin18(y_+md>xw=uK72P4(1xq zFAY3qu<$X9q?>Mry-q)>+OvA~VcXGc+tCjjb8UUOs?$r(ubh;(W_jwT_6<)P8NWB@ z@6(;&-UPm%c`LJgI>$Ax%&mSm+gbntc|X5e_p_#-G_6hKo;$4bNA;s{({LT`2{1ft zgYd9}as~-)e~xQe-MiMF-F4^zcL;jV`**LN{n@}z2G;9ydtTCackA6T-79__?Z&Qy z54eMbZvRHdaee;@Sm`S?2B&}Qeb>8sIak-E*B)Gd4g=JOO9ASy+!VWOb>D`4f4-{m z-to7Oud=zS=K-N{RV%%#yH+RHlG*2v>y0mGxtDRxO@sF{`rvi_dQ@+CJ?9s6r|_A* zer4b4;QE;l&u0$}Y}n5|A_eExzx82v_Qh8>?62i(npcw9nhx~r-a4OeYKO#?ti3+( zsaib$_!N!1{{=aiC*~o1K~C|Ha1-Qf{i$2`?EjLY@lJ1li{$c$R266rf zOM=QL%1gj5f8TP3VLlF3oIb*S+~&mek%lut>eoluGnDJsFJZ|i4131MeG&|ud6D^~ zHE<@(d=h3M4S_JC6fQzH@?Lyl499So&WMb~&;+kZNZRy}N#pNhJNsZdCAHg$;xikV z#pCI80_X;i4nd!M4qG$u-xD%vz>+{95Tfs`RTTa+;tEJq2M_-QagDT+m!PuUN!mQ| zqXd^VxQxA$i4do~I3<(FE~C6^fr3s6TiOH%-&WcW$RCDy6MMsz%Zu1z`-EUt*W|ab zvNXya$hNl{Tr?`CW6`MLjz%YD!GDvYQ5kKvj2G-O#LYlofbhfhXBY!Ja6c*6Va-jf z3B=Ng1Q-sy4-O0CG1-o#pn+7pFE!`mz#@k_kN-I$b4ZH&X}Iwo5+a&OxalMs4YiA@ z9le-B6)BJ43-2SzZI09!%ApigX From f7d543706449f6ce5d19c763d4a2c7050f5b234e Mon Sep 17 00:00:00 2001 From: Penguin <50603637+PenguinDOOM@users.noreply.github.com> Date: Sun, 2 Aug 2026 07:46:49 +0900 Subject: [PATCH 16/21] Remove generated Python bytecode --- .../__pycache__/vpm_common.cpython-312.pyc | Bin 9111 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .github/scripts/__pycache__/vpm_common.cpython-312.pyc diff --git a/.github/scripts/__pycache__/vpm_common.cpython-312.pyc b/.github/scripts/__pycache__/vpm_common.cpython-312.pyc deleted file mode 100644 index 8c12ecadce518c3064e4d3c1d20b9d8516e89e47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9111 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 From 01082db7f1f30bb88cb2310456c75c760ac3f501 Mon Sep 17 00:00:00 2001 From: Penguin <50603637+PenguinDOOM@users.noreply.github.com> Date: Sun, 2 Aug 2026 07:46:55 +0900 Subject: [PATCH 17/21] Remove generated Python bytecode --- .../__pycache__/vpm_listing.cpython-312.pyc | Bin 6955 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .github/scripts/__pycache__/vpm_listing.cpython-312.pyc diff --git a/.github/scripts/__pycache__/vpm_listing.cpython-312.pyc b/.github/scripts/__pycache__/vpm_listing.cpython-312.pyc deleted file mode 100644 index 7e987851fcb7266ad92118bd76fdb18930c5724d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6955 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 From bb98b8a7248399269246de71cfb14a86d593ee3b Mon Sep 17 00:00:00 2001 From: Penguin <50603637+PenguinDOOM@users.noreply.github.com> Date: Sun, 2 Aug 2026 07:47:02 +0900 Subject: [PATCH 18/21] Remove generated Python bytecode --- .../__pycache__/vpm_payload.cpython-312.pyc | Bin 7426 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .github/scripts/__pycache__/vpm_payload.cpython-312.pyc diff --git a/.github/scripts/__pycache__/vpm_payload.cpython-312.pyc b/.github/scripts/__pycache__/vpm_payload.cpython-312.pyc deleted file mode 100644 index 7a721547c3cce1fa894b2f0d16b6c1c5fd7bb227..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7426 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 ar>$j2&pre9uN^+}4En6~83z(FuKxj{WN}jf From 7779a952a9bdd7617c93a986304dd8555b2cdedc Mon Sep 17 00:00:00 2001 From: Penguin <50603637+PenguinDOOM@users.noreply.github.com> Date: Sun, 2 Aug 2026 07:47:08 +0900 Subject: [PATCH 19/21] Remove generated Python bytecode --- .../__pycache__/vpm_policy.cpython-312.pyc | Bin 5630 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .github/scripts/__pycache__/vpm_policy.cpython-312.pyc diff --git a/.github/scripts/__pycache__/vpm_policy.cpython-312.pyc b/.github/scripts/__pycache__/vpm_policy.cpython-312.pyc deleted file mode 100644 index 76b3dc49278eaa585046cc8e98b5c4df624b5365..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5630 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 Z#kJvO8t&iv*O1@v+A-DlSr{SF{1*_Kt6~5E From c1bf952a87b7317afb03fe4513008490a1367316 Mon Sep 17 00:00:00 2001 From: Penguin <50603637+PenguinDOOM@users.noreply.github.com> Date: Sun, 2 Aug 2026 07:47:12 +0900 Subject: [PATCH 20/21] Remove generated Python bytecode --- .../test_vpm_receiver.cpython-312.pyc | Bin 26292 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .github/tests/__pycache__/test_vpm_receiver.cpython-312.pyc diff --git a/.github/tests/__pycache__/test_vpm_receiver.cpython-312.pyc b/.github/tests/__pycache__/test_vpm_receiver.cpython-312.pyc deleted file mode 100644 index c98d66c4c4d62a895058b34a4f2501d5c999795d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26292 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

FrZb83@|O9R>C%^ z%Etwe3}M05Y@?zaj!havQaCo_y@OQt95rMky>tM_ddsJNzCsWFfRbfOnCi^X;XDE3 z(A2s`7vkzF{Sv=@nbHJ{g?X_ zuIwjV?cX|b=P&(s`-;O8b9my8`W464m}Bepu9%~3$sTj;y<$yprr)xC&h}e*pUb;y zc%$d)#V__QbDjrg-e6qkkUVheInMBcA#YbM<9mR7LeSVCEf)~zU6+ru?%z0c(tEcYADh8_2FZHAt!7gkEP#7ef@M^s49 z{gNSrVc2lBWu>4YR?u*tV?XboF&;A*dav$TDQt`tHs0sx*Zof$dkupIy^wz0|E%E^ zgW+&eDf@Z Date: Sun, 2 Aug 2026 07:47:18 +0900 Subject: [PATCH 21/21] Remove generated Python bytecode --- .../__pycache__/test_vpm_yanks.cpython-312.pyc | Bin 32550 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .github/tests/__pycache__/test_vpm_yanks.cpython-312.pyc diff --git a/.github/tests/__pycache__/test_vpm_yanks.cpython-312.pyc b/.github/tests/__pycache__/test_vpm_yanks.cpython-312.pyc deleted file mode 100644 index c687d0d85071789767cf02ec935ec24781eb2bce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32550 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 XWh)pt{Mzv^9{=(QETgbhFckWKocQ7=