build(ngc): run integration test hermetically
This ensures we run in a clean directory, using our real distribution. It finds bugs like @internal APIs needed to type-check in the offline compiler, as well as problems in package.json. Also move tsc-wrapped under tools/@angular
This commit is contained in:
parent
c6064a30a1
commit
3331321f64
2
build.sh
2
build.sh
@ -35,7 +35,7 @@ cd -
|
|||||||
TSCONFIG=./modules/tsconfig.json
|
TSCONFIG=./modules/tsconfig.json
|
||||||
echo "====== (all)COMPILING: \$(npm bin)/tsc -p ${TSCONFIG} ====="
|
echo "====== (all)COMPILING: \$(npm bin)/tsc -p ${TSCONFIG} ====="
|
||||||
# compile ts code
|
# compile ts code
|
||||||
TSC="node dist/tools/tsc-wrapped/src/main"
|
TSC="node dist/tools/@angular/tsc-wrapped/src/main"
|
||||||
$TSC -p modules/tsconfig.json
|
$TSC -p modules/tsconfig.json
|
||||||
|
|
||||||
rm -rf ./dist/packages-dist
|
rm -rf ./dist/packages-dist
|
||||||
|
@ -52,7 +52,6 @@ module.exports = function(config) {
|
|||||||
'karma-sauce-launcher',
|
'karma-sauce-launcher',
|
||||||
'karma-chrome-launcher',
|
'karma-chrome-launcher',
|
||||||
'karma-sourcemap-loader',
|
'karma-sourcemap-loader',
|
||||||
'karma-dart',
|
|
||||||
internalAngularReporter
|
internalAngularReporter
|
||||||
],
|
],
|
||||||
|
|
||||||
|
@ -78,18 +78,16 @@ At a high level, this program
|
|||||||
- these `.ts` files are written to the `genDir` path, then compiled together with the application.
|
- these `.ts` files are written to the `genDir` path, then compiled together with the application.
|
||||||
|
|
||||||
## For developers
|
## For developers
|
||||||
Run the compiler from source:
|
|
||||||
```
|
```
|
||||||
# Build angular2 and the compiler
|
# Build angular2 and the compiler
|
||||||
./node_modules/.bin/tsc -p modules
|
./build.sh
|
||||||
# Run it on the test project
|
# Run the test once
|
||||||
$ ./modules/@angular/compiler_cli./integrationtest.sh
|
# (First edit the LINKABLE_PKGS to use npm link instead of npm install)
|
||||||
```
|
$ ./scripts/ci-lite/offline_compiler_test.sh
|
||||||
|
# Keep a package fresh in watch mode
|
||||||
Release:
|
./node_modules/.bin/tsc -p modules/@angular/compiler/tsconfig-es5.json -w
|
||||||
```
|
# Iterate on the test
|
||||||
$ ./modules/@angular/compiler_cli./integrationtest.sh
|
cd /tmp/wherever/e2e_test.1464388257/
|
||||||
$ cp modules/@angular/compiler_cli/README.md modules/@angular/compiler_cli/package.json dist/all/@angular/compiler_cli
|
./node_modules/.bin/ngc
|
||||||
# npm login as angular
|
./node_modules/.bin/jasmine test/*_spec.js
|
||||||
$ npm publish dist/all/@angular/compiler_cli --access=public
|
|
||||||
```
|
```
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
export {CodeGenerator} from './src/codegen';
|
export {CodeGenerator} from './src/codegen';
|
||||||
export {NodeReflectorHost} from './src/reflector_host';
|
export {NodeReflectorHost} from './src/reflector_host';
|
||||||
export * from 'tsc-wrapped';
|
export * from '@angular/tsc-wrapped';
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -e -o pipefail
|
|
||||||
|
|
||||||
cd $(dirname $0)
|
|
||||||
cd $(pwd)/../../..
|
|
||||||
export NODE_PATH=$NODE_PATH:$(pwd)/dist/all:$(pwd)/dist/tools
|
|
||||||
readonly TESTDIR="@angular/compiler_cli/integrationtest"
|
|
||||||
rm -f modules/$TESTDIR/src/*.{ngfactory,css.shim}.ts
|
|
||||||
node dist/all/@angular/compiler_cli/src/main -p modules/$TESTDIR
|
|
||||||
node dist/tools/cjs-jasmine -- $TESTDIR/**/*_spec.js
|
|
@ -1,3 +1,11 @@
|
|||||||
|
// Only needed to satisfy the check in core/src/util/decorators.ts
|
||||||
|
// TODO(alexeagle): maybe remove that check?
|
||||||
|
require('reflect-metadata');
|
||||||
|
|
||||||
|
require('@angular/platform-server/src/parse5_adapter.js').Parse5DomAdapter.makeCurrent();
|
||||||
|
require('zone.js/dist/zone-node.js');
|
||||||
|
require('zone.js/dist/long-stack-trace-zone.js');
|
||||||
|
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import {BasicNgFactory} from '../src/basic.ngfactory';
|
import {BasicNgFactory} from '../src/basic.ngfactory';
|
||||||
@ -6,7 +14,7 @@ import {ReflectiveInjector, DebugElement, getDebugNode} from '@angular/core';
|
|||||||
import {browserPlatform, BROWSER_APP_PROVIDERS} from '@angular/platform-browser';
|
import {browserPlatform, BROWSER_APP_PROVIDERS} from '@angular/platform-browser';
|
||||||
|
|
||||||
describe("template codegen output", () => {
|
describe("template codegen output", () => {
|
||||||
const outDir = path.join('dist', 'all', '@angular', 'compiler_cli', 'integrationtest', 'src');
|
const outDir = 'src';
|
||||||
|
|
||||||
it("should lower Decorators without reflect-metadata", () => {
|
it("should lower Decorators without reflect-metadata", () => {
|
||||||
const jsOutput = path.join(outDir, 'basic.js');
|
const jsOutput = path.join(outDir, 'basic.js');
|
||||||
|
@ -2,8 +2,7 @@
|
|||||||
"angularCompilerOptions": {
|
"angularCompilerOptions": {
|
||||||
// For TypeScript 1.8, we have to lay out generated files
|
// For TypeScript 1.8, we have to lay out generated files
|
||||||
// in the same source directory with your code.
|
// in the same source directory with your code.
|
||||||
"genDir": ".",
|
"genDir": "."
|
||||||
"legacyPackageLayout": false
|
|
||||||
},
|
},
|
||||||
|
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
@ -11,13 +10,9 @@
|
|||||||
"experimentalDecorators": true,
|
"experimentalDecorators": true,
|
||||||
"noImplicitAny": true,
|
"noImplicitAny": true,
|
||||||
"moduleResolution": "node",
|
"moduleResolution": "node",
|
||||||
"outDir": "../../../../dist/all/@angular/compiler_cli/integrationtest",
|
|
||||||
"rootDir": "",
|
"rootDir": "",
|
||||||
"declaration": true,
|
"declaration": true,
|
||||||
"lib": ["es6", "dom"],
|
"lib": ["es6", "dom"],
|
||||||
"baseUrl": ".",
|
"baseUrl": "."
|
||||||
"paths": {
|
|
||||||
"@angular/*": ["../../../../dist/all/@angular/*"]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
/// <reference path="../../../../node_modules/@types/node/index.d.ts" />
|
|
||||||
/// <reference path="../../../../node_modules/@types/jasmine/index.d.ts" />
|
|
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import * as ts from 'typescript';
|
import * as ts from 'typescript';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import {AngularCompilerOptions} from 'tsc-wrapped';
|
import {AngularCompilerOptions} from '@angular/tsc-wrapped';
|
||||||
|
|
||||||
import * as compiler from '@angular/compiler';
|
import * as compiler from '@angular/compiler';
|
||||||
import {ViewEncapsulation} from '@angular/core';
|
import {ViewEncapsulation} from '@angular/core';
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
import 'reflect-metadata';
|
import 'reflect-metadata';
|
||||||
|
|
||||||
import * as ts from 'typescript';
|
import * as ts from 'typescript';
|
||||||
import * as tsc from 'tsc-wrapped';
|
import * as tsc from '@angular/tsc-wrapped';
|
||||||
|
|
||||||
import {CodeGenerator} from './codegen';
|
import {CodeGenerator} from './codegen';
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import {StaticReflectorHost, StaticSymbol} from './static_reflector';
|
import {StaticReflectorHost, StaticSymbol} from './static_reflector';
|
||||||
import * as ts from 'typescript';
|
import * as ts from 'typescript';
|
||||||
import {AngularCompilerOptions, MetadataCollector, ModuleMetadata} from 'tsc-wrapped';
|
import {AngularCompilerOptions, MetadataCollector, ModuleMetadata} from '@angular/tsc-wrapped';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import {ImportGenerator, AssetUrl} from './compiler_private';
|
import {ImportGenerator, AssetUrl} from './compiler_private';
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
"@angular/compiler": ["../../../dist/packages-dist/compiler"],
|
"@angular/compiler": ["../../../dist/packages-dist/compiler"],
|
||||||
"@angular/platform-server": ["../../../dist/packages-dist/platform-server"],
|
"@angular/platform-server": ["../../../dist/packages-dist/platform-server"],
|
||||||
"@angular/platform-browser": ["../../../dist/packages-dist/platform-browser"],
|
"@angular/platform-browser": ["../../../dist/packages-dist/platform-browser"],
|
||||||
"tsc-wrapped": ["../../../dist/tools/tsc-wrapped"]
|
"@angular/tsc-wrapped": ["../../../dist/tools/@angular/tsc-wrapped"]
|
||||||
},
|
},
|
||||||
"experimentalDecorators": true,
|
"experimentalDecorators": true,
|
||||||
"rootDir": ".",
|
"rootDir": ".",
|
||||||
|
@ -434,9 +434,6 @@ export const PLATFORM_CORE_PROVIDERS =
|
|||||||
/* @ts2dart_Provider */ {provide: PlatformRef, useExisting: PlatformRef_})
|
/* @ts2dart_Provider */ {provide: PlatformRef, useExisting: PlatformRef_})
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
|
||||||
* @internal
|
|
||||||
*/
|
|
||||||
export const APPLICATION_CORE_PROVIDERS = /*@ts2dart_const*/[
|
export const APPLICATION_CORE_PROVIDERS = /*@ts2dart_const*/[
|
||||||
/* @ts2dart_Provider */ {provide: NgZone, useFactory: createNgZone, deps: []},
|
/* @ts2dart_Provider */ {provide: NgZone, useFactory: createNgZone, deps: []},
|
||||||
ApplicationRef_,
|
ApplicationRef_,
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
"selenium-webdriver": ["../node_modules/@types/selenium-webdriver/index.d.ts"],
|
"selenium-webdriver": ["../node_modules/@types/selenium-webdriver/index.d.ts"],
|
||||||
"rxjs/*": ["../node_modules/rxjs/*"],
|
"rxjs/*": ["../node_modules/rxjs/*"],
|
||||||
"@angular/*": ["./@angular/*"],
|
"@angular/*": ["./@angular/*"],
|
||||||
"tsc-wrapped": ["../dist/tools/tsc-wrapped"]
|
"@angular/tsc-wrapped": ["../dist/tools/@angular/tsc-wrapped"]
|
||||||
},
|
},
|
||||||
"rootDir": ".",
|
"rootDir": ".",
|
||||||
"inlineSourceMap": true,
|
"inlineSourceMap": true,
|
||||||
|
@ -9,11 +9,8 @@ cd `dirname $0`
|
|||||||
source ./env.sh
|
source ./env.sh
|
||||||
cd ../..
|
cd ../..
|
||||||
|
|
||||||
$(npm bin)/tsc -p ./tools/tsconfig.json
|
$(npm bin)/tsc -p tools
|
||||||
|
cp tools/@angular/tsc-wrapped/package.json dist/tools/@angular/tsc-wrapped
|
||||||
node dist/tools/tsc-wrapped/src/main -p modules/tsconfig.json
|
node dist/tools/@angular/tsc-wrapped/src/main -p modules
|
||||||
|
|
||||||
# Compile the compiler_cli integration tests
|
|
||||||
node dist/all/@angular/compiler_cli/src/main -p modules/@angular/compiler_cli/integrationtest
|
|
||||||
|
|
||||||
echo 'travis_fold:end:BUILD'
|
echo 'travis_fold:end:BUILD'
|
||||||
|
39
scripts/ci-lite/offline_compiler_test.sh
Executable file
39
scripts/ci-lite/offline_compiler_test.sh
Executable file
@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -ex -o pipefail
|
||||||
|
|
||||||
|
# These ones can be `npm link`ed for fast development
|
||||||
|
LINKABLE_PKGS=(
|
||||||
|
$(pwd)/dist/packages-dist/{common,core,compiler,compiler_cli,platform-{browser,server}}
|
||||||
|
$(pwd)/dist/tools/@angular/tsc-wrapped
|
||||||
|
)
|
||||||
|
PKGS=(
|
||||||
|
reflect-metadata
|
||||||
|
typescript@next
|
||||||
|
zone.js
|
||||||
|
rxjs
|
||||||
|
@types/{node,jasmine}
|
||||||
|
jasmine
|
||||||
|
)
|
||||||
|
|
||||||
|
TMPDIR=${TMPDIR:-.}
|
||||||
|
readonly TMP=$TMPDIR/e2e_test.$(date +%s)
|
||||||
|
mkdir -p $TMP
|
||||||
|
cp -R -v modules/@angular/compiler_cli/integrationtest/* $TMP
|
||||||
|
# Try to use the same versions as angular, in particular, this will
|
||||||
|
# cause us to install the same rxjs version.
|
||||||
|
cp -v package.json $TMP
|
||||||
|
|
||||||
|
# run in subshell to avoid polluting cwd
|
||||||
|
(
|
||||||
|
cd $TMP
|
||||||
|
npm install ${PKGS[*]}
|
||||||
|
# TODO(alexeagle): allow this to be npm link instead
|
||||||
|
npm install ${LINKABLE_PKGS[*]}
|
||||||
|
|
||||||
|
# Compile the compiler_cli integration tests
|
||||||
|
./node_modules/.bin/ngc
|
||||||
|
|
||||||
|
./node_modules/.bin/jasmine init
|
||||||
|
# Run compiler_cli integration tests in node
|
||||||
|
./node_modules/.bin/jasmine test/*_spec.js
|
||||||
|
)
|
@ -22,6 +22,8 @@ echo 'travis_fold:start:test.buildPackages'
|
|||||||
echo 'travis_fold:end:test.buildPackages'
|
echo 'travis_fold:end:test.buildPackages'
|
||||||
|
|
||||||
|
|
||||||
|
./scripts/ci-lite/offline_compiler_test.sh
|
||||||
|
|
||||||
echo 'travis_fold:start:test.e2e.localChrome'
|
echo 'travis_fold:start:test.e2e.localChrome'
|
||||||
cd dist/
|
cd dist/
|
||||||
$(npm bin)/gulp serve &
|
$(npm bin)/gulp serve &
|
||||||
|
@ -31,18 +31,11 @@ node ./dist/tools/tsc-watch/ node runCmdsOnly
|
|||||||
echo 'travis_fold:end:test.unit.node'
|
echo 'travis_fold:end:test.unit.node'
|
||||||
|
|
||||||
|
|
||||||
echo 'travis_fold:start:test.compiler_cli.node'
|
|
||||||
|
|
||||||
# Run compiler_cli integration tests in node
|
|
||||||
node dist/tools/cjs-jasmine -- @angular/compiler_cli/integrationtest/**/*_spec.js
|
|
||||||
|
|
||||||
echo 'travis_fold:end:test.compiler_cli.node'
|
|
||||||
|
|
||||||
# rebuild since codegen has overwritten some files.
|
|
||||||
node dist/all/@angular/compiler_cli/src/main -p modules/tsconfig.json
|
|
||||||
|
|
||||||
echo 'travis_fold:start:test.unit.localChrome'
|
echo 'travis_fold:start:test.unit.localChrome'
|
||||||
|
|
||||||
|
# rebuild to codegen files in @angular/compiler/test
|
||||||
|
node dist/all/@angular/compiler_cli/src/main -p modules/tsconfig.json
|
||||||
|
|
||||||
# Run unit tests in local chrome
|
# Run unit tests in local chrome
|
||||||
if [[ ${TRAVIS} ]]; then
|
if [[ ${TRAVIS} ]]; then
|
||||||
sh -e /etc/init.d/xvfb start
|
sh -e /etc/init.d/xvfb start
|
||||||
|
@ -24,7 +24,7 @@ emit.
|
|||||||
## Releasing
|
## Releasing
|
||||||
```
|
```
|
||||||
$ $(npm bin)/tsc -p tools
|
$ $(npm bin)/tsc -p tools
|
||||||
$ cp tools/tsc-wrapped/package.json dist/tools/tsc-wrapped/
|
$ cp tools/tsc-wrapped/package.json dist/tools/@angular/tsc-wrapped/
|
||||||
$ npm login [angular]
|
$ npm login [angular]
|
||||||
$ npm publish dist/tools/tsc-wrapped
|
$ npm publish dist/tools/@angular/tsc-wrapped
|
||||||
```
|
```
|
@ -3,7 +3,7 @@ import fse = require('fs-extra');
|
|||||||
import path = require('path');
|
import path = require('path');
|
||||||
import * as ts from 'typescript';
|
import * as ts from 'typescript';
|
||||||
import {wrapDiffingPlugin, DiffingBroccoliPlugin, DiffResult} from './diffing-broccoli-plugin';
|
import {wrapDiffingPlugin, DiffingBroccoliPlugin, DiffResult} from './diffing-broccoli-plugin';
|
||||||
import {MetadataCollector} from '../tsc-wrapped';
|
import {MetadataCollector} from '../@angular/tsc-wrapped';
|
||||||
|
|
||||||
type FileRegistry = ts.Map<{version: number}>;
|
type FileRegistry = ts.Map<{version: number}>;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user