Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
280 commits
Select commit Hold shift + click to select a range
712486e
Merge branch 'main' into release_candidate_v5
TomOnTime Jul 11, 2026
0df590a
CHORE: Adopt models.MustNewDomainConfig where appropriate
TomOnTime Jul 11, 2026
bfa8067
CHORE: Add Must* equivs of RecordConfig factories (#4461)
TomOnTime Jul 11, 2026
3b99246
Merge branch 'main' into release_candidate_v5
TomOnTime Jul 11, 2026
7f6139a
DOCS: Document RecordConfig V3 best practices (#4464)
TomOnTime Jul 12, 2026
68bd3d1
CHORE: "vet -fix" (#4465)
TomOnTime Jul 13, 2026
83749ca
Merge branch 'main' into release_candidate_v5
tlimoncelli26 Jul 13, 2026
9bd72ab
Switch to dnspatched
tlimoncelli26 Jul 13, 2026
641d744
CHORE: Fix ALIAS and modernize BIND, CLOUDFLAREAPI, GANDI_V5 (#4468)
TomOnTime Jul 14, 2026
b017a1d
DNSMADEEASY: fix TXT ≥256-byte round-trip and ALIAS/ANAME diff loop; …
vojtad Jul 14, 2026
ac46efd
Merge branch 'main' into release_candidate_v5
TomOnTime Jul 14, 2026
d39bc03
updated go.mod
tlimoncelli26 Jul 14, 2026
01ceae1
fix blackslash problem
tlimoncelli26 Jul 14, 2026
f167369
Merge branch 'release_candidate_v5' into release_candidate_v5_dnspatched
tlimoncelli26 Jul 14, 2026
eed889f
Merge branch 'main' into release_candidate_v5
tlimoncelli26 Jul 14, 2026
7428911
Change Feature Flags to Feature Summary
tlimoncelli26 Jul 14, 2026
cce5826
Merge branch 'main' into release_candidate_v5
tlimoncelli26 Jul 15, 2026
4dfcf0c
REFACTOR: Modernize AZURE_ALIAS and others (#4473)
TomOnTime Jul 15, 2026
50000e0
CHORE: Generated files should have a comment indicating so (#4476)
TomOnTime Jul 15, 2026
79647b6
REFACTOR: TargetHost is never @, add TargetHostSRV (#4478)
TomOnTime Jul 15, 2026
82202ee
REFACTOR: Modernize GCLOUD. New TXT type handling maintains segments …
TomOnTime Jul 16, 2026
2d57bb7
ROUTE53: Modernize (#4481)
TomOnTime Jul 16, 2026
f530e0e
CLOUDFLAREAPI: Reduce use of legacy functions (#4480)
TomOnTime Jul 16, 2026
63c703f
Merge branch 'main' into release_candidate_v5
tlimoncelli26 Jul 16, 2026
b3f12e6
CHORE: Fix comments (#4483)
TomOnTime Jul 16, 2026
3634209
Merge branch 'main' into release_candidate_v5
TomOnTime Jul 16, 2026
12f5bc1
linting
TomOnTime Jul 16, 2026
da02ca0
REFACTOR: Modernize CF_SINGLE_REDIRECT FRAME URL URL301 (#4484)
TomOnTime Jul 17, 2026
337f115
AKAMAIEDGEDNS: Fix bugs mentioned in Issue (#4466) while running inte…
meghanakudua02 Jul 17, 2026
e5e5c10
REFACTOR: Modernize CLOUDFLAREAPI and AZURE_DNS (partial). Add docs. …
TomOnTime Jul 18, 2026
cf54521
NETBIRD: Add apiurl creds argument (#4486)
3l0w Jul 16, 2026
fa6403c
CHORE: Fix GoReleaser to skip release candidates (#4485)
TomOnTime Jul 17, 2026
1005c87
Modernize Azure DNS provider (#4490)
TomOnTime Jul 18, 2026
ef14a1c
wip!
tlimoncelli26 Jul 19, 2026
9b68b96
linting
tlimoncelli26 Jul 19, 2026
b02462c
Modernize Azure Private DNS provider (#4491)
TomOnTime Jul 19, 2026
562a904
Replace dnsutilv1 functions AddOrigin and TrimDomainName (#4504)
TomOnTime Jul 20, 2026
62db83f
Merge branch 'main' into release_candidate_v5
TomOnTime Jul 20, 2026
7320220
Merge branch 'main' into release_candidate_v5
tlimoncelli26 Jul 21, 2026
f405a4a
Merge branch 'main' into release_candidate_v5
tlimoncelli26 Jul 21, 2026
d3c7a48
Release v5.0.0-rc1 (#4521)
TomOnTime Jul 21, 2026
5ddee18
CHORE: Merge from base (#4527)
TomOnTime Jul 21, 2026
4227b12
CHORE: Fix merge error (#4528)
TomOnTime Jul 21, 2026
1e2fa8b
Modernize CNR provider (#4493)
TomOnTime Jul 21, 2026
f518593
Modernize Netnod provider (#4498)
TomOnTime Jul 21, 2026
97f6a9c
NETNOD: Fix typo (#4530)
TomOnTime Jul 21, 2026
70585b2
Modernize DigitalOcean provider (#4494)
TomOnTime Jul 21, 2026
92588ce
Modernize Gandi v5 provider (#4495)
TomOnTime Jul 21, 2026
c00ada9
Modernize HE.net DNS provider (#4496)
TomOnTime Jul 21, 2026
c7324b3
Modernize TransIP provider (#4499)
TomOnTime Jul 21, 2026
7e2673f
Modernize Name.com provider (#4497)
TomOnTime Jul 21, 2026
93f655c
AXFRDDNS: Adopt dnsv2 (partial) (#4529)
TomOnTime Jul 21, 2026
f98aa65
Modernize Vercel provider (#4500)
TomOnTime Jul 21, 2026
646156c
Sync with main branch (#4533)
TomOnTime Jul 21, 2026
8f51939
update is_modern.sh to include dnsv1 (#4535)
TomOnTime Jul 22, 2026
a9ff22f
AKAMAIEDGEDNS: Modernize record conversion (#4537)
TomOnTime Jul 22, 2026
f92f03a
CSCGLOBAL: Modernize record conversion (#4542)
TomOnTime Jul 22, 2026
d076712
gidinet: Modernize record conversion (#4552)
TomOnTime Jul 22, 2026
f56aafd
NAMEDOTCOM: Upgrade to diff2 (#4565)
TomOnTime Jul 22, 2026
cae316b
CHORE: Sync with main (#4589)
TomOnTime Jul 22, 2026
ff88d92
netbird: Modernize record conversion (#4567)
TomOnTime Jul 22, 2026
4a76fbf
unifi: Modernize record conversion (#4582)
TomOnTime Jul 22, 2026
348304e
oracle: Modernize record conversion (#4572)
TomOnTime Jul 22, 2026
4c07681
infomaniak: Modernize record conversion (#4557)
TomOnTime Jul 22, 2026
153c0d6
Release v5.0.0-rc2 (#4591)
TomOnTime Jul 22, 2026
233e37f
TRANSIP: Fix TXT bug (#4592)
TomOnTime Jul 23, 2026
8410573
Merge branch 'main' into release_candidate_v5
TomOnTime Jul 23, 2026
053d842
go mod tidy
TomOnTime Jul 23, 2026
5b6c8ce
Merge branch 'main' into release_candidate_v5
TomOnTime Jul 23, 2026
fb07524
gcore: Modernize record conversion (#4551)
TomOnTime Jul 23, 2026
40ad888
ns1: Modernize record conversion (#4570)
TomOnTime Jul 23, 2026
a5894e8
openwrt: Modernize record conversion (#4571)
TomOnTime Jul 23, 2026
a862f2b
luadns: Modernize record conversion (#4562)
TomOnTime Jul 23, 2026
5d6e508
TRANSIP: Fix TXT records (#4597)
TomOnTime Jul 23, 2026
cde24d1
softlayer: Modernize record conversion (#4580) (BLIND MERGE)
TomOnTime Jul 23, 2026
9a2e03b
realtimeregister: Modernize record conversion (#4575)
TomOnTime Jul 23, 2026
c6bc4e0
REFACTOR: Convert .GetRDATA().(type) to .AsTYPE (#4602)
TomOnTime Jul 23, 2026
fcb93e9
BUGFIX: IsPrivateType has an off-by-one error
TomOnTime Jul 23, 2026
8fbde16
delete .bak files
TomOnTime Jul 23, 2026
620a04f
joker: Modernize record conversion (#4559)
TomOnTime Jul 24, 2026
088a11f
Release v4.44.1 (#4599)
TomOnTime Jul 23, 2026
8453715
dynu: Modernize record conversion (#4548)
TomOnTime Jul 25, 2026
fe93b0b
namecheap: Modernize record conversion (#4566)
TomOnTime Jul 25, 2026
4e4da9c
BUNNYDNS: Modernize record conversion (#4540)
TomOnTime Jul 25, 2026
97da255
REFACTOR: Add flags to NewRecordConfig() (#4603)
TomOnTime Jul 25, 2026
5c24a8d
dnsimple: Modernize record conversion (#4545)
TomOnTime Jul 26, 2026
5af75bd
loopia: Modernize record conversion (#4561)
TomOnTime Jul 26, 2026
218b565
ALIDNS: Modernize record conversion (#4538)
TomOnTime Jul 26, 2026
927041e
Modernize PowerDNS provider (#4501)
TomOnTime Jul 27, 2026
823586c
vultr: Modernize record conversion (#4583)
TomOnTime Jul 27, 2026
c39ac7f
INFOMANIAK: Disable tests for features that do not exist (#4613)
TomOnTime Jul 27, 2026
2ea8402
hetznerv2: Modernize record conversion (#4554)
TomOnTime Jul 27, 2026
3018a15
Merge branch 'main' into release_candidate_v5
TomOnTime Jul 27, 2026
7a40210
porkbun: Modernize record conversion (#4574)
TomOnTime Jul 27, 2026
a974a34
powerdns: exclude from DS and DNSKEY record tests (#4614)
jpbede Jul 27, 2026
430d2c6
SOFTLAYER: Use diff2.ByRecord instead of diff.NewCompat (#4606)
TomOnTime Jul 27, 2026
33d8f21
huaweicloud: Modernize record conversion (#4556)
TomOnTime Jul 27, 2026
cb6e7ae
CHORE: Eliminate legacy SOA fields (#4615)
TomOnTime Jul 27, 2026
70425d2
gigahost: Modernize record conversion (#4553)
TomOnTime Jul 27, 2026
c813ead
sakuracloud: Modernize record conversion (#4578)
TomOnTime Jul 28, 2026
b56dfd3
VERCEL: Modernize fields (#4619)
TomOnTime Jul 28, 2026
38a2273
CNR: Use diff2.ByRecord instead of diff.NewCompat (#4604)
TomOnTime Jul 28, 2026
41b6cc6
fortigate: Modernize record conversion (#4550)
TomOnTime Jul 28, 2026
c27f98b
CNR: Modernize field access (#4620)
TomOnTime Jul 28, 2026
fd4dffb
FORTIGATE: Debug failing IGNORE tests (#4621)
TomOnTime Jul 29, 2026
94b973e
CLOUDFLAREAPI: Modernize field access (#4625)
TomOnTime Jul 29, 2026
fa27836
linode: Modernize record conversion (#4560)
TomOnTime Jul 29, 2026
6259760
VULTR: convert fields (#4618)
TomOnTime Jul 30, 2026
0c648c7
Merge branch 'main' into release_candidate_v5
TomOnTime Jul 30, 2026
a3d31ee
dnscale: Modernize record conversion (#4544)
TomOnTime Jul 30, 2026
32ecb35
inwx: Modernize record conversion (#4558)
TomOnTime Jul 31, 2026
ab531a1
CLOUDNS: Modernize record conversion (#4541)
TomOnTime Jul 31, 2026
259b4b7
netlify: Modernize record conversion (#4569)
TomOnTime Jul 31, 2026
fffcf8d
Misc fixes: CLOUDFLAREAPI, TRANSIP, and nrc.Flags (#4627)
TomOnTime Jul 31, 2026
9901840
Update deps
TomOnTime Jul 31, 2026
b4ef8a9
adopt newest dnspatched
TomOnTime Jul 31, 2026
c5585bd
Merge branch 'main' into release_candidate_v5
TomOnTime Jul 31, 2026
4e7b3cc
CSCGLOBAL: Use diff2.ByRecord instead of diff.NewCompat (#4605)
TomOnTime Jul 31, 2026
ec4e9b0
REFACTOR: Remove models.Records.String() (#4631)
TomOnTime Jul 31, 2026
a0acb65
Merge branch 'main' into release_candidate_v5
TomOnTime Jul 31, 2026
c1d31c9
CORE: Upgrade OVH to RecordConfig v3 functions (#4503)
TomOnTime Aug 1, 2026
d66b241
websupport: Modernize record conversion (#4584)
TomOnTime Aug 1, 2026
ba1463d
tencentdns: Modernize record conversion (#4581)
TomOnTime Aug 1, 2026
1f7ad07
rwth: Modernize record conversion (#4577)
TomOnTime Aug 1, 2026
62031d9
packetframe: Modernize record conversion (#4573)
TomOnTime Aug 1, 2026
4873383
desec: Modernize record conversion (#4543)
TomOnTime Aug 1, 2026
0f1f821
domainnameshop: Modernize record conversion (#4547)
TomOnTime Aug 1, 2026
8950faa
AUTODNS: Modernize record conversion (#4539)
TomOnTime Aug 1, 2026
1826646
ADGUARDHOME: Modernize record conversion (#4536)
TomOnTime Aug 1, 2026
cecd5ea
hostingde: Modernize record conversion (#4555)
TomOnTime Aug 1, 2026
3ed414a
mikrotik: Modernize record conversion (#4563)
TomOnTime Aug 1, 2026
ab2e50b
exoscale: Modernize record conversion (#4549)
TomOnTime Aug 1, 2026
eb5b16f
scaleway: Modernize record conversion (#4579)
TomOnTime Aug 1, 2026
c6af85d
dnsmadeeasy: Modernize record conversion (#4546)
TomOnTime Aug 1, 2026
990e72f
netcup: Modernize record conversion (#4568)
TomOnTime Aug 1, 2026
5cbd56e
POWERDNS: Update access to SVCB fields (#4639)
TomOnTime Aug 1, 2026
646c070
Merge branch 'main' into release_candidate_v5
TomOnTime Aug 1, 2026
7d3fc44
DNSIMPLE: Modernize field access (#4648)
TomOnTime Aug 1, 2026
7128ea7
BUNNYDNS: Modernize code (#4647)
TomOnTime Aug 1, 2026
b3d616f
PORKBUN: Modernize field access for SVCB records (#4649)
TomOnTime Aug 1, 2026
b6da8d8
Modernize DYNU's access to SVCB records (#4650)
TomOnTime Aug 1, 2026
1c629cf
Release v5.0.0-rc3 (#4651)
TomOnTime Aug 1, 2026
7b13af9
AXFRDDNS: Modernize field access (#4661)
TomOnTime Aug 2, 2026
4ccaa21
BUNNYDNS: Modernize field access (#4662)
TomOnTime Aug 2, 2026
ca08787
FORTIGATE: Modernize field access (#4666)
TomOnTime Aug 2, 2026
e755fc9
NETNOD: Modernize field access (#4668)
TomOnTime Aug 2, 2026
a9374d8
SAKURACLOUD: Modernize field access (#4670)
TomOnTime Aug 2, 2026
b9823fb
NETLIFY: toRC should not mutate native record (#4671)
TomOnTime Aug 2, 2026
58cd91d
CHORE: Remove unused SetTarget*() functions, improve warnings (#4672)
TomOnTime Aug 2, 2026
dbda6b2
JOKER: Modernize field access (#4673)
TomOnTime Aug 2, 2026
7a4bfbd
empty
TomOnTime Aug 2, 2026
dbbba21
ALIDNS: Modernize field access (#4657)
TomOnTime Aug 2, 2026
349405a
OVH: Modernize field access (#4669)
TomOnTime Aug 2, 2026
108cf31
AXFRDDNS: convert to codeberg.org/miekg/dns (dnsv2) (#4658)
shuvamk Aug 2, 2026
5a0362a
DOMAINNAMESHOP: Improve label creation
TomOnTime Aug 2, 2026
97cddcd
DESEC: Fix TXT records quote, disable TTL tests (#4677)
androw Aug 2, 2026
e32fa9c
use dc.LabelFromShort() even when not required for safety. (#4681)
TomOnTime Aug 2, 2026
5b761f3
NETCUP: Modernize field access (#4667)
TomOnTime Aug 2, 2026
f1efd81
AUTODNS: Modernize field access (#4660)
TomOnTime Aug 2, 2026
d9bbd73
CLOUDNS: Modernize field access (#4663)
TomOnTime Aug 2, 2026
11f67ba
DYNU: Modernize field access (#4665)
TomOnTime Aug 2, 2026
0b97c68
DNSMADEEASY: Unify how labels are made (#4679)
TomOnTime Aug 2, 2026
698b06f
DNSCALE: Modernize field access (#4664)
TomOnTime Aug 2, 2026
0af29d7
DNSIMPLE: Modernize field access (#4656)
TomOnTime Aug 2, 2026
30925b1
CHORE: Modernize pkg (#4674)
TomOnTime Aug 2, 2026
127e3a7
MYTHICBEATS: Convert to dnsv2 (#4682)
TomOnTime Aug 2, 2026
843c6ec
REFACTOR: Modernize the "commands/" files (#4684)
TomOnTime Aug 2, 2026
be51387
REFACTOR: Upgrade from dnsv1 to dnsv2 (#4683)
TomOnTime Aug 3, 2026
1668c0f
REFACTOR: Remove RC.DnsKey* .Loc* .Smimea* (#4686)
TomOnTime Aug 3, 2026
e5dc8f6
Release v5.0.0-rc4 (#4689)
TomOnTime Aug 3, 2026
f38ac46
REFACTOR: Eliminate GetTargetCombined*() / modernize CF_WORKER_ROUTE …
TomOnTime Aug 3, 2026
d5b2424
DESEC: Update DNSSEC capabilities (#4692)
androw Aug 3, 2026
ad65eb1
REFACTOR: Convert more GetTargetField()s (#4694)
TomOnTime Aug 4, 2026
da6f97c
DNSMADEEASY: Cover label conversion in types_test.go (#4696)
vojtad Aug 4, 2026
c881690
REFACTOR: Eliminate legacy MxPreference field (#4701)
TomOnTime Aug 5, 2026
d75427a
DOMAINNAMESHOP: Reject NS records at apex (#4702)
SimenBai Aug 5, 2026
b694126
REFACTOR: Remove legacy fields for SRV and NAPTR (#4703)
TomOnTime Aug 5, 2026
f486bdc
NETCUP: fixup provider to make it pass the latest integration test su…
kordianbruck Aug 6, 2026
0084086
DESEC, POWERDNS: Add audit rules for DNSKEY records (#4705)
androw Aug 6, 2026
06e21a7
dc copies mutex
TomOnTime Aug 6, 2026
5729f28
BUGFIX: rejectif.NsAtApex never matched the apex label (#4707)
SimenBai Aug 7, 2026
c726857
Merge branch 'main' into release_candidate_v5
TomOnTime Aug 7, 2026
6d96e27
REFACTOR: Reduce use of SetTarget(), GetTargetField() and .target (#4…
TomOnTime Aug 7, 2026
25ecc21
REFACTOR: Remove more RecordConfig fields (#4711)
TomOnTime Aug 7, 2026
95f4b92
REFACTOR: Reduce the use of GetTargetField() (#4714)
TomOnTime Aug 8, 2026
948395e
TEST: providergolden: Add -record and -update to specific tests (#4713)
TomOnTime Aug 8, 2026
b2e068b
Revert "TEST: providergolden: Add -record and -update to specific tes…
TomOnTime Aug 8, 2026
b0583a4
CI: Add "golden" data files for most providers
TomOnTime Aug 8, 2026
d5b1176
empty
TomOnTime Aug 8, 2026
98afb21
Merge branch 'release_candidate_v5' into tlim_v5_golden_no_aka
TomOnTime Aug 8, 2026
4a058a0
Add provider conversion golden tests (#4716)
TomOnTime Aug 8, 2026
0434d5a
REFACTOR: Optimize switch on .Type to be .TypeNum (#4718)
TomOnTime Aug 8, 2026
0de7521
BENCHMARK: Compare TypeNum and RDATA type switches (#4719)
TomOnTime Aug 8, 2026
a94f7e3
REFACTOR: Switch on RDATA types where safe (#4720)
TomOnTime Aug 8, 2026
6b8b047
Merge branch 'main' into release_candidate_v5
TomOnTime Aug 8, 2026
3661095
NEXDNS: Modernize for v5
TomOnTime Aug 8, 2026
c3d1163
Release v5.0.0-rc5 (#4726)
TomOnTime Aug 8, 2026
95c47d7
CI: Lint, add all env variables, improve gotestsum usage (#4727)
TomOnTime Aug 8, 2026
143376a
REFACTOR: Remove .target from RecordConfig, fix related SetTarget/Get…
TomOnTime Aug 9, 2026
25e4f81
WEBSUPPORT: fix MX/SRV empty priority and v5 preparation (#4732)
mtmn Aug 9, 2026
b7c1605
ci(cache): Cache go modules (#4731)
TomOnTime Aug 9, 2026
1066c3e
Merge branch 'main' into release_candidate_v5
TomOnTime Aug 9, 2026
d782d96
CORE: Remove legacy conversion code (#4735)
TomOnTime Aug 9, 2026
ceb642a
update dnspatched (#4737)
TomOnTime Aug 10, 2026
3da2033
AKAMAIEDGEDNS: Move AnswerType out of RecordConfig (#4709)
TomOnTime Aug 10, 2026
5134406
BUGFIX: Activate single-dot policy (#4739)
TomOnTime Aug 10, 2026
b507c06
REFACTOR: More cleanups and modernization (#4741)
TomOnTime Aug 12, 2026
41c6744
Fix comments
TomOnTime Aug 12, 2026
28e6792
Merge branch 'main' into release_candidate_v5
TomOnTime Aug 12, 2026
542bab3
Release v5.0.0-rc7 (#4744)
TomOnTime Aug 12, 2026
c73196c
NAMEDOTCOM: Fix ALIAS regression (#4746)
TomOnTime Aug 12, 2026
09d026c
Release v5.0.0-rc8 (#4747)
TomOnTime Aug 12, 2026
7950089
AKAMAIEDGEDNS: Add Akamai Edge DNS golden tests (#4717)
TomOnTime Aug 12, 2026
bdc97e1
REFACTOR: Eliminate pkg/diff, fix CLOUDNS ordering natively (#4751)
TomOnTime Aug 13, 2026
306a54e
CHORE: Upgrade umbrelladocs/linkspector (#4752)
TomOnTime Aug 13, 2026
fc02655
REFACTOR: Use models.Records, not []*models.RecordConfig (#4750)
TomOnTime Aug 13, 2026
5815a6e
Merge branch 'main' into release_candidate_v5
TomOnTime Aug 13, 2026
1f3c702
wip!
TomOnTime Aug 13, 2026
5bb24d3
CHORE: ChangeType() -> ChangeTypeToCNAME() (#4754)
TomOnTime Aug 13, 2026
1007860
AKAMAI: Refactor how to change .Type (#4755)
TomOnTime Aug 13, 2026
a52926c
CHORE: Fix comments (#4756)
TomOnTime Aug 13, 2026
cd0c9f6
BUGFIX: integration tests audited the harness's own delegation NS rec…
SimenBai Aug 16, 2026
95e824a
Merge branch 'main' into release_candidate_v5
TomOnTime Aug 16, 2026
5d41d71
FORTIGATE: Skip TXT test (#4766)
TomOnTime Aug 16, 2026
9c8625b
BUGFIX: Unknown commands should print better error (#4769)
TomOnTime Aug 16, 2026
8f694d8
DNSCALE: fix regression in PR#4664 (#4763)
dnscale-ops Aug 17, 2026
92c9530
VERCEL: Skip NullMX tests (#4773)
SukkaW Aug 17, 2026
e55b628
TENCENTDNS: integration tests fix (#4775)
cylonchau Aug 17, 2026
a9bf993
Merge branch 'main' into release_candidate_v5
TomOnTime Aug 18, 2026
91a0428
DOCS: Fix many comments (#4783)
TomOnTime Aug 18, 2026
ce21768
BUGFIX: Fix dnssort issue not resolving all records in certain edge c…
blackshadev Aug 18, 2026
851a7bc
DYNU: Fix NAPTR replacement field, and RP trailing dot (#4785)
DustyRah Aug 18, 2026
9899adb
ALIDNS: decode punycode labels before IDNA validation (#4787)
bytemain Aug 18, 2026
07058de
POWERDNS: Fix SVCB bug (#4778)
TomOnTime Aug 18, 2026
3b254c4
EXOSCALE: Document that PTR records not supported (#4779)
TomOnTime Aug 18, 2026
05848eb
Merge branch 'main' into release_candidate_v5
TomOnTime Aug 18, 2026
d8b9c48
Release v5.0.0-rc9 (#4789)
TomOnTime Aug 18, 2026
d982ff0
empty
TomOnTime Aug 19, 2026
69d4d88
OVH: Add the ability to disable ListZones() for testing / Fix TXT rec…
TomOnTime Aug 20, 2026
7936baa
Merge branch 'main' into release_candidate_v5
TomOnTime Aug 25, 2026
612870c
chore: Linting (#4798)
TomOnTime Aug 25, 2026
8445416
CLEANUP: Use errors.New instead of fmt.Errorf when there is no format…
TomOnTime Aug 25, 2026
175b6e1
REFACTOR: Simplify boolean returns, hoist regexps, tidy error paths (…
TomOnTime Aug 25, 2026
f56dd36
BUILD: Upgrade to Go 1.27 (#4803)
TomOnTime Aug 25, 2026
f9aa09a
DOCS: Verify parameters match across code, docs, and dnscontrol.d.ts …
TomOnTime Aug 25, 2026
c571cc8
ROUTE53: Fix R53_ALIAS and R53_EVALUATE_TARGET_HEALTH bugs (#4797)
TomOnTime Aug 25, 2026
0a4ccfc
empty
TomOnTime Aug 25, 2026
243ed15
ci(codeql): Enable CodeQL advanced mode
TomOnTime Aug 25, 2026
abf7228
INFOMANIAK: Fix TXT records (#4800)
TomOnTime Aug 25, 2026
8ebbb1f
REFACTOR: Cleanups (#4811)
TomOnTime Aug 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
59 changes: 59 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: "CodeQL"

# Advanced CodeQL setup.
#
# This replaces GitHub's "default setup" for CodeQL. The default setup runs the
# Go extractor's autobuild with whatever Go is pre-installed on the runner and
# with GOTOOLCHAIN=local, which forbids downloading a newer toolchain. When
# go.mod requires a Go version newer than the runner's (e.g. `go 1.27` while the
# runner only has 1.26.x), extraction fails with:
#
# go: go.mod requires go >= 1.27 (running go 1.26.x; GOTOOLCHAIN=local)
#
# Installing Go from go.mod before the extractor runs makes the required
# toolchain the "local" one, so autobuild succeeds.
#
# NOTE: An advanced workflow and the repository's "default setup" cannot both be
# active. Disable default setup under
# Settings -> Code security -> CodeQL analysis (switch Default -> Advanced).

on:
push:
branches: [main, master, release_candidate_v5]
pull_request:
branches: [main, master, release_candidate_v5]
schedule:
- cron: "0 0 * * 1"

concurrency:
group: codeql-${{ github.ref }}
cancel-in-progress: true

jobs:
analyze:
name: Analyze (go)
runs-on: ubuntu-latest
permissions:
security-events: write
actions: read
contents: read

steps:
- name: Checkout repository
uses: actions/checkout@v7

- name: Set up Go
uses: actions/setup-go@v7
with:
go-version-file: go.mod

- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
languages: go
build-mode: autobuild

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4
with:
category: "/language:go"
4 changes: 2 additions & 2 deletions .github/workflows/pr_integration_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ jobs:
warm-gomod-cache:
runs-on: ubuntu-latest
container:
image: golang:1.26
image: golang:1.27
needs:
- integration-test-providers
outputs:
Expand Down Expand Up @@ -144,7 +144,7 @@ jobs:
if: ${{ inputs.full || (github.ref != 'refs/heads/master' && github.ref != 'refs/heads/main') }}
runs-on: ubuntu-latest
container:
image: golang:1.26
image: golang:1.27
needs:
- integration-test-providers
- warm-gomod-cache
Expand Down
1 change: 0 additions & 1 deletion .linkspector.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ ignorePatterns:
- pattern: '.*.md#$'
- pattern: '^https://cloud.digitalocean.com/account/api/tokens'
- pattern: '^https://cloud.digitalocean.com/settings/applications'
- pattern: '^https://dns.hetzner.com/settings/api-token'
- pattern: '^https://github.com/DNSControl/dnscontrol/settings/.*$'
- pattern: '^https://gitlab.com/cafferata/dnscontrol/-/pipelines/new.*$'
- pattern: '^https://my.easyname.com/en/account/api'
46 changes: 46 additions & 0 deletions REFACTORING_PROJECTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Refactoring

Useful refactoring projects. Please feel free to pick up any of these.


## Code that can probably be deleted

* RegisterCustomRecordType()/GetCustomRecordType() is no longer needed. Remove.

* I don't think the metadata "orig_custom_type" is used any more. We store to it but don't use it.

## Rewrites needed

* PTR() "magic" should be reworked as a builder called PTR(). It will be much more
cleaner and more testable. Plus it will consolidate the code into one place instead
of being some in LabelFromDnsconfigjs() and other places.

* PopulateNamesFromRaw() and MakeDomainNameVarieties() seem like a silly design. Maybe move them to pkg/nameutil, or maybe models (since that's where makeLabelNameUnicode() is)

* All the LOC() builders should be in Go, not helpers.js.

* There are multiple ways that code strips the trailing dot from a domain name. Benchmark a few and standardize on the fastest. In pkg/nameutil. Possibly have one that is extra fast but panics if there is no "." at the end.

* pkg/normalize/validate.go has half of the Transform code, the other half is in pkg/transform. An easy thing would be to move the part of pkg/normalize/validate.go and validate_test.go into pkg/normalize/transform{,_test}.go. The more difficult thing would be to move all or most of the code to pkg/transform.

* models/record.go FixPostion has an easy TODO.

* models/t_txt.go has an some easy FIXMEs.

## Bad decisions to reverse

* Providers, not Registrars + DNS Service Providers. It should be possible to make a PROVIDER() function that returns
something that is both a Reg and a DSP.

* mustbe.TargetHost() accepts "." as a special flag. This can probably be replaced by nrc.Flags{}

* models.SetLabel() should be removed (it's only used in a few places) or enhanced to also create the .NameUnicode/.NameFQDNUnicode fields. Then de-duplicate the code that does this for NewRecordConfig().

* deSEC: BUG: It mutates RecordConfigs, which will create problems if the same zone is sent to multiple providers.


## Actual new features:

* Handle "unknown types". dnsv2 has a way to managing unknown types. Investigate it and replace the half-written version (see rc.UnknownTypeName)

* pkg/diff2/analyze.go: Smarter diffs. Diffs could just show which fields changed. For example, if just the preference of an MX record changes, show "old -> new" just for the priority.
65 changes: 65 additions & 0 deletions build/astypegen/astype_generate.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package main

// Command astype_generate generates models/record_astype.go.
//
// Generates an As$TYPE() method for every rtype.
//
// Run by `go generate ./models/` (see the //go:generate directive in rdata.go)
// and by bin/generate-all.sh.

import (
"bytes"
"fmt"
"log"

dnsv2 "codeberg.org/miekg/dns"
"github.com/DNSControl/dnscontrol/v5/pkg/privatetypes"
)

const outputFile = "record_astype.go"

func main() {
var buf bytes.Buffer

buf.WriteString("// Code generated by astype_generate.go; DO NOT EDIT.\n\n")
buf.WriteString("package models\n\n")
buf.WriteString("import (\n")
buf.WriteString("\tdnsrdatav2 \"codeberg.org/miekg/dns/rdata\"\n")
buf.WriteString("\tprivatetypesrdata \"github.com/DNSControl/dnscontrol/v5/pkg/privatetypes/rdata\"\n")
buf.WriteString(")\n\n")

seen := map[string]bool{}
for _, name := range privatetypes.GetAllTypeNames() {
codepoint := dnsv2.StringToType[name]

// Skip irrelevant rtypes. Make a struct of that type.
newFn, ok := dnsv2.TypeToRR[codepoint]
if !ok {
continue
}
rd := newFn().Data()

// is this a dnsrdatav2. or privatetypes. namespace?
structName, pkgPath := StructName(rd)
pkg, ok := Namespace(pkgPath)
if structName == "" || !ok {
continue
}

method := "As" + goIdent(name)
// Have we seen this before?
if seen[method] {
continue
}
seen[method] = true

fmt.Fprintf(&buf,
"func (rc *RecordConfig) %s() %s.%s {\n\treturn rc.GetRDATA().(%s.%s)\n}\n\n",
method, pkg, structName, pkg, structName)
}

if err := writeGoFile(outputFile, buf.Bytes()); err != nil {
log.Fatal(err)
}
fmt.Printf("astype_generate.go: wrote %s\n", outputFile)
}
61 changes: 61 additions & 0 deletions build/astypegen/astypeutil.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package main

import (
"fmt"
"go/format"
"os"
"reflect"
"strings"
)

// goIdent turns a DNS type name into a valid Go identifier by dropping any
// character that is not a letter or digit (e.g. "NSAP-PTR" -> "NSAPPTR",
// "CLOUDFLAREAPI_SINGLE_REDIRECT" -> "CLOUDFLAREAPISINGLEREDIRECT").
func goIdent(name string) string {
return strings.Map(func(r rune) rune {
switch {
case r >= 'A' && r <= 'Z', r >= 'a' && r <= 'z', r >= '0' && r <= '9':
return r
default:
return -1
}
}, name)
}

// writeGoFile runs the generated source through gofmt (go/format) and writes it
// to path.
// Copied from pkg/privatetypes/types_generate.go.
func writeGoFile(path string, src []byte) error {
formatted, err := format.Source(src)
if err != nil {
_ = os.WriteFile(path, src, 0o644)
return fmt.Errorf("gofmt %s: %w", path, err)
}
return os.WriteFile(path, formatted, 0o644)
}

// StructName returns the Go struct name and package import path of an RDATA value.
// It returns ("", "") for nil or a type with no name.
func StructName(rd any) (name, pkgPath string) {
rt := reflect.TypeOf(rd)
if rt == nil {
return "", ""
}
if rt.Kind() == reflect.Pointer {
rt = rt.Elem()
}
return rt.Name(), rt.PkgPath()
}

// Namespace maps an RDATA struct's package import path.
// Possible return values are ("privatetypesrdata", true), ("dnsrdatav2", true), or ("", false).
func Namespace(pkgPath string) (alias string, ok bool) {
switch {
case strings.HasSuffix(pkgPath, "/pkg/privatetypes/rdata"):
return "privatetypesrdata", true
case pkgPath == "codeberg.org/miekg/dns/rdata":
return "dnsrdatav2", true
default:
return "", false
}
}
54 changes: 54 additions & 0 deletions build/astypegen/astypeutil_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package main_test

import (
"testing"

gen "github.com/DNSControl/dnscontrol/v5/build/astypegen"
)

type sampleRD struct{}

func TestStructName(t *testing.T) {
// Value: name + this test package's path.
name, pkgPath := gen.StructName(sampleRD{})
if name != "sampleRD" {
t.Errorf("StructName(value): name=%q, want %q", name, "sampleRD")
}
if pkgPath == "" {
t.Errorf("StructName(value): pkgPath is empty, want a non-empty package path")
}

// Pointer is dereferenced to the same name/path.
pName, pPkg := gen.StructName(&sampleRD{})
if pName != name || pPkg != pkgPath {
t.Errorf("StructName(pointer) = (%q,%q), want (%q,%q)", pName, pPkg, name, pkgPath)
}

// nil yields empties (generator skips these).
if n, p := gen.StructName(nil); n != "" || p != "" {
t.Errorf("StructName(nil) = (%q,%q), want empty", n, p)
}
}

func TestNamespace(t *testing.T) {
cases := []struct {
pkgPath string
wantAlias string
wantOK bool
}{
{"codeberg.org/miekg/dns/rdata", "dnsrdatav2", true},
{"github.com/DNSControl/dnscontrol/v5/pkg/privatetypes/rdata", "privatetypesrdata", true},
// Version-independent: a future major version must still map correctly.
{"github.com/DNSControl/dnscontrol/v6/pkg/privatetypes/rdata", "privatetypesrdata", true},
// Anything else is skipped.
{"codeberg.org/miekg/dns", "", false},
{"some/other/package", "", false},
{"", "", false},
}
for _, c := range cases {
alias, ok := gen.Namespace(c.pkgPath)
if alias != c.wantAlias || ok != c.wantOK {
t.Errorf("Namespace(%q) = (%q, %v), want (%q, %v)", c.pkgPath, alias, ok, c.wantAlias, c.wantOK)
}
}
}
6 changes: 3 additions & 3 deletions build/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@ import (
"os"
"os/exec"

"github.com/DNSControl/dnscontrol/v4/pkg/version"
"github.com/DNSControl/dnscontrol/v5/pkg/version"
)

var goos = flag.String("os", "", "OS to build (linux, windows, or darwin) Defaults to all.")

func main() {
flag.Parse()
flags := fmt.Sprintf(`-s -w -X "github.com/DNSControl/dnscontrol/v4/pkg/version.version=%s"`, version.Version())
pkg := "github.com/DNSControl/dnscontrol/v4"
flags := fmt.Sprintf(`-s -w -X "github.com/DNSControl/dnscontrol/v5/pkg/version.version=%s"`, version.Version())
pkg := "github.com/DNSControl/dnscontrol/v5"

build := func(out, goos string) {
log.Printf("Building %s", out)
Expand Down
17 changes: 8 additions & 9 deletions build/generate/featureMatrix.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,8 @@ import (
"sort"
"strings"

"github.com/DNSControl/dnscontrol/v4/pkg/providers"
_ "github.com/DNSControl/dnscontrol/v4/pkg/providers/_all"
_ "github.com/DNSControl/dnscontrol/v4/pkg/rtype"
"github.com/DNSControl/dnscontrol/v5/pkg/providers"
_ "github.com/DNSControl/dnscontrol/v5/pkg/providers/_all"
"github.com/fbiville/markdown-table-formatter/pkg/markdown"
)

Expand Down Expand Up @@ -178,39 +177,39 @@ func matrixData() *FeatureMatrix {
"DNSSEC",
},
FeatureTables: [][]string{
[]string{ // provider type
{ // provider type
OfficialSupport,
ProviderDNSProvider,
ProviderRegistrar,
},
[]string{ // provider API
{ // provider API
ProviderThreadSafe,
DualHost,
CreateDomains,
// NoPurge,
GetZones,
},
[]string{ // DNS extensions
{ // DNS extensions
DomainModifierAlias,
DomainModifierDname,
DomainModifierLoc,
DomainModifierPtr,
DomainModifierSoa,
},
[]string{ // service discovery
{ // service discovery
DomainModifierDhcid,
DomainModifierNaptr,
DomainModifierSrv,
DomainModifierSvcb,
},
[]string{ // security
{ // security
DomainModifierCaa,
DomainModifierHTTPS,
DomainModifierSMIMEA,
DomainModifierSshfp,
DomainModifierTlsa,
},
[]string{ // dnssec
{ // dnssec
DomainModifierDnssec,
DomainModifierDnskey,
DomainModifierDs,
Expand Down
Loading
Loading