Ctrl K
ComunidadGuías…

scripts/test-m2image-source-package.sh

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/usr/bin/env bash
set -euo pipefail
root=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)
tmp=$(mktemp -d)
trap 'rm -rf -- "$tmp"' EXIT

alias=alpine-3.24.1
arch=x86_64
compliance="$tmp/compliance"
dist="$tmp/dist"
materialized="$tmp/materialized"
mkdir -p "$compliance/${alias}-${arch}" "$dist/$arch" "$materialized/sources"

cat >"$tmp/source-map.json" <<'EOF_MAP'
{
  "schemaVersion": 1,
  "image": {
    "alias": "alpine-3.24.1",
    "version": "3.24.1",
    "distribution": "alpine",
    "architecture": "x86_64"
  },
  "packages": [
    {
      "binaryPackage": "busybox",
      "binaryVersion": "1.37.0-r31",
      "architecture": "x86_64",
      "declaredLicense": "GPL-2.0-only",
      "source": {
        "type": "alpine-aports",
        "sourcePackage": "busybox",
        "sourceVersion": "1.37.0-r31",
        "repositoryCommit": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
      }
    },
    {
      "binaryPackage": "busybox-binsh",
      "binaryVersion": "1.37.0-r31",
      "architecture": "x86_64",
      "declaredLicense": "GPL-2.0-only",
      "source": {
        "type": "alpine-aports",
        "sourcePackage": "busybox",
        "sourceVersion": "1.37.0-r31",
        "repositoryCommit": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
      }
    }
  ]
}
EOF_MAP

plan="$compliance/${alias}-${arch}/source-publication-plan.json"
python3 "$root/scripts/m2image_source_publication.py" plan \
  --source-map "$tmp/source-map.json" --output "$plan"
cp "$plan" "$materialized/source-publication-plan.json"
source_id=$(python3 - "$plan" <<'PY'
import json
import sys

with open(sys.argv[1], encoding='utf-8') as stream:
    plan = json.load(stream)
if plan.get('packageCount') != 2:
    raise SystemExit(f"expected packageCount=2, got {plan.get('packageCount')!r}")
if plan.get('sourceCount') != 1:
    raise SystemExit(f"expected sourceCount=1, got {plan.get('sourceCount')!r}")
sources = plan.get('sources')
if not isinstance(sources, list) or len(sources) != 1:
    raise SystemExit('expected exactly one source unit')
source_id = sources[0].get('sourceId') if isinstance(sources[0], dict) else None
if not isinstance(source_id, str) or not source_id:
    raise SystemExit('source unit is missing sourceId')
print(source_id)
PY
)
mkdir -p "$materialized/sources/$source_id"
printf 'pkgname=busybox\npkgver=1.37.0\n' >"$materialized/sources/$source_id/APKBUILD"
printf 'exact upstream source bytes\n' >"$materialized/sources/$source_id/busybox-1.37.0.tar.bz2"
python3 "$root/scripts/m2image_source_publication.py" index \
  --plan "$plan" --source-root "$materialized/sources" \
  --output "$materialized/source-index.json"

# A binary sibling is already present in a real release assembly; make sure the
# checksum contract covers it alongside the corresponding-source archive.
printf 'synthetic m2image package\n' >"$dist/$arch/${alias}.tar.zst"

M2IMAGE_COMPLIANCE_DIR="$compliance" DIST_DIR="$dist" ZSTD_LEVEL=1 ZSTD_THREADS=1 \
  "$root/scripts/package-m2image-sources.sh" \
  --alias "$alias" --arch "$arch" --materialized-dir "$materialized"

archive="$dist/$arch/${alias}.sources.tar.zst"
test -s "$archive"
zstd -dc "$archive" | tar -tf - >"$tmp/members"
grep -qx 'source-publication-plan.json' "$tmp/members"
grep -qx 'source-index.json' "$tmp/members"
grep -qx "sources/$source_id/APKBUILD" "$tmp/members"
grep -qx "sources/$source_id/busybox-1.37.0.tar.bz2" "$tmp/members"
(
  cd "$dist/$arch"
  sha256sum -c SHA256SUMS
  grep -q "${alias}\.tar\.zst" SHA256SUMS
  grep -q "${alias}\.sources\.tar\.zst" SHA256SUMS
)

# Tampering after indexing must fail closed rather than silently packaging a
# stale source-index.json.
printf 'tampered\n' >>"$materialized/sources/$source_id/APKBUILD"
if M2IMAGE_COMPLIANCE_DIR="$compliance" DIST_DIR="$tmp/tampered-dist" ZSTD_LEVEL=1 ZSTD_THREADS=1 \
  "$root/scripts/package-m2image-sources.sh" \
  --alias "$alias" --arch "$arch" --materialized-dir "$materialized" \
  >"$tmp/tampered.out" 2>&1; then
  echo 'source packaging unexpectedly accepted a stale source index' >&2
  exit 1
fi
grep -q 'materialized source index is stale or does not match source bytes' "$tmp/tampered.out"

echo 'M2Image exact source package contract passed'