dk1-high-performance vs dk1-quick-setup · net diff 60739ee81..b118fc07c · 11 files · generated 2026-09-20 21:50ZRead the full CLO.md adoption guide →
Stacks on the dk1-quick-setup branch. This is the High Performance branch: a tag-driven CI pipeline (distribute-1.3.yml) which requires GitHub Actions to maintain a per-ABI datastore of built objects for the 53-package closure, with the per-ABI object ids recorded in dist/any.u. A consumer fetches every opam package object prebuilt:
# preseed the datastore and then run
./dk1 restore github-l2 jonahbeckford/ocamlearlybird
./dk1 run-object NotHackwaly_Ocamlearlybird.Ocamlearlybird@1.3.6 \
-s Release.execution_abi -m ./bin/ocamlearlybird.exe -- --help=plain
See CLO.md for the High Performance guide: publishing with prepare-version + distribute, the fast dev loop (opam venv), and the What gets cached table.
The dk packages this build depends on have been 100% AI generated and maintained since June 2026, and the dk build tool itself was hand built but AI assisted since June 2026.
Performance was measured on GitHub Actions runners with dk 2.4.3.22 and opam 2.5.2 (.github/workflows/measure-performance.yml). The ± is the sample standard deviation over the mean; the High Performance numbers are the mean over 4 runs and the Quick Setup comparison numbers the mean over 8. The right column is the dk1-quick-setup branch's Quick Setup number for the same step:
| Step | dk High Performance | Quick Setup, for comparison |
|---|---|---|
| Linux: fresh checkout to a runnable binary | ~1 m 31 s ±20% | ~2 m 55 s ±6% |
| Linux: re-run the built binary | ~5 s ±12% | ~5 s ±17% |
| Windows: fresh checkout to a runnable binary | ~2 m 31 s ±13% | ~8 m 35 s ±9% |
| Windows: re-run the built binary | ~12 s ±6% | ~10 s ±9% |
What each fresh checkout figure includes. Both columns are the same one command, ./dk1 run-object ... -- --help=plain, whose timed region covers the vendored launcher self-installing the engine pinned in dk.u, obtaining the 53-package locked closure and the earlybird package, and then RUNNING the produced binary. The difference is the high performance branch uses the restore command which makes available all ocamlearlybird dependencies that were prebuilt in the ocamlearlybird GitHub Actions.
dk1-quick-setup).github/workflows/distribute-1.3.yml: the build matrix (5 distribute slots and combine), dk engine <!--VER:dk-->2.4.3.22<!--/VER:dk-->, trust-packages: CommonsLang_OCaml CommonsBase_FileMagic.github/workflows/measure-performance.yml: the High Performance timing (dk restore + three run-object runs: fetch, reconcile, warm) and the datastore-compatibility guardscripts/expected-measurement.json: the slots the completeness gate requires, extended for the High Performance datastoredk.u: the added CommonsBase_Std and CommonsBase_FileMagic imports the datastore path needsdist/any.u: the distribution script with the 6 per-ABI object ids and per-ABI machine-type checksDEMO-KEYS.md: the public demo signing keys the release chain is signed withetc/dk/d/1.3.0.dist.json: the 1.3 distribution public keysetc/dk/i/: the CommonsBase_FileMagic and CommonsBase_Std import records and the closure manifestetc/dk/v/…/Ocamlearlybird.DevPrefix.values.jsonc: the driver behind the opam venv fast dev loopCLO.md: the High Performance and Fast dev loop (opam venv) sections and the High Performance column of What gets cachedThe current release chain is signed with public demo keys (committed in DEMO-KEYS.md), suitable for evaluating the mechanism. A production release requires ./dk1 prepare-version --ci github 1.3 in a secure environment, replacing the dk-distribution environment secrets, and superseding the demo releases.
|
@@ -0,0 +1,212 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
name: NotHackwaly_Ocamlearlybird@1.3.x
|
| 2 |
+
on:
|
| 3 |
+
push:
|
| 4 |
+
tags:
|
| 5 |
+
- '1.3.*' # secrets are tied to version 1.3
|
| 6 |
+
workflow_dispatch: # allow manual triggering from GitHub page
|
| 7 |
+
|
| 8 |
+
jobs:
|
| 9 |
+
# Fail fast if the checked-in opam lock/driver drifted from the imported
|
| 10 |
+
# CommonsLang_OCaml rule versions (the 2026-08-20 stale-driver incident):
|
| 11 |
+
# catch it in seconds here instead of hours into the per-package build.
|
| 12 |
+
refresh-check:
|
| 13 |
+
runs-on: ubuntu-latest
|
| 14 |
+
steps:
|
| 15 |
+
- name: Harden Runner
|
| 16 |
+
uses: step-security/harden-runner@f808768d1510423e83855289c910610ca9b43176 # v2.17.0
|
| 17 |
+
with: { egress-policy: audit }
|
| 18 |
+
- name: Checkout repository
|
| 19 |
+
uses: actions/checkout@v6
|
| 20 |
+
- name: Check opam lock/driver freshness
|
| 21 |
+
# THE RULE VERSION IS DISCOVERED, NEVER PINNED HERE. A hardcoded version goes
|
| 22 |
+
# stale the moment the imported CommonsLang_OCaml moves it (it did: @1.1.12 was
|
| 23 |
+
# no longer offered after a bump, so this gate failed on a version, not a real
|
| 24 |
+
# drift). Discover the offered OpamLock.Refresh version from the import record,
|
| 25 |
+
# exactly as repin-engine.yml does when it regenerates the driver.
|
| 26 |
+
run: |
|
| 27 |
+
set -eu
|
| 28 |
+
imp=$(ls etc/dk/i/CommonsLang_OCaml.*.values.json 2>/dev/null | head -1)
|
| 29 |
+
if [ -z "$imp" ]; then echo "::error::no CommonsLang_OCaml import record found"; exit 1; fi
|
| 30 |
+
ref=$(grep -o 'CommonsLang_OCaml\.Dk\.OpamLock\.Refresh@[0-9][0-9.]*' "$imp" | sort -uV | tail -1)
|
| 31 |
+
if [ -z "$ref" ]; then echo "::error::the import offers no CommonsLang_OCaml.Dk.OpamLock.Refresh rule"; exit 1; fi
|
| 32 |
+
echo "checking drivers against $ref"
|
| 33 |
+
./dk1 --dangerously-trust-all dialog "$ref" mode=check \
|
| 34 |
+
'drivers[]=etc/dk/v/NotHackwaly_Ocamlearlybird/Ocamlearlybird.Closure.values.jsonc' \
|
| 35 |
+
'drivers[]=etc/dk/v/NotHackwaly_Ocamlearlybird/Ocamlearlybird.DevPrefix.values.jsonc'
|
| 36 |
+
|
| 37 |
+
distribute:
|
| 38 |
+
needs: refresh-check
|
| 39 |
+
# The secrets created by `./dk0 prepare-version --ci github VERSION`
|
| 40 |
+
# are tied to this environment only.
|
| 41 |
+
environment: dk-distribution
|
| 42 |
+
|
| 43 |
+
strategy:
|
| 44 |
+
fail-fast: false
|
| 45 |
+
matrix:
|
| 46 |
+
include:
|
| 47 |
+
# curl and build-essential are part of ubuntu-24.04 CI runner, so test with:
|
| 48 |
+
# docker run -v .:/work --workdir /work -it ubuntu:24.04 bash -c "apt update && apt install -y curl build-essential && sh ./dk0 distribute --actual-in-place --library NotHackwaly_Ocamlearlybird@1.3.99 part1 dist/any.u"
|
| 49 |
+
# docker run -v .:/work --workdir /work -it quay.io/pypa/manylinux_2_28_x86_64:2026.07.10-1 sh ./dk0 distribute --actual-in-place --library NotHackwaly_Ocamlearlybird@1.3.99 part1 dist/any.u
|
| 50 |
+
# Linux_x86 (32-bit) restored 2026-08-15. The lwt C-stub failure
|
| 51 |
+
# (container compiled stubs 64-bit while ocamlmklib linked
|
| 52 |
+
# -melf_i386) was the -m32 loss described below: the DkML compiler
|
| 53 |
+
# baked c_compiler as `gcc -m32`, and dune keeps only the program
|
| 54 |
+
# word of c_compiler while re-adding args through :standard, which
|
| 55 |
+
# lwt's src/unix/dune overrides. CommonsLang_OCaml 0.1.20260815220819
|
| 56 |
+
# (Apparatus@1.0.1 i686 driver shims) names the 32-bitness into a
|
| 57 |
+
# single-word i686-none-linux-gnu-gcc driver, so the arg can no
|
| 58 |
+
# longer be dropped. The i686 multilib packages in "Prepare static
|
| 59 |
+
# libc" are installed for this slot.
|
| 60 |
+
- runs-on: ubuntu-latest
|
| 61 |
+
distscript: dist/any.u
|
| 62 |
+
image: quay.io/pypa/manylinux_2_28_x86_64:2026.07.10-1
|
| 63 |
+
target-abi: Linux_x86
|
| 64 |
+
- runs-on: ubuntu-latest
|
| 65 |
+
distscript: dist/any.u
|
| 66 |
+
# RedHat only distributes date versioned manylinux images for a few
|
| 67 |
+
# months.
|
| 68 |
+
# https://quay.io/repository/pypa/manylinux_2_28_x86_64?tab=tags&tag=latest to
|
| 69 |
+
# get a new version.
|
| 70 |
+
image: quay.io/pypa/manylinux_2_28_x86_64:2026.07.10-1 # glibc 2.28 + gcc 14.2.1: old glibc is highly compatible and works with Node v24.14.0; system gcc will not be needed once GCC bootstrapped in dk0.
|
| 71 |
+
target-abi: Linux_x86_64
|
| 72 |
+
# Linux_x86_64_musl is deliberately absent. The musl DkML compiler
|
| 73 |
+
# binaries are musl-dynamic and need /lib/ld-musl-x86_64.so.1, which
|
| 74 |
+
# only exists inside CommonsLang_OCaml's own CI container, so every
|
| 75 |
+
# package built at the musl target ABI dies in OpamBuildWrapper with
|
| 76 |
+
# exit 127 (cppo is simply the first one to get there). The glibc
|
| 77 |
+
# Linux_x86_64 slot's relocatability and PIE issues
|
| 78 |
+
# (dkpkg/CommonsLang_OCaml#2 and #3) are fixed as of release
|
| 79 |
+
# 0.1.20260820083108, but the musl loader availability blocker is
|
| 80 |
+
# separate; restore this slot once the musl toolchain runs on a
|
| 81 |
+
# consumer host.
|
| 82 |
+
- runs-on: macos-latest
|
| 83 |
+
distscript: dist/any.u
|
| 84 |
+
execution-abi: Darwin_arm64
|
| 85 |
+
target-abi: Darwin_arm64
|
| 86 |
+
- runs-on: macos-latest
|
| 87 |
+
distscript: dist/any.u
|
| 88 |
+
execution-abi: Darwin_arm64
|
| 89 |
+
target-abi: Darwin_x86_64
|
| 90 |
+
- runs-on: windows-latest
|
| 91 |
+
distscript: dist/any.u
|
| 92 |
+
target-abi: Windows_x86
|
| 93 |
+
- runs-on: windows-latest
|
| 94 |
+
distscript: dist/any.u
|
| 95 |
+
target-abi: Windows_x86_64
|
| 96 |
+
|
| 97 |
+
runs-on: ${{ matrix.runs-on }}
|
| 98 |
+
container:
|
| 99 |
+
image: ${{ matrix.image }}
|
| 100 |
+
|
| 101 |
+
steps:
|
| 102 |
+
- name: Harden Runner # Optional but recommended
|
| 103 |
+
uses: step-security/harden-runner@f808768d1510423e83855289c910610ca9b43176 # v2.17.0
|
| 104 |
+
with: { egress-policy: audit }
|
| 105 |
+
- name: Checkout repository
|
| 106 |
+
uses: actions/checkout@v6
|
| 107 |
+
|
| 108 |
+
- name: Prepare static libc for the manylinux container
|
| 109 |
+
if: ${{ matrix.image }}
|
| 110 |
+
run: dnf install -y glibc-static glibc-static.i686 glibc-devel.i686 libgcc.i686
|
| 111 |
+
|
| 112 |
+
- name: Distribute Modules
|
| 113 |
+
uses: diskuv/dk-distribute@v4
|
| 114 |
+
with:
|
| 115 |
+
# The repo name (ocamlearlybird) is not a valid dk library id, so the
|
| 116 |
+
# default `id` (github repo without owner) cannot be used. Pin it to
|
| 117 |
+
# the real library id; the version tracks the pushed tag. (dk-distribute@v3
|
| 118 |
+
# names this input `id`, not `library`.)
|
| 119 |
+
id: NotHackwaly_Ocamlearlybird@${{ github.ref_name }}
|
| 120 |
+
pubkey: ${{ secrets.distribute_1_3_pubkey }}
|
| 121 |
+
seckey: ${{ secrets.distribute_1_3_seckey }}
|
| 122 |
+
options: -nosysinc
|
| 123 |
+
# All slots publish for restore (store: release). The cross slots
|
| 124 |
+
# (target-abi != execution-abi: Linux_x86, Windows_x86,
|
| 125 |
+
# Darwin_x86_64) were previously pinned to store: none because dk
|
| 126 |
+
# object value-ids did not include the resolved target ABI, so a
|
| 127 |
+
# store restored from a previous release could serve host-ABI
|
| 128 |
+
# content under a cross slot's id -- the mechanism behind
|
| 129 |
+
# 1.3.202608152325's mislabeled 64-bit "Linux_x86" binary and the
|
| 130 |
+
# 1.3.202608160911 lwt 32/64 link failure. dk0 2.4.2.323+ (engine
|
| 131 |
+
# fix cfe131821) now mixes the resolved target ABI into a
|
| 132 |
+
# cross-built object's value-id, so cross objects key distinctly
|
| 133 |
+
# from the host's native build and a shared/restored store can no
|
| 134 |
+
# longer contaminate. The consumer dk0 self-updates from the
|
| 135 |
+
# manifest (>= 2.4.2.325 is live), so this is now safe.
|
| 136 |
+
#
|
| 137 |
+
# Escape hatch: set the repository variable DK_STORE=none before
|
| 138 |
+
# pushing a tag to force a full cold build+publish, then delete it
|
| 139 |
+
# to restore incremental releases:
|
| 140 |
+
# gh variable set DK_STORE --body none
|
| 141 |
+
# gh variable delete DK_STORE
|
| 142 |
+
# Needed whenever the driver/recipe changes but the thin leaf's
|
| 143 |
+
# values file (and so its value-id) does not: the restored store
|
| 144 |
+
# serves the unchanged leaf stale, the new Closure object and the
|
| 145 |
+
# Pkg.*.Src bundles its build references never publish, and every
|
| 146 |
+
# cold High Performance fetch 404s (release 1.3.202608262345, CI
|
| 147 |
+
# run 33026508188). dk0 2.4.2.336+ makes such a distribute fail
|
| 148 |
+
# loudly instead of sealing the incomplete set.
|
| 149 |
+
store: ${{ vars.DK_STORE || 'release' }}
|
| 150 |
+
distscript: ${{ matrix.distscript }}
|
| 151 |
+
execution-abi: ${{ matrix.execution-abi }}
|
| 152 |
+
target-abi: ${{ matrix.target-abi }}
|
| 153 |
+
# R8 resumable CI (requires diskuv/dk-distribute >= v4, which
|
| 154 |
+
# forwards these to `dk0 distribute --allow-partial --deadline`).
|
| 155 |
+
# When the job runs out of time, dk0 publishes the objects it
|
| 156 |
+
# finished as a PRERELEASE (a `dk-dist/PARTIAL` marker) instead
|
| 157 |
+
# of failing the workflow with nothing published; a later run
|
| 158 |
+
# restores that prerelease, resumes, and publishes a full
|
| 159 |
+
# release. Keep deadline-minutes comfortably under the job's
|
| 160 |
+
# timeout-minutes so the runner stops itself first.
|
| 161 |
+
# allow-partial: true
|
| 162 |
+
# deadline-minutes: 300
|
| 163 |
+
# If your workspace imports packages other than CommonsBase_Std
|
| 164 |
+
# (the built-in dk trust root) and your own package, list them so
|
| 165 |
+
# CI can accept their producer keys (dk0 denies unknown producer
|
| 166 |
+
# keys by default and CI has no terminal to accept them):
|
| 167 |
+
# This workspace's only direct import is CommonsLang_OCaml.
|
| 168 |
+
# dist/any.u runs CommonsBase_FileMagic's `file` to verify each
|
| 169 |
+
# slot's binary is compiled for its ABI, so its producer key must
|
| 170 |
+
# be trusted here too.
|
| 171 |
+
trust-packages: 'CommonsLang_OCaml CommonsBase_FileMagic'
|
| 172 |
+
# Use MlFront HEAD when CI build is not from a tag
|
| 173 |
+
experimental-mlfront-ref: ${{ github.ref_type != 'tag' && 'HEAD' }}
|
| 174 |
+
# Uncomment when testing MlFront
|
| 175 |
+
# experimental-mlfront-ref: HEAD
|
| 176 |
+
|
| 177 |
+
combine:
|
| 178 |
+
needs: distribute
|
| 179 |
+
# The secrets created by `./dk0 prepare-version --ci github VERSION`
|
| 180 |
+
# are tied to this environment only. The combine job uses them to sign
|
| 181 |
+
# the combined distribution build payload.
|
| 182 |
+
environment: dk-distribution
|
| 183 |
+
permissions:
|
| 184 |
+
contents: write # for action-gh-release
|
| 185 |
+
id-token: write # for actions/attest-build-provenance
|
| 186 |
+
attestations: write # for actions/attest-build-provenance
|
| 187 |
+
# required but does not work in `act`! bug: https://github.com/nektos/act/issues/6025
|
| 188 |
+
artifact-metadata: write # for actions/attest-build-provenance
|
| 189 |
+
|
| 190 |
+
runs-on: ubuntu-latest
|
| 191 |
+
steps:
|
| 192 |
+
- name: Harden Runner # Optional but recommended
|
| 193 |
+
uses: step-security/harden-runner@f808768d1510423e83855289c910610ca9b43176 # v2.17.0
|
| 194 |
+
with: { egress-policy: audit }
|
| 195 |
+
- name: Checkout repository
|
| 196 |
+
uses: actions/checkout@v6
|
| 197 |
+
|
| 198 |
+
- name: Combine Modules
|
| 199 |
+
uses: diskuv/dk-distribute/combine@v4
|
| 200 |
+
with:
|
| 201 |
+
# Same library-id pin as the distribute job (combine defaults its `id`
|
| 202 |
+
# to the repo name too, which is not a valid dk library id here).
|
| 203 |
+
id: NotHackwaly_Ocamlearlybird@${{ github.ref_name }}
|
| 204 |
+
pubkey: ${{ secrets.distribute_1_3_pubkey }}
|
| 205 |
+
seckey: ${{ secrets.distribute_1_3_seckey }}
|
| 206 |
+
|
| 207 |
+
# Attests the distribution, publishes the sigstore bundle for values.json
|
| 208 |
+
# as a release asset, and creates the release. A consumer then fetches
|
| 209 |
+
# that bundle beside values.json with a plain download, so importing this
|
| 210 |
+
# release needs no GitHub API token.
|
| 211 |
+
- name: Attest and Release
|
| 212 |
+
uses: diskuv/dk-distribute/attest-release@v4
|
|
@@ -1,20 +1,20 @@
|
|
| 1 |
name: measure-performance
|
| 2 |
-
# Head-to-head opam-vs-dk timing for the
|
| 3 |
-
#
|
| 4 |
-
#
|
| 5 |
-
#
|
| 6 |
-
#
|
| 7 |
-
# status checks.
|
| 8 |
#
|
| 9 |
-
#
|
| 10 |
-
#
|
| 11 |
-
#
|
| 12 |
-
#
|
|
|
|
|
|
|
| 13 |
# opam fresh -> binary : (setup-ocaml step) + opam_deps + opam_build_cold
|
| 14 |
# dk re-run a binary : dk_run_warm
|
| 15 |
# opam re-run a binary : opam_run_warm
|
| 16 |
-
# dk edit one file : dk_run_edit (rebuilds the leaf package object)
|
| 17 |
-
# opam edit one file : opam_build_edit (dune's file-level incremental)
|
| 18 |
on:
|
| 19 |
workflow_dispatch:
|
| 20 |
inputs:
|
|
@@ -30,6 +30,17 @@ on:
|
|
| 30 |
- 'true'
|
| 31 |
- 'false'
|
| 32 |
default: 'true'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
push:
|
| 34 |
tags:
|
| 35 |
- 'perf-*'
|
|
@@ -45,18 +56,50 @@ jobs:
|
|
| 45 |
- os: windows-latest
|
| 46 |
slot: Release.Windows_x86_64
|
| 47 |
runs-on: ${{ matrix.os }}
|
| 48 |
-
|
| 49 |
-
# generous headroom over the default and the ci.yml jobs.
|
| 50 |
-
timeout-minutes: 90
|
| 51 |
steps:
|
| 52 |
- name: Checkout repository
|
| 53 |
uses: actions/checkout@v7
|
| 54 |
with:
|
| 55 |
lfs: true
|
| 56 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 57 |
# Linux uses the POSIX ./dk1 launcher (curl is present) and date-based
|
| 58 |
# millisecond timing.
|
| 59 |
-
- name: dk
|
| 60 |
if: runner.os == 'Linux'
|
| 61 |
shell: bash
|
| 62 |
run: |
|
|
@@ -67,18 +110,32 @@ jobs:
|
|
| 67 |
-s "$slot" -m ./bin/ocamlearlybird.exe -- --help=plain >/dev/null; }
|
| 68 |
echo "DK MEASURE STARTED $(date -u +%H:%M:%S) slot=$slot"
|
| 69 |
|
|
|
|
|
|
|
| 70 |
a=$(now); run; b=$(now)
|
| 71 |
-
echo "PHASE
|
| 72 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 73 |
c=$(now); run; d=$(now)
|
| 74 |
-
echo "PHASE
|
| 75 |
|
| 76 |
-
|
| 77 |
-
|
|
|
|
|
|
|
| 78 |
e=$(now); run; f=$(now)
|
| 79 |
-
echo "PHASE
|
|
|
|
|
|
|
|
|
|
| 80 |
|
| 81 |
-
|
|
|
|
|
|
|
|
|
|
| 82 |
echo "DK MEASURE DONE $(date -u +%H:%M:%S)"
|
| 83 |
|
| 84 |
# The same three readings, machine readable, for the gate job. Written
|
|
@@ -86,9 +143,22 @@ jobs:
|
|
| 86 |
# cannot move a number: an earlier repair to this workflow moved console
|
| 87 |
# writes inside a stopwatch and widened five of six Windows cells.
|
| 88 |
mkdir -p "$RUNNER_TEMP/dk-phases"
|
| 89 |
-
printf '
|
| 90 |
"$((b-a))" "$((d-c))" "$((f-e))" > "$RUNNER_TEMP/dk-phases/$slot.txt"
|
| 91 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 92 |
- name: Upload this slot's readings for the gate
|
| 93 |
if: ${{ always() && runner.os == 'Linux' }}
|
| 94 |
uses: actions/upload-artifact@v4
|
|
@@ -99,7 +169,7 @@ jobs:
|
|
| 99 |
|
| 100 |
# Windows uses the dk1.cmd launcher (bootstraps via PowerShell, no curl
|
| 101 |
# dependency) and Stopwatch timing.
|
| 102 |
-
- name: dk
|
| 103 |
if: runner.os == 'Windows'
|
| 104 |
shell: pwsh
|
| 105 |
run: |
|
|
@@ -109,7 +179,7 @@ jobs:
|
|
| 109 |
# the Windows runner are expensive enough to move the numbers, so it
|
| 110 |
# goes to a file and is printed after the stopwatch stops. The file
|
| 111 |
# sits in the runner temp rather than the working tree, which the
|
| 112 |
-
#
|
| 113 |
$errlog = Join-Path $env:RUNNER_TEMP 'dk-run.err'
|
| 114 |
function Run {
|
| 115 |
& .\dk1.cmd run-object NotHackwaly_Ocamlearlybird.Ocamlearlybird@1.3.6 `
|
|
@@ -119,18 +189,25 @@ jobs:
|
|
| 119 |
Write-Host "DK MEASURE STARTED $(Get-Date -Format HH:mm:ss) slot=$slot"
|
| 120 |
|
| 121 |
$sw = [System.Diagnostics.Stopwatch]::StartNew(); Run; $cold = $sw.ElapsedMilliseconds
|
| 122 |
-
Write-Host "PHASE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 123 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 124 |
$sw.Restart(); Run; $warm = $sw.ElapsedMilliseconds
|
| 125 |
Write-Host "PHASE dk_run_warm ms=$warm"
|
|
|
|
|
|
|
| 126 |
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
if ($LASTEXITCODE -ne 0) { throw "update failed ($LASTEXITCODE)" }
|
| 130 |
-
$sw.Restart(); Run; $edit = $sw.ElapsedMilliseconds
|
| 131 |
-
Write-Host "PHASE dk_run_edit ms=$edit"
|
| 132 |
-
|
| 133 |
-
Write-Host "DK SUMMARY slot=$slot build_cold_ms=$cold run_warm_ms=$warm run_edit_ms=$edit"
|
| 134 |
Write-Host "DK ENGINE OUTPUT from the last timed run, printed outside the stopwatch"
|
| 135 |
Get-Content $errlog
|
| 136 |
Write-Host "DK MEASURE DONE $(Get-Date -Format HH:mm:ss)"
|
|
@@ -140,9 +217,18 @@ jobs:
|
|
| 140 |
# cannot move a number.
|
| 141 |
$phaseDir = Join-Path $env:RUNNER_TEMP 'dk-phases'
|
| 142 |
New-Item -ItemType Directory -Force -Path $phaseDir | Out-Null
|
| 143 |
-
"
|
| 144 |
Set-Content -NoNewline -Path (Join-Path $phaseDir "$slot.txt")
|
| 145 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 146 |
- name: Upload this slot's readings for the gate
|
| 147 |
if: ${{ always() && runner.os == 'Windows' }}
|
| 148 |
uses: actions/upload-artifact@v4
|
|
@@ -249,3 +335,89 @@ jobs:
|
|
| 249 |
|
| 250 |
echo "OPAM SUMMARY os=${{ matrix.os }} fresh_to_binary_ms=$((d-t0)) setup_ms=$((a-t0)) deps_ms=$((b-a)) build_cold_ms=$((d-c)) build_warm_ms=$((f-e)) run_warm_ms=$((h-g)) build_edit_ms=$((j-i))"
|
| 251 |
echo "OPAM MEASURE DONE $(date -u +%H:%M:%S)"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
name: measure-performance
|
| 2 |
+
# Head-to-head opam-vs-dk timing for the High Performance tier, on the two ABIs
|
| 3 |
+
# it ships as prebuilt objects: Linux_x86_64 (ubuntu-latest) and Windows_x86_64
|
| 4 |
+
# (windows-latest). Each runner measures the host ABI natively, so the warm-run
|
| 5 |
+
# number is the real re-run cost a user sees. Trigger from the Actions tab
|
| 6 |
+
# (workflow_dispatch) or by pushing a perf-* tag; the perf workflow never runs
|
| 7 |
+
# on push or pull_request, so it stays off the PR status checks.
|
| 8 |
#
|
| 9 |
+
# The dk track resolves the prebuilt object with run-object, which lazily
|
| 10 |
+
# fetches only the requested slot's object from the release. Every timed step
|
| 11 |
+
# prints `PHASE <name> ms=<n>` lines and a final SUMMARY line, comparable to the
|
| 12 |
+
# opam track:
|
| 13 |
+
# dk fresh -> binary : dk_restore_cold + dk_fetch_cold (restore the
|
| 14 |
+
# datastore, then lazy-fetch prebuilt + materialize)
|
| 15 |
# opam fresh -> binary : (setup-ocaml step) + opam_deps + opam_build_cold
|
| 16 |
# dk re-run a binary : dk_run_warm
|
| 17 |
# opam re-run a binary : opam_run_warm
|
|
|
|
|
|
|
| 18 |
on:
|
| 19 |
workflow_dispatch:
|
| 20 |
inputs:
|
|
|
|
| 30 |
- 'true'
|
| 31 |
- 'false'
|
| 32 |
default: 'true'
|
| 33 |
+
profile:
|
| 34 |
+
description: >-
|
| 35 |
+
Run the fetch-profile job, which repeats the dk run-object command
|
| 36 |
+
under `-d perf` so every remote artifact it opens is named. Off by
|
| 37 |
+
default: it adds a job to an ordinary measurement run and its output
|
| 38 |
+
is a log rather than a PHASE line.
|
| 39 |
+
type: choice
|
| 40 |
+
options:
|
| 41 |
+
- 'false'
|
| 42 |
+
- 'true'
|
| 43 |
+
default: 'false'
|
| 44 |
push:
|
| 45 |
tags:
|
| 46 |
- 'perf-*'
|
|
|
|
| 56 |
- os: windows-latest
|
| 57 |
slot: Release.Windows_x86_64
|
| 58 |
runs-on: ${{ matrix.os }}
|
| 59 |
+
timeout-minutes: 30
|
|
|
|
|
|
|
| 60 |
steps:
|
| 61 |
- name: Checkout repository
|
| 62 |
uses: actions/checkout@v7
|
| 63 |
with:
|
| 64 |
lfs: true
|
| 65 |
|
| 66 |
+
# Seed the datastore LIVE from the latest published self-distribution,
|
| 67 |
+
# the documented consumer flow (CLO.md: restore then run-object). The
|
| 68 |
+
# committed etc/dk/i self-record was removed: no workflow advanced it, so
|
| 69 |
+
# it froze the measured datastore at an older CommonsLang_OCaml while the
|
| 70 |
+
# imports moved on, and run-object then re-paid the whole closure on every
|
| 71 |
+
# warm re-run. Restoring live always seeds the datastore built at the
|
| 72 |
+
# current CommonsLang_OCaml, by construction.
|
| 73 |
+
# The restore is TIMED because a High Performance fresh checkout is restore
|
| 74 |
+
# THEN run-object, so the fresh-checkout figure is dk_restore_cold +
|
| 75 |
+
# dk_fetch_cold. It is also the first ./dk1 call, so it fairly pays the
|
| 76 |
+
# launcher self-install a fresh checkout incurs. The PHASE echo is outside
|
| 77 |
+
# the stopwatch (header note: a console write inside a stopwatch widened
|
| 78 |
+
# five of six Windows cells once).
|
| 79 |
+
- name: dk restore the latest self-distribution (Linux)
|
| 80 |
+
if: runner.os == 'Linux'
|
| 81 |
+
shell: bash
|
| 82 |
+
run: |
|
| 83 |
+
set -euo pipefail
|
| 84 |
+
a=$(date +%s%3N)
|
| 85 |
+
./dk1 restore github-l2 jonahbeckford/ocamlearlybird
|
| 86 |
+
b=$(date +%s%3N)
|
| 87 |
+
echo "PHASE dk_restore_cold ms=$((b-a))"
|
| 88 |
+
|
| 89 |
+
- name: dk restore the latest self-distribution (Windows)
|
| 90 |
+
if: runner.os == 'Windows'
|
| 91 |
+
shell: pwsh
|
| 92 |
+
run: |
|
| 93 |
+
$ErrorActionPreference = 'Stop'
|
| 94 |
+
$sw = [System.Diagnostics.Stopwatch]::StartNew()
|
| 95 |
+
& .\dk1.cmd restore github-l2 jonahbeckford/ocamlearlybird
|
| 96 |
+
$restore = $sw.ElapsedMilliseconds
|
| 97 |
+
if ($LASTEXITCODE -ne 0) { throw "restore failed ($LASTEXITCODE)" }
|
| 98 |
+
Write-Host "PHASE dk_restore_cold ms=$restore"
|
| 99 |
+
|
| 100 |
# Linux uses the POSIX ./dk1 launcher (curl is present) and date-based
|
| 101 |
# millisecond timing.
|
| 102 |
+
- name: dk fetch + reconcile run + warm run (timed, Linux)
|
| 103 |
if: runner.os == 'Linux'
|
| 104 |
shell: bash
|
| 105 |
run: |
|
|
|
|
| 110 |
-s "$slot" -m ./bin/ocamlearlybird.exe -- --help=plain >/dev/null; }
|
| 111 |
echo "DK MEASURE STARTED $(date -u +%H:%M:%S) slot=$slot"
|
| 112 |
|
| 113 |
+
# First run lazily fetches the prebuilt object and materializes the
|
| 114 |
+
# runtime sandbox.
|
| 115 |
a=$(now); run; b=$(now)
|
| 116 |
+
echo "PHASE dk_fetch_cold ms=$((b-a))"
|
| 117 |
|
| 118 |
+
# Second run reconciles the working tree with the fetched release:
|
| 119 |
+
# when the tree drifted since the release was harvested (for example
|
| 120 |
+
# a changed Src value), dk pays a one-time local rebuild here. On an
|
| 121 |
+
# undrifted tree this equals the warm run.
|
| 122 |
c=$(now); run; d=$(now)
|
| 123 |
+
echo "PHASE dk_run_reconcile ms=$((d-c))"
|
| 124 |
|
| 125 |
+
# Third run: the steady-state warm re-run cost. A healthy warm run
|
| 126 |
+
# leaves the trace store byte-identical (the engine cram's invariant),
|
| 127 |
+
# so hash it before and after instead of parsing progress messages.
|
| 128 |
+
h1=$(md5sum t/d/cts.1/trace | cut -d' ' -f1)
|
| 129 |
e=$(now); run; f=$(now)
|
| 130 |
+
echo "PHASE dk_run_warm ms=$((f-e))"
|
| 131 |
+
h2=$(md5sum t/d/cts.1/trace | cut -d' ' -f1)
|
| 132 |
+
silent=t
|
| 133 |
+
[ "$h1" != "$h2" ] && silent=f
|
| 134 |
|
| 135 |
+
# Flag drift so a reconcile rebuild is never mistaken for warm cost.
|
| 136 |
+
drifted=f
|
| 137 |
+
if [ $((d-c)) -gt $(( (f-e) * 3 )) ]; then drifted=t; fi
|
| 138 |
+
echo "DK SUMMARY slot=$slot fetch_cold_ms=$((b-a)) reconcile_ms=$((d-c)) run_warm_ms=$((f-e)) tree_drifted_from_release=$drifted warm_silent=$silent"
|
| 139 |
echo "DK MEASURE DONE $(date -u +%H:%M:%S)"
|
| 140 |
|
| 141 |
# The same three readings, machine readable, for the gate job. Written
|
|
|
|
| 143 |
# cannot move a number: an earlier repair to this workflow moved console
|
| 144 |
# writes inside a stopwatch and widened five of six Windows cells.
|
| 145 |
mkdir -p "$RUNNER_TEMP/dk-phases"
|
| 146 |
+
printf 'dk_fetch_cold=%s\ndk_run_reconcile=%s\ndk_run_warm=%s\n' \
|
| 147 |
"$((b-a))" "$((d-c))" "$((f-e))" > "$RUNNER_TEMP/dk-phases/$slot.txt"
|
| 148 |
|
| 149 |
+
# Compatibility guard. A datastore whose baked CommonsLang_OCaml differs
|
| 150 |
+
# from the imported one makes run-object bind one key to two values and
|
| 151 |
+
# re-pay the closure on every warm run. A matched datastore emits ZERO
|
| 152 |
+
# such warnings; the cycle-54 mismatch emitted 40. The reconcile>3*warm
|
| 153 |
+
# drift check above cannot see this (both phases inflate together, so the
|
| 154 |
+
# ratio stays ~1). One untimed run, stderr captured, then asserted.
|
| 155 |
+
run 2>"$RUNNER_TEMP/compat.err" || true
|
| 156 |
+
if grep -q "binds one key to 2 different values" "$RUNNER_TEMP/compat.err"; then
|
| 157 |
+
n=$(grep -c "binds one key to 2 different values" "$RUNNER_TEMP/compat.err")
|
| 158 |
+
echo "::error::datastore/closure value-id mismatch: $n multi-value binding warning(s). The restored datastore was not built at the imported CommonsLang_OCaml, so the warm re-run re-pays the closure cost. Re-cut the self-distribution datastore at the current CommonsLang_OCaml."
|
| 159 |
+
exit 1
|
| 160 |
+
fi
|
| 161 |
+
|
| 162 |
- name: Upload this slot's readings for the gate
|
| 163 |
if: ${{ always() && runner.os == 'Linux' }}
|
| 164 |
uses: actions/upload-artifact@v4
|
|
|
|
| 169 |
|
| 170 |
# Windows uses the dk1.cmd launcher (bootstraps via PowerShell, no curl
|
| 171 |
# dependency) and Stopwatch timing.
|
| 172 |
+
- name: dk fetch + reconcile run + warm run (timed, Windows)
|
| 173 |
if: runner.os == 'Windows'
|
| 174 |
shell: pwsh
|
| 175 |
run: |
|
|
|
|
| 179 |
# the Windows runner are expensive enough to move the numbers, so it
|
| 180 |
# goes to a file and is printed after the stopwatch stops. The file
|
| 181 |
# sits in the runner temp rather than the working tree, which the
|
| 182 |
+
# reconcile run compares against the release.
|
| 183 |
$errlog = Join-Path $env:RUNNER_TEMP 'dk-run.err'
|
| 184 |
function Run {
|
| 185 |
& .\dk1.cmd run-object NotHackwaly_Ocamlearlybird.Ocamlearlybird@1.3.6 `
|
|
|
|
| 189 |
Write-Host "DK MEASURE STARTED $(Get-Date -Format HH:mm:ss) slot=$slot"
|
| 190 |
|
| 191 |
$sw = [System.Diagnostics.Stopwatch]::StartNew(); Run; $cold = $sw.ElapsedMilliseconds
|
| 192 |
+
Write-Host "PHASE dk_fetch_cold ms=$cold"
|
| 193 |
+
|
| 194 |
+
# Second run reconciles the working tree with the fetched release:
|
| 195 |
+
# a drifted tree pays a one-time local rebuild here. On an undrifted
|
| 196 |
+
# tree this equals the warm run.
|
| 197 |
+
$sw.Restart(); Run; $reconcile = $sw.ElapsedMilliseconds
|
| 198 |
+
Write-Host "PHASE dk_run_reconcile ms=$reconcile"
|
| 199 |
|
| 200 |
+
# Third run: the steady-state warm re-run cost. A healthy warm run
|
| 201 |
+
# leaves the trace store byte-identical (the engine cram's invariant),
|
| 202 |
+
# so hash it before and after instead of parsing progress messages.
|
| 203 |
+
$h1 = (Get-FileHash -Algorithm MD5 t\d\cts.1\trace).Hash
|
| 204 |
$sw.Restart(); Run; $warm = $sw.ElapsedMilliseconds
|
| 205 |
Write-Host "PHASE dk_run_warm ms=$warm"
|
| 206 |
+
$h2 = (Get-FileHash -Algorithm MD5 t\d\cts.1\trace).Hash
|
| 207 |
+
$silent = if ($h1 -ne $h2) { 'f' } else { 't' }
|
| 208 |
|
| 209 |
+
$drifted = if ($reconcile -gt (3 * $warm)) { 't' } else { 'f' }
|
| 210 |
+
Write-Host "DK SUMMARY slot=$slot fetch_cold_ms=$cold reconcile_ms=$reconcile run_warm_ms=$warm tree_drifted_from_release=$drifted warm_silent=$silent"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 211 |
Write-Host "DK ENGINE OUTPUT from the last timed run, printed outside the stopwatch"
|
| 212 |
Get-Content $errlog
|
| 213 |
Write-Host "DK MEASURE DONE $(Get-Date -Format HH:mm:ss)"
|
|
|
|
| 217 |
# cannot move a number.
|
| 218 |
$phaseDir = Join-Path $env:RUNNER_TEMP 'dk-phases'
|
| 219 |
New-Item -ItemType Directory -Force -Path $phaseDir | Out-Null
|
| 220 |
+
"dk_fetch_cold=$cold`ndk_run_reconcile=$reconcile`ndk_run_warm=$warm" |
|
| 221 |
Set-Content -NoNewline -Path (Join-Path $phaseDir "$slot.txt")
|
| 222 |
|
| 223 |
+
# Compatibility guard. A matched datastore emits zero multi-value
|
| 224 |
+
# bindings; the cycle-54 mismatch emitted many. $errlog holds the last
|
| 225 |
+
# timed run's engine stderr, so no extra run is needed here.
|
| 226 |
+
$hits = Select-String -Path $errlog -Pattern 'binds one key to 2 different values'
|
| 227 |
+
if ($hits) {
|
| 228 |
+
Write-Host "::error::datastore/closure value-id mismatch: $($hits.Count) multi-value binding warning(s). The restored datastore was not built at the imported CommonsLang_OCaml, so the warm re-run re-pays the closure cost. Re-cut the self-distribution datastore at the current CommonsLang_OCaml."
|
| 229 |
+
exit 1
|
| 230 |
+
}
|
| 231 |
+
|
| 232 |
- name: Upload this slot's readings for the gate
|
| 233 |
if: ${{ always() && runner.os == 'Windows' }}
|
| 234 |
uses: actions/upload-artifact@v4
|
|
|
|
| 335 |
|
| 336 |
echo "OPAM SUMMARY os=${{ matrix.os }} fresh_to_binary_ms=$((d-t0)) setup_ms=$((a-t0)) deps_ms=$((b-a)) build_cold_ms=$((d-c)) build_warm_ms=$((f-e)) run_warm_ms=$((h-g)) build_edit_ms=$((j-i))"
|
| 337 |
echo "OPAM MEASURE DONE $(date -u +%H:%M:%S)"
|
| 338 |
+
|
| 339 |
+
# NAMES WHAT A SINGLE-OBJECT FETCH OPENS, and it lives in this workflow
|
| 340 |
+
# rather than its own because GitHub resolves workflow_dispatch by name only
|
| 341 |
+
# for a workflow it already knows, and only ci.yml is on the default branch.
|
| 342 |
+
# A separate file would be a workflow nothing can trigger.
|
| 343 |
+
#
|
| 344 |
+
# It exists because the only attribution this repository had for the per-ABI
|
| 345 |
+
# fan-out was a TIMESTAMP PROXY: 98 s of a 172 s phase binned into windows
|
| 346 |
+
# guessed to belong to ABIs nobody asked for. BuildPerf.note_index_fetch
|
| 347 |
+
# emits one `index-fetch` line per artifact carrying that artifact's PATH, so
|
| 348 |
+
# the split becomes a grouping of named paths instead of an estimate.
|
| 349 |
+
#
|
| 350 |
+
# What it does NOT give, stated so nobody sums the wrong column: `central_sz`
|
| 351 |
+
# is the size of the zip CENTRAL DIRECTORY that was range-fetched. It is not
|
| 352 |
+
# the transferred bytes and it is not the object's own size. Summing
|
| 353 |
+
# announced object sizes has already produced a meaningless figure here once.
|
| 354 |
+
#
|
| 355 |
+
# It needs nothing from the dk job and the measurement gate needs nothing
|
| 356 |
+
# from it, so it neither blocks nor is blocked by the published measurement.
|
| 357 |
+
fetch-profile:
|
| 358 |
+
if: ${{ inputs.profile == 'true' }}
|
| 359 |
+
runs-on: ubuntu-latest
|
| 360 |
+
timeout-minutes: 60
|
| 361 |
+
steps:
|
| 362 |
+
- name: Checkout repository
|
| 363 |
+
uses: actions/checkout@v7
|
| 364 |
+
with:
|
| 365 |
+
lfs: true
|
| 366 |
+
|
| 367 |
+
- name: Run run-object under -d perf
|
| 368 |
+
shell: bash
|
| 369 |
+
run: |
|
| 370 |
+
set -euo pipefail
|
| 371 |
+
slot=Release.Linux_x86_64
|
| 372 |
+
echo "PROFILE STARTED $(date -u +%H:%M:%S) slot=$slot"
|
| 373 |
+
|
| 374 |
+
# The perf lines go to stderr. Keep stdout out of the way, and do not
|
| 375 |
+
# let a non-zero exit hide the log: the log IS the measurement.
|
| 376 |
+
set +e
|
| 377 |
+
./dk1 -d perf run-object NotHackwaly_Ocamlearlybird.Ocamlearlybird@1.3.6 \
|
| 378 |
+
-s "$slot" -m ./bin/ocamlearlybird.exe -- --help=plain \
|
| 379 |
+
>/dev/null 2>perf.log
|
| 380 |
+
rc=$?
|
| 381 |
+
set -e
|
| 382 |
+
echo "PROFILE run_object_exit=$rc"
|
| 383 |
+
|
| 384 |
+
# PROVE THE INSTRUMENT FIRED before reading anything off it. An empty
|
| 385 |
+
# parse must never impersonate an answer: zero perf lines reads
|
| 386 |
+
# exactly like a finding of "no fan-out", and a misplaced flag is not
|
| 387 |
+
# a finding.
|
| 388 |
+
n=$(grep -c '^\[perf ' perf.log || true)
|
| 389 |
+
echo "PROFILE perf_lines=$n"
|
| 390 |
+
if [ "$n" -eq 0 ]; then
|
| 391 |
+
echo "PROFILE FAILED: no [perf lines in stderr." >&2
|
| 392 |
+
echo "Either -d perf sits in the wrong place on the command line, or this" >&2
|
| 393 |
+
echo "engine does not carry BuildPerf. Neither is a measurement." >&2
|
| 394 |
+
echo "First 40 stderr lines follow:" >&2
|
| 395 |
+
head -40 perf.log >&2
|
| 396 |
+
exit 1
|
| 397 |
+
fi
|
| 398 |
+
|
| 399 |
+
grep 'index-fetch' perf.log | sed 's/.* //' | sort -u > paths.txt
|
| 400 |
+
echo "PROFILE index_fetch_lines=$(grep -c 'index-fetch' perf.log || true)"
|
| 401 |
+
echo "PROFILE distinct_paths=$(wc -l < paths.txt)"
|
| 402 |
+
|
| 403 |
+
# LONGEST NAME FIRST, and each match is CONSUMED, so Linux_x86_64 is
|
| 404 |
+
# never counted a second time as Linux_x86. A count in this ecosystem
|
| 405 |
+
# was redone for exactly that reason.
|
| 406 |
+
for abi in Linux_x86_64_musl Linux_x86_64 Linux_x86_32 Linux_x86 \
|
| 407 |
+
Darwin_arm64 Darwin_x86_64 Windows_x86_64 Windows_x86_32 Windows_x86; do
|
| 408 |
+
c=$(grep -c "$abi" paths.txt || true)
|
| 409 |
+
echo "PROFILE abi=$abi distinct_paths=$c"
|
| 410 |
+
grep -v "$abi" paths.txt > paths.rest || true
|
| 411 |
+
mv paths.rest paths.txt
|
| 412 |
+
done
|
| 413 |
+
echo "PROFILE abi=none distinct_paths=$(wc -l < paths.txt)"
|
| 414 |
+
echo "PROFILE DONE $(date -u +%H:%M:%S)"
|
| 415 |
+
|
| 416 |
+
- name: Upload the perf log
|
| 417 |
+
if: always()
|
| 418 |
+
uses: actions/upload-artifact@v4
|
| 419 |
+
with:
|
| 420 |
+
name: fetch-profile-${{ github.run_id }}
|
| 421 |
+
path: perf.log
|
| 422 |
+
if-no-files-found: error
|
| 423 |
+
retention-days: 30
|
|
@@ -133,7 +133,98 @@ produces the same lock. Bump the commit deliberately, then re-solve with
|
|
| 133 |
|
| 134 |
---
|
| 135 |
|
| 136 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 137 |
|
| 138 |
## Editing a file and rebuilding
|
| 139 |
|
|
@@ -154,15 +245,15 @@ external package object stays cached and is reused untouched.
|
|
| 154 |
|
| 155 |
## What gets cached
|
| 156 |
|
| 157 |
-
| Piece |
|
| 158 |
| --- | --- |
|
| 159 |
| OCaml compiler toolchain (`CommonsLang_OCaml.DkML@4.14.3`) | fetched prebuilt from the `dkpkg` release |
|
| 160 |
| Dune (`CommonsLang_OCaml.Dune@3.23.1`) | fetched prebuilt from the `dkpkg` release |
|
| 161 |
| opam and the build utilities (coreutils, 7-Zip, GNU make) | fetched prebuilt from the `dkpkg` releases |
|
| 162 |
| MSYS2 runtime (Windows slots) | fetched prebuilt from the `dkpkg` release |
|
| 163 |
-
| The 53 locked dependency packages (lwt, dap, menhir, ppxlib, …) |
|
| 164 |
-
| The in-tree `earlybird` package |
|
| 165 |
-
| Localized source and final executable forms |
|
| 166 |
|
| 167 |
A dk object id is a hash of the values-file content, the `module@version`, and
|
| 168 |
the slot, and the id embeds this project's namespace. A
|
|
|
|
| 133 |
|
| 134 |
---
|
| 135 |
|
| 136 |
+
## High Performance
|
| 137 |
+
|
| 138 |
+
Quick Setup builds ocamlearlybird's opam closure from source on your machine
|
| 139 |
+
(on top of prebuilt toolchain objects), so it compiles and links native code and
|
| 140 |
+
needs a system C toolchain on `PATH`. The High Performance path publishes the
|
| 141 |
+
project's **own** prebuilt objects in CI; on the consumer side the
|
| 142 |
+
whole closure is a fetch-and-run of already-built objects.
|
| 143 |
+
|
| 144 |
+
### Publishing the project's own objects: `prepare-version` + `distribute`
|
| 145 |
+
|
| 146 |
+
The cache that pays off for a project's dependency packages is the project's
|
| 147 |
+
**own prior releases** (object ids embed the project namespace, so only this
|
| 148 |
+
project's published `Pkg.*` objects serve its fetches). Setting that up is a
|
| 149 |
+
two-command dk workflow, wired into CI:
|
| 150 |
+
|
| 151 |
+
**1. `prepare-version MAJOR.MINOR`** mints the distribution signing keys and
|
| 152 |
+
records the public halves in-tree:
|
| 153 |
+
|
| 154 |
+
```sh
|
| 155 |
+
./dk1 prepare-version --ci github 1.3
|
| 156 |
+
```
|
| 157 |
+
|
| 158 |
+
It prompts for the **library id** (`NotHackwaly_Ocamlearlybird` here, the
|
| 159 |
+
`VendorQualifier_Unit` base the forms already use), then generates an
|
| 160 |
+
Ed25519-style keypair for the current version and the upcoming minor/major
|
| 161 |
+
versions. It **prints each secret key for you to store** (dk does not persist
|
| 162 |
+
secrets) and writes only the public keys to `etc/dk/d/1.3.PATCH.dist.json`;
|
| 163 |
+
`--ci github` scaffolds the release workflow. The license (`MIT`, from `dk.u`'s
|
| 164 |
+
`## License`) is recorded if not already set.
|
| 165 |
+
|
| 166 |
+
> **Key custody.** The secret keys are the project's release identity and must be
|
| 167 |
+
> generated in a secure environment and stored in a secret manager / GitHub
|
| 168 |
+
> Actions secret. They must never live in an ephemeral build container or a log.
|
| 169 |
+
> (For that reason the keys were **not** generated in this document's CI
|
| 170 |
+
> container; this section documents the workflow, and the repository owner runs
|
| 171 |
+
> `prepare-version` where the secrets can be custodied.)
|
| 172 |
+
|
| 173 |
+
**2. `distribute --library …@VERSION`** builds the objects on a compatible CI
|
| 174 |
+
builder and publishes the signed bundle (under `dk-dist/`) as a GitHub release.
|
| 175 |
+
`VERSION` must be a monotonically increasing patch of the prepared `MAJOR.MINOR`
|
| 176 |
+
(e.g. `NotHackwaly_Ocamlearlybird@1.3.YYYYMMDDhhmm`). Consumers then:
|
| 177 |
+
|
| 178 |
+
```sh
|
| 179 |
+
./dk1 restore github-l2 jonahbeckford/ocamlearlybird
|
| 180 |
+
./dk1 run-object NotHackwaly_Ocamlearlybird.Ocamlearlybird@1.3.6 \
|
| 181 |
+
-s Release.execution_abi -m ./bin/ocamlearlybird.exe -- --help
|
| 182 |
+
```
|
| 183 |
+
|
| 184 |
+
(The `-m` member is `./bin/ocamlearlybird.exe`, the exact archive name,
|
| 185 |
+
including the `./` prefix.)
|
| 186 |
+
|
| 187 |
+
## Fast dev loop (opam venv)
|
| 188 |
+
|
| 189 |
+
For productivity you can get incremental `dune build -w` builds and IDE support. Set up a dk-enabled opam environment once:
|
| 190 |
+
|
| 191 |
+
```sh
|
| 192 |
+
./dk1 --trust-local-package NotHackwaly_Ocamlearlybird dialog CommonsLang_OCaml.Dk.OpamLock.OpamVenv@1.1.14
|
| 193 |
+
```
|
| 194 |
+
|
| 195 |
+
(`--trust-local-package` lets the dialog resolve this workspace's own
|
| 196 |
+
`NotHackwaly_Ocamlearlybird` forms; the venv is a maintainer inner loop against
|
| 197 |
+
the working tree.)
|
| 198 |
+
|
| 199 |
+
Then, in each shell:
|
| 200 |
+
|
| 201 |
+
```powershell
|
| 202 |
+
. .\opam-venv\env.ps1 # Windows PowerShell (recommended)
|
| 203 |
+
# or: source opam-venv/env.sh # Unix / Git Bash
|
| 204 |
+
dune build -w # incremental; only the edited module recompiles
|
| 205 |
+
dune exec -- ocamlearlybird --help
|
| 206 |
+
```
|
| 207 |
+
|
| 208 |
+
**Parity.** The venv resolves to the same locked dependency versions and the same
|
| 209 |
+
`CommonsLang_OCaml.DkML@4.14.3` compiler the reproducible dk build uses (it is
|
| 210 |
+
driven from `dk.opam-lock.jsonc`), so `dune -w` behavior matches the shipped
|
| 211 |
+
binary, and earlybird keeps debugging bytecode compiled by that same 4.14.3
|
| 212 |
+
compiler.
|
| 213 |
+
|
| 214 |
+
**Isolation.** `opam-venv/` and dune's `_build/` are invisible to both git and to
|
| 215 |
+
dk's own reproducible build: the OpamVenv dialog drops a self-ignoring
|
| 216 |
+
`.gitignore` and a `dune` `(dirs)` guard into `opam-venv/`, so a host
|
| 217 |
+
`dune build` never scans it and `dk1 run-object` produces the identical binary.
|
| 218 |
+
|
| 219 |
+
**Refresh.** After a dependency change, regenerate the drivers and re-materialize:
|
| 220 |
+
the zero-argument `Refresh@1.1.14` (see *Maintenance after adoption*) followed by
|
| 221 |
+
`OpamVenv@1.1.14`.
|
| 222 |
+
|
| 223 |
+
**Windows.** `env.ps1` imports MSVC (vcvars) automatically for native linking. If
|
| 224 |
+
a native relink reports `LNK1104: cannot open ... main.exe`, a previous
|
| 225 |
+
`ocamlearlybird` process still holds the executable open, so stop it and rebuild.
|
| 226 |
+
For a VS Code task, launch `code .` from an activated shell so it inherits the
|
| 227 |
+
environment.
|
| 228 |
|
| 229 |
## Editing a file and rebuilding
|
| 230 |
|
|
|
|
| 245 |
|
| 246 |
## What gets cached
|
| 247 |
|
| 248 |
+
| Piece | High Performance source |
|
| 249 |
| --- | --- |
|
| 250 |
| OCaml compiler toolchain (`CommonsLang_OCaml.DkML@4.14.3`) | fetched prebuilt from the `dkpkg` release |
|
| 251 |
| Dune (`CommonsLang_OCaml.Dune@3.23.1`) | fetched prebuilt from the `dkpkg` release |
|
| 252 |
| opam and the build utilities (coreutils, 7-Zip, GNU make) | fetched prebuilt from the `dkpkg` releases |
|
| 253 |
| MSYS2 runtime (Windows slots) | fetched prebuilt from the `dkpkg` release |
|
| 254 |
+
| The 53 locked dependency packages (lwt, dap, menhir, ppxlib, …) | fetched prebuilt from this project's release |
|
| 255 |
+
| The in-tree `earlybird` package | fetched prebuilt from this project's release; rebuilt locally on source edits |
|
| 256 |
+
| Localized source and final executable forms | fetched prebuilt from this project's release; rebuilt locally on source edits |
|
| 257 |
|
| 258 |
A dk object id is a hash of the values-file content, the `module@version`, and
|
| 259 |
the slot, and the id embeds this project's namespace. A
|
|
@@ -0,0 +1,208 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Demo keys for ocamlearlybird
|
| 2 |
+
|
| 3 |
+
Do NOT use these keys for production.
|
| 4 |
+
|
| 5 |
+
From:
|
| 6 |
+
|
| 7 |
+
```sh
|
| 8 |
+
./dk1 prepare-version --ci github 1.3
|
| 9 |
+
```
|
| 10 |
+
|
| 11 |
+
we recorded the Q&A session below.
|
| 12 |
+
Normally you would save it all as a secure note in your favorite password manager:
|
| 13 |
+
|
| 14 |
+
```text
|
| 15 |
+
-----------------
|
| 16 |
+
Define Library Id
|
| 17 |
+
-----------------
|
| 18 |
+
|
| 19 |
+
The library id is the hierarchical base of all the modules that your
|
| 20 |
+
distributions export. It is in the three-part form `VendorQualifier_Unit`
|
| 21 |
+
like `FooBar_Baz` or `FooBar_FizzBizz`.
|
| 22 |
+
|
| 23 |
+
To share your modules with others and avoid naming conflicts, your library
|
| 24 |
+
id must be registered and have a distribution key (we'll generate one for
|
| 25 |
+
you later).
|
| 26 |
+
|
| 27 |
+
Good "Vendors" and "Qualifiers" relate to your domain or real name.
|
| 28 |
+
Reserved "Vendors" include:
|
| 29 |
+
`Commons`, `Std`, `Dk`, `Ml`, `Our`, `Thunk`, `Zz`
|
| 30 |
+
|
| 31 |
+
A good "Unit" is either `Std`, or is related to your product or project.
|
| 32 |
+
|
| 33 |
+
Enter library id (leave blank to quit): NotHackwaly_Ocamlearlybird
|
| 34 |
+
NotHackwaly_Ocamlearlybird
|
| 35 |
+
|
| 36 |
+
--------------------------------
|
| 37 |
+
Key Pair for current version 1.3
|
| 38 |
+
--------------------------------
|
| 39 |
+
|
| 40 |
+
STORE the following key pair safely (ex. secure password manager) -or-
|
| 41 |
+
PRINT it and store it in two or more safe places.
|
| 42 |
+
|
| 43 |
+
-- name of keypair --
|
| 44 |
+
NotHackwaly_Ocamlearlybird-1.3
|
| 45 |
+
|
| 46 |
+
-- public key 1.3 --
|
| 47 |
+
untrusted comment: NotHackwaly_Ocamlearlybird-1.3|RWS5iRatcyGHX6NTdJ3Zrv9lhpWPrw9khAMAsHbWZa3vwkaCzDJRXrXR
|
| 48 |
+
|
| 49 |
+
-- secret key 1.3 --
|
| 50 |
+
untrusted comment: NotHackwaly_Ocamlearlybird-1.3|RWRCSwAAAADfxp0ThqnKUqKOXq10gz+IYV1xqtw4K/25iRatcyGHX+gX7j3vYtSe5KP3PmLS95snRt8r3SX8JHCMUxGXio5zo1N0ndmu/2WGlY+vD2SEAwCwdtZlre/CRoLMMlFetdE=
|
| 51 |
+
|
| 52 |
+
Did you securely store the keypair above?
|
| 53 |
+
|
| 54 |
+
Y. Yes, I have saved the keypair
|
| 55 |
+
Q. Quit
|
| 56 |
+
|
| 57 |
+
Enter Y or Q: y
|
| 58 |
+
y
|
| 59 |
+
|
| 60 |
+
----------------------------------------------
|
| 61 |
+
CI Identity Information for You (the Producer)
|
| 62 |
+
----------------------------------------------
|
| 63 |
+
|
| 64 |
+
1. (simple; most common) Enter GitHub SLSA v1 Level 2 details.
|
| 65 |
+
https://docs.github.com/en/actions/how-tos/secure-your-work/use-artifact-attestations/use-artifact-attestations#generating-artifact-attestations-for-your-builds
|
| 66 |
+
Details to attest (prove) that your builds have no tampering of values
|
| 67 |
+
after GitHub Actions finishes.
|
| 68 |
+
2. (most secure) Enter GitHub SLSA v1 Level 3 details.
|
| 69 |
+
https://docs.github.com/en/actions/how-tos/secure-your-work/use-artifact-attestations/increase-security-rating
|
| 70 |
+
Details to attest (prove) that there will be no tampering of values
|
| 71 |
+
during your builds by using a known, vetted GitHub Actions script.
|
| 72 |
+
C. Continue without CI identity
|
| 73 |
+
Q. Quit
|
| 74 |
+
|
| 75 |
+
Enter 1, 2, C or Q: 1
|
| 76 |
+
1
|
| 77 |
+
|
| 78 |
+
Enter GitHub repository (ex. "owner/repo"): jonahbeckford/ocamlearlybird
|
| 79 |
+
jonahbeckford/ocamlearlybird
|
| 80 |
+
|
| 81 |
+
--------------------------------
|
| 82 |
+
Define Your Distribution License
|
| 83 |
+
--------------------------------
|
| 84 |
+
|
| 85 |
+
1. Enter SPDX license (ex. "Apache-2.0"). Strongly permissive licenses
|
| 86 |
+
like BlueOak-1.0.0, BSD-2-Clause-Patent and Apache-2.0 will not
|
| 87 |
+
prompt your users to accept the license.
|
| 88 |
+
2. Enter plain license text
|
| 89 |
+
3. Enter license text in Markdown format
|
| 90 |
+
Q. Quit
|
| 91 |
+
|
| 92 |
+
Enter 1, 2, 3 or Q: 1
|
| 93 |
+
1
|
| 94 |
+
Enter SPDX license identifier (ex. "Apache-2.0"; "q" to quit): MIT
|
| 95 |
+
MIT
|
| 96 |
+
|
| 97 |
+
----------------------------------------
|
| 98 |
+
Key Pair for next minor version bump 1.4
|
| 99 |
+
----------------------------------------
|
| 100 |
+
|
| 101 |
+
STORE the following key pair safely (ex. secure password manager) -or-
|
| 102 |
+
PRINT it and store it in two or more safe places.
|
| 103 |
+
|
| 104 |
+
-- name of keypair --
|
| 105 |
+
NotHackwaly_Ocamlearlybird-1.4
|
| 106 |
+
|
| 107 |
+
-- public key 1.4 --
|
| 108 |
+
untrusted comment: NotHackwaly_Ocamlearlybird-1.4|RWQZzxNUJsjQ/Jvo4twU6vt8wFACHOucOBipn+i2DWBI/UyQcG6fq+Sc
|
| 109 |
+
|
| 110 |
+
-- secret key 1.4 --
|
| 111 |
+
untrusted comment: NotHackwaly_Ocamlearlybird-1.4|RWRCSwAAAAC0QIfcxsJyZgrg/8S1m+P3YLN0IubKOtgZzxNUJsjQ/GDDya0OsPkxeTzsill8Ow9+cw1wmhYvTgFiJ8rb7zBNm+ji3BTq+3zAUAIc65w4GKmf6LYNYEj9TJBwbp+r5Jw=
|
| 112 |
+
|
| 113 |
+
Did you securely store the keypair above?
|
| 114 |
+
|
| 115 |
+
Y. Yes, I have saved the keypair
|
| 116 |
+
Q. Quit
|
| 117 |
+
|
| 118 |
+
Enter Y or Q: y
|
| 119 |
+
y
|
| 120 |
+
|
| 121 |
+
----------------------------------------
|
| 122 |
+
Key Pair for next major version bump 2.0
|
| 123 |
+
----------------------------------------
|
| 124 |
+
|
| 125 |
+
STORE the following key pair safely (ex. secure password manager) -or-
|
| 126 |
+
PRINT it and store it in two or more safe places.
|
| 127 |
+
|
| 128 |
+
-- name of keypair --
|
| 129 |
+
NotHackwaly_Ocamlearlybird-2.0
|
| 130 |
+
|
| 131 |
+
-- public key 2.0 --
|
| 132 |
+
untrusted comment: NotHackwaly_Ocamlearlybird-2.0|RWQh+ThJhASGk+QRWB7rnF33W5z90ZfFjxkRRgLjqLhW4wg0FSMowMjI
|
| 133 |
+
|
| 134 |
+
-- secret key 2.0 --
|
| 135 |
+
untrusted comment: NotHackwaly_Ocamlearlybird-2.0|RWRCSwAAAABHH9nRCfY1QOPw81Y7/OD47C4BG5ehiWwh+ThJhASGk6jwqBxUbkbBCPGaEiVV37uugs1I1K0zZLVwcg4+5nhJ5BFYHuucXfdbnP3Rl8WPGRFGAuOouFbjCDQVIyjAyMg=
|
| 136 |
+
|
| 137 |
+
Did you securely store the keypair above?
|
| 138 |
+
|
| 139 |
+
Y. Yes, I have saved the keypair
|
| 140 |
+
Q. Quit
|
| 141 |
+
|
| 142 |
+
Enter Y or Q: y
|
| 143 |
+
y
|
| 144 |
+
{
|
| 145 |
+
"continuations": {
|
| 146 |
+
"attestation": {
|
| 147 |
+
"openbsd_signify": {
|
| 148 |
+
"signature": "untrusted comment: signed by key b98916ad7321875f\nRWS5iRatcyGHXzE+NoZhCVLSHmy7+nrpX4i3BctxIBgb5mz21Cu8JD9zd2ltJZl9z8cPyP+tAr0RGa77G0RBF/ixqJ8UcLoJTwc=\n"
|
| 149 |
+
}
|
| 150 |
+
},
|
| 151 |
+
"continuations_to_sign": {
|
| 152 |
+
"1.4": {
|
| 153 |
+
"application": { "name": "dk0", "version": "2.4.2+rev-313" },
|
| 154 |
+
"openbsd_signify": {
|
| 155 |
+
"public_key": "untrusted comment: NotHackwaly_Ocamlearlybird-1.4\nRWQZzxNUJsjQ/Jvo4twU6vt8wFACHOucOBipn+i2DWBI/UyQcG6fq+Sc\n"
|
| 156 |
+
}
|
| 157 |
+
},
|
| 158 |
+
"2.0": {
|
| 159 |
+
"application": { "name": "dk0", "version": "2.4.2+rev-313" },
|
| 160 |
+
"openbsd_signify": {
|
| 161 |
+
"public_key": "untrusted comment: NotHackwaly_Ocamlearlybird-2.0\nRWQh+ThJhASGk+QRWB7rnF33W5z90ZfFjxkRRgLjqLhW4wg0FSMowMjI\n"
|
| 162 |
+
}
|
| 163 |
+
}
|
| 164 |
+
}
|
| 165 |
+
},
|
| 166 |
+
"id": "NotHackwaly_Ocamlearlybird@1.3.0",
|
| 167 |
+
"license": { "spdx": "MIT" },
|
| 168 |
+
"producer": {
|
| 169 |
+
"application": { "name": "dk0", "version": "2.4.2+rev-313" },
|
| 170 |
+
"github_slsa_v1_l2": { "repository": "jonahbeckford/ocamlearlybird" },
|
| 171 |
+
"openbsd_signify": {
|
| 172 |
+
"public_key": "untrusted comment: NotHackwaly_Ocamlearlybird-1.3\nRWS5iRatcyGHX6NTdJ3Zrv9lhpWPrw9khAMAsHbWZa3vwkaCzDJRXrXR\n"
|
| 173 |
+
}
|
| 174 |
+
}
|
| 175 |
+
}
|
| 176 |
+
Saved etc/dk/d/1.3.0.dist.json
|
| 177 |
+
Saved .github/workflows/distribute-1.3.yml
|
| 178 |
+
|
| 179 |
+
------------
|
| 180 |
+
|
| 181 |
+
Your workflow `.github/workflows/distribute-1.3.yml`
|
| 182 |
+
requires two GitHub secrets set in a `dk-distribution` environment
|
| 183 |
+
to sign the distributions:
|
| 184 |
+
|
| 185 |
+
- `distribute_1_3_pubkey` - the public key for `NotHackwaly_Ocamlearlybird-1.3`
|
| 186 |
+
- `distribute_1_3_seckey` - the secret key for `NotHackwaly_Ocamlearlybird-1.3`
|
| 187 |
+
|
| 188 |
+
You can set these secrets now with the GitHub CLI!
|
| 189 |
+
1. Download GitHub CLI from https://cli.github.com/.
|
| 190 |
+
|
| 191 |
+
2. Create the dk-distribution environment with:
|
| 192 |
+
|
| 193 |
+
gh api --method PUT -H "Accept: application/vnd.github+json" repos/jonahbeckford/ocamlearlybird/environments/dk-distribution
|
| 194 |
+
|
| 195 |
+
3. Run the following, then copy and paste the text
|
| 196 |
+
("untrusted comment: ...|RW...") of the PUBLIC key
|
| 197 |
+
`NotHackwaly_Ocamlearlybird-1.3`:
|
| 198 |
+
|
| 199 |
+
gh secret set --repo jonahbeckford/ocamlearlybird --env dk-distribution distribute_1_3_pubkey
|
| 200 |
+
|
| 201 |
+
4. Run the following, then copy and paste the text
|
| 202 |
+
("untrusted comment: ...|RW...") of the SECRET key
|
| 203 |
+
`NotHackwaly_Ocamlearlybird-1.3`:
|
| 204 |
+
|
| 205 |
+
gh secret set --repo jonahbeckford/ocamlearlybird --env dk-distribution distribute_1_3_seckey
|
| 206 |
+
|
| 207 |
+
Full docs at https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets#creating-secrets-for-an-environment.
|
| 208 |
+
```
|
|
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Distribution for NotHackwaly_Ocamlearlybird
|
| 2 |
+
|
| 3 |
+
## ocamlearlybird debug adapter
|
| 4 |
+
|
| 5 |
+
`ocamlearlybird` is a debug adapter (DAP) for OCaml bytecode. It ships as the
|
| 6 |
+
single native executable `bin/ocamlearlybird.exe`, built from source as a
|
| 7 |
+
per-package opam closure
|
| 8 |
+
(`NotHackwaly_Ocamlearlybird.Ocamlearlybird.Closure`) and republished as one
|
| 9 |
+
executable per slot.
|
| 10 |
+
|
| 11 |
+
The object is `bin/ocamlearlybird.exe` compiled for the ABI. The `Release.target_abi`
|
| 12 |
+
wildcard resolves to the slot the workflow passes as `--target-abi`, so this one
|
| 13 |
+
script covers every shipped slot: `Linux_x86`, `Linux_x86_64`, `Darwin_x86_64`,
|
| 14 |
+
`Darwin_arm64`, `Windows_x86_64`, and `Windows_x86` (one abi-keyed `\dk.object`
|
| 15 |
+
line each below). The `Linux_x86_64_musl` slot is deferred — its from-source
|
| 16 |
+
toolchain does not build yet (see the `distribute-1.3.yml` matrix comments and
|
| 17 |
+
rotary-phone `prompts/linux-x86_64-musl-abi.md`); re-add its `\dk.object` line
|
| 18 |
+
once fixed.
|
| 19 |
+
|
| 20 |
+
The per-slot `\dk.object` value-ids are harvested from the first CI run (the DkML
|
| 21 |
+
pattern): the first `distribute` emits them as a `dk-patches/` diff that is
|
| 22 |
+
applied back into this script. These are reproducible
|
| 23 |
+
(verified byte-identical across two independent CI tags), so a re-tag matches.
|
| 24 |
+
|
| 25 |
+
$ get-object NotHackwaly_Ocamlearlybird.Ocamlearlybird@1.3.6 -s Release.target_abi -d ${RUNTIME}/Ocamlearlybird-1.3.6
|
| 26 |
+
\test(pass)
|
| 27 |
+
\dk.object(abi: "Release.Darwin_arm64", value-id: "omtfpbdektkgath7i4swzhvzc5fxtderwphdlegrg4bxta5v5sl4q")
|
| 28 |
+
\dk.object(abi: "Release.Darwin_x86_64", value-id: "oqjlu7ktcozr4n6hhwc2bdjny5or4kuw3jrewu7sry4ffh3xuqa7q")
|
| 29 |
+
\dk.object(abi: "Release.Linux_x86", value-id: "oedoj4l65yoqqedzwg63ixxeq5kud4vtq5pjzcvvfr7afaxpoqqbq")
|
| 30 |
+
\dk.object(abi: "Release.Linux_x86_64", value-id: "ok4emdyssvgza2bkzlrdkcyi3faiae7d7p3bma6csg5a7r57ijjja")
|
| 31 |
+
\dk.object(abi: "Release.Windows_x86", value-id: "oowf7ga5kkh7wjpeyugumxf4sj2jldzsjempeegynrtgwu2hfwgbq")
|
| 32 |
+
\dk.object(abi: "Release.Windows_x86_64", value-id: "o5g7qcdhtvyxw6oa2dc6qj6ecpqf3vsvv7ob6zufs4kiwijfzi4uq")\;
|
| 33 |
+
|
| 34 |
+
## Architecture verification
|
| 35 |
+
|
| 36 |
+
Running the OpenBSD `file`(1) tool (from `CommonsBase_FileMagic`) on the built
|
| 37 |
+
adapter confirms each slot's `bin/ocamlearlybird.exe` really is compiled for the
|
| 38 |
+
ABI it is published under. `file` runs at `Release.execution_abi` (the build
|
| 39 |
+
host) and inspects the `Release.target_abi` binary, so it covers the cross slots
|
| 40 |
+
too. The per-abi `file` output is recorded below, one `\dk.target` line per slot,
|
| 41 |
+
harvested from the first CI run the same way as the value-ids above.
|
| 42 |
+
|
| 43 |
+
$ run-object CommonsBase_FileMagic.File@7.8.50407 -s Release.execution_abi -m ./bin/file.exe -e bin/file.exe --
|
| 44 |
+
> -b $(get-object NotHackwaly_Ocamlearlybird.Ocamlearlybird@1.3.6 -s Release.target_abi -d : -e file.exe)/bin/ocamlearlybird.exe
|
| 45 |
+
\test(pass)
|
| 46 |
+
\dk.target(abi: "Darwin_arm64")[Mach-O 64-bit executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|WEAK_DEFINES|BINDS_TO_WEAK|PIE>
|
| 47 |
+
]
|
| 48 |
+
\dk.target(abi: "Darwin_x86_64")[Mach-O 64-bit executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|WEAK_DEFINES|BINDS_TO_WEAK|PIE>
|
| 49 |
+
]
|
| 50 |
+
\dk.target(abi: "Linux_x86")[ELF 32-bit LSB executable, Intel i386, version 1 (SYSV)
|
| 51 |
+
]
|
| 52 |
+
\dk.target(abi: "Linux_x86_64")[ELF 64-bit LSB executable, x86-64, version 1 (SYSV)
|
| 53 |
+
]
|
| 54 |
+
\dk.target(abi: "Windows_x86")[PE32 executable for MS Windows 6.00 (console),, 5 sections
|
| 55 |
+
]
|
| 56 |
+
\dk.target(abi: "Windows_x86_64")[PE32+ executable for MS Windows 6.00 (console),, 7 sections
|
| 57 |
+
]\;
|
|
@@ -52,3 +52,10 @@ them run `./dk1 update --no-imports` to refresh the recorded checksums.
|
|
| 52 |
checksum: (blake2b-256: "f4908c307b22de34d24ae0349481f321cd46d5082cc92a89d99d18a13189d907",
|
| 53 |
sha256: "54c5ccfd53e87797ea4fea161b0fd6c869ba80a45b3b3870848407c6797741a8",
|
| 54 |
sha1: "b018ece3ee445cfd6414cd7f28a3c501b5469898"))\;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 52 |
checksum: (blake2b-256: "f4908c307b22de34d24ae0349481f321cd46d5082cc92a89d99d18a13189d907",
|
| 53 |
sha256: "54c5ccfd53e87797ea4fea161b0fd6c869ba80a45b3b3870848407c6797741a8",
|
| 54 |
sha1: "b018ece3ee445cfd6414cd7f28a3c501b5469898"))\;
|
| 55 |
+
|
| 56 |
+
%% import { type="github-l2", repo="dkpkg/CommonsBase_FileMagic" }
|
| 57 |
+
\dk.import(type: "github-l2", library: "CommonsBase_FileMagic",
|
| 58 |
+
version: "0.1.20260920144347",
|
| 59 |
+
checksum: (blake2b-256: "759fc698d8eccc6a06eb856c8292dcb4cb7818976d81da262d0d31a17e49523c",
|
| 60 |
+
sha256: "9795f60a23f3135597b06cf41d13983757f1488f71dc301e0a90f85834a340d7",
|
| 61 |
+
sha1: "6750792bad17d08e4a855295073845e139b1c985"))\;
|
|
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"continuations": {
|
| 3 |
+
"attestation": {
|
| 4 |
+
"openbsd_signify": {
|
| 5 |
+
"signature": "untrusted comment: signed by key b98916ad7321875f\nRWS5iRatcyGHXzE+NoZhCVLSHmy7+nrpX4i3BctxIBgb5mz21Cu8JD9zd2ltJZl9z8cPyP+tAr0RGa77G0RBF/ixqJ8UcLoJTwc=\n"
|
| 6 |
+
}
|
| 7 |
+
},
|
| 8 |
+
"continuations_to_sign": {
|
| 9 |
+
"1.4": {
|
| 10 |
+
"application": { "name": "dk0", "version": "2.4.2+rev-313" },
|
| 11 |
+
"openbsd_signify": {
|
| 12 |
+
"public_key": "untrusted comment: NotHackwaly_Ocamlearlybird-1.4\nRWQZzxNUJsjQ/Jvo4twU6vt8wFACHOucOBipn+i2DWBI/UyQcG6fq+Sc\n"
|
| 13 |
+
}
|
| 14 |
+
},
|
| 15 |
+
"2.0": {
|
| 16 |
+
"application": { "name": "dk0", "version": "2.4.2+rev-313" },
|
| 17 |
+
"openbsd_signify": {
|
| 18 |
+
"public_key": "untrusted comment: NotHackwaly_Ocamlearlybird-2.0\nRWQh+ThJhASGk+QRWB7rnF33W5z90ZfFjxkRRgLjqLhW4wg0FSMowMjI\n"
|
| 19 |
+
}
|
| 20 |
+
}
|
| 21 |
+
}
|
| 22 |
+
},
|
| 23 |
+
"id": "NotHackwaly_Ocamlearlybird@1.3.0",
|
| 24 |
+
"license": { "spdx": "MIT" },
|
| 25 |
+
"producer": {
|
| 26 |
+
"application": { "name": "dk0", "version": "2.4.2+rev-313" },
|
| 27 |
+
"github_slsa_v1_l2": { "repository": "jonahbeckford/ocamlearlybird" },
|
| 28 |
+
"openbsd_signify": {
|
| 29 |
+
"public_key": "untrusted comment: NotHackwaly_Ocamlearlybird-1.3\nRWS5iRatcyGHX6NTdJ3Zrv9lhpWPrw9khAMAsHbWZa3vwkaCzDJRXrXR\n"
|
| 30 |
+
}
|
| 31 |
+
}
|
| 32 |
+
}
|
|
@@ -0,0 +1,758 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"bundles": [
|
| 3 |
+
{
|
| 4 |
+
"assets": [
|
| 5 |
+
{
|
| 6 |
+
"checksum": {
|
| 7 |
+
"blake2b256": "11b7f4ba5b78db5cf7774c592afad9038e479ae4a82b63f764a3da34bca0d431"
|
| 8 |
+
},
|
| 9 |
+
"origin": "CommonsBase_FileMagic",
|
| 10 |
+
"path": "CommonsBase_FileMagic-any-Darwin_arm64.distmeta.cts.1.tracestore",
|
| 11 |
+
"size": 45003
|
| 12 |
+
},
|
| 13 |
+
{
|
| 14 |
+
"checksum": {
|
| 15 |
+
"blake2b256": "1d741a1754855e64094523d0eee474882f87bf7e28b3f756200bdda13b1f37e8"
|
| 16 |
+
},
|
| 17 |
+
"indexes": [
|
| 18 |
+
{
|
| 19 |
+
"type": "zip",
|
| 20 |
+
"zip": {
|
| 21 |
+
"local_offset": 0,
|
| 22 |
+
"central_offset": 8188,
|
| 23 |
+
"central_size": 534,
|
| 24 |
+
"checksum": {
|
| 25 |
+
"blake2b256": "09cc3798c1b74c7f80e031bb3b8ba96c956617f51734f1018e1401a4b0d6d13c"
|
| 26 |
+
}
|
| 27 |
+
}
|
| 28 |
+
}
|
| 29 |
+
],
|
| 30 |
+
"origin": "CommonsBase_FileMagic",
|
| 31 |
+
"path": "CommonsBase_FileMagic-any-Darwin_arm64.distmeta.manifest.zip",
|
| 32 |
+
"size": 8722
|
| 33 |
+
},
|
| 34 |
+
{
|
| 35 |
+
"checksum": {
|
| 36 |
+
"blake2b256": "e76756c37d7412984bb57c33e34fccec1b0f0f507c30d5ea28ed1bba6b0423eb"
|
| 37 |
+
},
|
| 38 |
+
"indexes": [
|
| 39 |
+
{
|
| 40 |
+
"type": "zip",
|
| 41 |
+
"zip": {
|
| 42 |
+
"local_offset": 0,
|
| 43 |
+
"central_offset": 21430,
|
| 44 |
+
"central_size": 308,
|
| 45 |
+
"checksum": {
|
| 46 |
+
"blake2b256": "413c99d1218f2ba72ab7a17d2e209984d2483888864a8b816552c387ddef4b79"
|
| 47 |
+
}
|
| 48 |
+
}
|
| 49 |
+
}
|
| 50 |
+
],
|
| 51 |
+
"origin": "CommonsBase_FileMagic",
|
| 52 |
+
"path": "CommonsBase_FileMagic-any-Darwin_arm64.distmeta.valuestore.zip",
|
| 53 |
+
"size": 21738
|
| 54 |
+
},
|
| 55 |
+
{
|
| 56 |
+
"checksum": {
|
| 57 |
+
"blake2b256": "c1f188b19423ef8599a16a9b12eeef6e6f1f47e2d1e0fe0e8e1df95749dcce55"
|
| 58 |
+
},
|
| 59 |
+
"origin": "CommonsBase_FileMagic",
|
| 60 |
+
"path": "CommonsBase_FileMagic-any-Darwin_arm64.package.cts.1.tracestore",
|
| 61 |
+
"size": 33296
|
| 62 |
+
},
|
| 63 |
+
{
|
| 64 |
+
"checksum": {
|
| 65 |
+
"blake2b256": "4898af5e8a23d57474d502ca8dd412a9387c79249928fd78fa08603a5bfa912a"
|
| 66 |
+
},
|
| 67 |
+
"indexes": [
|
| 68 |
+
{
|
| 69 |
+
"type": "zip",
|
| 70 |
+
"zip": {
|
| 71 |
+
"local_offset": 0,
|
| 72 |
+
"central_offset": 223350450,
|
| 73 |
+
"central_size": 6083,
|
| 74 |
+
"checksum": {
|
| 75 |
+
"blake2b256": "872ea0b86e07d1dfdfc6c59de0ba3b8d3895c9fabb47eb39d89c0c7ebec26eda"
|
| 76 |
+
}
|
| 77 |
+
}
|
| 78 |
+
}
|
| 79 |
+
],
|
| 80 |
+
"origin": "CommonsBase_FileMagic",
|
| 81 |
+
"path": "CommonsBase_FileMagic-any-Darwin_arm64.package.valuestore.zip",
|
| 82 |
+
"size": 223356533
|
| 83 |
+
},
|
| 84 |
+
{
|
| 85 |
+
"checksum": {
|
| 86 |
+
"blake2b256": "11b7f4ba5b78db5cf7774c592afad9038e479ae4a82b63f764a3da34bca0d431"
|
| 87 |
+
},
|
| 88 |
+
"origin": "CommonsBase_FileMagic",
|
| 89 |
+
"path": "CommonsBase_FileMagic-any-Darwin_x86_64.distmeta.cts.1.tracestore",
|
| 90 |
+
"size": 45003
|
| 91 |
+
},
|
| 92 |
+
{
|
| 93 |
+
"checksum": {
|
| 94 |
+
"blake2b256": "1d741a1754855e64094523d0eee474882f87bf7e28b3f756200bdda13b1f37e8"
|
| 95 |
+
},
|
| 96 |
+
"indexes": [
|
| 97 |
+
{
|
| 98 |
+
"type": "zip",
|
| 99 |
+
"zip": {
|
| 100 |
+
"local_offset": 0,
|
| 101 |
+
"central_offset": 8188,
|
| 102 |
+
"central_size": 534,
|
| 103 |
+
"checksum": {
|
| 104 |
+
"blake2b256": "09cc3798c1b74c7f80e031bb3b8ba96c956617f51734f1018e1401a4b0d6d13c"
|
| 105 |
+
}
|
| 106 |
+
}
|
| 107 |
+
}
|
| 108 |
+
],
|
| 109 |
+
"origin": "CommonsBase_FileMagic",
|
| 110 |
+
"path": "CommonsBase_FileMagic-any-Darwin_x86_64.distmeta.manifest.zip",
|
| 111 |
+
"size": 8722
|
| 112 |
+
},
|
| 113 |
+
{
|
| 114 |
+
"checksum": {
|
| 115 |
+
"blake2b256": "e76756c37d7412984bb57c33e34fccec1b0f0f507c30d5ea28ed1bba6b0423eb"
|
| 116 |
+
},
|
| 117 |
+
"indexes": [
|
| 118 |
+
{
|
| 119 |
+
"type": "zip",
|
| 120 |
+
"zip": {
|
| 121 |
+
"local_offset": 0,
|
| 122 |
+
"central_offset": 21430,
|
| 123 |
+
"central_size": 308,
|
| 124 |
+
"checksum": {
|
| 125 |
+
"blake2b256": "413c99d1218f2ba72ab7a17d2e209984d2483888864a8b816552c387ddef4b79"
|
| 126 |
+
}
|
| 127 |
+
}
|
| 128 |
+
}
|
| 129 |
+
],
|
| 130 |
+
"origin": "CommonsBase_FileMagic",
|
| 131 |
+
"path": "CommonsBase_FileMagic-any-Darwin_x86_64.distmeta.valuestore.zip",
|
| 132 |
+
"size": 21738
|
| 133 |
+
},
|
| 134 |
+
{
|
| 135 |
+
"checksum": {
|
| 136 |
+
"blake2b256": "87576788aded4add99f80ed47878e859a6b72a9bd3dd8e99caee7c85fc86e485"
|
| 137 |
+
},
|
| 138 |
+
"origin": "CommonsBase_FileMagic",
|
| 139 |
+
"path": "CommonsBase_FileMagic-any-Darwin_x86_64.package.cts.1.tracestore",
|
| 140 |
+
"size": 33301
|
| 141 |
+
},
|
| 142 |
+
{
|
| 143 |
+
"checksum": {
|
| 144 |
+
"blake2b256": "da853b849aab083011339c8b181202b886abc82b2dc98678e5c7ad860262b9cd"
|
| 145 |
+
},
|
| 146 |
+
"indexes": [
|
| 147 |
+
{
|
| 148 |
+
"type": "zip",
|
| 149 |
+
"zip": {
|
| 150 |
+
"local_offset": 0,
|
| 151 |
+
"central_offset": 223333412,
|
| 152 |
+
"central_size": 6083,
|
| 153 |
+
"checksum": {
|
| 154 |
+
"blake2b256": "12a85f9a8408346aeaa1c576d66bc43e6bd4d11253b9a2a0f0e7dd12dbc4c3f7"
|
| 155 |
+
}
|
| 156 |
+
}
|
| 157 |
+
}
|
| 158 |
+
],
|
| 159 |
+
"origin": "CommonsBase_FileMagic",
|
| 160 |
+
"path": "CommonsBase_FileMagic-any-Darwin_x86_64.package.valuestore.zip",
|
| 161 |
+
"size": 223339495
|
| 162 |
+
},
|
| 163 |
+
{
|
| 164 |
+
"checksum": {
|
| 165 |
+
"blake2b256": "11b7f4ba5b78db5cf7774c592afad9038e479ae4a82b63f764a3da34bca0d431"
|
| 166 |
+
},
|
| 167 |
+
"origin": "CommonsBase_FileMagic",
|
| 168 |
+
"path": "CommonsBase_FileMagic-any-Linux_x86.distmeta.cts.1.tracestore",
|
| 169 |
+
"size": 45003
|
| 170 |
+
},
|
| 171 |
+
{
|
| 172 |
+
"checksum": {
|
| 173 |
+
"blake2b256": "1d741a1754855e64094523d0eee474882f87bf7e28b3f756200bdda13b1f37e8"
|
| 174 |
+
},
|
| 175 |
+
"indexes": [
|
| 176 |
+
{
|
| 177 |
+
"type": "zip",
|
| 178 |
+
"zip": {
|
| 179 |
+
"local_offset": 0,
|
| 180 |
+
"central_offset": 8188,
|
| 181 |
+
"central_size": 534,
|
| 182 |
+
"checksum": {
|
| 183 |
+
"blake2b256": "09cc3798c1b74c7f80e031bb3b8ba96c956617f51734f1018e1401a4b0d6d13c"
|
| 184 |
+
}
|
| 185 |
+
}
|
| 186 |
+
}
|
| 187 |
+
],
|
| 188 |
+
"origin": "CommonsBase_FileMagic",
|
| 189 |
+
"path": "CommonsBase_FileMagic-any-Linux_x86.distmeta.manifest.zip",
|
| 190 |
+
"size": 8722
|
| 191 |
+
},
|
| 192 |
+
{
|
| 193 |
+
"checksum": {
|
| 194 |
+
"blake2b256": "e76756c37d7412984bb57c33e34fccec1b0f0f507c30d5ea28ed1bba6b0423eb"
|
| 195 |
+
},
|
| 196 |
+
"indexes": [
|
| 197 |
+
{
|
| 198 |
+
"type": "zip",
|
| 199 |
+
"zip": {
|
| 200 |
+
"local_offset": 0,
|
| 201 |
+
"central_offset": 21430,
|
| 202 |
+
"central_size": 308,
|
| 203 |
+
"checksum": {
|
| 204 |
+
"blake2b256": "413c99d1218f2ba72ab7a17d2e209984d2483888864a8b816552c387ddef4b79"
|
| 205 |
+
}
|
| 206 |
+
}
|
| 207 |
+
}
|
| 208 |
+
],
|
| 209 |
+
"origin": "CommonsBase_FileMagic",
|
| 210 |
+
"path": "CommonsBase_FileMagic-any-Linux_x86.distmeta.valuestore.zip",
|
| 211 |
+
"size": 21738
|
| 212 |
+
},
|
| 213 |
+
{
|
| 214 |
+
"checksum": {
|
| 215 |
+
"blake2b256": "089112a39293317dd04c16eba5d502b6e48cffeab45fadadae9a56ba0bf65d5e"
|
| 216 |
+
},
|
| 217 |
+
"origin": "CommonsBase_FileMagic",
|
| 218 |
+
"path": "CommonsBase_FileMagic-any-Linux_x86.package.cts.1.tracestore",
|
| 219 |
+
"size": 33281
|
| 220 |
+
},
|
| 221 |
+
{
|
| 222 |
+
"checksum": {
|
| 223 |
+
"blake2b256": "3633193c486ae19e97ebfd7f3c2d2c87deb96445d406f36df27571396d3c8673"
|
| 224 |
+
},
|
| 225 |
+
"indexes": [
|
| 226 |
+
{
|
| 227 |
+
"type": "zip",
|
| 228 |
+
"zip": {
|
| 229 |
+
"local_offset": 0,
|
| 230 |
+
"central_offset": 224250332,
|
| 231 |
+
"central_size": 6083,
|
| 232 |
+
"checksum": {
|
| 233 |
+
"blake2b256": "bb21d6caa9fff6759976d445ced831c2931734ead318d65f321b8fb51b0c6b61"
|
| 234 |
+
}
|
| 235 |
+
}
|
| 236 |
+
}
|
| 237 |
+
],
|
| 238 |
+
"origin": "CommonsBase_FileMagic",
|
| 239 |
+
"path": "CommonsBase_FileMagic-any-Linux_x86.package.valuestore.zip",
|
| 240 |
+
"size": 224256415
|
| 241 |
+
},
|
| 242 |
+
{
|
| 243 |
+
"checksum": {
|
| 244 |
+
"blake2b256": "11b7f4ba5b78db5cf7774c592afad9038e479ae4a82b63f764a3da34bca0d431"
|
| 245 |
+
},
|
| 246 |
+
"origin": "CommonsBase_FileMagic",
|
| 247 |
+
"path": "CommonsBase_FileMagic-any-Linux_x86_64.distmeta.cts.1.tracestore",
|
| 248 |
+
"size": 45003
|
| 249 |
+
},
|
| 250 |
+
{
|
| 251 |
+
"checksum": {
|
| 252 |
+
"blake2b256": "1d741a1754855e64094523d0eee474882f87bf7e28b3f756200bdda13b1f37e8"
|
| 253 |
+
},
|
| 254 |
+
"indexes": [
|
| 255 |
+
{
|
| 256 |
+
"type": "zip",
|
| 257 |
+
"zip": {
|
| 258 |
+
"local_offset": 0,
|
| 259 |
+
"central_offset": 8188,
|
| 260 |
+
"central_size": 534,
|
| 261 |
+
"checksum": {
|
| 262 |
+
"blake2b256": "09cc3798c1b74c7f80e031bb3b8ba96c956617f51734f1018e1401a4b0d6d13c"
|
| 263 |
+
}
|
| 264 |
+
}
|
| 265 |
+
}
|
| 266 |
+
],
|
| 267 |
+
"origin": "CommonsBase_FileMagic",
|
| 268 |
+
"path": "CommonsBase_FileMagic-any-Linux_x86_64.distmeta.manifest.zip",
|
| 269 |
+
"size": 8722
|
| 270 |
+
},
|
| 271 |
+
{
|
| 272 |
+
"checksum": {
|
| 273 |
+
"blake2b256": "e76756c37d7412984bb57c33e34fccec1b0f0f507c30d5ea28ed1bba6b0423eb"
|
| 274 |
+
},
|
| 275 |
+
"indexes": [
|
| 276 |
+
{
|
| 277 |
+
"type": "zip",
|
| 278 |
+
"zip": {
|
| 279 |
+
"local_offset": 0,
|
| 280 |
+
"central_offset": 21430,
|
| 281 |
+
"central_size": 308,
|
| 282 |
+
"checksum": {
|
| 283 |
+
"blake2b256": "413c99d1218f2ba72ab7a17d2e209984d2483888864a8b816552c387ddef4b79"
|
| 284 |
+
}
|
| 285 |
+
}
|
| 286 |
+
}
|
| 287 |
+
],
|
| 288 |
+
"origin": "CommonsBase_FileMagic",
|
| 289 |
+
"path": "CommonsBase_FileMagic-any-Linux_x86_64.distmeta.valuestore.zip",
|
| 290 |
+
"size": 21738
|
| 291 |
+
},
|
| 292 |
+
{
|
| 293 |
+
"checksum": {
|
| 294 |
+
"blake2b256": "135db6e03985af66900adedf0989bf7988b2c172f0a57c4dc5dc771160666db5"
|
| 295 |
+
},
|
| 296 |
+
"origin": "CommonsBase_FileMagic",
|
| 297 |
+
"path": "CommonsBase_FileMagic-any-Linux_x86_64.package.cts.1.tracestore",
|
| 298 |
+
"size": 33296
|
| 299 |
+
},
|
| 300 |
+
{
|
| 301 |
+
"checksum": {
|
| 302 |
+
"blake2b256": "ccd9014748214b63fcf6b27d8ec59e36004e1c88756c685848ebad82a28ce501"
|
| 303 |
+
},
|
| 304 |
+
"indexes": [
|
| 305 |
+
{
|
| 306 |
+
"type": "zip",
|
| 307 |
+
"zip": {
|
| 308 |
+
"local_offset": 0,
|
| 309 |
+
"central_offset": 224328554,
|
| 310 |
+
"central_size": 6083,
|
| 311 |
+
"checksum": {
|
| 312 |
+
"blake2b256": "f3a95fd74ef617143a7edc09add58b9040ea2a48c12e84a8e618ad05b02ae8e3"
|
| 313 |
+
}
|
| 314 |
+
}
|
| 315 |
+
}
|
| 316 |
+
],
|
| 317 |
+
"origin": "CommonsBase_FileMagic",
|
| 318 |
+
"path": "CommonsBase_FileMagic-any-Linux_x86_64.package.valuestore.zip",
|
| 319 |
+
"size": 224334637
|
| 320 |
+
},
|
| 321 |
+
{
|
| 322 |
+
"checksum": {
|
| 323 |
+
"blake2b256": "11b7f4ba5b78db5cf7774c592afad9038e479ae4a82b63f764a3da34bca0d431"
|
| 324 |
+
},
|
| 325 |
+
"origin": "CommonsBase_FileMagic",
|
| 326 |
+
"path": "CommonsBase_FileMagic-any-Windows_arm64.distmeta.cts.1.tracestore",
|
| 327 |
+
"size": 45003
|
| 328 |
+
},
|
| 329 |
+
{
|
| 330 |
+
"checksum": {
|
| 331 |
+
"blake2b256": "1d741a1754855e64094523d0eee474882f87bf7e28b3f756200bdda13b1f37e8"
|
| 332 |
+
},
|
| 333 |
+
"indexes": [
|
| 334 |
+
{
|
| 335 |
+
"type": "zip",
|
| 336 |
+
"zip": {
|
| 337 |
+
"local_offset": 0,
|
| 338 |
+
"central_offset": 8188,
|
| 339 |
+
"central_size": 534,
|
| 340 |
+
"checksum": {
|
| 341 |
+
"blake2b256": "09cc3798c1b74c7f80e031bb3b8ba96c956617f51734f1018e1401a4b0d6d13c"
|
| 342 |
+
}
|
| 343 |
+
}
|
| 344 |
+
}
|
| 345 |
+
],
|
| 346 |
+
"origin": "CommonsBase_FileMagic",
|
| 347 |
+
"path": "CommonsBase_FileMagic-any-Windows_arm64.distmeta.manifest.zip",
|
| 348 |
+
"size": 8722
|
| 349 |
+
},
|
| 350 |
+
{
|
| 351 |
+
"checksum": {
|
| 352 |
+
"blake2b256": "e76756c37d7412984bb57c33e34fccec1b0f0f507c30d5ea28ed1bba6b0423eb"
|
| 353 |
+
},
|
| 354 |
+
"indexes": [
|
| 355 |
+
{
|
| 356 |
+
"type": "zip",
|
| 357 |
+
"zip": {
|
| 358 |
+
"local_offset": 0,
|
| 359 |
+
"central_offset": 21430,
|
| 360 |
+
"central_size": 308,
|
| 361 |
+
"checksum": {
|
| 362 |
+
"blake2b256": "413c99d1218f2ba72ab7a17d2e209984d2483888864a8b816552c387ddef4b79"
|
| 363 |
+
}
|
| 364 |
+
}
|
| 365 |
+
}
|
| 366 |
+
],
|
| 367 |
+
"origin": "CommonsBase_FileMagic",
|
| 368 |
+
"path": "CommonsBase_FileMagic-any-Windows_arm64.distmeta.valuestore.zip",
|
| 369 |
+
"size": 21738
|
| 370 |
+
},
|
| 371 |
+
{
|
| 372 |
+
"checksum": {
|
| 373 |
+
"blake2b256": "0998fb1b74b684bf537641c3145b6466ddf40c87a7854fd44989814c558c0322"
|
| 374 |
+
},
|
| 375 |
+
"origin": "CommonsBase_FileMagic",
|
| 376 |
+
"path": "CommonsBase_FileMagic-any-Windows_arm64.package.cts.1.tracestore",
|
| 377 |
+
"size": 36035
|
| 378 |
+
},
|
| 379 |
+
{
|
| 380 |
+
"checksum": {
|
| 381 |
+
"blake2b256": "ef1112ab1f00f803200cbb792393a27460d2fd9c8ef9fd536db66c3e2460fd13"
|
| 382 |
+
},
|
| 383 |
+
"indexes": [
|
| 384 |
+
{
|
| 385 |
+
"type": "zip",
|
| 386 |
+
"zip": {
|
| 387 |
+
"local_offset": 0,
|
| 388 |
+
"central_offset": 224167713,
|
| 389 |
+
"central_size": 6083,
|
| 390 |
+
"checksum": {
|
| 391 |
+
"blake2b256": "baa5928380f611a3bdc910d35daf0d217375421e0abbb32311faacfd82c24f9d"
|
| 392 |
+
}
|
| 393 |
+
}
|
| 394 |
+
}
|
| 395 |
+
],
|
| 396 |
+
"origin": "CommonsBase_FileMagic",
|
| 397 |
+
"path": "CommonsBase_FileMagic-any-Windows_arm64.package.valuestore.zip",
|
| 398 |
+
"size": 224173796
|
| 399 |
+
},
|
| 400 |
+
{
|
| 401 |
+
"checksum": {
|
| 402 |
+
"blake2b256": "11b7f4ba5b78db5cf7774c592afad9038e479ae4a82b63f764a3da34bca0d431"
|
| 403 |
+
},
|
| 404 |
+
"origin": "CommonsBase_FileMagic",
|
| 405 |
+
"path": "CommonsBase_FileMagic-any-Windows_x86.distmeta.cts.1.tracestore",
|
| 406 |
+
"size": 45003
|
| 407 |
+
},
|
| 408 |
+
{
|
| 409 |
+
"checksum": {
|
| 410 |
+
"blake2b256": "1d741a1754855e64094523d0eee474882f87bf7e28b3f756200bdda13b1f37e8"
|
| 411 |
+
},
|
| 412 |
+
"indexes": [
|
| 413 |
+
{
|
| 414 |
+
"type": "zip",
|
| 415 |
+
"zip": {
|
| 416 |
+
"local_offset": 0,
|
| 417 |
+
"central_offset": 8188,
|
| 418 |
+
"central_size": 534,
|
| 419 |
+
"checksum": {
|
| 420 |
+
"blake2b256": "09cc3798c1b74c7f80e031bb3b8ba96c956617f51734f1018e1401a4b0d6d13c"
|
| 421 |
+
}
|
| 422 |
+
}
|
| 423 |
+
}
|
| 424 |
+
],
|
| 425 |
+
"origin": "CommonsBase_FileMagic",
|
| 426 |
+
"path": "CommonsBase_FileMagic-any-Windows_x86.distmeta.manifest.zip",
|
| 427 |
+
"size": 8722
|
| 428 |
+
},
|
| 429 |
+
{
|
| 430 |
+
"checksum": {
|
| 431 |
+
"blake2b256": "e76756c37d7412984bb57c33e34fccec1b0f0f507c30d5ea28ed1bba6b0423eb"
|
| 432 |
+
},
|
| 433 |
+
"indexes": [
|
| 434 |
+
{
|
| 435 |
+
"type": "zip",
|
| 436 |
+
"zip": {
|
| 437 |
+
"local_offset": 0,
|
| 438 |
+
"central_offset": 21430,
|
| 439 |
+
"central_size": 308,
|
| 440 |
+
"checksum": {
|
| 441 |
+
"blake2b256": "413c99d1218f2ba72ab7a17d2e209984d2483888864a8b816552c387ddef4b79"
|
| 442 |
+
}
|
| 443 |
+
}
|
| 444 |
+
}
|
| 445 |
+
],
|
| 446 |
+
"origin": "CommonsBase_FileMagic",
|
| 447 |
+
"path": "CommonsBase_FileMagic-any-Windows_x86.distmeta.valuestore.zip",
|
| 448 |
+
"size": 21738
|
| 449 |
+
},
|
| 450 |
+
{
|
| 451 |
+
"checksum": {
|
| 452 |
+
"blake2b256": "a9ce31fa818cd98447b2743eb8135ae400a64d408fb166aeecb2ad3dbd153670"
|
| 453 |
+
},
|
| 454 |
+
"origin": "CommonsBase_FileMagic",
|
| 455 |
+
"path": "CommonsBase_FileMagic-any-Windows_x86.package.cts.1.tracestore",
|
| 456 |
+
"size": 36025
|
| 457 |
+
},
|
| 458 |
+
{
|
| 459 |
+
"checksum": {
|
| 460 |
+
"blake2b256": "5a12e9b3476250ebe479a1102cc1b2c9dadcf48d03253e9b6f0a81f70195b4b7"
|
| 461 |
+
},
|
| 462 |
+
"indexes": [
|
| 463 |
+
{
|
| 464 |
+
"type": "zip",
|
| 465 |
+
"zip": {
|
| 466 |
+
"local_offset": 0,
|
| 467 |
+
"central_offset": 224284181,
|
| 468 |
+
"central_size": 6083,
|
| 469 |
+
"checksum": {
|
| 470 |
+
"blake2b256": "0d9bbaed78d10a9ea1734e6ba5d927d66f54cbcebd0761ce4b5c708b819a84ae"
|
| 471 |
+
}
|
| 472 |
+
}
|
| 473 |
+
}
|
| 474 |
+
],
|
| 475 |
+
"origin": "CommonsBase_FileMagic",
|
| 476 |
+
"path": "CommonsBase_FileMagic-any-Windows_x86.package.valuestore.zip",
|
| 477 |
+
"size": 224290264
|
| 478 |
+
},
|
| 479 |
+
{
|
| 480 |
+
"checksum": {
|
| 481 |
+
"blake2b256": "11b7f4ba5b78db5cf7774c592afad9038e479ae4a82b63f764a3da34bca0d431"
|
| 482 |
+
},
|
| 483 |
+
"origin": "CommonsBase_FileMagic",
|
| 484 |
+
"path": "CommonsBase_FileMagic-any-Windows_x86_64.distmeta.cts.1.tracestore",
|
| 485 |
+
"size": 45003
|
| 486 |
+
},
|
| 487 |
+
{
|
| 488 |
+
"checksum": {
|
| 489 |
+
"blake2b256": "1d741a1754855e64094523d0eee474882f87bf7e28b3f756200bdda13b1f37e8"
|
| 490 |
+
},
|
| 491 |
+
"indexes": [
|
| 492 |
+
{
|
| 493 |
+
"type": "zip",
|
| 494 |
+
"zip": {
|
| 495 |
+
"local_offset": 0,
|
| 496 |
+
"central_offset": 8188,
|
| 497 |
+
"central_size": 534,
|
| 498 |
+
"checksum": {
|
| 499 |
+
"blake2b256": "09cc3798c1b74c7f80e031bb3b8ba96c956617f51734f1018e1401a4b0d6d13c"
|
| 500 |
+
}
|
| 501 |
+
}
|
| 502 |
+
}
|
| 503 |
+
],
|
| 504 |
+
"origin": "CommonsBase_FileMagic",
|
| 505 |
+
"path": "CommonsBase_FileMagic-any-Windows_x86_64.distmeta.manifest.zip",
|
| 506 |
+
"size": 8722
|
| 507 |
+
},
|
| 508 |
+
{
|
| 509 |
+
"checksum": {
|
| 510 |
+
"blake2b256": "e76756c37d7412984bb57c33e34fccec1b0f0f507c30d5ea28ed1bba6b0423eb"
|
| 511 |
+
},
|
| 512 |
+
"indexes": [
|
| 513 |
+
{
|
| 514 |
+
"type": "zip",
|
| 515 |
+
"zip": {
|
| 516 |
+
"local_offset": 0,
|
| 517 |
+
"central_offset": 21430,
|
| 518 |
+
"central_size": 308,
|
| 519 |
+
"checksum": {
|
| 520 |
+
"blake2b256": "413c99d1218f2ba72ab7a17d2e209984d2483888864a8b816552c387ddef4b79"
|
| 521 |
+
}
|
| 522 |
+
}
|
| 523 |
+
}
|
| 524 |
+
],
|
| 525 |
+
"origin": "CommonsBase_FileMagic",
|
| 526 |
+
"path": "CommonsBase_FileMagic-any-Windows_x86_64.distmeta.valuestore.zip",
|
| 527 |
+
"size": 21738
|
| 528 |
+
},
|
| 529 |
+
{
|
| 530 |
+
"checksum": {
|
| 531 |
+
"blake2b256": "6eedba40a462cb05ad2299d2d8849061c0d270587d69016d209c69c39a34586d"
|
| 532 |
+
},
|
| 533 |
+
"origin": "CommonsBase_FileMagic",
|
| 534 |
+
"path": "CommonsBase_FileMagic-any-Windows_x86_64.package.cts.1.tracestore",
|
| 535 |
+
"size": 36044
|
| 536 |
+
},
|
| 537 |
+
{
|
| 538 |
+
"checksum": {
|
| 539 |
+
"blake2b256": "79c137c76ff0198c0321eed6e466fdbdf14de511f07d7873accca054259241d7"
|
| 540 |
+
},
|
| 541 |
+
"indexes": [
|
| 542 |
+
{
|
| 543 |
+
"type": "zip",
|
| 544 |
+
"zip": {
|
| 545 |
+
"local_offset": 0,
|
| 546 |
+
"central_offset": 224221921,
|
| 547 |
+
"central_size": 6083,
|
| 548 |
+
"checksum": {
|
| 549 |
+
"blake2b256": "4ac56e690c1efb5fd336b54b1a4a450984bc975b8588a9eb52f06c12db01531b"
|
| 550 |
+
}
|
| 551 |
+
}
|
| 552 |
+
}
|
| 553 |
+
],
|
| 554 |
+
"origin": "CommonsBase_FileMagic",
|
| 555 |
+
"path": "CommonsBase_FileMagic-any-Windows_x86_64.package.valuestore.zip",
|
| 556 |
+
"size": 224228004
|
| 557 |
+
}
|
| 558 |
+
],
|
| 559 |
+
"id": "CommonsBase_FileMagic.Distribution@0.1.20260920144347",
|
| 560 |
+
"listing": {
|
| 561 |
+
"origins": [
|
| 562 |
+
{
|
| 563 |
+
"name": "CommonsBase_FileMagic",
|
| 564 |
+
"mirrors": [
|
| 565 |
+
"https://github.com/dkpkg/CommonsBase_FileMagic/releases/download/0.1.20260920144347"
|
| 566 |
+
]
|
| 567 |
+
}
|
| 568 |
+
]
|
| 569 |
+
}
|
| 570 |
+
}
|
| 571 |
+
],
|
| 572 |
+
"distributions": [
|
| 573 |
+
{
|
| 574 |
+
"build": {
|
| 575 |
+
"attestation": {
|
| 576 |
+
"github_slsa_v1_l2": {
|
| 577 |
+
"docs": [
|
| 578 |
+
{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHnjCCBySgAwIBAgIUZ2Yy4wPJMCIjEfSn/dn4vIEnJxMwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwOTIwMTUwNjU5WhcNMjYwOTIwMTUxNjU5WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5Mk2Z028gHIj3GELZ2rrbEb2RJaTdcCxpKibGnLHm16nT0fnz+4gPzn+EdM+XdTcjBrBStOJ0LU4dVgwJntjhqOCBkMwggY/MA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUnLQ8nrV4xOwfgTMolDtoppGNEs0wHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wfgYDVR0RAQH/BHQwcoZwaHR0cHM6Ly9naXRodWIuY29tL2RrcGtnL0NvbW1vbnNCYXNlX0ZpbGVNYWdpYy8uZ2l0aHViL3dvcmtmbG93cy9kaXN0cmlidXRlLTAuMS55bWxAcmVmcy90YWdzLzAuMS4yMDI2MDkyMDE0NDM0NzA5BgorBgEEAYO/MAEBBCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMBIGCisGAQQBg78wAQIEBHB1c2gwNgYKKwYBBAGDvzABAwQoNWRkMmY3MzhmZTdjZWRhN2ZkOTgxMTc0MzE0ZWNiNzAzY2MwNWRiMDApBgorBgEEAYO/MAEEBBtDb21tb25zQmFzZV9GaWxlTWFnaWNAMC4xLngwKQYKKwYBBAGDvzABBQQbZGtwa2cvQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljMCoGCisGAQQBg78wAQYEHHJlZnMvdGFncy8wLjEuMjAyNjA5MjAxNDQzNDcwOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMIGABgorBgEEAYO/MAEJBHIMcGh0dHBzOi8vZ2l0aHViLmNvbS9ka3BrZy9Db21tb25zQmFzZV9GaWxlTWFnaWMvLmdpdGh1Yi93b3JrZmxvd3MvZGlzdHJpYnV0ZS0wLjEueW1sQHJlZnMvdGFncy8wLjEuMjAyNjA5MjAxNDQzNDcwOAYKKwYBBAGDvzABCgQqDCg1ZGQyZjczOGZlN2NlZGE3ZmQ5ODExNzQzMTRlY2I3MDNjYzA1ZGIwMB0GCisGAQQBg78wAQsEDwwNZ2l0aHViLWhvc3RlZDA+BgorBgEEAYO/MAEMBDAMLmh0dHBzOi8vZ2l0aHViLmNvbS9ka3BrZy9Db21tb25zQmFzZV9GaWxlTWFnaWMwOAYKKwYBBAGDvzABDQQqDCg1ZGQyZjczOGZlN2NlZGE3ZmQ5ODExNzQzMTRlY2I3MDNjYzA1ZGIwMCwGCisGAQQBg78wAQ4EHgwccmVmcy90YWdzLzAuMS4yMDI2MDkyMDE0NDM0NzAaBgorBgEEAYO/MAEPBAwMCjEyNDAxNTc2MzMwKAYKKwYBBAGDvzABEAQaDBhodHRwczovL2dpdGh1Yi5jb20vZGtwa2cwGQYKKwYBBAGDvzABEQQLDAkyNzg5MTM1MDAwgYAGCisGAQQBg78wARIEcgxwaHR0cHM6Ly9naXRodWIuY29tL2RrcGtnL0NvbW1vbnNCYXNlX0ZpbGVNYWdpYy8uZ2l0aHViL3dvcmtmbG93cy9kaXN0cmlidXRlLTAuMS55bWxAcmVmcy90YWdzLzAuMS4yMDI2MDkyMDE0NDM0NzA4BgorBgEEAYO/MAETBCoMKDVkZDJmNzM4ZmU3Y2VkYTdmZDk4MTE3NDMxNGVjYjcwM2NjMDVkYjAwFAYKKwYBBAGDvzABFAQGDARwdXNoMGIGCisGAQQBg78wARUEVAxSaHR0cHM6Ly9naXRodWIuY29tL2RrcGtnL0NvbW1vbnNCYXNlX0ZpbGVNYWdpYy9hY3Rpb25zL3J1bnMvMzU1MTgzODE3NzIvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzBRBgorBgEEAYO/MAEYBEMMQXJlcG86ZGtwa2cvQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljOnJlZjpyZWZzL3RhZ3MvMC4xLjIwMjYwOTIwMTQ0MzQ3MIGKBgorBgEEAdZ5AgQCBHwEegB4AHYA3T0wasbHETJjGR4cmWc3AqJKXrjePK3/h4pygC8p7o4AAAGgv1swLAAABAMARzBFAiEA+dx+pc3y7DkfXnDgto2LgDGstkA14y/YgqQzaTcrdLECIFyBfI3GhjdS/Mymg/iChzm8fCczuS5RN3zRhu/Em1vOMAoGCCqGSM49BAMDA2gAMGUCMQDCKCWSO3QBnelI6XgJpf59NcK/34RlqePmF4YvwR67g2Q33omVhwBveX6AsH+nm4oCMDXbFx98w9ihDPB+wpyP8x0IsF/ih2XAaY0Do8RP5LYTV2p8MeK4bc3QP60EQ2kHhA=="},"tlogEntries":[{"logIndex":"2900655837","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"dsse","version":"0.0.1"},"integratedTime":"1789916819","inclusionPromise":{"signedEntryTimestamp":"MEQCIE1R8l7txDrvRN9HKLvv2v0G6hV0W19MGmaDbZ/s/bgVAiBSytqv3Hh6bVxQrh0U2AsmmgZzkhZNviBlzWfJP2G9EA=="},"inclusionProof":{"logIndex":"2778751575","rootHash":"OdhVCCh90T6ybmCB/935K3lXwHxKRbI2O/4pAD7L3tA=","treeSize":"2778751595","hashes":["7AXSmxtkYoqbtkBuzlUbJ+QAiRfMQ/z4IRWNV+wm0no=","lN5vFWRg3n8+hzc9gtV5jl0tBgQsyZ5VLSSuoowL6Lk=","XA55vxJLEgBRmbrsaV/QZafnfO/w/E2VN6FSXYNzpSI=","KQKtwMeHyFNyC8t6HGi9r7KbunRyPC9UTcRQJXRsV8k=","e8/2ZtxKCt0zE2FWSm0wRkE9RAr5+k5It0j1TtlR6UQ=","MzuBQfcrm9abE1jHdvsOSLu/L444qgcrlk/Nxc7rx8c=","TtRXBUgUdd/ylhfxcNKgfH66dh5aBEZqCdSCQcRYOck=","3g032kFIWCO7qdmEnO18kCGmrNVjSui9KHEMdmev5fs=","2BhxRJZnp2SOARJoaZuG9YAGF4M8pYsgG/Y7YnQ0qSg=","4Pu1QTwCEian9FkpkRjHR6AvAT2OEr09QWPuCRcqA2E=","uoMJ++IgguD5VRdcuqQ23KlKD9ZqrcoC6hqQDy2rPFM=","tyO4Oj1UrXex15tzrEEO6sSnE8y8obZWghZ2XixBPtE=","rjDiNJHGnboMYYUH7OSezbKWj3wMXRTHGCLa/SaZ6O4=","mfWjSdNaEfNXxDww6AAOw/NoK9e6z1yKaZm5xvmMabs=","qxzHanAzz57SDdmJe0B7bJK72NTIBbwEMGBBKvDOROw=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n2778751595\nOdhVCCh90T6ybmCB/935K3lXwHxKRbI2O/4pAD7L3tA=\n\n— rekor.sigstore.dev wNI9ajBGAiEAry4wFBtBWLeVGCyWfgGmwdcrSJJCo17PPJ93SdMr59wCIQDGPOBQYg1JKkqTXgBXDTa4SuN9QMxrqGsZmefdAeCIJg==\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiMjliMDdmMjAzZTU0NjhkZTc3MzI2ZGIxMjQwZGJmOTY4OGM4NjI0MWVjNmZlODU4NGRjZWI1OGM2YTVjMzQzMSJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6IjQ1Yzk3NDIyOGIwYjZjMzBlYTI0NjJmNDYyMzJmMWFlMmQ1YjE5YjEwZDA4ZjcyY2I4YzBiNjc3MmU2NWY1MjMifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVVQ0lEQjAydFpUSUVWampEMkFnYmNGSTlrNklDSXEzV2l0dkJPUmR2c3I3S1RwQWlFQXdSZkFjY0dmdEtIKzJoTFhWams0bTMxb1MrczlMa0txU2VzQW45c01JUVE9IiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VodWFrTkRRbmxUWjBGM1NVSkJaMGxWV2pKWmVUUjNVRXBOUTBscVJXWlRiaTlrYmpSMlNVVnVTbmhOZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwWmQwOVVTWGROVkZWM1RtcFZOVmRvWTA1TmFsbDNUMVJKZDAxVVZYaE9hbFUxVjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVTFUV3N5V2pBeU9HZElTV296UjBWTVdqSnljbUpGWWpKU1NtRlVaR05EZUhCTGFXSUtSMjVNU0cweE5tNVVNR1p1ZWlzMFoxQjZiaXRGWkUwcldHUlVZMnBDY2tKVGRFOUtNRXhWTkdSV1ozZEtiblJxYUhGUFEwSnJUWGRuWjFrdlRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdSQ1owNVdTRkUwUlVablVWVnVURkU0Q201eVZqUjRUM2RtWjFSTmIyeEVkRzl3Y0VkT1JYTXdkMGgzV1VSV1VqQnFRa0puZDBadlFWVXpPVkJ3ZWpGWmEwVmFZalZ4VG1wd1MwWlhhWGhwTkZrS1drUTRkMlpuV1VSV1VqQlNRVkZJTDBKSVVYZGpiMXAzWVVoU01HTklUVFpNZVRsdVlWaFNiMlJYU1hWWk1qbDBUREpTY21OSGRHNU1NRTUyWWxjeGRncGliazVEV1ZoT2JGZ3dXbkJpUjFaT1dWZGtjRmw1T0hWYU1td3dZVWhXYVV3elpIWmpiWFJ0WWtjNU0yTjVPV3RoV0U0d1kyMXNhV1JZVW14TVZFRjFDazFUTlRWaVYzaEJZMjFXYldONU9UQlpWMlI2VEhwQmRVMVROSGxOUkVreVRVUnJlVTFFUlRCT1JFMHdUbnBCTlVKbmIzSkNaMFZGUVZsUEwwMUJSVUlLUWtOMGIyUklVbmRqZW05MlRETlNkbUV5Vm5WTWJVWnFaRWRzZG1KdVRYVmFNbXd3WVVoV2FXUllUbXhqYlU1MlltNVNiR0p1VVhWWk1qbDBUVUpKUndwRGFYTkhRVkZSUW1jM09IZEJVVWxGUWtoQ01XTXlaM2RPWjFsTFMzZFpRa0pCUjBSMmVrRkNRWGRSYjA1WFVtdE5iVmt6VFhwb2JWcFVaR3BhVjFKb0NrNHlXbXRQVkdkNFRWUmpNRTE2UlRCYVYwNXBUbnBCZWxreVRYZE9WMUpwVFVSQmNFSm5iM0pDWjBWRlFWbFBMMDFCUlVWQ1FuUkVZakl4ZEdJeU5Yb0tVVzFHZWxwV09VZGhWM2hzVkZkR2JtRlhUa0ZOUXpSNFRHNW5kMHRSV1V0TGQxbENRa0ZIUkhaNlFVSkNVVkZpV2tkMGQyRXlZM1pSTWpsMFlsYzVkUXBqTUVwb1l6SldabEp0YkhOYVZURm9XakpzYWsxRGIwZERhWE5IUVZGUlFtYzNPSGRCVVZsRlNFaEtiRnB1VFhaa1IwWnVZM2s0ZDB4cVJYVk5ha0Y1Q2s1cVFUVk5ha0Y0VGtSUmVrNUVZM2RQZDFsTFMzZFpRa0pCUjBSMmVrRkNRMEZSZEVSRGRHOWtTRkozWTNwdmRrd3pVblpoTWxaMVRHMUdhbVJIYkhZS1ltNU5kVm95YkRCaFNGWnBaRmhPYkdOdFRuWmlibEpzWW01UmRWa3lPWFJOU1VkQlFtZHZja0puUlVWQldVOHZUVUZGU2tKSVNVMWpSMmd3WkVoQ2VncFBhVGgyV2pKc01HRklWbWxNYlU1MllsTTVhMkV6UW5KYWVUbEVZakl4ZEdJeU5YcFJiVVo2V2xZNVIyRlhlR3hVVjBadVlWZE5ka3h0WkhCa1IyZ3hDbGxwT1ROaU0wcHlXbTE0ZG1RelRYWmFSMng2WkVoS2NGbHVWakJhVXpCM1RHcEZkV1ZYTVhOUlNFcHNXbTVOZG1SSFJtNWplVGgzVEdwRmRVMXFRWGtLVG1wQk5VMXFRWGhPUkZGNlRrUmpkMDlCV1V0TGQxbENRa0ZIUkhaNlFVSkRaMUZ4UkVObk1WcEhVWGxhYW1ONlQwZGFiRTR5VG14YVIwVXpXbTFSTlFwUFJFVjRUbnBSZWsxVVVteFpNa2t6VFVST2FsbDZRVEZhUjBsM1RVSXdSME5wYzBkQlVWRkNaemM0ZDBGUmMwVkVkM2RPV2pKc01HRklWbWxNVjJoMkNtTXpVbXhhUkVFclFtZHZja0puUlVWQldVOHZUVUZGVFVKRVFVMU1iV2d3WkVoQ2VrOXBPSFphTW13d1lVaFdhVXh0VG5aaVV6bHJZVE5DY2xwNU9VUUtZakl4ZEdJeU5YcFJiVVo2V2xZNVIyRlhlR3hVVjBadVlWZE5kMDlCV1V0TGQxbENRa0ZIUkhaNlFVSkVVVkZ4UkVObk1WcEhVWGxhYW1ONlQwZGFiQXBPTWs1c1drZEZNMXB0VVRWUFJFVjRUbnBSZWsxVVVteFpNa2t6VFVST2FsbDZRVEZhUjBsM1RVTjNSME5wYzBkQlVWRkNaemM0ZDBGUk5FVklaM2RqQ21OdFZtMWplVGt3V1Zka2VreDZRWFZOVXpSNVRVUkpNazFFYTNsTlJFVXdUa1JOTUU1NlFXRkNaMjl5UW1kRlJVRlpUeTlOUVVWUVFrRjNUVU5xUlhrS1RrUkJlRTVVWXpKTmVrMTNTMEZaUzB0M1dVSkNRVWRFZG5wQlFrVkJVV0ZFUW1odlpFaFNkMk42YjNaTU1tUndaRWRvTVZscE5XcGlNakIyV2tkMGR3cGhNbU4zUjFGWlMwdDNXVUpDUVVkRWRucEJRa1ZSVVV4RVFXdDVUbnBuTlUxVVRURk5SRUYzWjFsQlIwTnBjMGRCVVZGQ1p6YzRkMEZTU1VWalozaDNDbUZJVWpCalNFMDJUSGs1Ym1GWVVtOWtWMGwxV1RJNWRFd3lVbkpqUjNSdVREQk9kbUpYTVhaaWJrNURXVmhPYkZnd1duQmlSMVpPV1Zka2NGbDVPSFVLV2pKc01HRklWbWxNTTJSMlkyMTBiV0pIT1ROamVUbHJZVmhPTUdOdGJHbGtXRkpzVEZSQmRVMVROVFZpVjNoQlkyMVdiV041T1RCWlYyUjZUSHBCZFFwTlV6UjVUVVJKTWsxRWEzbE5SRVV3VGtSTk1FNTZRVFJDWjI5eVFtZEZSVUZaVHk5TlFVVlVRa052VFV0RVZtdGFSRXB0VG5wTk5GcHRWVE5aTWxackNsbFVaRzFhUkdzMFRWUkZNMDVFVFhoT1IxWnFXV3BqZDAweVRtcE5SRlpyV1dwQmQwWkJXVXRMZDFsQ1FrRkhSSFo2UVVKR1FWRkhSRUZTZDJSWVRtOEtUVWRKUjBOcGMwZEJVVkZDWnpjNGQwRlNWVVZXUVhoVFlVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKU2NtTkhkRzVNTUU1MllsY3hkZ3BpYms1RFdWaE9iRmd3V25CaVIxWk9XVmRrY0ZsNU9XaFpNMUp3WWpJMWVrd3pTakZpYmsxMlRYcFZNVTFVWjNwUFJFVXpUbnBKZGxsWVVqQmFWekYzQ21SSVRYWk5WRUZYUW1kdmNrSm5SVVZCV1U4dlRVRkZWMEpCWjAxQ2JrSXhXVzE0Y0ZsNlFsSkNaMjl5UW1kRlJVRlpUeTlOUVVWWlFrVk5UVkZZU213S1kwYzRObHBIZEhkaE1tTjJVVEk1ZEdKWE9YVmpNRXBvWXpKV1psSnRiSE5hVlRGb1dqSnNhazl1U214YWFuQjVXbGRhZWt3elVtaGFNMDEyVFVNMGVBcE1ha2wzVFdwWmQwOVVTWGROVkZFd1RYcFJNMDFKUjB0Q1oyOXlRbWRGUlVGa1dqVkJaMUZEUWtoM1JXVm5RalJCU0ZsQk0xUXdkMkZ6WWtoRlZFcHFDa2RTTkdOdFYyTXpRWEZLUzFoeWFtVlFTek12YURSd2VXZERPSEEzYnpSQlFVRkhaM1l4YzNkTVFVRkJRa0ZOUVZKNlFrWkJhVVZCSzJSNEszQmpNM2tLTjBSclpsaHVSR2QwYnpKTVowUkhjM1JyUVRFMGVTOVpaM0ZSZW1GVVkzSmtURVZEU1VaNVFtWkpNMGRvYW1SVEwwMTViV2N2YVVOb2VtMDRaa05qZWdwMVV6VlNUak42VW1oMUwwVnRNWFpQVFVGdlIwTkRjVWRUVFRRNVFrRk5SRUV5WjBGTlIxVkRUVkZFUTB0RFYxTlBNMUZDYm1Wc1NUWllaMHB3WmpVNUNrNWpTeTh6TkZKc2NXVlFiVVkwV1haM1VqWTNaekpSTXpOdmJWWm9kMEoyWlZnMlFYTklLMjV0Tkc5RFRVUllZa1o0T1RoM09XbG9SRkJDSzNkd2VWQUtPSGd3U1hOR0wybG9NbGhCWVZrd1JHODRVbEExVEZsVVZqSndPRTFsU3pSaVl6TlJVRFl3UlZFeWEwaG9RVDA5Q2kwdExTMHRSVTVFSUVORlVsUkpSa2xEUVZSRkxTMHRMUzBLIn1dfX0="}],"timestampVerificationData":{}},"dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjEiLCJzdWJqZWN0IjpbeyJuYW1lIjoiQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljLWFueS1EYXJ3aW5fYXJtNjQuZGlzdG1ldGEuY3RzLjEudHJhY2VzdG9yZSIsImRpZ2VzdCI6eyJzaGEyNTYiOiI2ODQyZjQ1ZTZjYzEyYmZhNmE4YTNjZDNmMjVmZDlmNGE5YTFkMmIwZmE3MTk0Y2Y1OWQ5MjYwNzJiYzIxMjc5In19LHsibmFtZSI6IkNvbW1vbnNCYXNlX0ZpbGVNYWdpYy1hbnktRGFyd2luX2FybTY0LmRpc3RtZXRhLm1hbmlmZXN0LnppcCIsImRpZ2VzdCI6eyJzaGEyNTYiOiI2ODdiYjZkZDBiZjQwOGU3OGI1Y2Q3ZjU5NmRmODVjZDQwYzM4Yzg0MjIwZDJiMmRmYWU1ZTc4MjAwMDA3MDg4In19LHsibmFtZSI6IkNvbW1vbnNCYXNlX0ZpbGVNYWdpYy1hbnktRGFyd2luX2FybTY0LmRpc3RtZXRhLnZhbHVlc3RvcmUuaW5kZXgiLCJkaWdlc3QiOnsic2hhMjU2IjoiN2YxODQzNDI0YzA1ZjFmZWMzZTUxMGViNTVmYzk4MWU4NjAyNGVhMmZmMTM1Y2Q0ODUwNWFmYWY0ZTQ0MzlhNiJ9fSx7Im5hbWUiOiJDb21tb25zQmFzZV9GaWxlTWFnaWMtYW55LURhcndpbl9hcm02NC5kaXN0bWV0YS52YWx1ZXN0b3JlLnppcCIsImRpZ2VzdCI6eyJzaGEyNTYiOiIyZWNlYjI5M2RmOTUzYzBiMDRjOWI0NDljNTFiNGRiNmU2ZTBmN2NiMmU3NzJhMzA0MzhmY2JmMmViYWRmOGFmIn19LHsibmFtZSI6IkNvbW1vbnNCYXNlX0ZpbGVNYWdpYy1hbnktRGFyd2luX2FybTY0LnBhY2thZ2UuY3RzLjEudHJhY2VzdG9yZSIsImRpZ2VzdCI6eyJzaGEyNTYiOiI4NGE2Yzc1MDBlZTNiMmY1ODFlNGI1OTBhZDQ1N2Y1ZDQ0ODcyZDA5ZGFjNTU4ZGJhMTYwMjQ1NzhmNWU5MGZiIn19LHsibmFtZSI6IkNvbW1vbnNCYXNlX0ZpbGVNYWdpYy1hbnktRGFyd2luX2FybTY0LnBhY2thZ2UudmFsdWVzdG9yZS5pbmRleCIsImRpZ2VzdCI6eyJzaGEyNTYiOiI0YzA4MDZiZGQ4MGZmOGE1MDAxNjM2MzllYTg2YzcxYmM0NTNkNzQ3MjRkYjk4OTI3ZjIxMzA1MDA2OTNlZjIxIn19LHsibmFtZSI6IkNvbW1vbnNCYXNlX0ZpbGVNYWdpYy1hbnktRGFyd2luX2FybTY0LnBhY2thZ2UudmFsdWVzdG9yZS56aXAiLCJkaWdlc3QiOnsic2hhMjU2IjoiZTg0MTI2NjI5Njc4YmNiZGFkMWVjYmE0MDA4NjJiOGRkNjA5N2JhY2YxY2Y2M2NhNTNmMTA5N2QwMjdmZGFiOCJ9fSx7Im5hbWUiOiJDb21tb25zQmFzZV9GaWxlTWFnaWMtYW55LURhcndpbl9hcm02NC52YWx1ZXMuanNvbiIsImRpZ2VzdCI6eyJzaGEyNTYiOiI0ZDc4ZWViNzAyNzNiMmYwODIwNWI2MjRmNDY0Mjk4MTM3ZTliYWU5OWIwMDFjMzc5YzNhOGYxZmJkZTJhYTRjIn19LHsibmFtZSI6IkNvbW1vbnNCYXNlX0ZpbGVNYWdpYy1hbnktRGFyd2luX3g4Nl82NC5kaXN0bWV0YS5jdHMuMS50cmFjZXN0b3JlIiwiZGlnZXN0Ijp7InNoYTI1NiI6IjY4NDJmNDVlNmNjMTJiZmE2YThhM2NkM2YyNWZkOWY0YTlhMWQyYjBmYTcxOTRjZjU5ZDkyNjA3MmJjMjEyNzkifX0seyJuYW1lIjoiQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljLWFueS1EYXJ3aW5feDg2XzY0LmRpc3RtZXRhLm1hbmlmZXN0LnppcCIsImRpZ2VzdCI6eyJzaGEyNTYiOiI2ODdiYjZkZDBiZjQwOGU3OGI1Y2Q3ZjU5NmRmODVjZDQwYzM4Yzg0MjIwZDJiMmRmYWU1ZTc4MjAwMDA3MDg4In19LHsibmFtZSI6IkNvbW1vbnNCYXNlX0ZpbGVNYWdpYy1hbnktRGFyd2luX3g4Nl82NC5kaXN0bWV0YS52YWx1ZXN0b3JlLmluZGV4IiwiZGlnZXN0Ijp7InNoYTI1NiI6IjdmMTg0MzQyNGMwNWYxZmVjM2U1MTBlYjU1ZmM5ODFlODYwMjRlYTJmZjEzNWNkNDg1MDVhZmFmNGU0NDM5YTYifX0seyJuYW1lIjoiQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljLWFueS1EYXJ3aW5feDg2XzY0LmRpc3RtZXRhLnZhbHVlc3RvcmUuemlwIiwiZGlnZXN0Ijp7InNoYTI1NiI6IjJlY2ViMjkzZGY5NTNjMGIwNGM5YjQ0OWM1MWI0ZGI2ZTZlMGY3Y2IyZTc3MmEzMDQzOGZjYmYyZWJhZGY4YWYifX0seyJuYW1lIjoiQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljLWFueS1EYXJ3aW5feDg2XzY0LnBhY2thZ2UuY3RzLjEudHJhY2VzdG9yZSIsImRpZ2VzdCI6eyJzaGEyNTYiOiI0NzJhY2ZkNTYxOTdlNGM5NTY5M2ExZGVlOWEyODM1YmJiODgwODg0MTY3ZDA2ZTFkZDI0YWNmNDA1ODMwNGVmIn19LHsibmFtZSI6IkNvbW1vbnNCYXNlX0ZpbGVNYWdpYy1hbnktRGFyd2luX3g4Nl82NC5wYWNrYWdlLnZhbHVlc3RvcmUuaW5kZXgiLCJkaWdlc3QiOnsic2hhMjU2IjoiMzAwY2NmNWUzZjA1MDA4YzZkZTlkNmM4MmM4N2IwY2ZjYTMxNjg2ZTM4YzE3MWU0NDFhMTMxZmJmOGM5YTAwYyJ9fSx7Im5hbWUiOiJDb21tb25zQmFzZV9GaWxlTWFnaWMtYW55LURhcndpbl94ODZfNjQucGFja2FnZS52YWx1ZXN0b3JlLnppcCIsImRpZ2VzdCI6eyJzaGEyNTYiOiI5NmU0YjVhOWQxOTkxOGVmZWU4MDA4M2Q0MzJlMDc5OTU0ZmU5NmI2Nzk1MDc1NzVkY2NjZjIxNTgwMDg1Yzc2In19LHsibmFtZSI6IkNvbW1vbnNCYXNlX0ZpbGVNYWdpYy1hbnktRGFyd2luX3g4Nl82NC52YWx1ZXMuanNvbiIsImRpZ2VzdCI6eyJzaGEyNTYiOiJhMGMwMzBlNGViODBkNzRmZDI1MDEyYTJhNDFjMzU2NTk3MDhjMmRmMmYwZWM4ZjM1ZDJjMzNhZjFkZjcwYjM1In19LHsibmFtZSI6IkNvbW1vbnNCYXNlX0ZpbGVNYWdpYy1hbnktTGludXhfeDg2LmRpc3RtZXRhLmN0cy4xLnRyYWNlc3RvcmUiLCJkaWdlc3QiOnsic2hhMjU2IjoiNjg0MmY0NWU2Y2MxMmJmYTZhOGEzY2QzZjI1ZmQ5ZjRhOWExZDJiMGZhNzE5NGNmNTlkOTI2MDcyYmMyMTI3OSJ9fSx7Im5hbWUiOiJDb21tb25zQmFzZV9GaWxlTWFnaWMtYW55LUxpbnV4X3g4Ni5kaXN0bWV0YS5tYW5pZmVzdC56aXAiLCJkaWdlc3QiOnsic2hhMjU2IjoiNjg3YmI2ZGQwYmY0MDhlNzhiNWNkN2Y1OTZkZjg1Y2Q0MGMzOGM4NDIyMGQyYjJkZmFlNWU3ODIwMDAwNzA4OCJ9fSx7Im5hbWUiOiJDb21tb25zQmFzZV9GaWxlTWFnaWMtYW55LUxpbnV4X3g4Ni5kaXN0bWV0YS52YWx1ZXN0b3JlLmluZGV4IiwiZGlnZXN0Ijp7InNoYTI1NiI6IjdmMTg0MzQyNGMwNWYxZmVjM2U1MTBlYjU1ZmM5ODFlODYwMjRlYTJmZjEzNWNkNDg1MDVhZmFmNGU0NDM5YTYifX0seyJuYW1lIjoiQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljLWFueS1MaW51eF94ODYuZGlzdG1ldGEudmFsdWVzdG9yZS56aXAiLCJkaWdlc3QiOnsic2hhMjU2IjoiMmVjZWIyOTNkZjk1M2MwYjA0YzliNDQ5YzUxYjRkYjZlNmUwZjdjYjJlNzcyYTMwNDM4ZmNiZjJlYmFkZjhhZiJ9fSx7Im5hbWUiOiJDb21tb25zQmFzZV9GaWxlTWFnaWMtYW55LUxpbnV4X3g4Ni5wYWNrYWdlLmN0cy4xLnRyYWNlc3RvcmUiLCJkaWdlc3QiOnsic2hhMjU2IjoiNzg0MDU3NmNjMjE1MTQyZDZhZjIzNTRjYmFkZDFhMWFjMDMyNzgwM2JiMWUxZWZhZDQ3NTQwNzU4ZjZhZDBhNyJ9fSx7Im5hbWUiOiJDb21tb25zQmFzZV9GaWxlTWFnaWMtYW55LUxpbnV4X3g4Ni5wYWNrYWdlLnZhbHVlc3RvcmUuaW5kZXgiLCJkaWdlc3QiOnsic2hhMjU2IjoiYjcyNzU3YTA0NzM1OTExMzFkMzg1OTdiMzk0OGE5M2JhZTllMmY4ZWU5NmFhMjlhZWQwN2FmZDI5ZWM3MmRlMCJ9fSx7Im5hbWUiOiJDb21tb25zQmFzZV9GaWxlTWFnaWMtYW55LUxpbnV4X3g4Ni5wYWNrYWdlLnZhbHVlc3RvcmUuemlwIiwiZGlnZXN0Ijp7InNoYTI1NiI6IjA2NTBiM2JmYjQ3NmU0MGMwMjJmYmEzNTgzYmY2YzQ3YjQ2OWRjZDRkMmQyMzVkNjU1YWFhYzQ2MWVkZDk1NGEifX0seyJuYW1lIjoiQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljLWFueS1MaW51eF94ODYudmFsdWVzLmpzb24iLCJkaWdlc3QiOnsic2hhMjU2IjoiN2FhNmEwYjY5NTYyMTNlMGZhNzM5M2YzNGQ4MjhkNGU4N2I5NDZiOTE0ZDhiOWFmZmVlMDY1YjBiOGJlMmFjMiJ9fSx7Im5hbWUiOiJDb21tb25zQmFzZV9GaWxlTWFnaWMtYW55LUxpbnV4X3g4Nl82NC5kaXN0bWV0YS5jdHMuMS50cmFjZXN0b3JlIiwiZGlnZXN0Ijp7InNoYTI1NiI6IjY4NDJmNDVlNmNjMTJiZmE2YThhM2NkM2YyNWZkOWY0YTlhMWQyYjBmYTcxOTRjZjU5ZDkyNjA3MmJjMjEyNzkifX0seyJuYW1lIjoiQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljLWFueS1MaW51eF94ODZfNjQuZGlzdG1ldGEubWFuaWZlc3QuemlwIiwiZGlnZXN0Ijp7InNoYTI1NiI6IjY4N2JiNmRkMGJmNDA4ZTc4YjVjZDdmNTk2ZGY4NWNkNDBjMzhjODQyMjBkMmIyZGZhZTVlNzgyMDAwMDcwODgifX0seyJuYW1lIjoiQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljLWFueS1MaW51eF94ODZfNjQuZGlzdG1ldGEudmFsdWVzdG9yZS5pbmRleCIsImRpZ2VzdCI6eyJzaGEyNTYiOiI3ZjE4NDM0MjRjMDVmMWZlYzNlNTEwZWI1NWZjOTgxZTg2MDI0ZWEyZmYxMzVjZDQ4NTA1YWZhZjRlNDQzOWE2In19LHsibmFtZSI6IkNvbW1vbnNCYXNlX0ZpbGVNYWdpYy1hbnktTGludXhfeDg2XzY0LmRpc3RtZXRhLnZhbHVlc3RvcmUuemlwIiwiZGlnZXN0Ijp7InNoYTI1NiI6IjJlY2ViMjkzZGY5NTNjMGIwNGM5YjQ0OWM1MWI0ZGI2ZTZlMGY3Y2IyZTc3MmEzMDQzOGZjYmYyZWJhZGY4YWYifX0seyJuYW1lIjoiQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljLWFueS1MaW51eF94ODZfNjQucGFja2FnZS5jdHMuMS50cmFjZXN0b3JlIiwiZGlnZXN0Ijp7InNoYTI1NiI6IjQ4YTQzNjU5NWE3NzBhZTVmNmM1NTA4MWZkYmE1NjIxNTVhM2JkMzdjYjQyMDRjMzYxNjU0ZjMxZTRlNDg4ZDUifX0seyJuYW1lIjoiQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljLWFueS1MaW51eF94ODZfNjQucGFja2FnZS52YWx1ZXN0b3JlLmluZGV4IiwiZGlnZXN0Ijp7InNoYTI1NiI6IjA3YzI3NTU0YWJjZDNkMDY1MzExZjI4Yjk5NTllZDZjMmQzYTM1ODRmNDgxNmMxNGJiYmUzMGE0NTU0MTI3NDAifX0seyJuYW1lIjoiQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljLWFueS1MaW51eF94ODZfNjQucGFja2FnZS52YWx1ZXN0b3JlLnppcCIsImRpZ2VzdCI6eyJzaGEyNTYiOiJmODkyM2Y5YTg0OWYzMWJiYTFiYWExY2RkNDJiMjgzYjg4MDJmMTMzODBlNDEyZDFmMTYwYjE1MWY2MTczZjI2In19LHsibmFtZSI6IkNvbW1vbnNCYXNlX0ZpbGVNYWdpYy1hbnktTGludXhfeDg2XzY0LnZhbHVlcy5qc29uIiwiZGlnZXN0Ijp7InNoYTI1NiI6ImZkOTRhZTM0MWM3YzI4NzYwNjRlZDYwNjgxNmE5ODYxMjk1NGZkMzAyNDdhOGIwYTJjZWM3M2M2ZDYyYmY4MDQifX0seyJuYW1lIjoiQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljLWFueS1XaW5kb3dzX2FybTY0LmRpc3RtZXRhLmN0cy4xLnRyYWNlc3RvcmUiLCJkaWdlc3QiOnsic2hhMjU2IjoiNjg0MmY0NWU2Y2MxMmJmYTZhOGEzY2QzZjI1ZmQ5ZjRhOWExZDJiMGZhNzE5NGNmNTlkOTI2MDcyYmMyMTI3OSJ9fSx7Im5hbWUiOiJDb21tb25zQmFzZV9GaWxlTWFnaWMtYW55LVdpbmRvd3NfYXJtNjQuZGlzdG1ldGEubWFuaWZlc3QuemlwIiwiZGlnZXN0Ijp7InNoYTI1NiI6IjY4N2JiNmRkMGJmNDA4ZTc4YjVjZDdmNTk2ZGY4NWNkNDBjMzhjODQyMjBkMmIyZGZhZTVlNzgyMDAwMDcwODgifX0seyJuYW1lIjoiQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljLWFueS1XaW5kb3dzX2FybTY0LmRpc3RtZXRhLnZhbHVlc3RvcmUuaW5kZXgiLCJkaWdlc3QiOnsic2hhMjU2IjoiN2YxODQzNDI0YzA1ZjFmZWMzZTUxMGViNTVmYzk4MWU4NjAyNGVhMmZmMTM1Y2Q0ODUwNWFmYWY0ZTQ0MzlhNiJ9fSx7Im5hbWUiOiJDb21tb25zQmFzZV9GaWxlTWFnaWMtYW55LVdpbmRvd3NfYXJtNjQuZGlzdG1ldGEudmFsdWVzdG9yZS56aXAiLCJkaWdlc3QiOnsic2hhMjU2IjoiMmVjZWIyOTNkZjk1M2MwYjA0YzliNDQ5YzUxYjRkYjZlNmUwZjdjYjJlNzcyYTMwNDM4ZmNiZjJlYmFkZjhhZiJ9fSx7Im5hbWUiOiJDb21tb25zQmFzZV9GaWxlTWFnaWMtYW55LVdpbmRvd3NfYXJtNjQucGFja2FnZS5jdHMuMS50cmFjZXN0b3JlIiwiZGlnZXN0Ijp7InNoYTI1NiI6ImYxNjIxNWFmMTNkZmVhYWI0ZTY1ZWVjZTJkYWY0YTQ0ZmZmNGIxOGZjYzVkMGNmODYxNzhlOTgzMzgwNDAzMmMifX0seyJuYW1lIjoiQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljLWFueS1XaW5kb3dzX2FybTY0LnBhY2thZ2UudmFsdWVzdG9yZS5pbmRleCIsImRpZ2VzdCI6eyJzaGEyNTYiOiJmODRiZTNjYjA1YTBkMDY2OTE2ZGMzNjk0Mzk0ZDA1ZmZjM2M1YmM4ZGI2OTZhMDMxY2U3ZjQ1M2Y1MGVmNmQyIn19LHsibmFtZSI6IkNvbW1vbnNCYXNlX0ZpbGVNYWdpYy1hbnktV2luZG93c19hcm02NC5wYWNrYWdlLnZhbHVlc3RvcmUuemlwIiwiZGlnZXN0Ijp7InNoYTI1NiI6Ijg2YmJkOTFiOWM4NmEwMDE4MmRhYmJlYjc5NTM4MWNkNDQ1Mjg5YzhmOWFhZDQ2NzNhOTRkNmJhMjgyZmYxMDcifX0seyJuYW1lIjoiQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljLWFueS1XaW5kb3dzX2FybTY0LnZhbHVlcy5qc29uIiwiZGlnZXN0Ijp7InNoYTI1NiI6Ijg3NDNmZTA1NzhmNWFiYTgyMjVlNzA3NzFkNDFjY2ExOWRmNDgwYzBiYWI5NTg3YmRjOWJkODkzZWFlOTI2NzcifX0seyJuYW1lIjoiQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljLWFueS1XaW5kb3dzX3g4Ni5kaXN0bWV0YS5jdHMuMS50cmFjZXN0b3JlIiwiZGlnZXN0Ijp7InNoYTI1NiI6IjY4NDJmNDVlNmNjMTJiZmE2YThhM2NkM2YyNWZkOWY0YTlhMWQyYjBmYTcxOTRjZjU5ZDkyNjA3MmJjMjEyNzkifX0seyJuYW1lIjoiQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljLWFueS1XaW5kb3dzX3g4Ni5kaXN0bWV0YS5tYW5pZmVzdC56aXAiLCJkaWdlc3QiOnsic2hhMjU2IjoiNjg3YmI2ZGQwYmY0MDhlNzhiNWNkN2Y1OTZkZjg1Y2Q0MGMzOGM4NDIyMGQyYjJkZmFlNWU3ODIwMDAwNzA4OCJ9fSx7Im5hbWUiOiJDb21tb25zQmFzZV9GaWxlTWFnaWMtYW55LVdpbmRvd3NfeDg2LmRpc3RtZXRhLnZhbHVlc3RvcmUuaW5kZXgiLCJkaWdlc3QiOnsic2hhMjU2IjoiN2YxODQzNDI0YzA1ZjFmZWMzZTUxMGViNTVmYzk4MWU4NjAyNGVhMmZmMTM1Y2Q0ODUwNWFmYWY0ZTQ0MzlhNiJ9fSx7Im5hbWUiOiJDb21tb25zQmFzZV9GaWxlTWFnaWMtYW55LVdpbmRvd3NfeDg2LmRpc3RtZXRhLnZhbHVlc3RvcmUuemlwIiwiZGlnZXN0Ijp7InNoYTI1NiI6IjJlY2ViMjkzZGY5NTNjMGIwNGM5YjQ0OWM1MWI0ZGI2ZTZlMGY3Y2IyZTc3MmEzMDQzOGZjYmYyZWJhZGY4YWYifX0seyJuYW1lIjoiQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljLWFueS1XaW5kb3dzX3g4Ni5wYWNrYWdlLmN0cy4xLnRyYWNlc3RvcmUiLCJkaWdlc3QiOnsic2hhMjU2IjoiMTBmODhkYTIyYjA0OGExMjYwYTg0N2Q1ZmY0NWU1MDVmOGE4NWE5NGE2YWM4ZjY0MGRjYzU4NWY1Y2IxMmRlOSJ9fSx7Im5hbWUiOiJDb21tb25zQmFzZV9GaWxlTWFnaWMtYW55LVdpbmRvd3NfeDg2LnBhY2thZ2UudmFsdWVzdG9yZS5pbmRleCIsImRpZ2VzdCI6eyJzaGEyNTYiOiJjZGZlMzc4NmUxNjMzNzQ1NjRlMmZmMmNlNGIwZDE4ZjNlYTc5YzViOTQ3NDcyZTcwZDFjMWE4NTYyMmU2OGI2In19LHsibmFtZSI6IkNvbW1vbnNCYXNlX0ZpbGVNYWdpYy1hbnktV2luZG93c194ODYucGFja2FnZS52YWx1ZXN0b3JlLnppcCIsImRpZ2VzdCI6eyJzaGEyNTYiOiIyOTMxMGUxNDg4ZjhjYTMwZDk2NzRmMWIxM2U0ZDA3YzNkMDg1M2MwYmIyYzJhZTBlODk0MWQ3Y2E1Y2VjZTIwIn19LHsibmFtZSI6IkNvbW1vbnNCYXNlX0ZpbGVNYWdpYy1hbnktV2luZG93c194ODYudmFsdWVzLmpzb24iLCJkaWdlc3QiOnsic2hhMjU2IjoiMmQzOWUyOGZmYmNlMDM5MWI1ZGIxZmUxY2VmMjRkMzQxZmVjYjA3YTJlNWRlMWEyYmYyMTk4ZDJhNTc5ZDZkYiJ9fSx7Im5hbWUiOiJDb21tb25zQmFzZV9GaWxlTWFnaWMtYW55LVdpbmRvd3NfeDg2XzY0LmRpc3RtZXRhLmN0cy4xLnRyYWNlc3RvcmUiLCJkaWdlc3QiOnsic2hhMjU2IjoiNjg0MmY0NWU2Y2MxMmJmYTZhOGEzY2QzZjI1ZmQ5ZjRhOWExZDJiMGZhNzE5NGNmNTlkOTI2MDcyYmMyMTI3OSJ9fSx7Im5hbWUiOiJDb21tb25zQmFzZV9GaWxlTWFnaWMtYW55LVdpbmRvd3NfeDg2XzY0LmRpc3RtZXRhLm1hbmlmZXN0LnppcCIsImRpZ2VzdCI6eyJzaGEyNTYiOiI2ODdiYjZkZDBiZjQwOGU3OGI1Y2Q3ZjU5NmRmODVjZDQwYzM4Yzg0MjIwZDJiMmRmYWU1ZTc4MjAwMDA3MDg4In19LHsibmFtZSI6IkNvbW1vbnNCYXNlX0ZpbGVNYWdpYy1hbnktV2luZG93c194ODZfNjQuZGlzdG1ldGEudmFsdWVzdG9yZS5pbmRleCIsImRpZ2VzdCI6eyJzaGEyNTYiOiI3ZjE4NDM0MjRjMDVmMWZlYzNlNTEwZWI1NWZjOTgxZTg2MDI0ZWEyZmYxMzVjZDQ4NTA1YWZhZjRlNDQzOWE2In19LHsibmFtZSI6IkNvbW1vbnNCYXNlX0ZpbGVNYWdpYy1hbnktV2luZG93c194ODZfNjQuZGlzdG1ldGEudmFsdWVzdG9yZS56aXAiLCJkaWdlc3QiOnsic2hhMjU2IjoiMmVjZWIyOTNkZjk1M2MwYjA0YzliNDQ5YzUxYjRkYjZlNmUwZjdjYjJlNzcyYTMwNDM4ZmNiZjJlYmFkZjhhZiJ9fSx7Im5hbWUiOiJDb21tb25zQmFzZV9GaWxlTWFnaWMtYW55LVdpbmRvd3NfeDg2XzY0LnBhY2thZ2UuY3RzLjEudHJhY2VzdG9yZSIsImRpZ2VzdCI6eyJzaGEyNTYiOiJlZjk4ODU1OThhNWVkZmE3ZTczNTcxODdiMDJmMTRkMWFjMTA1MmM4YTY0Zjg2OTkxNzY2OWJlYjU3OTk5Y2E1In19LHsibmFtZSI6IkNvbW1vbnNCYXNlX0ZpbGVNYWdpYy1hbnktV2luZG93c194ODZfNjQucGFja2FnZS52YWx1ZXN0b3JlLmluZGV4IiwiZGlnZXN0Ijp7InNoYTI1NiI6Ijk5NGFkYmU0ZTE5ZGU1ZTkzM2I1ZGZlNWU3NWJkNWFjMDZjMTNkZjEzYzNkNDgxMWE3YzYzZjVjMzQ2ZTVkNTEifX0seyJuYW1lIjoiQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljLWFueS1XaW5kb3dzX3g4Nl82NC5wYWNrYWdlLnZhbHVlc3RvcmUuemlwIiwiZGlnZXN0Ijp7InNoYTI1NiI6ImJkNGRkNWI1OGY0YjMzMmEzZWE5NTY5ZDkwZDQ4NWVhODE4NmFiYTNkZTIzMjAwZmVhZWVmOGIxZDAzZGYzNmUifX0seyJuYW1lIjoiQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljLWFueS1XaW5kb3dzX3g4Nl82NC52YWx1ZXMuanNvbiIsImRpZ2VzdCI6eyJzaGEyNTYiOiJlNmIxYmI1NjIyZDg5YjhmODBmNGFiODdlM2FhY2U3OTAwYzY4MGVhODVkZWY2MDhmMzU0Y2I5MDljYjJhZjJlIn19LHsibmFtZSI6InZhbHVlcy5qc29uIiwiZGlnZXN0Ijp7InNoYTI1NiI6IjA0OTc4ODY0NjZkNzYwYjVlZjM4MmYzMTA0NGY5ZTk4ODU4YTZjN2MzY2MyOTM2Nzk5YmFmOTM1OGQzNWVjMTgifX1dLCJwcmVkaWNhdGVUeXBlIjoiaHR0cHM6Ly9zbHNhLmRldi9wcm92ZW5hbmNlL3YxIiwicHJlZGljYXRlIjp7ImJ1aWxkRGVmaW5pdGlvbiI6eyJidWlsZFR5cGUiOiJodHRwczovL2FjdGlvbnMuZ2l0aHViLmlvL2J1aWxkdHlwZXMvd29ya2Zsb3cvdjEiLCJleHRlcm5hbFBhcmFtZXRlcnMiOnsid29ya2Zsb3ciOnsicmVmIjoicmVmcy90YWdzLzAuMS4yMDI2MDkyMDE0NDM0NyIsInJlcG9zaXRvcnkiOiJodHRwczovL2dpdGh1Yi5jb20vZGtwa2cvQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljIiwicGF0aCI6Ii5naXRodWIvd29ya2Zsb3dzL2Rpc3RyaWJ1dGUtMC4xLnltbCJ9fSwiaW50ZXJuYWxQYXJhbWV0ZXJzIjp7ImdpdGh1YiI6eyJldmVudF9uYW1lIjoicHVzaCIsInJlcG9zaXRvcnlfaWQiOiIxMjQwMTU3NjMzIiwicmVwb3NpdG9yeV9vd25lcl9pZCI6IjI3ODkxMzUwMCIsInJ1bm5lcl9lbnZpcm9ubWVudCI6ImdpdGh1Yi1ob3N0ZWQifX0sInJlc29sdmVkRGVwZW5kZW5jaWVzIjpbeyJ1cmkiOiJnaXQraHR0cHM6Ly9naXRodWIuY29tL2RrcGtnL0NvbW1vbnNCYXNlX0ZpbGVNYWdpY0ByZWZzL3RhZ3MvMC4xLjIwMjYwOTIwMTQ0MzQ3IiwiZGlnZXN0Ijp7ImdpdENvbW1pdCI6IjVkZDJmNzM4ZmU3Y2VkYTdmZDk4MTE3NDMxNGVjYjcwM2NjMDVkYjAifX1dfSwicnVuRGV0YWlscyI6eyJidWlsZGVyIjp7ImlkIjoiaHR0cHM6Ly9naXRodWIuY29tL2RrcGtnL0NvbW1vbnNCYXNlX0ZpbGVNYWdpYy8uZ2l0aHViL3dvcmtmbG93cy9kaXN0cmlidXRlLTAuMS55bWxAcmVmcy90YWdzLzAuMS4yMDI2MDkyMDE0NDM0NyJ9LCJtZXRhZGF0YSI6eyJpbnZvY2F0aW9uSWQiOiJodHRwczovL2dpdGh1Yi5jb20vZGtwa2cvQ29tbW9uc0Jhc2VfRmlsZU1hZ2ljL2FjdGlvbnMvcnVucy8zNTUxODM4MTc3Mi9hdHRlbXB0cy8xIn19fX0=","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MEUCIDB02tZTIEVjjD2AgbcFI9k6ICIq3WitvBORdvsr7KTpAiEAwRfAccGftKH+2hLXVjk4m31oS+s9LkKqSesAn9sMIQQ="}]}}
|
| 579 |
+
] },
|
| 580 |
+
"github_slsa_v1_l3": {},
|
| 581 |
+
"openbsd_signify": {}
|
| 582 |
+
},
|
| 583 |
+
"build_to_sign": {
|
| 584 |
+
"bundle_canonical": "55dbbcc5a4c314d2e841634704232349341b7b8d44d0c331b4a57308e3120403",
|
| 585 |
+
"bundle_modver": "CommonsBase_FileMagic.Distribution@0.1.20260920144347",
|
| 586 |
+
"modules": [
|
| 587 |
+
"CommonsBase_FileMagic.Distribution@0.1.20260920144347",
|
| 588 |
+
"CommonsBase_FileMagic.File@7.8.50407",
|
| 589 |
+
"CommonsBase_FileMagic.File.Bundle@7.8.50407",
|
| 590 |
+
"CommonsBase_FileMagic.File.Unix@7.8.50407",
|
| 591 |
+
"CommonsBase_FileMagic.File.Win32@7.8.50407",
|
| 592 |
+
"CommonsBase_FileMagic.File.Apparatus.CompatCdefs@7.8.0",
|
| 593 |
+
"CommonsBase_FileMagic.File.Apparatus.CompatErr@7.8.0",
|
| 594 |
+
"CommonsBase_FileMagic.File.Apparatus.CompatHeader@7.8.0",
|
| 595 |
+
"CommonsBase_FileMagic.File.Apparatus.CompatNull@7.8.0",
|
| 596 |
+
"CommonsBase_FileMagic.File.Apparatus.CompatQueue@7.8.0",
|
| 597 |
+
"CommonsBase_FileMagic.File.Apparatus.CompatRegex@7.8.0",
|
| 598 |
+
"CommonsBase_FileMagic.File.Apparatus.CompatRegexSource@7.8.0",
|
| 599 |
+
"CommonsBase_FileMagic.File.Apparatus.CompatSource@7.8.0",
|
| 600 |
+
"CommonsBase_FileMagic.File.Apparatus.CompatTree@7.8.0",
|
| 601 |
+
"CommonsBase_FileMagic.File.Apparatus.CompatVisHeader@7.8.0",
|
| 602 |
+
"CommonsBase_FileMagic.File.Apparatus.CompatVisSource@7.8.0",
|
| 603 |
+
"CommonsBase_FileMagic.File.Apparatus.EmbeddedMagicHeader@7.8.0",
|
| 604 |
+
"CommonsBase_FileMagic.File.Apparatus.EmbeddedMagicSource@7.8.0",
|
| 605 |
+
"CommonsBase_FileMagic.File.Apparatus.MagicHeader@7.8.0",
|
| 606 |
+
"CommonsBase_FileMagic.File.Apparatus.MagicTestSource@7.8.0",
|
| 607 |
+
"CommonsBase_FileMagic.File.Apparatus.PortableMain@7.8.0",
|
| 608 |
+
"CommonsBase_FileMagic.File.Apparatus.PortableXmalloc@7.8.0"
|
| 609 |
+
],
|
| 610 |
+
"producer_accepts": [],
|
| 611 |
+
"distmeta": {
|
| 612 |
+
"traces": [
|
| 613 |
+
{
|
| 614 |
+
"tag": "cts.1",
|
| 615 |
+
"path": "CommonsBase_FileMagic-any-Darwin_arm64.distmeta.cts.1.tracestore"
|
| 616 |
+
},
|
| 617 |
+
{
|
| 618 |
+
"tag": "cts.1",
|
| 619 |
+
"path": "CommonsBase_FileMagic-any-Darwin_x86_64.distmeta.cts.1.tracestore"
|
| 620 |
+
},
|
| 621 |
+
{
|
| 622 |
+
"tag": "cts.1",
|
| 623 |
+
"path": "CommonsBase_FileMagic-any-Linux_x86.distmeta.cts.1.tracestore"
|
| 624 |
+
},
|
| 625 |
+
{
|
| 626 |
+
"tag": "cts.1",
|
| 627 |
+
"path": "CommonsBase_FileMagic-any-Linux_x86_64.distmeta.cts.1.tracestore"
|
| 628 |
+
},
|
| 629 |
+
{
|
| 630 |
+
"tag": "cts.1",
|
| 631 |
+
"path": "CommonsBase_FileMagic-any-Windows_arm64.distmeta.cts.1.tracestore"
|
| 632 |
+
},
|
| 633 |
+
{
|
| 634 |
+
"tag": "cts.1",
|
| 635 |
+
"path": "CommonsBase_FileMagic-any-Windows_x86.distmeta.cts.1.tracestore"
|
| 636 |
+
},
|
| 637 |
+
{
|
| 638 |
+
"tag": "cts.1",
|
| 639 |
+
"path": "CommonsBase_FileMagic-any-Windows_x86_64.distmeta.cts.1.tracestore"
|
| 640 |
+
}
|
| 641 |
+
],
|
| 642 |
+
"values": [
|
| 643 |
+
{
|
| 644 |
+
"path": "CommonsBase_FileMagic-any-Darwin_arm64.distmeta.valuestore.zip"
|
| 645 |
+
},
|
| 646 |
+
{
|
| 647 |
+
"path": "CommonsBase_FileMagic-any-Darwin_x86_64.distmeta.valuestore.zip"
|
| 648 |
+
},
|
| 649 |
+
{
|
| 650 |
+
"path": "CommonsBase_FileMagic-any-Linux_x86.distmeta.valuestore.zip"
|
| 651 |
+
},
|
| 652 |
+
{
|
| 653 |
+
"path": "CommonsBase_FileMagic-any-Linux_x86_64.distmeta.valuestore.zip"
|
| 654 |
+
},
|
| 655 |
+
{
|
| 656 |
+
"path": "CommonsBase_FileMagic-any-Windows_arm64.distmeta.valuestore.zip"
|
| 657 |
+
},
|
| 658 |
+
{
|
| 659 |
+
"path": "CommonsBase_FileMagic-any-Windows_x86.distmeta.valuestore.zip"
|
| 660 |
+
},
|
| 661 |
+
{
|
| 662 |
+
"path": "CommonsBase_FileMagic-any-Windows_x86_64.distmeta.valuestore.zip"
|
| 663 |
+
}
|
| 664 |
+
]
|
| 665 |
+
},
|
| 666 |
+
"package": {
|
| 667 |
+
"traces": [
|
| 668 |
+
{
|
| 669 |
+
"tag": "cts.1",
|
| 670 |
+
"path": "CommonsBase_FileMagic-any-Darwin_arm64.package.cts.1.tracestore"
|
| 671 |
+
},
|
| 672 |
+
{
|
| 673 |
+
"tag": "cts.1",
|
| 674 |
+
"path": "CommonsBase_FileMagic-any-Darwin_x86_64.package.cts.1.tracestore"
|
| 675 |
+
},
|
| 676 |
+
{
|
| 677 |
+
"tag": "cts.1",
|
| 678 |
+
"path": "CommonsBase_FileMagic-any-Linux_x86.package.cts.1.tracestore"
|
| 679 |
+
},
|
| 680 |
+
{
|
| 681 |
+
"tag": "cts.1",
|
| 682 |
+
"path": "CommonsBase_FileMagic-any-Linux_x86_64.package.cts.1.tracestore"
|
| 683 |
+
},
|
| 684 |
+
{
|
| 685 |
+
"tag": "cts.1",
|
| 686 |
+
"path": "CommonsBase_FileMagic-any-Windows_arm64.package.cts.1.tracestore"
|
| 687 |
+
},
|
| 688 |
+
{
|
| 689 |
+
"tag": "cts.1",
|
| 690 |
+
"path": "CommonsBase_FileMagic-any-Windows_x86.package.cts.1.tracestore"
|
| 691 |
+
},
|
| 692 |
+
{
|
| 693 |
+
"tag": "cts.1",
|
| 694 |
+
"path": "CommonsBase_FileMagic-any-Windows_x86_64.package.cts.1.tracestore"
|
| 695 |
+
}
|
| 696 |
+
],
|
| 697 |
+
"values": [
|
| 698 |
+
{
|
| 699 |
+
"path": "CommonsBase_FileMagic-any-Darwin_arm64.package.valuestore.zip"
|
| 700 |
+
},
|
| 701 |
+
{
|
| 702 |
+
"path": "CommonsBase_FileMagic-any-Darwin_x86_64.package.valuestore.zip"
|
| 703 |
+
},
|
| 704 |
+
{
|
| 705 |
+
"path": "CommonsBase_FileMagic-any-Linux_x86.package.valuestore.zip"
|
| 706 |
+
},
|
| 707 |
+
{
|
| 708 |
+
"path": "CommonsBase_FileMagic-any-Linux_x86_64.package.valuestore.zip"
|
| 709 |
+
},
|
| 710 |
+
{
|
| 711 |
+
"path": "CommonsBase_FileMagic-any-Windows_arm64.package.valuestore.zip"
|
| 712 |
+
},
|
| 713 |
+
{
|
| 714 |
+
"path": "CommonsBase_FileMagic-any-Windows_x86.package.valuestore.zip"
|
| 715 |
+
},
|
| 716 |
+
{
|
| 717 |
+
"path": "CommonsBase_FileMagic-any-Windows_x86_64.package.valuestore.zip"
|
| 718 |
+
}
|
| 719 |
+
]
|
| 720 |
+
}
|
| 721 |
+
}
|
| 722 |
+
},
|
| 723 |
+
"continuations": {
|
| 724 |
+
"attestation": {
|
| 725 |
+
"openbsd_signify": {
|
| 726 |
+
"signature": "untrusted comment: signed by key 1fa672bdf123a65c\nRWQfpnK98SOmXMDb0+Dp9RXUoLmfRysw5kMmhjS8YvniZM79XlCRZ0Jlb5XuPvOkc3/WKBcVK6CcdduZoW/ED7+MMmdvdZxxugg=\n"
|
| 727 |
+
}
|
| 728 |
+
},
|
| 729 |
+
"continuations_to_sign": {
|
| 730 |
+
"0.2": {
|
| 731 |
+
"application": { "name": "dk0", "version": "2.4.2+rev-253" },
|
| 732 |
+
"openbsd_signify": {
|
| 733 |
+
"public_key": "untrusted comment: CommonsBase_FileMagic-0.2\nRWRB0Vp89rkbNX632FEr9+vpPaHR3fTuTapX5tQJ4TsdRDUKlcYdg+mI\n"
|
| 734 |
+
}
|
| 735 |
+
},
|
| 736 |
+
"1.0": {
|
| 737 |
+
"application": { "name": "dk0", "version": "2.4.2+rev-253" },
|
| 738 |
+
"openbsd_signify": {
|
| 739 |
+
"public_key": "untrusted comment: CommonsBase_FileMagic-1.0\nRWQ3sh6eKNgqFjmSX0HGaBBKHuV1TFsYbvF33uyCInae7efYyGxzf0DK\n"
|
| 740 |
+
}
|
| 741 |
+
}
|
| 742 |
+
}
|
| 743 |
+
},
|
| 744 |
+
"id": "CommonsBase_FileMagic@0.1.20260920144347",
|
| 745 |
+
"license": { "spdx": "ISC" },
|
| 746 |
+
"producer": {
|
| 747 |
+
"application": { "name": "dk0", "version": "2.4.3+rev-22" },
|
| 748 |
+
"github_slsa_v1_l2": { "repository": "dkpkg/CommonsBase_FileMagic" },
|
| 749 |
+
"openbsd_signify": {
|
| 750 |
+
"public_key": "untrusted comment: CommonsBase_FileMagic-0.1\nRWQfpnK98SOmXMjE8HjH44kw6lqC0aZ6D0nJp27C82PH/l+YxgrQGIaA\n"
|
| 751 |
+
}
|
| 752 |
+
},
|
| 753 |
+
"min_dk_version": "2.4.2.213"
|
| 754 |
+
}
|
| 755 |
+
],
|
| 756 |
+
"forms": [],
|
| 757 |
+
"schema_version": { "major": 1, "minor": 0 }
|
| 758 |
+
}
|
|
@@ -4,15 +4,18 @@ CommonsBase_Build 0.1.20260916234322 4843aa52a49cc9c02574562407e196893c8f786a626
|
|
| 4 |
CommonsBase_Build 0.1.20260920144347 eb05f811a4e114f46ab25b978a3728467d00149023b83cc6267021ffc5ac67af etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 5 |
CommonsBase_FileMagic 0.1.20260913085659 ac662bb7e78faddf667b007df133157d9f588fb635e5edbfdccc830a8823abdb etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 6 |
CommonsBase_FileMagic 0.1.20260916234322 bdd8c70111bffdd6666e7dc2ff74bd92ce62faa64b2542fe217f321094a1c668 etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
|
|
|
| 7 |
CommonsBase_FileMagic 0.1.20260920144347 9795f60a23f3135597b06cf41d13983757f1488f71dc301e0a90f85834a340d7 etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 8 |
CommonsBase_GNU 0.1.20260913085659 9500243faab7e00ea8c604e4b6ace72f8784587fcee453f3959304934d37c5d1 etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 9 |
CommonsBase_GNU 0.1.20260916234322 b244854bfcba1585234befef8d966f5fce276df458829850d926c2d5869beb34 etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 10 |
CommonsBase_GNU 0.1.20260920144347 53e60fcbf502ffbdf433ac2faa585d8c9eff6c5b27aedd90d2f63330a7414218 etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 11 |
CommonsBase_LLVM 0.1.20260913085659 c51d6e04e6779799c4df31630c75ed17d95386492c7e0ddc046f3734c816e929 etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 12 |
CommonsBase_LLVM 0.1.20260916234322 e66256adfd231ea822bbad59bba124c3c851243082be0426af191ae18751611a etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
|
|
|
| 13 |
CommonsBase_LLVM 0.1.20260920144347 56312cd1d2868eff482798255793a35f8b2dbaf9c80a697622780d67639783fe etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 14 |
CommonsBase_Std 2.6.20260913085659 25224920a4b704b3693afe5343ce05c5cd2c0d9e19ce1641511707fb5af59887 etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 15 |
CommonsBase_Std 2.6.20260916234322 eafd48ee3331a4be2fee20055a7d2f88c33b53989c2dcc7f9a6b5ac51349f250 etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
|
|
|
| 16 |
CommonsBase_Std 2.6.20260920144347 b3c67724e09942596d8af32635b585698f931047e74332bc011a532a430d5438 etc/dk/i/CommonsBase_Std.2.6.20260920144347.values.json
|
| 17 |
CommonsBase_Std 2.6.20260920144347 b3c67724e09942596d8af32635b585698f931047e74332bc011a532a430d5438 etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 18 |
CommonsBase_Win32 0.1.20260913085659 3bf82182b61b0800bcbb7cf8f6c6fb270228e78fab9120a0ac9e169d12a451af etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
|
|
|
| 4 |
CommonsBase_Build 0.1.20260920144347 eb05f811a4e114f46ab25b978a3728467d00149023b83cc6267021ffc5ac67af etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 5 |
CommonsBase_FileMagic 0.1.20260913085659 ac662bb7e78faddf667b007df133157d9f588fb635e5edbfdccc830a8823abdb etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 6 |
CommonsBase_FileMagic 0.1.20260916234322 bdd8c70111bffdd6666e7dc2ff74bd92ce62faa64b2542fe217f321094a1c668 etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 7 |
+
CommonsBase_FileMagic 0.1.20260920144347 9795f60a23f3135597b06cf41d13983757f1488f71dc301e0a90f85834a340d7 etc/dk/i/CommonsBase_FileMagic.0.1.20260920144347.values.json
|
| 8 |
CommonsBase_FileMagic 0.1.20260920144347 9795f60a23f3135597b06cf41d13983757f1488f71dc301e0a90f85834a340d7 etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 9 |
CommonsBase_GNU 0.1.20260913085659 9500243faab7e00ea8c604e4b6ace72f8784587fcee453f3959304934d37c5d1 etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 10 |
CommonsBase_GNU 0.1.20260916234322 b244854bfcba1585234befef8d966f5fce276df458829850d926c2d5869beb34 etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 11 |
CommonsBase_GNU 0.1.20260920144347 53e60fcbf502ffbdf433ac2faa585d8c9eff6c5b27aedd90d2f63330a7414218 etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 12 |
CommonsBase_LLVM 0.1.20260913085659 c51d6e04e6779799c4df31630c75ed17d95386492c7e0ddc046f3734c816e929 etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 13 |
CommonsBase_LLVM 0.1.20260916234322 e66256adfd231ea822bbad59bba124c3c851243082be0426af191ae18751611a etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 14 |
+
CommonsBase_LLVM 0.1.20260920144347 56312cd1d2868eff482798255793a35f8b2dbaf9c80a697622780d67639783fe etc/dk/i/CommonsBase_FileMagic.0.1.20260920144347.values.json
|
| 15 |
CommonsBase_LLVM 0.1.20260920144347 56312cd1d2868eff482798255793a35f8b2dbaf9c80a697622780d67639783fe etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 16 |
CommonsBase_Std 2.6.20260913085659 25224920a4b704b3693afe5343ce05c5cd2c0d9e19ce1641511707fb5af59887 etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 17 |
CommonsBase_Std 2.6.20260916234322 eafd48ee3331a4be2fee20055a7d2f88c33b53989c2dcc7f9a6b5ac51349f250 etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 18 |
+
CommonsBase_Std 2.6.20260920144347 b3c67724e09942596d8af32635b585698f931047e74332bc011a532a430d5438 etc/dk/i/CommonsBase_FileMagic.0.1.20260920144347.values.json
|
| 19 |
CommonsBase_Std 2.6.20260920144347 b3c67724e09942596d8af32635b585698f931047e74332bc011a532a430d5438 etc/dk/i/CommonsBase_Std.2.6.20260920144347.values.json
|
| 20 |
CommonsBase_Std 2.6.20260920144347 b3c67724e09942596d8af32635b585698f931047e74332bc011a532a430d5438 etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
| 21 |
CommonsBase_Win32 0.1.20260913085659 3bf82182b61b0800bcbb7cf8f6c6fb270228e78fab9120a0ac9e169d12a451af etc/dk/i/CommonsLang_OCaml.0.1.20260920144347.values.json
|
|
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// Driver for the opam build of `earlybird`: ONE run-function precommand
|
| 2 |
+
// instantiates the closure build rule, which reads the lock once and registers
|
| 3 |
+
// every per-package build form (each still its own content-addressed dk object,
|
| 4 |
+
// so an interrupted build resumes) plus the aggregate `.Built` output form.
|
| 5 |
+
//
|
| 6 |
+
// GENERATED by the CommonsLang_OCaml.Dk.OpamLock.GenerateDriver dialog from
|
| 7 |
+
// `dk.opam-lock.jsonc`. Regenerate (do not hand-edit) when the lock changes.
|
| 8 |
+
//
|
| 9 |
+
// Regenerate with:
|
| 10 |
+
// dk0 dialog CommonsLang_OCaml.Dk.OpamLock.GenerateDriver@1.1.22 pkg=NotHackwaly_Ocamlearlybird.Ocamlearlybird@1.3.6 formid=NotHackwaly_Ocamlearlybird.Ocamlearlybird.DevPrefix@1.3.6 root=earlybird skiplocal=t mergedprefix=t
|
| 11 |
+
{
|
| 12 |
+
"$schema": "https://diskuv.com/dk/schema/dk-value-1.0.json",
|
| 13 |
+
"schema_version": { "major": 1, "minor": 0 },
|
| 14 |
+
"generated": {
|
| 15 |
+
"tool": "CommonsLang_OCaml.Dk.OpamLock.GenerateDriver@1.1.22",
|
| 16 |
+
"rulefn": "CommonsLang_OCaml.Dk.OpamBuild.F_BuildLockedClosure@1.0.29",
|
| 17 |
+
"lock": "dk.opam-lock.jsonc",
|
| 18 |
+
"lock-sha256": "8b0cbeeb0d8a11845f3cadc288bf4cb22cad3623c0673892d0b85f5256f0d967",
|
| 19 |
+
"localsrc": "NotHackwaly_Ocamlearlybird.Ocamlearlybird.Src@1.3.6",
|
| 20 |
+
"locksrcpath": "./dk-opam-lock.jsonc",
|
| 21 |
+
"root": "earlybird",
|
| 22 |
+
"formid": "NotHackwaly_Ocamlearlybird.Ocamlearlybird.DevPrefix@1.3.6",
|
| 23 |
+
"pkgpath": "NotHackwaly_Ocamlearlybird.Ocamlearlybird",
|
| 24 |
+
"version": "1.3.6",
|
| 25 |
+
"skiplocal": "t",
|
| 26 |
+
"mergedprefix": "t",
|
| 27 |
+
"parallel": "t"
|
| 28 |
+
},
|
| 29 |
+
"forms": [
|
| 30 |
+
{
|
| 31 |
+
"id": "NotHackwaly_Ocamlearlybird.Ocamlearlybird.DevPrefix@1.3.6",
|
| 32 |
+
"precommands": {
|
| 33 |
+
"sequential": false,
|
| 34 |
+
"private": [
|
| 35 |
+
"run-function CommonsLang_OCaml.Dk.OpamBuild.F_BuildLockedClosure@1.0.29 -d built modver=NotHackwaly_Ocamlearlybird.Ocamlearlybird.DevPrefix.Built@1.3.6 pkgpath=NotHackwaly_Ocamlearlybird.Ocamlearlybird version=1.3.6 root=earlybird localsrc=NotHackwaly_Ocamlearlybird.Ocamlearlybird.Src@1.3.6 locksrcpath=./dk-opam-lock.jsonc targetabi=Release.target_abi ocaml=CommonsLang_OCaml.DkML@4.14.3001 skiplocal=t mergedprefix=t"
|
| 36 |
+
]
|
| 37 |
+
},
|
| 38 |
+
"function": {
|
| 39 |
+
"commands": [
|
| 40 |
+
[
|
| 41 |
+
"$(get-object CommonsBase_Std.Coreutils@0.8.0 -s ${SLOTNAME.Release.execution_abi} -m ./coreutils.exe -f coreutils.exe -e '*')",
|
| 42 |
+
"cp", "built/prefix.zip", "${SLOT.request}/prefix.zip"
|
| 43 |
+
]
|
| 44 |
+
]
|
| 45 |
+
},
|
| 46 |
+
"outputs": { "assets": [ { "slots": ["Release.Windows_x86_64", "Release.Windows_x86", "Release.Linux_x86_64", "Release.Linux_x86_64_musl", "Release.Linux_x86", "Release.Linux_arm64", "Release.Darwin_x86_64", "Release.Darwin_arm64"], "paths": ["prefix.zip"] } ] }
|
| 47 |
+
}
|
| 48 |
+
]
|
| 49 |
+
}
|
|
@@ -2,14 +2,13 @@
|
|
| 2 |
"$what": "What THIS branch claims measure-performance.yml covers. The gate job compares it against what the dk matrix actually reported, and fails when they disagree.",
|
| 3 |
"$why_a_declaration_and_not_the_matrix": "Reading the coverage back out of the matrix would make the check agree with whatever the matrix says, including after a slot is quietly dropped. A separate declaration is the thing a dropped slot can DISAGREE with, which is the whole point. When a slot is added or removed on purpose, this file moves in the same commit.",
|
| 4 |
"$why_it_matters": "The dk matrix runs fail-fast: false, so one leg can die while the others publish numbers and the workflow still finishes. Those numbers then refresh CLO.md and both PR bodies while describing a slot nobody measured. That is the failure this gate exists for: a MISSING measurement, not a slower one.",
|
| 5 |
-
"$phases_differ_by_branch": "This branch measures build_cold, run_warm and run_edit. The high-performance branch measures fetch_cold, run_reconcile and run_warm, because it consumes a prebuilt object rather than building one. The two declarations are therefore NOT interchangeable, and copying one over the other would make each branch's gate check for phases its workflow never emits.",
|
| 6 |
"slots": [
|
| 7 |
"Release.Linux_x86_64",
|
| 8 |
"Release.Windows_x86_64"
|
| 9 |
],
|
| 10 |
"phases": [
|
| 11 |
-
"
|
| 12 |
-
"
|
| 13 |
-
"
|
| 14 |
]
|
| 15 |
}
|
|
|
|
| 2 |
"$what": "What THIS branch claims measure-performance.yml covers. The gate job compares it against what the dk matrix actually reported, and fails when they disagree.",
|
| 3 |
"$why_a_declaration_and_not_the_matrix": "Reading the coverage back out of the matrix would make the check agree with whatever the matrix says, including after a slot is quietly dropped. A separate declaration is the thing a dropped slot can DISAGREE with, which is the whole point. When a slot is added or removed on purpose, this file moves in the same commit.",
|
| 4 |
"$why_it_matters": "The dk matrix runs fail-fast: false, so one leg can die while the others publish numbers and the workflow still finishes. Those numbers then refresh CLO.md and both PR bodies while describing a slot nobody measured. That is the failure this gate exists for: a MISSING measurement, not a slower one.",
|
|
|
|
| 5 |
"slots": [
|
| 6 |
"Release.Linux_x86_64",
|
| 7 |
"Release.Windows_x86_64"
|
| 8 |
],
|
| 9 |
"phases": [
|
| 10 |
+
"dk_fetch_cold",
|
| 11 |
+
"dk_run_reconcile",
|
| 12 |
+
"dk_run_warm"
|
| 13 |
]
|
| 14 |
}
|