ddns-updater

Container to update DNS records periodically with WebUI for many DNS providers

MIT License

Stars
1.3K
Committers
45

Bot releases are hidden (Show)

ddns-updater - v2.8.0 Latest Release

Published by qdm12 30 days ago

Pre-built binaries are attached at the bottom of this release notes in the Assets section. Feel free to πŸ‘ the release!

Features

  • Read both domain ("eTLD+1") and owner (aka host) from the domain field
    • retro-compatible change, host or owner field still work if set
    • documentation updated to only use the domain field
  • Use umask from operating system to set permissions on created files
  • UMASK option to configure a custom umask value to use

Fixes

  • PublicIP HTTP echo: remove google provider which no longer works
  • Porkbun:
    • remove trailing '.' from ALIAS delete API call (#775)
    • fix wildcard behavior (#773)
  • noip: force useProviderIP to false when using IPv6
  • Don Dominio: remove unneeded name field
  • Upgrade github.com/qdm12/gosettings from v0.4.1 to v0.4.4-rc1
  • Bump github.com/breml/rootcerts from 0.2.17 to 0.2.18 (#814)

Changes

  • Deprecate provider_ip config field completely
    • change should not affect any existing configurations
    • change solves issues with dual stack updates (#767)
    • this option was unneeded and added unneeded complexity

Documentation

  • Readme: add instructions to build latest binary
  • Documentation updated to only use the domain field for both the domain and owner/host.
  • Readme: add README.md and docs/ versioned links for each recent releases
  • Readme: add AUR package name to features list section
  • Goip: fix documentation for the host parameter field
  • OVH: link to page to retrieve the consumer_key value
  • Porkbun: fix discrepancy in parameter field names
  • Readme: remove outdated Kanban Github board link

Maintenance

Code health

  • Rename cmd/updater to cmd/ddns-updater to have binaries named as ddns-updater by default
  • internal/providers:
    • split out settings validation in its own pure function
    • move domain check to each provider validation function
    • typo 'agend' fixed to 'agent' in user agent banned error (#790)
  • internal/models: remove unused DomainHost struct
  • rename host to owner
    • Retro-compatible change, host field still works
    • Code updated to use owner variable name
  • internal/providers/porkbun: refactor API code to use a generic httpPost function
  • internal/persistence/json: change mutex to be non embedded in Database struct
  • CI: ignore duckdns.org for links check

Dependencies

  • Drop dependency on github.com/chmike/domain
  • Bump golang.org/x/net from 0.26.0 to 0.29.0 (#806)
  • Bump golang.org/x/oauth2 from 0.21.0 to 0.23.0 (#802)
  • Bump github.com/qdm12/gosplash from 0.1.0 to 0.2.0 (#783)
  • Bump github.com/miekg/dns from 1.1.61 to 1.1.62 (#815)
  • Bump golang.org/x/mod from 0.18.0 to 0.21.0 (#801)
  • Bump github.com/go-chi/chi/v5 from 5.0.12 to 5.1.0 (#755)
  • Upgrade temporary build image Alpine from 3.19 to 3.20
  • Bump docker/build-push-action from 5 to 6 (#747)
  • Bump DavidAnson/markdownlint-cli2-action from 16 to 17 (#811)
ddns-updater - v2.7.1

Published by qdm12 about 1 month ago

Fixes

  • publicip/http: remove google provider which no longer works
  • Porkbun: fix wildcard behavior and alias deletion
  • Noip: force useProviderIP to false for IPv6
  • Don Dominio: remove unneeded name field

Documentation fixes

  • readme: add readme and docs/ versioned links
  • goip: fix documentation for the host field

Other minor fixes

  • Upgrade github.com/qdm12/gosettings from v0.4.1 to v0.4.4-rc1
  • Upgrade github.com/breml/rootcerts from 0.2.17 to 0.2.18
  • CI: ignore duckdns.org for links check
ddns-updater - v2.7.0

Published by qdm12 4 months ago

Pre-built binaries are attached at the bottom of this release notes in the Assets section. Feel free to πŸ‘ the release!

Features

  • Web UI: improvements and fixes (#687)
  • changeip.com support
  • route53 simple routing support (#715)
  • CONFIG_FILEPATH (or --config-filepath) option to specify a configuration file path
  • healthchecks.io
    • fail and exit codes support
    • HEALTH_HEALTHCHECKSIO_BASE_URL option
  • container: /updater/data built-in with correct ownership (#634)
  • publicip/http:
    • add multiple providers for all IP versions: icanhazip, ident, nnev, wtfismyip, seeip.org
    • add changeip for ipv4orv6
  • publicip/info: add ip2location.io provider
  • SERVER_ENABLED option defaulting to yes
  • Print version when the first argument is version, -version or --version
  • server: serve root at /rooturl on top of /rooturl/
  • validate domain strings for providers using it (#638)

Fixes

See v2.6.1 for fixes incorporated in this release compared to v2.6.0

  • container: rename /updater/app to /updater/ddns-updater so it can easily be found in running processes (see #729)
  • health server: only run it when running in a container
  • trim spaces from each "host" value
  • cloudflare: prevent empty "key" value if "email" is set
  • godaddy: link to comment when status code 403 is received
  • ovh: add no host case handling

Documentation

  • readme: update for standalone binaries
    • update description and title to be generic and non-specific to containers
    • describe availability as container image and prebuilt binaries
    • split features in subsections
  • readme: fix public ip echo custom url prefix url:https:// instead of https://
  • readme: RESOLVER_ADDRESS description improved
  • readme: HEALTH_HEALTHCHECKSIO_UUID description improved
  • readme: reference Qnap setup guide (issue #708)
  • readme: better explain container directory and file creation
  • readme: fix missing allinkl document link
  • contributing document with example provider
    • add example provider in code and docs/example.md
    • merge contributing guides together
    • add contributing section on adding a new provider
  • contributing: change 'remote containers extension' to new 'dev containers extension' (#696)
  • devcontainer: change 'remote containers extension' to new 'dev containers extension'
  • docs/infomaniak.md: add missing details and guide (#677)
  • docs/: fix typo identifiersuffix -> identifier suffix

Maintenance

Coding

  • migrate to service architecture with github.com/qdm12/goservices (#743)
  • porkbun: add context to top level errors
  • linter
    • remove invalid configuration file fields
    • add multiple linters
  • cloudflare: unexport createRecord method
  • public ip: better error messages stating the provider type if unknown
  • cmd/updater: split main function into smaller functions
  • gcp: validate credentials JSON object has "type" field
  • change ttl type from int/uint/int32 to uint32

Dependencies

  • drop Google SDK dependency
    • depend only on golang.org/x/oauth2
    • reduce program size from 17MB to 11.5MB
  • bump github.com/qdm12/gosettings from 0.4.0-rc9 to 0.4.1 (#683)
  • bump github.com/breml/rootcerts from 0.2.14 to 0.2.17 (#612, #631, #741)
  • bump github.com/miekg/dns from 1.1.57 to 1.1.61 (#600, #745)
  • bump golang.org/x/mod from 0.14.0 to 0.18.0 (#637, #736)
  • bump github.com/go-chi/chi/v5 from 5.0.11 to 5.0.12 (#654)
  • bump github.com/stretchr/testify from 1.8.4 to 1.9.0 (#662)
  • Upgrade Go from 1.21 to 1.22

CI

  • bump actions/checkout from 3 to 4 (#599)
  • bump actions/setup-go from 2 to 5 (#630)
  • bump crazy-max/ghaction-github-labeler from 4 to 5 (#596)
  • bump DavidAnson/markdownlint-cli2-action from 14 to 16 (#629, #688)
  • bump docker/login-action from 2 to 3 (#597)
  • bump docker/setup-qemu-action from 2 to 3 (#584)
  • bump golangci-lint to v1.56.2
  • bump goreleaser/goreleaser-action from 5 to 6 (#737)
  • bump peter-evans/dockerhub-description from 3 to 4 (#610)
  • pin docker/build-push-action to v5
ddns-updater - v2.6.1

Published by qdm12 4 months ago

⚠️ You might want to use release v2.7.0 which is below (due to the last commit time being before)

ℹ️ This is a bugfix release built with fixes only on top of the v2.6.0 program

Fixes

  • custom: url building fixed ⚠️
  • Web UI: IPs chronological order fixed (reverse) πŸ–±οΈ
  • IP echo: allow custom urls for http ip providers
  • inwx: allow wildcard hosts
  • ionos: wildcard handling
  • name.com
    • update root domain record fixed
    • detect existing root domain records
  • noip
    • IPv6 handling fixed
    • handle useproviderip set to true correctly
  • porkbun: wildcard update fixed
ddns-updater - v2.6.0

Published by qdm12 9 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
    • desec (#496)
    • easydns (#480)
    • goip.de (#623)
    • hetzner (#503)
    • ionos
    • name.com (#474)
    • netcup.de (#361)
    • nowdns (#504)
    • zoneedit.com (#482)
  • 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/[email protected]
  • 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 (c338c28ce3ab3aa9948f0fe133307b75fe6d34d2)

ddns-updater - v2.5.0

Published by qdm12 over 1 year ago

Features

  • πŸ†• providers
    • Aliyun (#252, #253)
    • all-inkl.com (#309)
    • dynu.com (#285)
    • GCP (#337, #405)
    • inwx (#379, #473)
    • Porkbun (#217)
    • Servercow (#224)
  • 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 github.com/breml/rootcerts 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

Fixes

  • Cloudflare:
    • key -> userServiceKey variable name (#462)
    • fix service key regex
  • dd24:
    • API call and fix (#236)
    • Handle non-empty responses
  • ddnss.de 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

Maintenance

  • Fix line endings to lf (#220)
  • Remove microbadger which went EOL
  • Remove unneeded /tmp/data directory in Dockerfile
  • Use github.com/qdm12/gosplash 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)

Linting

  • 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

Build

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

CI

  • 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

Dependencies

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

Documentation

  • Fix links in .github/CONTRIBUTING.md

Readme

  • 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

./docs

  • 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)
ddns-updater - v2.4.1

Published by qdm12 about 3 years ago

  • Fix: SHOUTRRR_ADDRESSES case sensitivity
ddns-updater - v2.4.0

Published by qdm12 over 3 years ago

Features

  • Support for domaindiscount24.com (#207)
  • Support Shoutrrr addresses
  • PUBLICIP_DNS_TIMEOUT variable

Bug fixes

  • Wildcard hosts (#214)
    • Keep multi-dots wildcard host structure in display strings
    • Use a function BuildURLQueryHostname for API calls to send the correct wildcard hostname
    • Send the wildcard character in API calls
    • Fix behavior for wildcard hosts for: cloudflare, ddnss.de, digitalocean, dnsomatic, dreamhost, dyn, dynv6, google, informaniak, njalla, noip, opendns, ovh, selfhost.de, spdyn, strato and variomedia
  • Healthcheck query to 127.0.0.1:port instead of for example 0.0.0.0:port
  • DATADIR defaults to /updater/data
  • Server listens on all interfaces (IPv4 and IPv6) instead of just 0.0.0.0
  • Context dependent DNS resolutions (to exit the program promptly)
  • Larger default timeout of 3s for DNS query of public IP

Documentation

  • Add missing architectures to readme: ppc64le, s390x, riscv64 and armv6

Maintenance

  • internal/config package for environment variables
  • Remove github.com/ovh/go-ovh dependency
  • Use time/tzdata anonymous import instead of Alpine's tzdata
  • Use github.com/qdm12/goshutdown to handle program shutdown
  • Simplify file paths logic
  • Use signal.NotifyContext (introduced with Go 1.16)
  • Inject more objects to _main() in main.go:
    • params.Env
    • os.Args
    • a default parent logger
  • More robust main logic
    • Change main() to encapsulate _main() and handle OS signals itself
    • _main() returns an error instead of an exit code
  • Move setupGotify inline in _main() function
  • Local scoped buildInfo variable
  • Optimize Dockerfile for faster rebuilds, better layer caching and faster cross-builds
    • Pull xcputranslate for build platform only (faster x-builds)
    • Install golangci-lint from qmcgaw/binpot (faster)
    • Install g++ in base stage (for caching)
    • Copy xcputranslate in base stage (for caching)
    • Install golangci-lint in base stage (for caching)
    • Push ARG TARGETPLATFORM down in build stage (faster x-builds)
    • Push versioning ARGs and LABEL down in final stage (for caching)
    • Move data directory COPY up in final stage (for caching)
  • Upgrade golangci-lint to v1.41.1
  • Upgrade qmcgaw/xcputranslate to v0.6.0
  • Set Docker test stage entrypoint in Dockerfile instead of CI
ddns-updater - v2.3.0

Published by qdm12 over 3 years ago

Features

  • HTTP and DNS Public IP fetching options (#136, #187)
  • Njalla support (#180, #181)
  • SPDyn support (#182, #179)
  • Variomedia support (#208, #174)
  • Allow to run without settings
  • debug log level
  • HEALTH_SERVER_ADDRESS to change the internal health server listening address
  • Request URL and body debug logs for each provider

Fixes

  • Read CONFIG environment variable with case sensitivity (#192) - thanks @mchill
  • Dreamhost: create record before removing outdated one (#206)
  • ipversion display (#190)
  • ROOT_URL behavior when served outside of root (bug introduced with go-chi)
  • IPV6_PREFIX support to avoid unneeded updates when using IPV6

Maintenance

  • Use embed for static UI (#134)
  • internal/settings shared code in sub packages
  • Move settings construction from internal/params to internal/settings
  • Split each provider in own subpackage in internal/settings
  • Rename each provider file to provider.go
  • Upgrade all Go dependencies
  • Upgrade devcontainer settings
  • Upgrade linting setup with Golangci-lint to v1.40.1
  • Add more linters
  • Remove rules from .golangci.yml in favor of inline //nolint: comments
  • Remove regex.Matcher arg if not needed for some providers
  • Common receiver struct for all providers
  • Use io instead of ioutil whenever possible
ddns-updater - v2.2.0

Published by qdm12 over 3 years ago

Features

  • pkg/publicip package to fetch your public IP address over HTTPs and DNS (#158 and #186)

Documentation

  • Fix #175 (#176)

Maintenance

  • Remove unused Insert database method
  • Use anonymous variable name _ for unused matcher argument to settings constructors
ddns-updater - v2.1.0

Published by qdm12 over 3 years ago

Features

  • Only call the DNS APIs if the public IP address changes (#63)
  • Only one ip method per ip version (ipv4, ipv6, ipv4/v6) (#63)
  • Fetches the public ip address once every period for all records (#63)
  • Support to update ipv4 and ipv6 records separately
  • Support multiple comma separated hosts for each setting
  • Read the JSON configuration from an environment variable CONFIG (#62)
  • New IP fetch methods:
    • Google (#69)
    • NoIP (#74)
    • ddnss.de removed as it's geo-blocked
  • New DNS providers support:
    • Google (#70)
    • Don dominio (#85)
    • DynDNS (#56)
    • He.net (#96)
    • DNS-O-Matic (#97)
    • Selfhost.de (#122)
    • Digital ocean (#110)
    • Strato (#132)
    • LuaDNS (#137)
    • OVH (#127)
    • Dynv6 (#133)
    • OpenDNS (#126)
    • Linode (#144)
    • Gandi (#149)
    • FreeDNS (#173)
  • Cloudflare: obtain identifier programmatically (#71)
  • IPv6 support for all providers except Namecheap (#71 & #72)
  • Resolve IP addresses for each fqdn to compare with the public IP address obtained, instead of comparing with persisted values
  • Better log messages when IP address changes
  • Handle Cloudflare proxied records (#104)
  • Stop sending updates when record is in abuse state for a cooldown period UPDATE_COOLDOWN_PERIOD (#140)
  • OVH allow domain parameter (#111)
  • OVH subdomains (*) support with zone DNS (#154)
  • DDNSgopher favicon (#159)
  • Debug logs with debug log level
  • 5-tries DNS resolution per record hostname

Bug fixes

  • Cloudflare named as Dreamhost on Web UI (#79)
  • Accept Cloudflare tokens with a - in them (#86)
  • Remove regex domain check (#92)
  • Remove regex check for Clouidflare API key (#101)
  • Accept email addresses with + in them (#112)
  • Accept GoDaddy new key format (#113 and #169)
  • Listening port defaults to 8000 outside Docker (#152)
  • Remove GoDaddy secret regex check

Changes

  • DuckDNS setting changed to host instead of domain
  • Replace no_dns_lookup option with proxied option only valid for Clouflare (#160)

Documentation

  • Add issue templates
  • Readme improved (#106, #151, #165, #167)
  • Readme sections moved to docs (#128) (thanks @gauravspatel)
  • Timezone TZ variable (#90)
  • DuckDNS documentation fix (#171)
  • DDNSgopher logo in readme (#157)
  • Architecture section in readme

Maintenance

  • DNS provider names sorted alphabetically
  • UNSET status before a record gets updated the first time
  • Using Alpine 3.13 and Go 1.16 for building the binary
  • Update Go modules dependencies
  • Refactor HTTP servers (#164)
    • Rework current server
    • Update call is blocking
    • Run first update without blocking
  • Build information written to Go binary at build
  • Use native http.Client (#145) with http.NewRequestWithContext instead of custom client interface
  • Remove uuid dependency
  • Streamline HTTP headers setting
  • Logger upgraded with golibs (using native log instead of Uber's zap) (#170)
  • Replace DNSLookup() method name with Proxied() (#160)

Dev tooling

  • Update dev container settings
    • Go extension
    • Remove rewrap extension
    • SSH bind mount as read write
  • Remove local vscode directory
  • Upgrade golangci-lint to 1.37.0
  • Add more Go linters to .golangci.yml
  • Removed some Github workflows
    • Greetings doesn't work on forked PRs
    • Misspell is done with golangci-lint
    • Security workflow doesn't run on Scratch based docker images
  • Default BUILDPLATFORM=linux/amd64 for older Docker builds
  • Improve Github Actions workflows to build images for all branches and releases
ddns-updater - Scratch based Docker image

Published by qdm12 over 4 years ago

  • No SQLite support
  • JSON file stored data
  • Periodic backup
ddns-updater - Stable release and backward compatible with SQlite

Published by qdm12 over 4 years ago

Associated Docker image tag is also v1

  • Web UI (only display)
  • Support for A records update for GoDaddy, Namecheap, Cloudflare, Dreamhost, NoIP, DNSPod, Infomaniak, ddnss.de and DuckDNS
  • Support for AAAA records update for Infomaniak and ddnss.de
  • Using JSON file for persistence of changes, with SQLite for backward compatibility
  • Compatible with Gotify
  • Docker healthcheck
  • Multiple IP methods available
Package Rankings
Top 3.47% on Proxy.golang.org
Badges
Extracted from project README's
Build status dockeri.co Last release size Latest size GitHub last commit GitHub commit activity GitHub closed PRs GitHub issues GitHub closed issues Lines of code MIT
Related Projects