summaryrefslogtreecommitdiffstats
path: root/build/conf/ts/ts_check.conf
blob: 016a111063f9ea5b6a052bba22b1dfc09766d84a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
_TS_CHECK_SEPARATOR=~~~
_TS_CHECK_LIST=

macro _TS_CHECK(SCRIPT_NAME, IS_MEDIUM, CHECK_TYPE) {
    SET_APPEND(_TS_CHECK_LIST ${_TS_CHECK_SEPARATOR} ${SCRIPT_NAME} ${IS_MEDIUM} ${CHECK_TYPE})
}

macro TS_LINT(SCRIPT_NAME, TIMEOUT_MEDIUM?"yes":"no") {
    _TS_CHECK($SCRIPT_NAME $TIMEOUT_MEDIUM lint)
}

macro TS_TEST(SCRIPT_NAME) {
    _TS_CHECK($SCRIPT_NAME no test)
}

multimodule TS_TEST_FOR {
    module TS_TEST_FOR: _BARE_UNIT {
        .CMD=$TOUCH_UNIT ${hide;kv:"p TS_TST"} ${hide;kv:"pc magenta"}
        # ignore SRCS macro
        .ALIASES=SRCS=_NOOP_MACRO TS_TEST_CONFIG=_FORBID_TS_TEST_CONFIG TS_TEST_SRCS=_FORBID_TS_TEST_SRCS
        # use this parser to get module args in $MODULE_ARGS_RAW
        .ARGS_PARSER=Raw
        # Propagates peers to related modules
        .NODE_TYPE=Bundle
        .PEERDIR_POLICY=as_build_from
        .EPILOGUE=_TS_TEST_FOR_EPILOGUE
        .PEERDIRSELF=TS_PREPARE_DEPS

        SET(MODULE_TAG TS_TEST_FOR)
        SET(MODULE_LANG TS)

        # for multimodule peers we should choose TS
        SET(PEERDIR_TAGS TS TS_PROTO TS_PROTO_FROM_SCHEMA)
        # we read erm-packages.json during configuration, so we have to include it to configuration cache key
        SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS ${ARCADIA_ROOT}/$ERM_PACKAGES_PATH)

        # parse module args
        DISABLE(_ALLOW_REL_FOR_PATH)
        _TS_TEST_FOR_ARGS($MODULE_ARGS_RAW)

        # PEERDIR that reads required version of tool from package.json
        _PEERDIR_TS_RESOURCE(nodejs $PM_TYPE)

        # we don't want to have TS outputs for tests
        DISABLE(TS_CONFIG_DEDUCE_OUT)
    }

    module TS_PREPARE_DEPS: _BARE_UNIT {
        # ignore SRCS macro
        .IGNORED=SRCS
        # use this parser to get module args in $MODULE_ARGS_RAW
        .ARGS_PARSER=Raw
        # Propagates peers to related modules
        .NODE_TYPE=Bundle
        .PEERDIR_POLICY=as_build_from

        # .fake tells builder to not materialize it in results
        SET(MODULE_SUFFIX .test_for.prepare_deps.fake)
        # lang makrup for statistics
        SET(MODULE_LANG TS)
        # what modules it can PEERDIR to
        SET(PEERDIR_TAGS TS_PREPARE_DEPS)
        # do not include it into "results" of graph
        DISABLE(START_TARGET)
        # parse module args
        DISABLE(_ALLOW_REL_FOR_PATH)
        _TS_TEST_FOR_ARGS($MODULE_ARGS_RAW)
        _TS_CHECK_PREPARE_DEPS_CONFIGURE()
    }
}

macro _TS_TEST_FOR_EPILOGUE() {
    _SET_TS_TEST_FOR_INPUTS()
    _DEPENDS_ON_MOD()
    _TS_CHECK_CONFIGURE(TS_TEST_FOR)
}

# tag:internal
macro _SET_TS_TEST_FOR_INPUTS() {
    _SET_PREFIX(_SET_TS_INPUTS_BASE_EXCLUDES_FOR_TEST ${_FOR_MOD_PATH}/ $_SET_TS_INPUTS_BASE_EXCLUDES)
    _GLOB(_TS_GLOB_FILES ${_FOR_MOD_PATH}/**/* EXCLUDE ${_SET_TS_INPUTS_BASE_EXCLUDES_FOR_TEST} RESTRICTIONS MAX_MATCHES 10000 MAX_WATCH_DIRS 5000 SKIPPED_MIN_MATCHES 2000 SKIPPED_ERROR_PERCENT 90)
    _ESCAPE_SPACES(_TS_GLOB_FILES)
}

# tag:internal
macro _SET_PREFIX(VAR_NAME, PREFIX, ITEMS...) {
    SET($VAR_NAME ${pre=$PREFIX:ITEMS})
}


########################################################

macro _FORBID_TS_TEST_CONFIG(_p...) {
    _L1 = {COLORS.cyan}TS_TEST_FOR{COLORS.reset} does not support {COLORS.cyan}TS_TEST_CONFIG{COLORS.reset} macro.
    _L2 = Set proper config path in test script in {COLORS.cyan}package.json{COLORS.reset}
    _TS_CONF_ERROR(\n$_L1\n$_L2)
}

macro _FORBID_TS_TEST_SRCS(_p...) {
    _L1 = {COLORS.cyan}TS_TEST_FOR{COLORS.reset} does not require {COLORS.cyan}TS_TEST_SRCS{COLORS.reset} macro.
    _L2 = Remove {COLORS.cyan}TS_TEST_SRCS(){COLORS.reset} from ya.make
    _TS_CONF_ERROR(\n$_L1\n$_L2)
}