diff --git a/packages/aws-cdk/test/integ/init/test-typescript.sh b/packages/aws-cdk/test/integ/init/test-typescript.sh index 14fa77d4463dd..8292ff3540f2c 100755 --- a/packages/aws-cdk/test/integ/init/test-typescript.sh +++ b/packages/aws-cdk/test/integ/init/test-typescript.sh @@ -4,6 +4,7 @@ #------------------------------------------------------------------ set -eu scriptdir=$(cd $(dirname $0) && pwd) +integdir=$(dirname $scriptdir) source ${scriptdir}/common.bash header TypeScript @@ -16,18 +17,24 @@ else templates="$@" fi +MIN_SUPPORTED_TS_VERSION="3.9" +SUPPORTED_TS_VERSIONS=$(node ${integdir}/typescript-versions.js listTypeScriptVersions ${MIN_SUPPORTED_TS_VERSION}) + for template in $templates; do - echo "Trying TypeScript template $template" + for version in $SUPPORTED_TS_VERSIONS; do + echo "Trying TypeScript template $template with TS$version" - setup + setup - cdk init -l typescript $template - npm prune && npm ls # this will fail if we have unmet peer dependencies - npm run build - npm run test + cdk init -l typescript $template + npm install --save typescript@$version + npm prune && npm ls # this will fail if we have unmet peer dependencies + npm run build + npm run test - # Can't run `cdk synth` on libraries - if [[ $template != "lib" ]]; then - cdk synth - fi + # Can't run `cdk synth` on libraries + if [[ $template != "lib" ]]; then + cdk synth + fi + done done diff --git a/packages/aws-cdk/test/integ/typescript-versions.ts b/packages/aws-cdk/test/integ/typescript-versions.ts new file mode 100644 index 0000000000000..dbf82f6756258 --- /dev/null +++ b/packages/aws-cdk/test/integ/typescript-versions.ts @@ -0,0 +1,15 @@ +import { spawnSync } from 'child_process'; + +module.exports.listTypeScriptVersions = async function(minSupportedVersion: string) { + const { stdout } = spawnSync('npm', ['--silent', 'view', `typescript@>=${minSupportedVersion}`, 'version', '--json']); + + const versions: string[] = JSON.parse(stdout); + const minorVersions = Array.from(new Set(versions.map(v => v.split('.').slice(0, 2).join('.')))); + + return minorVersions.join(' '); +}; + +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('make-runnable/custom')({ + printOutputFrame: false, +});