From 5e6ce503ee8c6fc6b3bccc437f8c865622d86799 Mon Sep 17 00:00:00 2001 From: Largo Date: Wed, 28 Oct 2026 12:34:56 +0100 Subject: [PATCH 1/3] Release: signed build provenance for every published file Each archive a pushed tag publishes gets a SLSA build provenance attestation from GitHub's own actions/attest, in the job that built it; so does the launch video when video_for puts it on a release. The action is pinned to the commit of its v4.2.2 tag (actions/attest-build-provenance is a wrapper of it since v4). `gh attestation verify --repo Largo/ironruby` checks a download. The README says how to check one, and where an archive's contents come from: source compiled in the job, the NuGet packages the projects pin, and the .NET runtime - none of it a binary in this repository. --- .github/workflows/release.yml | 32 ++++++++++++++++++++++++++++++++ README.md | 20 ++++++++++++++++++-- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f4e9d44e4..abff7cac0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,6 +5,8 @@ name: Release # pre-release while the version has a suffix such as -preview1), with # Docs/releases/.md as the notes when there is one; running the workflow by hand, or # a pull request that changes the packaging, only keeps them as workflow artifacts. +# Each published file gets a signed build provenance attestation (actions/attest) in the +# job that built it; `gh attestation verify --repo Largo/ironruby` checks it. # The launch video, rendered from media/launch, is only rendered when asked for by hand - # it takes about 7 minutes of every run otherwise: with render_video it is kept as an # artifact, and with video_for set to a tag it alone is rendered and replaces the video, @@ -50,6 +52,12 @@ jobs: runs-on: ${{ matrix.os }} # macOS is untested (README, Platforms): a failure there does not hold the release back. continue-on-error: ${{ matrix.experimental }} + # id-token, attestations and artifact-metadata: for the build provenance below. + permissions: + contents: read + id-token: write + attestations: write + artifact-metadata: write strategy: fail-fast: false matrix: @@ -151,6 +159,17 @@ jobs: working-directory: dist run: cd ironruby-*-win-x64 && cmd //c ir.cmd Samples/Notepad/test_notepad.rb + # Signed SLSA build provenance for the archive a tag publishes, with GitHub's own + # actions/attest, pinned to the commit of its v4.2.2 tag: `gh attestation verify + # --repo Largo/ironruby` shows that this workflow built it, from which + # commit and in which run. dist/ironruby--.* is the archive alone, not + # the directory it was packed from. + - name: Attest build provenance + if: github.event_name == 'push' && github.ref_type == 'tag' + uses: actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6 # v4.2.2 + with: + subject-path: dist/ironruby-*-${{ matrix.rid }}.* + - uses: actions/upload-artifact@v7 with: name: ironruby-${{ matrix.rid }} @@ -168,6 +187,11 @@ jobs: continue-on-error: true # A render takes about 7 minutes; a failed one can leave hyperframes waiting. timeout-minutes: 20 + permissions: + contents: read + id-token: write + attestations: write + artifact-metadata: write steps: - uses: actions/checkout@v7 @@ -198,6 +222,14 @@ jobs: $hf render --fps 60 --quality high --output "$GITHUB_WORKSPACE/dist/ironruby-4-launch.mp4" $hf snapshot --frames 12 + # As the archives: the film that video_for puts on a release gets its provenance here, + # in the job that rendered it. + - name: Attest build provenance + if: inputs.video_for != '' + uses: actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6 # v4.2.2 + with: + subject-path: dist/ironruby-4-launch.mp4 + - uses: actions/upload-artifact@v7 with: name: ironruby-launch-video diff --git a/README.md b/README.md index e88d31260..9b4251a4e 100644 --- a/README.md +++ b/README.md @@ -521,8 +521,24 @@ The Windows archive also carries the Windows Desktop runtime, for Windows Forms bundles, Microsoft's license and third-party notices. `Util/package-release.sh ` builds such an archive from a checkout, and -`.github/workflows/release.yml` builds all three, renders the [launch video](media/launch) -and publishes them when a `v*` tag is pushed. +`.github/workflows/release.yml` builds all three and publishes them when a `v*` tag is +pushed; the [launch video](media/launch) is rendered and added by hand. + +Releases after 4.0.1 carry a signed [build provenance attestation](https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds) +for each archive, made by GitHub's `actions/attest` in the job that built it. It says +which workflow built the file, from which commit, in which run, and that the file is +the one it built. Check one with the GitHub CLI: + +```console +$ gh attestation verify ironruby--linux-x64.tar.gz --repo Largo/ironruby +``` + +What is in an archive comes from three places, none of them a binary in this repository: +IronRuby, the DLR and prism (libprism too) are compiled in the job from source, at the +revisions `release.yml` pins; the NuGet packages the projects name, at the versions they +pin - AngleSharp, AngleSharp.Xml, Microsoft.Data.Sqlite, System.Text.Encoding.CodePages +and SQLitePCLRaw.bundle_e_sqlite3, whose native `e_sqlite3` is SQLite as that package +builds it; and the .NET runtime. ## Building From baba38cd2a5d65804aef23cf4834bfa56217e1a6 Mon Sep 17 00:00:00 2001 From: Largo Date: Wed, 28 Oct 2026 13:45:38 +0100 Subject: [PATCH 2/3] Remove the programs from the repository, and keep them out in CI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nothing built, tested or shipped any of them, and all but two were compiled from sources that stay: - Tests/Experiments/Process/X: twelve tiny .NET 2.0 programs (eight of them one file under eight names) for an experiment on how Windows finds a program by its extension; a.cs, inspect.cs and A B/x.cs stay. - Tests/Interop: the four compiled C# fixtures; their .generated.cs stay. - Src/Samples/Tutorial: TutorialSamples.dll and SplashScreen.dll; Prime.cs, SplashScreen.cs and the Rakefile that builds them stay. - Build/Key.snk: the old strong-name key pair. Today's assemblies are not strong-named; only Build/Common.proj, which nothing current imports, named it, and only if it exists. - Tests/Experiments/Loader/Extensions*/fcntl.so: CRuby 1.8's fcntl, a 32-bit Windows DLL. The loader experiments only need a file of that name, so it is a text file saying so now. Util/numeric-conversion-matrix.rb had two NUL bytes and a no-break space in string literals; they are \x00 and   now, the same strings (its output under CRuby is byte for byte the same), and git sees text. Tests/Experiments/BuiltinsAll.txt is UTF-8 instead of UTF-16. Util/check-no-executables.rb fails when a tracked file is a PE (.NET too), ELF, Mach-O, Java class or WebAssembly binary, by its first bytes rather than its name; CI runs it as its own job. --- .github/workflows/ci.yml | 10 ++++ Build/Key.snk | Bin 596 -> 0 bytes README.md | 4 +- .../ironruby_files/TutorialSamples.dll | Bin 4096 -> 0 bytes Src/Samples/Tutorial/wpf/SplashScreen.dll | Bin 45056 -> 0 bytes Tests/Experiments/BuiltinsAll.txt | Bin 57334 -> 27000 bytes Tests/Experiments/Loader/Extensions/fcntl.so | Bin 20560 -> 344 bytes Tests/Experiments/Loader/Extensions2/fcntl.so | Bin 20560 -> 344 bytes Tests/Experiments/Process/X/A B/x.exe | Bin 3584 -> 0 bytes Tests/Experiments/Process/X/a.exe | Bin 4096 -> 0 bytes Tests/Experiments/Process/X/attrib.exe | Bin 3584 -> 0 bytes Tests/Experiments/Process/X/b.exe | Bin 3584 -> 0 bytes Tests/Experiments/Process/X/inspect.exe | Bin 3584 -> 0 bytes Tests/Experiments/Process/X/notepad.exe | Bin 3584 -> 0 bytes Tests/Experiments/Process/X/q.com | Bin 3584 -> 0 bytes Tests/Experiments/Process/X/w.exe.exe | Bin 3584 -> 0 bytes Tests/Experiments/Process/X/w.t.exe | Bin 3584 -> 0 bytes Tests/Experiments/Process/X/w.tx.exe | Bin 3584 -> 0 bytes Tests/Experiments/Process/X/z.txt.exe | Bin 3584 -> 0 bytes Tests/Experiments/Process/X/z.txtt.exe | Bin 3584 -> 0 bytes Tests/Interop/com/fixtures.generated.dll | Bin 3584 -> 0 bytes Tests/Interop/net/A/a.generated.dll | Bin 3072 -> 0 bytes Tests/Interop/net/B/b.generated.dll | Bin 3072 -> 0 bytes Tests/Interop/net/fixtures.generated.dll | Bin 86016 -> 0 bytes Util/check-no-executables.rb | 45 ++++++++++++++++++ Util/numeric-conversion-matrix.rb | Bin 7915 -> 7925 bytes 26 files changed, 58 insertions(+), 1 deletion(-) delete mode 100644 Build/Key.snk delete mode 100644 Src/Samples/Tutorial/app/Tutorials/ironruby_files/TutorialSamples.dll delete mode 100644 Src/Samples/Tutorial/wpf/SplashScreen.dll delete mode 100644 Tests/Experiments/Process/X/A B/x.exe delete mode 100644 Tests/Experiments/Process/X/a.exe delete mode 100644 Tests/Experiments/Process/X/attrib.exe delete mode 100644 Tests/Experiments/Process/X/b.exe delete mode 100644 Tests/Experiments/Process/X/inspect.exe delete mode 100644 Tests/Experiments/Process/X/notepad.exe delete mode 100644 Tests/Experiments/Process/X/q.com delete mode 100644 Tests/Experiments/Process/X/w.exe.exe delete mode 100644 Tests/Experiments/Process/X/w.t.exe delete mode 100644 Tests/Experiments/Process/X/w.tx.exe delete mode 100644 Tests/Experiments/Process/X/z.txt.exe delete mode 100644 Tests/Experiments/Process/X/z.txtt.exe delete mode 100644 Tests/Interop/com/fixtures.generated.dll delete mode 100644 Tests/Interop/net/A/a.generated.dll delete mode 100644 Tests/Interop/net/B/b.generated.dll delete mode 100644 Tests/Interop/net/fixtures.generated.dll create mode 100644 Util/check-no-executables.rb diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 312b4e241..ec83e605c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,6 +28,16 @@ env: MSPEC_REF: b79c65ed28b00f0869ad82b0e3dceef0d943cd58 jobs: + # The repository holds no programs - no .exe, .dll, .so or other binary that runs - so all + # of it can be read; Util/check-no-executables.rb says why and how it tells them apart. + no-executables: + name: no programs in the repository + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - name: Check every tracked file + run: ruby Util/check-no-executables.rb + build-and-test: name: ${{ matrix.os }} ${{ matrix.tfm }} runs-on: ${{ matrix.os }} diff --git a/Build/Key.snk b/Build/Key.snk deleted file mode 100644 index 3557d7b818240b2514fffe61295aedc0025fee69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50098O4B!pY;LcD+)`5f5tpi&}=_~Ngd(Vmk zq8G|t3k-d^bN%^sd9^E0DkIbeoxcP#iQ%hdq1MF+se^w$BT(^P1{7VE7hI&zv zkdWlVKY$=Un*cSk95TA%516oM`3;$+0W+mDWPsT~Ik9$8pI_KgM`iOn8P2Zf!9Ta zs$gxC@4nWd_X92dJ?zNj7+=FGrb` zKg7&V4g(B~4GoWAz9EBRb)%z+L?gfMMe5;=;PS}M$~Pah_oU%bdc081=wK@Kqb`IO i(>DIZz@I_x<1anj6uHeG7r5d1&b5g1HoV{RSo4VUwi_4# diff --git a/README.md b/README.md index 9b4251a4e..6b8109680 100644 --- a/README.md +++ b/README.md @@ -538,7 +538,9 @@ IronRuby, the DLR and prism (libprism too) are compiled in the job from source, revisions `release.yml` pins; the NuGet packages the projects name, at the versions they pin - AngleSharp, AngleSharp.Xml, Microsoft.Data.Sqlite, System.Text.Encoding.CodePages and SQLitePCLRaw.bundle_e_sqlite3, whose native `e_sqlite3` is SQLite as that package -builds it; and the .NET runtime. +builds it; and the .NET runtime. The repository itself holds no programs - no `.exe`, +`.dll`, `.so` or any other binary that runs - and CI keeps it so with +`Util/check-no-executables.rb`, which looks at what each tracked file is, not at its name. ## Building diff --git a/Src/Samples/Tutorial/app/Tutorials/ironruby_files/TutorialSamples.dll b/Src/Samples/Tutorial/app/Tutorials/ironruby_files/TutorialSamples.dll deleted file mode 100644 index b706b066e94d781a6b4838e1aaf5288c4420a0a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 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 HMBsk_Y933R diff --git a/Tests/Experiments/BuiltinsAll.txt b/Tests/Experiments/BuiltinsAll.txt index 9be08baf0a840b43b2a6d4e440d9ca48ae5a505f..8e8843b4d994d33ca337443bd1d0a379fae98ac7 100644 GIT binary patch literal 27000 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 literal 57334 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 Vi$YTHh3=8wl-8H>m-?Op`3q#6d5{1A literal 20560 zcmeI4QD|FL7{|Zcrna4F&2$yfg14g`dsxH08PrZ!*EYR%vNXw(v|YEhF>P*4N|M%_ zd#jaI3bC@9txREzfr4G<5ELAuFcqY1D*CYDUI&9dIJm4%^kwWJ^!lB9bK5+u!h9G$ zd5`*Jvk_8mP9l>p$tZWsWU(X!TQj{iQaqFn#{clGdf?X{-MobOsw zB$>+bQ_AG)N-V>V$FkW;l^>INMa%N3EZ-9d^O?!G?5?ZZ)?6xm`gjw1?;RIvt_LlV8yM->B(_`X%@$Tna6Bd>jda7b7@KhhyW2F0z`la5CI}U z1c(3;AOeqoK!4$n!%0;Dm+rfN~^ye%mm`tNokcvUQ(u_EhfL1T!&M-Ha zj5E2fcv%14jG&AMW&M^d4>P&H7}9^TWjv1RKiG1_E`HIHCu;Qbwsz32{C-K}^!IFS zzg;$4(m{8WMsBnAas?pNSgUe{) z&9M>3LQiwe{EAk;uj)AFzvDLQm@U-pKrMftE7UI3&0#=0ketIZMuQ9E^D9HkCs@$2 zcV#V+=V6I?Ne3J7RP9=R7YF?g%QveI4Xt(HH};un^DC-QsACxer`{;O^q2Bvp?>~X zwc5C0%K1MXYj=W1Lk;_W3#$u5qZ8bbD^9>)cDOK7Gf>c+gN0ew{5`EU-@$eZYrFF6 zoLZG%uh4cbox})!q;_y1Z2X23Cr`W7!2!wuVcsJcSqBec=IbC}J*z5$H+fVq8~)hyW2F z0z`la5CI}U1c(3;AOb{y2>j0o_`5}cZHc`>=g@jz9FEJ=_&?mHhTlwOhuPbBb7&Ra g?e4Z={HJom=96=4Y)$QLZ)?ruFcqJ-PsPXJ9|eit5&!@I diff --git a/Tests/Experiments/Loader/Extensions2/fcntl.so b/Tests/Experiments/Loader/Extensions2/fcntl.so index f0ae0c5c4093437ef38173d169d2e720489d3c7b..e3b8f6319a38fb099fd19f8b88b9563e3db9e56b 100644 GIT binary patch literal 344 zcmYk2F;Bx#421XoirZMyNWg+vVX4#!Au+!sj$-j@r?%6Of6sfRQW-6u@4oZr#Ey|O z!6V7wV8N({B%q%laaKX*&XR4fh>4Ij4P<3Ilktfp98#nR1qW2}R%RM@>Cd)LIn#i# zm&mPam335&jG8()5!Q+O2|C_X)|L2wCr0OmjWBcn?d|RmSd-)JW9c?Lwl5E*Ky|+Z zH%NGX+INNLi)GN&@qRp(&=lyCh(=}T7S4gu^i($NJEK{hLv6$U3UJjQOr<6@H_E9* Vi$YTHh3=8wl-8H>m-?Op`3q#6d5{1A literal 20560 zcmeI4QD|FL7{|Zcrna4F&2$yfg14g`dsxH08PrZ!*EYR%vNXw(v|YEhF>P*4N|M%_ zd#jaI3bC@9txREzfr4G<5ELAuFcqY1D*CYDUI&9dIJm4%^kwWJ^!lB9bK5+u!h9G$ zd5`*Jvk_8mP9l>p$tZWsWU(X!TQj{iQaqFn#{clGdf?X{-MobOsw zB$>+bQ_AG)N-V>V$FkW;l^>INMa%N3EZ-9d^O?!G?5?ZZ)?6xm`gjw1?;RIvt_LlV8yM->B(_`X%@$Tna6Bd>jda7b7@KhhyW2F0z`la5CI}U z1c(3;AOeqoK!4$n!%0;Dm+rfN~^ye%mm`tNokcvUQ(u_EhfL1T!&M-Ha zj5E2fcv%14jG&AMW&M^d4>P&H7}9^TWjv1RKiG1_E`HIHCu;Qbwsz32{C-K}^!IFS zzg;$4(m{8WMsBnAas?pNSgUe{) z&9M>3LQiwe{EAk;uj)AFzvDLQm@U-pKrMftE7UI3&0#=0ketIZMuQ9E^D9HkCs@$2 zcV#V+=V6I?Ne3J7RP9=R7YF?g%QveI4Xt(HH};un^DC-QsACxer`{;O^q2Bvp?>~X zwc5C0%K1MXYj=W1Lk;_W3#$u5qZ8bbD^9>)cDOK7Gf>c+gN0ew{5`EU-@$eZYrFF6 zoLZG%uh4cbox})!q;_y1Z2X23Cr`W7!2!wuVcsJcSqBec=IbC}J*z5$H+fVq8~)hyW2F z0z`la5CI}U1c(3;AOb{y2>j0o_`5}cZHc`>=g@jz9FEJ=_&?mHhTlwOhuPbBb7&Ra g?e4Z={HJom=96=4Y)$QLZ)?ruFcqJ-PsPXJ9|eit5&!@I diff --git a/Tests/Experiments/Process/X/A B/x.exe b/Tests/Experiments/Process/X/A B/x.exe deleted file mode 100644 index 876d6594d55c15a47331e07109172f09ded45ce1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 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 QMDlw&r>@zD^uMdXAEIg3Y5)KL diff --git a/Tests/Experiments/Process/X/attrib.exe b/Tests/Experiments/Process/X/attrib.exe deleted file mode 100644 index 417b103b3f56af7c51d74b8b0bf08b85d636a543..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 zcmeHJO>9(E6h5y%q%F1rDncZ9nW7nqyp~b}AuUY*z-gwm=}b#vF!arv+v(HyGv51V zoN+!^2(|hjuyXSuA z{=F`|c7?i$s0Z!tU83vgnKFj|J==tP==pDl=n}-S;o)#4qm6a0+*9pTY z7DXvkH56VbW*74!h)U8P92_{Dq+XgM%30l1x4)Zj&32o*tesY06BIh8%fny-ErZ5P zpzCUeKr;Bbr%g22nYtrI*X|Rw8A6AV_X5iqq91t?w$d8W6I*Q$qYI)0x{2>{!-g=aBh}LYSl?%;a%RtzXG;}S>0KKiGA0g0SU4w^nZ2^wB zX;?dG4fQiIwl3PhHPFY8ARcBPSV;0S=^ z=cg?*OA}^o%pSF089gy}f~V^xAN+T;;mcSAWc-Qce5|~%tRYew82JnhujDBQ8M{ow z=T@?_=r2NFVtv|=is+eOvd%qC)X&Nv)^Xa~tP!}(Qo(PE#+S<->ig!Mi>v#`Z-0POXmty+dW2>5^^j!^ z;Y99vhSi}yE4iQtdDjYEdoL)bay|;@>aMJCjfD*ry{)mKx#W)UTp`PXr3a~XmpVO{ zW+F9Lmu8*K9!P1Id_LcJabF;jG17m7b(xbZ@QUsOpp)o3aW&63?$);Ujcx2aeoHVc zd`pO~pnaAhdilO1d~2HMx2Bsz;2Q^Dr952%=Y7vp7CV0)dKUaFWTx+X?)=%xYYYiH zll0j4WY)HK*4S3bA%#31-W-XXA+1wnf({dpD!}W&s^NEV_dR&SB+0d&4}sMJrWjEk z?B#7TZJ3x*YW>Ek2pP5E?ppWaXED1b*W{^m%p(vxio@EDT}7-ybQ{Yk-iUVN+&d7@ z)x;(?1a=?mK()G$cOw1EsnjDg=i3+v65mQA&sv$b+O z!-KiU4elk3iKs+X)E8qPJJGjsa}9j%xYjAurx6)owS1rv|2Pgq>CTNGCeG9YU(}@1 zxWtpGWAA*fQa&Hk3Ffr2FAt=1tkLi(DKs5jV+C2WqnI0$jAFjY(Xd$l) diff --git a/Tests/Experiments/Process/X/b.exe b/Tests/Experiments/Process/X/b.exe deleted file mode 100644 index 195dc924519c739afe8c4a1fb1178ef3cbbbe1f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 zcmeHJO>9(E6h3cSNGZ}(B?!^r*oHYo>sVH#{SP=%S;v^57Y6c^I3s0o9f~*gHxFF%k{ei&$Z-4aAW* ziRe1{)lOaJmZMEn6+}hswcum$Y5z)IB86?W{V1!K4(!hDM^AeX;NZgPNz0(7v>GGM zu=C>Zk&z<|zlj3OcQ6LtC0YQ&=WG`et`#Er~U~0otrGZoDW~ZV1!I$;G zWDu92S-6B#+ljWY^SgDJcBD0dj%f|nS6dF~j9G7{HVouEb2_h_<%`@wM ze!IY)y#)c2KB5;;xJ9oS@BN()^}&0R9D0g&VeX?n^eH_9UTizGm7c@=H0`7A71|&l z!)Kmtv4F8EWAkyj9?0Y5I=xfuFQGt1k9OIu0bA zSAHVr{75p{t`S4|#>l0?TUWlDy7JSdTZ=z@^$zuX{r0O%yGCz+fH%eJ5@dA?%j)SS z%j)Z~vQK9>_qCYYabCH#GjTN2^kj|M6{{+KOIvsB)o#!|wnfKZYqj6;G07_>7xC%?;=F$Y2qNh>bQ#uX zd7^_k7@7PyN%V8NY$6A9qtHuKpbMC1Xc5*dZtOGgXEC2lZ*Tgx`|iCqZX1jBiOk{e zehsXNPMg>gxuk&O;|`L*jA)r+v%Z&jR}rf&q8jTi?gAgHky$7DqWeRDTHur*%SXKO z0HmtP8K(BXQ7XYk-T1n#)%ZmWlb6n59!<%d1_l|3wKz$mSA-WZSjrhlX*h+W5`F`v~GYmvSDvhgR z+&<(C+d@WOT*hz7xP7j8a`31vbmB&3H;5xSZnvbiPaNOYJLYOF!&1-^0EqOsU02aD z?Nw#y>cP z96#ThsMP}BGuN%-)@t@pijb(fPG+O!_#yd>*k&Kj*3zrv5^iNaB1*nl2TxgEP<{iq zensksL_OR_6_5@Nu28Sem+_oz$Up=$r~%tu_G(V?*sH1c#sYV|nBbi1hEV{=<)q^cdhj*nvL)xtX2Z diff --git a/Tests/Experiments/Process/X/inspect.exe b/Tests/Experiments/Process/X/inspect.exe deleted file mode 100644 index 6021ae40938299a22f293fe8998ff898c260dfd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 zcmeHJO>9(E6h3cSNGWuJKS78FFRz$XV&4of0wFC-OAD6tXVMu;LWuC@&F#$7_cOfv zW}IPR>OvEv3*5P6p*t5YOe6wvB6NOG(bdy7>^zi-NMXN)come4a?bAzsu4$JMJC0Wz63@P-(bIG^4N{*}ib> zAP8eol_F{d!VSdCQd#(6O-Jf(?8MM3TzstQ1XA44Gzp@sR-_^an#NXyust1^dQ=2@E0SIaM~(F=Ryfus z;P9J5O0Ud)+`&V>~#*oqQ7)m)zhxTX2wm~?AgUjcq4IMRs z)jne7tvB<>j~wUl+sFg|4P*3uqRTk=N0!TRR%!Iyg}E8b zGte3T=(HDBF*CtroO_XI2P=OXM`=%z6X595U>&C>a+)i&;S}L^8lwY9{t}%8zpnXB zZMg%^#Cw?Yyqkj~8fzs1kv^lGj`g zog~0tfOT+ z!6Gf#Za|h3hf%s8W1|SPkugp z?Ajk6%zimiX*|r`S)`$FuU}r-SGfN%J~0DM#-K2aAt>2FGK}nykv_Tod=r(-o{N#) zTnvNRjw73#L!}Xg?N%Ek7hekS5a43N~`Aa_lpkt8i}Ho z{+leL-<3cY<*(~R(oNT;l6>!_f3P>6VCT(i>mnp#@_KGSxmir!Z_nkIX`)|~Wo??t z6fmz)nXZ7((lVquTB1ehbKqwoGu<70@UZtPwIOAv)0tcQy0F^Hy~99Mn z!ramJF^y>+a$WB@gKV4B)u`&!fG-i_DeCx3shu9i z(!5YPJAT3xDn@6ry)clIW>+fn^r?~I30o=YSG}%4fIv-}ttdFDoQCvmHSW7k6smAF z9(O|jq^*3beb^M}Z|fB*G;K8(w8M90WQvwM<>0pkWn8sACDWvIklYi{^q}W9V4ui6E&?1T da=jaZ!ngg5wp;;`{5@7Wy5$|u9REiZ_zR38u^0dV diff --git a/Tests/Experiments/Process/X/notepad.exe b/Tests/Experiments/Process/X/notepad.exe deleted file mode 100644 index 417b103b3f56af7c51d74b8b0bf08b85d636a543..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 zcmeHJO>9(E6h5y%q%F1rDncZ9nW7nqyp~b}AuUY*z-gwm=}b#vF!arv+v(HyGv51V zoN+!^2(|hjuyXSuA z{=F`|c7?i$s0Z!tU83vgnKFj|J==tP==pDl=n}-S;o)#4qm6a0+*9pTY z7DXvkH56VbW*74!h)U8P92_{Dq+XgM%30l1x4)Zj&32o*tesY06BIh8%fny-ErZ5P zpzCUeKr;Bbr%g22nYtrI*X|Rw8A6AV_X5iqq91t?w$d8W6I*Q$qYI)0x{2>{!-g=aBh}LYSl?%;a%RtzXG;}S>0KKiGA0g0SU4w^nZ2^wB zX;?dG4fQiIwl3PhHPFY8ARcBPSV;0S=^ z=cg?*OA}^o%pSF089gy}f~V^xAN+T;;mcSAWc-Qce5|~%tRYew82JnhujDBQ8M{ow z=T@?_=r2NFVtv|=is+eOvd%qC)X&Nv)^Xa~tP!}(Qo(PE#+S<->ig!Mi>v#`Z-0POXmty+dW2>5^^j!^ z;Y99vhSi}yE4iQtdDjYEdoL)bay|;@>aMJCjfD*ry{)mKx#W)UTp`PXr3a~XmpVO{ zW+F9Lmu8*K9!P1Id_LcJabF;jG17m7b(xbZ@QUsOpp)o3aW&63?$);Ujcx2aeoHVc zd`pO~pnaAhdilO1d~2HMx2Bsz;2Q^Dr952%=Y7vp7CV0)dKUaFWTx+X?)=%xYYYiH zll0j4WY)HK*4S3bA%#31-W-XXA+1wnf({dpD!}W&s^NEV_dR&SB+0d&4}sMJrWjEk z?B#7TZJ3x*YW>Ek2pP5E?ppWaXED1b*W{^m%p(vxio@EDT}7-ybQ{Yk-iUVN+&d7@ z)x;(?1a=?mK()G$cOw1EsnjDg=i3+v65mQA&sv$b+O z!-KiU4elk3iKs+X)E8qPJJGjsa}9j%xYjAurx6)owS1rv|2Pgq>CTNGCeG9YU(}@1 zxWtpGWAA*fQa&Hk3Ffr2FAt=1tkLi(DKs5jV+C2WqnI0$jAFjY(Xd$l) diff --git a/Tests/Experiments/Process/X/q.com b/Tests/Experiments/Process/X/q.com deleted file mode 100644 index 417b103b3f56af7c51d74b8b0bf08b85d636a543..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 zcmeHJO>9(E6h5y%q%F1rDncZ9nW7nqyp~b}AuUY*z-gwm=}b#vF!arv+v(HyGv51V zoN+!^2(|hjuyXSuA z{=F`|c7?i$s0Z!tU83vgnKFj|J==tP==pDl=n}-S;o)#4qm6a0+*9pTY z7DXvkH56VbW*74!h)U8P92_{Dq+XgM%30l1x4)Zj&32o*tesY06BIh8%fny-ErZ5P zpzCUeKr;Bbr%g22nYtrI*X|Rw8A6AV_X5iqq91t?w$d8W6I*Q$qYI)0x{2>{!-g=aBh}LYSl?%;a%RtzXG;}S>0KKiGA0g0SU4w^nZ2^wB zX;?dG4fQiIwl3PhHPFY8ARcBPSV;0S=^ z=cg?*OA}^o%pSF089gy}f~V^xAN+T;;mcSAWc-Qce5|~%tRYew82JnhujDBQ8M{ow z=T@?_=r2NFVtv|=is+eOvd%qC)X&Nv)^Xa~tP!}(Qo(PE#+S<->ig!Mi>v#`Z-0POXmty+dW2>5^^j!^ z;Y99vhSi}yE4iQtdDjYEdoL)bay|;@>aMJCjfD*ry{)mKx#W)UTp`PXr3a~XmpVO{ zW+F9Lmu8*K9!P1Id_LcJabF;jG17m7b(xbZ@QUsOpp)o3aW&63?$);Ujcx2aeoHVc zd`pO~pnaAhdilO1d~2HMx2Bsz;2Q^Dr952%=Y7vp7CV0)dKUaFWTx+X?)=%xYYYiH zll0j4WY)HK*4S3bA%#31-W-XXA+1wnf({dpD!}W&s^NEV_dR&SB+0d&4}sMJrWjEk z?B#7TZJ3x*YW>Ek2pP5E?ppWaXED1b*W{^m%p(vxio@EDT}7-ybQ{Yk-iUVN+&d7@ z)x;(?1a=?mK()G$cOw1EsnjDg=i3+v65mQA&sv$b+O z!-KiU4elk3iKs+X)E8qPJJGjsa}9j%xYjAurx6)owS1rv|2Pgq>CTNGCeG9YU(}@1 zxWtpGWAA*fQa&Hk3Ffr2FAt=1tkLi(DKs5jV+C2WqnI0$jAFjY(Xd$l) diff --git a/Tests/Experiments/Process/X/w.exe.exe b/Tests/Experiments/Process/X/w.exe.exe deleted file mode 100644 index 417b103b3f56af7c51d74b8b0bf08b85d636a543..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 zcmeHJO>9(E6h5y%q%F1rDncZ9nW7nqyp~b}AuUY*z-gwm=}b#vF!arv+v(HyGv51V zoN+!^2(|hjuyXSuA z{=F`|c7?i$s0Z!tU83vgnKFj|J==tP==pDl=n}-S;o)#4qm6a0+*9pTY z7DXvkH56VbW*74!h)U8P92_{Dq+XgM%30l1x4)Zj&32o*tesY06BIh8%fny-ErZ5P zpzCUeKr;Bbr%g22nYtrI*X|Rw8A6AV_X5iqq91t?w$d8W6I*Q$qYI)0x{2>{!-g=aBh}LYSl?%;a%RtzXG;}S>0KKiGA0g0SU4w^nZ2^wB zX;?dG4fQiIwl3PhHPFY8ARcBPSV;0S=^ z=cg?*OA}^o%pSF089gy}f~V^xAN+T;;mcSAWc-Qce5|~%tRYew82JnhujDBQ8M{ow z=T@?_=r2NFVtv|=is+eOvd%qC)X&Nv)^Xa~tP!}(Qo(PE#+S<->ig!Mi>v#`Z-0POXmty+dW2>5^^j!^ z;Y99vhSi}yE4iQtdDjYEdoL)bay|;@>aMJCjfD*ry{)mKx#W)UTp`PXr3a~XmpVO{ zW+F9Lmu8*K9!P1Id_LcJabF;jG17m7b(xbZ@QUsOpp)o3aW&63?$);Ujcx2aeoHVc zd`pO~pnaAhdilO1d~2HMx2Bsz;2Q^Dr952%=Y7vp7CV0)dKUaFWTx+X?)=%xYYYiH zll0j4WY)HK*4S3bA%#31-W-XXA+1wnf({dpD!}W&s^NEV_dR&SB+0d&4}sMJrWjEk z?B#7TZJ3x*YW>Ek2pP5E?ppWaXED1b*W{^m%p(vxio@EDT}7-ybQ{Yk-iUVN+&d7@ z)x;(?1a=?mK()G$cOw1EsnjDg=i3+v65mQA&sv$b+O z!-KiU4elk3iKs+X)E8qPJJGjsa}9j%xYjAurx6)owS1rv|2Pgq>CTNGCeG9YU(}@1 zxWtpGWAA*fQa&Hk3Ffr2FAt=1tkLi(DKs5jV+C2WqnI0$jAFjY(Xd$l) diff --git a/Tests/Experiments/Process/X/w.t.exe b/Tests/Experiments/Process/X/w.t.exe deleted file mode 100644 index 417b103b3f56af7c51d74b8b0bf08b85d636a543..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 zcmeHJO>9(E6h5y%q%F1rDncZ9nW7nqyp~b}AuUY*z-gwm=}b#vF!arv+v(HyGv51V zoN+!^2(|hjuyXSuA z{=F`|c7?i$s0Z!tU83vgnKFj|J==tP==pDl=n}-S;o)#4qm6a0+*9pTY z7DXvkH56VbW*74!h)U8P92_{Dq+XgM%30l1x4)Zj&32o*tesY06BIh8%fny-ErZ5P zpzCUeKr;Bbr%g22nYtrI*X|Rw8A6AV_X5iqq91t?w$d8W6I*Q$qYI)0x{2>{!-g=aBh}LYSl?%;a%RtzXG;}S>0KKiGA0g0SU4w^nZ2^wB zX;?dG4fQiIwl3PhHPFY8ARcBPSV;0S=^ z=cg?*OA}^o%pSF089gy}f~V^xAN+T;;mcSAWc-Qce5|~%tRYew82JnhujDBQ8M{ow z=T@?_=r2NFVtv|=is+eOvd%qC)X&Nv)^Xa~tP!}(Qo(PE#+S<->ig!Mi>v#`Z-0POXmty+dW2>5^^j!^ z;Y99vhSi}yE4iQtdDjYEdoL)bay|;@>aMJCjfD*ry{)mKx#W)UTp`PXr3a~XmpVO{ zW+F9Lmu8*K9!P1Id_LcJabF;jG17m7b(xbZ@QUsOpp)o3aW&63?$);Ujcx2aeoHVc zd`pO~pnaAhdilO1d~2HMx2Bsz;2Q^Dr952%=Y7vp7CV0)dKUaFWTx+X?)=%xYYYiH zll0j4WY)HK*4S3bA%#31-W-XXA+1wnf({dpD!}W&s^NEV_dR&SB+0d&4}sMJrWjEk z?B#7TZJ3x*YW>Ek2pP5E?ppWaXED1b*W{^m%p(vxio@EDT}7-ybQ{Yk-iUVN+&d7@ z)x;(?1a=?mK()G$cOw1EsnjDg=i3+v65mQA&sv$b+O z!-KiU4elk3iKs+X)E8qPJJGjsa}9j%xYjAurx6)owS1rv|2Pgq>CTNGCeG9YU(}@1 zxWtpGWAA*fQa&Hk3Ffr2FAt=1tkLi(DKs5jV+C2WqnI0$jAFjY(Xd$l) diff --git a/Tests/Experiments/Process/X/w.tx.exe b/Tests/Experiments/Process/X/w.tx.exe deleted file mode 100644 index 417b103b3f56af7c51d74b8b0bf08b85d636a543..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 zcmeHJO>9(E6h5y%q%F1rDncZ9nW7nqyp~b}AuUY*z-gwm=}b#vF!arv+v(HyGv51V zoN+!^2(|hjuyXSuA z{=F`|c7?i$s0Z!tU83vgnKFj|J==tP==pDl=n}-S;o)#4qm6a0+*9pTY z7DXvkH56VbW*74!h)U8P92_{Dq+XgM%30l1x4)Zj&32o*tesY06BIh8%fny-ErZ5P zpzCUeKr;Bbr%g22nYtrI*X|Rw8A6AV_X5iqq91t?w$d8W6I*Q$qYI)0x{2>{!-g=aBh}LYSl?%;a%RtzXG;}S>0KKiGA0g0SU4w^nZ2^wB zX;?dG4fQiIwl3PhHPFY8ARcBPSV;0S=^ z=cg?*OA}^o%pSF089gy}f~V^xAN+T;;mcSAWc-Qce5|~%tRYew82JnhujDBQ8M{ow z=T@?_=r2NFVtv|=is+eOvd%qC)X&Nv)^Xa~tP!}(Qo(PE#+S<->ig!Mi>v#`Z-0POXmty+dW2>5^^j!^ z;Y99vhSi}yE4iQtdDjYEdoL)bay|;@>aMJCjfD*ry{)mKx#W)UTp`PXr3a~XmpVO{ zW+F9Lmu8*K9!P1Id_LcJabF;jG17m7b(xbZ@QUsOpp)o3aW&63?$);Ujcx2aeoHVc zd`pO~pnaAhdilO1d~2HMx2Bsz;2Q^Dr952%=Y7vp7CV0)dKUaFWTx+X?)=%xYYYiH zll0j4WY)HK*4S3bA%#31-W-XXA+1wnf({dpD!}W&s^NEV_dR&SB+0d&4}sMJrWjEk z?B#7TZJ3x*YW>Ek2pP5E?ppWaXED1b*W{^m%p(vxio@EDT}7-ybQ{Yk-iUVN+&d7@ z)x;(?1a=?mK()G$cOw1EsnjDg=i3+v65mQA&sv$b+O z!-KiU4elk3iKs+X)E8qPJJGjsa}9j%xYjAurx6)owS1rv|2Pgq>CTNGCeG9YU(}@1 zxWtpGWAA*fQa&Hk3Ffr2FAt=1tkLi(DKs5jV+C2WqnI0$jAFjY(Xd$l) diff --git a/Tests/Experiments/Process/X/z.txt.exe b/Tests/Experiments/Process/X/z.txt.exe deleted file mode 100644 index 417b103b3f56af7c51d74b8b0bf08b85d636a543..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 zcmeHJO>9(E6h5y%q%F1rDncZ9nW7nqyp~b}AuUY*z-gwm=}b#vF!arv+v(HyGv51V zoN+!^2(|hjuyXSuA z{=F`|c7?i$s0Z!tU83vgnKFj|J==tP==pDl=n}-S;o)#4qm6a0+*9pTY z7DXvkH56VbW*74!h)U8P92_{Dq+XgM%30l1x4)Zj&32o*tesY06BIh8%fny-ErZ5P zpzCUeKr;Bbr%g22nYtrI*X|Rw8A6AV_X5iqq91t?w$d8W6I*Q$qYI)0x{2>{!-g=aBh}LYSl?%;a%RtzXG;}S>0KKiGA0g0SU4w^nZ2^wB zX;?dG4fQiIwl3PhHPFY8ARcBPSV;0S=^ z=cg?*OA}^o%pSF089gy}f~V^xAN+T;;mcSAWc-Qce5|~%tRYew82JnhujDBQ8M{ow z=T@?_=r2NFVtv|=is+eOvd%qC)X&Nv)^Xa~tP!}(Qo(PE#+S<->ig!Mi>v#`Z-0POXmty+dW2>5^^j!^ z;Y99vhSi}yE4iQtdDjYEdoL)bay|;@>aMJCjfD*ry{)mKx#W)UTp`PXr3a~XmpVO{ zW+F9Lmu8*K9!P1Id_LcJabF;jG17m7b(xbZ@QUsOpp)o3aW&63?$);Ujcx2aeoHVc zd`pO~pnaAhdilO1d~2HMx2Bsz;2Q^Dr952%=Y7vp7CV0)dKUaFWTx+X?)=%xYYYiH zll0j4WY)HK*4S3bA%#31-W-XXA+1wnf({dpD!}W&s^NEV_dR&SB+0d&4}sMJrWjEk z?B#7TZJ3x*YW>Ek2pP5E?ppWaXED1b*W{^m%p(vxio@EDT}7-ybQ{Yk-iUVN+&d7@ z)x;(?1a=?mK()G$cOw1EsnjDg=i3+v65mQA&sv$b+O z!-KiU4elk3iKs+X)E8qPJJGjsa}9j%xYjAurx6)owS1rv|2Pgq>CTNGCeG9YU(}@1 zxWtpGWAA*fQa&Hk3Ffr2FAt=1tkLi(DKs5jV+C2WqnI0$jAFjY(Xd$l) diff --git a/Tests/Experiments/Process/X/z.txtt.exe b/Tests/Experiments/Process/X/z.txtt.exe deleted file mode 100644 index 417b103b3f56af7c51d74b8b0bf08b85d636a543..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 zcmeHJO>9(E6h5y%q%F1rDncZ9nW7nqyp~b}AuUY*z-gwm=}b#vF!arv+v(HyGv51V zoN+!^2(|hjuyXSuA z{=F`|c7?i$s0Z!tU83vgnKFj|J==tP==pDl=n}-S;o)#4qm6a0+*9pTY z7DXvkH56VbW*74!h)U8P92_{Dq+XgM%30l1x4)Zj&32o*tesY06BIh8%fny-ErZ5P zpzCUeKr;Bbr%g22nYtrI*X|Rw8A6AV_X5iqq91t?w$d8W6I*Q$qYI)0x{2>{!-g=aBh}LYSl?%;a%RtzXG;}S>0KKiGA0g0SU4w^nZ2^wB zX;?dG4fQiIwl3PhHPFY8ARcBPSV;0S=^ z=cg?*OA}^o%pSF089gy}f~V^xAN+T;;mcSAWc-Qce5|~%tRYew82JnhujDBQ8M{ow z=T@?_=r2NFVtv|=is+eOvd%qC)X&Nv)^Xa~tP!}(Qo(PE#+S<->ig!Mi>v#`Z-0POXmty+dW2>5^^j!^ z;Y99vhSi}yE4iQtdDjYEdoL)bay|;@>aMJCjfD*ry{)mKx#W)UTp`PXr3a~XmpVO{ zW+F9Lmu8*K9!P1Id_LcJabF;jG17m7b(xbZ@QUsOpp)o3aW&63?$);Ujcx2aeoHVc zd`pO~pnaAhdilO1d~2HMx2Bsz;2Q^Dr952%=Y7vp7CV0)dKUaFWTx+X?)=%xYYYiH zll0j4WY)HK*4S3bA%#31-W-XXA+1wnf({dpD!}W&s^NEV_dR&SB+0d&4}sMJrWjEk z?B#7TZJ3x*YW>Ek2pP5E?ppWaXED1b*W{^m%p(vxio@EDT}7-ybQ{Yk-iUVN+&d7@ z)x;(?1a=?mK()G$cOw1EsnjDg=i3+v65mQA&sv$b+O z!-KiU4elk3iKs+X)E8qPJJGjsa}9j%xYjAurx6)owS1rv|2Pgq>CTNGCeG9YU(}@1 zxWtpGWAA*fQa&Hk3Ffr2FAt=1tkLi(DKs5jV+C2WqnI0$jAFjY(Xd$l) diff --git a/Tests/Interop/com/fixtures.generated.dll b/Tests/Interop/com/fixtures.generated.dll deleted file mode 100644 index 0fab2d9c4bb2ef9229890a4e000d12394d66dbdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 zcmeHJJ!~9B6#nM!9N8we42Y0Gl&s|-g(zAsj!`K1IsYX&630%?b|Qpi@7;~hi}rR; zyK~`8flNU`fkXv8qChlG5s3(i4v;7U6cm){Dbi3;V7@oI_Sq%^k`Cl&&ztw&eDmhL zH#;*o^TtQW11PXI;&$KN;XCT`-QoFFKXF=d)QG*NQ}e8|^}Ql->u1?0>h<)D(hWMu3XQCE%xQUN)3=%fP{1hJUFz05jO8 zUg{UOHRfY<$50=W!gI{#xo3Tvm)$stYaF(*l_&^)r(>!#m)uwf5rH<=Wg5lTp1_Hl zpmi4wNnJ@2TMj)~c7P5)2qnfxpnjYhMIm>!C#Hwi)l(Cd*C$lwO~Sc3>K5G>i|0nq ziSr%=dMGP=O6i3Rk;j}P;>WmTJy$Yqfmuj+3fgj?Jcp1ikA%E{FYq`%!!tNS zevIBle%^8yPvRt8Jc~2rBm65_K52PjovwD#X$C55ZIQy574tUx)T%IG)5&ikU!IBT z?LfbZ6~ANJu}<8E4t4AqU3cq2fC)dWbA#q}Vswo1`6xm&sYP+%S5aA`v5DF0Te@a& z-8ZY{6|bf-(+-T^3iNE-jK|#D6;ATv#u;Iw!p>$>-D~a8_)YDWLwb)|6&>I7YdV3< zH2gBEZKL7VOccwsvAxqKqh`wwbi6$;HF(C4!fQJ4I#x=$uCnz6#-XYo_-3s;n&#t9 zMzO|p$LKJjpYHHqE5w=}pFx{nwtG=Dw* z1A4!F=gq|M6FNpXHPj^0j`Jv4SD;FugBCsX!xTj#%PUSg_KK``U_VY;hY+f5h5=5ugLUFg2_ zKdXSU_v_*G72T0rdV?1qU>A_Q9XCpV*>TaBoZK^ud|Q{ur*Vx^ndjgN^)mT+%0gck z?*EbA!dBg8uVs?l(>vT+tK9vHUOk?t^E_j6!pgiqR}k6p6ZUqW=cq?(!g0@@#fVx; zw+cV=Fe%1li1KM~JiyZ}iz#C3Zwyt+z-dOLw((P3JweU-Y3*9aA-2fl+Qlvs8x!p_ z(lnMLZ}D!E_v~rnB^zV0A!83%FAq)XV2(cDB*Xh8w(Gi#ToWyRB}{^guH3?!jkbYR&VaodZrF8aGrLqo*4?VEXpgr3n9YBVej`TJW}OUoZg&;B u`AaQ;m+YKz)+r&f$*Kp8*!jnKlJ7n}WCfh`XJRq^S@4jP_u>Eb3j7J7V@n00yVQ#QO&Tf?W0GF!&&I%Szy8HLG#P6-fHi57rCJ$Rv}HQFSSmTI4cf^Lzv=} zOCgj@{xV~SgLa`FIG+N?%wK2D)D(hWUjUXwc7Pk%y3CbM>%fx-3=gR&fEDahf%@FO z2H1(-N~q6B^XW4M9NM4ebvufq8r>#0C&Ohup=QWo_I9NGkU*2`I?WQR$k9a(Fx90R zQAuA(l3NbFXerJYFX(vL!V#|H`az7axMJ}o^qo7C8{r8np2Jk-%_%F3F1cPk zZZqnD%*9$V`bD{KjpAfl8?!MjqJO{jQnL)PN%KSo`tUN&lE04$@@wQp>>5vs z7B0VIc!t(qBQGlfe2q~PrD3$sPK{%L-a(AxDV!!Bz>q=o8`);xo`sF$7{=4c@8A%9 zOFhjjby#@r5JJ@N+qTyh!}_MLC*ax*9q7nSbltA|J|@wOYhmPjRaCa)L^rWi{ZQ8u zEV^C*yOxAe=CD^bgT!lUdpc~kJYPo@9bNTmI!0=66E6%_wC`>iDV|LDovNFOMz&C3 zbX7gyOSU`Su8dIaWS1V!9%U-H`Q7K!rB`2^`{9>wZr&cew}`@zAHTPDdhG5OJW~aN zth}(rk ztf7J{a1BceOGlzHPj1912SEK^NlumN-T*)JDO>fmfMSIvwilGLS9 zr>#zuyqzN^w*^`oX5}=iZeiPG*T4qxFvot*?6Z{Fr3120yC%^dZoe^8-!kKb%wdy# zNcd$AR@tdfYUMj^)=aVwF_BGn)n|t4AJ=i|V|vsbQ0e~+&gi2K{5al!p#y&cbt(WI diff --git a/Tests/Interop/net/B/b.generated.dll b/Tests/Interop/net/B/b.generated.dll deleted file mode 100644 index c3f5b3d4f44b232b7c25b784660e9835abef23c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3072 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 diff --git a/Util/check-no-executables.rb b/Util/check-no-executables.rb new file mode 100644 index 000000000..2cbd22cb8 --- /dev/null +++ b/Util/check-no-executables.rb @@ -0,0 +1,45 @@ +# frozen_string_literal: true +# +# Fails when a file in the repository is a program: a Windows PE (.exe, .dll, .NET +# assemblies included), an ELF or Mach-O binary, a Java class or WebAssembly. Everything +# IronRuby ships is compiled from the sources here, the NuGet packages the projects pin and +# the .NET runtime, so the tree itself holds nothing that runs but cannot be read. Images, +# fonts and documents are not programs and are let through. CI runs it on every change: +# +# ruby Util/check-no-executables.rb # every file git tracks +# ruby Util/check-no-executables.rb FILE... # only these +# +# A file is recognised by its first bytes, not by its name, so a program cannot pass by +# being called notes.txt, and an extension-only placeholder such as +# Tests/Experiments/Loader/Extensions/fcntl.so - which is text - is not flagged. + +def kind_of(head, size) + return "ELF" if head.start_with?("\x7FELF".b) + return "WebAssembly" if head.start_with?("\0asm".b) + if head.start_with?("MZ".b) && head.bytesize >= 0x40 + pe = head.byteslice(0x3c, 4).unpack1("V") + return "PE (Windows program or .NET assembly)" if pe + 4 <= size && head.byteslice(pe, 4) == "PE\0\0".b + end + case head.byteslice(0, 4)&.unpack1("N") + when 0xFEEDFACE, 0xFEEDFACF, 0xCEFAEDFE, 0xCFFAEDFE then "Mach-O" + when 0xCAFEBABE then "Mach-O universal binary or Java class" + end +end + +paths = ARGV.empty? ? `git ls-files -z`.split("\0") : ARGV +abort "check-no-executables: git ls-files failed" if ARGV.empty? && !$?.success? + +found = paths.filter_map do |path| + next unless File.file?(path) + head = File.open(path, "rb") { |f| f.read(4096) } || "".b + kind = kind_of(head, File.size(path)) + "#{path}: #{kind}" if kind +end + +if found.empty? + puts "check-no-executables: #{paths.size} files, no programs among them" +else + warn "check-no-executables: #{found.size} program(s) in the repository - build them from source instead:" + found.each { |line| warn " #{line}" } + exit 1 +end diff --git a/Util/numeric-conversion-matrix.rb b/Util/numeric-conversion-matrix.rb index 8171cc167c18da73c80448683375eb71039bc912..080347963793ad60e118278ad5e06a5b93e8cf8e 100644 GIT binary patch delta 43 qcmaED`_*=X6{lQGseyr`fs%r@f|8+<4v>hcFff2KHv4hT6$Jnk%L|kM delta 45 ucmexr``UJc6{pOh1xgCq3QC4bIzWN}LK-RQa47(}lM^{*H`j7jhynm3uL~;x From 64d036e355b4fa0c0c86947909d23321e43dee70 Mon Sep 17 00:00:00 2001 From: Largo Date: Wed, 28 Oct 2026 13:59:34 +0100 Subject: [PATCH 3/3] Address review: attest SHA256SUMS, find more programs, SQLite source - SHA256SUMS is attested where it is made: in the release job, and in replace-video, which now writes it, attests it and uploads it in three steps. - check-no-executables.rb reads the PE signature where e_lfanew puts it, also past the first 4096 bytes, and knows the 64-bit Mach-O universal header (0xCAFEBABF). - README: on Linux the archive's e_sqlite3 is not the NuGet package's but built in the job from SQLite's amalgamation source, checked against the SHA-256 Util/build-e_sqlite3.sh pins. --- .github/workflows/release.yml | 28 ++++++++++++++++++++++++++-- README.md | 10 +++++++--- Util/check-no-executables.rb | 14 ++++++++++---- 3 files changed, 43 insertions(+), 9 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index abff7cac0..207220ee6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -252,6 +252,9 @@ jobs: runs-on: ubuntu-latest permissions: contents: write + id-token: write + attestations: write + artifact-metadata: write steps: - uses: actions/checkout@v7 with: @@ -268,6 +271,12 @@ jobs: working-directory: dist run: sha256sum * | tee SHA256SUMS + # The archives were attested where they were built; SHA256SUMS is made here. + - name: Attest SHA256SUMS + uses: actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6 # v4.2.2 + with: + subject-path: dist/SHA256SUMS + - name: Publish env: GH_TOKEN: ${{ github.token }} @@ -291,13 +300,16 @@ jobs: runs-on: ubuntu-latest permissions: contents: write + id-token: write + attestations: write + artifact-metadata: write steps: - uses: actions/download-artifact@v8 with: name: ironruby-launch-video path: dist - - name: Upload + - name: Checksums working-directory: dist env: GH_TOKEN: ${{ github.token }} @@ -308,4 +320,16 @@ jobs: { grep -v ' ironruby-4-launch.mp4$' SHA256SUMS; echo "$sum"; } > SHA256SUMS.new mv SHA256SUMS.new SHA256SUMS cat SHA256SUMS - gh release upload "$TAG" ironruby-4-launch.mp4 SHA256SUMS --clobber --repo "$GITHUB_REPOSITORY" + + # The video was attested where it was rendered; this SHA256SUMS is made here. + - name: Attest SHA256SUMS + uses: actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6 # v4.2.2 + with: + subject-path: dist/SHA256SUMS + + - name: Upload + working-directory: dist + env: + GH_TOKEN: ${{ github.token }} + TAG: ${{ inputs.video_for }} + run: gh release upload "$TAG" ironruby-4-launch.mp4 SHA256SUMS --clobber --repo "$GITHUB_REPOSITORY" diff --git a/README.md b/README.md index 6b8109680..ba7225134 100644 --- a/README.md +++ b/README.md @@ -525,7 +525,8 @@ bundles, Microsoft's license and third-party notices. pushed; the [launch video](media/launch) is rendered and added by hand. Releases after 4.0.1 carry a signed [build provenance attestation](https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds) -for each archive, made by GitHub's `actions/attest` in the job that built it. It says +for each archive and for `SHA256SUMS`, made by GitHub's `actions/attest` in the job that +built the file. It says which workflow built the file, from which commit, in which run, and that the file is the one it built. Check one with the GitHub CLI: @@ -533,12 +534,15 @@ the one it built. Check one with the GitHub CLI: $ gh attestation verify ironruby--linux-x64.tar.gz --repo Largo/ironruby ``` -What is in an archive comes from three places, none of them a binary in this repository: +What is in an archive comes from these places, none of them a binary in this repository: IronRuby, the DLR and prism (libprism too) are compiled in the job from source, at the revisions `release.yml` pins; the NuGet packages the projects name, at the versions they pin - AngleSharp, AngleSharp.Xml, Microsoft.Data.Sqlite, System.Text.Encoding.CodePages and SQLitePCLRaw.bundle_e_sqlite3, whose native `e_sqlite3` is SQLite as that package -builds it; and the .NET runtime. The repository itself holds no programs - no `.exe`, +builds it on Windows and macOS; on Linux, SQLite's own amalgamation source, downloaded +from sqlite.org and checked against the SHA-256 `Util/build-e_sqlite3.sh` pins, which +that script compiles in the job instead (the package's library crashes beside another +SQLite); and the .NET runtime. The repository itself holds no programs - no `.exe`, `.dll`, `.so` or any other binary that runs - and CI keeps it so with `Util/check-no-executables.rb`, which looks at what each tracked file is, not at its name. diff --git a/Util/check-no-executables.rb b/Util/check-no-executables.rb index 2cbd22cb8..bdd0dd9ef 100644 --- a/Util/check-no-executables.rb +++ b/Util/check-no-executables.rb @@ -13,16 +13,22 @@ # being called notes.txt, and an extension-only placeholder such as # Tests/Experiments/Loader/Extensions/fcntl.so - which is text - is not flagged. -def kind_of(head, size) +def kind_of(file, size) + head = file.read(4096) || "".b return "ELF" if head.start_with?("\x7FELF".b) return "WebAssembly" if head.start_with?("\0asm".b) if head.start_with?("MZ".b) && head.bytesize >= 0x40 + # The PE signature is where e_lfanew says, which may be past what was read. pe = head.byteslice(0x3c, 4).unpack1("V") - return "PE (Windows program or .NET assembly)" if pe + 4 <= size && head.byteslice(pe, 4) == "PE\0\0".b + if pe + 4 <= size + signature = pe + 4 <= head.bytesize ? head.byteslice(pe, 4) : (file.seek(pe) && file.read(4)) + return "PE (Windows program or .NET assembly)" if signature == "PE\0\0".b + end end case head.byteslice(0, 4)&.unpack1("N") when 0xFEEDFACE, 0xFEEDFACF, 0xCEFAEDFE, 0xCFFAEDFE then "Mach-O" when 0xCAFEBABE then "Mach-O universal binary or Java class" + when 0xCAFEBABF then "Mach-O universal binary (64-bit offsets)" end end @@ -31,8 +37,8 @@ def kind_of(head, size) found = paths.filter_map do |path| next unless File.file?(path) - head = File.open(path, "rb") { |f| f.read(4096) } || "".b - kind = kind_of(head, File.size(path)) + size = File.size(path) + kind = File.open(path, "rb") { |file| kind_of(file, size) } "#{path}: #{kind}" if kind end