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:
- New DNS providers support:
- 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 ofdomain
- Replace
no_dns_lookup
option withproxied
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) withhttp.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 withProxied()
(#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