diff -U2 -r /var/lib/copr-rpmbuild/results/samestack/upstream-unpacked/Source0/samestack-0.5.0/Cargo.toml /var/lib/copr-rpmbuild/results/samestack/srpm-unpacked/samestack-0.5.0.tar.gz-extract/samestack-0.5.0/Cargo.toml --- /var/lib/copr-rpmbuild/results/samestack/upstream-unpacked/Source0/samestack-0.5.0/Cargo.toml 2026-03-12 22:34:51.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/samestack/srpm-unpacked/samestack-0.5.0.tar.gz-extract/samestack-0.5.0/Cargo.toml 2026-04-17 23:45:15.000000000 +0000 @@ -1,2 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + [package] name = "samestack" diff -U2 -r /var/lib/copr-rpmbuild/results/samestack/upstream-unpacked/Source0/samestack-0.5.0/Makefile /var/lib/copr-rpmbuild/results/samestack/srpm-unpacked/samestack-0.5.0.tar.gz-extract/samestack-0.5.0/Makefile --- /var/lib/copr-rpmbuild/results/samestack/upstream-unpacked/Source0/samestack-0.5.0/Makefile 2026-03-12 22:34:51.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/samestack/srpm-unpacked/samestack-0.5.0.tar.gz-extract/samestack-0.5.0/Makefile 2026-04-17 23:45:15.000000000 +0000 @@ -75,5 +75,5 @@ MAKE_OUT ?= $(CURDIR)/make_out -PODMAN_RUN = $(PODMAN) run --rm --privileged --network=host \ +PODMAN_RUN_BASE = $(PODMAN) run --rm --privileged --network=host \ -v $(CURDIR):/src:Z \ -v samestack-cargo-cache:/root/.cargo/registry \ @@ -82,8 +82,15 @@ -e GIT_CONFIG_KEY_0=safe.directory \ -e GIT_CONFIG_VALUE_0=$(GIT_SAFE_DIRECTORY) \ - -w /src \ - $(BUILDER_IMAGE) + -w /src + +PODMAN_RUN = $(PODMAN_RUN_BASE) $(BUILDER_IMAGE) export PODMAN_RUN +# COPR builds need the user's API token mounted into the container. +COPR_CONFIG ?= $(HOME)/.config/copr +PODMAN_RUN_COPR = $(PODMAN_RUN_BASE) \ + -v $(COPR_CONFIG):/root/.config/copr:ro,Z \ + $(BUILDER_IMAGE) + # Platform detection UNAME_S := $(shell uname -s) @@ -97,5 +104,5 @@ RPM_SRPMS := $(RPM_TOPDIR)/SRPMS -# Mock build (Fedora — uses cargo-rpm-macros spec) +# Mock build (Fedora — vendored offline spec) # Auto-detect architecture so mock uses native configs (no QEMU emulation). # macOS reports arm64; mock configs use aarch64. @@ -114,4 +121,32 @@ MOCK_RESULT_DIR_CS ?= $(RPM_TOPDIR_CS)/mock-results +# Mock build (RHEL — vendored offline spec) +MOCK_RHEL_CONFIG ?= rhel-10-$(MOCK_ARCH) +RPM_TOPDIR_RHEL ?= $(TARGET_DIR)/rpmbuild-rhel +RPM_SOURCES_RHEL := $(RPM_TOPDIR_RHEL)/SOURCES +RPM_SPECS_RHEL := $(RPM_TOPDIR_RHEL)/SPECS +RPM_SRPMS_RHEL := $(RPM_TOPDIR_RHEL)/SRPMS +MOCK_RESULT_DIR_RHEL ?= $(RPM_TOPDIR_RHEL)/mock-results + +# COPR build configuration +COPR_PROJECT ?= chwhite/SameStack +COPR_SCRATCH ?= + +COPR_FEDORA_CHROOTS := \ + fedora-43-aarch64 fedora-43-i386 fedora-43-ppc64le \ + fedora-43-riscv64 fedora-43-s390x fedora-43-x86_64 \ + fedora-44-aarch64 fedora-44-i386 fedora-44-ppc64le \ + fedora-44-s390x fedora-44-x86_64 \ + fedora-rawhide-aarch64 fedora-rawhide-i386 fedora-rawhide-ppc64le \ + fedora-rawhide-s390x fedora-rawhide-x86_64 + +COPR_CS_CHROOTS := \ + centos-stream-10-aarch64 centos-stream-10-ppc64le \ + centos-stream-10-s390x centos-stream-10-x86_64 + +COPR_RHEL_CHROOTS := \ + rhel-10-aarch64 rhel-10-ppc64le \ + rhel-10-s390x rhel-10-x86_64 + # Release verification VERIFY_STRICT ?= @@ -126,9 +161,13 @@ image-runner image-builder help unit-test unit-test-full require-podman srpm \ mock-rebuild mock rpm-lint-mock srpm-cs mock-cs-rebuild mock-cs rpm-lint-mock-cs \ - vendor verify-licensing check-mock-config \ + srpm-rhel mock-rhel-rebuild mock-rhel rpm-lint-mock-rhel \ + copr copr-cs copr-rhel _copr-preflight \ + vendor verify-licensing \ verify-clean verify-version verify-spec \ - verify-payload verify-payload-fedora verify-payload-cs \ + verify-payload verify-payload-fedora verify-payload-cs verify-payload-rhel \ verify-quick verify-release verify-deep \ _vendor-impl _srpm-impl _mock-rebuild-impl _rpm-lint-mock-impl \ + _srpm-rhel-impl _mock-rhel-rebuild-impl _rpm-lint-mock-rhel-impl \ + _copr-fedora-impl _copr-cs-impl _copr-rhel-impl \ _mock-cs-rebuild-impl _rpm-lint-mock-cs-impl _verify-spec-impl \ install-tools \ @@ -158,7 +197,13 @@ @echo "" @echo "RPM packaging (requires podman):" - @echo " srpm Build SRPM from git HEAD (validates Source0 contents)" - @echo " mock Fedora: srpm + mock rebuild + rpmlint on built RPMs" - @echo " mock-cs CentOS Stream: vendor + mock rebuild + rpmlint on built RPMs" + @echo " srpm Build vendored SRPM from git HEAD (validates Source0 contents)" + @echo " mock Fedora: vendor + srpm + mock rebuild + rpmlint on built RPMs" + @echo " mock-cs CentOS Stream: vendor + srpm + mock rebuild + rpmlint on built RPMs" + @echo " mock-rhel RHEL: vendor + srpm + mock rebuild + rpmlint on built RPMs" + @echo "" + @echo "COPR builds (requires podman + ~/.config/copr API token):" + @echo " copr Build SRPM and submit to COPR for Fedora chroots" + @echo " copr-cs Build vendored SRPM and submit to COPR for CentOS Stream chroots" + @echo " copr-rhel Build vendored SRPM and submit to COPR for RHEL chroots" @echo "" @echo "Verification:" @@ -183,4 +228,8 @@ @echo " MOCK_CONFIG (default: $(MOCK_CONFIG)) - Fedora mock config" @echo " MOCK_CS_CONFIG (default: $(MOCK_CS_CONFIG)) - CentOS Stream mock config" + @echo " MOCK_RHEL_CONFIG (default: $(MOCK_RHEL_CONFIG)) - RHEL mock config" + @echo " COPR_PROJECT (default: $(COPR_PROJECT)) - COPR project owner/name" + @echo " COPR_SCRATCH (default: off) - set to 1 for scratch builds (not published to repo)" + @echo " COPR_CONFIG (default: ~/.config/copr) - path to COPR API token file" @echo " BUILDER_IMAGE (default: $(BUILDER_IMAGE))" @echo " MAKE_OUT (default: $(MAKE_OUT)) - host directory for build artifacts" @@ -378,6 +427,6 @@ @ls -1 "$(MAKE_OUT)/rpmbuild/SRPMS/"*.src.rpm 2>/dev/null || true -_srpm-impl: - @echo "Building SRPM from git HEAD..." +_srpm-impl: _vendor-impl + @echo "Building vendored SRPM from git HEAD..." @RPM_NAME=$$(awk '/^Name:/ {print $$2}' "$(RPM_SPEC)") && \ RPM_VERSION=$$(awk '/^Version:/ {print $$2}' "$(RPM_SPEC)") && \ @@ -411,4 +460,5 @@ cp "$(RPM_SPEC)" "$(RPM_SPECS)/" && \ rpmbuild -bs "$(RPM_SPECS)/$$(basename $(RPM_SPEC))" \ + --without cargo_macros \ --define "_topdir $(RPM_TOPDIR)" \ --define "_sourcedir $(RPM_SOURCES)" \ @@ -438,23 +488,8 @@ rpmlint -c "$(RPMLINT_CONF)" "$(MOCK_RESULT_DIR)"/*.rpm -# ── Preflight checks ──────────────────────────────────────────────── +# ── Fedora mock pipeline (vendored) ────────────────────────────────── -check-mock-config: - @if echo "$(MOCK_CONFIG)" | grep -qiE 'centos|rhel|el[0-9]'; then \ - echo "Error: MOCK_CONFIG=$(MOCK_CONFIG) looks like a CentOS/RHEL target." >&2; \ - echo "The repo spec uses cargo-rpm-macros (Fedora only)." >&2; \ - echo "Use 'make mock-cs' for CentOS Stream / RHEL builds." >&2; \ - exit 1; \ - fi - @if ! grep -q 'cargo-rpm-macros' "$(RPM_SPEC)"; then \ - echo "Error: $(RPM_SPEC) does not contain cargo-rpm-macros." >&2; \ - echo "The Fedora mock target requires the Fedora-style spec." >&2; \ - exit 1; \ - fi - -# ── Fedora mock pipeline ──────────────────────────────────────────── - -mock: require-builder-image check-mock-config - @echo "=== mock: Fedora dist-git verification ===" +mock: require-builder-image + @echo "=== mock: Fedora dist-git verification (vendored) ===" $(PODMAN_RUN) bash -c 'make _mock-rebuild-impl && make _rpm-lint-mock-impl' @echo "=== mock: all checks passed ===" @@ -462,5 +497,5 @@ @ls -1 "$(MAKE_OUT)/rpmbuild/mock-results/"*.rpm 2>/dev/null | grep -v '\.src\.rpm$$' || true -# ── CentOS Stream / RHEL vendored pipeline ─────────────────────────── +# ── Vendored dependency tarball ─────────────────────────────────────── vendor: require-builder-image @@ -472,5 +507,5 @@ RPM_VERSION=$$(awk '/^Version:/ {print $$2}' "$(RPM_SPEC)") && \ VENDOR_DIR="$(TARGET_DIR)/vendor-staging" && \ - mkdir -p "$(RPM_SOURCES)" "$(RPM_SOURCES_CS)" && \ + mkdir -p "$(RPM_SOURCES)" "$(RPM_SOURCES_CS)" "$(RPM_SOURCES_RHEL)" && \ rm -rf "$${VENDOR_DIR}" && mkdir -p "$${VENDOR_DIR}" && \ $(CARGO) vendor --locked "$${VENDOR_DIR}" > /dev/null && \ @@ -479,7 +514,11 @@ cp -f "$(RPM_SOURCES)/$${RPM_NAME}-$${RPM_VERSION}-vendor.tar.xz" \ "$(RPM_SOURCES_CS)/$${RPM_NAME}-$${RPM_VERSION}-vendor.tar.xz" && \ + cp -f "$(RPM_SOURCES)/$${RPM_NAME}-$${RPM_VERSION}-vendor.tar.xz" \ + "$(RPM_SOURCES_RHEL)/$${RPM_NAME}-$${RPM_VERSION}-vendor.tar.xz" && \ rm -rf "$${VENDOR_DIR}" && \ echo "Vendor tarball: $(RPM_SOURCES)/$${RPM_NAME}-$${RPM_VERSION}-vendor.tar.xz" +# ── CentOS Stream vendored pipeline ────────────────────────────────── + srpm-cs: require-builder-image $(PODMAN_RUN) make _srpm-cs-impl @@ -542,4 +581,128 @@ @ls -1 "$(MAKE_OUT)/rpmbuild-cs/mock-results/"*.rpm 2>/dev/null | grep -v '\.src\.rpm$$' || true +# ── RHEL vendored pipeline ─────────────────────────────────────────── + +srpm-rhel: require-builder-image + $(PODMAN_RUN) make _srpm-rhel-impl + @echo "Host path: $(MAKE_OUT)/rpmbuild-rhel/SRPMS/" + @ls -1 "$(MAKE_OUT)/rpmbuild-rhel/SRPMS/"*.src.rpm 2>/dev/null || true + +mock-rhel-rebuild: require-builder-image + $(PODMAN_RUN) make _mock-rhel-rebuild-impl + +_srpm-rhel-impl: _vendor-impl + @echo "Building RHEL SRPM (--without cargo_macros)..." + @RPM_NAME=$$(awk '/^Name:/ {print $$2}' "$(RPM_SPEC)") && \ + RPM_VERSION=$$(awk '/^Version:/ {print $$2}' "$(RPM_SPEC)") && \ + RPM_TARBALL="$${RPM_NAME}-$${RPM_VERSION}.tar.gz" && \ + mkdir -p "$(RPM_SOURCES_RHEL)" "$(RPM_SPECS_RHEL)" "$(RPM_SRPMS_RHEL)" && \ + git archive --prefix "$${RPM_NAME}-$${RPM_VERSION}/" \ + -o "$(RPM_SOURCES_RHEL)/$${RPM_TARBALL}" HEAD && \ + if [ ! -f COPYING ]; then \ + echo "Error: COPYING is missing (required by %license)." >&2; \ + exit 1; \ + fi && \ + _tmpdir="$$(mktemp -d -p "$(TARGET_DIR)")" && \ + tar -xzf "$(RPM_SOURCES_RHEL)/$${RPM_TARBALL}" -C "$${_tmpdir}" && \ + cp COPYING "$${_tmpdir}/$${RPM_NAME}-$${RPM_VERSION}/COPYING" && \ + tar -czf "$(RPM_SOURCES_RHEL)/$${RPM_TARBALL}" -C "$${_tmpdir}" "$${RPM_NAME}-$${RPM_VERSION}" && \ + rm -rf "$${_tmpdir}" && \ + cp "$(RPM_SPEC)" "$(RPM_SPECS_RHEL)/" && \ + rpmbuild -bs "$(RPM_SPECS_RHEL)/$$(basename $(RPM_SPEC))" \ + --without cargo_macros \ + --define "dist .el10" \ + --define "_topdir $(RPM_TOPDIR_RHEL)" \ + --define "_sourcedir $(RPM_SOURCES_RHEL)" \ + --define "_srcrpmdir $(RPM_SRPMS_RHEL)" && \ + echo "SRPM(s):" && ls -1 "$(RPM_SRPMS_RHEL)"/*.src.rpm + +_mock-rhel-rebuild-impl: _srpm-rhel-impl + @echo "Rebuilding SRPM in mock (config: $(MOCK_RHEL_CONFIG))..." + @mkdir -p "$(MOCK_RESULT_DIR_RHEL)" && \ + $(MOCK) -r "$(MOCK_RHEL_CONFIG)" \ + --resultdir "$(MOCK_RESULT_DIR_RHEL)" \ + --rebuild $$(ls -1t "$(RPM_SRPMS_RHEL)"/*.src.rpm | head -1) + +rpm-lint-mock-rhel: require-builder-image + $(PODMAN_RUN) make _rpm-lint-mock-rhel-impl + +_rpm-lint-mock-rhel-impl: + @if ! ls "$(MOCK_RESULT_DIR_RHEL)"/*.rpm >/dev/null 2>&1; then \ + echo "No RPMs found in $(MOCK_RESULT_DIR_RHEL)." >&2; \ + echo "Run 'make mock-rhel' first." >&2; \ + exit 1; \ + fi + @echo "Running rpmlint on RHEL mock-built RPMs..." + rpmlint -c "$(RPMLINT_CONF)" "$(MOCK_RESULT_DIR_RHEL)"/*.rpm + +mock-rhel: require-builder-image + @echo "=== mock-rhel: RHEL dist-git verification (vendored) ===" + $(PODMAN_RUN) bash -c 'make _mock-rhel-rebuild-impl && make _rpm-lint-mock-rhel-impl' + @echo "=== mock-rhel: all checks passed ===" + @echo "RPMs: $(MAKE_OUT)/rpmbuild-rhel/mock-results/" + @ls -1 "$(MAKE_OUT)/rpmbuild-rhel/mock-results/"*.rpm 2>/dev/null | grep -v '\.src\.rpm$$' || true + +# ── COPR builds ───────────────────────────────────────────────────── + +_copr-preflight: + @test -f "$(COPR_CONFIG)" || { \ + echo "Error: COPR API token not found at $(COPR_CONFIG)" >&2; \ + echo "Get one from https://copr.fedorainfracloud.org/api/ and save it." >&2; \ + exit 2; \ + } +ifndef COPR_SCRATCH + @echo "Checking tree freshness against origin..." + @git fetch origin --quiet && \ + _local=$$(git rev-parse HEAD) && \ + _remote=$$(git rev-parse origin/master) && \ + _base=$$(git merge-base HEAD origin/master) && \ + if [ "$$_local" != "$$_remote" ]; then \ + if [ "$$_base" != "$$_remote" ]; then \ + echo "Error: local branch has diverged from origin/master." >&2; \ + else \ + echo "Error: local branch is behind origin/master." >&2; \ + fi; \ + echo "Pull upstream changes before submitting a release build." >&2; \ + echo "Use COPR_SCRATCH=1 to skip this check for test builds." >&2; \ + exit 1; \ + fi + @if [ -n "$$(git status --porcelain --untracked-files=no)" ]; then \ + echo "Error: git tree is dirty (tracked files modified)." >&2; \ + echo "Commit or stash changes before submitting a release build." >&2; \ + echo "Use COPR_SCRATCH=1 to skip this check for test builds." >&2; \ + exit 1; \ + fi +endif + +copr: require-builder-image _copr-preflight + $(PODMAN_RUN_COPR) make _copr-fedora-impl + +_copr-fedora-impl: _srpm-impl + @echo "Submitting Fedora SRPM to COPR ($(COPR_PROJECT))..." + copr-cli build $(COPR_PROJECT) \ + $$(ls -1t "$(RPM_SRPMS)"/*.src.rpm | head -1) \ + $(foreach c,$(COPR_FEDORA_CHROOTS),--chroot $(c)) \ + --nowait $(if $(COPR_SCRATCH),--scratch) + +copr-cs: require-builder-image _copr-preflight + $(PODMAN_RUN_COPR) make _copr-cs-impl + +_copr-cs-impl: _srpm-cs-impl + @echo "Submitting CentOS Stream SRPM to COPR ($(COPR_PROJECT))..." + copr-cli build $(COPR_PROJECT) \ + $$(ls -1t "$(RPM_SRPMS_CS)"/*.src.rpm | head -1) \ + $(foreach c,$(COPR_CS_CHROOTS),--chroot $(c)) \ + --nowait $(if $(COPR_SCRATCH),--scratch) + +copr-rhel: require-builder-image _copr-preflight + $(PODMAN_RUN_COPR) make _copr-rhel-impl + +_copr-rhel-impl: _srpm-rhel-impl + @echo "Submitting RHEL SRPM to COPR ($(COPR_PROJECT))..." + copr-cli build $(COPR_PROJECT) \ + $$(ls -1t "$(RPM_SRPMS_RHEL)"/*.src.rpm | head -1) \ + $(foreach c,$(COPR_RHEL_CHROOTS),--chroot $(c)) \ + --nowait $(if $(COPR_SCRATCH),--scratch) + # ── Licensing / SPDX hygiene ──────────────────────────────────────── @@ -589,5 +752,8 @@ $(PODMAN_RUN) make _verify-payload-dir PAYLOAD_DIR="$(MOCK_RESULT_DIR_CS)" PAYLOAD_LABEL="CentOS Stream" -verify-payload: verify-payload-fedora verify-payload-cs +verify-payload-rhel: require-builder-image + $(PODMAN_RUN) make _verify-payload-dir PAYLOAD_DIR="$(MOCK_RESULT_DIR_RHEL)" PAYLOAD_LABEL="RHEL" + +verify-payload: verify-payload-fedora verify-payload-cs verify-payload-rhel _verify-payload-dir: diff -U2 -r /var/lib/copr-rpmbuild/results/samestack/upstream-unpacked/Source0/samestack-0.5.0/containers/builder/Containerfile /var/lib/copr-rpmbuild/results/samestack/srpm-unpacked/samestack-0.5.0.tar.gz-extract/samestack-0.5.0/containers/builder/Containerfile --- /var/lib/copr-rpmbuild/results/samestack/upstream-unpacked/Source0/samestack-0.5.0/containers/builder/Containerfile 2026-03-12 22:34:51.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/samestack/srpm-unpacked/samestack-0.5.0.tar.gz-extract/samestack-0.5.0/containers/builder/Containerfile 2026-04-17 23:45:15.000000000 +0000 @@ -29,4 +29,5 @@ rpmlint \ python3-sphinx \ + copr-cli \ gcc \ gcc-c++ \ diff -U2 -r /var/lib/copr-rpmbuild/results/samestack/upstream-unpacked/Source0/samestack-0.5.0/docs/ROADMAP.md /var/lib/copr-rpmbuild/results/samestack/srpm-unpacked/samestack-0.5.0.tar.gz-extract/samestack-0.5.0/docs/ROADMAP.md --- /var/lib/copr-rpmbuild/results/samestack/upstream-unpacked/Source0/samestack-0.5.0/docs/ROADMAP.md 2026-03-12 22:34:51.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/samestack/srpm-unpacked/samestack-0.5.0.tar.gz-extract/samestack-0.5.0/docs/ROADMAP.md 2026-04-17 23:45:15.000000000 +0000 @@ -1,2 +1,4 @@ + + # SameStack Roadmap diff -U2 -r /var/lib/copr-rpmbuild/results/samestack/upstream-unpacked/Source0/samestack-0.5.0/packaging/samestack.spec /var/lib/copr-rpmbuild/results/samestack/srpm-unpacked/samestack-0.5.0.tar.gz-extract/samestack-0.5.0/packaging/samestack.spec --- /var/lib/copr-rpmbuild/results/samestack/upstream-unpacked/Source0/samestack-0.5.0/packaging/samestack.spec 2026-03-12 22:34:51.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/samestack/srpm-unpacked/samestack-0.5.0.tar.gz-extract/samestack-0.5.0/packaging/samestack.spec 2026-04-17 23:45:15.000000000 +0000 @@ -7,14 +7,15 @@ # dependency snapshot (Source1) so Cargo never needs the network. # -# cargo-rpm-macros exists on Fedora, but not on EL10; default it on for -# Fedora and off for EL/RHEL-like builders. +# cargo-rpm-macros exists on Fedora, but not all required crates are +# packaged yet. Default to vendored builds for now. Once all crate +# dependencies are available as Fedora RPMs, uncomment the Fedora override. %bcond_with cargo_macros -%if 0%{?fedora} -%bcond_without cargo_macros -%endif +#%%if 0%%{?fedora} +#%%bcond_without cargo_macros +#%%endif Name: samestack Version: 0.5.0 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Deterministic automation engine for real-time workloads @@ -145,4 +146,7 @@ %changelog +* Wed Apr 16 2026 John Kacur - 0.5.0-2 +- Default to vendored builds: not all Rust crates packaged for Fedora yet + * Tue Mar 10 2026 William Christopher White - 0.5.0-1 - Replace the legacy Python runner with a Rust engine (899 unit tests) diff -U2 -r /var/lib/copr-rpmbuild/results/samestack/upstream-unpacked/Source0/samestack-0.5.0/rust-toolchain.toml /var/lib/copr-rpmbuild/results/samestack/srpm-unpacked/samestack-0.5.0.tar.gz-extract/samestack-0.5.0/rust-toolchain.toml --- /var/lib/copr-rpmbuild/results/samestack/upstream-unpacked/Source0/samestack-0.5.0/rust-toolchain.toml 2026-03-12 22:34:51.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/samestack/srpm-unpacked/samestack-0.5.0.tar.gz-extract/samestack-0.5.0/rust-toolchain.toml 2026-04-17 23:45:15.000000000 +0000 @@ -1,2 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + [toolchain] channel = "stable" Only in /var/lib/copr-rpmbuild/results/samestack/srpm-unpacked/samestack-0.5.0.tar.gz-extract/samestack-0.5.0/src/runner_impl: trace_manifest_schema.json.license