chore(deps): bump actions/checkout from 4 to 6#4
Conversation
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v4...v6) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
LabelsThe following labels could not be found: Please fix the above issues or remove invalid values from |
|
Superseded by d9b1ff4 — all four GitHub Actions bumps landed together as a single commit on main after verifying each against |
|
OK, I won't notify you again about this release, but will get in touch when a new version is available. If you'd rather skip all updates until the next major or minor version, let me know by commenting If you change your mind, just re-open this PR and I'll resolve any conflicts on it. |
Adds the regression-gate workflow + actual stable benchmarks to back it. Previously the benchmarks/ project only contained the one-shot pre-impl spike harnesses; the v1.0 DoD also requires CI-runnable benchmarks with a regression threshold. New benchmarks (benchmarks/NetXlsx.Benchmarks/Benchmarks.cs): - WriteBenchmarks.ColdCreateAndSave — OPC packaging cost. Design §5 target: < 50ms. - WriteBenchmarks.Write5kRows — in-memory mixed-type write (proxy for the 30k-rows-in-memory §5 target). - WriteBenchmarks.StyledWrite_SmallPalette — CellStylePool dedup path (decision #4 / spike 1). 10k cells × 5 distinct styles. Design §5 target: > 500k styled cells/s. - WriteBenchmarks.StreamingWrite_50kRows — SXSSF streaming path (proxy for the 1M-rows-streaming §5 target). - ReadBenchmarks.OpenAndReadColumnSum — open + read 1k rows. All use ShortRun config (3 warmup × 3 iterations) so the full suite completes in ~45s on a modern laptop. New tooling (benchmarks/compare-bench.py): - Reads BDN's brief-JSON output. - Compares per-benchmark Statistics.Mean against a baseline. - Exits 1 if any benchmark regresses > threshold (default 15%, configurable via --threshold). - Reports improvements informationally but never fails on them. - Tolerates missing baseline (first run) and reports new/removed benchmarks. New workflow (.github/workflows/bench.yml): - Triggers on PRs and pushes touching src/, benchmarks/, or Directory.{Build,Packages}.props. - Caches a CI-hardware baseline keyed by hash of the source tree. Main pushes refresh the cache; PRs read it. - Runs the comparator with a 15% threshold (10% design DoD + 5% CI noise headroom). - Uploads results + baseline as artifacts for every run. Two-baseline model documented in benchmarks/README.md: - benchmarks/baseline/ — committed; dev-local reference for the "did my change regress on my machine" pre-PR check. Captured on a 12th-gen i9-12900 (fast hw, intentionally not the CI baseline). - CI cache — managed by the bench workflow; tied to GH Actions ubuntu-latest hw. The actual regression gate. Refreshed on every main push that touches a tracked path. The threshold sits at 15% (vs design's 10% DoD) because short-run BDN measurements on CI runners have higher variance than full statistical runs. Tighten back to 10% once we have a few months of CI-baseline data to calibrate against. Validation: local run produces 5 benchmarks (4 write + 1 read) in ~45s; comparator against the just-stored baseline correctly reports 0 regressions, 0 improvements, 5 unchanged.
Adds multi-run formatted-string support to random-access cells. New public value records mirror the CellStyle conventions (immutable, structural equality, nullable-axis "inherit existing" semantics): - RichText — sequence of one or more RichTextRun - RichTextRun — (Text, RichTextStyle) pair - RichTextStyle — font-only subset of CellStyle Per-run style is restricted to font axes (Bold, Italic, Underline, FontName, FontSize, Color). Excel's OOXML <r><rPr> element does not honor per-run fills, borders, alignment, or number format — exposing the full CellStyle on a run would silently drop those axes. Cell-level visual style continues through ICell.Style(CellStyle). Run fonts are pooled through the existing CellStylePool font cache (decision #4) — runs with identical font properties share one IFont across the workbook. GetRichText() returns non-null only when the cell carries explicit formatting runs (NumFormattingRuns > 0). A cell set via SetString returns null even though NPOI stores every string cell as an XSSFRichTextString internally. IStreamingCell.SetRichText is intentionally absent. NPOI's SXSSF SheetDataWriter (NPOI 2.7.x) reconstructs a fresh XSSFRichTextString from cell.StringCellValue at flush time, dropping all in-memory formatting runs. Per decision #7 (streaming type-honesty), the absence of the method mirrors the absence of the capability rather than silently degrading or throwing on call. Surfaced during impl by a streaming round-trip test; documented in implementation-notes.md. Surface (30 entries added to PublicAPI.Unshipped.txt): - NetXlsx.RichText (+ Runs, PlainText, ctors, structural equality) - NetXlsx.RichTextRun (+ Text, Style) - NetXlsx.RichTextStyle (+ Bold, Italic, Underline, FontName, FontSize, Color, Default) - ICell.SetRichText(RichText) - ICell.GetRichText() -> RichText? Tests (14 new in tests/NetXlsx.Tests/RichTextApiTests.cs): - value-type semantics (defaults, equality, validation) - in-memory round-trip (SetRichText → GetRichText) - file round-trip via Workbook.Open - GetRichText returns null for plain strings + non-string cells - MaxCellTextLength enforcement on concatenated plain text - Zero-length runs contribute no formatting - IStreamingCell type-honesty: reflection asserts no SetRichText Public-API snapshot + DisposedWorkbookMatrix updated. Design row I-50 added in docs/design.md §6.8.1 with rationale and the SXSSF streaming caveat. Implementation-notes entry captures the SXSSF serializer limitation, the font-only design choice, and the read-side "rich vs plain" discriminator. First slice of the v1.1 roadmap (rich text → tables → images → protection → validation → autofilter → named styles → custom converters → strict concurrency).
Adds a workbook-scoped name registry for CellStyle values.
Register once with a name; apply by name on cells or ranges.
Public surface (~6 PublicAPI.Unshipped entries):
- IWorkbook.RegisterStyle(name, CellStyle)
- IWorkbook.GetRegisteredStyle(name) // null if unknown
- IWorkbook.RegisteredStyleNames
- ICell.ApplyNamedStyle(name)
- IRange.ApplyNamedStyle(name)
Names are case-insensitive. Re-registering an existing name
replaces the definition. ApplyNamedStyle throws ArgumentException
with a friendly message ("No style is registered under 'X'. Use
IWorkbook.RegisterStyle before referencing the name.") when the
name is unknown — distinct from passing a null reference.
Backed by the existing style-pool dedup (decision #4) — equal
CellStyle values still share one underlying NPOI ICellStyle, so
naming is purely a caller-side convenience.
v1.1 named styles are an in-process convenience, NOT OOXML
named-style table entries. When a workbook is saved and reopened
via Workbook.Open, the per-cell visual style is preserved (via
style-pool dedup), but the name -> style map is not rehydrated —
Excel itself never saw the names. Real OOXML named-style table
integration (so styles persist by name across open/save) is
deferred to v1.2.
Coverage (+13 unit tests in tests/NetXlsx.Tests/NamedStyleTests.cs):
- Empty registry by default
- Register + get round-trip
- Case-insensitive lookup ("Header", "header", "HEADER" all match)
- GetRegisteredStyle returns null for unknown name
- RegisterStyle replaces existing
- RegisteredStyleNames enumerates all
- Reject null name, empty name, null style
- ICell.ApplyNamedStyle sets the cell's style
- ICell.ApplyNamedStyle throws ArgumentException for unknown name
- IRange.ApplyNamedStyle sets every cell in the range
- IRange.ApplyNamedStyle throws ArgumentException for unknown name
Disposed-workbook matrix updated for the three IWorkbook members
+ the ICell + IRange ApplyNamedStyle methods.
Decision I-57 added to docs/design.md §6.2.2.
Closes the v1.0 external-review recommendation #4 ("commit a date for NPOI 3.x evaluation or kick off v2 OOXML R&D in earnest"). The date commitment already exists — Spike 4-Q (NPOI AOT/trim re-check) and Spike 5-Q (NPOI OSMF posture re-check) in docs/scheduled-spikes.md are due 2026-08-16. What was missing was a v1.1-completion checkpoint confirming the cadence holds and recording the additional signal v1.1 produced. Added entries: docs/scheduled-spikes.md: - Spike 4-Q table: 2026-05-22 row (no re-test, cadence holds). - Spike 5-Q table: 2026-05-22 row noting the three NPOI-2.7.3 surprises v1.1 had to work around (XSSFTable.CreateColumn broken on fresh tables, ProtectSheet(null) means unprotect, XSSFSheet.RemoveTable absent). Verdict: hold pin; cadence holds; next re-assess 2026-08-16. docs/v2-ooxml-planning.md: - Status section gains a 2026-05-22 checkpoint summarizing the v1.1 NPOI-surprise count as additional signal in favor of evaluating alternatives when the upstream gates fire. - Next-milestone language tightens: the August spike re-checks are the explicit gating event for whether R&D-1 parallel spikes start. No code changes. No design row needed (these are operational schedule artifacts, not surface decisions).
Model xl/styles.xml on the SDK engine via a new OoxmlStylePool that dedups CellStyle values to a single cellXfs index (decision #4) and emits OOXML schema types (font/fill/border/numFmt/xf) directly. Wires the styling surface end to end: - ICell.Style (merge: non-null axes overlay, null inherit), NumberFormat, GetStyle, ApplyNamedStyle; IRange.Apply/ApplyNamedStyle (dense); IColumn.Width/WidthUnits/Hidden/SetDefaultStyle/ForEachPopulated; IRow.HeightInPoints/Hidden; IWorkbook style-pool diagnostics + in-memory named-style registry. - Unblocks the deferred date/time setters: SetDate (DateTime/DateOnly) / SetTime / SetDuration write the Excel serial and apply the workbook's default date/time/duration number format when the cell is unstyled (I-18/I-19, §7.9). GetDate/GetDateOnly and Kind==Date detect date number formats (builtin ids 14-22/45-47 plus custom date-token codes). The 1900/1904 epochs are honored, including Excel's 1900-02-29 leap bug. - Applies WorkbookOptions.DefaultFontName/Size to font index 0 on CreateOoxml and DateSystem.Excel1904 to workbookPr/@date1904. OpenOoxml adopts the file's stylesheet and default font untouched (lessons #8/#9). Stays within the parallel-engine rules: only Internal/Ooxml*.cs and the isolated NetXlsx.OoxmlEngine.Tests are touched; the NPOI engine and the existing suite are unchanged. OoxmlEngine.Tests: 30 -> 52, green on net8.0 + net10.0.
…-82) Implements the first half of the sheet/workbook structural surface on the SDK engine (the slice is split across sessions; panes/visibility/tab color/ protection/grouping follow). Merges (OoxmlSheet.Merges.cs): <mergeCells> written after <sheetData> in the worksheet's strict child order; container dropped (not left childless) when the last region is removed; @count kept in sync. Matches the NPOI engine contract — 1x1 no-op (I-38), overlap throws InvalidOperationException (sec 6.4), non-exact unmerge is a silent no-op, MergedRanges canonical A1:C3, and MergeCellsStyled styles every cell before merging so boundary-cell borders render (lesson #4). Named ranges (OoxmlWorkbook.Names.cs + OoxmlNamedRange.cs): stored as <definedNames> in workbook.xml between <sheets> and <calcPr>; sheet scope round-trips via localSheetId. Leading '=' stripped; names unique workbook-wide case-insensitively regardless of scope; Excel name rules validated in-engine (the SDK has no built-in validator). No public symbol added — all are existing interface members newly implemented internally, so the PublicAPI snapshot is unchanged. Both fixture families added to the schema-validation gate (clean under Microsoft365). Cross-checked against the NPOI-engine FreezeMergeHiddenTests (merge half) and NamedRangeApiTests — every assertion is satisfied, de-risking this surface's cutover.
Bumps actions/checkout from 4 to 6.
Release notes
Sourced from actions/checkout's releases.
... (truncated)
Changelog
Sourced from actions/checkout's changelog.
... (truncated)
Commits
de0fac2Fix tag handling: preserve annotations and explicit fetch-tags (#2356)064fe7fAdd orchestration_id to git user-agent when ACTIONS_ORCHESTRATION_ID is set (...8e8c483Clarify v6 README (#2328)033fa0dAdd worktree support for persist-credentials includeIf (#2327)c2d88d3Update all references from v5 and v4 to v6 (#2314)1af3b93update readme/changelog for v6 (#2311)71cf226v6-beta (#2298)069c695Persist creds to a separate file (#2286)ff7abcdUpdate README to include Node.js 24 support details and requirements (#2248)08c6903Prepare v5.0.0 release (#2238)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)