From 87d52076f5e2664fd019d6ddf9589dba02f2079d Mon Sep 17 00:00:00 2001 From: Alex Zaytsev <alex@interoplabs.io> Date: Fri, 14 Feb 2025 13:28:17 +1000 Subject: [PATCH 01/12] chore(deps): run go mod tidy --- go.sum | 267 --------------------------------------------------------- 1 file changed, 267 deletions(-) diff --git a/go.sum b/go.sum index d559302..168d24c 100644 --- a/go.sum +++ b/go.sum @@ -1,312 +1,45 @@ -4d63.com/gochecknoglobals v0.1.0 h1:zeZSRqj5yCg28tCkIV/z/lWbwvNm5qnKVS15PI8nhD0= -github.com/Abirdcfly/dupword v0.0.7 h1:z14n0yytA3wNO2gpCD/jVtp/acEXPGmYu0esewpBt6Q= -github.com/Antonboom/errname v0.1.7 h1:mBBDKvEYwPl4WFFNwec1CZO096G6vzK9vvDQzAwkako= -github.com/Antonboom/nilnil v0.1.1 h1:PHhrh5ANKFWRBh7TdYmyyq2gyT2lotnvFvvFbylF81Q= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= -github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= -github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM= -github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 h1:+r1rSv4gvYn0wmRjC8X7IAzX8QezqtFV9m0MUHFJgts= -github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= -github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= -github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= -github.com/OpenPeeDeeP/depguard v1.1.1 h1:TSUznLjvp/4IUP+OQ0t/4jF4QUyxIcVX8YnghZdunyA= -github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 h1:ra2OtmuW0AE5csawV4YXMNGNQQXvLRps3z2Z59OPO+I= -github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= -github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= -github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= -github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw= -github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw= -github.com/ashanbrown/forbidigo v1.3.0 h1:VkYIwb/xxdireGAdJNZoo24O4lmnEWkactplBlWTShc= -github.com/ashanbrown/makezero v1.1.1 h1:iCQ87C0V0vSyO+M9E/FZYbu65auqH0lnsOkf5FcB28s= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/bkielbasa/cyclop v1.2.0 h1:7Jmnh0yL2DjKfw28p86YTd/B4lRGcNuu12sKE35sM7A= -github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ089M= -github.com/bombsimon/wsl/v3 v3.3.0 h1:Mka/+kRLoQJq7g2rggtgQsjuI/K5Efd87WX96EWFxjM= -github.com/breml/bidichk v0.2.3 h1:qe6ggxpTfA8E75hdjWPZ581sY3a2lnl0IRxLQFelECI= -github.com/breml/errchkjson v0.3.0 h1:YdDqhfqMT+I1vIxPSas44P+9Z9HzJwCeAzjB8PxP1xw= -github.com/btcsuite/btcd/btcec/v2 v2.2.1 h1:xP60mv8fvp+0khmrN0zTdPC3cNm24rfeE6lh2R/Yv3E= -github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= -github.com/bufbuild/buf v1.9.0 h1:8a60qapVuRj6crerWR0rny4UUV/MhZSL5gagJuBxmx8= -github.com/bufbuild/connect-go v1.0.0 h1:htSflKUT8y1jxhoPhPYTZMrsY3ipUXjjrbcZR5O2cVo= -github.com/bufbuild/protocompile v0.1.0 h1:HjgJBI85hY/qmW5tw/66sNDZ7z0UDdVSi/5r40WHw4s= -github.com/butuzov/ireturn v0.1.1 h1:QvrO2QF2+/Cx1WA/vETCIYBKtRjc30vesdoPUNo1EbY= -github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= -github.com/charithe/durationcheck v0.0.9 h1:mPP4ucLrf/rKZiIG/a9IPXHGlh8p4CzgpyTy6EEutYk= -github.com/chavacava/garif v0.0.0-20220630083739-93517212f375 h1:E7LT642ysztPWE0dfz43cWOvMiF42DyTRC+eZIaO4yI= -github.com/cloudflare/circl v1.3.1 h1:4OVCZRL62ijwEwxnF6I7hLwxvIYi3VaZt8TflkqtrtA= github.com/cometbft/cometbft v0.34.27 h1:ri6BvmwjWR0gurYjywcBqRe4bbwc3QVs9KRcCzgh/J0= github.com/cometbft/cometbft v0.34.27/go.mod h1:BcCbhKv7ieM0KEddnYXvQZR+pZykTKReJJYf7YC7qhw= -github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0ucsbo= -github.com/containerd/containerd v1.6.8 h1:h4dOFDwzHmqFEP754PgfgTeVXFnLiRc6kiqC7tplDJs= -github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= -github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY= -github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d h1:49RLWk1j44Xu4fjHb6JFYmeUnDORVwHNkDxaQ0ctCVU= -github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= -github.com/creachadair/taskgroup v0.3.2 h1:zlfutDS+5XG40AOxcHDSThxKzns8Tnr9jnr6VqkYlkM= -github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo= -github.com/daixiang0/gci v0.8.1 h1:T4xpSC+hmsi4CSyuYfIJdMZAr9o7xZmHpQVygMghGZ4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= -github.com/denis-tingaikin/go-header v0.4.3 h1:tEaZKAlqql6SKCY++utLmkPLd6K8IBM20Ha7UVm+mtU= -github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= -github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de h1:t0UHb5vdojIDUqktM6+xJAfScFBsVpXZmqC9dsgJmeA= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= -github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= -github.com/docker/docker v20.10.19+incompatible h1:lzEmjivyNHFHMNAFLXORMBXyGIhw/UP4DvJwvyKYq64= -github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= -github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= -github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= -github.com/esimonov/ifshort v1.0.4 h1:6SID4yGWfRae/M7hkVDVVyppy8q/v9OuxNdmjLQStBA= -github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= -github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= -github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= -github.com/firefart/nonamedreturns v1.0.4 h1:abzI1p7mAEPYuR4A+VLKn4eNDOycjYo2phmY9sfv40Y= -github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= -github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= -github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= -github.com/go-chi/chi/v5 v5.0.7 h1:rDTPXLDHGATaeHvVlLcR4Qe0zftYethFucbjVQ1PxU8= -github.com/go-critic/go-critic v0.6.5 h1:fDaR/5GWURljXwF8Eh31T2GZNz9X4jeboS912mWF8Uo= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= -github.com/go-git/go-billy/v5 v5.3.1 h1:CPiOUAzKtMRvolEKw+bG1PLRpT7D3LIs3/3ey4Aiu34= -github.com/go-git/go-git/v5 v5.5.1 h1:5vtv2TB5PM/gPM+EvsHJ16hJh4uAkdGcKilcwY7FYwo= -github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= -github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= -github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= -github.com/go-toolsmith/astcopy v1.0.2 h1:YnWf5Rnh1hUudj11kei53kI57quN/VH6Hp1n+erozn0= -github.com/go-toolsmith/astequal v1.0.3 h1:+LVdyRatFS+XO78SGV4I3TCEA0AC7fKEGma+fH+674o= -github.com/go-toolsmith/astfmt v1.0.0 h1:A0vDDXt+vsvLEdbMFJAUBI/uTbRw1ffOPnxsILnFL6k= -github.com/go-toolsmith/astp v1.0.0 h1:alXE75TXgcmupDsMK1fRAy0YUzLzqPVvBKoyWV+KPXg= -github.com/go-toolsmith/strparse v1.0.0 h1:Vcw78DnpCAKlM20kSbAyO4mPfJn/lyYA4BJUDxe2Jb4= -github.com/go-toolsmith/typep v1.0.2 h1:8xdsa1+FSIH/RhEkgnD1j2CJOy5mNllW1Q9tRiYwvlk= -github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b h1:khEcpUM4yFcxg4/FHQWkvVRmgijNXRfzkIDHh23ggEo= -github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= -github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= -github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0= -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= -github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe h1:6RGUuS7EGotKx6J5HIP8ZtyMdiDscjMLfRBSPuzVVeo= -github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2 h1:amWTbTGqOZ71ruzrdA+Nx5WA3tV1N0goTspwmKCQvBY= -github.com/golangci/golangci-lint v1.50.1 h1:C829clMcZXEORakZlwpk7M4iDw2XiwxxKaG504SZ9zY= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= -github.com/golangci/misspell v0.3.5 h1:pLzmVdl3VxTOncgzHcvLOKirdvcx/TydsClUQXTehjo= -github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 h1:DIPQnGy2Gv2FSA4B/hh8Q7xx3B7AIDk3DAMeHclH1vQ= -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= -github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8 h1:PVRE9d4AQKmbelZ7emNig1+NT27DUmKZn5qXxfio54U= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= -github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk= -github.com/gostaticanalysis/comment v1.4.2 h1:hlnx5+S2fY9Zo9ePo4AhgYsYHbM2+eAv8m/s1JiCd6Q= -github.com/gostaticanalysis/forcetypeassert v0.1.0 h1:6eUflI3DiGusXGK6X7cCcIgVCpZ2CiZ1Q7jl6ZxNV70= -github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3Uqrmrcpk= -github.com/gotestyourself/gotestyourself v1.4.0 h1:CDSlSIuRL/Fsc72Ln5lMybtrCvSRDddsHsDRG/nP7Rg= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= -github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= -github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= -github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= -github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= -github.com/informalsystems/tm-load-test v1.3.0 h1:FGjKy7vBw6mXNakt+wmNWKggQZRsKkEYpaFk/zR64VA= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= -github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a h1:d4+I1YEKVmWZrgkt6jpXBnLgV2ZjO0YxEtLDdfIZfH4= -github.com/jgautheron/goconst v1.5.1 h1:HxVbL1MhydKs8R8n/HE5NPvzfaYmQJA3o879lE4+WcM= -github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= -github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48= -github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= -github.com/julz/importas v0.1.0 h1:F78HnrsjY3cR7j0etXy5+TU1Zuy7Xt08X/1aJnH5xXY= -github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= -github.com/kisielk/errcheck v1.6.2 h1:uGQ9xI8/pgc9iOoCe7kWQgRE6SBTrCGmTSf0LrEtY7c= -github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= -github.com/kkHAIKE/contextcheck v1.1.3 h1:l4pNvrb8JSwRd51ojtcOxOeHJzHek+MtOyXbaR0uvmw= -github.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c= -github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kulti/thelper v0.6.3 h1:ElhKf+AlItIu+xGnI990no4cE2+XaSu1ULymV2Yulxs= -github.com/kunwardeep/paralleltest v1.0.6 h1:FCKYMF1OF2+RveWlABsdnmsvJrei5aoyZoaGS+Ugg8g= -github.com/kyoh86/exportloopref v0.1.8 h1:5Ry/at+eFdkX9Vsdw3qU4YkvGtzuVfzT4X7S77LoN/M= -github.com/ldez/gomoddirectives v0.2.3 h1:y7MBaisZVDYmKvt9/l1mjNCiSA1BVn34U0ObUcJwlhA= -github.com/ldez/tagliatelle v0.3.1 h1:3BqVVlReVUZwafJUwQ+oxbx2BEX2vUG4Yu/NOfMiKiM= -github.com/leonklingele/grouper v1.1.0 h1:tC2y/ygPbMFSBOs3DcyaEMKnnwH7eYKzohOtRrf0SAg= -github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs= -github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= -github.com/lufeee/execinquery v1.2.1 h1:hf0Ems4SHcUGBxpGN7Jz78z1ppVkP/837ZlETPCEtOM= -github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= -github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI= -github.com/maratori/testpackage v1.1.0 h1:GJY4wlzQhuBusMF1oahQCBtUV/AQ/k69IZ68vxaac2Q= -github.com/matoous/godox v0.0.0-20210227103229-6504466cf951 h1:pWxk9e//NbPwfxat7RXkts09K+dEBJWakUWwICVqYbA= github.com/matryer/moq v0.3.2 h1:z7oltmpTxiQ9nKNg0Jc7z45TM+eO7OhCVohxRxwaudM= github.com/matryer/moq v0.3.2/go.mod h1:RJ75ZZZD71hejp39j4crZLsEDszGk6iH4v4YsWFKH4s= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= -github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= -github.com/mbilski/exhaustivestruct v1.2.0 h1:wCBmUnSYufAHO6J4AVWY6ff+oxWxsVFrwgOdMUQePUo= -github.com/mgechev/revive v1.2.4 h1:+2Hd/S8oO2H0Ikq2+egtNwQsVhAeELHjxjIUFX5ajLI= -github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= -github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/moby/buildkit v0.10.4 h1:FvC+buO8isGpUFZ1abdSLdGHZVqg9sqI4BbFL8tlzP4= -github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae h1:O4SWKdcHVCvYqyDV+9CJA1fcDN2L11Bule0iFy3YlAI= -github.com/moricho/tparallel v0.2.1 h1:95FytivzT6rYzdJLdtfn6m1bfFJylOJK41+lgv/EHf4= -github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= -github.com/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U= -github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6FxaNu/BnU2OAaLF86eTVhP2hjTB6iMvItA= -github.com/nishanths/exhaustive v0.8.3 h1:pw5O09vwg8ZaditDp/nQRqVnrMczSJDxRDJMowvhsrM= -github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= -github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= -github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= -github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= -github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= -github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg= -github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d h1:CdDQnGF8Nq9ocOS/xlSptM1N3BbrA6/kmaep5ggwaIA= -github.com/pjbgf/sha1cd v0.2.3 h1:uKQP/7QOzNtKYH7UTohZLcjF5/55EnTw0jO/Ru4jZwI= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.6.0 h1:hUDfIISABYI59DyeB3OTay/HxSRwTQ8rB/H83k6r5dM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/polyfloyd/go-errorlint v1.0.5 h1:AHB5JRCjlmelh9RrLxT9sgzpalIwwq4hqE8EkwIwKdY= -github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= -github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= -github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= -github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= -github.com/quasilyte/go-ruleguard v0.3.18 h1:sd+abO1PEI9fkYennwzHn9kl3nqP6M5vE7FiOzZ+5CE= -github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f h1:6Gtn2i04RD0gVyYf2/IUMTIs+qYleBt4zxDqkLTcu4U= -github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 h1:L8QM9bvf68pVdQ3bCFZMDmnt9yqcMBro1pC7F+IPYMY= -github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 h1:M8mH9eK4OUR4lu7Gd+PU1fV2/qnDNfzT635KRSObncs= -github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= -github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= -github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs= -github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= -github.com/ryancurrah/gomodguard v1.2.4 h1:CpMSDKan0LtNGGhPrvupAoLeObRFjND8/tU1rEOtBp4= -github.com/ryanrolds/sqlclosecheck v0.3.0 h1:AZx+Bixh8zdUBxUA1NxbxVAS78vTPq4rCb8OUZI9xFw= -github.com/sanposhiho/wastedassign/v2 v2.0.6 h1:+6/hQIHKNJAUixEj6EmOngGIisyeI+T3335lYTyxRoA= -github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= -github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw= -github.com/sashamelentyev/usestdlibvars v1.20.0 h1:K6CXjqqtSYSsuyRDDC7Sjn6vTMLiSJa4ZmDkiokoqtw= -github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= -github.com/securego/gosec/v2 v2.13.1 h1:7mU32qn2dyC81MH9L2kefnQyRMUarfDER3iQyMHcjYM= -github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= -github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sivchari/containedctx v1.0.2 h1:0hLQKpgC53OVF1VT7CeoFHk9YKstur1XOgfYIc1yrHI= -github.com/sivchari/nosnakecase v1.7.0 h1:7QkpWIRMe8x25gckkFd2A5Pi6Ymo0qgr4JrhGt95do8= -github.com/sivchari/tenv v1.7.0 h1:d4laZMBK6jpe5PWepxlV9S+LC0yXqvYHiq8E6ceoVVE= -github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0= -github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa h1:YJfZp12Z3AFhSBeXOlv4BO55RMwPn2NoQeDsrdWnBtY= -github.com/sonatard/noctx v0.0.1 h1:VC1Qhl6Oxx9vvWo3UDgrGXYCeKCe3Wbw7qAWL6FrmTY= -github.com/sourcegraph/go-diff v0.6.1 h1:hmA1LzxW0n1c3Q4YbrFgg4P99GSnebYa3x8gr0HZqLQ= -github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= -github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= -github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/viper v1.13.0 h1:BWSJ/M+f+3nmdz9bxB+bWX28kkALN2ok11D0rSo8EJU= -github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0= -github.com/stbenjam/no-sprintf-host-port v0.1.1 h1:tYugd/yrm1O0dV+ThCbaKZh195Dfm07ysF0U6JQXczc= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= -github.com/tdakkota/asciicheck v0.1.1 h1:PKzG7JUTUmVspQTDqtkX9eSiLGossXTybutHwTXuO0A= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= -github.com/tetafro/godot v1.4.11 h1:BVoBIqAf/2QdbFmSwAWnaIqDivZdOV0ZRwEm6jivLKw= -github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144 h1:kl4KhGNsJIbDHS9/4U9yQo1UcPQM0kOMJHn29EoH/Ro= -github.com/timonwong/loggercheck v0.9.3 h1:ecACo9fNiHxX4/Bc02rW2+kaJIAMAes7qJ7JKxt0EZI= -github.com/tomarrell/wrapcheck/v2 v2.7.0 h1:J/F8DbSKJC83bAvC6FoZaRjZiZ/iKoueSdrEkmGeacA= -github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= -github.com/ultraware/funlen v0.0.3 h1:5ylVWm8wsNwH5aWo9438pwvsK0QiqVuUrt9bn7S/iLA= -github.com/ultraware/whitespace v0.0.5 h1:hh+/cpIcopyMYbZNVov9iSxvJU3OYQg78Sfaqzi/CzI= -github.com/uudashr/gocognit v1.0.6 h1:2Cgi6MweCsdB6kpcVQp7EW4U23iBFQWfTXiWlyp842Y= -github.com/vektra/mockery/v2 v2.14.0 h1:KZ1p5Hrn8tiY+LErRMr14HHle6khxo+JKOXLBW/yfqs= -github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= -github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM= -github.com/yeya24/promlinter v0.2.0 h1:xFKDQ82orCU5jQujdaD8stOHiv8UN68BSdn2a8u8Y3o= -github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= -gitlab.com/bosi/decorder v0.2.3 h1:gX4/RgK16ijY8V+BRQHAySfQAb354T7/xQpDB2n10P0= -go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= -go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.3 h1:syAz40OyelLZo42+3U68Phisvrx4qh+4wpdZw7eUUdY= -go.opentelemetry.io/otel v1.11.0 h1:kfToEGMDq6TrVrJ9Vht84Y8y9enykSZzDDZglV0kIEk= -go.opentelemetry.io/otel/metric v0.32.3 h1:dMpnJYk2KULXr0j8ph6N7+IcuiIQXlPXD4kix9t7L9c= -go.opentelemetry.io/otel/trace v1.11.0 h1:20U/Vj42SX+mASlXLmSGBg6jpI1jQtv682lZtTAOVFI= -go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= -golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= golang.org/x/exp v0.0.0-20221018221608-02f3b879a704 h1:qeTd8Mtg7Z9G839eB0/DhF2vU3ZeXcP6vwAY/IqVRPM= golang.org/x/exp v0.0.0-20221018221608-02f3b879a704/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= -golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91 h1:Ic/qN6TEifvObMGQy72k0n1LlJr7DjWWEi+MOsDOiSk= golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= golang.org/x/tools v0.10.0 h1:tvDr/iQoUqNdohiYm0LmmKcBk+q86lb9EprIUFhHHGg= golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM= -gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM= -google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 h1:a2S6M0+660BgMNl++4JPlcAO/CjkqYItDEZwkoDQK7c= -google.golang.org/grpc v1.52.0 h1:kd48UiU7EHsV4rnLyOJRuP/Il/UHE7gdDAQ+SZI7nZk= -google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8 h1:KR8+MyP7/qOlV+8Af01LtjL04bu7on42eVsxT4EyBQk= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= -gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.3.3 h1:oDx7VAwstgpYpb3wv0oxiZlxY+foCpRAwY7Vk6XpAgA= -mvdan.cc/gofumpt v0.4.0 h1:JVf4NN1mIpHogBj7ABpgOyZc65/UUOkKQFkoURsz4MM= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= -mvdan.cc/unparam v0.0.0-20220706161116-678bad134442 h1:seuXWbRB1qPrS3NQnHmFKLJLtskWyueeIzmLXghMGgk= From 26f06467bb6ae3c5276a893146a0968de03267af Mon Sep 17 00:00:00 2001 From: Alex Zaytsev <alex@interoplabs.io> Date: Mon, 17 Feb 2025 15:50:07 +1000 Subject: [PATCH 02/12] wip: remove dependency on tendermint --- log/log.go | 35 +++++++++++++++++++++++++---------- log/log_test.go | 13 +++++++++++-- 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/log/log.go b/log/log.go index 51d6c52..0017672 100644 --- a/log/log.go +++ b/log/log.go @@ -3,6 +3,8 @@ package log import ( "context" "fmt" + "reflect" + tmlog "github.com/tendermint/tendermint/libs/log" ) @@ -16,6 +18,12 @@ type Logger interface { Errorf(format string, a ...any) } +type tmLogger interface { + Debug(msg string, keyvals ...any) + Info(msg string, keyvals ...any) + Error(msg string, keyvals ...any) +} + var ( defaultLogger = logWrapper{tmlog.NewNopLogger()} frozen bool @@ -23,7 +31,7 @@ var ( // Setup sets the logger that the application should use. The default is a nop logger, i.e. all logs are discarded. // Panics if called more than once without calling Reset first. -func Setup(logger tmlog.Logger) { +func Setup(logger tmLogger) { if frozen { panic("logger was already set") } @@ -99,7 +107,7 @@ func FromCtx(ctx context.Context) Logger { return defaultLogger } - return logWrapper{defaultLogger.With(keyVals...)} + return defaultLogger.With(keyVals...) } // GetKeyVals returns the logging keyvals from the given context if there are any @@ -126,35 +134,42 @@ func WithKeyVals(keyvals ...any) Logger { return defaultLogger } - return logWrapper{defaultLogger.With(keyvals...)} + return defaultLogger.With(keyvals...) } type logWrapper struct { - tmlog.Logger + logger tmLogger } func (l logWrapper) Debug(msg string) { - l.Logger.Debug(msg) + l.logger.Debug(msg) } func (l logWrapper) Debugf(format string, a ...any) { - l.Logger.Debug(fmt.Sprintf(format, a...)) + l.logger.Debug(fmt.Sprintf(format, a...)) } func (l logWrapper) Info(msg string) { - l.Logger.Info(msg) + l.logger.Info(msg) } func (l logWrapper) Infof(format string, a ...any) { - l.Logger.Info(fmt.Sprintf(format, a...)) + l.logger.Info(fmt.Sprintf(format, a...)) } func (l logWrapper) Error(msg string) { - l.Logger.Error(msg) + l.logger.Error(msg) } func (l logWrapper) Errorf(format string, a ...any) { - l.Logger.Error(fmt.Sprintf(format, a...)) + l.logger.Error(fmt.Sprintf(format, a...)) +} + +func (l logWrapper) With(keyvals ...any) Logger { + res := reflect.ValueOf(l.logger).MethodByName("With").CallSlice([]reflect.Value{reflect.ValueOf(keyvals)}) + logger := res[0].Interface().(tmLogger) + + return logWrapper{logger} } // Context is a wrapper around context.Context that allows to append keyvals to the context. diff --git a/log/log_test.go b/log/log_test.go index 8192603..e2b0f18 100644 --- a/log/log_test.go +++ b/log/log_test.go @@ -2,10 +2,11 @@ package log_test import ( "context" + "testing" + "github.com/axelarnetwork/utils/log" "github.com/stretchr/testify/assert" tmlog "github.com/tendermint/tendermint/libs/log" - "testing" ) func TestNoSetup(t *testing.T) { @@ -16,6 +17,14 @@ func TestNoSetup(t *testing.T) { }) } +func TestTmLogSetup(t *testing.T) { + t.Cleanup(log.Reset) + + assert.NotPanics(t, func() { + log.Setup(tmlog.NewNopLogger()) + }) +} + func TestMultipleSetups(t *testing.T) { t.Cleanup(log.Reset) @@ -271,7 +280,7 @@ func (t *testLogger) Error(msg string, keyvals ...interface{}) { t.Keyvals <- append(t.keyvals, keyvals...) } -func (t *testLogger) With(keyvals ...interface{}) tmlog.Logger { +func (t *testLogger) With(keyvals ...interface{}) interface{} { return &testLogger{ Output: t.Output, Keyvals: t.Keyvals, From f7cf40df42744c57401ae8932f067824c5718db5 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev <alex@interoplabs.io> Date: Mon, 17 Feb 2025 16:30:23 +1000 Subject: [PATCH 03/12] refactor: remove reflection --- log/log.go | 42 +++++++++++++++++++++++++++++--------- log/log_test.go | 54 ++++++++++++++++--------------------------------- 2 files changed, 50 insertions(+), 46 deletions(-) diff --git a/log/log.go b/log/log.go index 0017672..dde2e3a 100644 --- a/log/log.go +++ b/log/log.go @@ -3,7 +3,6 @@ package log import ( "context" "fmt" - "reflect" tmlog "github.com/tendermint/tendermint/libs/log" ) @@ -24,25 +23,29 @@ type tmLogger interface { Error(msg string, keyvals ...any) } +type tmLoggerConfig[R any] interface { + With(keyvals ...any) R +} + var ( - defaultLogger = logWrapper{tmlog.NewNopLogger()} + defaultLogger = newLogWrapper(tmlog.NewNopLogger()) frozen bool ) // Setup sets the logger that the application should use. The default is a nop logger, i.e. all logs are discarded. // Panics if called more than once without calling Reset first. -func Setup(logger tmLogger) { +func Setup[R tmLogger](logger R) { if frozen { panic("logger was already set") } - defaultLogger = logWrapper{logger} + defaultLogger = newLogWrapper(logger) frozen = true } // Reset returns the logger state to the default nop logger and enables Setup to be called again. func Reset() { - defaultLogger = logWrapper{tmlog.NewNopLogger()} + defaultLogger = newLogWrapper(tmlog.NewNopLogger()) frozen = false } @@ -137,8 +140,32 @@ func WithKeyVals(keyvals ...any) Logger { return defaultLogger.With(keyvals...) } +func newLogWrapper[R tmLogger](logger R) logWrapper { + var with func(...any) Logger = nil + + if cfg, ok := any(logger).(tmLoggerConfig[R]); ok { + with = func(keyvals ...any) Logger { return newLogWrapper(cfg.With(keyvals...)) } + } else if cfg, ok := any(logger).(tmLoggerConfig[tmLogger]); ok { + with = func(keyvals ...any) Logger { return newLogWrapper(cfg.With(keyvals...)) } + } else if cfg, ok := any(logger).(tmLoggerConfig[Logger]); ok { + with = func(keyvals ...any) Logger { return cfg.With(keyvals...) } + } else { + /* TODO: consider following code + with = func(keyvals ...any) Logger { + res := reflect.ValueOf(logger).MethodByName("With").CallSlice([]reflect.Value{reflect.ValueOf(keyvals)}) + l := res[0].Interface().(tmLogger) + return newLogWrapper(l) + } + */ + panic("not supported") + } + + return logWrapper{logger, with} +} + type logWrapper struct { logger tmLogger + with func(...any) Logger } func (l logWrapper) Debug(msg string) { @@ -166,10 +193,7 @@ func (l logWrapper) Errorf(format string, a ...any) { } func (l logWrapper) With(keyvals ...any) Logger { - res := reflect.ValueOf(l.logger).MethodByName("With").CallSlice([]reflect.Value{reflect.ValueOf(keyvals)}) - logger := res[0].Interface().(tmLogger) - - return logWrapper{logger} + return l.with(keyvals...) } // Context is a wrapper around context.Context that allows to append keyvals to the context. diff --git a/log/log_test.go b/log/log_test.go index e2b0f18..dd73dd2 100644 --- a/log/log_test.go +++ b/log/log_test.go @@ -40,10 +40,7 @@ func TestDebug(t *testing.T) { output := make(chan string, 1000) keyvals := make(chan []any, 1000) - log.Setup(&testLogger{ - Output: output, - Keyvals: keyvals, - }) + log.Setup(newTestLogger(output, keyvals)) log.Debug("debug") assert.Equal(t, "debug", <-output) @@ -60,10 +57,7 @@ func TestInfo(t *testing.T) { output := make(chan string, 1000) keyvals := make(chan []any, 1000) - log.Setup(&testLogger{ - Output: output, - Keyvals: keyvals, - }) + log.Setup(newTestLogger(output, keyvals)) log.Info("info") assert.Equal(t, "info", <-output) @@ -80,10 +74,7 @@ func TestError(t *testing.T) { output := make(chan string, 1000) keyvals := make(chan []any, 1000) - log.Setup(&testLogger{ - Output: output, - Keyvals: keyvals, - }) + log.Setup(newTestLogger(output, keyvals)) log.Error("error") assert.Equal(t, "error", <-output) @@ -100,10 +91,7 @@ func TestDebugWithCtx(t *testing.T) { output := make(chan string, 1000) keyvals := make(chan []any, 1000) - log.Setup(&testLogger{ - Output: output, - Keyvals: keyvals, - }) + log.Setup(newTestLogger(output, keyvals)) ctx := context.Background() @@ -130,10 +118,7 @@ func TestInfoWithCtx(t *testing.T) { output := make(chan string, 1000) keyvals := make(chan []any, 1000) - log.Setup(&testLogger{ - Output: output, - Keyvals: keyvals, - }) + log.Setup(newTestLogger(output, keyvals)) ctx := context.Background() @@ -160,10 +145,7 @@ func TestErrorWithCtx(t *testing.T) { output := make(chan string, 1000) keyvals := make(chan []any, 1000) - log.Setup(&testLogger{ - Output: output, - Keyvals: keyvals, - }) + log.Setup(newTestLogger(output, keyvals)) ctx := context.Background() @@ -190,10 +172,7 @@ func TestWrongKeyVals(t *testing.T) { output := make(chan string, 1000) keyvals := make(chan []any, 1000) - log.Setup(&testLogger{ - Output: output, - Keyvals: keyvals, - }) + log.Setup(newTestLogger(output, keyvals)) ctx := log.AppendKeyVals(context.Background(), "key1", "val1", "key2", 2, "key3") @@ -208,10 +187,7 @@ func TestWithKeyVals(t *testing.T) { output := make(chan string, 1000) keyvals := make(chan []any, 1000) - log.Setup(&testLogger{ - Output: output, - Keyvals: keyvals, - }) + log.Setup(newTestLogger(output, keyvals)) log.With("key1", false).Debug("debug") assert.Equal(t, "debug", <-output) @@ -232,10 +208,7 @@ func TestAppendKeyVals(t *testing.T) { output := make(chan string, 1000) keyvals := make(chan []any, 1000) - log.Setup(&testLogger{ - Output: output, - Keyvals: keyvals, - }) + log.Setup(newTestLogger(output, keyvals)) ctx := log.Append(context.Background(), "key1", "val1"). Append("key2", 2). @@ -259,6 +232,13 @@ func TestGetKeyVals(t *testing.T) { assert.Equal(t, keyvals, log.GetKeyVals(ctx)) } +func newTestLogger(output chan<- string, keyvals chan<- []any) tmlog.Logger { + return &testLogger{ + Output: output, + Keyvals: keyvals, + } +} + type testLogger struct { Output chan<- string Keyvals chan<- []any @@ -280,7 +260,7 @@ func (t *testLogger) Error(msg string, keyvals ...interface{}) { t.Keyvals <- append(t.keyvals, keyvals...) } -func (t *testLogger) With(keyvals ...interface{}) interface{} { +func (t *testLogger) With(keyvals ...interface{}) tmlog.Logger { return &testLogger{ Output: t.Output, Keyvals: t.Keyvals, From aff35456d5839cafd25092b92410bb264bd731e0 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev <alex@interoplabs.io> Date: Mon, 17 Feb 2025 16:32:35 +1000 Subject: [PATCH 04/12] chore: refactoring --- log/log_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/log/log_test.go b/log/log_test.go index dd73dd2..6fa55e3 100644 --- a/log/log_test.go +++ b/log/log_test.go @@ -245,22 +245,22 @@ type testLogger struct { keyvals []any } -func (t *testLogger) Debug(msg string, keyvals ...interface{}) { +func (t *testLogger) Debug(msg string, keyvals ...any) { t.Output <- msg t.Keyvals <- append(t.keyvals, keyvals...) } -func (t *testLogger) Info(msg string, keyvals ...interface{}) { +func (t *testLogger) Info(msg string, keyvals ...any) { t.Output <- msg t.Keyvals <- append(t.keyvals, keyvals...) } -func (t *testLogger) Error(msg string, keyvals ...interface{}) { +func (t *testLogger) Error(msg string, keyvals ...any) { t.Output <- msg t.Keyvals <- append(t.keyvals, keyvals...) } -func (t *testLogger) With(keyvals ...interface{}) tmlog.Logger { +func (t *testLogger) With(keyvals ...any) tmlog.Logger { return &testLogger{ Output: t.Output, Keyvals: t.Keyvals, From cea94dd6b12ea7496435967d93424af066ee4ba5 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev <alex@interoplabs.io> Date: Mon, 17 Feb 2025 16:42:59 +1000 Subject: [PATCH 05/12] remove dependency on tendermint --- go.mod | 5 ----- go.sum | 6 ------ log/log.go | 30 ++++++++++++++++++------------ log/log_test.go | 11 +++++------ 4 files changed, 23 insertions(+), 29 deletions(-) diff --git a/go.mod b/go.mod index ce8219c..31aee9c 100644 --- a/go.mod +++ b/go.mod @@ -7,15 +7,12 @@ require ( github.com/matryer/moq v0.3.2 github.com/pkg/errors v0.9.1 github.com/stretchr/testify v1.8.1 - github.com/tendermint/tendermint v0.34.2 golang.org/x/exp v0.0.0-20221018221608-02f3b879a704 golang.org/x/sync v0.3.0 ) require ( github.com/davecgh/go-spew v1.1.1 // indirect - github.com/go-kit/log v0.2.1 // indirect - github.com/go-logfmt/logfmt v0.5.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect golang.org/x/mod v0.11.0 // indirect golang.org/x/sys v0.9.0 // indirect @@ -23,5 +20,3 @@ require ( gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) - -replace github.com/tendermint/tendermint => github.com/cometbft/cometbft v0.34.27 diff --git a/go.sum b/go.sum index 168d24c..d9303a0 100644 --- a/go.sum +++ b/go.sum @@ -1,14 +1,8 @@ -github.com/cometbft/cometbft v0.34.27 h1:ri6BvmwjWR0gurYjywcBqRe4bbwc3QVs9KRcCzgh/J0= -github.com/cometbft/cometbft v0.34.27/go.mod h1:BcCbhKv7ieM0KEddnYXvQZR+pZykTKReJJYf7YC7qhw= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= -github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= diff --git a/log/log.go b/log/log.go index dde2e3a..341f3cd 100644 --- a/log/log.go +++ b/log/log.go @@ -3,8 +3,6 @@ package log import ( "context" "fmt" - - tmlog "github.com/tendermint/tendermint/libs/log" ) // Logger is a simple interface to log at three log levels with additional formatting methods for convenience @@ -17,24 +15,24 @@ type Logger interface { Errorf(format string, a ...any) } -type tmLogger interface { +type MinimalLogger interface { Debug(msg string, keyvals ...any) Info(msg string, keyvals ...any) Error(msg string, keyvals ...any) } -type tmLoggerConfig[R any] interface { +type MinimalLoggerConfig[R any] interface { With(keyvals ...any) R } var ( - defaultLogger = newLogWrapper(tmlog.NewNopLogger()) + defaultLogger = newLogWrapper(NewNopLogger()) frozen bool ) // Setup sets the logger that the application should use. The default is a nop logger, i.e. all logs are discarded. // Panics if called more than once without calling Reset first. -func Setup[R tmLogger](logger R) { +func Setup[R MinimalLogger](logger R) { if frozen { panic("logger was already set") } @@ -45,7 +43,7 @@ func Setup[R tmLogger](logger R) { // Reset returns the logger state to the default nop logger and enables Setup to be called again. func Reset() { - defaultLogger = newLogWrapper(tmlog.NewNopLogger()) + defaultLogger = newLogWrapper(NewNopLogger()) frozen = false } @@ -140,14 +138,14 @@ func WithKeyVals(keyvals ...any) Logger { return defaultLogger.With(keyvals...) } -func newLogWrapper[R tmLogger](logger R) logWrapper { +func newLogWrapper[R MinimalLogger](logger R) logWrapper { var with func(...any) Logger = nil - if cfg, ok := any(logger).(tmLoggerConfig[R]); ok { + if cfg, ok := any(logger).(MinimalLoggerConfig[R]); ok { with = func(keyvals ...any) Logger { return newLogWrapper(cfg.With(keyvals...)) } - } else if cfg, ok := any(logger).(tmLoggerConfig[tmLogger]); ok { + } else if cfg, ok := any(logger).(MinimalLoggerConfig[MinimalLogger]); ok { with = func(keyvals ...any) Logger { return newLogWrapper(cfg.With(keyvals...)) } - } else if cfg, ok := any(logger).(tmLoggerConfig[Logger]); ok { + } else if cfg, ok := any(logger).(MinimalLoggerConfig[Logger]); ok { with = func(keyvals ...any) Logger { return cfg.With(keyvals...) } } else { /* TODO: consider following code @@ -164,7 +162,7 @@ func newLogWrapper[R tmLogger](logger R) logWrapper { } type logWrapper struct { - logger tmLogger + logger MinimalLogger with func(...any) Logger } @@ -205,3 +203,11 @@ type Context struct { func (c Context) Append(key, val any) Context { return Append(c, key, val) } + +type nopLogger struct{} + +func NewNopLogger() MinimalLogger { return &nopLogger{} } +func (nopLogger) Info(string, ...any) {} +func (nopLogger) Debug(string, ...any) {} +func (nopLogger) Error(string, ...any) {} +func (l *nopLogger) With(...any) MinimalLogger { return l } diff --git a/log/log_test.go b/log/log_test.go index 6fa55e3..25283ef 100644 --- a/log/log_test.go +++ b/log/log_test.go @@ -6,7 +6,6 @@ import ( "github.com/axelarnetwork/utils/log" "github.com/stretchr/testify/assert" - tmlog "github.com/tendermint/tendermint/libs/log" ) func TestNoSetup(t *testing.T) { @@ -21,7 +20,7 @@ func TestTmLogSetup(t *testing.T) { t.Cleanup(log.Reset) assert.NotPanics(t, func() { - log.Setup(tmlog.NewNopLogger()) + log.Setup(log.NewNopLogger()) }) } @@ -29,8 +28,8 @@ func TestMultipleSetups(t *testing.T) { t.Cleanup(log.Reset) assert.Panics(t, func() { - log.Setup(tmlog.NewNopLogger()) - log.Setup(tmlog.NewNopLogger()) + log.Setup(log.NewNopLogger()) + log.Setup(log.NewNopLogger()) }) } @@ -232,7 +231,7 @@ func TestGetKeyVals(t *testing.T) { assert.Equal(t, keyvals, log.GetKeyVals(ctx)) } -func newTestLogger(output chan<- string, keyvals chan<- []any) tmlog.Logger { +func newTestLogger(output chan<- string, keyvals chan<- []any) log.MinimalLogger { return &testLogger{ Output: output, Keyvals: keyvals, @@ -260,7 +259,7 @@ func (t *testLogger) Error(msg string, keyvals ...any) { t.Keyvals <- append(t.keyvals, keyvals...) } -func (t *testLogger) With(keyvals ...any) tmlog.Logger { +func (t *testLogger) With(keyvals ...any) log.MinimalLogger { return &testLogger{ Output: t.Output, Keyvals: t.Keyvals, From 105e43a42853701e756fa58fe77db146b6cf1cbe Mon Sep 17 00:00:00 2001 From: Alex Zaytsev <alex@interoplabs.io> Date: Tue, 18 Feb 2025 16:16:29 +1000 Subject: [PATCH 06/12] chore: simplift code --- log/log.go | 36 ++++++++++-------------------------- log/log_test.go | 14 +++++++++++--- 2 files changed, 21 insertions(+), 29 deletions(-) diff --git a/log/log.go b/log/log.go index 341f3cd..4f8ba40 100644 --- a/log/log.go +++ b/log/log.go @@ -22,6 +22,7 @@ type MinimalLogger interface { } type MinimalLoggerConfig[R any] interface { + MinimalLogger With(keyvals ...any) R } @@ -32,7 +33,7 @@ var ( // Setup sets the logger that the application should use. The default is a nop logger, i.e. all logs are discarded. // Panics if called more than once without calling Reset first. -func Setup[R MinimalLogger](logger R) { +func Setup[R MinimalLoggerConfig[R]](logger R) { if frozen { panic("logger was already set") } @@ -138,26 +139,8 @@ func WithKeyVals(keyvals ...any) Logger { return defaultLogger.With(keyvals...) } -func newLogWrapper[R MinimalLogger](logger R) logWrapper { - var with func(...any) Logger = nil - - if cfg, ok := any(logger).(MinimalLoggerConfig[R]); ok { - with = func(keyvals ...any) Logger { return newLogWrapper(cfg.With(keyvals...)) } - } else if cfg, ok := any(logger).(MinimalLoggerConfig[MinimalLogger]); ok { - with = func(keyvals ...any) Logger { return newLogWrapper(cfg.With(keyvals...)) } - } else if cfg, ok := any(logger).(MinimalLoggerConfig[Logger]); ok { - with = func(keyvals ...any) Logger { return cfg.With(keyvals...) } - } else { - /* TODO: consider following code - with = func(keyvals ...any) Logger { - res := reflect.ValueOf(logger).MethodByName("With").CallSlice([]reflect.Value{reflect.ValueOf(keyvals)}) - l := res[0].Interface().(tmLogger) - return newLogWrapper(l) - } - */ - panic("not supported") - } - +func newLogWrapper[R MinimalLoggerConfig[R]](logger R) logWrapper { + with := func(a ...any) Logger { return newLogWrapper(logger.With(a...)) } return logWrapper{logger, with} } @@ -204,10 +187,11 @@ func (c Context) Append(key, val any) Context { return Append(c, key, val) } +func NewNopLogger() *nopLogger { return &nopLogger{} } + type nopLogger struct{} -func NewNopLogger() MinimalLogger { return &nopLogger{} } -func (nopLogger) Info(string, ...any) {} -func (nopLogger) Debug(string, ...any) {} -func (nopLogger) Error(string, ...any) {} -func (l *nopLogger) With(...any) MinimalLogger { return l } +func (nopLogger) Info(string, ...any) {} +func (nopLogger) Debug(string, ...any) {} +func (nopLogger) Error(string, ...any) {} +func (l *nopLogger) With(...any) *nopLogger { return l } diff --git a/log/log_test.go b/log/log_test.go index 25283ef..e5095fe 100644 --- a/log/log_test.go +++ b/log/log_test.go @@ -16,7 +16,7 @@ func TestNoSetup(t *testing.T) { }) } -func TestTmLogSetup(t *testing.T) { +func TestLogSetup(t *testing.T) { t.Cleanup(log.Reset) assert.NotPanics(t, func() { @@ -231,7 +231,15 @@ func TestGetKeyVals(t *testing.T) { assert.Equal(t, keyvals, log.GetKeyVals(ctx)) } -func newTestLogger(output chan<- string, keyvals chan<- []any) log.MinimalLogger { +// logger emulates the tendermint logger interface +type logger interface { + Debug(msg string, keyvals ...any) + Info(msg string, keyvals ...any) + Error(msg string, keyvals ...any) + With(keyvals ...any) logger +} + +func newTestLogger(output chan<- string, keyvals chan<- []any) logger { return &testLogger{ Output: output, Keyvals: keyvals, @@ -259,7 +267,7 @@ func (t *testLogger) Error(msg string, keyvals ...any) { t.Keyvals <- append(t.keyvals, keyvals...) } -func (t *testLogger) With(keyvals ...any) log.MinimalLogger { +func (t *testLogger) With(keyvals ...any) logger { return &testLogger{ Output: t.Output, Keyvals: t.Keyvals, From f1909f67936b42e3a4840d5ce4a202b1d1335fe4 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev <alex@interoplabs.io> Date: Tue, 18 Feb 2025 16:21:32 +1000 Subject: [PATCH 07/12] chore: cleanup --- log/log_test.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/log/log_test.go b/log/log_test.go index e5095fe..9306de0 100644 --- a/log/log_test.go +++ b/log/log_test.go @@ -231,15 +231,15 @@ func TestGetKeyVals(t *testing.T) { assert.Equal(t, keyvals, log.GetKeyVals(ctx)) } -// logger emulates the tendermint logger interface -type logger interface { +// tmlogLogger emulates the tendermint tmlogLogger interface +type tmlogLogger interface { Debug(msg string, keyvals ...any) Info(msg string, keyvals ...any) Error(msg string, keyvals ...any) - With(keyvals ...any) logger + With(keyvals ...any) tmlogLogger } -func newTestLogger(output chan<- string, keyvals chan<- []any) logger { +func newTestLogger(output chan<- string, keyvals chan<- []any) tmlogLogger { return &testLogger{ Output: output, Keyvals: keyvals, @@ -267,7 +267,7 @@ func (t *testLogger) Error(msg string, keyvals ...any) { t.Keyvals <- append(t.keyvals, keyvals...) } -func (t *testLogger) With(keyvals ...any) logger { +func (t *testLogger) With(keyvals ...any) tmlogLogger { return &testLogger{ Output: t.Output, Keyvals: t.Keyvals, From c4b11941442b95dbc2a8c5fcc5db7de479ac35fb Mon Sep 17 00:00:00 2001 From: Alex Zaytsev <alex@interoplabs.io> Date: Tue, 18 Feb 2025 16:30:52 +1000 Subject: [PATCH 08/12] chore: make revive happy --- log/log.go | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/log/log.go b/log/log.go index 4f8ba40..32fd9d8 100644 --- a/log/log.go +++ b/log/log.go @@ -15,12 +15,14 @@ type Logger interface { Errorf(format string, a ...any) } +// MinimalLogger is a minimalistic logger interface that only supports three log levels type MinimalLogger interface { Debug(msg string, keyvals ...any) Info(msg string, keyvals ...any) Error(msg string, keyvals ...any) } +// MinimalLoggerConfig is a logger interface that supports adding keyvals to the logger type MinimalLoggerConfig[R any] interface { MinimalLogger With(keyvals ...any) R @@ -187,11 +189,20 @@ func (c Context) Append(key, val any) Context { return Append(c, key, val) } -func NewNopLogger() *nopLogger { return &nopLogger{} } +// NewNopLogger returns a logger that discards all logs +func NewNopLogger() *NopLogger { return &NopLogger{} } -type nopLogger struct{} +// NopLogger is a logger that discards all logs +type NopLogger struct{} -func (nopLogger) Info(string, ...any) {} -func (nopLogger) Debug(string, ...any) {} -func (nopLogger) Error(string, ...any) {} -func (l *nopLogger) With(...any) *nopLogger { return l } +// Debug is a no-op +func (NopLogger) Info(string, ...any) {} + +// Info is a no-op +func (NopLogger) Debug(string, ...any) {} + +// Error is a no-op +func (NopLogger) Error(string, ...any) {} + +// With is a no-op +func (l *NopLogger) With(...any) *NopLogger { return l } From 4f294872f780d3b42bd797db59dcaf8c4b636ee0 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev <alex@interoplabs.io> Date: Tue, 18 Feb 2025 16:44:03 +1000 Subject: [PATCH 09/12] fix: remove explicit moq install --- .github/workflows/go-generate.yaml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/go-generate.yaml b/.github/workflows/go-generate.yaml index ffe7d3a..e5c6b82 100644 --- a/.github/workflows/go-generate.yaml +++ b/.github/workflows/go-generate.yaml @@ -29,11 +29,6 @@ jobs: - name: Checkout code uses: actions/checkout@v2 - - name: Install moq - run: | - git config --global url."git@github.com:axelarnetwork".insteadOf https://github.com/axelarnetwork - go get github.com/matryer/moq - - name: Install mdformat uses: BSFishy/pip-action@v1 From 3ab9cdea70c86b7e63f626aca20520af5fd9364c Mon Sep 17 00:00:00 2001 From: Alex Zaytsev <alex@interoplabs.io> Date: Tue, 18 Feb 2025 16:46:15 +1000 Subject: [PATCH 10/12] lint: fix revive errors --- log/log.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/log/log.go b/log/log.go index 32fd9d8..73a754b 100644 --- a/log/log.go +++ b/log/log.go @@ -195,10 +195,10 @@ func NewNopLogger() *NopLogger { return &NopLogger{} } // NopLogger is a logger that discards all logs type NopLogger struct{} -// Debug is a no-op +// Info is a no-op func (NopLogger) Info(string, ...any) {} -// Info is a no-op +// Debug is a no-op func (NopLogger) Debug(string, ...any) {} // Error is a no-op From cf5ac4535c7eaeda6e719279a8a3f58160a7f8eb Mon Sep 17 00:00:00 2001 From: Alex Zaytsev <alex@interoplabs.io> Date: Tue, 18 Feb 2025 16:48:42 +1000 Subject: [PATCH 11/12] chore: fix comment --- log/log_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/log/log_test.go b/log/log_test.go index 9306de0..7d3ce5d 100644 --- a/log/log_test.go +++ b/log/log_test.go @@ -231,7 +231,7 @@ func TestGetKeyVals(t *testing.T) { assert.Equal(t, keyvals, log.GetKeyVals(ctx)) } -// tmlogLogger emulates the tendermint tmlogLogger interface +// tmlogLogger emulates the tendermint Logger interface type tmlogLogger interface { Debug(msg string, keyvals ...any) Info(msg string, keyvals ...any) From 360b3b725e57eed88d204745f846a42ff7b08548 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev <alex@interoplabs.io> Date: Thu, 20 Feb 2025 12:05:05 +1000 Subject: [PATCH 12/12] fix: installing moq --- .github/workflows/go-generate.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/go-generate.yaml b/.github/workflows/go-generate.yaml index e5c6b82..a9af585 100644 --- a/.github/workflows/go-generate.yaml +++ b/.github/workflows/go-generate.yaml @@ -29,6 +29,11 @@ jobs: - name: Checkout code uses: actions/checkout@v2 + - name: Install moq + run: | + git config --global url."git@github.com:axelarnetwork".insteadOf https://github.com/axelarnetwork + go install github.com/matryer/moq + - name: Install mdformat uses: BSFishy/pip-action@v1