From 4fc1fb7210789e6139dcb6c40ead011c7e8c1406 Mon Sep 17 00:00:00 2001 From: Martin Ahindura Date: Fri, 30 Oct 2026 11:27:10 +0100 Subject: [PATCH 1/5] fix: build every Go module with a toolchain that blocks the compromised eMudhra CAs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Go 1.27.3 and 1.26.10 filter out any chain containing one of the eMudhra intermediates whose keys leaked (CVE-2026-111943, go.dev/issue/82345). The fix is in crypto/x509 in the toolchain, not in a dependency, so the only way to get it is to build with a patched Go — and an already-built binary keeps the old behaviour until it is rebuilt. The floor is 1.27.3 rather than 1.26.10 because a `go 1.26.10` directive is also satisfied by 1.27.0-1.27.2, which are unpatched; 1.27.3 is the lowest version from which every greater one carries the fix. That raises the minimum Go for downstream users of qpi-client/go, which is the intent for a trust fix in a client SDK. --- .github/workflows/ci.yml | 16 ++++++++-------- CHANGELOG.md | 9 +++++++++ e2e/go.mod | 2 +- qpi-client/go/go.mod | 2 +- qpi-driver/go/go.mod | 2 +- qpi-ui/go.mod | 2 +- 6 files changed, 21 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 48a7ede4..caefb2eb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,7 +24,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.26.x' + go-version: '1.27.x' cache-dependency-path: 'qpi-ui/go.sum' - name: Set up uv @@ -69,7 +69,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.26.x' + go-version: '1.27.x' cache-dependency-path: 'qpi-ui/go.sum' - name: Set up uv @@ -137,7 +137,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.26.x' + go-version: '1.27.x' cache-dependency-path: 'qpi-client/go/go.sum' @@ -209,7 +209,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - go-version: ['1.26.x'] + go-version: ['1.27.x'] steps: - name: Checkout Code @@ -265,7 +265,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.26.x' + go-version: '1.27.x' cache-dependency-path: 'qpi-ui/go.sum' - name: Set up uv @@ -315,7 +315,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.26.x' + go-version: '1.27.x' cache-dependency-path: 'qpi-driver/go/go.sum' - name: Set up uv @@ -496,7 +496,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.26.x' + go-version: '1.27.x' - name: Set up Node.js uses: actions/setup-node@v4 @@ -552,7 +552,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.26.x' + go-version: '1.27.x' - name: Set up Node.js uses: actions/setup-node@v4 diff --git a/CHANGELOG.md b/CHANGELOG.md index dd80423b..7cdcc8cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,15 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project follows versions of format `{year}.{month}.{patch_number}`. +## [Unreleased] + +### Changed + +- `go`: every Go module requires Go 1.27.3 and CI builds on 1.27.x, so nothing is built with + a toolchain that still trusts the compromised eMudhra intermediate CAs (CVE-2026-111943, + fixed in Go 1.27.3 and 1.26.10). A binary built before this keeps trusting certificates + issued from the leaked keys until it is rebuilt. + ## [0.4.2] - 2026-08-16 ### Added diff --git a/e2e/go.mod b/e2e/go.mod index e0b55d42..8142291d 100644 --- a/e2e/go.mod +++ b/e2e/go.mod @@ -1,6 +1,6 @@ module smoke -go 1.21 +go 1.27.3 replace github.com/sopherapps/qpi/qpi-client/go => ../qpi-client/go diff --git a/qpi-client/go/go.mod b/qpi-client/go/go.mod index 01869c3b..6760787e 100644 --- a/qpi-client/go/go.mod +++ b/qpi-client/go/go.mod @@ -1,3 +1,3 @@ module github.com/sopherapps/qpi/qpi-client/go -go 1.21 +go 1.27.3 diff --git a/qpi-driver/go/go.mod b/qpi-driver/go/go.mod index f7c1cba6..88671916 100644 --- a/qpi-driver/go/go.mod +++ b/qpi-driver/go/go.mod @@ -1,6 +1,6 @@ module github.com/sopherapps/qpi/qpi-driver/go -go 1.21 +go 1.27.3 require ( github.com/spf13/cobra v1.8.1 diff --git a/qpi-ui/go.mod b/qpi-ui/go.mod index 3561459c..7c675789 100644 --- a/qpi-ui/go.mod +++ b/qpi-ui/go.mod @@ -1,6 +1,6 @@ module qpi -go 1.26.3 +go 1.27.3 require ( github.com/go-playground/validator/v10 v10.30.3 From 21c830906f5171a80b18694bdc3c8f58650c3cf2 Mon Sep 17 00:00:00 2001 From: Martin Ahindura Date: Fri, 30 Oct 2026 11:36:43 +0100 Subject: [PATCH 2/5] fix: drop the distrusted eMudhra roots from the Python trust store MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit certifi 2026.5.20 predates Mozilla's removal of emSign ECC Root CA - G3 on 2026-10-20, so the Python client and driver still carried it. 2026.10.23 ships 118 roots against the old 119: emSign ECC Root CA - C3, emSign ECC Root CA - G3 and emSign Root CA - C1 are gone, emSign Root CA - G1 stays. Go's crypto/x509 denylist does nothing here — these processes verify through certifi, not through the Go toolchain. uv rewrote both locks from format revision 3 to 5; setup-uv installs the latest uv in CI, so it reads either. --- CHANGELOG.md | 3 +++ qpi-client/py/uv.lock | 8 ++++---- qpi-driver/py/uv.lock | 8 ++++---- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7cdcc8cb..0788d6b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,9 @@ and this project follows versions of format `{year}.{month}.{patch_number}`. a toolchain that still trusts the compromised eMudhra intermediate CAs (CVE-2026-111943, fixed in Go 1.27.3 and 1.26.10). A binary built before this keeps trusting certificates issued from the leaked keys until it is rebuilt. +- `qpi-client/py`, `qpi-driver/py`: certifi moves to 2026.10.23, which drops three of the + four eMudhra roots — `emSign ECC Root CA - G3` among them. The pinned 2026.5.20 bundle + still trusted them, and Go's denylist covers only Go. ## [0.4.2] - 2026-08-16 diff --git a/qpi-client/py/uv.lock b/qpi-client/py/uv.lock index 09b197fc..e69fb8a1 100644 --- a/qpi-client/py/uv.lock +++ b/qpi-client/py/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 3 +revision = 5 requires-python = ">=3.10" resolution-markers = [ "python_full_version >= '3.11'", @@ -8,11 +8,11 @@ resolution-markers = [ [[package]] name = "certifi" -version = "2026.5.20" +version = "2026.10.23" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/ce/ee2ecad540810a79593028e88299baeae54d346cc7a0d94b6199988b89b1/certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d", size = 135422, upload-time = "2026-05-20T11:46:50.073Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/11/b524cbd9bbdaca58608e4cf4053fd463417549e1959fa8d3aa18319f9555/certifi-2026.10.23.tar.gz", hash = "sha256:a9895e6e2758b371e0545e321a3a8fd1fcfd9829ada8824a936dfb16aaaf36cd", size = 136225, upload-time = "2026-10-23T11:36:16.478Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/59/8c/57e832b7af6d7c5abe66eb3fbe3a3a32f4d11ea23a1aa7131371035be991/certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897", size = 134134, upload-time = "2026-05-20T11:46:48.578Z" }, + { url = "https://files.pythonhosted.org/packages/32/d1/a3652fe2c19134d0d15922177821d863cbd7e842d53a21bbe7e8e3a1b5ac/certifi-2026.10.23-py3-none-any.whl", hash = "sha256:e9b54de76e530bb6cf0ccd036787103acb58fd42ba930ea8bf948ddbaa2f61d1", size = 135082, upload-time = "2026-10-23T11:36:14.763Z" }, ] [[package]] diff --git a/qpi-driver/py/uv.lock b/qpi-driver/py/uv.lock index bb2c3550..96929e7b 100644 --- a/qpi-driver/py/uv.lock +++ b/qpi-driver/py/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 3 +revision = 5 requires-python = "==3.12.*" resolution-markers = [ "sys_platform == 'darwin'", @@ -160,11 +160,11 @@ wheels = [ [[package]] name = "certifi" -version = "2026.5.20" +version = "2026.10.23" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/ce/ee2ecad540810a79593028e88299baeae54d346cc7a0d94b6199988b89b1/certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d", size = 135422, upload-time = "2026-05-20T11:46:50.073Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/11/b524cbd9bbdaca58608e4cf4053fd463417549e1959fa8d3aa18319f9555/certifi-2026.10.23.tar.gz", hash = "sha256:a9895e6e2758b371e0545e321a3a8fd1fcfd9829ada8824a936dfb16aaaf36cd", size = 136225, upload-time = "2026-10-23T11:36:16.478Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/59/8c/57e832b7af6d7c5abe66eb3fbe3a3a32f4d11ea23a1aa7131371035be991/certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897", size = 134134, upload-time = "2026-05-20T11:46:48.578Z" }, + { url = "https://files.pythonhosted.org/packages/32/d1/a3652fe2c19134d0d15922177821d863cbd7e842d53a21bbe7e8e3a1b5ac/certifi-2026.10.23-py3-none-any.whl", hash = "sha256:e9b54de76e530bb6cf0ccd036787103acb58fd42ba930ea8bf948ddbaa2f61d1", size = 135082, upload-time = "2026-10-23T11:36:14.763Z" }, ] [[package]] From e2f8ddd8025f01deeed00e1ece292b10027950e4 Mon Sep 17 00:00:00 2001 From: Martin Ahindura Date: Fri, 30 Oct 2026 12:35:48 +0100 Subject: [PATCH 3/5] fix(qpi-driver): take a prerelease only where no release will do MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --prerelease allow was added to install-systemd.sh for the qblox extra, but uv applies it to every package in the resolution. pynng then published 1.0.0b1, whose manylinux wheel links libatomic.so.1, and a stock Ubuntu 22.04 does not ship libatomic1. Every install since produced a driver that died on `import pynng`, restarted five times and gave up — for all devices, not just qblox. if-necessary keeps the qblox extra resolving (checked with a dry-run of qpi-driver[cli,qblox]) and takes pynng back to the 0.9.0 release. Verified in jrei/systemd-ubuntu:22.04: pynng 0.9.0 installs, its .so has no libatomic dependency, and make test-e2e-systemd passes all four installers. Fixing the constraint in pyproject.toml instead would not have reached anyone, since the installer resolves qpi-driver from PyPI; the script is curled from the repo, so this helps operators before the next release. --- CHANGELOG.md | 7 +++++++ qpi-driver/py/install-systemd.sh | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0788d6b7..db5f027c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,13 @@ and this project follows versions of format `{year}.{month}.{patch_number}`. four eMudhra roots — `emSign ECC Root CA - G3` among them. The pinned 2026.5.20 bundle still trusted them, and Go's denylist covers only Go. +### Fixed + +- `qpi-driver/py`: `install-systemd.sh` lets uv take a prerelease only where no release will + do. `--prerelease allow`, there for the qblox extra, applied to every package and pulled in a + pynng beta whose wheel wants a `libatomic` stock Ubuntu has not got — so the driver it + installed died on `import pynng` before it could start. + ## [0.4.2] - 2026-08-16 ### Added diff --git a/qpi-driver/py/install-systemd.sh b/qpi-driver/py/install-systemd.sh index 2590e620..340008f2 100755 --- a/qpi-driver/py/install-systemd.sh +++ b/qpi-driver/py/install-systemd.sh @@ -124,7 +124,10 @@ else else VERSION_SUFFIX="==$QPI_DRIVER_VERSION" fi - sudo -u "$REAL_USER" "$UV_PATH" tool install --python 3.12 --prerelease allow "qpi-driver[cli,${DEVICE}]${VERSION_SUFFIX}" + # `if-necessary`, not `allow`: the qblox extra needs prereleases, but `allow` + # applies to every package, and it reached for a pynng beta whose wheel wants a + # libatomic the base image has not got. A prerelease only where no release will do. + sudo -u "$REAL_USER" "$UV_PATH" tool install --python 3.12 --prerelease if-necessary "qpi-driver[cli,${DEVICE}]${VERSION_SUFFIX}" QPI_DRIVER_BIN="${QPI_DRIVER_BIN:-$REAL_HOME/.local/bin/qpi-driver}" fi From ca8d8009d4c4f8c27a2d01b8c464cba4555ac359 Mon Sep 17 00:00:00 2001 From: Martin Ahindura Date: Fri, 30 Oct 2026 13:04:20 +0100 Subject: [PATCH 4/5] fix(qpi-ui): upgrade pocketbase for Go 1.27's json/v2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Go 1.27 enables encoding/json/v2 by default — `go list encoding/json` picks v2_decode.go over scanner.go with GOEXPERIMENT empty. pocketbase 0.39.2 unmarshals a Collection through `type alias *Collection`, which carries no methods under v1 but re-enters UnmarshalJSON under v2, so the server overflowed its stack on the first collection it decoded and every dashboard request after that got ECONNREFUSED. The trigger is the toolchain, not the go directive, so this broke any build on an installed Go 1.27 — moving CI from 1.26.x to 1.27.x would have taken it red too. There is no fix on the 0.39 line: 0.39.11 still has the pointer alias, and 0.40.6 changed it to `type alias Collection`. The upgrade needs no source changes, but it carries modernc.org/sqlite 1.52 -> 1.60 and the rest of pocketbase's transitives with it. Verified: qpi-ui's five test packages pass, and the Cypress dashboard suite goes from 15/143 to 143/143 with no stack overflow in the server log. Note the suite seeds a fresh pb_data, so it does not cover migrating a database that already exists across the upgrade. --- CHANGELOG.md | 3 +++ qpi-ui/go.mod | 37 +++++++++++++++++++------------------ qpi-ui/go.sum | 44 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index db5f027c..34bde2d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,9 @@ and this project follows versions of format `{year}.{month}.{patch_number}`. do. `--prerelease allow`, there for the qblox extra, applied to every package and pulled in a pynng beta whose wheel wants a `libatomic` stock Ubuntu has not got — so the driver it installed died on `import pynng` before it could start. +- `qpi-ui`: pocketbase moves to 0.40.6. Built with Go 1.27, which turns `encoding/json/v2` + on, 0.39.2's `Collection.UnmarshalJSON` recursed into itself, so the server died of a stack + overflow on the first collection it decoded and every request after that was refused. ## [0.4.2] - 2026-08-16 diff --git a/qpi-ui/go.mod b/qpi-ui/go.mod index 7c675789..805db709 100644 --- a/qpi-ui/go.mod +++ b/qpi-ui/go.mod @@ -5,7 +5,7 @@ go 1.27.3 require ( github.com/go-playground/validator/v10 v10.30.3 github.com/pocketbase/dbx v1.12.0 - github.com/pocketbase/pocketbase v0.39.2 + github.com/pocketbase/pocketbase v0.40.6 github.com/spf13/cobra v1.10.2 go.nanomsg.org/mangos/v3 v3.4.2 gopkg.in/yaml.v3 v3.0.1 @@ -15,11 +15,11 @@ require ( github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/disintegration/imaging v1.6.2 // indirect github.com/domodwyer/mailyak/v3 v3.6.2 // indirect - github.com/dustin/go-humanize v1.0.1 // indirect + github.com/dustin/go-humanize v1.1.0 // indirect github.com/fatih/color v1.19.0 // indirect - github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.13 // indirect - github.com/ganigeorgiev/fexpr v0.5.0 // indirect + github.com/fsnotify/fsnotify v1.10.1 // indirect + github.com/gabriel-vasile/mimetype v1.4.15 // indirect + github.com/ganigeorgiev/fexpr v0.6.0 // indirect github.com/go-ozzo/ozzo-validation/v4 v4.3.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect @@ -27,21 +27,22 @@ require ( github.com/google/uuid v1.6.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/leodido/go-urn v1.4.0 // indirect - github.com/mattn/go-colorable v0.1.14 // indirect - github.com/mattn/go-isatty v0.0.22 // indirect - github.com/ncruces/go-strftime v1.0.0 // indirect + github.com/mattn/go-colorable v0.1.16 // indirect + github.com/mattn/go-isatty v0.0.24 // indirect + github.com/ncruces/go-strftime v1.1.0 // indirect + github.com/pocketbase/ozzo-validation/v4 v4.3.0 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/spf13/cast v1.10.0 // indirect github.com/spf13/pflag v1.0.10 // indirect - golang.org/x/crypto v0.52.0 // indirect - golang.org/x/image v0.41.0 // indirect - golang.org/x/net v0.55.0 // indirect - golang.org/x/oauth2 v0.36.0 // indirect - golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.45.0 // indirect - golang.org/x/text v0.37.0 // indirect - modernc.org/libc v1.72.3 // indirect + golang.org/x/crypto v0.58.0 // indirect + golang.org/x/image v0.47.0 // indirect + golang.org/x/net v0.61.0 // indirect + golang.org/x/oauth2 v0.37.0 // indirect + golang.org/x/sync v0.24.0 // indirect + golang.org/x/sys v0.49.0 // indirect + golang.org/x/text v0.43.0 // indirect + modernc.org/libc v1.77.1 // indirect modernc.org/mathutil v1.7.1 // indirect - modernc.org/memory v1.11.0 // indirect - modernc.org/sqlite v1.52.0 // indirect + modernc.org/memory v1.12.1 // indirect + modernc.org/sqlite v1.60.1 // indirect ) diff --git a/qpi-ui/go.sum b/qpi-ui/go.sum index 11cd5c74..3e1b8cfb 100644 --- a/qpi-ui/go.sum +++ b/qpi-ui/go.sum @@ -12,16 +12,24 @@ github.com/domodwyer/mailyak/v3 v3.6.2 h1:x3tGMsyFhTCaxp6ycgR0FE/bu5QiNp+hetUuCO github.com/domodwyer/mailyak/v3 v3.6.2/go.mod h1:lOm/u9CyCVWHeaAmHIdF4RiKVxKUT/H5XX10lIKAL6c= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/dustin/go-humanize v1.1.0 h1:dbKTrvD0klcbBV/h4AWJdMuZogJACoMlvWIWZ5b2xWg= +github.com/dustin/go-humanize v1.1.0/go.mod h1:hc1CvRkJMsgxqjmjMQF3QNRAZBwY8AXBAzKYoSX9sFI= github.com/fatih/color v1.19.0 h1:Zp3PiM21/9Ld6FzSKyL5c/BULoe/ONr9KlbYVOfG8+w= github.com/fatih/color v1.19.0/go.mod h1:zNk67I0ZUT1bEGsSGyCZYZNrHuTkJJB+r6Q9VuMi0LE= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/fsnotify/fsnotify v1.10.1 h1:b0/UzAf9yR5rhf3RPm9gf3ehBPpf0oZKIjtpKrx59Ho= +github.com/fsnotify/fsnotify v1.10.1/go.mod h1:TLheqan6HD6GBK6PrDWyDPBaEV8LspOxvPSjC+bVfgo= github.com/gabriel-vasile/mimetype v1.4.13 h1:46nXokslUBsAJE/wMsp5gtO500a4F3Nkz9Ufpk2AcUM= github.com/gabriel-vasile/mimetype v1.4.13/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= +github.com/gabriel-vasile/mimetype v1.4.15 h1:05iP/CYtZ/w455R/KZM6rZ5ieAdh99UPtd+d3YzLmaI= +github.com/gabriel-vasile/mimetype v1.4.15/go.mod h1:azpTcoLcDZRNgFou5j+APrqQx9HqVPWa6ijYQIIVswQ= github.com/ganigeorgiev/fexpr v0.5.0 h1:XA9JxtTE/Xm+g/JFI6RfZEHSiQlk+1glLvRK1Lpv/Tk= github.com/ganigeorgiev/fexpr v0.5.0/go.mod h1:RyGiGqmeXhEQ6+mlGdnUleLHgtzzu/VGO2WtJkF5drE= +github.com/ganigeorgiev/fexpr v0.6.0 h1:Fza3O/QMBKEudUvxV862qe6GjxM60GJjjKytdp+VQus= +github.com/ganigeorgiev/fexpr v0.6.0/go.mod h1:RyGiGqmeXhEQ6+mlGdnUleLHgtzzu/VGO2WtJkF5drE= github.com/gdamore/optopia v0.2.0/go.mod h1:YKYEwo5C1Pa617H7NlPcmQXl+vG6YnSSNB44n8dNL0Q= github.com/go-ozzo/ozzo-validation/v4 v4.3.0 h1:byhDUpfEwjsVQb1vBunvIjh2BHQ9ead57VkAEY4V+Es= github.com/go-ozzo/ozzo-validation/v4 v4.3.0/go.mod h1:2NKgrcHl3z6cJs+3Oo940FPRiTzuqKbvfrL2RxCj6Ew= @@ -42,6 +50,7 @@ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/pprof v0.0.0-20260402051712-545e8a4df936 h1:EwtI+Al+DeppwYX2oXJCETMO23COyaKGP6fHVpkpWpg= github.com/google/pprof v0.0.0-20260402051712-545e8a4df936/go.mod h1:MxpfABSjhmINe3F1It9d+8exIHFvUqtLIRCdOGNXqiI= +github.com/google/pprof v0.0.0-20261016150608-1facf8f91b50 h1:PlNWJRxu5APSV0pWqfIsZ0qt9OOGHSWfZQ4zvx+WgWs= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= @@ -57,16 +66,26 @@ github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= +github.com/mattn/go-colorable v0.1.16 h1:+2YjeAe7xP1OQbZW1jERPWWCDLlNqFNCvjiqGiAt84A= +github.com/mattn/go-colorable v0.1.16/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4= github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= +github.com/mattn/go-isatty v0.0.24 h1:tGZZoVgT/KiqK1c8ocVLeDS8BSWMRd47J3Lbz7vsReI= +github.com/mattn/go-isatty v0.0.24/go.mod h1:nMCL3Zebbrt45jsMDgnfIwz6ydEQApk5oEI3HqDio6A= github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w= github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= +github.com/ncruces/go-strftime v1.1.0 h1:vtPmPWMkb539RGV9WpWT9EwJGvrOCKvMNI4obWL47Hk= +github.com/ncruces/go-strftime v1.1.0/go.mod h1:yVaq7iwCN09vHRrKBrrflXT0M9tTMG2KmZ9Fj7xeG/g= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pocketbase/dbx v1.12.0 h1:/oLErM+A0b4xI0PWTGPqSDVjzix48PqI/bng2l0PzoA= github.com/pocketbase/dbx v1.12.0/go.mod h1:xXRCIAKTHMgUCyCKZm55pUOdvFziJjQfXaWKhu2vhMs= +github.com/pocketbase/ozzo-validation/v4 v4.3.0 h1:uKBDVma7bZqgR2a6AwE+k9hkuDFfiZMpBHQdZ1z3iQs= +github.com/pocketbase/ozzo-validation/v4 v4.3.0/go.mod h1:6XNjSTw/Jb2F8LOkKO3oyzIWExbrGiYoS4uVxVwz90g= github.com/pocketbase/pocketbase v0.39.2 h1:JuRO81y3uvOnG55aFH7EFVeWabbM3civXwnm6JnU/IA= github.com/pocketbase/pocketbase v0.39.2/go.mod h1:Quhg2FHvNdmFap4S98D9f8jaBrrquOwfyxw7wiV/kvg= +github.com/pocketbase/pocketbase v0.40.6 h1:/Ol0iIZNdPzUdzMPDVCYuIgYYC9NhMpk/1T2KYRGM8A= +github.com/pocketbase/pocketbase v0.40.6/go.mod h1:xfE8K+hqzlUxjbtC/VxqHrFxWWO+6wu4sk+L8Wc6Amg= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= @@ -91,30 +110,46 @@ go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988= golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= +golang.org/x/crypto v0.58.0 h1:COkYLr4k7nDI4r6QtMML2AfzeIswWHAJthLS6K/M/54= +golang.org/x/crypto v0.58.0/go.mod h1:Xh+kl5A+M0gMiWDytH2Hhr5Z7WbNCpv/eB/EFgfSk+w= golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.41.0 h1:8wS72eGJMJaBxK6okTzd4WaXumUlTVlb753MlsSvTCo= golang.org/x/image v0.41.0/go.mod h1:uIc348UZMSvS5Z65CVZ7iDPaNobNFEPeJ4kbqTOszmA= +golang.org/x/image v0.47.0 h1:za/8gVz++PPZqmZJBNSISICN5Rrj5zixP/8K++fgmqo= +golang.org/x/image v0.47.0/go.mod h1:IkN5o4A7vq55vXN8FWjjnhg9Rs2GOtffqsSi9mWAKYE= golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= +golang.org/x/mod v0.42.0 h1:ICeL3t2L30ljSPHHxDnR4fqVcBt/zR2zJAb9juavmQg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= +golang.org/x/net v0.61.0 h1:RR+6j/BTBCrggOLugxa+66R8FvoN6MHlzDlZIbN9YFw= +golang.org/x/net v0.61.0/go.mod h1:WgDCOTH8iwtB66T4/GfI94AHo/hhdb7Hah9NDseQfiI= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= +golang.org/x/oauth2 v0.37.0 h1:JUlcxA8oAtauLfiH8FX2/FkAWHAdi0QtGCGc+hofE98= +golang.org/x/oauth2 v0.37.0/go.mod h1:IxwZNxUULJmpBFf9K/9NTMSIfZZuvuTy1gGxhigP/58= golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sync v0.24.0 h1:iqiDrGoDgyuvAKrhLQthUEzU/R378N78gXbBjxed7oA= +golang.org/x/sync v0.24.0/go.mod h1:sUUOizhqBxiL6pEWpqNLUiaJn1ShEbZ6BBqskPbjZm0= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.49.0 h1:XbzkgYJHdqh/8m2Uu0W/dQv8nktxx4BFHp1M0gROTXA= +golang.org/x/sys v0.49.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= +golang.org/x/text v0.43.0 h1:1QivrlhwAsnMOcqgOdl9my7s9OyZl8O5/UGUTJVXoWc= +golang.org/x/text v0.43.0/go.mod h1:hbSIYA/amXcRXTFSZqh8tWHEoqRvvbKPJ2uz/KU+a+s= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= +golang.org/x/tools v0.52.0 h1:ryxg4U63oaUYk7uOLTF37n43f4qgtGvqV4Ioit1BaEs= google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= @@ -124,28 +159,37 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= modernc.org/cc/v4 v4.28.2 h1:3tQ0lf2ADtoby2EtSP+J7IE2SHwEJdP8ioR59wx7XpY= modernc.org/cc/v4 v4.28.2/go.mod h1:OnovgIhbbMXMu1aISnJ0wvVD1KnW+cAUJkIrAWh+kVI= +modernc.org/cc/v4 v4.29.7 h1:q+NXGJ0bK3b4TXFYQQVr9pYETGnmwFWkrUzJnMya/Tg= modernc.org/ccgo/v4 v4.34.0 h1:yRLPFZieg532OT4rp4JFNIVcquwalMX26G95WQDqwCQ= modernc.org/ccgo/v4 v4.34.0/go.mod h1:AS5WYMyBakQ+fhsHhtP8mWB82KTGPkNNJDGfGQCe0/A= +modernc.org/ccgo/v4 v4.36.1 h1:ZNIUZAryN0UgnJwtyxrdEzcFc3yD4Cu4AzjfPXsLsIE= modernc.org/fileutil v1.4.0 h1:j6ZzNTftVS054gi281TyLjHPp6CPHr2KCxEXjEbD6SM= modernc.org/fileutil v1.4.0/go.mod h1:EqdKFDxiByqxLk8ozOxObDSfcVOv/54xDs/DUHdvCUU= modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= modernc.org/gc/v3 v3.1.2 h1:ZtDCnhonXSZexk/AYsegNRV1lJGgaNZJuKjJSWKyEqo= modernc.org/gc/v3 v3.1.2/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY= +modernc.org/gc/v3 v3.1.5 h1:21ldfPfRYE31Tb7B3mwAK8gy1AxP4+dKjrOQPfqakoc= modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks= modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI= modernc.org/libc v1.72.3 h1:ZnDF4tXn4NBXFutMMQC4vtbTFSXhhKzR73fv0beZEAU= modernc.org/libc v1.72.3/go.mod h1:dn0dZNnnn1clLyvRxLxYExxiKRZIRENOfqQ8XEeg4Qs= +modernc.org/libc v1.77.1 h1:Ct8j47QtiZ1Enj2DtFXQtUqrPCAjdCmPjtCuvrYQ0Hs= +modernc.org/libc v1.77.1/go.mod h1:87/pZ4L6nD1zqW4nItuS12YO7hN1igAah34xjnQo/W0= modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI= modernc.org/memory v1.11.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= +modernc.org/memory v1.12.1 h1:nFMiWrpStgZczNl6XI9GnIk/rWhYIyHGUaR04pGbp9g= +modernc.org/memory v1.12.1/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= modernc.org/opt v0.2.0 h1:tGyef5ApycA7FSEOMraay9SaTk5zmbx7Tu+cJs4QKZg= modernc.org/opt v0.2.0/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= modernc.org/sqlite v1.52.0 h1:p4dhYh2tXZCiyaqHwRVJDjIGKWyXayiQpThxgDzJaxo= modernc.org/sqlite v1.52.0/go.mod h1:tcNzv5p84E0skkmJn038y+hWJbLQXQqEnQfeh5r2JLM= +modernc.org/sqlite v1.60.1 h1:/blz53O951KWFOso4QQvEs/Fq6cDBKLtMVrYNSeJVKw= +modernc.org/sqlite v1.60.1/go.mod h1:1dIoEagfDE72QytD5scH1lxARtaUgKgHC/NuApA27r0= modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= From 360cf30c93e9d86759381a52213128234fd7bec0 Mon Sep 17 00:00:00 2001 From: Martin Ahindura Date: Fri, 30 Oct 2026 12:06:46 +0100 Subject: [PATCH 5/5] Bump to v0.4.3 --- CHANGELOG.md | 2 +- Makefile | 2 +- README.md | 12 ++++++------ qpi-client/js/package-lock.json | 4 ++-- qpi-client/js/package.json | 2 +- qpi-client/py/pyproject.toml | 2 +- qpi-client/py/qpi_client/__init__.py | 2 +- qpi-client/py/uv.lock | 2 +- qpi-driver/go/cli/cli.go | 2 +- qpi-driver/js/package-lock.json | 4 ++-- qpi-driver/js/package.json | 2 +- qpi-driver/py/pyproject.toml | 2 +- qpi-driver/py/qpi_driver/__init__.py | 2 +- qpi-driver/py/qpi_driver/cli.py | 2 +- qpi-driver/py/tests/test_cli.py | 4 ++-- qpi-driver/py/uv.lock | 2 +- qpi-ui/internal/dashboard/package-lock.json | 4 ++-- qpi-ui/internal/dashboard/package.json | 2 +- qpi-ui/main.go | 2 +- qpi-ui/pkg/qpi.wxs | 2 +- 20 files changed, 29 insertions(+), 29 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 34bde2d9..c5f45d2a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project follows versions of format `{year}.{month}.{patch_number}`. -## [Unreleased] +## [0.4.3] - 2026-10-30 ### Changed diff --git a/Makefile b/Makefile index ed673f41..97867719 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION ?= 0.4.2 +VERSION ?= 0.4.3 UV := $(shell command -v uv 2> /dev/null || echo "$$HOME/.local/bin/uv") EXECUTOR ?= mock EXECUTORS := mock aer quantify qblox diff --git a/README.md b/README.md index eb44ee1a..39f29ceb 100644 --- a/README.md +++ b/README.md @@ -77,12 +77,12 @@ The server is available as a single executable binary, as well as native OS pack #### Standalone Binary (macOS & Linux) Download the binary for your platform, make it executable, and run: ```bash -# macOS (replace 0.4.2 with the version you wish to install) -curl -LO https://github.com/sopherapps/qpi/releases/download/v0.4.2/qpi-0.4.2-darwin-amd64 -chmod +x qpi-0.4.2-darwin-amd64 && mv qpi-0.4.2-darwin-amd64 qpi +# macOS (replace 0.4.3 with the version you wish to install) +curl -LO https://github.com/sopherapps/qpi/releases/download/v0.4.3/qpi-0.4.3-darwin-amd64 +chmod +x qpi-0.4.3-darwin-amd64 && mv qpi-0.4.3-darwin-amd64 qpi # Linux (standalone binary) -curl -L https://github.com/sopherapps/qpi/releases/download/v0.4.2/qpi-0.4.2-linux-amd64.tar.gz | tar -xz +curl -L https://github.com/sopherapps/qpi/releases/download/v0.4.3/qpi-0.4.3-linux-amd64.tar.gz | tar -xz # Start the server ./qpi serve @@ -91,8 +91,8 @@ curl -L https://github.com/sopherapps/qpi/releases/download/v0.4.2/qpi-0.4.2-lin #### Native Linux Packages (Ubuntu, Debian, Fedora, Alpine) For Debian/Ubuntu, download and install the `.deb` package: ```bash -wget https://github.com/sopherapps/qpi/releases/download/v0.4.2/qpi_0.4.2_amd64.deb -sudo apt install ./qpi_0.4.2_amd64.deb +wget https://github.com/sopherapps/qpi/releases/download/v0.4.3/qpi_0.4.3_amd64.deb +sudo apt install ./qpi_0.4.3_amd64.deb ``` *(Note: Installing the package automatically registers and starts `qpi.service` under systemd (or OpenRC on Alpine) to run the server in the background on port `8090`)* diff --git a/qpi-client/js/package-lock.json b/qpi-client/js/package-lock.json index cd6f1970..de593ec5 100644 --- a/qpi-client/js/package-lock.json +++ b/qpi-client/js/package-lock.json @@ -1,12 +1,12 @@ { "name": "qpi-client", - "version": "0.4.2", + "version": "0.4.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "qpi-client", - "version": "0.4.2", + "version": "0.4.3", "license": "MIT", "devDependencies": { "@types/jest": "^29.5.0", diff --git a/qpi-client/js/package.json b/qpi-client/js/package.json index e6942bee..c13077dc 100644 --- a/qpi-client/js/package.json +++ b/qpi-client/js/package.json @@ -1,6 +1,6 @@ { "name": "qpi-client", - "version": "0.4.2", + "version": "0.4.3", "description": "JavaScript/TypeScript client SDK for the QPI quantum computing platform", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/qpi-client/py/pyproject.toml b/qpi-client/py/pyproject.toml index 110f7fa6..9f088b14 100644 --- a/qpi-client/py/pyproject.toml +++ b/qpi-client/py/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "qpi-client" -version = "0.4.2" +version = "0.4.3" description = "Python client SDK for the QPI quantum computing platform" readme = "README.md" license = {text = "MIT"} diff --git a/qpi-client/py/qpi_client/__init__.py b/qpi-client/py/qpi_client/__init__.py index 3fca3145..5c349bfe 100644 --- a/qpi-client/py/qpi_client/__init__.py +++ b/qpi-client/py/qpi_client/__init__.py @@ -30,7 +30,7 @@ try: __version__ = importlib.metadata.version("qpi-client") except importlib.metadata.PackageNotFoundError: - __version__ = "0.4.2" + __version__ = "0.4.3" from qpi_client.client import QPIClient from qpi_client.provider import QPIBackend, QPIJob diff --git a/qpi-client/py/uv.lock b/qpi-client/py/uv.lock index e69fb8a1..45d1f3f5 100644 --- a/qpi-client/py/uv.lock +++ b/qpi-client/py/uv.lock @@ -387,7 +387,7 @@ wheels = [ [[package]] name = "qpi-client" -version = "0.4.2" +version = "0.4.3" source = { editable = "." } dependencies = [ { name = "qiskit" }, diff --git a/qpi-driver/go/cli/cli.go b/qpi-driver/go/cli/cli.go index 3a0d52f6..90a15089 100644 --- a/qpi-driver/go/cli/cli.go +++ b/qpi-driver/go/cli/cli.go @@ -27,7 +27,7 @@ import ( // Version is the CLI version; overridable at build time with // -ldflags "-X github.com/sopherapps/qpi/qpi-driver/go/cli.Version=…". -var Version = "0.4.2" +var Version = "0.4.3" // commonFlags are the universal options `start` shares across every operation, // mirroring the Python CLI. A device's own settings go through -o instead. diff --git a/qpi-driver/js/package-lock.json b/qpi-driver/js/package-lock.json index afdeb404..7db333dc 100644 --- a/qpi-driver/js/package-lock.json +++ b/qpi-driver/js/package-lock.json @@ -1,12 +1,12 @@ { "name": "qpi-driver", - "version": "0.4.2", + "version": "0.4.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "qpi-driver", - "version": "0.4.2", + "version": "0.4.3", "license": "MIT", "dependencies": { "commander": "^12.1.0" diff --git a/qpi-driver/js/package.json b/qpi-driver/js/package.json index f2f14436..8f64d65d 100644 --- a/qpi-driver/js/package.json +++ b/qpi-driver/js/package.json @@ -1,6 +1,6 @@ { "name": "qpi-driver", - "version": "0.4.2", + "version": "0.4.3", "description": "TypeScript/JavaScript SDK for building QPI quantum platform drivers", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/qpi-driver/py/pyproject.toml b/qpi-driver/py/pyproject.toml index 291c5361..02378e28 100644 --- a/qpi-driver/py/pyproject.toml +++ b/qpi-driver/py/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "qpi-driver" -version = "0.4.2" +version = "0.4.3" description = "Quantum Processing Interface (QPI) QPU Driver" readme = "README.md" requires-python = ">=3.12,<3.13" diff --git a/qpi-driver/py/qpi_driver/__init__.py b/qpi-driver/py/qpi_driver/__init__.py index a45d45fc..de1af176 100644 --- a/qpi-driver/py/qpi_driver/__init__.py +++ b/qpi-driver/py/qpi_driver/__init__.py @@ -3,7 +3,7 @@ try: __version__ = importlib.metadata.version("qpi-driver") except importlib.metadata.PackageNotFoundError: - __version__ = "0.4.2" + __version__ = "0.4.3" from qpi_driver.builtins import ( DeviceBuilder, diff --git a/qpi-driver/py/qpi_driver/cli.py b/qpi-driver/py/qpi_driver/cli.py index 42eb9a32..ae23749e 100644 --- a/qpi-driver/py/qpi_driver/cli.py +++ b/qpi-driver/py/qpi_driver/cli.py @@ -253,7 +253,7 @@ def _get_version() -> str: try: return importlib.metadata.version("qpi-driver") except importlib.metadata.PackageNotFoundError: - return "0.4.2" + return "0.4.3" def _banner(): """Renders the banner at the top of the CLI""" diff --git a/qpi-driver/py/tests/test_cli.py b/qpi-driver/py/tests/test_cli.py index bbd455a2..b49c737b 100644 --- a/qpi-driver/py/tests/test_cli.py +++ b/qpi-driver/py/tests/test_cli.py @@ -40,7 +40,7 @@ def test_cli_version(): try: expected_version = importlib.metadata.version("qpi-driver") except importlib.metadata.PackageNotFoundError: - expected_version = "0.4.2" + expected_version = "0.4.3" assert expected_version in result.stdout @@ -418,7 +418,7 @@ def test_version_falls_back_when_the_package_is_not_installed(): "version", side_effect=importlib.metadata.PackageNotFoundError("qpi-driver"), ): - assert _get_version() == "0.4.2" + assert _get_version() == "0.4.3" def test_cli_process_requires_token(): diff --git a/qpi-driver/py/uv.lock b/qpi-driver/py/uv.lock index 96929e7b..45dc6ab1 100644 --- a/qpi-driver/py/uv.lock +++ b/qpi-driver/py/uv.lock @@ -1694,7 +1694,7 @@ wheels = [ [[package]] name = "qpi-driver" -version = "0.4.2" +version = "0.4.3" source = { editable = "." } dependencies = [ { name = "numpy" }, diff --git a/qpi-ui/internal/dashboard/package-lock.json b/qpi-ui/internal/dashboard/package-lock.json index 35217f4e..9d4133f5 100644 --- a/qpi-ui/internal/dashboard/package-lock.json +++ b/qpi-ui/internal/dashboard/package-lock.json @@ -1,12 +1,12 @@ { "name": "dashboard-src", - "version": "0.4.2", + "version": "0.4.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "dashboard-src", - "version": "0.4.2", + "version": "0.4.3", "dependencies": { "@visx/axis": "^4.0.0", "@visx/scale": "^4.0.0", diff --git a/qpi-ui/internal/dashboard/package.json b/qpi-ui/internal/dashboard/package.json index 3904fe63..8c585570 100644 --- a/qpi-ui/internal/dashboard/package.json +++ b/qpi-ui/internal/dashboard/package.json @@ -1,7 +1,7 @@ { "name": "dashboard-src", "private": true, - "version": "0.4.2", + "version": "0.4.3", "type": "module", "scripts": { "dev": "vite", diff --git a/qpi-ui/main.go b/qpi-ui/main.go index 21656ad7..2b8a7771 100644 --- a/qpi-ui/main.go +++ b/qpi-ui/main.go @@ -20,7 +20,7 @@ import ( //go:embed all:internal/dashboard/dist var dashboardFS embed.FS -var Version = "v0.4.2" +var Version = "v0.4.3" func main() { app := pocketbase.New() diff --git a/qpi-ui/pkg/qpi.wxs b/qpi-ui/pkg/qpi.wxs index 2836cc83..fbc940c8 100644 --- a/qpi-ui/pkg/qpi.wxs +++ b/qpi-ui/pkg/qpi.wxs @@ -1,6 +1,6 @@ - +