forked from elastic/kibana
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Security Solution] Initial migration of API endpoints to OpenAPI and…
… code generation (elastic#164482) **Part of: elastic/security-team#6726 ## Summary Migrates the prebuilt rules and timelines status API route schema to OpenAPI. This is exploratory work to assess the level of effort required to migrate API route schemas from `io-ts` to `zod` generated by OpenAPI codegen. **Summary of the changes:** - Added a CI job that runs code generation in Security Solution and comments change if there are any. - Migrated the `/api/detection_engine/rules/prepackaged/_status` route to use generated `zod` schemas - Updated schema tests - Adjusted the code generator templates to handle `strict` schemas, i.e., schemas that do not allow any extra params - Updated the error transformation code to work with zod errors. Validation errors are converted to string representations, like the following: <img width="627" alt="image" src="https://github.com/elastic/kibana/assets/1938181/93002573-972f-42e1-901d-01a19937f568">
- Loading branch information
Showing
12 changed files
with
159 additions
and
95 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -31,7 +31,7 @@ check_for_changed_files() { | |
|
||
SHOULD_AUTO_COMMIT_CHANGES="${2:-}" | ||
CUSTOM_FIX_MESSAGE="${3:-}" | ||
GIT_CHANGES="$(git ls-files --modified -- . ':!:.bazelrc')" | ||
GIT_CHANGES="$(git status --porcelain -- . ':!:.bazelrc')" | ||
|
||
if [ "$GIT_CHANGES" ]; then | ||
if ! is_auto_commit_disabled && [[ "$SHOULD_AUTO_COMMIT_CHANGES" == "true" && "${BUILDKITE_PULL_REQUEST:-}" ]]; then | ||
|
@@ -54,7 +54,7 @@ check_for_changed_files() { | |
git config --global user.name kibanamachine | ||
git config --global user.email '[email protected]' | ||
gh pr checkout "${BUILDKITE_PULL_REQUEST}" | ||
git add -u -- . ':!.bazelrc' | ||
git add -A -- . ':!.bazelrc' | ||
|
||
git commit -m "$NEW_COMMIT_MESSAGE" | ||
git push | ||
|
12 changes: 12 additions & 0 deletions
12
.buildkite/scripts/steps/code_generation/security_solution_codegen.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
#!/usr/bin/env bash | ||
|
||
set -euo pipefail | ||
|
||
source .buildkite/scripts/common/util.sh | ||
|
||
.buildkite/scripts/bootstrap.sh | ||
|
||
echo --- Security Solution OpenAPI Code Generation | ||
|
||
(cd x-pack/plugins/security_solution && yarn openapi:generate) | ||
check_for_changed_files "yarn openapi:generate" true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
49 changes: 49 additions & 0 deletions
49
..._prebuilt_rules_and_timelines_status/get_prebuilt_rules_and_timelines_status_route.gen.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the Elastic License | ||
* 2.0; you may not use this file except in compliance with the Elastic License | ||
* 2.0. | ||
*/ | ||
|
||
import { z } from 'zod'; | ||
|
||
/* | ||
* NOTICE: Do not edit this file manually. | ||
* This file is automatically generated by the OpenAPI Generator `yarn openapi:generate`. | ||
*/ | ||
|
||
export type GetPrebuiltRulesAndTimelinesStatusResponse = z.infer< | ||
typeof GetPrebuiltRulesAndTimelinesStatusResponse | ||
>; | ||
export const GetPrebuiltRulesAndTimelinesStatusResponse = z | ||
.object({ | ||
/** | ||
* The total number of custom rules | ||
*/ | ||
rules_custom_installed: z.number().min(0), | ||
/** | ||
* The total number of installed prebuilt rules | ||
*/ | ||
rules_installed: z.number().min(0), | ||
/** | ||
* The total number of available prebuilt rules that are not installed | ||
*/ | ||
rules_not_installed: z.number().min(0), | ||
/** | ||
* The total number of outdated prebuilt rules | ||
*/ | ||
rules_not_updated: z.number().min(0), | ||
/** | ||
* The total number of installed prebuilt timelines | ||
*/ | ||
timelines_installed: z.number().min(0), | ||
/** | ||
* The total number of available prebuilt timelines that are not installed | ||
*/ | ||
timelines_not_installed: z.number().min(0), | ||
/** | ||
* The total number of outdated prebuilt timelines | ||
*/ | ||
timelines_not_updated: z.number().min(0), | ||
}) | ||
.strict(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
25 changes: 0 additions & 25 deletions
25
.../get_prebuilt_rules_and_timelines_status/get_prebuilt_rules_and_timelines_status_route.ts
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
20 changes: 20 additions & 0 deletions
20
x-pack/plugins/security_solution/common/test/zod_helpers.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the Elastic License | ||
* 2.0; you may not use this file except in compliance with the Elastic License | ||
* 2.0. | ||
*/ | ||
|
||
import type { SafeParseError, SafeParseReturnType, SafeParseSuccess } from 'zod'; | ||
|
||
export function expectParseError<Input, Output>( | ||
result: SafeParseReturnType<Input, Output> | ||
): asserts result is SafeParseError<Input> { | ||
expect(result.success).toEqual(false); | ||
} | ||
|
||
export function expectParseSuccess<Input, Output>( | ||
result: SafeParseReturnType<Input, Output> | ||
): asserts result is SafeParseSuccess<Output> { | ||
expect(result.success).toEqual(true); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.