Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
a0c47bc
build(linux-drivers): take tiberius 0.13 from crates.io
datlechin Oct 12, 2026
cc89cf9
refactor(linux-core): give column kinds and catalog types their payloads
datlechin Oct 12, 2026
b2222ca
refactor(linux-core): add the v2 connection contract and table defini…
datlechin Oct 12, 2026
f2a9fe7
refactor(linux-core): build page, count, export and save SQL through …
datlechin Oct 12, 2026
4eccf18
test(linux): add v2 test doubles, conformance suites and fixture options
datlechin Oct 12, 2026
67d5cf1
refactor(linux-drivers): move the SQLite driver to contract v2
datlechin Oct 12, 2026
8d23871
fix(linux-core): lex numeric constants as one token
datlechin Oct 12, 2026
f65d647
refactor(linux-drivers): move PostgreSQL to tokio-postgres on contrac…
datlechin Oct 12, 2026
1f51cab
refactor(linux-drivers): move SQL Server to contract v2 on tiberius 0.13
datlechin Oct 12, 2026
6ecd6ac
refactor(linux-drivers): move ClickHouse to contract v2 over our tran…
datlechin Oct 12, 2026
f7e12fe
refactor(linux-drivers): move MySQL and MariaDB to contract v2 withou…
datlechin Oct 12, 2026
a786fc2
refactor(linux-core): fill the gaps the driver switch found
datlechin Oct 12, 2026
15425a0
refactor(linux): run SSH through OpenSSH and add the session crate
datlechin Oct 12, 2026
0c6b6bb
refactor(linux-app): start moving the app onto the session crate
datlechin Oct 12, 2026
776ca75
refactor(linux-app): continue moving the app onto the session crate
datlechin Oct 12, 2026
84c147a
fix(linux-app): end credential prompts without choose_future
datlechin Oct 12, 2026
a91ce63
build(linux-app): list the session and prompt files for translation
datlechin Oct 12, 2026
5989999
fix(linux): keep the secrets step off the developer's login keyring
datlechin Oct 12, 2026
5811951
refactor(linux-app): rebuild the connect dialog as a template subclass
datlechin Oct 12, 2026
2d4975f
refactor(linux-app): run editor scripts per statement with a results …
datlechin Oct 12, 2026
89a9b2b
refactor(linux): delete the v1 dialect stand-ins and rust_decimal
datlechin Oct 12, 2026
9bda4d8
fix(linux-drivers): box the SQL Server login future
datlechin Oct 13, 2026
fbb34b0
fix(linux-drivers): send parameterless SQL Server writes without @params
datlechin Oct 13, 2026
c75f02a
fix(linux-drivers): classify a mid-handshake hang-up as a TLS refusal
datlechin Oct 13, 2026
34d77f8
test(linux-drivers): compare the sql_variant datetime2 at nanoseconds
datlechin Oct 13, 2026
a87cb41
refactor(linux-app): word script diagnostics in error_text
datlechin Oct 13, 2026
4db255d
ci(linux): bound docker tests and the SQL Server fixture's memory
datlechin Oct 13, 2026
4102505
fix(linux-ssh): refuse shell characters in SSH hosts, users and jump …
datlechin Oct 13, 2026
a60d75d
fix(linux-ssh): send a stored password only to its own host
datlechin Oct 13, 2026
76e4968
fix(linux-drivers): keep SQLite statements out of sqlx's cache
datlechin Oct 13, 2026
5e33f17
fix(linux-drivers): report a MySQL write lost in flight as unknown
datlechin Oct 13, 2026
c6c2c2c
fix(linux-drivers): bind SQL Server datetime keys in the column's type
datlechin Oct 13, 2026
d2e3884
fix(linux-core): edit XML cells as text
datlechin Oct 13, 2026
01a63cd
fix(linux-core): search json, xml and enum columns as text
datlechin Oct 13, 2026
f90609c
fix(linux-app): ask before switching connection drops unsaved work
datlechin Oct 13, 2026
b33d3a8
test(linux-drivers): hold three SQL Server cancel tests until tiberiu…
datlechin Oct 13, 2026
d288c17
fix(linux-drivers): count a server-enforced timeout as the server's a…
datlechin Oct 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
12 changes: 10 additions & 2 deletions .claude/skills/fix-issue/scripts/lib/platform-linux.sh
Original file line number Diff line number Diff line change
Expand Up @@ -433,12 +433,20 @@ platform_step() {
require_tool dbus-run-session
require_tool gnome-keyring-daemon
log="$(new_log secrets)"
# A private bus with a throwaway keyring, so the tests never touch the user's real one.
run_appending "$log" dbus-run-session -- bash -c \
# gnome-keyring-daemon keeps its keyrings under XDG_DATA_HOME and its control socket
# under XDG_RUNTIME_DIR. A private bus alone left both pointing at the user's own, so
# this step rewrote the developer's login keyring with the test password. Both now
# point at a directory that exists only for this run.
local keyring_home
keyring_home="$(mktemp -d)" || { STATUS=INCONCLUSIVE; note "cause: no temporary directory for the throwaway keyring. Nothing was run."; emit "" 2; }
mkdir -m 700 "$keyring_home/data" "$keyring_home/run"
run_appending "$log" env XDG_DATA_HOME="$keyring_home/data" XDG_RUNTIME_DIR="$keyring_home/run" \
dbus-run-session -- bash -c \
"gnome-keyring-daemon --components=secrets --daemonize --unlock <<< ci > /dev/null \
&& meson devenv -C '$BUILD_DIR' --workdir '$LINUX_DIR' \
cargo test --locked -p tablepro-storage --test secret_service -- --ignored"
code=$?
rm -rf "$keyring_home"
report_tests "$log" 0
[ $code -ne 0 ] && [ "$STATUS" = PASS ] && STATUS=FAIL
diagnose_environment "$log" && STATUS=INCONCLUSIVE
Expand Down
62 changes: 62 additions & 0 deletions .github/workflows/build-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -204,3 +204,65 @@ jobs:
with:
name: junit-${{ matrix.package }}
path: linux/target/nextest/ci/junit.xml

integration-session:
# The session crate builds tablepro-storage, which links GIO 2.88,
# and the host runner ships 2.80, so this entry runs in the fast
# job's image instead of the matrix above. The host's Docker socket
# is mounted; testcontainers sees /.dockerenv and reaches the
# containers it starts through the bridge gateway.
name: Docker tests (tablepro-session)
runs-on: ubuntu-24.04
needs: fast
container:
image: ubuntu:26.04
env:
DEBIAN_FRONTEND: noninteractive
options: -v /var/run/docker.sock:/var/run/docker.sock
defaults:
run:
working-directory: linux
steps:
- name: Install git
run: |
apt-get update
apt-get install -y --no-install-recommends ca-certificates git
git config --global --add safe.directory "$GITHUB_WORKSPACE"
working-directory: /
- uses: actions/checkout@v5
with:
ref: ${{ github.event_name == 'schedule' && 'linux' || github.ref }}
- name: Install system dependencies
# The glib, sqlite and clang development packages the fast job
# builds storage with, plus openssh-client for the tunnel tests.
run: |
apt-get install -y --no-install-recommends \
build-essential \
curl \
pkgconf \
libglib2.0-dev \
libsqlite3-dev \
clang \
libclang-dev \
openssh-client
- uses: dtolnay/rust-toolchain@ce678459e9fc7500d337468f904b95f1b5c10b5e # 1.98
with:
toolchain: "1.98"
- uses: Swatinem/rust-cache@v2
with:
workspaces: linux
key: tablepro-session
- uses: taiki-e/install-action@3f74d7c16a4242f1c95561e98edc25d36adb4375 # v2.87.12
with:
tool: cargo-nextest@0.9.144
- name: Verify docker is available
# No Docker CLI in the image; the API answers on the socket.
run: curl --fail --silent --show-error --unix-socket /var/run/docker.sock http://localhost/_ping
- name: Docker tests
run: cargo nextest run --locked --profile ci -p tablepro-session --run-ignored only
- name: Upload JUnit report
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: junit-tablepro-session
path: linux/target/nextest/ci/junit.xml
21 changes: 21 additions & 0 deletions linux/.config/nextest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,20 @@ mssql = { max-threads = 1 }
clickhouse = { max-threads = 1 }
ssh = { max-threads = 1 }
fixtures = { max-threads = 1 }
session = { max-threads = 1 }

[profile.default]
# tiberius 0.13 stops reading at the first end of message, so an attention
# sent while SQL Server is still waiting is never acknowledged and the
# connection is dropped: https://github.com/tiberius-rs/tiberius/issues/459.
# Remove once a release has the fix.
default-filter = """
not (package(tablepro-driver-mssql) & (
test(=cancellation::editor_waitfor_cancel_then_select1_same_client)
| test(=cancellation::pooled_query_bound_waitfor_deadline_server_cancelled_client_reused)
| test(=conformance_engine::suite::editor_cancel_reports_cancelled_and_session_stays_ready)
))
"""

[[profile.default.overrides]]
filter = 'package(tablepro-driver-postgres)'
Expand All @@ -30,8 +44,15 @@ test-group = 'ssh'
filter = 'package(tablepro-test-fixtures)'
test-group = 'fixtures'

[[profile.default.overrides]]
filter = 'package(tablepro-session)'
test-group = 'session'

[profile.ci]
fail-fast = false
# A hung test fails with its name after five minutes. Without a bound it
# holds the runner until the job dies with no report.
slow-timeout = { period = "60s", terminate-after = 5 }

[profile.ci.junit]
path = "junit.xml"
12 changes: 12 additions & 0 deletions linux/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,15 @@ The format is based on [Keep a Changelog 1.1.0](https://keepachangelog.com/en/1.
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

### Added

- Password prompt on connect when the keyring holds no password, with a choice to remember it.
- SSH tunnels through the system OpenSSH client, using your SSH agent, host aliases and jump hosts.
- Security group in the connect dialog: encryption mode, CA certificate, client certificate and TLS server name.
- SQLite file chooser in the connect dialog, with New Database to create a file.
- Results list in the SQL editor with one entry per statement, its rows affected or error, and the open transaction.

### Fixed

- Format, a query opened from history and a loaded SQL file could not be undone with Ctrl+Z.
Loading
Loading