Migraiton: update angular cli & prepare jenkins jobs/docker image

This commit is contained in:
cghislai 2021-02-13 21:53:39 +01:00
parent 90140f6d05
commit 90bf5cfdc5
21 changed files with 9840 additions and 8401 deletions

11
Dockerfile Normal file
View File

@ -0,0 +1,11 @@
FROM docker.valuya.be/apache2:28
RUN a2ensite default \
&& a2enmod rewrite
ADD docker/app-content.conf /etc/apache2/
HEALTHCHECK --interval=10s --timeout=3s \
CMD /check-http-status.sh localhost

16
Jenkinsfile vendored
View File

@ -73,18 +73,18 @@ pipeline {
cd dist/${LANG}/
tar -cvzf ../${ARCHIVE} ./
cd ../..
# Upload archives
curl -v --user $NEXUS_BASIC_AUTH --upload-file dist/${ARCHIVE} \
${PUBLISH_URL}/${PUBLISH_REPO}/com/charlyghislain/charlyghislaindotcom/${ARCHIVE}
# Create .latest 'links' (branch heads) if required
if [ "${BRANCH_NAME}" = "master" ] ; then
export ARCHIVE_LINK="master.${LANG}.latest"
echo "$ARCHIVE" > ./${ARCHIVE_LINK}
curl -v --user $NEXUS_BASIC_AUTH --upload-file ./${ARCHIVE_LINK} \
${PUBLISH_URL}/${PUBLISH_REPO}/com/charlyghislain/charlyghislaindotcom/${ARCHIVE_LINK}
elif [ "${BRANCH_NAME}" = "dev" ] ; then
export ARCHIVE_LINK="dev.${LANG}.latest"
echo "$ARCHIVE" > ./${ARCHIVE_LINK}
@ -98,5 +98,15 @@ pipeline {
}
}
}
stage ("Update cluster state") {
steps {
build job: 'infra/cluster-conf-update', parameters: [
string(name:"STACK", value:"charlyghislaindotcom"),
string(name:"VALUES_FILE", value:"values.yaml"),
string(name:"VALUES_KEY", value:".deployment.imageTag"),
string(name:"VALUES_VALUE", value:"\"${params.NEW_VERSION}\""),
]
}
}
}
}

View File

@ -18,7 +18,6 @@
"main": "src/main.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "src/tsconfig.app.json",
"i18nLocale": "en",
"assets": [
"src/favicon.ico",
"src/assets"
@ -27,14 +26,23 @@
"styles": [
"src/styles.scss"
],
"scripts": []
"scripts": [],
"localize": [
"en"
]
},
"configurations": {
"fr": {
"outputPath": "dist/fr/",
"i18nFile": "src/locale/messages.fr.xlf",
"i18nFormat": "xlf",
"i18nLocale": "fr"
"outputPath": "dist",
"budgets": [
{
"type": "anyComponentStyle",
"maximumWarning": "6kb"
}
],
"localize": [
"fr"
]
},
"production-en": {
"fileReplacements": [
@ -46,15 +54,21 @@
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"outputPath": "dist/en/",
"i18nLocale": "en",
"baseHref": "/en/"
"baseHref": "/en/",
"budgets": [
{
"type": "anyComponentStyle",
"maximumWarning": "6kb"
}
],
"localize": [
"en"
]
},
"production-fr": {
"fileReplacements": [
@ -66,17 +80,20 @@
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"outputPath": "dist/fr/",
"i18nFile": "src/locale/messages.fr.xlf",
"i18nFormat": "xlf",
"i18nLocale": "fr",
"baseHref": "/fr/"
"outputPath": "dist",
"budgets": [
{
"type": "anyComponentStyle",
"maximumWarning": "6kb"
}
],
"localize": [
"fr"
]
}
}
},
@ -132,6 +149,11 @@
]
}
}
},
"i18n": {
"locales": {
"fr": "src/locale/messages.fr.xlf"
}
}
},
"charlyghislaindotcom-e2e": {
@ -165,7 +187,7 @@
"defaultProject": "charlyghislaindotcom",
"schematics": {
"@schematics/angular:component": {
"styleext": "scss"
"style": "scss"
}
}
}

9
docker/app-content.conf Normal file
View File

@ -0,0 +1,9 @@
Options -Indexes -Multiviews
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]
RewriteRule ^(.*)$ /index.html [NC,L]

View File

@ -0,0 +1 @@
folder('charlyghislaindotcom')

View File

@ -0,0 +1,43 @@
multibranchPipelineJob('charlyghislaindotcom/charlyghislaindotcom') {
branchSources {
branchSource {
source {
git {
id('lifeislife_lifeislife-front_repo') // IMPORTANT: use a constant and unique identifier
remote('ssh://git@gitea.charlyghislain.com:2022/cghislai/charlyghislaindotcom.git')
credentialsId('jenkins-jenkins-ssh-key')
traits {
gitBranchDiscovery()
wipeWorkspaceTrait()
}
}
}
strategy {
namedBranchesDifferent {
namedExceptions {
named {
name('master')
props {
suppressAutomaticTriggering()
}
}
}
}
}
}
}
triggers {
periodic(30)
}
orphanedItemStrategy {
discardOldItems {
daysToKeep(7)
}
}
factory {
workflowBranchProjectFactory {
scriptPath('Jenkinsfile')
}
}
}

View File

@ -0,0 +1,96 @@
pipeline {
agent any
parameters {
string(name: 'NEW_PROVIDERS_VERSION', defaultValue: '', description: 'New version, eg: 2020.0.0')
string(name: 'NEXT_PROVIDERS_VERSION', defaultValue: '11.0.1', description: 'Next version')
string(name: 'NEW_KEYCLOAK_IMAGE_TAG', defaultValue: '2-11.0.0', description: 'New image tag')
string(name: 'IMPORTEXPORT_VERSION', defaultValue: '11.0.2', description: 'Import export rest provider version')
string(name: 'PROVIDERS_RELEASE_BRANCH', defaultValue: 'master', description: 'Release branch')
string(name: 'PROVIDERS_DEV_BRANCH', defaultValue: 'dev', description: 'Release branch')
string(name: 'IMAGE_BUILD_BRANCH', defaultValue: 'master', description: 'Image branch to use for build')
string(name: 'CLUSTER_STACK', defaultValue: 'lifeislifedev', description: 'Namespace to use for conf update')
}
options {
disableConcurrentBuilds()
buildDiscarder(logRotator(numToKeepStr: '10'))
}
stages {
stage('Release') {
steps {
buildName "#${BUILD_NUMBER} ${params.NEW_KEYCLOAK_IMAGE_TAG}"
build job: "lifeislife/release-keycloak-itsme-broker", parameters: [
string(name: 'NEW_VERSION', value: "${params.NEW_PROVIDERS_VERSION}"),
string(name: 'RELEASE_BRANCH', value: "${env.PROVIDERS_RELEASE_BRANCH}"),
string(name: 'GIT_REPO_BRANCH', value: "${env.PROVIDERS_DEV_BRANCH}"),
]
build job: "lifeislife/release-keycloak-lifeislife-userstorage", parameters: [
string(name: 'NEW_VERSION', value: "${params.NEW_PROVIDERS_VERSION}"),
string(name: 'RELEASE_BRANCH', value: "${env.PROVIDERS_RELEASE_BRANCH}"),
string(name: 'GIT_REPO_BRANCH', value: "${env.PROVIDERS_DEV_BRANCH}"),
]
build job: "lifeislife/keycloak-itsme-broker/${params.PROVIDERS_RELEASE_BRANCH}", parameters: [
booleanParam(name: 'FORCE_DEPLOY', value: true),
]
build job: "lifeislife/keycloak-lifeislife-userstorage/${params.PROVIDERS_RELEASE_BRANCH}", parameters: [
booleanParam(name: 'FORCE_DEPLOY', value: true),
]
sh 'sleep 20'
build job: "lifeislife/lifeislife-keycloak/${params.IMAGE_BUILD_BRANCH}", parameters: [
string(name: 'USERSTORAGE_VERSION', value: "${params.NEW_PROVIDERS_VERSION}"),
string(name: 'ITSME_BROKER_VERSION', value: "${params.NEW_PROVIDERS_VERSION}"),
string(name: 'IMPORTEXPORT_EAR_VERSION', value: "${params.IMPORTEXPORT_VERSION}"),
string(name: 'IMAGE_VERSION', value: "${params.NEW_KEYCLOAK_IMAGE_TAG}"),
]
}
}
stage('Post release') {
parallel {
stage('Release next version') {
steps {
build job: "lifeislife/release-keycloak-itsme-broker", parameters: [
string(name: 'NEW_VERSION', value: "${params.NEXT_PROVIDERS_VERSION}-SNAPSHOT"),
string(name: 'RELEASE_BRANCH', value: "${env.PROVIDERS_DEV_BRANCH}"),
string(name: 'GIT_REPO_BRANCH', value: "${env.PROVIDERS_RELEASE_BRANCH}"),
booleanParam(name: 'SKIP_PUSH_TAG', value: true),
]
build job: "lifeislife/release-keycloak-lifeislife-userstorage", parameters: [
string(name: 'NEW_VERSION', value: "${params.NEXT_PROVIDERS_VERSION}-SNAPSHOT"),
string(name: 'RELEASE_BRANCH', value: "${env.PROVIDERS_DEV_BRANCH}"),
string(name: 'GIT_REPO_BRANCH', value: "${env.PROVIDERS_RELEASE_BRANCH}"),
booleanParam(name: 'SKIP_PUSH_TAG', value: true),
]
}
}
stage('Update cluster state') {
steps {
build job: 'infra/cluster-conf-update', parameters: [
string(name:"STACK", value:"${params.CLUSTER_STACK}"),
string(name:"VALUES_FILE", value:"values.keycloak.yaml"),
string(name:"VALUES_KEY", value:".keycloak.deployment.imageTag"),
string(name:"VALUES_VALUE", value:"\"${params.NEW_KEYCLOAK_IMAGE_TAG}\"")
]
}
}
}
}
}
post {
failure {
mail(
to: 'charlyghislain@gmail.com', cc: 'yannick@valuya.be',
subject: "lifeislife REALEASE keycloak ${BUILD_NUMBER} failed",
body: "See job at ${BUILD_URL}"
)
}
}
}

View File

@ -0,0 +1,197 @@
pipeline {
agent any
parameters {
booleanParam(name: 'DRY_RUN', defaultValue: 'true', description: 'Stay on DEV branches')
booleanParam(name: 'SKIP_TESTS', defaultValue: 'false', description: 'Skip tests')
string(name: 'NEW_VERSION', defaultValue: '', description: 'New version, eg: 2020.0.0')
string(name: 'NEXT_VERSION', defaultValue: '2020.1.0', description: 'Next version')
string(name: 'NEW_VERSION_MESSAGE', defaultValue: 'Nouvelle version', description: 'New version message')
string(name: 'GIT_CREDENTIAL_ID', defaultValue: 'jenkins-jenkins-ssh-key', description: '')
}
options {
disableConcurrentBuilds()
buildDiscarder(logRotator(numToKeepStr: '10'))
}
stages {
stage('Prepare release') {
steps {
buildName "#${BUILD_NUMBER} ${params.NEW_VERSION}"
script {
env.LIFEISLIFE_RELEASE_BRANCH = (params.DRY_RUN ? 'dev' : 'master')
env.LIFEISLIFE_DEV_BRANCH = (params.DRY_RUN ? 'dev' : 'dev')
env.JOB_BUILD_WILDFLY = (params.DRY_RUN ? 'lifeislife/lifeislife-back/dev' : 'lifeislife/lifeislife-back/master')
env.JOB_TEST_WILDFLY = (params.DRY_RUN ? 'lifeislife/lifeislife-it/dev' : 'lifeislife/lifeislife-it/master')
env.CLUSTER_STACK = (params.DRY_RUN ? 'lifeislifedev' : 'lifeislifeprod')
env.JOB_BUILD_FRONTENDS = (params.DRY_RUN ? 'lifeislife/lifeislife-front/dev' : 'lifeislife/lifeislife-front/master')
env.SKIP_TESTS = params.SKIP_TEST
}
checkout poll: false, scm: [$class: 'GitSCM', branches: [[name: "*/${LIFEISLIFE_DEV_BRANCH}"],[name: "*/${LIFEISLIFE_RELEASE_BRANCH}"]],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'lifeislife-back']],
userRemoteConfigs: [[credentialsId: 'jenkins-jenkins-ssh-key', url: 'ssh://git@gitlab.valuya.be:1022/lifeislife/lifeislife-back.git']]]
dir ('lifeislife-back') {
sh "echo 'back: merges: ' >>../release.log"
sh "git log origin/${LIFEISLIFE_RELEASE_BRANCH}..origin/${LIFEISLIFE_DEV_BRANCH} --pretty=format:'[%cd %ce %h] %s' --min-parents=2 --date=short >>../release.log"
sh "echo 'back: commits: ' >>../release.log"
sh "git log origin/${LIFEISLIFE_RELEASE_BRANCH}..origin/${LIFEISLIFE_DEV_BRANCH} --pretty=format:'[%cd %ce %h] %s' --max-parents=1 --date=short >>../release.log"
sh "echo '' >> ./release.log"
}
checkout poll: false, scm: [$class: 'GitSCM', branches: [[name: "*/${LIFEISLIFE_DEV_BRANCH}"],[name: "*/${LIFEISLIFE_RELEASE_BRANCH}"]],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'lifeislife-front']],
userRemoteConfigs: [[credentialsId: 'jenkins-jenkins-ssh-key', url: 'ssh://git@gitlab.valuya.be:1022/lifeislife/lifeislife-front.git']]]
dir ('lifeislife-front') {
sh "echo 'Front: merges: ' >>../release.log"
sh "git log origin/${LIFEISLIFE_RELEASE_BRANCH}..origin/${LIFEISLIFE_DEV_BRANCH} --pretty=format:'[%cd %ce %h] %s' --min-parents=2 --date=short >>../release.log"
sh "echo 'Front: commits: ' >>../release.log"
sh "git log origin/${LIFEISLIFE_RELEASE_BRANCH}..origin/${LIFEISLIFE_DEV_BRANCH} --pretty=format:'[%cd %ce %h] %s' --max-parents=1 --date=short >>../release.log"
sh "echo '' >> ./release.log"
}
stash includes: 'release.log', name: 'release-log'
}
}
stage('Release Lifeislife') {
steps {
build job: "lifeislife/release-lifeislife-back", parameters: [
string(name: 'NEW_VERSION', value: "${params.NEW_VERSION}"),
string(name: 'RELEASE_BRANCH', value: "${env.LIFEISLIFE_RELEASE_BRANCH}"),
string(name: 'GIT_REPO_BRANCH', value: "${env.LIFEISLIFE_DEV_BRANCH}"),
]
}
}
stage('Test Lifeislife') {
when {
expression { return params.SKIP_TESTS != true }
}
steps {
build job: "${env.JOB_TEST_WILDFLY}", parameters: [
booleanParam(name: 'SKIP_TESTS', value: false),
]
}
}
stage('Build Lifeislife') {
steps {
build job: "${env.JOB_BUILD_WILDFLY}", parameters: [
booleanParam(name: 'SKIP_TESTS', value: true),
booleanParam(name: 'FORCE_DEPLOY', value: true),
]
}
}
stage('Update front api') {
steps {
build job: "lifeislife/update-api-lifeislife-front/${env.LIFEISLIFE_DEV_BRANCH}", parameters: [
string(name: 'API_VERSION', value: "${params.NEW_VERSION}"),
booleanParam(name: 'SKIP_BUILD_LIBS', value: true),
]
}
}
stage('Release lifeislife front') {
steps {
build job: "lifeislife/release-lifeislife-front/${env.LIFEISLIFE_DEV_BRANCH}", parameters: [
string(name: 'NEW_VERSION', value: "${params.NEW_VERSION}"),
string(name: 'RELEASE_BRANCH', value: "${env.LIFEISLIFE_RELEASE_BRANCH}"),
string(name: 'DEV_BRANCH', value: "${env.LIFEISLIFE_DEV_BRANCH}"),
booleanParam(name: 'SKIP_BUILD', value: true),
booleanParam(name: 'SKIP_NEXT_VERSION', value: true),
]
}
}
stage('Build lifeislife-front') {
steps {
build job: "${env.JOB_BUILD_FRONTENDS}", parameters: [
]
}
}
stage('Update cluster state') {
steps {
build job: 'infra/cluster-conf-update', parameters: [
string(name:"STACK", value:"${env.CLUSTER_STACK}"),
string(name:"VALUES_FILE", value:"values.wildfly.yaml"),
string(name:"VALUES_KEY", value:".wildfly.deployment.imageTag"),
string(name:"VALUES_VALUE", value:"\"${params.NEW_VERSION}\"")
]
build job: 'infra/cluster-conf-update', parameters: [
string(name:"STACK", value:"${env.CLUSTER_STACK}"),
string(name:"VALUES_FILE", value:"values.front-admin.yaml"),
string(name:"VALUES_KEY", value:".adminFront.deployment.imageTag"),
string(name:"VALUES_VALUE", value:"\"${params.NEW_VERSION}\"")
]
build job: 'infra/cluster-conf-update', parameters: [
string(name:"STACK", value:"${env.CLUSTER_STACK}"),
string(name:"VALUES_FILE", value:"values.front-customer.yaml"),
string(name:"VALUES_KEY", value:".customerFront.deployment.imageTag"),
string(name:"VALUES_VALUE", value:"\"${params.NEW_VERSION}\"")
]
build job: 'infra/cluster-conf-update', parameters: [
string(name:"STACK", value:"${env.CLUSTER_STACK}"),
string(name:"VALUES_FILE", value:"values.front-mypension.yaml"),
string(name:"VALUES_KEY", value:".mypensionFront.deployment.imageTag"),
string(name:"VALUES_VALUE", value:"\"${params.NEW_VERSION}\""),
]
build job: 'infra/cluster-conf-update', parameters: [
string(name:"STACK", value:"${env.CLUSTER_STACK}"),
string(name:"VALUES_FILE", value:"values.front-simu.yaml"),
string(name:"VALUES_KEY", value:".simuFront.deployment.imageTag"),
string(name:"VALUES_VALUE", value:"\"${params.NEW_VERSION}\""),
]
}
}
stage('Release next version') {
steps {
build job: "lifeislife/release-lifeislife-back", parameters: [
string(name: 'NEW_VERSION', value: "${params.NEXT_VERSION}-SNAPSHOT"),
string(name: 'RELEASE_BRANCH', value: "${env.LIFEISLIFE_DEV_BRANCH}"),
string(name: 'GIT_REPO_BRANCH', value: "${env.LIFEISLIFE_RELEASE_BRANCH}"),
booleanParam(name: 'SKIP_PUSH_TAG', value: true),
]
build job: "lifeislife/release-lifeislife-front/${env.LIFEISLIFE_RELEASE_BRANCH}", parameters: [
string(name: 'NEW_VERSION', value: "${params.NEXT_VERSION}-rc.0"),
string(name: 'RELEASE_BRANCH', value: "${env.LIFEISLIFE_DEV_BRANCH}"),
string(name: 'DEV_BRANCH', value: "${env.LIFEISLIFE_RELEASE_BRANCH}"),
booleanParam(name: 'SKIP_BUILD', value: true),
booleanParam(name: 'SKIP_NEXT_VERSION', value: true),
booleanParam(name: 'SKIP_PUSH_TAG', value: true),
]
}
}
}
post {
failure {
mail(
to: 'charlyghislain@gmail.com', cc: 'yannick@valuya.be',
subject: "lifeislife RELEASE ${BUILD_NUMBER} failed",
body: "See job at ${BUILD_URL}"
)
}
success {
unstash 'release-log'
script {
env.RELEASE_LOG = readFile(file: './release.log')
env.MAIL_BODY = "Changes: \n" + "${RELEASE_LOG}"
}
mail(
to: 'charlyghislain@gmail.com', cc: 'yannick@valuya.be',
subject: "lifeislife ${params.NEW_VERSION} released",
body: "${env.MAIL_BODY}"
)
}
}
}

17715
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -11,38 +11,40 @@
},
"private": true,
"dependencies": {
"@angular/animations": "^8.2.14",
"@angular/common": "^8.2.14",
"@angular/compiler": "^8.2.14",
"@angular/core": "^8.2.14",
"@angular/forms": "^8.2.14",
"@angular/platform-browser": "^8.2.14",
"@angular/platform-browser-dynamic": "^8.2.14",
"@angular/router": "^8.2.14",
"@angular/animations": "^11.2.0",
"@angular/common": "^11.2.0",
"@angular/compiler": "^11.2.0",
"@angular/core": "^11.2.0",
"@angular/forms": "^11.2.0",
"@angular/localize": "~11.2.0",
"@angular/platform-browser": "^11.2.0",
"@angular/platform-browser-dynamic": "^11.2.0",
"@angular/router": "^11.2.0",
"core-js": "^2.5.4",
"moment-es6": "^1.0.0",
"rxjs": "^6.5.3",
"zone.js": "^0.9.1"
"tslib": "^2.0.0",
"zone.js": "~0.11.3"
},
"devDependencies": {
"@angular/compiler-cli": "^8.2.14",
"@angular-devkit/build-angular": "~0.803.21",
"typescript": "~3.5.3",
"@angular/cli": "~8.3.21",
"@angular/language-service": "^8.2.14",
"@types/jasmine": "~2.8.6",
"@angular/compiler-cli": "^11.2.0",
"@angular-devkit/build-angular": "~0.1102.0",
"typescript": "~4.1.5",
"@angular/cli": "~11.2.0",
"@angular/language-service": "^11.2.0",
"@types/jasmine": "~3.6.0",
"@types/jasminewd2": "~2.0.3",
"@types/node": "~8.9.4",
"codelyzer": "~5.2.1",
"jasmine-core": "~2.99.1",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~1.7.1",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.0",
"karma-jasmine": "~1.1.1",
"karma-jasmine-html-reporter": "^0.2.2",
"protractor": "~5.3.0",
"@types/node": "^12.11.1",
"codelyzer": "^6.0.0",
"jasmine-core": "~3.6.0",
"jasmine-spec-reporter": "~5.0.0",
"karma": "~5.0.0",
"karma-chrome-launcher": "~3.1.0",
"karma-coverage-istanbul-reporter": "~3.0.2",
"karma-jasmine": "~4.0.0",
"karma-jasmine-html-reporter": "^1.5.0",
"protractor": "~7.0.0",
"ts-node": "~5.0.1",
"tslint": "~5.9.1"
"tslint": "~6.1.0"
}
}

View File

@ -1,24 +1,24 @@
import { TestBed, async } from '@angular/core/testing';
import { TestBed, waitForAsync } from '@angular/core/testing';
import { AppComponent } from './app.component';
describe('AppComponent', () => {
beforeEach(async(() => {
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [
AppComponent
],
}).compileComponents();
}));
it('should create the app', async(() => {
it('should create the app', waitForAsync(() => {
const fixture = TestBed.createComponent(AppComponent);
const app = fixture.debugElement.componentInstance;
expect(app).toBeTruthy();
}));
it(`should have as title 'app'`, async(() => {
it(`should have as title 'app'`, waitForAsync(() => {
const fixture = TestBed.createComponent(AppComponent);
const app = fixture.debugElement.componentInstance;
expect(app.title).toEqual('app');
}));
it('should render title in a h1 tag', async(() => {
it('should render title in a h1 tag', waitForAsync(() => {
const fixture = TestBed.createComponent(AppComponent);
fixture.detectChanges();
const compiled = fixture.debugElement.nativeElement;

View File

@ -30,7 +30,7 @@ export const ROUTES: Route[] = [
@NgModule({
imports: [
RouterModule.forRoot(ROUTES),
RouterModule.forRoot(ROUTES, { relativeLinkResolution: 'legacy' }),
],
exports: [
RouterModule,

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { ContactRouteComponent } from './contact-route.component';
@ -6,7 +6,7 @@ describe('ContactRouteComponent', () => {
let component: ContactRouteComponent;
let fixture: ComponentFixture<ContactRouteComponent>;
beforeEach(async(() => {
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ ContactRouteComponent ]
})

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { InfoRouteComponent } from './info-route.component';
@ -6,7 +6,7 @@ describe('InfoRouteComponent', () => {
let component: InfoRouteComponent;
let fixture: ComponentFixture<InfoRouteComponent>;
beforeEach(async(() => {
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ InfoRouteComponent ]
})

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { RoutesHeaderComponent } from './routes-header.component';
@ -6,7 +6,7 @@ describe('RoutesHeaderComponent', () => {
let component: RoutesHeaderComponent;
let fixture: ComponentFixture<RoutesHeaderComponent>;
beforeEach(async(() => {
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ RoutesHeaderComponent ]
})

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { ServiceRouteComponent } from './service-route.component';
@ -6,7 +6,7 @@ describe('ServiceRouteComponent', () => {
let component: ServiceRouteComponent;
let fixture: ComponentFixture<ServiceRouteComponent>;
beforeEach(async(() => {
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ ServiceRouteComponent ]
})

View File

@ -2,11 +2,13 @@
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"module": "es2015",
"types": []
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
"files": [
"main.ts",
"polyfills.ts"
],
"include": [
"src/**/*.d.ts"
]
}

View File

@ -2,7 +2,6 @@
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/spec",
"module": "commonjs",
"types": [
"jasmine",
"node"

View File

@ -6,6 +6,7 @@
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"module": "es2020",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",

View File

@ -72,7 +72,6 @@
"no-trailing-whitespace": true,
"no-unnecessary-initializer": true,
"no-unused-expression": true,
"no-use-before-declare": true,
"no-var-keyword": true,
"object-literal-sort-keys": false,
"one-line": [