-
Notifications
You must be signed in to change notification settings - Fork 8.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix typecheck foundations #167060
Fix typecheck foundations #167060
Changes from 15 commits
00c9138
3b25ef5
5bcd214
e1f2044
0c98ae9
5e85fa7
f86af91
0d039ee
39137b3
b58f57b
4dcf341
e54c237
62ce147
db60557
4ef34f1
0ccc66b
a957e48
31e2ccc
d057ecf
f44ea24
7b06b81
57ed7b6
0c66fc0
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
steps: | ||
- command: .buildkite/scripts/steps/check_types.sh | ||
label: 'Check Types' | ||
agents: | ||
queue: n2-16-spot | ||
timeout_in_minutes: 60 | ||
retry: | ||
automatic: | ||
- exit_status: '-1' | ||
limit: 3 |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
steps: | ||
- command: .buildkite/scripts/steps/check_types_commits.sh | ||
label: 'Check Types Commit Diff' | ||
agents: | ||
queue: n2-16-spot | ||
timeout_in_minutes: 60 | ||
retry: | ||
automatic: | ||
- exit_status: '-1' | ||
limit: 3 |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
#!/usr/bin/env bash | ||
|
||
set -euo pipefail | ||
|
||
|
||
if [[ "${CI-}" == "true" ]]; then | ||
.buildkite/scripts/bootstrap.sh | ||
|
||
sha1="${GITHUB_PR_TARGET_BRANCH-}" | ||
sha2="${GITHUB_PR_TRIGGERED_SHA-}" | ||
else | ||
# Script take between 0 and 2 arguments representing two commit SHA's: | ||
# If 0, it will diff HEAD and HEAD^ | ||
# If 1 (SHA1), it will diff SHA1 and SHA1^ | ||
# If 2 (SHA1, SHA2), it will diff SHA1 and SHA2 | ||
sha1="${1-HEAD}" | ||
sha2="${2-$sha1^}" | ||
fi | ||
|
||
uniq_dirs=() | ||
uniq_tsconfigs=() | ||
|
||
echo "Detecting files changed between $sha1 and $sha2..." | ||
|
||
files=($(git diff --name-only $sha1 $sha2)) | ||
|
||
add_dir () { | ||
new_dir=$1 | ||
|
||
if [ ${#uniq_dirs[@]} -gt 0 ]; then | ||
for dir in "${uniq_dirs[@]}" | ||
do | ||
if [[ "$new_dir" == "$dir" ]]; then | ||
return | ||
fi | ||
done | ||
fi | ||
|
||
uniq_dirs+=($new_dir) | ||
} | ||
|
||
add_tsconfig () { | ||
new_tsconfig=$1 | ||
|
||
if [ ${#uniq_tsconfigs[@]} -gt 0 ]; then | ||
for tsconfig in "${uniq_tsconfigs[@]}" | ||
do | ||
if [[ "$new_tsconfig" == "$tsconfig" ]]; then | ||
return | ||
fi | ||
done | ||
fi | ||
|
||
echo " $new_tsconfig" | ||
uniq_tsconfigs+=($new_tsconfig) | ||
} | ||
|
||
contains_tsconfig () { | ||
dir=$1 | ||
tsconfig="$dir/tsconfig.json" | ||
if [ -f "$tsconfig" ]; then | ||
true | ||
else | ||
false | ||
fi | ||
} | ||
|
||
find_tsconfig () { | ||
dir=$1 | ||
|
||
if [[ "$dir" == "." ]]; then | ||
return | ||
fi | ||
|
||
if contains_tsconfig $dir; then | ||
add_tsconfig "$dir/tsconfig.json" | ||
else | ||
find_tsconfig $(dirname -- "$dir") | ||
fi | ||
} | ||
|
||
if [ ${#files[@]} -eq 0 ]; then | ||
echo "No files found!" | ||
exit | ||
fi | ||
|
||
for file in "${files[@]}" | ||
do | ||
dir=$(dirname -- "$file") | ||
|
||
# Ignore buildkite dir because it traverses many kbn packages and emits incorrect results | ||
if [[ "$dir" != .buildkite* ]]; then | ||
add_dir $dir | ||
fi | ||
done | ||
|
||
echo "Looking for related tsconfig.json files..." | ||
|
||
for dir in "${uniq_dirs[@]}" | ||
do | ||
find_tsconfig $dir | ||
done | ||
|
||
if [ ${#uniq_tsconfigs[@]} -eq 0 ]; then | ||
echo "No tsconfig.json files found for changes in $sha1 $sha2" | ||
exit | ||
fi | ||
|
||
echo "Running scripts/type_check for each found tsconfig.json file..." | ||
|
||
for tsconfig in "${uniq_tsconfigs[@]}" | ||
do | ||
node scripts/type_check --project $tsconfig | ||
done |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -87,19 +87,26 @@ export function startProc(name: string, options: ProcOptions, log: ToolingLog) { | |
|
||
const outcome$: Rx.Observable<number | null> = Rx.race( | ||
// observe first exit event | ||
Rx.fromEvent<[number]>(childProcess, 'exit').pipe( | ||
Rx.fromEvent<[number, string]>(childProcess, 'exit').pipe( | ||
take(1), | ||
map(([code]) => { | ||
map(([code, signal]) => { | ||
if (stopCalled) { | ||
return null; | ||
} | ||
// JVM exits with 143 on SIGTERM and 130 on SIGINT, dont' treat then as errors | ||
|
||
// JVM exits with 143 on SIGTERM and 130 on SIGINT, don't treat them as errors | ||
if (code > 0 && !(code === 143 || code === 130)) { | ||
throw createFailError(`[${name}] exited with code ${code}`, { | ||
exitCode: code, | ||
}); | ||
} | ||
|
||
// A stop signal of SIGABRT indicates a self-inflicted app crash, | ||
// then we can't rely on an exit code, because it's not passed | ||
if (signal === 'SIGABRT') { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm not 100% confident we can trust that there will not be other signals that might indicate a crash. We don't have to do that in this PR, but in the future I'd like to simplify this code so that it just listens for the rejected promise instead of trying to be so clever and possibly missing some things There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fair point, here's a fix: d057ecf |
||
throw createFailError(`[${name}] aborted ${code ? `with code: ${code}` : ''}`); | ||
} | ||
|
||
return code; | ||
}) | ||
), | ||
|
@@ -132,7 +139,7 @@ export function startProc(name: string, options: ProcOptions, log: ToolingLog) { | |
share() | ||
); | ||
|
||
const outcomePromise = Rx.merge(lines$.pipe(ignoreElements()), outcome$).toPromise(); | ||
const outcomePromise = Rx.firstValueFrom(Rx.merge(lines$.pipe(ignoreElements()), outcome$)); | ||
|
||
async function stop(signal: NodeJS.Signals) { | ||
if (stopCalled) { | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -124,6 +124,9 @@ run( | |
'--pretty', | ||
...(flagsReader.boolean('verbose') ? ['--verbose'] : []), | ||
], | ||
env: { | ||
NODE_OPTIONS: '--max-old-space-size=8192', | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎉 |
||
}, | ||
cwd: REPO_ROOT, | ||
wait: true, | ||
}); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why did you rename the script?
For me
test:type_check
would mean run typechecks on the test code, or similar - this is not test-related, but typechecking any code