Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,9 @@ jobs:
set -euo pipefail
sudo apt-get update -qq && sudo apt-get install -y -qq apt-utils
version="$(sed -n 's/.*<Version>\(.*\)<\/Version>.*/\1/p' Directory.Build.props | head -1)"
# A pre-release gets no package, so a branch whose version is one
# builds the package for the release it leads up to.
version="${version%%-*}"
sh packaging/apt/build-deb.sh ./artifacts/selfcontained "$version" ${{ matrix.arch }} ./artifacts/deb
sh packaging/apt/install-test.sh ./artifacts/deb "$version" ${{ matrix.arch }}

Expand Down
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,6 @@
`-p:Version=<X.Y.Z>` derived from the pushed `v*` tag, so the
published nupkg / binary metadata matches the GitHub Release.
-->
<Version>0.4.1</Version>
<Version>0.5.0-beta.1</Version>
</PropertyGroup>
</Project>
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

`ivi-cli` is an integrated CLI for managing, diagnosing, and operating instruments addressed via VISA/IVI.

> Status: **v0.4.1 (pre-1.0.0).** Landed: CLI core, HiSLIP / VXI-11 / SOCKET gateways, scenario-driven mock-VISA container (ghcr.io/shortarrow/ivi-cli-mock), a USB/IP gateway that exports a mock as a USB instrument or a COM port, serial instruments with or without a VISA runtime, Management HTTP / WebSocket API with PAT + TLS + audit, OpenTelemetry, and LAN + USB discovery (LXI mDNS + VXI-11 broadcast, the installed VISA runtime for USB, plus opt-in `--port` socket sweep). Breaking changes are still possible. See [CHANGELOG.md](docs/CHANGELOG.md).
> Status: **v0.5.0-beta.1 (pre-1.0.0).** Landed: CLI core, HiSLIP / VXI-11 / SOCKET gateways, scenario-driven mock-VISA container (ghcr.io/shortarrow/ivi-cli-mock), a USB/IP gateway that exports a mock as a USB instrument or a COM port, serial instruments with or without a VISA runtime, Management HTTP / WebSocket API with PAT + TLS + audit, OpenTelemetry, and LAN + USB discovery (LXI mDNS + VXI-11 broadcast, the installed VISA runtime for USB, plus opt-in `--port` socket sweep). Breaking changes are still possible. See [CHANGELOG.md](docs/CHANGELOG.md).

## Highlights

Expand Down
50 changes: 26 additions & 24 deletions docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,24 @@ All notable changes to ivi-cli are documented here. Format roughly follows

## [Unreleased]

### Added
## [0.5.0-beta.1] — 2026-10-20

- **Debian packages for amd64 and arm64 ship with each release.**
`ivicli_<version>-1_<arch>.deb` carries the self-contained build, so it
needs no .NET runtime, and installs `/usr/bin/ivicli`. Each one is
installed with `apt` in Debian 12 and Ubuntu 24.04 containers before
the release is published. They are meant for the APT repository at
`pkg.shortarrow.jp`, which is not live yet: a package depends on the
repository's `shortarrow-archive-keyring`, so it does not install from
the file alone.
### Changed (breaking)

## [0.4.1] — 2026-10-19
- **A device's `timeout_ms` bounds every operation.** It bounded none:
the VISA backend timed out after 5 seconds whatever it said, the VXI-11
client sent a fixed 5-second `io_timeout`, and HiSLIP and SOCKET waited
for a silent instrument until the command was cancelled. Now every
write, query, read and trigger fails with a timeout once `timeout_ms`
has passed, and the next operation reconnects so a late reply is never
taken for a later answer. Opening a session gets at least 5 seconds, or
`timeout_ms` if that is longer. **A measurement that takes longer than its
device's `timeout_ms` now fails where it used to wait, with the
configuration unchanged; `visa add` and `visa scan --add` write 3000 ms
unless told otherwise. Raise `timeout_ms` for such devices.** The VXI-11 gateway reports
an instrument's timeout as VXI-11 error 15. `docs/conformance.md` lists
which of these rules come from VISA, VXI-11 and HiSLIP and which ivi-cli
defines where they are silent.

### Added

Expand Down Expand Up @@ -57,6 +63,16 @@ All notable changes to ivi-cli are documented here. Format roughly follows
or the `visa asrl add` line that would register it, and `visa scan --add`
registers them by port name.

- **Debian packages for amd64 and arm64 ship with each stable release,
from 0.5.0.** A pre-release such as this one carries none.
`ivicli_<version>-1_<arch>.deb` carries the self-contained build, so it
needs no .NET runtime, and installs `/usr/bin/ivicli`. Each one is
installed with `apt` in Debian 12 and Ubuntu 24.04 containers before
the release is published. They are meant for the APT repository at
`pkg.shortarrow.jp`, which is not live yet: a package depends on the
repository's `shortarrow-archive-keyring`, so it does not install from
the file alone.

### Fixed

- **`visa scan` says when a local address is a duplicate.** On Windows, an
Expand Down Expand Up @@ -87,20 +103,6 @@ All notable changes to ivi-cli are documented here. Format roughly follows
service name, left a file that the next command could not read. Every
string is now written as an escaped TOML string.

- **A device's `timeout_ms` bounds every operation.** It bounded none:
the VISA backend timed out after 5 seconds whatever it said, the VXI-11
client sent a fixed 5-second `io_timeout`, and HiSLIP and SOCKET waited
for a silent instrument until the command was cancelled. Now every
write, query, read and trigger fails with a timeout once `timeout_ms`
has passed, and the next operation reconnects so a late reply is never
taken for a later answer. Opening a session gets at least 5 seconds, or
`timeout_ms` if that is longer. **A measurement that takes longer than its
device's `timeout_ms` (3000 ms unless set) now fails where it used to
wait; raise `timeout_ms` for such devices.** The VXI-11 gateway reports
an instrument's timeout as VXI-11 error 15. `docs/conformance.md` lists
which of these rules come from VISA, VXI-11 and HiSLIP and which ivi-cli
defines where they are silent.

- **The VXI-11 gateway honours the client's `io_timeout`.** It
bounded each call by the routed device's `timeout_ms` instead, so a
client that allowed longer got error 15 early, and one that allowed
Expand Down
2 changes: 1 addition & 1 deletion docs/README.jp.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

`ivi-cli` は、VISA/IVI 経由で計測器を管理・診断・操作する統合 CLI です。

> ステータス: **v0.4.1 (pre-1.0.0)。** 実装済み: CLI core、HiSLIP / VXI-11 / SOCKET gateway、シナリオ駆動 mock-VISA コンテナ (ghcr.io/shortarrow/ivi-cli-mock)、mock を USB 計測器または COM ポートとして見せる USB/IP gateway、VISA ランタイムの有無を問わないシリアル計測器、Management HTTP / WebSocket API (PAT + TLS + audit)、OpenTelemetry、LAN と USB の discovery (LXI mDNS + VXI-11 broadcast、USB はインストール済み VISA ランタイム経由、opt-in の `--port` socket sweep)。1.0.0 までは破壊的変更の可能性が残ります。[CHANGELOG.md](CHANGELOG.md) も参照。
> ステータス: **v0.5.0-beta.1 (pre-1.0.0)。** 実装済み: CLI core、HiSLIP / VXI-11 / SOCKET gateway、シナリオ駆動 mock-VISA コンテナ (ghcr.io/shortarrow/ivi-cli-mock)、mock を USB 計測器または COM ポートとして見せる USB/IP gateway、VISA ランタイムの有無を問わないシリアル計測器、Management HTTP / WebSocket API (PAT + TLS + audit)、OpenTelemetry、LAN と USB の discovery (LXI mDNS + VXI-11 broadcast、USB はインストール済み VISA ランタイム経由、opt-in の `--port` socket sweep)。1.0.0 までは破壊的変更の可能性が残ります。[CHANGELOG.md](CHANGELOG.md) も参照。

## ハイライト

Expand Down
4 changes: 2 additions & 2 deletions docs/guides/install.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Every release carries a self-contained archive per platform, named
runtime bundled, so it runs on a machine with no .NET at all.

```sh
version=0.4.1
version=0.4.0
curl -fsSL -o ivicli.zip \
"https://github.com/ShortArrow/ivi-cli/releases/download/v${version}/ivicli-${version}-linux-x64.zip"
unzip -j ivicli.zip ivicli -d ~/.local/bin
Expand Down Expand Up @@ -108,7 +108,7 @@ backend:

```toml
[tools]
"github:ShortArrow/ivi-cli" = { version = "0.4.1", bin = "ivicli" }
"github:ShortArrow/ivi-cli" = { version = "0.4.0", bin = "ivicli" }
```

`bin = "ivicli"` is required: the backend looks for an executable named
Expand Down
2 changes: 1 addition & 1 deletion src/IviCli.Api/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
"ivicli.application": {
"type": "Project",
"dependencies": {
"IviCli.Domain": "[0.4.1, )",
"IviCli.Domain": "[0.5.0-beta.1, )",
"TestableIO.System.IO.Abstractions": "[22.3.0, )"
}
},
Expand Down
2 changes: 1 addition & 1 deletion src/IviCli.Backends.Fake/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
"ivicli.application": {
"type": "Project",
"dependencies": {
"IviCli.Domain": "[0.4.1, )",
"IviCli.Domain": "[0.5.0-beta.1, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.12, )",
"Microsoft.Extensions.Logging.Abstractions": "[10.0.12, )",
"TestableIO.System.IO.Abstractions": "[22.3.0, )"
Expand Down
2 changes: 1 addition & 1 deletion src/IviCli.Backends.HiSlip/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"ivicli.application": {
"type": "Project",
"dependencies": {
"IviCli.Domain": "[0.4.1, )",
"IviCli.Domain": "[0.5.0-beta.1, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.12, )",
"Microsoft.Extensions.Logging.Abstractions": "[10.0.12, )",
"TestableIO.System.IO.Abstractions": "[22.3.0, )"
Expand Down
2 changes: 1 addition & 1 deletion src/IviCli.Backends.Local/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
"ivicli.application": {
"type": "Project",
"dependencies": {
"IviCli.Domain": "[0.4.1, )",
"IviCli.Domain": "[0.5.0-beta.1, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.12, )",
"Microsoft.Extensions.Logging.Abstractions": "[10.0.12, )",
"TestableIO.System.IO.Abstractions": "[22.3.0, )"
Expand Down
2 changes: 1 addition & 1 deletion src/IviCli.Backends.Lxi/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@
"ivicli.application": {
"type": "Project",
"dependencies": {
"IviCli.Domain": "[0.4.1, )",
"IviCli.Domain": "[0.5.0-beta.1, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.12, )",
"Microsoft.Extensions.Logging.Abstractions": "[10.0.12, )",
"TestableIO.System.IO.Abstractions": "[22.3.0, )"
Expand Down
2 changes: 1 addition & 1 deletion src/IviCli.Backends.Replay/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"ivicli.application": {
"type": "Project",
"dependencies": {
"IviCli.Domain": "[0.4.1, )",
"IviCli.Domain": "[0.5.0-beta.1, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.12, )",
"Microsoft.Extensions.Logging.Abstractions": "[10.0.12, )",
"TestableIO.System.IO.Abstractions": "[22.3.0, )"
Expand Down
2 changes: 1 addition & 1 deletion src/IviCli.Backends.Serial/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@
"ivicli.application": {
"type": "Project",
"dependencies": {
"IviCli.Domain": "[0.4.1, )",
"IviCli.Domain": "[0.5.0-beta.1, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.12, )",
"Microsoft.Extensions.Logging.Abstractions": "[10.0.12, )",
"TestableIO.System.IO.Abstractions": "[22.3.0, )"
Expand Down
2 changes: 1 addition & 1 deletion src/IviCli.Backends.Socket/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"ivicli.application": {
"type": "Project",
"dependencies": {
"IviCli.Domain": "[0.4.1, )",
"IviCli.Domain": "[0.5.0-beta.1, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.12, )",
"Microsoft.Extensions.Logging.Abstractions": "[10.0.12, )",
"TestableIO.System.IO.Abstractions": "[22.3.0, )"
Expand Down
2 changes: 1 addition & 1 deletion src/IviCli.Backends.Vxi11/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
"ivicli.application": {
"type": "Project",
"dependencies": {
"IviCli.Domain": "[0.4.1, )",
"IviCli.Domain": "[0.5.0-beta.1, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.12, )",
"Microsoft.Extensions.Logging.Abstractions": "[10.0.12, )",
"TestableIO.System.IO.Abstractions": "[22.3.0, )"
Expand Down
28 changes: 14 additions & 14 deletions src/IviCli.Cli/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -561,14 +561,14 @@
"ivicli.api": {
"type": "Project",
"dependencies": {
"IviCli.Application": "[0.4.1, )",
"IviCli.Application": "[0.5.0-beta.1, )",
"Microsoft.AspNetCore.OpenApi": "[10.0.12, )"
}
},
"ivicli.application": {
"type": "Project",
"dependencies": {
"IviCli.Domain": "[0.4.1, )",
"IviCli.Domain": "[0.5.0-beta.1, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.12, )",
"Microsoft.Extensions.Logging.Abstractions": "[10.0.12, )",
"TestableIO.System.IO.Abstractions": "[22.3.0, )"
Expand All @@ -577,30 +577,30 @@
"ivicli.backends.fake": {
"type": "Project",
"dependencies": {
"IviCli.Application": "[0.4.1, )",
"IviCli.Application": "[0.5.0-beta.1, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.12, )",
"Microsoft.Extensions.Logging.Abstractions": "[10.0.12, )"
}
},
"ivicli.backends.hislip": {
"type": "Project",
"dependencies": {
"IviCli.Application": "[0.4.1, )",
"IviCli.Application": "[0.5.0-beta.1, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.12, )"
}
},
"ivicli.backends.local": {
"type": "Project",
"dependencies": {
"IviCli.Application": "[0.4.1, )",
"IviCli.Application": "[0.5.0-beta.1, )",
"IviFoundation.Visa": "[8.0.2, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.12, )"
}
},
"ivicli.backends.lxi": {
"type": "Project",
"dependencies": {
"IviCli.Application": "[0.4.1, )",
"IviCli.Application": "[0.5.0-beta.1, )",
"Makaretu.Dns": "[2.0.1, )",
"Makaretu.Dns.Multicast": "[0.27.0, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.12, )",
Expand All @@ -610,29 +610,29 @@
"ivicli.backends.replay": {
"type": "Project",
"dependencies": {
"IviCli.Application": "[0.4.1, )",
"IviCli.Application": "[0.5.0-beta.1, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.12, )"
}
},
"ivicli.backends.serial": {
"type": "Project",
"dependencies": {
"IviCli.Application": "[0.4.1, )",
"IviCli.Application": "[0.5.0-beta.1, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.12, )",
"System.IO.Ports": "[10.0.12, )"
}
},
"ivicli.backends.socket": {
"type": "Project",
"dependencies": {
"IviCli.Application": "[0.4.1, )",
"IviCli.Application": "[0.5.0-beta.1, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.12, )"
}
},
"ivicli.backends.vxi11": {
"type": "Project",
"dependencies": {
"IviCli.Application": "[0.4.1, )",
"IviCli.Application": "[0.5.0-beta.1, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.12, )",
"Microsoft.Extensions.Logging.Abstractions": "[10.0.12, )"
}
Expand All @@ -643,8 +643,8 @@
"ivicli.infrastructure": {
"type": "Project",
"dependencies": {
"IviCli.Application": "[0.4.1, )",
"IviCli.Plugin": "[0.4.1, )",
"IviCli.Application": "[0.5.0-beta.1, )",
"IviCli.Plugin": "[0.5.0-beta.1, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.12, )",
"Microsoft.Extensions.Logging.Abstractions": "[10.0.12, )",
"TestableIO.System.IO.Abstractions": "[22.3.0, )",
Expand All @@ -655,13 +655,13 @@
"ivicli.plugin": {
"type": "Project",
"dependencies": {
"IviCli.Application": "[0.4.1, )"
"IviCli.Application": "[0.5.0-beta.1, )"
}
},
"ivicli.server": {
"type": "Project",
"dependencies": {
"IviCli.Application": "[0.4.1, )",
"IviCli.Application": "[0.5.0-beta.1, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.12, )",
"Microsoft.Extensions.Logging.Abstractions": "[10.0.12, )"
}
Expand Down
4 changes: 2 additions & 2 deletions src/IviCli.Infrastructure/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@
"ivicli.application": {
"type": "Project",
"dependencies": {
"IviCli.Domain": "[0.4.1, )",
"IviCli.Domain": "[0.5.0-beta.1, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.12, )",
"Microsoft.Extensions.Logging.Abstractions": "[10.0.12, )",
"TestableIO.System.IO.Abstractions": "[22.3.0, )"
Expand All @@ -67,7 +67,7 @@
"ivicli.plugin": {
"type": "Project",
"dependencies": {
"IviCli.Application": "[0.4.1, )"
"IviCli.Application": "[0.5.0-beta.1, )"
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/IviCli.Plugin/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"ivicli.application": {
"type": "Project",
"dependencies": {
"IviCli.Domain": "[0.4.1, )",
"IviCli.Domain": "[0.5.0-beta.1, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.12, )",
"Microsoft.Extensions.Logging.Abstractions": "[10.0.12, )",
"TestableIO.System.IO.Abstractions": "[22.3.0, )"
Expand Down
2 changes: 1 addition & 1 deletion src/IviCli.Server/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
"ivicli.application": {
"type": "Project",
"dependencies": {
"IviCli.Domain": "[0.4.1, )",
"IviCli.Domain": "[0.5.0-beta.1, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.12, )",
"Microsoft.Extensions.Logging.Abstractions": "[10.0.12, )",
"TestableIO.System.IO.Abstractions": "[22.3.0, )"
Expand Down
Loading
Loading