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 deprecateIPV6_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
- DNS fetching uses DNS over TLS (DoT) only 🔒,
- 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
, disableSHOUTRRR_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 replaceLISTENING_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)
- send ip address if
- 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
- Desec:
- Web UI
- 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
- Ignore echo services absent from
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
- Fix documentation for
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
toopendns
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
- fix bad provider name
- 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 missing
- 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
- Remove outdated
- Migrate from
net.IP*
tonet/netip.Addr
andnet/netip.Prefix
- Drop
github.com/qdm12/golibs
dependencyinternal/persistence/json
: drop dependency on golibspkg/publicip/info
: remove dependency on golibscmd/updater
: replace golibs/connectivity withinternal/health
'sCheckHTTP
functioninternal/settings
: remove dependency onqdm12/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
andshouldUpdateRecordWithLookup
- simplify log calls
- rename run.go to service.go
- simplify shouldUpdateRecord functions
persistence/json
:- simplify
StoreNewIP
method - improve data check error messages
- simplify
internal/data
: remove unusedGetEvents
methodinternal/models
: remove unneededHTML
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 stringdoing http request
- review error wrappings for validation errors
- Use
errors.BadRequest
forbadrequest
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
- replace ip nil check with
internal/provider/errors
: review update errors and wrappingsErrBadHTTPStatus
->ErrHTTPStatusNotValid
ErrNumberOfResultsReceived
->ErrResultsCountReceived
ErrNoResultReceived
->ErrReceivedNoResult
ErrAbuse
->ErrBannedAbuse
ErrInvalidSystemParam
->ErrSystemParamNotValid
ErrNoIPInResponse
->ErrReceivedNoIP
ErrUnsuccessfulResponse
->ErrUnsuccessful
- Remove
ErrRequestEncode
andErrRequestMarshal
and wrap errors with string instead - Remove
ErrUnmarshalResponse
and wrap errors with string instead - Add
ErrResponseTooShort
- RemoveErrNotFound
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)