github qdm12/ddns-updater v2.5.0

latest release: v2.6.0
9 months ago


  • 🆕 providers
  • Shoutrrr library update to v0.7.0
  • Cloudflare: create record if it does not exist (#477)
  • DNSPod: log entire JSON response on error
  • Dreamhost: allow to specify a custom host
  • Specify resolver address with the RESOLVER_ADDRESS environment variable
  • Specify resolver timeout with the RESOLVER_TIMEOUT environment variable
  • Retry getting IP address up to 3 times
  • Use v0.2.11 for TLS certs
  • Add destination to notification errors
  • Add GHCR registry image (#259)
  • pkg/publicip/info package (#189)
  • pkg/publicip: do not use providers banning us


  • Cloudflare:
    • key -> userServiceKey variable name (#462)
    • fix service key regex
  • dd24:
    • API call and fix (#236)
    • Handle non-empty responses
  • add dual_stack parameter (#270, thanks @quantum-byte)
  • DNSOMatic:
    • allow email addresses as user field
    • remove password regex check
  • DNSPod add IPv6 record ID finder
  • FreeDNS fix no ip change messages decoding
  • Linode fix error decoding and set name field when creating record
  • LuaDNS match configured host instead of first record (#249)
  • Namecheap XML decoding error & allow empty IP field in response
  • OVH:
    • fix signature in api mode
    • support nochg responses
  • Spdyn response handling for good and nochg
  • SHOUTRRR_ADDRESSES case sensitivity fixed
  • Write JSON file from CONFIG variable
  • DNS public IP fetching timeout fixed
  • Better error messages for JSON decoding errors
  • Shoutrrr validation error wrapping


  • Fix line endings to lf (#220)
  • Remove microbadger which went EOL
  • Remove unneeded /tmp/data directory in Dockerfile
  • Use for program start log information
  • Update .devcontainer definition files and readme

Code health

  • General refactoring involving:
    • Return concrete structs instead of interfaces
    • Accept locally defined interfaces as narrow as possible
    • Export returned struct types from exported functions
    • Do not export interfaces for other packages to use
  • Define and use sentinel errors
  • Wrap all sentinel errors
  • Use string comparisons instead of length for string variables
  • Remove short if error checks
  • Interface composition for Database
  • HTTP client logger middleware
  • internal/backup package refactor
  • internal/health: remove unneeded logger argument from functions
  • internal/settings/*: validate using local regexes
  • internal/settings/dyn: change JSON field tag from password to client_key (with retro-compatibility)
  • internal/settings/providers/dyn: more information on bad request error
  • internal/settings/providers/ovh: Add error context to errors
  • internal/settings/providers: rework IP string search code
  • Change database id to be uint instead of int
  • Remove GetAllDomainsHosts database method
  • Return string instead of error when appropriate (linode)


  • Upgrade golangci-lint from v1.41.1 to v1.52.2
  • Enable all default linters
  • Add linters and fix new errors: ireturn, revive, asasalint, bidichk, containedctx, cyclop, decorder, durationcheck, errchkjson, errname, errorlint, execinquery, forcetypeassert, gomoddirectives, grouper, interfacebloat, maintidx, makezero, nilnil, nosprintfhostport, promlinter, reassign, tenv, usestdlibvars, goerr113, dupword. paralleltest, musttag, gocheckcompilerdirectives
  • Remove deprecated linters: deadcode, structcheck and varcheck
  • Update exclude rules


  • Upgrade Go from 1.16 to 1.20
  • Remove unneeded alpine tzdata package
  • Upgraded Alpine from 3.13 to 3.18


  • Allow slash in branch name for docker image tags (#219)
  • Remove go modules tidy check
  • Add UID and GID build arguments
  • Bump GitHub actions versions (#353)
  • Restrict publish image trigger events


  • Use instead of logger from
  • Upgrade qdm12/goshutdown from v0.1.0 to v0.3.0
  • Upgrade
    • Wrap errors in config package with environment variable name
    • Update logger


  • Fix links in .github/


  • Document RESOLVER_ADDRESS environment variable
  • Add Build the image section
  • Clarify how to use another user ID for the container
  • Rework metadata badges
  • Fix lint errors
  • Remove sanitize query parameter from svg tag
  • Autoformat document


  • Cloudflare:
    • host parameter should be @
    • remove unneeded steps (#363)
  • DuckDNS: fix provider_ip not for ipv6
  • Dyn: change JSON field from password to client_key (with retro-compatibility)
  • FreeDNS: add domain setup section (#238)
  • Gandi: fix JSON example syntax (#362)
  • Google: fix JSON example (#223)

Don't miss a new ddns-updater release

NewReleases is sending notifications on new releases.