diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 4383614..3b6c342 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -17,13 +17,13 @@ jobs: steps: - name: Checkout uses: actions/checkout@v6 - + - name: Install Go uses: actions/setup-go@v6 with: - go-version: '1.26' + go-version: "1.26" check-latest: true - + - name: Install libraries for ubuntu run: | sudo apt install libx11-dev @@ -43,22 +43,50 @@ jobs: - name: Build renku-dev-utils run: make rdu + test-generate: + runs-on: ubuntu-24.04 + steps: + - name: Checkout + uses: actions/checkout@v6 + + - name: Install Go + uses: actions/setup-go@v6 + with: + go-version: "1.26" + check-latest: true + + - name: Install libraries for ubuntu + run: | + sudo apt install libx11-dev + + - name: Print environment + run: | + which go + go env + make vars + + - name: Test code generation + run: | + make cleanup-generate + make generate + make rdu + lint: runs-on: ubuntu-24.04 steps: - name: Checkout uses: actions/checkout@v6 - + - name: Install Go uses: actions/setup-go@v6 with: - go-version: '1.26' + go-version: "1.26" check-latest: true - name: Install libraries for ubuntu run: | sudo apt install libx11-dev - + - name: Run golangci-lint uses: golangci/golangci-lint-action@v9 with: diff --git a/Makefile b/Makefile index d2fa16e..ec482ca 100644 --- a/Makefile +++ b/Makefile @@ -93,3 +93,8 @@ pkg/renkuapi/users/users_gen.go: pkg/renkuapi/users/api.spec.yaml pkg/renkuapi/session/session_gen.go: pkg/renkuapi/session/api.spec.yaml go generate pkg/renkuapi/session/session.go + +.PHONY: cleanup-generate +cleanup-generate: ## Remove generated files + rm pkg/renkuapi/users/users_gen.go || true + rm pkg/renkuapi/session/session_gen.go || true diff --git a/go.mod b/go.mod index 6a60ab0..a8f49f3 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/containerd/containerd/v2 v2.2.3 github.com/distribution/distribution/v3 v3.1.0 github.com/distribution/reference v0.6.0 - github.com/getkin/kin-openapi v0.135.0 + github.com/getkin/kin-openapi v0.137.0 github.com/golang-jwt/jwt/v5 v5.3.1 github.com/oapi-codegen/runtime v1.4.0 github.com/opencontainers/image-spec v1.1.1 @@ -37,9 +37,10 @@ require ( github.com/fxamacker/cbor/v2 v2.9.0 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/jsonpointer v0.22.4 // indirect github.com/go-openapi/jsonreference v0.20.2 // indirect github.com/go-openapi/swag v0.23.0 // indirect + github.com/go-openapi/swag/jsonname v0.25.4 // indirect github.com/go-viper/mapstructure/v2 v2.4.0 // indirect github.com/godbus/dbus/v5 v5.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect @@ -48,29 +49,30 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/mailru/easyjson v0.7.7 // indirect + github.com/mailru/easyjson v0.9.1 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/oapi-codegen/oapi-codegen/v2 v2.6.0 // indirect + github.com/oapi-codegen/oapi-codegen/v2 v2.7.0 // indirect github.com/oasdiff/yaml v0.0.9 // indirect - github.com/oasdiff/yaml3 v0.0.9 // indirect + github.com/oasdiff/yaml3 v0.0.12 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/perimeterx/marshmallow v1.1.5 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/sagikazarmark/locafero v0.11.0 // indirect + github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 // indirect github.com/sirupsen/logrus v1.9.4 // indirect github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect - github.com/speakeasy-api/jsonpath v0.6.0 // indirect - github.com/speakeasy-api/openapi-overlay v0.10.2 // indirect + github.com/speakeasy-api/jsonpath v0.6.3 // indirect + github.com/speakeasy-api/openapi v1.19.2 // indirect github.com/spf13/afero v1.15.0 // indirect github.com/spf13/cast v1.10.0 // indirect github.com/spf13/pflag v1.0.10 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/vmware-labs/yaml-jsonpath v0.3.2 // indirect - github.com/woodsbury/decimal128 v1.3.0 // indirect + github.com/woodsbury/decimal128 v1.4.0 // indirect github.com/x448/float16 v0.8.4 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 // indirect @@ -94,7 +96,6 @@ require ( google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af // indirect gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/klog/v2 v2.140.0 // indirect k8s.io/kube-openapi v0.0.0-20260317180543-43fb72c5454a // indirect diff --git a/go.sum b/go.sum index a56553d..2f65087 100644 --- a/go.sum +++ b/go.sum @@ -25,6 +25,8 @@ github.com/distribution/distribution/v3 v3.1.0 h1:u1v788HreKTLGdNY6s7px8Exgrs9mZ github.com/distribution/distribution/v3 v3.1.0/go.mod h1:73BuF5/ziMHNVt7nnL1roYpH4Eg/FgUlKZm3WryIx/o= 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/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= +github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dprotaso/go-yit v0.0.0-20191028211022-135eb7262960/go.mod h1:9HQzr9D/0PGwMEbC3d5AB7oi67+h4TsQqItC1GVYG58= github.com/dprotaso/go-yit v0.0.0-20220510233725-9ba8df137936 h1:PRxIJD8XjimM5aTknUK9w6DHLDox2r2M3DI4i2pnd3w= github.com/dprotaso/go-yit v0.0.0-20220510233725-9ba8df137936/go.mod h1:ttYvX5qlB+mlV1okblJqcSMtR4c52UKxDiX9GRBS8+Q= @@ -40,21 +42,25 @@ github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= -github.com/getkin/kin-openapi v0.135.0 h1:751SjYfbiwqukYuVjwYEIKNfrSwS5YpA7DZnKSwQgtg= -github.com/getkin/kin-openapi v0.135.0/go.mod h1:6dd5FJl6RdX4usBtFBaQhk9q62Yb2J0Mk5IhUO/QqFI= +github.com/getkin/kin-openapi v0.137.0 h1:Q3HhawNQV0GfvO2mIYMUBUSEFrDsVlzcYz4VydL9YEo= +github.com/getkin/kin-openapi v0.137.0/go.mod h1:vUYWaKyMqj7PfTybelXtLuLN9tReS12vxnzMRK+z2GY= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= -github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= -github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/jsonpointer v0.22.4 h1:dZtK82WlNpVLDW2jlA1YCiVJFVqkED1MegOUy9kR5T4= +github.com/go-openapi/jsonpointer v0.22.4/go.mod h1:elX9+UgznpFhgBuaMQ7iu4lvvX1nvNsesQ3oxmYTw80= github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= +github.com/go-openapi/swag/jsonname v0.25.4 h1:bZH0+MsS03MbnwBXYhuTttMOqk+5KcQ9869Vye1bNHI= +github.com/go-openapi/swag/jsonname v0.25.4/go.mod h1:GPVEk9CWVhNvWhZgrnvRA6utbAltopbKwDu8mXNUMag= +github.com/go-openapi/testify/v2 v2.0.2 h1:X999g3jeLcoY8qctY/c/Z8iBHTbwLz7R2WXd6Ub6wls= +github.com/go-openapi/testify/v2 v2.0.2/go.mod h1:HCPmvFFnheKK2BuwSA0TbbdxJ3I16pjwMkYkP4Ywn54= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM= github.com/go-test/deep v1.0.8/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= @@ -106,8 +112,9 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.9.1 h1:LbtsOm5WAswyWbvTEOqhypdPeZzHavpZx96/n553mR8= +github.com/mailru/easyjson v0.9.1/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -121,14 +128,14 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oapi-codegen/oapi-codegen/v2 v2.6.0 h1:4i+F2cvwBFZeplxCssNdLy3MhNzUD87mI3HnayHZkAU= -github.com/oapi-codegen/oapi-codegen/v2 v2.6.0/go.mod h1:eWHeJSohQJIINJZzzQriVynfGsnlQVh0UkN2UYYcw4Q= +github.com/oapi-codegen/oapi-codegen/v2 v2.7.0 h1:/8daqIYZfwnsHEAZdHUu9m0D5LA+5DoJCP7zLlT5Cs0= +github.com/oapi-codegen/oapi-codegen/v2 v2.7.0/go.mod h1:qzFy6iuobJw/hD1aRILee4G87/ShmhR0xYCwcUtZMCw= github.com/oapi-codegen/runtime v1.4.0 h1:KLOSFOp7UzkbS7Cs1ms6NBEKYr0WmH2wZG0KKbd2er4= github.com/oapi-codegen/runtime v1.4.0/go.mod h1:5sw5fxCDmnOzKNYmkVNF8d34kyUeejJEY8HNT2WaPec= github.com/oasdiff/yaml v0.0.9 h1:zQOvd2UKoozsSsAknnWoDJlSK4lC0mpmjfDsfqNwX48= github.com/oasdiff/yaml v0.0.9/go.mod h1:8lvhgJG4xiKPj3HN5lDow4jZHPlx1i7dIwzkdAo6oAM= -github.com/oasdiff/yaml3 v0.0.9 h1:rWPrKccrdUm8J0F3sGuU+fuh9+1K/RdJlWF7O/9yw2g= -github.com/oasdiff/yaml3 v0.0.9/go.mod h1:y5+oSEHCPT/DGrS++Wc/479ERge0zTFxaF8PbGKcg2o= +github.com/oasdiff/yaml3 v0.0.12 h1:75urAtPeDg2/iDEWwzNrLOWxI9N/dCh81nTTJtokt2M= +github.com/oasdiff/yaml3 v0.0.12/go.mod h1:y5+oSEHCPT/DGrS++Wc/479ERge0zTFxaF8PbGKcg2o= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.2/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= @@ -157,16 +164,18 @@ github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc= github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik= +github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 h1:KRzFb2m7YtdldCEkzs6KqmJw4nqEVZGK7IN2kJkjTuQ= +github.com/santhosh-tekuri/jsonschema/v6 v6.0.2/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU= github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw= github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U= -github.com/speakeasy-api/jsonpath v0.6.0 h1:IhtFOV9EbXplhyRqsVhHoBmmYjblIRh5D1/g8DHMXJ8= -github.com/speakeasy-api/jsonpath v0.6.0/go.mod h1:ymb2iSkyOycmzKwbEAYPJV/yi2rSmvBCLZJcyD+VVWw= -github.com/speakeasy-api/openapi-overlay v0.10.2 h1:VOdQ03eGKeiHnpb1boZCGm7x8Haj6gST0P3SGTX95GU= -github.com/speakeasy-api/openapi-overlay v0.10.2/go.mod h1:n0iOU7AqKpNFfEt6tq7qYITC4f0yzVVdFw0S7hukemg= +github.com/speakeasy-api/jsonpath v0.6.3 h1:c+QPwzAOdrWvzycuc9HFsIZcxKIaWcNpC+xhOW9rJxU= +github.com/speakeasy-api/jsonpath v0.6.3/go.mod h1:2cXloNuQ+RSXi5HTRaeBh7JEmjRXTiaKpFTdZiL7URI= +github.com/speakeasy-api/openapi v1.19.2 h1:md90tE71/M8jS3cuRlsuWP5Aed4xoG5PSRvXeZgCv/M= +github.com/speakeasy-api/openapi v1.19.2/go.mod h1:UfKa7FqE4jgexJZuj51MmdHAFGmDv0Zaw3+yOd81YKU= github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= @@ -198,8 +207,8 @@ github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65E github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/vmware-labs/yaml-jsonpath v0.3.2 h1:/5QKeCBGdsInyDCyVNLbXyilb61MXGi9NP674f9Hobk= github.com/vmware-labs/yaml-jsonpath v0.3.2/go.mod h1:U6whw1z03QyqgWdgXxvVnQ90zN1BWz5V+51Ewf8k+rQ= -github.com/woodsbury/decimal128 v1.3.0 h1:8pffMNWIlC0O5vbyHWFZAt5yWvWcrHA+3ovIIjVWss0= -github.com/woodsbury/decimal128 v1.3.0/go.mod h1:C5UTmyTjW3JftjUFzOVhC20BEQa2a4ZKOB5I6Zjb+ds= +github.com/woodsbury/decimal128 v1.4.0 h1:xJATj7lLu4f2oObouMt2tgGiElE5gO6mSWUjQsBgUlc= +github.com/woodsbury/decimal128 v1.4.0/go.mod h1:BP46FUrVjVhdTbKT+XuQh2xfQaGki9LMIRJSFuh6THU= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/pkg/renkuapi/session/session_gen.go b/pkg/renkuapi/session/session_gen.go index 500816d..172813a 100644 --- a/pkg/renkuapi/session/session_gen.go +++ b/pkg/renkuapi/session/session_gen.go @@ -1,14 +1,15 @@ // Package session provides primitives to interact with the openapi HTTP API. // -// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.6.0 DO NOT EDIT. +// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.7.0 DO NOT EDIT. package session import ( "bytes" - "compress/gzip" + "compress/flate" "context" "encoding/base64" "encoding/json" + "errors" "fmt" "io" "net/http" @@ -944,6 +945,7 @@ func (t Build) AsBuildNotCompletedPart() (BuildNotCompletedPart, error) { // FromBuildNotCompletedPart overwrites any union data inside the Build as the provided BuildNotCompletedPart func (t *Build) FromBuildNotCompletedPart(v BuildNotCompletedPart) error { + v.Status = "BuildNotCompletedPart" b, err := json.Marshal(v) t.union = b return err @@ -951,6 +953,7 @@ func (t *Build) FromBuildNotCompletedPart(v BuildNotCompletedPart) error { // MergeBuildNotCompletedPart performs a merge with any union data inside the Build, using the provided BuildNotCompletedPart func (t *Build) MergeBuildNotCompletedPart(v BuildNotCompletedPart) error { + v.Status = "BuildNotCompletedPart" b, err := json.Marshal(v) if err != nil { return err @@ -970,6 +973,7 @@ func (t Build) AsBuildCompletedPart() (BuildCompletedPart, error) { // FromBuildCompletedPart overwrites any union data inside the Build as the provided BuildCompletedPart func (t *Build) FromBuildCompletedPart(v BuildCompletedPart) error { + v.Status = "BuildCompletedPart" b, err := json.Marshal(v) t.union = b return err @@ -977,6 +981,7 @@ func (t *Build) FromBuildCompletedPart(v BuildCompletedPart) error { // MergeBuildCompletedPart performs a merge with any union data inside the Build, using the provided BuildCompletedPart func (t *Build) MergeBuildCompletedPart(v BuildCompletedPart) error { + v.Status = "BuildCompletedPart" b, err := json.Marshal(v) if err != nil { return err @@ -987,6 +992,29 @@ func (t *Build) MergeBuildCompletedPart(v BuildCompletedPart) error { return err } +func (t Build) Discriminator() (string, error) { + var discriminator struct { + Discriminator string `json:"status"` + } + err := json.Unmarshal(t.union, &discriminator) + return discriminator.Discriminator, err +} + +func (t Build) ValueByDiscriminator() (interface{}, error) { + discriminator, err := t.Discriminator() + if err != nil { + return nil, err + } + switch discriminator { + case "BuildCompletedPart": + return t.AsBuildCompletedPart() + case "BuildNotCompletedPart": + return t.AsBuildNotCompletedPart() + default: + return nil, errors.New("unknown discriminator value: " + discriminator) + } +} + func (t Build) MarshalJSON() ([]byte, error) { b, err := t.union.MarshalJSON() if err != nil { @@ -1788,7 +1816,7 @@ func NewGetBuildsBuildIdRequest(server string, buildId Ulid) (*http.Request, err return nil, err } - req, err := http.NewRequest("GET", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodGet, queryURL.String(), nil) if err != nil { return nil, err } @@ -1833,7 +1861,7 @@ func NewPatchBuildsBuildIdRequestWithBody(server string, buildId Ulid, contentTy return nil, err } - req, err := http.NewRequest("PATCH", queryURL.String(), body) + req, err := http.NewRequest(http.MethodPatch, queryURL.String(), body) if err != nil { return nil, err } @@ -1870,28 +1898,33 @@ func NewGetBuildsBuildIdLogsRequest(server string, buildId Ulid, params *GetBuil } if params != nil { + // queryValues collects non-styled parameters (passthrough, JSON) + // that are safe to round-trip through url.Values.Encode(). queryValues := queryURL.Query() + // rawQueryFragments collects pre-encoded query fragments from + // styled parameters, preserving literal commas as delimiters + // per the OpenAPI spec (e.g. "color=blue,black,brown"). + var rawQueryFragments []string if params.MaxLines != nil { if queryFrag, err := runtime.StyleParamWithOptions("form", true, "max_lines", *params.MaxLines, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "integer", Format: ""}); err != nil { return nil, err - } else if parsed, err := url.ParseQuery(queryFrag); err != nil { - return nil, err } else { - for k, v := range parsed { - for _, v2 := range v { - queryValues.Add(k, v2) - } + for _, qp := range strings.Split(queryFrag, "&") { + rawQueryFragments = append(rawQueryFragments, qp) } } } - queryURL.RawQuery = queryValues.Encode() + if encoded := queryValues.Encode(); encoded != "" { + rawQueryFragments = append(rawQueryFragments, encoded) + } + queryURL.RawQuery = strings.Join(rawQueryFragments, "&") } - req, err := http.NewRequest("GET", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodGet, queryURL.String(), nil) if err != nil { return nil, err } @@ -1919,28 +1952,33 @@ func NewGetEnvironmentsRequest(server string, params *GetEnvironmentsParams) (*h } if params != nil { + // queryValues collects non-styled parameters (passthrough, JSON) + // that are safe to round-trip through url.Values.Encode(). queryValues := queryURL.Query() + // rawQueryFragments collects pre-encoded query fragments from + // styled parameters, preserving literal commas as delimiters + // per the OpenAPI spec (e.g. "color=blue,black,brown"). + var rawQueryFragments []string if params.GetEnvironmentParams != nil { if queryFrag, err := runtime.StyleParamWithOptions("form", true, "get_environment_params", *params.GetEnvironmentParams, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "object", Format: ""}); err != nil { return nil, err - } else if parsed, err := url.ParseQuery(queryFrag); err != nil { - return nil, err } else { - for k, v := range parsed { - for _, v2 := range v { - queryValues.Add(k, v2) - } + for _, qp := range strings.Split(queryFrag, "&") { + rawQueryFragments = append(rawQueryFragments, qp) } } } - queryURL.RawQuery = queryValues.Encode() + if encoded := queryValues.Encode(); encoded != "" { + rawQueryFragments = append(rawQueryFragments, encoded) + } + queryURL.RawQuery = strings.Join(rawQueryFragments, "&") } - req, err := http.NewRequest("GET", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodGet, queryURL.String(), nil) if err != nil { return nil, err } @@ -1978,7 +2016,7 @@ func NewPostEnvironmentsRequestWithBody(server string, contentType string, body return nil, err } - req, err := http.NewRequest("POST", queryURL.String(), body) + req, err := http.NewRequest(http.MethodPost, queryURL.String(), body) if err != nil { return nil, err } @@ -2014,7 +2052,7 @@ func NewDeleteEnvironmentsEnvironmentIdRequest(server string, environmentId Ulid return nil, err } - req, err := http.NewRequest("DELETE", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodDelete, queryURL.String(), nil) if err != nil { return nil, err } @@ -2048,7 +2086,7 @@ func NewGetEnvironmentsEnvironmentIdRequest(server string, environmentId Ulid) ( return nil, err } - req, err := http.NewRequest("GET", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodGet, queryURL.String(), nil) if err != nil { return nil, err } @@ -2093,7 +2131,7 @@ func NewPatchEnvironmentsEnvironmentIdRequestWithBody(server string, environment return nil, err } - req, err := http.NewRequest("PATCH", queryURL.String(), body) + req, err := http.NewRequest(http.MethodPatch, queryURL.String(), body) if err != nil { return nil, err } @@ -2129,7 +2167,7 @@ func NewGetEnvironmentsEnvironmentIdBuildsRequest(server string, environmentId U return nil, err } - req, err := http.NewRequest("GET", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodGet, queryURL.String(), nil) if err != nil { return nil, err } @@ -2163,7 +2201,7 @@ func NewPostEnvironmentsEnvironmentIdBuildsRequest(server string, environmentId return nil, err } - req, err := http.NewRequest("POST", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodPost, queryURL.String(), nil) if err != nil { return nil, err } @@ -2197,7 +2235,7 @@ func NewGetProjectsProjectIdSessionLaunchersRequest(server string, projectId Uli return nil, err } - req, err := http.NewRequest("GET", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodGet, queryURL.String(), nil) if err != nil { return nil, err } @@ -2224,7 +2262,7 @@ func NewGetSessionLaunchersRequest(server string) (*http.Request, error) { return nil, err } - req, err := http.NewRequest("GET", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodGet, queryURL.String(), nil) if err != nil { return nil, err } @@ -2262,7 +2300,7 @@ func NewPostSessionLaunchersRequestWithBody(server string, contentType string, b return nil, err } - req, err := http.NewRequest("POST", queryURL.String(), body) + req, err := http.NewRequest(http.MethodPost, queryURL.String(), body) if err != nil { return nil, err } @@ -2298,7 +2336,7 @@ func NewDeleteSessionLaunchersLauncherIdRequest(server string, launcherId Ulid) return nil, err } - req, err := http.NewRequest("DELETE", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodDelete, queryURL.String(), nil) if err != nil { return nil, err } @@ -2332,7 +2370,7 @@ func NewGetSessionLaunchersLauncherIdRequest(server string, launcherId Ulid) (*h return nil, err } - req, err := http.NewRequest("GET", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodGet, queryURL.String(), nil) if err != nil { return nil, err } @@ -2377,7 +2415,7 @@ func NewPatchSessionLaunchersLauncherIdRequestWithBody(server string, launcherId return nil, err } - req, err := http.NewRequest("PATCH", queryURL.String(), body) + req, err := http.NewRequest(http.MethodPatch, queryURL.String(), body) if err != nil { return nil, err } @@ -2512,6 +2550,14 @@ func (r GetBuildsBuildIdResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetBuildsBuildIdResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type PatchBuildsBuildIdResponse struct { Body []byte HTTPResponse *http.Response @@ -2535,6 +2581,14 @@ func (r PatchBuildsBuildIdResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r PatchBuildsBuildIdResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetBuildsBuildIdLogsResponse struct { Body []byte HTTPResponse *http.Response @@ -2558,6 +2612,14 @@ func (r GetBuildsBuildIdLogsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetBuildsBuildIdLogsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetEnvironmentsResponse struct { Body []byte HTTPResponse *http.Response @@ -2581,6 +2643,14 @@ func (r GetEnvironmentsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetEnvironmentsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type PostEnvironmentsResponse struct { Body []byte HTTPResponse *http.Response @@ -2604,6 +2674,14 @@ func (r PostEnvironmentsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r PostEnvironmentsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type DeleteEnvironmentsEnvironmentIdResponse struct { Body []byte HTTPResponse *http.Response @@ -2626,6 +2704,14 @@ func (r DeleteEnvironmentsEnvironmentIdResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r DeleteEnvironmentsEnvironmentIdResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetEnvironmentsEnvironmentIdResponse struct { Body []byte HTTPResponse *http.Response @@ -2650,6 +2736,14 @@ func (r GetEnvironmentsEnvironmentIdResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetEnvironmentsEnvironmentIdResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type PatchEnvironmentsEnvironmentIdResponse struct { Body []byte HTTPResponse *http.Response @@ -2674,6 +2768,14 @@ func (r PatchEnvironmentsEnvironmentIdResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r PatchEnvironmentsEnvironmentIdResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetEnvironmentsEnvironmentIdBuildsResponse struct { Body []byte HTTPResponse *http.Response @@ -2697,6 +2799,14 @@ func (r GetEnvironmentsEnvironmentIdBuildsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetEnvironmentsEnvironmentIdBuildsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type PostEnvironmentsEnvironmentIdBuildsResponse struct { Body []byte HTTPResponse *http.Response @@ -2720,6 +2830,14 @@ func (r PostEnvironmentsEnvironmentIdBuildsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r PostEnvironmentsEnvironmentIdBuildsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetProjectsProjectIdSessionLaunchersResponse struct { Body []byte HTTPResponse *http.Response @@ -2743,6 +2861,14 @@ func (r GetProjectsProjectIdSessionLaunchersResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetProjectsProjectIdSessionLaunchersResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetSessionLaunchersResponse struct { Body []byte HTTPResponse *http.Response @@ -2766,6 +2892,14 @@ func (r GetSessionLaunchersResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetSessionLaunchersResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type PostSessionLaunchersResponse struct { Body []byte HTTPResponse *http.Response @@ -2789,6 +2923,14 @@ func (r PostSessionLaunchersResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r PostSessionLaunchersResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type DeleteSessionLaunchersLauncherIdResponse struct { Body []byte HTTPResponse *http.Response @@ -2811,6 +2953,14 @@ func (r DeleteSessionLaunchersLauncherIdResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r DeleteSessionLaunchersLauncherIdResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetSessionLaunchersLauncherIdResponse struct { Body []byte HTTPResponse *http.Response @@ -2835,6 +2985,14 @@ func (r GetSessionLaunchersLauncherIdResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetSessionLaunchersLauncherIdResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type PatchSessionLaunchersLauncherIdResponse struct { Body []byte HTTPResponse *http.Response @@ -2859,6 +3017,14 @@ func (r PatchSessionLaunchersLauncherIdResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r PatchSessionLaunchersLauncherIdResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + // GetBuildsBuildIdWithResponse request returning *GetBuildsBuildIdResponse func (c *ClientWithResponses) GetBuildsBuildIdWithResponse(ctx context.Context, buildId Ulid, reqEditors ...RequestEditorFn) (*GetBuildsBuildIdResponse, error) { rsp, err := c.GetBuildsBuildId(ctx, buildId, reqEditors...) @@ -3585,104 +3751,106 @@ func ParsePatchSessionLaunchersLauncherIdResponse(rsp *http.Response) (*PatchSes return response, nil } -// Base64 encoded, gzipped, json marshaled Swagger object +// Base64 encoded, compressed with deflate, json marshaled OpenAPI spec. +// Stored as a slice of fixed-width chunks rather than one concatenated +// const string: with thousands of chunks the chained `+` fold is several +// times slower for the Go compiler than parsing a slice literal. var swaggerSpec = []string{ - - "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", - "Ox0ckY6+CzK7nf1fAAAA//9oBWzgQG0AAA==", -} - -// GetSwagger returns the content of the embedded swagger specification file -// or error if failed to decode + "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", + "/V8AAAD//w==", +} + +// decodeSpec returns the embedded OpenAPI spec as raw JSON bytes, +// after base64-decoding and flate-decompressing the embedded blob. func decodeSpec() ([]byte, error) { - zipped, err := base64.StdEncoding.DecodeString(strings.Join(swaggerSpec, "")) + encoded := strings.Join(swaggerSpec, "") + compressed, err := base64.StdEncoding.DecodeString(encoded) if err != nil { return nil, fmt.Errorf("error base64 decoding spec: %w", err) } - zr, err := gzip.NewReader(bytes.NewReader(zipped)) - if err != nil { - return nil, fmt.Errorf("error decompressing spec: %w", err) - } + zr := flate.NewReader(bytes.NewReader(compressed)) var buf bytes.Buffer - _, err = buf.ReadFrom(zr) - if err != nil { - return nil, fmt.Errorf("error decompressing spec: %w", err) + if _, err := buf.ReadFrom(zr); err != nil { + return nil, fmt.Errorf("read flate: %w", err) + } + if err := zr.Close(); err != nil { + return nil, fmt.Errorf("close flate reader: %w", err) } return buf.Bytes(), nil @@ -3690,7 +3858,7 @@ func decodeSpec() ([]byte, error) { var rawSpec = decodeSpecCached() -// a naive cached of a decoded swagger spec +// a naive cache of the decoded OpenAPI spec func decodeSpecCached() func() ([]byte, error) { data, err := decodeSpec() return func() ([]byte, error) { @@ -3708,12 +3876,12 @@ func PathToRawSpec(pathToFile string) map[string]func() ([]byte, error) { return res } -// GetSwagger returns the Swagger specification corresponding to the generated code -// in this file. The external references of Swagger specification are resolved. -// The logic of resolving external references is tightly connected to "import-mapping" feature. -// Externally referenced files must be embedded in the corresponding golang packages. -// Urls can be supported but this task was out of the scope. -func GetSwagger() (swagger *openapi3.T, err error) { +// GetSpec returns the OpenAPI specification corresponding to the generated +// code in this file. External references in the spec are resolved through +// PathToRawSpec; externally-referenced files must be embedded in their +// corresponding Go packages (via the import-mapping feature). URL-based +// external refs are not supported. +func GetSpec() (swagger *openapi3.T, err error) { resolvePath := PathToRawSpec("") loader := openapi3.NewLoader() @@ -3739,3 +3907,22 @@ func GetSwagger() (swagger *openapi3.T, err error) { } return } + +// GetSpecJSON returns the raw JSON bytes of the embedded OpenAPI +// specification: decompressed but not unmarshaled. External references +// are not resolved here; the bytes are the spec exactly as embedded by +// codegen. The result is cached at package init time, so repeated calls +// are cheap. +func GetSpecJSON() ([]byte, error) { + return rawSpec() +} + +// GetSwagger returns the OpenAPI specification corresponding to the +// generated code in this file. +// +// Deprecated: GetSwagger predates kin-openapi renaming openapi3.Swagger +// to openapi3.T. Use [GetSpec] instead. This wrapper is retained for +// backwards compatibility. +func GetSwagger() (*openapi3.T, error) { + return GetSpec() +} diff --git a/pkg/renkuapi/users/api.spec.yaml b/pkg/renkuapi/users/api.spec.yaml index 72e7023..5fb57f8 100644 --- a/pkg/renkuapi/users/api.spec.yaml +++ b/pkg/renkuapi/users/api.spec.yaml @@ -619,10 +619,3 @@ components: "application/json": schema: $ref: "#/components/schemas/ErrorResponse" - securitySchemes: - oidc: - type: openIdConnect - openIdConnectUrl: /auth/realms/Renku/.well-known/openid-configuration -security: - - oidc: - - openid diff --git a/pkg/renkuapi/users/users_gen.go b/pkg/renkuapi/users/users_gen.go index f8d0c54..6f50334 100644 --- a/pkg/renkuapi/users/users_gen.go +++ b/pkg/renkuapi/users/users_gen.go @@ -1,11 +1,11 @@ // Package users provides primitives to interact with the openapi HTTP API. // -// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.6.0 DO NOT EDIT. +// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.7.0 DO NOT EDIT. package users import ( "bytes" - "compress/gzip" + "compress/flate" "context" "encoding/base64" "encoding/json" @@ -21,10 +21,6 @@ import ( "github.com/oapi-codegen/runtime" ) -const ( - OidcScopes = "oidc.Scopes" -) - // Defines values for SecretKind. const ( General SecretKind = "general" @@ -660,7 +656,7 @@ func NewGetErrorRequest(server string) (*http.Request, error) { return nil, err } - req, err := http.NewRequest("GET", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodGet, queryURL.String(), nil) if err != nil { return nil, err } @@ -687,7 +683,7 @@ func NewGetUserRequest(server string) (*http.Request, error) { return nil, err } - req, err := http.NewRequest("GET", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodGet, queryURL.String(), nil) if err != nil { return nil, err } @@ -714,7 +710,7 @@ func NewGetUserPreferencesRequest(server string) (*http.Request, error) { return nil, err } - req, err := http.NewRequest("GET", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodGet, queryURL.String(), nil) if err != nil { return nil, err } @@ -741,7 +737,7 @@ func NewDeleteUserPreferencesDismissProjectMigrationBannerRequest(server string) return nil, err } - req, err := http.NewRequest("DELETE", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodDelete, queryURL.String(), nil) if err != nil { return nil, err } @@ -768,7 +764,7 @@ func NewPostUserPreferencesDismissProjectMigrationBannerRequest(server string) ( return nil, err } - req, err := http.NewRequest("POST", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodPost, queryURL.String(), nil) if err != nil { return nil, err } @@ -796,28 +792,33 @@ func NewDeleteUserPreferencesPinnedProjectsRequest(server string, params *Delete } if params != nil { + // queryValues collects non-styled parameters (passthrough, JSON) + // that are safe to round-trip through url.Values.Encode(). queryValues := queryURL.Query() + // rawQueryFragments collects pre-encoded query fragments from + // styled parameters, preserving literal commas as delimiters + // per the OpenAPI spec (e.g. "color=blue,black,brown"). + var rawQueryFragments []string if params.DeletePinnedParams != nil { if queryFrag, err := runtime.StyleParamWithOptions("form", true, "delete_pinned_params", *params.DeletePinnedParams, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "object", Format: ""}); err != nil { return nil, err - } else if parsed, err := url.ParseQuery(queryFrag); err != nil { - return nil, err } else { - for k, v := range parsed { - for _, v2 := range v { - queryValues.Add(k, v2) - } + for _, qp := range strings.Split(queryFrag, "&") { + rawQueryFragments = append(rawQueryFragments, qp) } } } - queryURL.RawQuery = queryValues.Encode() + if encoded := queryValues.Encode(); encoded != "" { + rawQueryFragments = append(rawQueryFragments, encoded) + } + queryURL.RawQuery = strings.Join(rawQueryFragments, "&") } - req, err := http.NewRequest("DELETE", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodDelete, queryURL.String(), nil) if err != nil { return nil, err } @@ -855,7 +856,7 @@ func NewPostUserPreferencesPinnedProjectsRequestWithBody(server string, contentT return nil, err } - req, err := http.NewRequest("POST", queryURL.String(), body) + req, err := http.NewRequest(http.MethodPost, queryURL.String(), body) if err != nil { return nil, err } @@ -884,7 +885,7 @@ func NewGetUserSecretKeyRequest(server string) (*http.Request, error) { return nil, err } - req, err := http.NewRequest("GET", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodGet, queryURL.String(), nil) if err != nil { return nil, err } @@ -912,28 +913,33 @@ func NewGetUserSecretsRequest(server string, params *GetUserSecretsParams) (*htt } if params != nil { + // queryValues collects non-styled parameters (passthrough, JSON) + // that are safe to round-trip through url.Values.Encode(). queryValues := queryURL.Query() + // rawQueryFragments collects pre-encoded query fragments from + // styled parameters, preserving literal commas as delimiters + // per the OpenAPI spec (e.g. "color=blue,black,brown"). + var rawQueryFragments []string if params.UserSecretsParams != nil { if queryFrag, err := runtime.StyleParamWithOptions("form", true, "user_secrets_params", *params.UserSecretsParams, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "object", Format: ""}); err != nil { return nil, err - } else if parsed, err := url.ParseQuery(queryFrag); err != nil { - return nil, err } else { - for k, v := range parsed { - for _, v2 := range v { - queryValues.Add(k, v2) - } + for _, qp := range strings.Split(queryFrag, "&") { + rawQueryFragments = append(rawQueryFragments, qp) } } } - queryURL.RawQuery = queryValues.Encode() + if encoded := queryValues.Encode(); encoded != "" { + rawQueryFragments = append(rawQueryFragments, encoded) + } + queryURL.RawQuery = strings.Join(rawQueryFragments, "&") } - req, err := http.NewRequest("GET", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodGet, queryURL.String(), nil) if err != nil { return nil, err } @@ -971,7 +977,7 @@ func NewPostUserSecretsRequestWithBody(server string, contentType string, body i return nil, err } - req, err := http.NewRequest("POST", queryURL.String(), body) + req, err := http.NewRequest(http.MethodPost, queryURL.String(), body) if err != nil { return nil, err } @@ -1007,7 +1013,7 @@ func NewDeleteUserSecretsSecretIdRequest(server string, secretId Ulid) (*http.Re return nil, err } - req, err := http.NewRequest("DELETE", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodDelete, queryURL.String(), nil) if err != nil { return nil, err } @@ -1041,7 +1047,7 @@ func NewGetUserSecretsSecretIdRequest(server string, secretId Ulid) (*http.Reque return nil, err } - req, err := http.NewRequest("GET", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodGet, queryURL.String(), nil) if err != nil { return nil, err } @@ -1086,7 +1092,7 @@ func NewPatchUserSecretsSecretIdRequestWithBody(server string, secretId Ulid, co return nil, err } - req, err := http.NewRequest("PATCH", queryURL.String(), body) + req, err := http.NewRequest(http.MethodPatch, queryURL.String(), body) if err != nil { return nil, err } @@ -1116,28 +1122,33 @@ func NewGetUsersRequest(server string, params *GetUsersParams) (*http.Request, e } if params != nil { + // queryValues collects non-styled parameters (passthrough, JSON) + // that are safe to round-trip through url.Values.Encode(). queryValues := queryURL.Query() + // rawQueryFragments collects pre-encoded query fragments from + // styled parameters, preserving literal commas as delimiters + // per the OpenAPI spec (e.g. "color=blue,black,brown"). + var rawQueryFragments []string if params.UserParams != nil { if queryFrag, err := runtime.StyleParamWithOptions("form", true, "user_params", *params.UserParams, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "object", Format: ""}); err != nil { return nil, err - } else if parsed, err := url.ParseQuery(queryFrag); err != nil { - return nil, err } else { - for k, v := range parsed { - for _, v2 := range v { - queryValues.Add(k, v2) - } + for _, qp := range strings.Split(queryFrag, "&") { + rawQueryFragments = append(rawQueryFragments, qp) } } } - queryURL.RawQuery = queryValues.Encode() + if encoded := queryValues.Encode(); encoded != "" { + rawQueryFragments = append(rawQueryFragments, encoded) + } + queryURL.RawQuery = strings.Join(rawQueryFragments, "&") } - req, err := http.NewRequest("GET", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodGet, queryURL.String(), nil) if err != nil { return nil, err } @@ -1171,7 +1182,7 @@ func NewDeleteUsersUserIdRequest(server string, userId string) (*http.Request, e return nil, err } - req, err := http.NewRequest("DELETE", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodDelete, queryURL.String(), nil) if err != nil { return nil, err } @@ -1205,7 +1216,7 @@ func NewGetUsersUserIdRequest(server string, userId string) (*http.Request, erro return nil, err } - req, err := http.NewRequest("GET", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodGet, queryURL.String(), nil) if err != nil { return nil, err } @@ -1232,7 +1243,7 @@ func NewGetVersionRequest(server string) (*http.Request, error) { return nil, err } - req, err := http.NewRequest("GET", queryURL.String(), nil) + req, err := http.NewRequest(http.MethodGet, queryURL.String(), nil) if err != nil { return nil, err } @@ -1363,6 +1374,14 @@ func (r GetErrorResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetErrorResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetUserResponse struct { Body []byte HTTPResponse *http.Response @@ -1386,6 +1405,14 @@ func (r GetUserResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetUserResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetUserPreferencesResponse struct { Body []byte HTTPResponse *http.Response @@ -1410,6 +1437,14 @@ func (r GetUserPreferencesResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetUserPreferencesResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type DeleteUserPreferencesDismissProjectMigrationBannerResponse struct { Body []byte HTTPResponse *http.Response @@ -1433,6 +1468,14 @@ func (r DeleteUserPreferencesDismissProjectMigrationBannerResponse) StatusCode() return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r DeleteUserPreferencesDismissProjectMigrationBannerResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type PostUserPreferencesDismissProjectMigrationBannerResponse struct { Body []byte HTTPResponse *http.Response @@ -1456,6 +1499,14 @@ func (r PostUserPreferencesDismissProjectMigrationBannerResponse) StatusCode() i return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r PostUserPreferencesDismissProjectMigrationBannerResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type DeleteUserPreferencesPinnedProjectsResponse struct { Body []byte HTTPResponse *http.Response @@ -1479,6 +1530,14 @@ func (r DeleteUserPreferencesPinnedProjectsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r DeleteUserPreferencesPinnedProjectsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type PostUserPreferencesPinnedProjectsResponse struct { Body []byte HTTPResponse *http.Response @@ -1502,6 +1561,14 @@ func (r PostUserPreferencesPinnedProjectsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r PostUserPreferencesPinnedProjectsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetUserSecretKeyResponse struct { Body []byte HTTPResponse *http.Response @@ -1525,6 +1592,14 @@ func (r GetUserSecretKeyResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetUserSecretKeyResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetUserSecretsResponse struct { Body []byte HTTPResponse *http.Response @@ -1549,6 +1624,14 @@ func (r GetUserSecretsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetUserSecretsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type PostUserSecretsResponse struct { Body []byte HTTPResponse *http.Response @@ -1572,6 +1655,14 @@ func (r PostUserSecretsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r PostUserSecretsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type DeleteUserSecretsSecretIdResponse struct { Body []byte HTTPResponse *http.Response @@ -1594,6 +1685,14 @@ func (r DeleteUserSecretsSecretIdResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r DeleteUserSecretsSecretIdResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetUserSecretsSecretIdResponse struct { Body []byte HTTPResponse *http.Response @@ -1618,6 +1717,14 @@ func (r GetUserSecretsSecretIdResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetUserSecretsSecretIdResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type PatchUserSecretsSecretIdResponse struct { Body []byte HTTPResponse *http.Response @@ -1641,6 +1748,14 @@ func (r PatchUserSecretsSecretIdResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r PatchUserSecretsSecretIdResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetUsersResponse struct { Body []byte HTTPResponse *http.Response @@ -1664,6 +1779,14 @@ func (r GetUsersResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetUsersResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type DeleteUsersUserIdResponse struct { Body []byte HTTPResponse *http.Response @@ -1686,6 +1809,14 @@ func (r DeleteUsersUserIdResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r DeleteUsersUserIdResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetUsersUserIdResponse struct { Body []byte HTTPResponse *http.Response @@ -1710,6 +1841,14 @@ func (r GetUsersUserIdResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetUsersUserIdResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetVersionResponse struct { Body []byte HTTPResponse *http.Response @@ -1732,6 +1871,14 @@ func (r GetVersionResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetVersionResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + // GetErrorWithResponse request returning *GetErrorResponse func (c *ClientWithResponses) GetErrorWithResponse(ctx context.Context, reqEditors ...RequestEditorFn) (*GetErrorResponse, error) { rsp, err := c.GetError(ctx, reqEditors...) @@ -2470,75 +2617,75 @@ func ParseGetVersionResponse(rsp *http.Response) (*GetVersionResponse, error) { return response, nil } -// Base64 encoded, gzipped, json marshaled Swagger object +// Base64 encoded, compressed with deflate, json marshaled OpenAPI spec. +// Stored as a slice of fixed-width chunks rather than one concatenated +// const string: with thousands of chunks the chained `+` fold is several +// times slower for the Go compiler than parsing a slice literal. var swaggerSpec = []string{ - - "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", - "sh4lmuDl1fJ/AQAA///7+8OCPTkAAA==", -} - -// GetSwagger returns the content of the embedded swagger specification file -// or error if failed to decode + "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", +} + +// decodeSpec returns the embedded OpenAPI spec as raw JSON bytes, +// after base64-decoding and flate-decompressing the embedded blob. func decodeSpec() ([]byte, error) { - zipped, err := base64.StdEncoding.DecodeString(strings.Join(swaggerSpec, "")) + encoded := strings.Join(swaggerSpec, "") + compressed, err := base64.StdEncoding.DecodeString(encoded) if err != nil { return nil, fmt.Errorf("error base64 decoding spec: %w", err) } - zr, err := gzip.NewReader(bytes.NewReader(zipped)) - if err != nil { - return nil, fmt.Errorf("error decompressing spec: %w", err) - } + zr := flate.NewReader(bytes.NewReader(compressed)) var buf bytes.Buffer - _, err = buf.ReadFrom(zr) - if err != nil { - return nil, fmt.Errorf("error decompressing spec: %w", err) + if _, err := buf.ReadFrom(zr); err != nil { + return nil, fmt.Errorf("read flate: %w", err) + } + if err := zr.Close(); err != nil { + return nil, fmt.Errorf("close flate reader: %w", err) } return buf.Bytes(), nil @@ -2546,7 +2693,7 @@ func decodeSpec() ([]byte, error) { var rawSpec = decodeSpecCached() -// a naive cached of a decoded swagger spec +// a naive cache of the decoded OpenAPI spec func decodeSpecCached() func() ([]byte, error) { data, err := decodeSpec() return func() ([]byte, error) { @@ -2564,12 +2711,12 @@ func PathToRawSpec(pathToFile string) map[string]func() ([]byte, error) { return res } -// GetSwagger returns the Swagger specification corresponding to the generated code -// in this file. The external references of Swagger specification are resolved. -// The logic of resolving external references is tightly connected to "import-mapping" feature. -// Externally referenced files must be embedded in the corresponding golang packages. -// Urls can be supported but this task was out of the scope. -func GetSwagger() (swagger *openapi3.T, err error) { +// GetSpec returns the OpenAPI specification corresponding to the generated +// code in this file. External references in the spec are resolved through +// PathToRawSpec; externally-referenced files must be embedded in their +// corresponding Go packages (via the import-mapping feature). URL-based +// external refs are not supported. +func GetSpec() (swagger *openapi3.T, err error) { resolvePath := PathToRawSpec("") loader := openapi3.NewLoader() @@ -2595,3 +2742,22 @@ func GetSwagger() (swagger *openapi3.T, err error) { } return } + +// GetSpecJSON returns the raw JSON bytes of the embedded OpenAPI +// specification: decompressed but not unmarshaled. External references +// are not resolved here; the bytes are the spec exactly as embedded by +// codegen. The result is cached at package init time, so repeated calls +// are cheap. +func GetSpecJSON() ([]byte, error) { + return rawSpec() +} + +// GetSwagger returns the OpenAPI specification corresponding to the +// generated code in this file. +// +// Deprecated: GetSwagger predates kin-openapi renaming openapi3.Swagger +// to openapi3.T. Use [GetSpec] instead. This wrapper is retained for +// backwards compatibility. +func GetSwagger() (*openapi3.T, error) { + return GetSpec() +}