refactor!: simplify lego generate script; add and drop some dns provider

This commit is contained in:
yusing
2025-10-11 12:44:16 +08:00
parent d1e403e16f
commit 66043e4a26
7 changed files with 104 additions and 4720 deletions

View File

@@ -1,64 +1,79 @@
import requests
import os
import re
class Entry:
def __init__(self, name: str, type: str, **kwargs) -> None:
self.name = name
self.type = type
url = "https://api.github.com/repos/go-acme/lego/contents/providers/dns"
import requests
def unquote(s: str) -> str:
return s.strip().strip('"')
url = "https://raw.githubusercontent.com/go-acme/lego/refs/heads/master/providers/dns/zz_gen_dns_providers.go"
import_prefix = "github.com/go-acme/lego/v4/providers/dns/"
response = requests.get(url)
data: list[Entry] = [Entry(**i) for i in response.json()]
data: list[str] = [unquote(i) for i in response.text.split("\n") if import_prefix in i]
data_map = {item.split("/")[-1]: item for item in data}
header = "//go:generate /usr/bin/python3 gen.py\n\npackage dnsproviders\n\n"
names: list[str] = [
"Local = \"local\"",
"Pseudo = \"pseudo\"",
]
imports: list[str] = [
"\"github.com/yusing/godoxy/internal/autocert\""
'Local = "local"',
'Pseudo = "pseudo"',
]
imports: list[str] = ['"github.com/yusing/godoxy/internal/autocert"']
genMap: list[str] = [
"autocert.Providers[Local] = autocert.DNSProvider(NewDummyDefaultConfig, NewDummyDNSProviderConfig)",
"autocert.Providers[Pseudo] = autocert.DNSProvider(NewDummyDefaultConfig, NewDummyDNSProviderConfig)",
"autocert.Providers[Local] = autocert.DNSProvider(NewDummyDefaultConfig, NewDummyDNSProviderConfig)",
"autocert.Providers[Pseudo] = autocert.DNSProvider(NewDummyDefaultConfig, NewDummyDNSProviderConfig)",
]
blacklists = [
"internal",
# deprecated
"azure",
"brandit",
"cloudxns",
"dnspod",
"mythicbeasts",
"yandexcloud",
# dependencies issue
"namesilo",
"binarylane",
"edgeone",
# has some annoying dependencies
"baiducloud",
"huaweicloud",
"tencentcloud",
"alidns"
allowlist = [
"acmedns",
"azuredns",
"cloudflare",
"cloudns",
"clouddns",
"digitalocean",
"duckdns",
"edgedns",
"gcloud",
"godaddy",
"googledomains",
"hetzner",
# "hostinger", # TODO: uncomment when v4.27.0 is released
"httpreq",
"ionos",
"linode",
"namecheap",
"netcup",
"netlify",
"oraclecloud",
"ovh",
"porkbun",
"rfc2136",
"scaleway",
"spaceship",
"vercel",
"vultr",
]
for item in data:
if item.type != "dir" or item.name in blacklists:
continue
imports.append(f"\"github.com/go-acme/lego/v4/providers/dns/{item.name}\"")
genMap.append(f"autocert.Providers[\"{item.name}\"] = autocert.DNSProvider({item.name}.NewDefaultConfig, {item.name}.NewDNSProviderConfig)")
for name in allowlist:
import_str = data_map.get(name)
if import_str is None:
continue
imports.append(f'"{import_str}"')
genMap.append(
f'autocert.Providers["{name}"] = autocert.DNSProvider({name}.NewDefaultConfig, {name}.NewDNSProviderConfig)'
)
with open("providers.go", "w") as f:
f.write(header)
f.write("import (\n")
f.write("\n".join(imports))
f.write("\n)\n\n")
f.write("const (\n")
f.write("\n".join(names))
f.write("\n)\n\n")
f.write("func InitProviders() {\n")
f.write("\n".join(genMap))
f.write("\n}\n\n")
os.execvp("go", ["go", "fmt", "providers.go"])
f.write(header)
f.write("import (\n")
f.write("\n".join(imports))
f.write("\n)\n\n")
f.write("const (\n")
f.write("\n".join(names))
f.write("\n)\n\n")
f.write("func InitProviders() {\n")
f.write("\n".join(genMap))
f.write("\n}\n\n")
os.execvp("go", ["go", "fmt", "providers.go"])