fix(ci): make main build, lint and test green again - #2312
Merged
Conversation
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
…urce is cancelled
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Main has been red for three pushes. This turns every failing check green again.
What was broken
Compile every plugin(the run that prompted this):EtcdHttpClient's twoURLSessionDelegateclasses are notfinal, and under the Swift 6 language mode adopted in #2311 a non-final class cannot conform toSendable.EtcdDriverPluginwas the only target that failed, so the job never reached the test steps.Run unit testswas already failing before #2311, on the two pushes before it, in eight suites with three separate causes:...to…and updated only the guard test it added. Eleven assertions across six unit-test files and six UI-test files still pinned the old spelling. The UI ones look up menu items by title, so they would have timed out once the unit step stopped failing first.fields.removeValue(forKey: "extensions")toBridgeProxy. The preference-key guard is a text scan forforKey: "..."and cannot tell aUserDefaultskey from aDictionarykey."extensions"is an MCP wire field and can never be namespaced, so it belongs in the frozen baseline.MCPHandlerOutcomeGate.settle, which returns nothing. The settle guard scans for the bare substring.settle(, so it demanded three MCP call sites consume an answer that does not exist. The scan is now keyed on the receiver,tabExecution.settle(, and a second test asserts the registry is only ever reached through that property name, so the narrowing stays fail-closed.csv,tsv,json,ndjsonandparquet, so a.csvwith no inspector plugin now opens as a DuckDB connection rather than returning nil. The test still described the old contract. It now describes the new one, and a second case pins the three kinds that have no inspector at all.build-duckdb.shto a CMake source build and turned the pin into${DUCKDB_VERSION:-v1.5.2}, which the license inventory's regex cannot read, whilelicenses.ymlstill recorded v1.5.3 (a version that was never buildable: its checksum was a placeholder). The shipped library, the docs and the iOS xcframework are all 1.5.2, so the inventory and both build scripts now say 1.5.2.SwiftLintin the release workflow, which runs onv*tags only and therefore never ran on the PRs:measureColumnWidthreached 11 parameters in #2309, one over thefunction_parameter_countwarning that--strictturns into an error. The three sizing-budget parameters are now one value.Verification
xcodebuild build -scheme EtcdDriverPlugin: succeeds.xcodebuild test -only-testing:TableProTestswith the CI quarantine list applied: 11,520 tests, 1,373 suites, all pass.xcodebuild test -only-testing:TableProUITests: 78 tests, 3 failures, all three keyboard-driven (QueryFormatUnterminatedLiteral,QueryHistoryActions.testReturnInTheListLoadsTheSelectedEntry,QueryHistoryFocus.testArrowKeysKeepMovingThroughTheListAfterClickingARow) and all three green on the CI runner in run 32391276238. They need the app frontmost to receive keystrokes, which a machine in use cannot promise.swiftlint lint --strict: 0 violations in 1,606 files.No CHANGELOG entry: every behaviour these touch is either test-only or still unreleased.
The UI step, which the 60 minute cap had been hiding
The unit step went green, so the UI suite ran for the first time in days and turned up three more things.
Closing the last connection killed the app.
ConnectionCloseUITestsreported "application com.TablePro is not running" on CI and reproduced here. The crash report isEXC_BREAKPOINTin_dispatch_assert_queue_failunderswift_task_checkIsolated, from the cancel handler inDatabaseFileWatcher.startSource.DatabaseFileWatcheris@MainActor, so the handler passed tosetCancelHandlerinherited that isolation, and dispatch calls it oncom.apple.root.utility-qos; under the Swift 6 language mode that check traps instead of warning. Both handlers are@Sendablenow, which is what they always meant to be: the event handler already hops to the main actor with aTaskof its own, and the cancel handler only closes a file descriptor.Two suites that the timeout had never reached were querying rows that cannot match.
ResultStatusBarUITestsandStructureTabIdentityUITestsask forstaticTexts["Album"], but the object browser hosts its rows as cells, so the name arrives as the static text'svaluecarrying the object kind it reads out to VoiceOver ("Table: Album"), and the rows report as disabled so a plainclick()waits for a hittability that never comes.SidebarTableTabUITestsalready documented both facts and did it correctly; that knowledge is nowobjectBrowserRow(_:kind:in:)andclickAtCenter(_:)onUITestCase.StructureTabIdentityUITestsalso assertedisSelectedon a hosted radio button, which answers throughAXValueand reads false however the picker is set, the same workaroundOpenQuicklyCommandUITestscarries.RedisConnectionModeUITestshad gone stale in four places at once: the chooser is aList, sobuttons["Redis"]never matched; Redis sits below the fold, so a coordinate click landed outside the scroll view until the search field filters the list; one click only selects, and committing needs the double-click that firesprimaryAction; and the form's plugin fields arrive with no label or identifier at all. The form now labels its controls the way the rest of the connection form already does,connection-field-<id>fromConnectionFieldRowandHostListFieldRowplusconnection-form-hostandconnection-form-port, and the test reaches every element through those.The job's
timeout-minutesgoes to 90 to match what the suites actually cost, with the measured breakdown in the comment above it.Not fixed here
TableProTests/Localization/StringCatalogIntegrityTests.swiftfails locally and has never run in CI, because.gitignore:182's unanchoredLocalization/also matchesTableProTests/Localization/, so the file is not tracked. Its one failure is a guard defect rather than a bad translation: the source unit for"%1$@ chart of %2$@ by %3$@ with %4$d points"carries a%#@points@substitution declaringargNum: 4, formatSpecifier: "d", and the guard reads the placeholder as%@instead of resolving the substitution, so it flags four correct translations. Worth its own PR, since anchoring the ignore rule puts a never-run guard into CI.