Skip to content

Commit 51246c5

Browse files
feat(builder): swap angular builder based on the angular version (#22)
Co-authored-by: Lars Gyrup Brink Nielsen <[email protected]>
1 parent 7e2eb4c commit 51246c5

31 files changed

+1293
-62
lines changed

.eslintrc.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
"@typescript-eslint/no-unnecessary-type-assertion": "error",
4141
"@typescript-eslint/no-useless-constructor": "error",
4242
"@typescript-eslint/no-var-requires": "error",
43-
"@typescript-eslint/prefer-for-of": "warn",
43+
"@typescript-eslint/prefer-for-of": "off",
4444
"@typescript-eslint/prefer-function-type": "warn",
4545
"@typescript-eslint/prefer-includes": "error",
4646
"@typescript-eslint/prefer-string-starts-ends-with": "error",
@@ -50,7 +50,8 @@
5050
"semi": "off",
5151
"@typescript-eslint/semi": "off",
5252
"@typescript-eslint/type-annotation-spacing": "error",
53-
"@typescript-eslint/unbound-method": "error"
53+
"@typescript-eslint/unbound-method": "error",
54+
"github/array-foreach": "off"
5455
},
5556
"env": {
5657
"node": true,

.github/ISSUE_TEMPLATE/bug_report.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ ISSUES MISSING IMPORTANT INFORMATION MAY BE CLOSED WITHOUT INVESTIGATION.
3636

3737
- angular-versions-action version: X.Y.Z (or vX)
3838
- Input variable angular-version: M.N.x
39-
- Input variable file-path: X.Y.Z
39+
- Input variable root-path: ./some/folder
4040
<!-- Check whether this is still an issue in the most recent Angular version -->
4141

4242
## Additional context

.github/workflows/ci.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,4 @@ jobs:
3131
- uses: ./
3232
with:
3333
angular-version: 8.0.x
34+
root-path: ./e2e

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
This GitHub Action (written in JavaScript) modifies the root `package.json` of a project and replaces the version of all **Angular** related dependencies for given base version.
44

5+
When necessary it updates the angular.json to use the correct builder.
6+
57
[![ngworker](https://img.shields.io/badge/ngworker-%40-red)](https://github.com/ngworker/)
68

79
## Usage
@@ -13,6 +15,7 @@ Create a workflow `.yml` file in your repositories `.github/workflows` directory
1315
### Inputs
1416

1517
- `angular-version`: The base Angular version used to match the dependency version. Ex: 8.0.x, 10.0.x. To check the full list of supported versions, see [supported versions](###Supported-Angular-versions).
18+
- `root-path`: The path to the root folder of the project where the `package.json` and `angular.json` files are located. Defaults to `./`.
1619

1720
### Example workflow - match Angular versions
1821

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import {AngularJson} from '../../src/types/angular-json';
2+
3+
export const lumberjack10_1AndUpNgPackagrBuilderAngularJson: AngularJson = {
4+
projects: {
5+
'lumberjack-app': {
6+
projectType: 'application',
7+
architect: {
8+
build: {
9+
builder: '@angular-devkit/build-angular:browser'
10+
},
11+
serve: {
12+
builder: '@angular-devkit/build-angular:dev-server'
13+
},
14+
'extract-i18n': {
15+
builder: '@angular-devkit/build-angular:extract-i18n'
16+
}
17+
}
18+
},
19+
'ngworker-lumberjack': {
20+
projectType: 'library',
21+
architect: {
22+
buildLib: {
23+
builder: '@angular-devkit/build-angular:ng-packagr'
24+
},
25+
test: {
26+
builder: '@angular-builders/jest:run'
27+
},
28+
lint: {
29+
builder: '@angular-devkit/build-angular:tslint'
30+
}
31+
}
32+
},
33+
'internal-test-util': {
34+
projectType: 'library',
35+
architect: {
36+
build: {
37+
builder: '@angular-devkit/build-angular:ng-packagr'
38+
},
39+
test: {
40+
builder: '@angular-builders/jest:run'
41+
},
42+
lint: {
43+
builder: '@angular-devkit/build-angular:tslint'
44+
}
45+
}
46+
},
47+
'internal-console-driver-test-util': {
48+
projectType: 'library',
49+
architect: {
50+
test: {
51+
builder: '@angular-builders/jest:run'
52+
},
53+
lint: {
54+
builder: '@angular-devkit/build-angular:tslint'
55+
}
56+
}
57+
}
58+
}
59+
};
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import {AngularJson} from '../../src/types/angular-json';
2+
3+
export const lumberjackPreAngular10_1NgPackagrBuilderAngularJson: AngularJson = {
4+
projects: {
5+
'lumberjack-app': {
6+
projectType: 'application',
7+
architect: {
8+
build: {
9+
builder: '@angular-devkit/build-angular:browser'
10+
},
11+
serve: {
12+
builder: '@angular-devkit/build-angular:dev-server'
13+
},
14+
'extract-i18n': {
15+
builder: '@angular-devkit/build-angular:extract-i18n'
16+
}
17+
}
18+
},
19+
'ngworker-lumberjack': {
20+
projectType: 'library',
21+
architect: {
22+
buildLib: {
23+
builder: '@angular-devkit/build-ng-packagr:build'
24+
},
25+
test: {
26+
builder: '@angular-builders/jest:run'
27+
},
28+
lint: {
29+
builder: '@angular-devkit/build-angular:tslint'
30+
}
31+
}
32+
},
33+
'internal-test-util': {
34+
projectType: 'library',
35+
architect: {
36+
build: {
37+
builder: '@angular-devkit/build-ng-packagr:build'
38+
},
39+
test: {
40+
builder: '@angular-builders/jest:run'
41+
},
42+
lint: {
43+
builder: '@angular-devkit/build-angular:tslint'
44+
}
45+
}
46+
},
47+
'internal-console-driver-test-util': {
48+
projectType: 'library',
49+
architect: {
50+
test: {
51+
builder: '@angular-builders/jest:run'
52+
},
53+
lint: {
54+
builder: '@angular-devkit/build-angular:tslint'
55+
}
56+
}
57+
}
58+
}
59+
};
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import {AngularJson} from '../../src/types/angular-json';
2+
3+
export const lumberjackWithBothNgPackagrBuildersAngularJson: AngularJson = {
4+
projects: {
5+
'lumberjack-app': {
6+
projectType: 'application',
7+
architect: {
8+
build: {
9+
builder: '@angular-devkit/build-angular:browser'
10+
},
11+
serve: {
12+
builder: '@angular-devkit/build-angular:dev-server'
13+
},
14+
'extract-i18n': {
15+
builder: '@angular-devkit/build-angular:extract-i18n'
16+
}
17+
}
18+
},
19+
'ngworker-lumberjack': {
20+
projectType: 'library',
21+
architect: {
22+
buildLib: {
23+
builder: '@angular-devkit/build-ng-packagr:build'
24+
},
25+
test: {
26+
builder: '@angular-builders/jest:run'
27+
},
28+
lint: {
29+
builder: '@angular-devkit/build-angular:tslint'
30+
}
31+
}
32+
},
33+
'internal-test-util': {
34+
projectType: 'library',
35+
architect: {
36+
build: {
37+
builder: '@angular-devkit/build-angular:ng-packagr'
38+
},
39+
test: {
40+
builder: '@angular-builders/jest:run'
41+
},
42+
lint: {
43+
builder: '@angular-devkit/build-angular:tslint'
44+
}
45+
}
46+
},
47+
'internal-console-driver-test-util': {
48+
projectType: 'library',
49+
architect: {
50+
test: {
51+
builder: '@angular-builders/jest:run'
52+
},
53+
lint: {
54+
builder: '@angular-devkit/build-angular:tslint'
55+
}
56+
}
57+
}
58+
}
59+
};
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import {AngularJson} from '../../src/types/angular-json';
2+
3+
export const regularAngular10_1AndUpNgPackagrBuilderAngularJson: AngularJson = {
4+
projects: {
5+
'angular-lib': {
6+
projectType: 'library',
7+
architect: {
8+
build: {
9+
builder: '@angular-devkit/build-angular:ng-packagr'
10+
},
11+
test: {
12+
builder: '@angular-devkit/build-angular:karma'
13+
},
14+
lint: {
15+
builder: '@angular-devkit/build-angular:tslint'
16+
}
17+
}
18+
},
19+
app: {
20+
projectType: 'application',
21+
architect: {
22+
build: {
23+
builder: '@angular-devkit/build-angular:browser'
24+
},
25+
serve: {
26+
builder: '@angular-devkit/build-angular:dev-server'
27+
},
28+
'extract-i18n': {
29+
builder: '@angular-devkit/build-angular:extract-i18n'
30+
},
31+
test: {
32+
builder: '@angular-devkit/build-angular:karma'
33+
},
34+
lint: {
35+
builder: '@angular-devkit/build-angular:tslint'
36+
},
37+
e2e: {
38+
builder: '@angular-devkit/build-angular:protractor'
39+
}
40+
}
41+
}
42+
}
43+
};
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import {AngularJson} from '../../src/types/angular-json';
2+
3+
export const regularPreAngular10_1NgPackagrBuilderAngularJson: AngularJson = {
4+
projects: {
5+
'angular-lib': {
6+
projectType: 'library',
7+
architect: {
8+
build: {
9+
builder: '@angular-devkit/build-ng-packagr:build'
10+
},
11+
test: {
12+
builder: '@angular-devkit/build-angular:karma'
13+
},
14+
lint: {
15+
builder: '@angular-devkit/build-angular:tslint'
16+
}
17+
}
18+
},
19+
app: {
20+
projectType: 'application',
21+
architect: {
22+
build: {
23+
builder: '@angular-devkit/build-angular:browser'
24+
},
25+
serve: {
26+
builder: '@angular-devkit/build-angular:dev-server'
27+
},
28+
'extract-i18n': {
29+
builder: '@angular-devkit/build-angular:extract-i18n'
30+
},
31+
test: {
32+
builder: '@angular-devkit/build-angular:karma'
33+
},
34+
lint: {
35+
builder: '@angular-devkit/build-angular:tslint'
36+
},
37+
e2e: {
38+
builder: '@angular-devkit/build-angular:protractor'
39+
}
40+
}
41+
}
42+
}
43+
};
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import {angularVersionComparer} from '../src/angular-version-comparer';
2+
import {AngularVersion} from '../src/types/angular-version';
3+
4+
const angularVersions: AngularVersion[] = [
5+
'6.0.x',
6+
'6.1.x',
7+
'7.0.x',
8+
'7.1.x',
9+
'7.2.x',
10+
'8.0.x',
11+
'8.1.x',
12+
'8.2.x',
13+
'9.0.x',
14+
'9.1.x',
15+
'10.0.x',
16+
'10.1.x',
17+
'10.2.x',
18+
'11.0.x',
19+
'11.1.x',
20+
'11.2.x'
21+
];
22+
23+
describe('the angular version comparer', () => {
24+
angularVersions.forEach(version => {
25+
test('should return 0 when version are equal', () => {
26+
const actual = angularVersionComparer(version, version);
27+
28+
expect(actual).toBe(0);
29+
});
30+
});
31+
32+
describe('when the major versions are different', () => {
33+
test('should return a positive number when the first angular major version is newest than the second', () => {
34+
expect(angularVersionComparer('7.0.x', '6.0.x')).toBeGreaterThan(0);
35+
expect(angularVersionComparer('9.0.x', '7.0.x')).toBeGreaterThan(0);
36+
expect(angularVersionComparer('11.0.x', '9.0.x')).toBeGreaterThan(0);
37+
});
38+
39+
test('should return a negative number when the first angular major version is older than the second', () => {
40+
expect(angularVersionComparer('6.0.x', '7.0.x')).toBeLessThan(0);
41+
expect(angularVersionComparer('7.0.x', '9.0.x')).toBeLessThan(0);
42+
expect(angularVersionComparer('9.0.x', '11.0.x')).toBeLessThan(0);
43+
});
44+
});
45+
46+
describe('when the major versions are equal', () => {
47+
test('should return a positive number when the first angular minor version is newest than the second', () => {
48+
expect(angularVersionComparer('7.1.x', '7.0.x')).toBeGreaterThan(0);
49+
expect(angularVersionComparer('9.12.x', '9.0.x')).toBeGreaterThan(0);
50+
expect(angularVersionComparer('11.5.x', '11.0.x')).toBeGreaterThan(0);
51+
});
52+
53+
test('should return a negative number when the first angular minor version is older than the second', () => {
54+
expect(angularVersionComparer('7.0.x', '7.1.x')).toBeLessThan(0);
55+
expect(angularVersionComparer('9.0.x', '9.12.x')).toBeLessThan(0);
56+
expect(angularVersionComparer('11.0.x', '11.5.x')).toBeLessThan(0);
57+
});
58+
});
59+
});

0 commit comments

Comments
 (0)