From 544533f28b4e89b364c30a0a976309db12242a4e Mon Sep 17 00:00:00 2001 From: "D. Can Celasun" Date: Fri, 30 Oct 2026 09:43:12 +0000 Subject: [PATCH] fix: Move from github.com/docker/docker to github.com/moby/moby client modules --- go.mod | 12 ++------ go.sum | 46 +++++++---------------------- managedplugin/docker.go | 22 ++++++-------- managedplugin/plugin.go | 56 ++++++++++++++++++------------------ managedplugin/plugin_test.go | 6 ++-- 5 files changed, 54 insertions(+), 88 deletions(-) diff --git a/go.mod b/go.mod index 94c4464d..bfe20391 100644 --- a/go.mod +++ b/go.mod @@ -8,11 +8,11 @@ require ( github.com/avast/retry-go/v5 v5.0.0 github.com/cloudquery/cloudquery-api-go v1.14.13 github.com/distribution/reference v0.6.0 - github.com/docker/docker v28.5.2+incompatible - github.com/docker/go-connections v0.8.1 github.com/ghodss/yaml v1.0.0 github.com/google/go-cmp v0.7.0 github.com/google/uuid v1.6.0 + github.com/moby/moby/api v1.56.1 + github.com/moby/moby/client v0.6.2 github.com/opencontainers/image-spec v1.1.1 github.com/rs/zerolog v1.35.1 github.com/schollz/progressbar/v3 v3.14.6 @@ -30,7 +30,7 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/containerd/errdefs v1.0.0 // indirect github.com/containerd/errdefs/pkg v0.3.0 // indirect - github.com/containerd/log v0.1.0 // indirect + github.com/docker/go-connections v0.8.2 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/felixge/httpsnoop v1.1.0 // indirect github.com/go-logr/logr v1.4.4 // indirect @@ -45,19 +45,14 @@ require ( github.com/mattn/go-isatty v0.0.24 // indirect github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect github.com/moby/docker-image-spec v1.3.1 // indirect - github.com/moby/sys/atomicwriter v0.1.0 // indirect - github.com/moby/term v0.5.0 // indirect - github.com/morikuni/aec v1.0.0 // indirect github.com/oapi-codegen/runtime v1.7.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/pierrec/lz4/v4 v4.1.29 // indirect - github.com/pkg/errors v0.9.1 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/zeebo/xxh3 v1.1.0 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 // indirect go.opentelemetry.io/otel v1.45.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.45.0 // indirect go.opentelemetry.io/otel/metric v1.45.0 // indirect go.opentelemetry.io/otel/sdk v1.45.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.45.0 // indirect @@ -69,5 +64,4 @@ require ( golang.org/x/text v0.41.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260803160001-6ac0973c030d // indirect gopkg.in/yaml.v2 v2.4.0 // indirect - gotest.tools/v3 v3.5.1 // indirect ) diff --git a/go.sum b/go.sum index 69cacf07..8e29ba37 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,3 @@ -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= @@ -16,8 +14,6 @@ github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP github.com/avast/retry-go/v5 v5.0.0 h1:kf1Qc2UsTZ4qq8elDymqfbISvkyMuhgRxuJqX2NHP7k= github.com/avast/retry-go/v5 v5.0.0/go.mod h1://d+usmKWio1agtZfS1H/ltTqwtIfBnRq9zEwjc3eH8= github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w= -github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= -github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cloudquery/cloudquery-api-go v1.14.13 h1:+lu1mLKqVSwrc02eqf9vfqGj9c0RowtJowx3VCBueoY= @@ -26,16 +22,12 @@ github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= -github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= -github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/docker v28.5.2+incompatible h1:DBX0Y0zAjZbSrm1uzOkdr1onVghKaftjlSWt4AFexzM= -github.com/docker/docker v28.5.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-connections v0.8.1 h1:JibmG5hULs5qXSr/cp/w3Pw5fZuStt4MOHMUExb29/M= -github.com/docker/go-connections v0.8.1/go.mod h1:no1qkHdjq7kLMGUXYAduOhYPSJxxvgWBh7ogVvptn3Q= +github.com/docker/go-connections v0.8.2 h1:9d9DEokx5W7qlr0shkFXIxEA7+TTD+llwzcykSlxMNc= +github.com/docker/go-connections v0.8.2/go.mod h1:no1qkHdjq7kLMGUXYAduOhYPSJxxvgWBh7ogVvptn3Q= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= @@ -59,8 +51,6 @@ github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 h1:5VipnvEpbqr2gA2VbM+nYVbkIF28c5ZQfqCBQ5g2xfk= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0/go.mod h1:Hyl3n6Twe1hvtd9XUXDec4pTvgMSEixRuQKPTMH2bNs= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= @@ -86,14 +76,10 @@ github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2Em github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= -github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw= -github.com/moby/sys/atomicwriter v0.1.0/go.mod h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs= -github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= -github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko= -github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= -github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= -github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= -github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/moby/moby/api v1.56.1 h1:PpWkvVPB7Fr/No8w+TfyJ/I6rWZ2YPZhT3JorIg+06c= +github.com/moby/moby/api v1.56.1/go.mod h1:sZ+THbVWkjOmBPPfbnzdD/G1LuIexWhqlSHHPTDQ1Uk= +github.com/moby/moby/client v0.6.2 h1:ekSPlMccrZGcw6Scb8T9D39qE0mB+XupU/yS0zNw9N4= +github.com/moby/moby/client v0.6.2/go.mod h1:DGcnO7qmPJrqobx/ggQgQ/AUk+2wgVdQv7uxB0/mEsc= github.com/oapi-codegen/nullable v1.1.0 h1:eAh8JVc5430VtYVnq00Hrbpag9PFRGWLjxR1/3KntMs= github.com/oapi-codegen/nullable v1.1.0/go.mod h1:KUZ3vUzkmEKY90ksAmit2+5juDIhIZhfDl+0PwOQlFY= github.com/oapi-codegen/runtime v1.7.0 h1:t7358VYPvNbWJ9gdAkIK/smVeHpBf6yp8VTsaZsb/7k= @@ -104,8 +90,6 @@ github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJw github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= github.com/pierrec/lz4/v4 v4.1.29 h1:CDQY6qZOLI4DW0Nx6R1vRrifrCeQHnNXkMb0hZWXFjg= github.com/pierrec/lz4/v4 v4.1.29/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= @@ -115,8 +99,6 @@ github.com/rs/zerolog v1.35.1 h1:m7xQeoiLIiV0BCEY4Hs+j2NG4Gp2o2KPKmhnnLiazKI= github.com/rs/zerolog v1.35.1/go.mod h1:EjML9kdfa/RMA7h/6z6pYmq1ykOuA8/mjWaEvGI+jcw= github.com/schollz/progressbar/v3 v3.14.6 h1:GyjwcWBAf+GFDMLziwerKvpuS7ZF+mNTAXIB2aspiZs= github.com/schollz/progressbar/v3 v3.14.6/go.mod h1:Nrzpuw3Nl0srLY0VlTvC4V6RL50pcEymjy6qyJAaLa0= -github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= -github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad/go.mod h1:qLr4V1qq6nMqFKkMo8ZTx3f+BZEkzsRUY10Xsm2mwU0= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -135,10 +117,6 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 h1:8tvICD4 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0/go.mod h1:z9+yiacE0IHRqM4qFfkbt/JYlmYXgss8GY/jXoNuPJI= go.opentelemetry.io/otel v1.45.0 h1:pdrWmLHofpubmArBv1LgFSv1Z0Ie/ppdZzu+kUN5EeU= go.opentelemetry.io/otel v1.45.0/go.mod h1:XZxIqPapzEYnhNSScF5DIqXhm/rYi0FzCe2XddAwZfQ= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.45.0 h1:QRefszxJmfPdjXUUm3j6iDzY03mTPXMjqErFqQ67vUg= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.45.0/go.mod h1:Tiz03lTBVBrm7eWZBOidzEaYaJa8tjwGUGv6d8mlTyk= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.45.0 h1:QBajQ2SrwQijzHyZbQlPsuIzpl/ll8DY6wPWsajeGcI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.45.0/go.mod h1:08ZQLjrPLQ6R4kAXvuOvODEer5Yh4CoFvll5qB2BCI8= go.opentelemetry.io/otel/metric v1.45.0 h1:7Eg1uH7CJ5cXv9is6tnBe1FI6rj1nwUdbFypRm3br/M= go.opentelemetry.io/otel/metric v1.45.0/go.mod h1:HAPbm1nd3p1PmFH7v2dR+6BjXxw+Lq4a2+pndMAm08s= go.opentelemetry.io/otel/sdk v1.45.0 h1:4VVSMgQ83dUgW2aoX5f6JgLvHwIvzcuLnF9lUdCSpCw= @@ -147,8 +125,6 @@ go.opentelemetry.io/otel/sdk/metric v1.45.0 h1:oVFszMfyj1Am6s24Vtc7wBb8BKLcwepJj go.opentelemetry.io/otel/sdk/metric v1.45.0/go.mod h1:vUWUxDZvu1WVRj8JA8S0AdhsPrZoDpA2DdZauIh4mDA= go.opentelemetry.io/otel/trace v1.45.0 h1:l/mP6Uv7oNO7/TblbhpbgMidxhq1uO/rPsikOyVhxag= go.opentelemetry.io/otel/trace v1.45.0/go.mod h1:qoJJA2xNMnxRrdISU/kLtfUH2wNeQbiv+jhs/CxI8bc= -go.opentelemetry.io/proto/otlp v1.11.0 h1:5rrYs0Ykyj50sdU/JU0x8etU+LubXWb+gED6TbEdMIk= -go.opentelemetry.io/proto/otlp v1.11.0/go.mod h1:SmVizdCOAm3XBtG1g1NnOdhW6jtddT72hLMhv8VwA8E= go.yaml.in/yaml/v3 v3.0.5 h1:N6y/pJk8buWs9NY5ERU2HSMfm+IuD/OtfdAnq6kESPw= go.yaml.in/yaml/v3 v3.0.5/go.mod h1:HVTZu1O7/Vkt2N+BFy8Zza+lnLsABggaTM2ZpNIGuKg= golang.org/x/exp v0.0.0-20260908205506-85c1c2202aba h1:Ck8QetSgk912qxWLMCKxd0in+aiyBQyDSMae6e/xmpU= @@ -164,12 +140,8 @@ golang.org/x/term v0.45.0 h1:NwWyBmoJCbfTHpxrWoZ9C6/VxOf7ic219I8xZZFdrf0= golang.org/x/term v0.45.0/go.mod h1:9aqxs0blBcrm/n0L9QW0aRVD+ktan8ssZromtqJC43w= golang.org/x/text v0.41.0 h1:vz/seA0lnX87Othu2f/0L24RcgrXD9/YFTSuGjj3rH8= golang.org/x/text v0.41.0/go.mod h1:jvf1O8ajNzZqhSrQBPbutR/EB83Cc0CFrezNQIwbb5M= -golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= -golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -google.golang.org/genproto/googleapis/api v0.0.0-20260803160001-6ac0973c030d h1:FarXi840EJWSHYTN3ERkADbPWjl307+FGrA22KAVjjc= -google.golang.org/genproto/googleapis/api v0.0.0-20260803160001-6ac0973c030d/go.mod h1:K/+WGbmBY7aNW1HDw1fJnKYo10i0DkAX6pows00dLig= google.golang.org/genproto/googleapis/rpc v0.0.0-20260803160001-6ac0973c030d h1:IL4hdHzcUv2l/gcg98/Rj3FbtE6axwqslOW8SW0C+S0= google.golang.org/genproto/googleapis/rpc v0.0.0-20260803160001-6ac0973c030d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.84.0 h1:soMyaPJ8pAak5PIQ0DGBUir0XRo2fRoMqhNWMLlLxO0= @@ -184,5 +156,7 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= -gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= +gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= +gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= +pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk= +pgregory.net/rapid v1.2.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= diff --git a/managedplugin/docker.go b/managedplugin/docker.go index 282103b2..ff0fc5cb 100644 --- a/managedplugin/docker.go +++ b/managedplugin/docker.go @@ -9,10 +9,9 @@ import ( "strings" "github.com/distribution/reference" - "github.com/docker/docker/api/types/filters" - "github.com/docker/docker/api/types/image" - "github.com/docker/docker/api/types/registry" - "github.com/docker/docker/client" + "github.com/moby/moby/api/pkg/authconfig" + "github.com/moby/moby/api/types/registry" + "github.com/moby/moby/client" "github.com/schollz/progressbar/v3" ) @@ -73,10 +72,7 @@ func (pr *dockerProgressReader) Read(_ []byte) (n int, err error) { } func newDockerClient(options ...client.Opt) (*client.Client, error) { - defaultOptions := make([]client.Opt, 0, 2+len(options)) - defaultOptions = append(defaultOptions, client.FromEnv, client.WithAPIVersionNegotiation()) - options = append(defaultOptions, options...) - return client.NewClientWithOpts(options...) + return client.New(append([]client.Opt{client.FromEnv}, options...)...) } func isDockerImageAvailable(ctx context.Context, imageName string) (bool, error) { @@ -86,21 +82,21 @@ func isDockerImageAvailable(ctx context.Context, imageName string) (bool, error) } // List the images matching the given name - images, err := cli.ImageList(ctx, image.ListOptions{ - Filters: filters.NewArgs(filters.Arg("reference", imageName)), + images, err := cli.ImageList(ctx, client.ImageListOptions{ + Filters: make(client.Filters).Add("reference", imageName), }) if err != nil { return false, fmt.Errorf("failed to list Docker images: %w", err) } // Check if the image with the specified name was found - return len(images) > 0, nil + return len(images.Items) > 0, nil } func pullDockerImage(ctx context.Context, imageName string, authToken string, teamName string, dockerHubAuth string, dops DownloaderOptions) error { // Pull the image additionalHeaders := make(map[string]string) - opts := image.PullOptions{} + opts := client.ImagePullOptions{} if strings.HasPrefix(imageName, "docker.cloudquery.io") { if authToken == "" { return ErrLoginRequired @@ -122,7 +118,7 @@ func pullDockerImage(ctx context.Context, imageName string, authToken string, te Username: "managedplugin", Password: authToken, } - encodedAuth, err := registry.EncodeAuthConfig(authConfig) + encodedAuth, err := authconfig.Encode(authConfig) if err != nil { return fmt.Errorf("failed to encode Docker auth config: %v", err) } diff --git a/managedplugin/plugin.go b/managedplugin/plugin.go index 5baa8a2d..bce41649 100644 --- a/managedplugin/plugin.go +++ b/managedplugin/plugin.go @@ -21,11 +21,10 @@ import ( pbDiscovery "github.com/cloudquery/plugin-pb-go/pb/discovery/v0" pbDiscoveryV1 "github.com/cloudquery/plugin-pb-go/pb/discovery/v1" pbSource "github.com/cloudquery/plugin-pb-go/pb/source/v0" - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/network" - dockerClient "github.com/docker/docker/client" - "github.com/docker/go-connections/nat" "github.com/google/uuid" + "github.com/moby/moby/api/types/container" + "github.com/moby/moby/api/types/network" + dockerClient "github.com/moby/moby/client" containerSpecs "github.com/opencontainers/image-spec/specs-go/v1" "github.com/rs/zerolog" "golang.org/x/exp/slices" @@ -296,23 +295,16 @@ func (c *Client) startDockerPlugin(ctx context.Context, configPath string) error if err != nil { return fmt.Errorf("failed to create Docker client: %w", err) } - cli.NegotiateAPIVersion(ctx) pluginArgs := c.getPluginArgs() - portMappings, err := nat.ParsePortSpec("7777/tcp") + pluginPort, err := network.ParsePort("7777/tcp") if err != nil { return fmt.Errorf("failed to parse port spec: %w", err) } - if len(portMappings) == 0 { - return fmt.Errorf("failed to parse port spec: %w", errors.New("no port mappings found")) - } - - portMapping := portMappings[0] - config := &container.Config{ - ExposedPorts: nat.PortSet{ - portMapping.Port: {}, + ExposedPorts: network.PortSet{ + pluginPort: {}, }, Image: configPath, Cmd: pluginArgs, @@ -322,20 +314,26 @@ func (c *Client) startDockerPlugin(ctx context.Context, configPath string) error hostConfig := &container.HostConfig{ ExtraHosts: c.dockerExtraHosts, - PortBindings: map[nat.Port][]nat.PortBinding{ - portMapping.Port: {portMapping.Binding}, + PortBindings: network.PortMap{ + pluginPort: {{}}, }, } networkingConfig := &network.NetworkingConfig{} platform := &containerSpecs.Platform{} containerName := c.config.Name + "-" + uuid.New().String() - resp, err := cli.ContainerCreate(ctx, config, hostConfig, networkingConfig, platform, containerName) + resp, err := cli.ContainerCreate(ctx, dockerClient.ContainerCreateOptions{ + Config: config, + HostConfig: hostConfig, + NetworkingConfig: networkingConfig, + Platform: platform, + Name: containerName, + }) if err != nil { return fmt.Errorf("failed to create container: %w", err) } c.containerID = resp.ID - if err := cli.ContainerStart(ctx, resp.ID, container.StartOptions{}); err != nil { + if _, err := cli.ContainerStart(ctx, resp.ID, dockerClient.ContainerStartOptions{}); err != nil { return fmt.Errorf("failed to start container: %w", err) } // wait for container to start @@ -359,13 +357,13 @@ func (c *Client) startDockerPlugin(ctx context.Context, configPath string) error } retrier := retry.New(options...) err = retrier.Do(func() error { - hostConnection, err = getHostConnection(ctx, cli, resp.ID, portMapping.Port) + hostConnection, err = getHostConnection(ctx, cli, resp.ID, pluginPort) return err }) if err != nil { return fmt.Errorf("failed to get host connection: %w", err) } - reader, err := cli.ContainerLogs(ctx, resp.ID, container.LogsOptions{ + reader, err := cli.ContainerLogs(ctx, resp.ID, dockerClient.ContainerLogsOptions{ ShowStdout: true, ShowStderr: true, Follow: true, @@ -381,23 +379,24 @@ func (c *Client) startDockerPlugin(ctx context.Context, configPath string) error return c.connectUsingTCP(ctx, hostConnection) } -func getHostConnection(ctx context.Context, cli *dockerClient.Client, containerID string, port nat.Port) (string, error) { +func getHostConnection(ctx context.Context, cli *dockerClient.Client, containerID string, port network.Port) (string, error) { // Retrieve the dynamically assigned HOST port - containerJSON, err := cli.ContainerInspect(ctx, containerID) + inspectResult, err := cli.ContainerInspect(ctx, containerID, dockerClient.ContainerInspectOptions{}) if err != nil { return "", fmt.Errorf("failed to inspect container: %w", err) } + containerJSON := inspectResult.Container if containerJSON.State != nil { switch containerJSON.State.Status { case "removing", "exited", "dead": - return "", errors.New("container exited prematurely with error " + containerJSON.State.Error + ", exit code " + strconv.Itoa(containerJSON.State.ExitCode) + " and status " + containerJSON.State.Status) + return "", errors.New("container exited prematurely with error " + containerJSON.State.Error + ", exit code " + strconv.Itoa(containerJSON.State.ExitCode) + " and status " + string(containerJSON.State.Status)) } } if len(containerJSON.NetworkSettings.Ports) == 0 || len(containerJSON.NetworkSettings.Ports[port]) == 0 { return "", errors.New("failed to get port mapping for container") } portBinding := containerJSON.NetworkSettings.Ports[port][0] - return portBinding.HostIP + ":" + portBinding.HostPort, nil + return net.JoinHostPort(portBinding.HostIP.String(), portBinding.HostPort), nil } func waitForContainerRunning(ctx context.Context, cli *dockerClient.Client, containerID string) error { @@ -412,14 +411,15 @@ func waitForContainerRunning(ctx context.Context, cli *dockerClient.Client, cont } retrier := retry.New(options...) err := retrier.Do(func() error { - containerJSON, err := cli.ContainerInspect(ctx, containerID) + inspectResult, err := cli.ContainerInspect(ctx, containerID, dockerClient.ContainerInspectOptions{}) if err != nil { return fmt.Errorf("failed to inspect container: %w", err) } + containerJSON := inspectResult.Container if containerJSON.State != nil { switch containerJSON.State.Status { case "removing", "exited", "dead": - return errors.New("container exited prematurely with error " + containerJSON.State.Error + ", exit code " + strconv.Itoa(containerJSON.State.ExitCode) + " and status " + containerJSON.State.Status) + return errors.New("container exited prematurely with error " + containerJSON.State.Error + ", exit code " + strconv.Itoa(containerJSON.State.ExitCode) + " and status " + string(containerJSON.State.Status)) case "running": return nil } @@ -779,10 +779,10 @@ func (c *Client) Terminate() error { return fmt.Errorf("failed to create Docker client: %w", err) } timeout := containerStopTimeoutSeconds - if err := cli.ContainerStop(context.Background(), c.containerID, container.StopOptions{Timeout: &timeout}); err != nil { + if _, err := cli.ContainerStop(context.Background(), c.containerID, dockerClient.ContainerStopOptions{Timeout: &timeout}); err != nil { return fmt.Errorf("failed to stop container: %w", err) } - if err := cli.ContainerRemove(context.Background(), c.containerID, container.RemoveOptions{}); err != nil { + if _, err := cli.ContainerRemove(context.Background(), c.containerID, dockerClient.ContainerRemoveOptions{}); err != nil { return fmt.Errorf("failed to remove container: %w", err) } } diff --git a/managedplugin/plugin_test.go b/managedplugin/plugin_test.go index 80a0131f..70ec4450 100644 --- a/managedplugin/plugin_test.go +++ b/managedplugin/plugin_test.go @@ -5,6 +5,8 @@ import ( "os" "runtime" "testing" + + dockerClient "github.com/moby/moby/client" ) func TestManagedPluginGitHub(t *testing.T) { @@ -96,7 +98,7 @@ func TestManagedPluginCloudQueryDocker(t *testing.T) { if err != nil { t.Fatal(err) } - _, err = cli.Ping(ctx) + _, err = cli.Ping(ctx, dockerClient.PingOptions{}) if err != nil { t.Skip("docker not running") } @@ -150,7 +152,7 @@ func TestManagedPluginDocker(t *testing.T) { if err != nil { t.Fatal(err) } - _, err = cli.Ping(ctx) + _, err = cli.Ping(ctx, dockerClient.PingOptions{}) if err != nil { t.Skip("docker not running") }