Skip to content

perf(validate): upgrade go-openapi validate#3064

Merged
fredbi merged 1 commit intogo-swagger:masterfrom
fredbi:exp/reduce-gc-pressure
Feb 1, 2024
Merged

perf(validate): upgrade go-openapi validate#3064
fredbi merged 1 commit intogo-swagger:masterfrom
fredbi:exp/reduce-gc-pressure

Conversation

@fredbi
Copy link
Copy Markdown
Contributor

@fredbi fredbi commented Jan 22, 2024

Signed-off-by: Frédéric BIDON fredbi@yahoo.com

@codecov
Copy link
Copy Markdown

codecov Bot commented Jan 23, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Comparison is base (abb5353) 82.64% compared to head (b66fbc8) 82.65%.

Additional details and impacted files
@@           Coverage Diff           @@
##           master    #3064   +/-   ##
=======================================
  Coverage   82.64%   82.65%           
=======================================
  Files          62       62           
  Lines       12856    12856           
=======================================
+ Hits        10625    10626    +1     
+ Misses       1692     1691    -1     
  Partials      539      539           
Flag Coverage Δ
codegen-oldstable-canary-fixtures 32.54% <ø> (ø)
codegen-stable-canary-fixtures 32.54% <ø> (ø)
unit-oldstable 82.80% <ø> (+<0.01%) ⬆️
unit-stable 82.80% <ø> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

fredbi added a commit to fredbi/validate that referenced this pull request Jan 23, 2024
This PR is a follow-up on go-openapi#169, which cames with innocuous changes, but already
reduced the total number of allocations when validating a swagger spec.

We reduce further the pressure on go's GC by pooling temporarily
allocated objects: validators and results.

When recursively allocating validators, calls to "Validate()" redeem to the pool the allocated
validator. This means that a validator is usable only once.

A similar approach is taken for `Result`s: upon merge, the merged result
is redeemed to the pool.

Eventually, temporarily allocated `spec.Schema`s are also pooled.

In order not to break existing interfaces, this is enabled by default
only when validating a spec (`Spec()`) or when using
`AgainstSchema()`.

Another option at the spec level allows for skipping the gathering of schemas
into the result ("schemata"): these schemas must be cloned to remain
valid after their parent is redeemed to the pool.

Comment on the benchmark:

CPU profiling shows that about 30% of the CPU time is spent managing
garbage.

Memory profiling shows that our benchmark (validating the k8s API spec) goes
down from 25M allocated objects down to ~ 17M (go-openapi#169 went down from 60M to 25M).

The `Validate` method generates only ~ 5M of those, out of which
~ 4M are caused by the schema unmarshaling & expansion and 1M by string
allocations for the validator "path".
Unfortunately, classic string interning methods don't work well with this dynamic "path",
so I leave it there.

Integration tests (go-swagger/go-swagger#3064)
show a significant improvement when running go-swagger validate in codegen.

* contributes: go-swagger/go-swagger#2649

Further improvements would most likely come from optimizing the
validation of defaults and examples (which amount for 2M allocs).

Signed-off-by: Frederic BIDON <fredbi@yahoo.com>
@fredbi
Copy link
Copy Markdown
Contributor Author

fredbi commented Jan 23, 2024

Comparing resources usage at different points:

/usr/bin/time swagger generate server -f fixtures/canary/kubernetes/swagger.json -t temp --quiet

On master:

32.80user 2.25system 0:22.57elapsed 155%CPU (0avgtext+0avgdata 965432maxresident)k
16inputs+28944outputs (0major+447121minor)pagefaults 0swaps

Current branch:

18.92user 1.97system 0:14.07elapsed 148%CPU (0avgtext+0avgdata 749368maxresident)k
39408inputs+28944outputs (0major+356060minor)pagefaults 0swaps

On commit xx (prior to merging previous perf improvement):

66.19user 4.08system 0:44.85elapsed 156%CPU (0avgtext+0avgdata 1051836maxresident)k
0inputs+28944outputs (0major+1230798minor)pagefaults 0swaps

fredbi added a commit to fredbi/validate that referenced this pull request Jan 23, 2024
This PR is a follow-up on go-openapi#169, which cames with innocuous changes, but already
reduced the total number of allocations when validating a swagger spec.

We reduce further the pressure on go's GC by pooling temporarily
allocated objects: validators and results.

When recursively allocating validators, calls to "Validate()" redeem to the pool the allocated
validator. This means that a validator is usable only once.

A similar approach is taken for `Result`s: upon merge, the merged result
is redeemed to the pool.

Eventually, temporarily allocated `spec.Schema`s are also pooled.

In order not to break existing interfaces, this is enabled by default
only when validating a spec (`Spec()`) or when using
`AgainstSchema()`.

Another option at the spec level allows for skipping the gathering of schemas
into the result ("schemata"): these schemas must be cloned to remain
valid after their parent is redeemed to the pool.

Comment on the benchmark:

CPU profiling shows that about 30% of the CPU time is spent managing
garbage.

Memory profiling shows that our benchmark (validating the k8s API spec) goes
down from 25M allocated objects down to ~ 17M (go-openapi#169 went down from 60M to 25M).

The `Validate` method generates only ~ 5M of those, out of which
~ 4M are caused by the schema unmarshaling & expansion and 1M by string
allocations for the validator "path".
Unfortunately, classic string interning methods don't work well with this dynamic "path",
so I leave it there.

Integration tests (go-swagger/go-swagger#3064)
show a significant improvement when running go-swagger validate in codegen.

* contributes: go-swagger/go-swagger#2649

Further improvements would most likely come from optimizing the
validation of defaults and examples (which amount for 2M allocs).

Signed-off-by: Frederic BIDON <fredbi@yahoo.com>

fixed bug: attempted to reuse recycled validator

Signed-off-by: Frederic BIDON <fredbi@yahoo.com>
fredbi added a commit to fredbi/validate that referenced this pull request Jan 25, 2024
This PR is a follow-up on go-openapi#169, which cames with innocuous changes, but already
reduced the total number of allocations when validating a swagger spec.

We reduce further the pressure on go's GC by pooling temporarily
allocated objects: validators and results.

When recursively allocating validators, calls to "Validate()" redeem to the pool the allocated
validator. This means that a validator is usable only once.

A similar approach is taken for `Result`s: upon merge, the merged result
is redeemed to the pool.

Eventually, temporarily allocated `spec.Schema`s are also pooled.

In order not to break existing interfaces, this is enabled by default
only when validating a spec (`Spec()`) or when using
`AgainstSchema()`.

Another option at the spec level allows for skipping the gathering of schemas
into the result ("schemata"): these schemas must be cloned to remain
valid after their parent is redeemed to the pool.

Comment on the benchmark:

CPU profiling shows that about 30% of the CPU time is spent managing
garbage.

Memory profiling shows that our benchmark (validating the k8s API spec) goes
down from 25M allocated objects down to ~ 17M (go-openapi#169 went down from 60M to 25M).

The `Validate` method generates only ~ 5M of those, out of which
~ 4M are caused by the schema unmarshaling & expansion and 1M by string
allocations for the validator "path".
Unfortunately, classic string interning methods don't work well with this dynamic "path",
so I leave it there.

Integration tests (go-swagger/go-swagger#3064)
show a significant improvement when running go-swagger validate in codegen.

* contributes: go-swagger/go-swagger#2649

Further improvements would most likely come from optimizing the
validation of defaults and examples (which amount for 2M allocs).

Signed-off-by: Frederic BIDON <fredbi@yahoo.com>

fixed bug: attempted to reuse recycled validator

Signed-off-by: Frederic BIDON <fredbi@yahoo.com>
fredbi added a commit to fredbi/validate that referenced this pull request Jan 25, 2024
This PR is a follow-up on go-openapi#169, which cames with innocuous changes, but already
reduced the total number of allocations when validating a swagger spec.

We reduce further the pressure on go's GC by pooling temporarily
allocated objects: validators and results.

When recursively allocating validators, calls to "Validate()" redeem to the pool the allocated
validator. This means that a validator is usable only once.

A similar approach is taken for `Result`s: upon merge, the merged result
is redeemed to the pool.

Eventually, temporarily allocated `spec.Schema`s are also pooled.

In order not to break existing interfaces, this is enabled by default
only when validating a spec (`Spec()`) or when using
`AgainstSchema()`.

Another option at the spec level allows for skipping the gathering of schemas
into the result ("schemata"): these schemas must be cloned to remain
valid after their parent is redeemed to the pool.

Comment on the benchmark:

CPU profiling shows that about 30% of the CPU time is spent managing
garbage.

Memory profiling shows that our benchmark (validating the k8s API spec) goes
down from 25M allocated objects down to ~ 17M (go-openapi#169 went down from 60M to 25M).

The `Validate` method generates only ~ 5M of those, out of which
~ 4M are caused by the schema unmarshaling & expansion and 1M by string
allocations for the validator "path".
Unfortunately, classic string interning methods don't work well with this dynamic "path",
so I leave it there.

Integration tests (go-swagger/go-swagger#3064)
show a significant improvement when running go-swagger validate in codegen.

* contributes: go-swagger/go-swagger#2649

Further improvements would most likely come from optimizing the
validation of defaults and examples (which amount for 2M allocs).

Signed-off-by: Frederic BIDON <fredbi@yahoo.com>
fredbi added a commit to fredbi/validate that referenced this pull request Jan 25, 2024
This PR is a follow-up on go-openapi#169, which cames with innocuous changes, but already
reduced the total number of allocations when validating a swagger spec.

We reduce further the pressure on go's GC by pooling temporarily
allocated objects: validators and results.

When recursively allocating validators, calls to "Validate()" redeem to the pool the allocated
validator. This means that a validator is usable only once.

A similar approach is taken for `Result`s: upon merge, the merged result
is redeemed to the pool.

Eventually, temporarily allocated `spec.Schema`s are also pooled.

In order not to break existing interfaces, this is enabled by default
only when validating a spec (`Spec()`) or when using
`AgainstSchema()`.

Another option at the spec level allows for skipping the gathering of schemas
into the result ("schemata"): these schemas must be cloned to remain
valid after their parent is redeemed to the pool.

Comment on the benchmark:

CPU profiling shows that about 30% of the CPU time is spent managing
garbage.

Memory profiling shows that our benchmark (validating the k8s API spec) goes
down from 25M allocated objects down to ~ 17M (go-openapi#169 went down from 60M to 25M).

The `Validate` method generates only ~ 5M of those, out of which
~ 4M are caused by the schema unmarshaling & expansion and 1M by string
allocations for the validator "path".
Unfortunately, classic string interning methods don't work well with this dynamic "path",
so I leave it there.

Integration tests (go-swagger/go-swagger#3064)
show a significant improvement when running go-swagger validate in codegen.

* contributes: go-swagger/go-swagger#2649

Further improvements would most likely come from optimizing the
validation of defaults and examples (which amount for 2M allocs).

Signed-off-by: Frederic BIDON <fredbi@yahoo.com>
@fredbi fredbi force-pushed the exp/reduce-gc-pressure branch from ec5db71 to 4f93d4f Compare January 25, 2024 14:40
fredbi added a commit to fredbi/validate that referenced this pull request Jan 27, 2024
This PR is a follow-up on go-openapi#169, which cames with innocuous changes, but already
reduced the total number of allocations when validating a swagger spec.

We reduce further the pressure on go's GC by pooling temporarily
allocated objects: validators and results.

When recursively allocating validators, calls to "Validate()" redeem to the pool the allocated
validator. This means that a validator is usable only once.

A similar approach is taken for `Result`s: upon merge, the merged result
is redeemed to the pool.

Eventually, temporarily allocated `spec.Schema`s are also pooled.

In order not to break existing interfaces, this is enabled by default
only when validating a spec (`Spec()`) or when using
`AgainstSchema()`.

Another option at the spec level allows for skipping the gathering of schemas
into the result ("schemata"): these schemas must be cloned to remain
valid after their parent is redeemed to the pool.

Comment on the benchmark:

CPU profiling shows that about 30% of the CPU time is spent managing
garbage.

Memory profiling shows that our benchmark (validating the k8s API spec) goes
down from 25M allocated objects down to ~ 17M (go-openapi#169 went down from 60M to 25M).

The `Validate` method generates only ~ 5M of those, out of which
~ 4M are caused by the schema unmarshaling & expansion and 1M by string
allocations for the validator "path".
Unfortunately, classic string interning methods don't work well with this dynamic "path",
so I leave it there.

Integration tests (go-swagger/go-swagger#3064)
show a significant improvement when running go-swagger validate in codegen.

* contributes: go-swagger/go-swagger#2649

Further improvements would most likely come from optimizing the
validation of defaults and examples (which amount for 2M allocs).

Signed-off-by: Frederic BIDON <fredbi@yahoo.com>
fredbi added a commit to fredbi/validate that referenced this pull request Jan 27, 2024
This PR is a follow-up on go-openapi#169, which cames with innocuous changes, but already
reduced the total number of allocations when validating a swagger spec.

We reduce further the pressure on go's GC by pooling temporarily
allocated objects: validators and results.

When recursively allocating validators, calls to "Validate()" redeem to the pool the allocated
validator. This means that a validator is usable only once.

A similar approach is taken for `Result`s: upon merge, the merged result
is redeemed to the pool.

Eventually, temporarily allocated `spec.Schema`s are also pooled.

In order not to break existing interfaces, this is enabled by default
only when validating a spec (`Spec()`) or when using
`AgainstSchema()`.

Another option at the spec level allows for skipping the gathering of schemas
into the result ("schemata"): these schemas must be cloned to remain
valid after their parent is redeemed to the pool.

Comment on the benchmark:

CPU profiling shows that about 30% of the CPU time is spent managing
garbage.

Memory profiling shows that our benchmark (validating the k8s API spec) goes
down from 25M allocated objects down to ~ 17M (go-openapi#169 went down from 60M to 25M).

The `Validate` method generates only ~ 5M of those, out of which
~ 4M are caused by the schema unmarshaling & expansion and 1M by string
allocations for the validator "path".
Unfortunately, classic string interning methods don't work well with this dynamic "path",
so I leave it there.

Integration tests (go-swagger/go-swagger#3064)
show a significant improvement when running go-swagger validate in codegen.

* contributes: go-swagger/go-swagger#2649

Further improvements would most likely come from optimizing the
validation of defaults and examples (which amount for 2M allocs).

Signed-off-by: Frederic BIDON <fredbi@yahoo.com>
fredbi added a commit to go-openapi/validate that referenced this pull request Feb 1, 2024
This PR is a follow-up on #169, which cames with innocuous changes, but already
reduced the total number of allocations when validating a swagger spec.

We reduce further the pressure on go's GC by pooling temporarily
allocated objects: validators and results.

When recursively allocating validators, calls to "Validate()" redeem to the pool the allocated
validator. This means that a validator is usable only once.

A similar approach is taken for `Result`s: upon merge, the merged result
is redeemed to the pool.

Eventually, temporarily allocated `spec.Schema`s are also pooled.

In order not to break existing interfaces, this is enabled by default
only when validating a spec (`Spec()`) or when using
`AgainstSchema()`.

Another option at the spec level allows for skipping the gathering of schemas
into the result ("schemata"): these schemas must be cloned to remain
valid after their parent is redeemed to the pool.

Comment on the benchmark:

CPU profiling shows that about 30% of the CPU time is spent managing
garbage.

Memory profiling shows that our benchmark (validating the k8s API spec) goes
down from 25M allocated objects down to ~ 17M (#169 went down from 60M to 25M).

The `Validate` method generates only ~ 5M of those, out of which
~ 4M are caused by the schema unmarshaling & expansion and 1M by string
allocations for the validator "path".
Unfortunately, classic string interning methods don't work well with this dynamic "path",
so I leave it there.

Integration tests (go-swagger/go-swagger#3064)
show a significant improvement when running go-swagger validate in codegen.

* contributes: go-swagger/go-swagger#2649

Further improvements would most likely come from optimizing the
validation of defaults and examples (which amount for 2M allocs).

Signed-off-by: Frederic BIDON <fredbi@yahoo.com>
* onboards perf improvements in validate from go-openapi/validate#170

Signed-off-by: Frédéric BIDON <fredbi@yahoo.com>
@fredbi fredbi force-pushed the exp/reduce-gc-pressure branch from 4f93d4f to b66fbc8 Compare February 1, 2024 11:30
@fredbi fredbi changed the title testing impact of patch validate perf(validate): upgrade go-openapi validate Feb 1, 2024
@fredbi fredbi marked this pull request as ready for review February 1, 2024 11:32
@fredbi fredbi requested review from casualjim and youyuanwu February 1, 2024 11:39
@fredbi fredbi merged commit bcc7c78 into go-swagger:master Feb 1, 2024
@fredbi fredbi deleted the exp/reduce-gc-pressure branch February 1, 2024 11:53
jdabrowski added a commit to SecureAuthCorp/fork-go-swagger--go-swagger that referenced this pull request Aug 13, 2024
…go-swagger-v0.31.0

[Full Changelog](go-swagger/go-swagger@v0.30.5...v0.31.0)

**Implemented enhancements:**

- doc: refurbish doc site [\go-swagger#3086](go-swagger#3086)
- Diff should detect extension value changes [\go-swagger#2984](go-swagger#2984)
- Diff does not report on request param extensions  [\go-swagger#2983](go-swagger#2983)
- add support for ULID to swagger:strfmt [\go-swagger#2467](go-swagger#2467)
- Flatten changes case on definitions [\go-swagger#2334](go-swagger#2334)
- External $refs and polymorphism: models for subtypes not generated [\go-swagger#1885](go-swagger#1885)
- Add validation for a 'readOnly' property [\go-swagger#936](go-swagger#936)
- API Gateway vendor extensions? [\go-swagger#659](go-swagger#659)
- edit but don't overwrite configure\_xxx.go [\go-swagger#397](go-swagger#397)

**Fixed bugs:**

- Adding or removing a schema from response is not being recorded in the diff [\go-swagger#3074](go-swagger#3074)
- generating a command line : undefined: cli [\go-swagger#2969](go-swagger#2969)
- Adding an optional field to request body shouldn't be a breaking change [\go-swagger#2962](go-swagger#2962)
- Go-swagger diff runtime error when comparing schema with different response codes [\go-swagger#2952](go-swagger#2952)
- v0.30.4 panics during flatten [\go-swagger#2919](go-swagger#2919)
- Swagger Generate Server Generates `go` Code With Cycles [\go-swagger#2866](go-swagger#2866)
- JSON Schema in swagger API response [\go-swagger#2821](go-swagger#2821)
- "swagger diff" does not work with spec that has a recursive definition [\go-swagger#2774](go-swagger#2774)
- request Content-Type isn't multipart/form-data [\go-swagger#2773](go-swagger#2773)
- fields named like "+1" cause swagger to fail gnerating a cli [\go-swagger#2764](go-swagger#2764)
- Flatten stopped processing nested directories in v0.26.0 [\go-swagger#2743](go-swagger#2743)
- Wrong import path generated for an operation called "client" [\go-swagger#2730](go-swagger#2730)
- New lines in description create incorrect markdown [\go-swagger#2700](go-swagger#2700)
- `remove-unused` does not remove all unused definitions [\go-swagger#2657](go-swagger#2657)
- "swagger generate cli" generates code that does not compile  [\go-swagger#2650](go-swagger#2650)
- Generated code fails to call the Validate function on embedded structs resulting in incorrect validation [\go-swagger#2604](go-swagger#2604)
- Validation code for `maxProperties` is generated incorrectly [\go-swagger#2587](go-swagger#2587)
- Invalid code generated for parameters of array types with empty array as default value [\go-swagger#2533](go-swagger#2533)
- panic: assignment to entry in nil map [\go-swagger#2527](go-swagger#2527)
- Incompatible API with Helm Transitive Dependency [\go-swagger#2525](go-swagger#2525)
- Generate models failed after separate swagger files, maybe caused by a self-ref property of a definition in the separated swagger file [\go-swagger#2346](go-swagger#2346)
- "Invalid ref" error when generating server with cross-file reference when "--keep-spec-order" specified [\go-swagger#2216](go-swagger#2216)
- swagger generate client command fails with invalid token reference [\go-swagger#1898](go-swagger#1898)
- escaped parameters fail to generate the correct url path when a base path is present. [\go-swagger#1083](go-swagger#1083)

**Closed issues:**

- How to disable try it out option for the swagger-ui go-openapi/runtime/middleware [\go-swagger#3102](go-swagger#3102)
- Broken swagger:response Generation with Go 1.22.0 + 1.21.5 darwin/arm64 [\go-swagger#3071](go-swagger#3071)
- Install swagger server failed! [\go-swagger#3067](go-swagger#3067)
- Enum fields are not properly scanned \(and documented\) [\go-swagger#3002](go-swagger#3002)
- feat: provide SwaggerUI middleware to serve spec file [\go-swagger#2988](go-swagger#2988)
- Swagger generates broken code in $GOPATH [\go-swagger#2982](go-swagger#2982)
- wrong generated swagger.yml file when using flatten [\go-swagger#2978](go-swagger#2978)
- API client generation without requiring go-openapi modules [\go-swagger#2976](go-swagger#2976)
- API Client Generation - Strange naming of folder inside of client folder [\go-swagger#2974](go-swagger#2974)
- CVE-2022-4742 | CVSS Score: 9.8 | Category: CWE-1321 | A vulnerability, which was classified as critical, has been found in json-pointer. Affected by this issue is the function set of the file index.js. The manipulation leads to improperly controlled modification of object prototype attributes \('prototype pollution'\). The attack may be launched remotely. The name of the patch is 859c9984b6c407fc2d5a0a7e47c7274daa681941. It is recommended to apply a patch to fix this issue. VDB-216794 is the identifier assigned to this vulnerability. [\go-swagger#2971](go-swagger#2971)
- Generated server.go has default write timeout value of 60s [\go-swagger#2967](go-swagger#2967)
- pprof is a tool for visualization and analysis of profiling data [\go-swagger#2966](go-swagger#2966)
- diff result has no URL, when there is an object type array field in the schema [\go-swagger#2964](go-swagger#2964)
- bug: incorrect logic and missing imports [\go-swagger#2939](go-swagger#2939)
- swagger generate markdown doesn't respect both '--output' and '--target' [\go-swagger#2938](go-swagger#2938)
- Add diff support for extensions [\go-swagger#2935](go-swagger#2935)
- is support for generic structures? [\go-swagger#2920](go-swagger#2920)
- When the response refers to a structure with the same name under a different package, only the structure of the latest structure will be generated [\go-swagger#2918](go-swagger#2918)
- \[Bug\] The parameters section can't be generate under go1.20 [\go-swagger#2913](go-swagger#2913)
- ContextValidate panics if the field is `nil` for discriminator types [\go-swagger#2911](go-swagger#2911)
- \[Bug?\] Swagger Flatten, Not Recognizing Nested Operations [\go-swagger#2908](go-swagger#2908)
- Object has no field "components", but it has \(flattening error\) [\go-swagger#2903](go-swagger#2903)
- Swagger docs validate failed when enums\_as\_ints=true [\go-swagger#2890](go-swagger#2890)
- Generation error against something that used to work ok \(2 years ago :-\) \) [\go-swagger#2887](go-swagger#2887)
- Docs not updated for 0.30.4 [\go-swagger#2883](go-swagger#2883)
- UUID regex more liberal than spec [\go-swagger#2878](go-swagger#2878)
- swagger flatten randomizes order in yaml output [\go-swagger#2850](go-swagger#2850)
- Custom server tutorials raise an error while swagger generates files [\go-swagger#2833](go-swagger#2833)
- Upload of large files permanently leaves files in TEMPDIR [\go-swagger#2789](go-swagger#2789)
- How to modify CSS / Color  using Swagger V2? [\go-swagger#2788](go-swagger#2788)
- the context passed to ContextValidate is not the request context [\go-swagger#2748](go-swagger#2748)
- minimum misspelled [\go-swagger#2740](go-swagger#2740)
- Documentation missing for parameters section in swagger:route [\go-swagger#2719](go-swagger#2719)
- Substags not provided [\go-swagger#2686](go-swagger#2686)
- Installation instructions are not up-to-date [\go-swagger#2664](go-swagger#2664)
- Problem with generate server [\go-swagger#2634](go-swagger#2634)
- Using minItems not generating correct validation code [\go-swagger#2597](go-swagger#2597)
- Generated client code prints a pointer in Error\(\) func [\go-swagger#2590](go-swagger#2590)
- Support for a "description" struct tag [\go-swagger#2541](go-swagger#2541)
- Get an error "invalid character '-' in numeric literal\n\nrequest body: " when using formData. [\go-swagger#2491](go-swagger#2491)
- Single Model has rogue type with no explanation [\go-swagger#2254](go-swagger#2254)
- Update README with a new section about OpenAPI 3.0 to avoid more questions  [\go-swagger#2192](go-swagger#2192)
- \[Go\] Client Generated Code: Type is incorrect [\go-swagger#1850](go-swagger#1850)

**Merged pull requests:**

- ci: added retries on codecov coverage report upload [\go-swagger#3108](go-swagger#3108) ([fredbi](https://github.com/fredbi))
- chore: Add missing favicon [\go-swagger#3106](go-swagger#3106) ([truescotian](https://github.com/truescotian))
- chore: use errors.New to replace fmt.Errorf with no parameters [\go-swagger#3105](go-swagger#3105) ([ChengenH](https://github.com/ChengenH))
- chore\(deps\): bump golang.org/x/net from 0.22.0 to 0.23.0 [\go-swagger#3103](go-swagger#3103) ([dependabot[bot]](https://github.com/apps/dependabot))
- chore: fix some comments [\go-swagger#3101](go-swagger#3101) ([careworry](https://github.com/careworry))
- Adding support for s390x [\go-swagger#3099](go-swagger#3099) ([dilipgb](https://github.com/dilipgb))
- ci: try again to fix scorecard stuff [\go-swagger#3097](go-swagger#3097) ([fredbi](https://github.com/fredbi))
- ci: fixed scorecard analysis issue \(upgraded\) [\go-swagger#3096](go-swagger#3096) ([fredbi](https://github.com/fredbi))
- doc\(readme\): tidy up a shorter README [\go-swagger#3095](go-swagger#3095) ([fredbi](https://github.com/fredbi))
- doc: removed doc deployment on PRs [\go-swagger#3092](go-swagger#3092) ([fredbi](https://github.com/fredbi))
- Feat/docgen with hugo \(\#1\) [\go-swagger#3088](go-swagger#3088) ([fredbi](https://github.com/fredbi))
- doc\(serve\): fixed a few inacurracies in swagger serve documentation [\go-swagger#3083](go-swagger#3083) ([fredbi](https://github.com/fredbi))
- fix\(deps\): fixed undue go.mod replace [\go-swagger#3082](go-swagger#3082) ([fredbi](https://github.com/fredbi))
- chore\(go\): go-swagger and go-openapi require go.1.20 across the board [\go-swagger#3081](go-swagger#3081) ([fredbi](https://github.com/fredbi))
- doc: sync'ed doc source with website [\go-swagger#3079](go-swagger#3079) ([fredbi](https://github.com/fredbi))
- ci: reenacted codecov secret token [\go-swagger#3078](go-swagger#3078) ([fredbi](https://github.com/fredbi))
- ci: fixed test coverage computation [\go-swagger#3077](go-swagger#3077) ([fredbi](https://github.com/fredbi))
- chore\(lint\): relinted test [\go-swagger#3076](go-swagger#3076) ([fredbi](https://github.com/fredbi))
- record adding and removing schema from response in swagger diff \go-swagger#3074 [\go-swagger#3075](go-swagger#3075) ([zmay2030](https://github.com/zmay2030))
- fix: fix memory pools & race issues in go-openapi/validate [\go-swagger#3073](go-swagger#3073) ([fredbi](https://github.com/fredbi))
- golangci-lint: enable testifylint linter [\go-swagger#3068](go-swagger#3068) ([mmorel-35](https://github.com/mmorel-35))
- ci: fixed up codecov project threshold config [\go-swagger#3066](go-swagger#3066) ([fredbi](https://github.com/fredbi))
- ci: added tolerance threshold on codecov reports [\go-swagger#3065](go-swagger#3065) ([fredbi](https://github.com/fredbi))
- perf\(validate\): upgrade go-openapi validate [\go-swagger#3064](go-swagger#3064) ([fredbi](https://github.com/fredbi))
- perf\(codegen\): reduced allocated memory [\go-swagger#3063](go-swagger#3063) ([fredbi](https://github.com/fredbi))
- fix\(flatten\): onboard fix for relative $ref in params&responses [\go-swagger#3059](go-swagger#3059) ([fredbi](https://github.com/fredbi))
- Update docs: choosing a principal [\go-swagger#3058](go-swagger#3058) ([ghost](https://github.com/ghost))
- chore: updated dependencies for examples [\go-swagger#3057](go-swagger#3057) ([fredbi](https://github.com/fredbi))
- Revert "ci: setup ossf scorecard and codql workflows" [\go-swagger#3056](go-swagger#3056) ([casualjim](https://github.com/casualjim))
- chore\(deps\): bump docker/metadata-action from 4.6.0 to 5.5.0 [\go-swagger#3051](go-swagger#3051) ([dependabot[bot]](https://github.com/apps/dependabot))
- chore\(deps\): bump actions/checkout from 3.1.0 to 4.1.1 [\go-swagger#3050](go-swagger#3050) ([dependabot[bot]](https://github.com/apps/dependabot))
- ci: setup ossf scorecard and codql workflows [\go-swagger#3049](go-swagger#3049) ([mmorel-35](https://github.com/mmorel-35))
- chore\(ci\): refactored ci workflows [\go-swagger#3048](go-swagger#3048) ([fredbi](https://github.com/fredbi))
- fix\(cli codegen\): fixed missing imports  [\go-swagger#3046](go-swagger#3046) ([fredbi](https://github.com/fredbi))
- fix\(cli\): deconflicted names for variables and funcs [\go-swagger#3045](go-swagger#3045) ([fredbi](https://github.com/fredbi))
- fix\(markdown\): handled multi-lines blocks in descriptions [\go-swagger#3044](go-swagger#3044) ([fredbi](https://github.com/fredbi))
- fix\(codegen\): fixed operation package mangling when tag is v1 [\go-swagger#3043](go-swagger#3043) ([fredbi](https://github.com/fredbi))
- feat\(gen client\): added support to work with multiple mimes [\go-swagger#3042](go-swagger#3042) ([fredbi](https://github.com/fredbi))
- fix\(codegen\): fixed import conflict when tag is "client" [\go-swagger#3040](go-swagger#3040) ([fredbi](https://github.com/fredbi))
- chore\(go build\): removed code that requires go \< 1.19 to build [\go-swagger#3038](go-swagger#3038) ([fredbi](https://github.com/fredbi))
- chore\(test\): reduced the verbosity of tests [\go-swagger#3037](go-swagger#3037) ([fredbi](https://github.com/fredbi))
- doc: sync'ed markdown source with addition to HTML site [\go-swagger#3036](go-swagger#3036) ([fredbi](https://github.com/fredbi))
- fix\(validations\): fixed missing validation in embedded structs [\go-swagger#3034](go-swagger#3034) ([fredbi](https://github.com/fredbi))
- fix\(validations\): fixed MinProperties/MaxProperties [\go-swagger#3033](go-swagger#3033) ([fredbi](https://github.com/fredbi))
- fix\(strfmt\): stricter UUID validation [\go-swagger#3032](go-swagger#3032) ([fredbi](https://github.com/fredbi))
- feat\(validation\): added --rooted-error-path to generate models [\go-swagger#3031](go-swagger#3031) ([fredbi](https://github.com/fredbi))
- fixed client generation test re sensitiveness to GOPATH [\go-swagger#3030](go-swagger#3030) ([fredbi](https://github.com/fredbi))
- test\(client\): added dynamic test to assert path params [\go-swagger#3029](go-swagger#3029) ([fredbi](https://github.com/fredbi))
- chore: checkpoint - regenerating examples [\go-swagger#3028](go-swagger#3028) ([fredbi](https://github.com/fredbi))
- doc\(example\): fixed doc for custom-server example [\go-swagger#3027](go-swagger#3027) ([fredbi](https://github.com/fredbi))
- fix: follow-up on \go-swagger#3019 - fixed templates [\go-swagger#3026](go-swagger#3026) ([fredbi](https://github.com/fredbi))
- fix\(flatten\): flatten should remove unused models recursively [\go-swagger#3025](go-swagger#3025) ([fredbi](https://github.com/fredbi))
- fix\(mangling\): fixes name mangling in the presence of a special character [\go-swagger#3024](go-swagger#3024) ([fredbi](https://github.com/fredbi))
- feat\(formats\): added built-in support for ULID format [\go-swagger#3023](go-swagger#3023) ([fredbi](https://github.com/fredbi))
- fix\(faq\): updating doc to get swagger UI [\go-swagger#3022](go-swagger#3022) ([souradeepmajumdar05](https://github.com/souradeepmajumdar05))
- fix\(codegen\): fixed panic on invalid parameters in spec [\go-swagger#3021](go-swagger#3021) ([fredbi](https://github.com/fredbi))
- fix\(flatten\): fixed code generation with circular $ref AND expand option [\go-swagger#3020](go-swagger#3020) ([fredbi](https://github.com/fredbi))
- fix\(client\): alleviates issues with pointers in error reporting [\go-swagger#3019](go-swagger#3019) ([fredbi](https://github.com/fredbi))
- chore\(ci\): linter & ci configuration [\go-swagger#3018](go-swagger#3018) ([fredbi](https://github.com/fredbi))
- Use mockery V2 argument style [\go-swagger#3017](go-swagger#3017) ([fredbi](https://github.com/fredbi))
- fix\(codegen\): invalid token reference when referencing an extension [\go-swagger#3016](go-swagger#3016) ([fredbi](https://github.com/fredbi))
- fix\(flatten\): fixed panic in marshal YAML [\go-swagger#3015](go-swagger#3015) ([fredbi](https://github.com/fredbi))
- fix\(flatten\): added option to flatten without transforming names [\go-swagger#3014](go-swagger#3014) ([fredbi](https://github.com/fredbi))
- fix\(diff\): fixed diff status on added required property [\go-swagger#3011](go-swagger#3011) ([fredbi](https://github.com/fredbi))
- Bump golang.org/x/crypto from 0.14.0 to 0.17.0 [\go-swagger#3010](go-swagger#3010) ([dependabot[bot]](https://github.com/apps/dependabot))
- fix\(markdown\): added support for --target flag [\go-swagger#3009](go-swagger#3009) ([fredbi](https://github.com/fredbi))
- Bump golang.org/x/net from 0.10.0 to 0.17.0 [\go-swagger#3008](go-swagger#3008) ([dependabot[bot]](https://github.com/apps/dependabot))
- fix\(yaml\): fixed panic when MarshalYAML returns an error [\go-swagger#3006](go-swagger#3006) ([fredbi](https://github.com/fredbi))
- 3002 enum parse [\go-swagger#3004](go-swagger#3004) ([dimovnike](https://github.com/dimovnike))
- Add missing line from custom server example code [\go-swagger#3001](go-swagger#3001) ([kevinbarbour](https://github.com/kevinbarbour))
- enable misspell linter and fix linters [\go-swagger#2992](go-swagger#2992) ([mmorel-35](https://github.com/mmorel-35))
- use Go standard errors [\go-swagger#2990](go-swagger#2990) ([mmorel-35](https://github.com/mmorel-35))
- fix: 1\) adds supports for Diff to report on changed extension values … [\go-swagger#2986](go-swagger#2986) ([zmay2030](https://github.com/zmay2030))
- fix typo in zsh completion [\go-swagger#2981](go-swagger#2981) ([mehmetumit](https://github.com/mehmetumit))
- Feat: new client constructors wo go-openapi [\go-swagger#2979](go-swagger#2979) ([LukasDeco](https://github.com/LukasDeco))
- Updated to handle cases where 'body' is not present in the YAML file … [\go-swagger#2973](go-swagger#2973) ([Shimizu1111](https://github.com/Shimizu1111))
- Fix default write timeout value from 60s to 30s in Server struct [\go-swagger#2968](go-swagger#2968) ([aiwasaki126](https://github.com/aiwasaki126))
- fix: diff result has no URL, when there is an object type array field… [\go-swagger#2965](go-swagger#2965) ([EarthSoar](https://github.com/EarthSoar))
- Add support for x-go-custom-tag in generated parameter [\go-swagger#2957](go-swagger#2957) ([MAAF72](https://github.com/MAAF72))
- Support type alias when generating spec [\go-swagger#2953](go-swagger#2953) ([invzhi](https://github.com/invzhi))
- Fix typo in codescan/spec.go [\go-swagger#2950](go-swagger#2950) ([ryomak](https://github.com/ryomak))
- Update README.md with projects using go-swagger [\go-swagger#2940](go-swagger#2940) ([tejash-jl](https://github.com/tejash-jl))
- Fixes \go-swagger#2740 - Minimum misspelled [\go-swagger#2787](go-swagger#2787) ([afagundes](https://github.com/afagundes))
- Add details on how to install using go install [\go-swagger#2772](go-swagger#2772) ([vidhill](https://github.com/vidhill))
- Fix \go-swagger#2764 Allow number as field in cli generation [\go-swagger#2766](go-swagger#2766) ([youyuanwu](https://github.com/youyuanwu))

\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant