diff --git a/scripts/generate-clients/.gitignore b/scripts/generate-clients/.gitignore index 765a0ca99f962..63a2baf3974b6 100644 --- a/scripts/generate-clients/.gitignore +++ b/scripts/generate-clients/.gitignore @@ -1 +1,2 @@ -.aws-models/ \ No newline at end of file +.aws-models/ +.sdk-codegen/ \ No newline at end of file diff --git a/scripts/generate-clients/code-gen-dir.js b/scripts/generate-clients/code-gen-dir.js index 64bee1ab19722..a6d48780d66e5 100644 --- a/scripts/generate-clients/code-gen-dir.js +++ b/scripts/generate-clients/code-gen-dir.js @@ -15,6 +15,7 @@ const getCodeGenOutputDir = (dir) => const CODE_GEN_PROTOCOL_TESTS_OUTPUT_DIR = getCodeGenOutputDir("protocol-test-codegen"); const CODE_GEN_GENERIC_CLIENT_OUTPUT_DIR = getCodeGenOutputDir("generic-client-test-codegen"); const CODE_GEN_SDK_OUTPUT_DIR = getCodeGenOutputDir("sdk-codegen"); +const TEMP_CODE_GEN_SDK_OUTPUT_DIR = normalize(join(__dirname, ".sdk-codegen")); module.exports = { CODE_GEN_ROOT, @@ -25,4 +26,5 @@ module.exports = { CODE_GEN_GENERIC_CLIENT_OUTPUT_DIR, DEFAULT_CODE_GEN_INPUT_DIR, TEMP_CODE_GEN_INPUT_DIR, + TEMP_CODE_GEN_SDK_OUTPUT_DIR, }; diff --git a/scripts/generate-clients/code-gen.js b/scripts/generate-clients/code-gen.js index eed25153d4275..da0577c9cf878 100644 --- a/scripts/generate-clients/code-gen.js +++ b/scripts/generate-clients/code-gen.js @@ -1,9 +1,15 @@ // @ts-check const { basename, join, relative } = require("path"); -const { emptyDirSync } = require("fs-extra"); +const { copySync, emptyDirSync } = require("fs-extra"); const { copyFileSync } = require("fs"); const { spawnProcess } = require("../utils/spawn-process"); -const { CODE_GEN_ROOT, CODE_GEN_SDK_ROOT, TEMP_CODE_GEN_INPUT_DIR } = require("./code-gen-dir"); +const { + CODE_GEN_ROOT, + CODE_GEN_SDK_ROOT, + CODE_GEN_SDK_OUTPUT_DIR, + TEMP_CODE_GEN_INPUT_DIR, + TEMP_CODE_GEN_SDK_OUTPUT_DIR, +} = require("./code-gen-dir"); const { getModelFilepaths } = require("./get-model-filepaths"); const generateClients = async (models, batchSize) => { @@ -22,7 +28,13 @@ const generateClients = async (models, batchSize) => { copyFileSync(filepath, join(TEMP_CODE_GEN_INPUT_DIR, filename)); } await spawnProcess("./gradlew", options, { cwd: CODE_GEN_ROOT }); + // We're copying generated code to temporary directory as it's cleans + // codegen directory in every run. + // Refs: https://github.com/aws/aws-sdk-js-v3/issues/3321 + copySync(CODE_GEN_SDK_OUTPUT_DIR, TEMP_CODE_GEN_SDK_OUTPUT_DIR); } + copySync(TEMP_CODE_GEN_SDK_OUTPUT_DIR, CODE_GEN_SDK_OUTPUT_DIR); + emptyDirSync(TEMP_CODE_GEN_SDK_OUTPUT_DIR); }; const generateProtocolTests = async () => {