forked from TrueCloudLab/lego
chore: generate DNS table in the README. (#1080)
This commit is contained in:
parent
2d6bb48d36
commit
ce2cc58485
2 changed files with 156 additions and 2 deletions
|
@ -41,6 +41,8 @@ Documentation is hosted live at https://go-acme.github.io/lego/.
|
||||||
|
|
||||||
Detailed documentation is available [here](https://go-acme.github.io/lego/dns).
|
Detailed documentation is available [here](https://go-acme.github.io/lego/dns).
|
||||||
|
|
||||||
|
<!-- START DNS PROVIDERS LIST -->
|
||||||
|
|
||||||
| | | | |
|
| | | | |
|
||||||
|---------------------------------------------------------------------------------|---------------------------------------------------------------------------------|---------------------------------------------------------------------------------|---------------------------------------------------------------------------------|
|
|---------------------------------------------------------------------------------|---------------------------------------------------------------------------------|---------------------------------------------------------------------------------|---------------------------------------------------------------------------------|
|
||||||
| [Alibaba Cloud DNS](https://go-acme.github.io/lego/dns/alidns/) | [Amazon Lightsail](https://go-acme.github.io/lego/dns/lightsail/) | [Amazon Route 53](https://go-acme.github.io/lego/dns/route53/) | [Aurora DNS](https://go-acme.github.io/lego/dns/auroradns/) |
|
| [Alibaba Cloud DNS](https://go-acme.github.io/lego/dns/alidns/) | [Amazon Lightsail](https://go-acme.github.io/lego/dns/lightsail/) | [Amazon Route 53](https://go-acme.github.io/lego/dns/route53/) | [Aurora DNS](https://go-acme.github.io/lego/dns/auroradns/) |
|
||||||
|
@ -52,11 +54,13 @@ Detailed documentation is available [here](https://go-acme.github.io/lego/dns).
|
||||||
| [Exoscale](https://go-acme.github.io/lego/dns/exoscale/) | [External program](https://go-acme.github.io/lego/dns/exec/) | [FastDNS](https://go-acme.github.io/lego/dns/fastdns/) | [Gandi Live DNS (v5)](https://go-acme.github.io/lego/dns/gandiv5/) |
|
| [Exoscale](https://go-acme.github.io/lego/dns/exoscale/) | [External program](https://go-acme.github.io/lego/dns/exec/) | [FastDNS](https://go-acme.github.io/lego/dns/fastdns/) | [Gandi Live DNS (v5)](https://go-acme.github.io/lego/dns/gandiv5/) |
|
||||||
| [Gandi](https://go-acme.github.io/lego/dns/gandi/) | [Glesys](https://go-acme.github.io/lego/dns/glesys/) | [Go Daddy](https://go-acme.github.io/lego/dns/godaddy/) | [Google Cloud](https://go-acme.github.io/lego/dns/gcloud/) |
|
| [Gandi](https://go-acme.github.io/lego/dns/gandi/) | [Glesys](https://go-acme.github.io/lego/dns/glesys/) | [Go Daddy](https://go-acme.github.io/lego/dns/godaddy/) | [Google Cloud](https://go-acme.github.io/lego/dns/gcloud/) |
|
||||||
| [Hosting.de](https://go-acme.github.io/lego/dns/hostingde/) | [HTTP request](https://go-acme.github.io/lego/dns/httpreq/) | [Internet Initiative Japan](https://go-acme.github.io/lego/dns/iij/) | [INWX](https://go-acme.github.io/lego/dns/inwx/) |
|
| [Hosting.de](https://go-acme.github.io/lego/dns/hostingde/) | [HTTP request](https://go-acme.github.io/lego/dns/httpreq/) | [Internet Initiative Japan](https://go-acme.github.io/lego/dns/iij/) | [INWX](https://go-acme.github.io/lego/dns/inwx/) |
|
||||||
| [Joker](https://go-acme.github.io/lego/dns/joker/) | [Joohoi's ACME-DNS](https://go-acme.github.io/lego/dns/acme-dns) | [Linode (deprecated)](https://go-acme.github.io/lego/dns/linode/) | [Linode (v4)](https://go-acme.github.io/lego/dns/linodev4/) |
|
| [Joker](https://go-acme.github.io/lego/dns/joker/) | [Joohoi's ACME-DNS](https://go-acme.github.io/lego/dns/acme-dns/) | [Linode (deprecated)](https://go-acme.github.io/lego/dns/linode/) | [Linode (v4)](https://go-acme.github.io/lego/dns/linodev4/) |
|
||||||
| [Liquid Web](https://go-acme.github.io/lego/dns/liquidweb/) | [Manual](https://go-acme.github.io/lego/dns/manual/) | [MyDNS.jp](https://go-acme.github.io/lego/dns/mydnsjp/) | [Name.com](https://go-acme.github.io/lego/dns/namedotcom/) |
|
| [Liquid Web](https://go-acme.github.io/lego/dns/liquidweb/) | [Manual](https://go-acme.github.io/lego/dns/manual/) | [MyDNS.jp](https://go-acme.github.io/lego/dns/mydnsjp/) | [Name.com](https://go-acme.github.io/lego/dns/namedotcom/) |
|
||||||
| [Namecheap](https://go-acme.github.io/lego/dns/namecheap/) | [Namesilo](https://go-acme.github.io/lego/dns/namesilo/) | [Netcup](https://go-acme.github.io/lego/dns/netcup/) | [NIFCloud](https://go-acme.github.io/lego/dns/nifcloud/) |
|
| [Namecheap](https://go-acme.github.io/lego/dns/namecheap/) | [Namesilo](https://go-acme.github.io/lego/dns/namesilo/) | [Netcup](https://go-acme.github.io/lego/dns/netcup/) | [NIFCloud](https://go-acme.github.io/lego/dns/nifcloud/) |
|
||||||
| [NS1](https://go-acme.github.io/lego/dns/ns1/) | [Open Telekom Cloud](https://go-acme.github.io/lego/dns/otc/) | [Oracle Cloud](https://go-acme.github.io/lego/dns/oraclecloud/) | [OVH](https://go-acme.github.io/lego/dns/ovh/) |
|
| [NS1](https://go-acme.github.io/lego/dns/ns1/) | [Open Telekom Cloud](https://go-acme.github.io/lego/dns/otc/) | [Oracle Cloud](https://go-acme.github.io/lego/dns/oraclecloud/) | [OVH](https://go-acme.github.io/lego/dns/ovh/) |
|
||||||
| [PowerDNS](https://go-acme.github.io/lego/dns/pdns/) | [Rackspace](https://go-acme.github.io/lego/dns/rackspace/) | [RFC2136](https://go-acme.github.io/lego/dns/rfc2136/) | [Sakura Cloud](https://go-acme.github.io/lego/dns/sakuracloud/) |
|
| [PowerDNS](https://go-acme.github.io/lego/dns/pdns/) | [Rackspace](https://go-acme.github.io/lego/dns/rackspace/) | [RFC2136](https://go-acme.github.io/lego/dns/rfc2136/) | [Sakura Cloud](https://go-acme.github.io/lego/dns/sakuracloud/) |
|
||||||
| [Scaleway](https://go-acme.github.io/lego/dns/scaleway/) | [Selectel](https://go-acme.github.io/lego/dns/selectel/) | [Servercow](https://go-acme.github.io/lego/dns/servercow/) | [Stackpath](https://go-acme.github.io/lego/dns/stackpath/) |
|
| [Scaleway](https://go-acme.github.io/lego/dns/scaleway/) | [Selectel](https://go-acme.github.io/lego/dns/selectel/) | [Servercow](https://go-acme.github.io/lego/dns/servercow/) | [Stackpath](https://go-acme.github.io/lego/dns/stackpath/) |
|
||||||
| [TransIP](https://go-acme.github.io/lego/dns/transip/) | [VegaDNS](https://go-acme.github.io/lego/dns/vegadns/) | [Vscale](https://go-acme.github.io/lego/dns/vscale/) | [Versio](https://go-acme.github.io/lego/dns/versio/) |
|
| [TransIP](https://go-acme.github.io/lego/dns/transip/) | [VegaDNS](https://go-acme.github.io/lego/dns/vegadns/) | [Versio.[nl/eu/uk]](https://go-acme.github.io/lego/dns/versio/) | [Vscale](https://go-acme.github.io/lego/dns/vscale/) |
|
||||||
| [Vultr](https://go-acme.github.io/lego/dns/vultr/) | [Zone.ee](https://go-acme.github.io/lego/dns/zoneee/) | | |
|
| [Vultr](https://go-acme.github.io/lego/dns/vultr/) | [Zone.ee](https://go-acme.github.io/lego/dns/zoneee/) | | |
|
||||||
|
|
||||||
|
<!-- END DNS PROVIDERS LIST -->
|
||||||
|
|
|
@ -3,11 +3,17 @@ package main
|
||||||
//go:generate go run .
|
//go:generate go run .
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
"go/format"
|
"go/format"
|
||||||
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"text/template"
|
"text/template"
|
||||||
|
|
||||||
|
@ -21,6 +27,12 @@ const (
|
||||||
cliTemplate = root + "internal/dnsdocs/dns.go.tmpl"
|
cliTemplate = root + "internal/dnsdocs/dns.go.tmpl"
|
||||||
cliOutput = root + "cmd/zz_gen_cmd_dnshelp.go"
|
cliOutput = root + "cmd/zz_gen_cmd_dnshelp.go"
|
||||||
docOutput = root + "docs/content/dns"
|
docOutput = root + "docs/content/dns"
|
||||||
|
readmePath = root + "README.md"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
startLine = "<!-- START DNS PROVIDERS LIST -->"
|
||||||
|
endLine = "<!-- END DNS PROVIDERS LIST -->"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Model struct {
|
type Model struct {
|
||||||
|
@ -63,6 +75,14 @@ func main() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// generate README.md
|
||||||
|
err = generateReadMe(models)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("Documentation for %d DNS providers has been generated.\n", len(models.Providers)+1)
|
||||||
}
|
}
|
||||||
|
|
||||||
func walker(prs *Providers) func(string, os.FileInfo, error) error {
|
func walker(prs *Providers) func(string, os.FileInfo, error) error {
|
||||||
|
@ -134,3 +154,133 @@ func generateCLIHelp(models *Providers) error {
|
||||||
_, err = file.Write(source)
|
_, err = file.Write(source)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func generateReadMe(models *Providers) error {
|
||||||
|
max, lines := extractTableData(models)
|
||||||
|
|
||||||
|
file, err := os.Open(readmePath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
defer func() { _ = file.Close() }()
|
||||||
|
|
||||||
|
var skip bool
|
||||||
|
|
||||||
|
buffer := bytes.NewBufferString("")
|
||||||
|
|
||||||
|
fileScanner := bufio.NewScanner(file)
|
||||||
|
for fileScanner.Scan() {
|
||||||
|
text := fileScanner.Text()
|
||||||
|
|
||||||
|
if text == startLine {
|
||||||
|
_, _ = fmt.Fprintln(buffer, text)
|
||||||
|
err = writeDNSTable(buffer, lines, max)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
skip = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if text == endLine {
|
||||||
|
skip = false
|
||||||
|
}
|
||||||
|
|
||||||
|
if skip {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
_, _ = fmt.Fprintln(buffer, text)
|
||||||
|
}
|
||||||
|
|
||||||
|
if fileScanner.Err() != nil {
|
||||||
|
return fileScanner.Err()
|
||||||
|
}
|
||||||
|
|
||||||
|
if skip {
|
||||||
|
return errors.New("missing end tag")
|
||||||
|
}
|
||||||
|
|
||||||
|
return ioutil.WriteFile(readmePath, buffer.Bytes(), 0666)
|
||||||
|
}
|
||||||
|
|
||||||
|
func extractTableData(models *Providers) (int, [][]string) {
|
||||||
|
readmePattern := "[%s](https://go-acme.github.io/lego/dns/%s/)"
|
||||||
|
|
||||||
|
items := []string{fmt.Sprintf(readmePattern, "Manual", "manual")}
|
||||||
|
|
||||||
|
var max int
|
||||||
|
|
||||||
|
for _, pvd := range models.Providers {
|
||||||
|
item := fmt.Sprintf(readmePattern, strings.ReplaceAll(pvd.Name, "|", "/"), pvd.Code)
|
||||||
|
items = append(items, item)
|
||||||
|
|
||||||
|
if max < len(item) {
|
||||||
|
max = len(item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const nbCol = 4
|
||||||
|
|
||||||
|
sort.Slice(items, func(i, j int) bool {
|
||||||
|
return strings.ToLower(items[i]) < strings.ToLower(items[j])
|
||||||
|
})
|
||||||
|
|
||||||
|
var lines [][]string
|
||||||
|
var line []string
|
||||||
|
|
||||||
|
for i, item := range items {
|
||||||
|
switch {
|
||||||
|
case len(line) == nbCol:
|
||||||
|
lines = append(lines, line)
|
||||||
|
line = []string{item}
|
||||||
|
|
||||||
|
case i == len(models.Providers)-1:
|
||||||
|
line = append(line, item)
|
||||||
|
for j := len(line); j < nbCol; j++ {
|
||||||
|
line = append(line, "")
|
||||||
|
}
|
||||||
|
lines = append(lines, line)
|
||||||
|
|
||||||
|
default:
|
||||||
|
line = append(line, item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(line) < nbCol {
|
||||||
|
for j := len(line); j < nbCol; j++ {
|
||||||
|
line = append(line, "")
|
||||||
|
}
|
||||||
|
lines = append(lines, line)
|
||||||
|
}
|
||||||
|
|
||||||
|
return max, lines
|
||||||
|
}
|
||||||
|
|
||||||
|
func writeDNSTable(w io.Writer, lines [][]string, size int) error {
|
||||||
|
_, err := fmt.Fprintf(w, "\n")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = fmt.Fprintf(w, "|%[1]s|%[1]s|%[1]s|%[1]s|\n", strings.Repeat(" ", size+2))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = fmt.Fprintf(w, "|%[1]s|%[1]s|%[1]s|%[1]s|\n", strings.Repeat("-", size+2))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
linePattern := fmt.Sprintf("| %%-%[1]ds | %%-%[1]ds | %%-%[1]ds | %%-%[1]ds |\n", size)
|
||||||
|
for _, line := range lines {
|
||||||
|
_, err = fmt.Fprintf(w, linePattern, line[0], line[1], line[2], line[3])
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = fmt.Fprintf(w, "\n")
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue