Commit 08af0d5
committed
fix(golden): make zip-artifact hashing OS-deterministic for package pins
Real `sam package` zips the build artifact directory before "uploading"
it. The harness's S3Uploader.upload stub was hashing the resulting zip
bytes — but raw zip bytes embed OS-specific metadata (DOS timestamps,
Unix mode bits, central directory ordering), so the same source content
produced different digests on Linux vs Windows. The Windows runner saw
the package pins regenerate with new hashes and the corpus tests failed
on byte-exact diff:
- CodeUri: s3://golden-bucket/dd2bf2d8...
+ CodeUri: s3://golden-bucket/1c1f1e20...
Hash zip files via a normalized representation: sorted member names plus
each member's content sha256. The envelope metadata is excluded from the
digest, so identical source content produces an identical hash on every
OS. Non-zip artifacts continue to be hashed by raw bytes. Detection uses
zipfile.is_zipfile so .jar / .war and other zip-format artifacts are
treated the same as a Lambda zip.
Pins regenerated once with the new hash; from now on Linux and Windows
runners agree.1 parent 6b6d93b commit 08af0d5
4 files changed
Lines changed: 42 additions & 5 deletions
File tree
- tests/golden
- templates
- language_extensions/foreach_static_zip
- packageable_resources/lambda_function_zip
- sam_resources/serverless_function_zip
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
| 37 | + | |
37 | 38 | | |
38 | 39 | | |
39 | 40 | | |
| |||
140 | 141 | | |
141 | 142 | | |
142 | 143 | | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
143 | 151 | | |
144 | | - | |
145 | | - | |
| 152 | + | |
146 | 153 | | |
147 | 154 | | |
148 | 155 | | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
149 | 186 | | |
150 | 187 | | |
151 | 188 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | | - | |
| 9 | + | |
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | | - | |
| 9 | + | |
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
| 7 | + | |
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| |||
0 commit comments