github qdm12/ddns-updater v2.6.0

3 months ago

Features

  • Support CLI flags 🎏 (equivalent to environment variable names)
  • Automated binaries releasing on GitHub for commonly used platforms
  • IPv6: add JSON parameter ipv6_suffix and deprecate IPV6_PREFIX (retro-compatible change) (#611)
  • Public IP fetching 📥
    • DNS fetching uses DNS over TLS (DoT) only 🔒, google removed due to no support for DoT
    • Ipify support for HTTP "IPv4 or IPv6" fetching
    • Remove NoIP HTTP option (only plaintext HTTP fetching)
    • Add Spdyn for HTTP IPv4 or IPv6 fetching
    • Add ipleak for all HTTP modes
  • Existing providers features ♻️
    • DonDominio: add support for subdomains and wildcard host values
    • Porkbun: json decode error messages for log messages
  • Custom provider ✏️
    • Sends HTTP GET request to url given with ip information
    • Configurable ipv4 and ipv6 query parameter keys
    • Configurable response success detection with a regex
    • Treat non status OK 200 responses as failures
  • 🆕 Providers
  • Shoutrrr 📢
    • Bumped from v0.7.0 to v0.8.0
    • Add SHOUTRRR_DEFAULT_TITLE, disable SHOUTRRR_PARAMS and only add &title= parameter to shoutrrr address if it's not set in the address already
  • healthchecks.io support with configuration option HEALTH_HEALTHCHECKSIO_UUID 🩺
  • Logging 📜
    • Log tree of settings at start
    • Shoutrrr debug logs
    • "IPv6 is not supported on this system" logged if all IP fetching tries fail with an IPv6 error
    • Reduce log spamming: log each IP fetching error at the debug level and log them all at the error level in a single line, if all the fetching tries fail.
  • LISTENING_ADDRESS configuration key (#590) to replace LISTENING_PORT (retro-compatible change) 👂
  • Docker images tags are now with and without the v prefix. For example :v2.6.0 and :2.6.0 🤷
  • internal/config: append :53 to the resolver address if no port is given
  • More exact times for state updates, events and ban time checking 🕙

Fixes

  • Core updating mechanism
    • Get database events by IP version (#514)
    • Skip update if public IP is not found
    • Do not save invalid IP if the public IP is not found
    • Set initial fail status if the public ip fetching failed
  • Public IP fetching
    • IPv6: replace bad regex with custom IPv6 extract function, affects allinkl, dnsomatic, google, he and noip
    • Remove plaintext HTTP option noip
    • over HTTPs:
      • use address of Cloudflare for "ipv4 or ipv6"
      • remove opendns option
    • over DNS: add opendns option
  • Provider specific fixes
    • Desec:
      • default host to "@" if empty
      • allow wildcard hosts
    • DNSOMatic:
      • remove username validation regex
      • treat 'all' host as proxied to reduce updates, and does the IP comparison using the last IP stored in updates.json.
    • DonDominio: update code to use newer https://dondns.dondominio.com/json endpoint
    • DuckDNS:
      • send ip address if "provider_ip": false
      • support for IPv6 (#542)
    • Dyn: always give myip= parameter, provider_ip setting disabled
    • Dynv6: set url ip field as 'auto' when "provider_ip": true (#549)
    • DynDNS: allow wildcard hosts
    • Gandi: personal access token support (#568)
    • Google: removed since no longer functional
    • Infomaniak: handle new response prefixes
    • Inwx: fix success codes detection
    • Njalla: do not compare ip received when using "provider_ip": true
    • Noip: do not check for received IP when using "provider_ip": true
    • OpenDNS: IP received comparison check fixed
    • Porkbun: delete ALIAS record before creating an A or AAAA record
    • Spdyn: validate the host field value even if the token is set
  • Web UI
    • Fix the ipinfo.io link for the current ip (#529)
    • Include ip version for all providers (#512)
    • Href link to the favicon fixed
  • Bump HTTP timeout from 10s to 20s due to slow NoIP servers
  • Logging:
    • correct IP version for the "ipv4 no lookup" log line
    • IPv4 only and IPv6 only debug logging (#513)
    • Creation date set correctly by CI
  • Settings:
    • Ignore echo services absent from PUBLICIP_FETCHERS
    • Web UI listening port validation:
      • Check start of unprivileged ports on Linux
      • Check if running program has bind capability on Linux

Documentation

  • Readme:
    • Fix documentation for SHOUTRRR_DEFAULT_TITLE
    • Fix all dead links
    • Fix shoutrrr bad link (#609)
    • Remove outdated ddnss http public ip fetching
    • Use relative links, now compatible with Docker Hub description sync job
  • docs/ directory:
    • fix all dead links
    • cloudflare: wildcard hosts are allowed
    • gcp: fix typo for provider name (#465)
    • dnsomatic: fix settings fields (#463)
    • infomaniak: add missing username field in example (#467)
    • opendns: fix bad provider name dyn to opendns in example (#470)
    • noip: add missing username field in example (#469)
    • inwx:
      • fix bad provider name opendns -> inwx (#468)
      • remove trail comma in JSON example
    • add missing provider_ip field in examples (#466)
    • add missing ip_version parameter for allinkl, name.com, netcup and porkbun
    • update ip_version description for all providers
    • nowdns:
      • add missing ip_version parameter
      • remove trail comma in JSON example
  • Add Kubernetes examples & documentation (#402)
  • Github:
    • Update all labels
    • More explicit title requirement in issue templates
    • Remove automated @qdm12 assignee
  • Fix typos (#532)

Maintenance

CI

  • Add markdown workflow
    • Remove docker hub description workflow
    • Build workflow ignores md files for spellcheck
  • Add goreleaser steps to build and attach binaries on release
  • Bump linter golangci-lint from v1.52.2 to v1.55.2
  • Add mocks check step
  • Force matching Shoutrrr link with go.mod shoutrrr version (#491)
  • Add dependabot configuration
  • Add build-skip workflow for required workflows
  • Bump github/codeql-action from 2 to 3 (#583)
  • Bump docker/setup-buildx-action from 2 to 3 (#587)
  • Bump docker/metadata-action from 4 to 5 (#585)
  • Bump docker/build-push-action from 4.0.0 to 5.1.0 (#582)

Dependencies

  • Remove dependency on golang.org/x/net
  • Bump breml/rootcerts from v0.2.11 to v0.2.14
  • Bump github.com/miekg/dns from v1.1.42 to v1.1.57
  • Bump golang.org/x/net from v0.1.0 to v0.17.0 (#540)
  • Bump chi from v1.5.4 to v5.0.11
  • Bump Go from 1.20 to 1.21
  • Bump Alpine from 3.18 to 3.19
  • Bump google.golang.org/grpc from 1.50.1 to 1.56.3 (#552)
  • Bump github.com/stretchr/testify from v1.8.1 to v1.8.4
  • Bump golang.org/x/mod from v0.12.0 to v0.14.0

Code

  • Dockerfile:
    • Remove outdated SHOUTRRR_DEFAULT_TITLE
    • Add HEALTH_SERVER_ADDRESS=127.0.0.1:9999
  • Migrate from net.IP* to net/netip.Addr and net/netip.Prefix
  • Drop github.com/qdm12/golibs dependency
    • internal/persistence/json: drop dependency on golibs
    • pkg/publicip/info: remove dependency on golibs
    • cmd/updater: replace golibs/connectivity with internal/health's CheckHTTP function
    • internal/settings: remove dependency on qdm12/golibs/verification
  • Configuration reading reworked to use qdm12/gosettings@v0.4.0-rc9
  • pkg/publicip/dns: set dial timeout as the value of the parent fetcher timeout
  • Namecheap: make code only IPv4 compatible
  • Servercow: use injected domain instead of re-decoding it from JSON
  • internal/update:
    • simplify shouldUpdateRecord functions shouldUpdateRecordNoLookup and shouldUpdateRecordWithLookup
    • simplify log calls
    • rename run.go to service.go
  • persistence/json:
    • simplify StoreNewIP method
    • improve data check error messages
  • internal/data: remove unused GetEvents method
  • internal/models: remove unneeded HTML string alias type
  • OVH: remove unneeded sentinel errors
  • internal/provider/providers:
    • replace ip nil check with useProviderIP check (affects duckdns, infomaniak and namecheap)
    • review HTTP headers: add missing header(s), remove unneeded headers
    • review error wrappings for client.Do and wrap using string doing http request
    • review error wrappings for validation errors
    • Use errors.BadRequest for badrequest responses only
    • Change HTTP request creation error wrappings to be a string only
    • Add missing HTTP request creation error wrappings
    • remove intermediary errors and wrap them with strings instead of other sentinel errors
  • internal/provider/errors: review update errors and wrappings
    • ErrBadHTTPStatus -> ErrHTTPStatusNotValid
    • ErrNumberOfResultsReceived -> ErrResultsCountReceived
    • ErrNoResultReceived -> ErrReceivedNoResult
    • ErrAbuse -> ErrBannedAbuse
    • ErrInvalidSystemParam -> ErrSystemParamNotValid
    • ErrNoIPInResponse -> ErrReceivedNoIP
    • ErrUnsuccessfulResponse -> ErrUnsuccessful
    • Remove ErrRequestEncode and ErrRequestMarshal and wrap errors with string instead
    • Remove ErrUnmarshalResponse and wrap errors with string instead
    • Add ErrResponseTooShort - Remove ErrNotFound and replace with more precise not found errors
    • Add ErrRecordResourceSetNotFound error
    • Sort errors list alphabetically
    • Change Empty -> NotSet
    • Change Malformed -> NotValid
  • internal/shoutrrr new package
  • .gitignore: fix /data path

Note: re-released as v2.6.0 to have permissions fixed for goreleaser to work (c338c28)

Don't miss a new ddns-updater release

NewReleases is sending notifications on new releases.