5085 Commits
Author SHA1 Message Date
Cody Lee 69aea34ac9 Merge pull request #1100 from unpoller/feat/protect-air-quality
feat(protect): export air quality readings when present
v5.3.0
2026-09-29 12:31:33 -04:00
Cody LeeandCursor c742df91e8 chore(deps): bump github.com/unpoller/unifi/v6 to v6.2.0
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-29 11:28:06 -05:00
Cody LeeandCursor 912ea91ac0 feat(protect): export air quality readings when present
Prefer a known stats channel and fall back to airQuality for temperature
and humidity. Omit channels whose status is unknown, and add the
particulate and gas series only when the controller includes them.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-29 09:46:13 -05:00
Cody Lee dcbb4070dc Merge pull request #1099 from unpoller/cursor/bump-unifi-v6.1.3
chore(deps): bump github.com/unpoller/unifi/v6 to v6.1.3
v5.2.11
2026-09-29 10:14:24 -04:00
Cody LeeandCursor 45d60f7824 chore(deps): bump github.com/unpoller/unifi/v6 to v6.1.3
Picks up JSON-encoded login credentials so passwords containing quotes authenticate.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-29 09:09:40 -05:00
Cody Lee 7a69a30771 Merge pull request #1097 from unpoller/fix/homebrew-tap-main v5.2.10 2026-09-28 12:30:32 -04:00
David Newhall IIandCursor 3cfd05b5cf Point the Homebrew cask publish at the tap's main branch.
v5.2.9 failed because golift/homebrew-mugs no longer has master.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-28 08:46:55 -07:00
Cody Lee fb46e13f62 Merge pull request #1096 from unpoller/dependabot/go_modules/all-35c05f5449 v5.2.9 2026-09-28 06:19:35 -04:00
dependabot[bot] 5675702b51 build(deps): bump the all group with 2 updates
Bumps the all group with 2 updates: [golift.io/cnfg](https://github.com/golift/cnfg) and [golift.io/cnfgfile](https://github.com/golift/cnfgfile).


Updates `golift.io/cnfg` from 0.4.0 to 0.5.0
- [Release notes](https://github.com/golift/cnfg/releases)
- [Commits](https://github.com/golift/cnfg/compare/v0.4.0...v0.5.0)

Updates `golift.io/cnfgfile` from 0.0.0-20240713024420-a5436d84eb48 to 0.1.0
- [Release notes](https://github.com/golift/cnfgfile/releases)
- [Commits](https://github.com/golift/cnfgfile/commits/v0.1.0)

---
updated-dependencies:
- dependency-name: golift.io/cnfg
  dependency-version: 0.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: golift.io/cnfgfile
  dependency-version: 0.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-28 02:42:40 +00:00
Cody Lee d34f837b03 Merge pull request #1095 from NotAFlightRisk/fix/manual-doc-links 2026-09-25 18:50:41 -04:00
Iain 28b1044abb docs(manual): point the man page at the docs site instead of the disabled wiki 2026-09-25 20:48:41 +01:00
Cody Lee a1cdb21b58 Merge pull request #1094 from wolkenlosIT/patch-1 v5.2.8 2026-09-23 21:00:18 -04:00
Kevin 2152c020f9 Update uap.go
add band label to per-VAP and per-radio metrics
2026-09-23 13:30:25 +02:00
Cody Lee d46146bdd0 Merge pull request #1093 from neilmunday/master 2026-09-18 18:09:00 -04:00
Neil Munday 47ba6ca5f7 Updated README.md 2026-09-18 22:44:19 +01:00
Cody Lee 4123a13973 Merge pull request #1092 from jonathanrdelgado/fix/otel-callback-leak v5.2.7 2026-09-18 07:06:13 -04:00
Jonathan Delgado 160b46d616 fix(otelunifi): callback memory leak 2026-09-17 13:44:48 -07:00
Cody Lee 58d01430ef Merge pull request #1091 from gdelbergue/build/distroless-debian13 v5.2.6 2026-09-15 20:30:14 -04:00
Guillaume Delbergue c4ee737497 build(docker): bump distroless base to static-debian13
Debian 11 (bullseye) has reached end of life, so the
gcr.io/distroless/static-debian11 base image no longer receives
security updates. Move to static-debian13 (trixie), which is
published for every platform the release targets (linux/amd64,
linux/arm64, linux/arm/v7).
2026-09-15 13:53:31 +02:00
Cody Lee b479f9bcd2 Merge pull request #1089 from unpoller/dependabot/go_modules/all-df48bebb66 2026-09-14 13:23:33 -04:00
dependabot[bot] 0f4d1be9c7 build(deps): bump the all group across 1 directory with 4 updates
Bumps the all group with 2 updates in the / directory: [golang.org/x/crypto](https://github.com/golang/crypto) and [golift.io/cnfg](https://github.com/golift/cnfg).


Updates `golang.org/x/crypto` from 0.56.0 to 0.57.0
- [Commits](https://github.com/golang/crypto/compare/v0.56.0...v0.57.0)

Updates `golang.org/x/sync` from 0.22.0 to 0.23.0
- [Commits](https://github.com/golang/sync/compare/v0.22.0...v0.23.0)

Updates `golang.org/x/term` from 0.45.0 to 0.46.0
- [Commits](https://github.com/golang/term/compare/v0.45.0...v0.46.0)

Updates `golift.io/cnfg` from 0.2.5 to 0.4.0
- [Release notes](https://github.com/golift/cnfg/releases)
- [Commits](https://github.com/golift/cnfg/compare/v0.2.5...v0.4.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-version: 0.57.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: golang.org/x/sync
  dependency-version: 0.23.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: golang.org/x/term
  dependency-version: 0.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: golift.io/cnfg
  dependency-version: 0.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-14 14:59:13 +00:00
Cody Lee 7827d30380 Merge pull request #1087 from NotAFlightRisk/fix/health-check-ipv6-http-listen v5.2.5 2026-09-11 19:46:59 -04:00
Iain 4da7cd5936 fix(promunifi): accept a bracketed IPv6 http_listen in the health check 2026-09-12 00:14:17 +01:00
Cody Lee d78d47cb93 Merge pull request #1086 from unpoller/fix/prometheus-cache-and-locate-mode
fix: honor scrape-cache disable and export locate-mode devices
2026-09-11 09:54:37 -04:00
Cody LeeandCursor 122226bc4b fix: honor scrape-cache disable and export locate-mode devices
interval=0 now turns off the Prometheus scrape cache as PR #1014
documented, and sub-15s intervals warn instead of clamping (#1083).
Adopted devices stay in Prometheus, Influx, OTel, and Datadog exports
while locate/identify is on (#1075).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-11 08:51:32 -05:00
Cody Lee 467fbd2de1 Merge pull request #1082 from unpoller/dependabot/go_modules/google.golang.org/grpc-1.83.2 2026-09-08 23:16:21 -04:00
dependabot[bot] c2bdfd2d2b build(deps): bump google.golang.org/grpc from 1.83.1 to 1.83.2
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.83.1 to 1.83.2.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.83.1...v1.83.2)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-version: 1.83.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-09 00:23:30 +00:00
dependabot[bot] 089dda98fd build(deps): bump the all group with 4 updates (#1080)
Bumps the all group with 4 updates: [github.com/prometheus/common](https://github.com/prometheus/common), [github.com/unpoller/unifi/v6](https://github.com/unpoller/unifi), [golang.org/x/crypto](https://github.com/golang/crypto) and [github.com/prometheus/client_model](https://github.com/prometheus/client_model).


Updates `github.com/prometheus/common` from 0.70.1 to 0.71.0
- [Release notes](https://github.com/prometheus/common/releases)
- [Changelog](https://github.com/prometheus/common/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prometheus/common/compare/v0.70.1...v0.71.0)

Updates `github.com/unpoller/unifi/v6` from 6.1.0 to 6.1.2
- [Release notes](https://github.com/unpoller/unifi/releases)
- [Commits](https://github.com/unpoller/unifi/compare/v6.1.0...v6.1.2)

Updates `golang.org/x/crypto` from 0.55.0 to 0.56.0
- [Commits](https://github.com/golang/crypto/compare/v0.55.0...v0.56.0)

Updates `github.com/prometheus/client_model` from 0.6.2 to 0.6.3
- [Release notes](https://github.com/prometheus/client_model/releases)
- [Commits](https://github.com/prometheus/client_model/compare/v0.6.2...v0.6.3)

---
updated-dependencies:
- dependency-name: github.com/prometheus/common
  dependency-version: 0.71.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: github.com/unpoller/unifi/v6
  dependency-version: 6.1.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all
- dependency-name: golang.org/x/crypto
  dependency-version: 0.56.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: github.com/prometheus/client_model
  dependency-version: 0.6.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-07 07:26:31 -04:00
Cody Lee 8cf64e1d78 Merge pull request #1077 from NotAFlightRisk/fix/health-check-empty-http-listen v5.2.3 v5.2.4 2026-09-02 20:40:31 -04:00
Iain e2384b8bb8 fix(promunifi): default an unset http_listen instead of failing validation 2026-09-03 01:12:20 +01:00
Cody Lee 4e3c58a79a Merge pull request #1074 from Prototype0645/fix/site-name-override-logs v5.2.2 2026-09-01 07:58:47 -04:00
Prototype0645 6c08d43b4c fix(inputunifi): apply default_site_name_override to log entries
default_site_name_override is applied in augmentMetrics, which only the
metrics path goes through. Log entries leave by collectControllerEvents,
which reads its sites straight from getFilteredSites — where the override
is deliberately not applied — so events, alarms, IDS records and system-log
entries ship with the controller's stock site name.

Four of the five site-scoped log collectors were affected; collectAnomalies
already did this inline, which is what makes the omission visible.

The consequence is worst for a poller watching several UniFi OS consoles:
each one calls its only site "default", so their log entries are
indistinguishable downstream. In Loki every stream from those consoles lands
under site_name="Default (default)" no matter which console it came from,
and no relabeling downstream can separate them again — the information is
gone by then. That is precisely the case the option was added for, and it
works for the metrics from those same consoles.

Extract the check collectAnomalies was doing into overrideSiteName and call
it from all five, so the two paths agree.

Note that only Site.Name reaches an API path; Site.SiteName is a display
name throughout the library. The override is therefore safe here, which is
what applySiteNameOverride's own comment already says ("keeping default for
API calls").
2026-09-01 09:08:13 +02:00
Cody Lee 3d70164732 Merge pull request #1073 from Prototype0645/feat/wan-status-source-label 2026-08-31 19:35:52 -04:00
Prototype0645 ca64173b35 feat(wan): label WAN interface state with its source
unpoller_wan_interface_state ships with site_name and nothing else to
identify where it came from. That is not enough: every UniFi OS console
names its only site "default", so site_name is "Default (default)" on all
of them. An instance polling several controllers emits WAN status that is
indistinguishable, and downstream attribution has to be guessed.

Observed in production before the fix: a scrape config guessing from
site_name filed a UDM's WAN state under the wrong customer. No error, no
missing series — just wrong data under someone else's name.

unifi/v6.1.0 (#244) added SourceName to WANStatus, stamped from the
controller URL in all three read paths. go.mod is already on v6.1.0, so
this only has to read the field.

Two lines, same shape as #1071 which did this for unpoller_wan_*.

Tests use the fakeReport already present in the package: every emitted
metric carries both site_name and source, the raw state is kept as a
label, and a nil status still produces nothing rather than panicking a
poll. TestExportWANStatusIsAttributed fails on master and passes here.
2026-08-31 23:42:30 +02:00
Cody Lee ad84c29f29 Merge pull request #1072 from unpoller/fix/986-remote-multi-site
fix: poll remote multi-site controllers by internalReference
v5.2.1
2026-08-31 15:17:59 -04:00
Cody LeeandCursor 8a78355e12 fix: use external test package for remote site helpers
golangci-lint testpackage requires tests in inputunifi_test.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-31 14:01:11 -04:00
Cody LeeandCursor e4c2934bdc fix: poll remote multi-site controllers by internalReference
Remote discovery stored Integration display names, so extra sites were dropped when checkSites compared them to legacy Site.Name. Use unifi v6.1.0 InternalReference instead.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-31 13:54:21 -04:00
Cody Lee 6972dfc0c2 Merge pull request #1068 from cooperlees/feat/protect-only-console v5.2.0 2026-08-31 09:20:39 -04:00
Cooper Ry LeesandClaude Opus 5 a73a2e0ab2 fix: don't send unused credentials to a Protect-only console
Found by running this against a real UNVR4 rather than only the fake one.

setDefaults fills an unset user with the placeholder "unifipoller". For a
Protect-only console that placeholder was reaching Login(), the console answered
403, and the controller died during initialisation -- the same symptom #1066 set
out to fix, one layer further in. A Protect API key and no local account is the
config an operator actually writes for a UNVR, so this was the common case, not
an edge one.

Nothing on such a console uses a session unless Protect logs are wanted: the
Integration API authenticates with the key alone. So withhold the credentials
entirely in that case, and say so in the startup summary rather than naming a
username that is never sent.

Also pins the go.mod bump to unifi v6.0.1, which is the release that carries
NewProtectClient (unpoller/unifi#240).

Verified end to end against a UNVR4 (UniFi OS 5.1.31, Protect 7.2.105): the
controller comes up, logs "Auth: Protect API key only (no session needed)",
makes no login request at all, and exports 37 unpoller_protect_* series across
9 cameras and 2 bridges with unpoller_controller_up = 1.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GVreutpEATmBjm6PBw9RjQ
2026-08-31 13:08:34 +00:00
Cooper Ry LeesandClaude Opus 5 31cc5a0f31 feat: poll Protect-only consoles via disable_network (closes #1066)
A UNVR or UNVR Pro runs UniFi Protect with no Network application installed.
UnPoller could not poll one at all: NewUnifi ends with GetServerData(), a GET of
/proxy/network/status, which such a console answers with its UniFi OS SPA HTML.
The controller entry died during initialisation and re-failed every interval,
never even printing a config summary -- while the Protect Integration API on the
same host answered every endpoint with the same key.

Set disable_network = true on that controller. It defaults to false, so nothing
about an existing config changes.

The Protect collectors were already complete and already not site-scoped; three
things stood between them and a Protect-only console:

  - getUnifi now calls unifi.NewProtectClient, which skips the Network probe and
    validates the Protect Integration API instead (unpoller/unifi#240).

  - pollController aborted on getFilteredSites long before reaching
    collectProtect, and collectControllerEvents did the same before
    collectProtectLogs. The Network pass is extracted into pollNetwork and
    skipped wholesale; the event collector list reduces to collectProtectLogs,
    the only site-independent one.

  - Metrics counted a poll successful only if it produced devices or clients. A
    Protect-only console produces neither, so a filtered scrape of one -- the
    Prometheus per-target path -- fell through to the dynamic-controller branch
    and reported ErrDynamicLookupsDisabled despite a successful collection.
    ProtectDevices now counts too.

Two smaller things worth calling out for reviewers:

  - extractDevices dereferenced metrics.Devices unguarded. That was already a
    latent panic; skipping the Network pass makes it reachable, so it is fixed
    here rather than left for the first person to hit it.

  - RawMetrics answers the raw-path kind for these consoles and rejects the
    site-scoped kinds with ErrNetworkDisabled. Returning an empty result would
    read as "this console has no devices" rather than "wrong question".

warnProtectOnly logs an error, without failing the controller, for the two
configurations that can never collect anything: disable_network with neither
Protect save flag, and save_protect_devices with no key to authenticate with.
Silently collecting nothing is the failure mode hardest to spot in a log.

pkg/inputunifi had no tests before this. input_test.go follows inputunas'
input_test.go: an httptest fake UNVR serving the console's SPA HTML for
everything but the Protect paths and the login, covering initialisation,
metrics, events, the filtered scrape, RawMetrics, both warnings, config binding
across toml/json/yaml/env, and that the shipped examples leave Network enabled.
TestProtectOnlyControllerFailsWithoutFlag pins the original bug against that
same console, so the flag is demonstrably what makes the difference.

Requires github.com/unpoller/unifi/v6 with NewProtectClient (unpoller/unifi#240).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GVreutpEATmBjm6PBw9RjQ
2026-08-31 13:08:27 +00:00
Cody Lee c0fbdd85c6 Merge pull request #1071 from Prototype0645/feat/wan-site-labels v5.1.1 2026-08-31 05:14:41 -05:00
Prototype0645 24329e278e feat(wan): label WAN metrics with their site and source
Every unpoller_wan_* series shipped with site_name="" and source="". The
exporter said so itself:

    cfg.WANLoadBalanceType,
    "", // site_name - will be set by caller if available
    "", // source - will be set by caller if available

The caller had nothing to set them from: WANEnrichedConfiguration carried
no identity. unifi/v6.0.3 fixes that upstream — GetWANEnrichedConfiguration
now stamps SiteName and SourceName from the site it fetched, the same way
GetSiteDPI does.

This bumps to v6.0.3 and fills the labels in. Two slices needed it, not
one: the base label set and the provider label set built further down for
the isp_name/isp_city descriptors. The test caught the second, which I had
missed.

Why it matters: an instance polling several controllers emitted WAN
metrics that were indistinguishable from one another, since wan_id is the
only other distinguishing label. Attributing them downstream meant
hardcoding a mapping in the scrape config and hoping no second controller
ever gained a gateway — when one does, its metrics are silently filed
under the wrong customer. No error, no missing series, just wrong data.

Tests use the fakeReport already present in the package. They assert every
emitted metric carries both labels, and that a nil configuration still
produces nothing rather than panicking a poll.
TestExportWANIsAttributed fails on master and passes with this change.
2026-08-31 12:06:58 +02:00
Cody Lee 76fbddf810 Merge pull request #1069 from unpoller/dependabot/go_modules/all-c0562bfa1b 2026-08-31 04:55:34 -05:00
dependabot[bot] 168930827b build(deps): bump the all group across 1 directory with 6 updates
Bumps the all group with 3 updates in the / directory: [go.opentelemetry.io/otel](https://github.com/open-telemetry/opentelemetry-go), [go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc](https://github.com/open-telemetry/opentelemetry-go) and [go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp](https://github.com/open-telemetry/opentelemetry-go).


Updates `go.opentelemetry.io/otel` from 1.45.0 to 1.46.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.45.0...v1.46.0)

Updates `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` from 1.45.0 to 1.46.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.45.0...v1.46.0)

Updates `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` from 1.45.0 to 1.46.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.45.0...v1.46.0)

Updates `go.opentelemetry.io/otel/metric` from 1.45.0 to 1.46.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.45.0...v1.46.0)

Updates `go.opentelemetry.io/otel/sdk` from 1.45.0 to 1.46.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.45.0...v1.46.0)

Updates `go.opentelemetry.io/otel/sdk/metric` from 1.45.0 to 1.46.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.45.0...v1.46.0)

---
updated-dependencies:
- dependency-name: go.opentelemetry.io/otel
  dependency-version: 1.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc
  dependency-version: 1.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp
  dependency-version: 1.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: go.opentelemetry.io/otel/metric
  dependency-version: 1.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: go.opentelemetry.io/otel/sdk
  dependency-version: 1.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: go.opentelemetry.io/otel/sdk/metric
  dependency-version: 1.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-31 09:42:09 +00:00
Cody Lee 611cdd01fb Merge pull request #1070 from Prototype0645/chore/bump-unifi-v6.0.2 2026-08-31 04:39:59 -05:00
Prototype0645 b479d3db91 chore(deps): bump github.com/unpoller/unifi/v6 to v6.0.2 2026-08-31 08:18:56 +02:00
David Newhall II 009c3a898b Merge pull request #1067 from unpoller/feat/code-signing
ci: Authenticode-sign Windows and notarize macOS universal binary
2026-08-30 14:23:44 -07:00
David Newhall IIandCursor eeda665b7e ci: Authenticode-sign Windows and notarize the macOS universal binary.
Release tags now fail closed without signing secrets, ship a signed Windows PE via house signerd, and replace per-arch Darwin tarballs with one stapled universal archive.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-30 13:06:00 -07:00
Cody Lee 3a595a6896 Merge pull request #1065 from unpoller/fix/remote-default-site-name-override-1057
fix: respect configured default_site_name_override in remote mode
v5.1.0
2026-08-27 16:59:25 -05:00
Cody LeeandCursor ce4cfe3971 fix: respect configured default_site_name_override in remote mode
Remote API discovery was unconditionally overwriting default_site_name_override
with the console name for Cloud Gateways. Only apply the console name fallback
when the user has not already configured an override.

Fixes #1057

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-27 16:57:41 -05:00