diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a0f1639..023125aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,12 +18,27 @@ and this project adheres to + + + +## [v0.107.18] - 2022-11-08 See also the [v0.107.18 GitHub milestone][ms-v0.107.18]. -[ms-v0.107.18]: https://github.com/AdguardTeam/AdGuardHome/milestone/52?closed=1 ---> +### Fixed + +- Crash on some systems when domains from system hosts files are processed + ([#5089]). + +[#5089]: https://github.com/AdguardTeam/AdGuardHome/issues/5089 + +[ms-v0.107.18]: https://github.com/AdguardTeam/AdGuardHome/milestone/54?closed=1 @@ -830,7 +845,7 @@ See also the [v0.107.0 GitHub milestone][ms-v0.107.0]. - Query log search now supports internationalized domains ([#3012]). - Internationalized domains are now shown decoded in the query log with the original encoded version shown in request details ([#3013]). -- When /etc/hosts-type rules have several IPs for one host, all IPs are now +- When `/etc/hosts`-type rules have several IPs for one host, all IPs are now returned instead of only the first one ([#1381]). - Property `rlimit_nofile` is now in the `os` object of the configuration file, together with the new `group` and `user` properties ([#2763]). @@ -1088,7 +1103,7 @@ See also the [v0.106.0 GitHub milestone][ms-v0.106.0]. - Hostname uniqueness validation in the DHCP server ([#2952]). - Hostname generating for DHCP clients which don't provide their own ([#2723]). - New flag `--no-etc-hosts` to disable client domain name lookups in the - operating system's /etc/hosts files ([#1947]). + operating system's `/etc/hosts` files ([#1947]). - The ability to set up custom upstreams to resolve PTR queries for local addresses and to disable the automatic resolving of clients' addresses ([#2704]). @@ -1405,11 +1420,12 @@ See also the [v0.104.2 GitHub milestone][ms-v0.104.2]. -[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.17...HEAD +[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.18...HEAD +[v0.107.18]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.17...v0.107.18 [v0.107.17]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.16...v0.107.17 [v0.107.16]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.15...v0.107.16 [v0.107.15]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.14...v0.107.15 diff --git a/go.mod b/go.mod index 15cf4397..3040b862 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.18 require ( github.com/AdguardTeam/dnsproxy v0.46.2 - github.com/AdguardTeam/golibs v0.11.2 + github.com/AdguardTeam/golibs v0.11.3 github.com/AdguardTeam/urlfilter v0.16.0 github.com/NYTimes/gziphandler v1.1.1 github.com/ameshkov/dnscrypt/v2 v2.2.5 @@ -29,9 +29,9 @@ require ( github.com/ti-mo/netfilter v0.4.0 go.etcd.io/bbolt v1.3.6 golang.org/x/crypto v0.1.0 - golang.org/x/exp v0.0.0-20221026153819-32f3d567a233 + golang.org/x/exp v0.0.0-20221106115401-f9659909a136 golang.org/x/net v0.1.0 - golang.org/x/sys v0.1.0 + golang.org/x/sys v0.2.0 gopkg.in/natefinch/lumberjack.v2 v2.0.0 gopkg.in/yaml.v3 v3.0.1 howett.net/plist v1.0.0 @@ -55,8 +55,8 @@ require ( github.com/mdlayher/socket v0.2.3 // indirect github.com/nxadm/tail v1.4.8 // indirect github.com/onsi/ginkgo v1.16.5 // indirect - github.com/onsi/ginkgo/v2 v2.4.0 // indirect - github.com/onsi/gomega v1.22.1 // indirect + github.com/onsi/ginkgo/v2 v2.5.0 // indirect + github.com/onsi/gomega v1.24.0 // indirect github.com/patrickmn/go-cache v2.1.0+incompatible // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/go.sum b/go.sum index 23d31a79..e8b95c59 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,8 @@ github.com/AdguardTeam/dnsproxy v0.46.2 h1:ZUKM713Ts5meYQqk6cJkUBMCFSWqFPXTgjXkN github.com/AdguardTeam/dnsproxy v0.46.2/go.mod h1:PAmRzFqls0E92XTglyY2ESAqMAzZJhHKErG1ZpRnpjA= github.com/AdguardTeam/golibs v0.4.0/go.mod h1:skKsDKIBB7kkFflLJBpfGX+G8QFTx0WKUzB6TIgtUj4= github.com/AdguardTeam/golibs v0.10.4/go.mod h1:rSfQRGHIdgfxriDDNgNJ7HmE5zRoURq8R+VdR81Zuzw= -github.com/AdguardTeam/golibs v0.11.2 h1:JbQB1Dg2JWStXgHh1QqBbOLWnP4t9oDjppoBH6TVXSE= -github.com/AdguardTeam/golibs v0.11.2/go.mod h1:87bN2x4VsTritptE3XZg9l8T6gznWsIxHBcQ1DeRIXA= +github.com/AdguardTeam/golibs v0.11.3 h1:Oif+REq2WLycQ2Xm3ZPmJdfftptss0HbGWbxdFaC310= +github.com/AdguardTeam/golibs v0.11.3/go.mod h1:87bN2x4VsTritptE3XZg9l8T6gznWsIxHBcQ1DeRIXA= github.com/AdguardTeam/gomitmproxy v0.2.0/go.mod h1:Qdv0Mktnzer5zpdpi5rAwixNJzW2FN91LjKJCkVbYGU= github.com/AdguardTeam/urlfilter v0.16.0 h1:IO29m+ZyQuuOnPLTzHuXj35V1DZOp1Dcryl576P2syg= github.com/AdguardTeam/urlfilter v0.16.0/go.mod h1:46YZDOV1+qtdRDuhZKVPSSp7JWWes0KayqHrKAFBdEI= @@ -131,12 +131,12 @@ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.4.0 h1:+Ig9nvqgS5OBSACXNk15PLdp0U9XPYROt9CFzVdFGIs= -github.com/onsi/ginkgo/v2 v2.4.0/go.mod h1:iHkDK1fKGcBoEHT5W7YBq4RFWaQulw+caOMkAt4OrFo= +github.com/onsi/ginkgo/v2 v2.5.0 h1:TRtrvv2vdQqzkwrQ1ke6vtXf7IK34RBUJafIy1wMwls= +github.com/onsi/ginkgo/v2 v2.5.0/go.mod h1:Luc4sArBICYCS8THh8v3i3i5CuSZO+RaQRaJoeNwomw= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.22.1 h1:pY8O4lBfsHKZHM/6nrxkhVPUznOlIu3quZcKP/M20KI= -github.com/onsi/gomega v1.22.1/go.mod h1:x6n7VNe4hw0vkyYUM4mjIXx3JbLiPaBPNgB7PRQ1tuM= +github.com/onsi/gomega v1.24.0 h1:+0glovB9Jd6z3VR+ScSwQqXVTIfJcGA9UBM8yzQxhqg= +github.com/onsi/gomega v1.24.0/go.mod h1:Z/NWtiqwBrwUt4/2loMmHL63EDLnYHmVbuBpDr2vQAg= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -177,8 +177,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/exp v0.0.0-20221026153819-32f3d567a233 h1:9bNbSKT4RPLEzne0Xh1v3NaNecsa1DKjkOuTbY6V9rI= -golang.org/x/exp v0.0.0-20221026153819-32f3d567a233/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20221106115401-f9659909a136 h1:Fq7F/w7MAa1KJ5bt2aJ62ihqp9HDcRuyILskkpIAurw= +golang.org/x/exp v0.0.0-20221106115401-f9659909a136/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -254,8 +254,8 @@ golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/internal/aghnet/hostscontainer.go b/internal/aghnet/hostscontainer.go index f74ce1f9..a8170447 100644 --- a/internal/aghnet/hostscontainer.go +++ b/internal/aghnet/hostscontainer.go @@ -139,6 +139,8 @@ type HostsRecord struct { func (rec *HostsRecord) equal(other *HostsRecord) (ok bool) { if rec == nil { return other == nil + } else if other == nil { + return false } return rec.Canonical == other.Canonical && rec.Aliases.Equal(other.Aliases) @@ -478,7 +480,11 @@ func (hc *HostsContainer) refresh() (err error) { return fmt.Errorf("refreshing : %w", err) } - if maps.EqualFunc(hp.table, hc.last, (*HostsRecord).equal) { + // hc.last is nil on the first refresh, so let that one through. + // + // TODO(a.garipov): Once https://github.com/golang/go/issues/56621 is + // resolved, remove the first condition. + if hc.last != nil && maps.EqualFunc(hp.table, hc.last, (*HostsRecord).equal) { log.Debug("%s: no changes detected", hostsContainerPref) return nil diff --git a/internal/filtering/servicelist.go b/internal/filtering/servicelist.go index da6e2ca7..89b8510b 100644 --- a/internal/filtering/servicelist.go +++ b/internal/filtering/servicelist.go @@ -34,6 +34,7 @@ var blockedServices = []blockedService{{ "||amazon.com.au^", "||amazon.com.br^", "||amazon.com.mx^", + "||amazon.com.tr^", "||amazon.com^", "||amazon.de^", "||amazon.es^", @@ -73,19 +74,29 @@ var blockedServices = []blockedService{{ IconSVG: []byte(""), Rules: []string{ "||1.1.1.1^", + "||argotunnel.com^", "||cloudflare-dns.com^", + "||cloudflare-ipfs.com^", + "||cloudflare-quic.com^", "||cloudflare.cn^", "||cloudflare.com^", "||cloudflare.net^", + "||cloudflareaccess.com^", + "||cloudflareapps.com^", "||cloudflarebolt.com^", "||cloudflareclient.com^", "||cloudflareinsights.com^", "||cloudflareresolve.com^", "||cloudflarestatus.com^", "||cloudflarestream.com^", + "||cloudflarewarp.com^", "||dns4torpnlfs2ifuz2s2yf3fc7rdmsbhm6rw75euj35pac6ap25zgqad.onion^", "||one.one^", + "||pages.dev^", + "||trycloudflare.com^", + "||videodelivery.net^", "||warp.plus^", + "||workers.dev^", }, }, { ID: "dailymotion", @@ -111,6 +122,7 @@ var blockedServices = []blockedService{{ Rules: []string{ "||discord.com^", "||discord.gg^", + "||discord.gift", "||discord.media^", "||discordapp.com^", "||discordapp.net^", @@ -122,8 +134,20 @@ var blockedServices = []blockedService{{ Rules: []string{ "||disney-plus.net^", "||disney.playback.edge.bamgrid.com^", + "||disneynow.com^", "||disneyplus.com^", + "||hotstar.com^", "||media.dssott.com^", + "||star.playback.edge.bamgrid.com^", + "||starplus.com^", + }, +}, { + ID: "douban", + Name: "Douban", + IconSVG: []byte(""), + Rules: []string{ + "||douban.com^", + "||doubanio.com^", }, }, { ID: "ebay", @@ -176,11 +200,13 @@ var blockedServices = []blockedService{{ "||facebook.net^", "||facebookcorewwwi.onion^", "||fb.com^", + "||fb.gg^", "||fb.me^", "||fb.watch^", "||fbcdn.com^", "||fbcdn.net^", "||fbsbx.com^", + "||fbwat.ch^", "||messenger.com^", }, }, { @@ -269,8 +295,9 @@ var blockedServices = []blockedService{{ Name: "QQ", IconSVG: []byte(""), Rules: []string{ - "^(?!weixin|wx)([^.]+\\.)?qq\\.com$", - "||qqzaixian.com^", + "||qq-video.cdn-go.cn^", + "||qq.com^$denyallow=wx.qq.com|weixin.qq.com", + "||url.cn^", }, }, { ID: "reddit", @@ -297,8 +324,11 @@ var blockedServices = []blockedService{{ Name: "Skype", IconSVG: []byte(""), Rules: []string{ + "||edge-skype-com.s-0001.s-msedge.net^", + "||skype-edf.akadns.net^", "||skype.com^", "||skypeassets.com^", + "||skypedata.akadns.net^", }, }, { ID: "snapchat", @@ -359,10 +389,14 @@ var blockedServices = []blockedService{{ "||bdurl.com^", "||bytecdn.cn^", "||bytedance.map.fastly.net^", + "||bytedapm.com^", "||byteimg.com^", + "||byteoversea.com^", "||douyin.com^", "||douyincdn.com^", - "||ixigua.com^", + "||douyinpic.com^", + "||douyinstatic.com^", + "||douyinvod.com^", "||ixigua.com^", "||ixiguavideo.com^", "||muscdn.com^", @@ -375,6 +409,7 @@ var blockedServices = []blockedService{{ "||toutiao.com^", "||toutiaocloud.com^", "||toutiaocloud.net^", + "||toutiaovod.com^", }, }, { ID: "tinder", @@ -437,7 +472,9 @@ var blockedServices = []blockedService{{ IconSVG: []byte(""), Rules: []string{ "||wechat.com^", + "||weixin.qq.com.cn^", "||weixin.qq.com^", + "||weixinbridge.com^", "||wx.qq.com^", }, }, { @@ -445,7 +482,9 @@ var blockedServices = []blockedService{{ Name: "Weibo", IconSVG: []byte(""), Rules: []string{ + "||weibo.cn^", "||weibo.com^", + "||weibocdn.com^", }, }, { ID: "whatsapp", @@ -461,11 +500,21 @@ var blockedServices = []blockedService{{ IconSVG: []byte(""), Rules: []string{ "||googlevideo.com^", + "||wide-youtube.l.google.com^", "||youtu.be^", "||youtube", "||youtube-nocookie.com^", "||youtube.com^", "||youtubei.googleapis.com^", + "||youtubekids.com^", "||ytimg.com^", }, +}, { + ID: "zhihu", + Name: "Zhihu", + IconSVG: []byte(""), + Rules: []string{ + "||zhihu.com^", + "||zhimg.com^", + }, }} diff --git a/internal/home/home.go b/internal/home/home.go index 6dbe1600..665c41ce 100644 --- a/internal/home/home.go +++ b/internal/home/home.go @@ -76,9 +76,7 @@ type homeContext struct { configFilename string // Config filename (can be overridden via the command line arguments) workDir string // Location of our directory, used to protect against CWD being somewhere else - firstRun bool // if set to true, don't run any services except HTTP web interface, and serve only first-run html pidFileName string // PID file name. Empty if no PID file was created. - disableUpdate bool // If set, don't check for updates controlLock sync.Mutex tlsRoots *x509.CertPool // list of root CAs for TLSv1.2 transport *http.Transport @@ -88,6 +86,13 @@ type homeContext struct { // tlsCipherIDs are the ID of the cipher suites that AdGuard Home must use. tlsCipherIDs []uint16 + // disableUpdate, if true, tells AdGuard Home to not check for updates. + disableUpdate bool + + // firstRun, if true, tells AdGuard Home to only start the web interface + // service, and only serve the first-run APIs. + firstRun bool + // runningAsService flag is set to true when options are passed from the service runner runningAsService bool } @@ -462,6 +467,15 @@ func run(opts options, clientBuildFS fs.FS) { mux.HandleFunc("/debug/pprof/profile", pprof.Profile) mux.HandleFunc("/debug/pprof/symbol", pprof.Symbol) mux.HandleFunc("/debug/pprof/trace", pprof.Trace) + + // See profileSupportsDelta in src/net/http/pprof/pprof.go. + mux.Handle("/debug/pprof/allocs", pprof.Handler("allocs")) + mux.Handle("/debug/pprof/block", pprof.Handler("block")) + mux.Handle("/debug/pprof/goroutine", pprof.Handler("goroutine")) + mux.Handle("/debug/pprof/heap", pprof.Handler("heap")) + mux.Handle("/debug/pprof/mutex", pprof.Handler("mutex")) + mux.Handle("/debug/pprof/threadcreate", pprof.Handler("threadcreate")) + go func() { log.Info("pprof: listening on localhost:6060") lerr := http.ListenAndServe("localhost:6060", mux) diff --git a/internal/tools/go.mod b/internal/tools/go.mod index dcda40eb..e37598fc 100644 --- a/internal/tools/go.mod +++ b/internal/tools/go.mod @@ -10,7 +10,7 @@ require ( github.com/kyoh86/looppointer v0.1.9 github.com/securego/gosec/v2 v2.14.0 golang.org/x/tools v0.2.0 - golang.org/x/vuln v0.0.0-20221025230227-995372c58a16 + golang.org/x/vuln v0.0.0-20221103225512-4f561ca73b59 honnef.co/go/tools v0.3.3 mvdan.cc/gofumpt v0.4.0 mvdan.cc/unparam v0.0.0-20220926085101-66de63301820 @@ -24,10 +24,10 @@ require ( github.com/kyoh86/nolint v0.0.1 // indirect github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect - golang.org/x/exp v0.0.0-20221031165847-c99f073a8326 // indirect - golang.org/x/exp/typeparams v0.0.0-20221031165847-c99f073a8326 // indirect + golang.org/x/exp v0.0.0-20221106115401-f9659909a136 // indirect + golang.org/x/exp/typeparams v0.0.0-20221106115401-f9659909a136 // indirect golang.org/x/mod v0.6.0 // indirect golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.1.0 // indirect + golang.org/x/sys v0.2.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/internal/tools/go.sum b/internal/tools/go.sum index 3e4f57e6..5fa4c6bf 100644 --- a/internal/tools/go.sum +++ b/internal/tools/go.sum @@ -53,10 +53,10 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/exp v0.0.0-20221031165847-c99f073a8326 h1:QfTh0HpN6hlw6D3vu8DAwC8pBIwikq0AI1evdm+FksE= -golang.org/x/exp v0.0.0-20221031165847-c99f073a8326/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/exp/typeparams v0.0.0-20221031165847-c99f073a8326 h1:fl8k2zg28yA23264d82M4dp+YlJ3ngDcpuB1bewkQi4= -golang.org/x/exp/typeparams v0.0.0-20221031165847-c99f073a8326/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp v0.0.0-20221106115401-f9659909a136 h1:Fq7F/w7MAa1KJ5bt2aJ62ihqp9HDcRuyILskkpIAurw= +golang.org/x/exp v0.0.0-20221106115401-f9659909a136/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp/typeparams v0.0.0-20221106115401-f9659909a136 h1:962j4VxUJV3GKI6NxKDI9NjATh+tAixlH+9k9MvHSlU= +golang.org/x/exp/typeparams v0.0.0-20221106115401-f9659909a136/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= @@ -83,8 +83,8 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -98,8 +98,8 @@ golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/tools v0.2.0 h1:G6AHpWxTMGY1KyEYoAQ5WTtIekUUvDNjan3ugu60JvE= golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= -golang.org/x/vuln v0.0.0-20221025230227-995372c58a16 h1:/H6ddBUaKrFDOBFz0Y3l1/Ppbx19f/rK11jABxiqKFw= -golang.org/x/vuln v0.0.0-20221025230227-995372c58a16/go.mod h1:F12iebNzxRMpJsm4W7ape+r/KdnXiSy3VC94WsyCG68= +golang.org/x/vuln v0.0.0-20221103225512-4f561ca73b59 h1:eOOJSuIRc2QwKAgX5qOIhUZJAd2LLKSBfk839dv+Clo= +golang.org/x/vuln v0.0.0-20221103225512-4f561ca73b59/go.mod h1:F12iebNzxRMpJsm4W7ape+r/KdnXiSy3VC94WsyCG68= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/scripts/README.md b/scripts/README.md index 5ba09aca..460f5067 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -188,6 +188,10 @@ After the download you'll find the output locales in the `client/src/__locales/` directory. Optional environment: + + * `SLEEP_TIME`: set the sleep time between downloads for `locales:download`, + in milliseconds. The default is 250 ms. + * `UPLOAD_LANGUAGE`: set an alternative language for `locales:upload` to upload. diff --git a/scripts/translations/download.js b/scripts/translations/download.js index 41359bda..6cb65072 100644 --- a/scripts/translations/download.js +++ b/scripts/translations/download.js @@ -110,7 +110,8 @@ const download = async () => { // Don't request the Crowdin API too aggressively to prevent spurious // 400 errors. - await sleep(400); + const sleepTime = process.env.SLEEP_TIME || 250; + await sleep(sleepTime); } Promise