Merged develop and fixed conflicts

This commit is contained in:
Erik Tiekstra
2021-05-04 11:19:14 +02:00
13 changed files with 6885 additions and 30482 deletions

2
.gitignore vendored
View File

@@ -38,5 +38,5 @@ testem.log
.DS_Store .DS_Store
Thumbs.db Thumbs.db
mock-api/**/node_modules
mock-api/**/api.json mock-api/**/api.json

View File

@@ -2,6 +2,7 @@ import { DigiNgNavigationBreadcrumbsModule } from '@af/digi-ng/_navigation/navig
import { HttpClientModule } from '@angular/common/http'; import { HttpClientModule } from '@angular/common/http';
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser'; import { BrowserModule } from '@angular/platform-browser';
import { RouterModule } from '@angular/router';
import { AppRoutingModule } from './app-routing.module'; import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component'; import { AppComponent } from './app.component';
import { NavigationModule } from './components/navigation/navigation.module'; import { NavigationModule } from './components/navigation/navigation.module';
@@ -14,6 +15,7 @@ import { SkipToContentModule } from './components/skip-to-content/skip-to-conten
BrowserModule, BrowserModule,
HttpClientModule, HttpClientModule,
AppRoutingModule, AppRoutingModule,
RouterModule,
SkipToContentModule, SkipToContentModule,
NavigationModule, NavigationModule,
SidebarModule, SidebarModule,

File diff suppressed because it is too large Load Diff

View File

@@ -10,12 +10,12 @@ function generateAgencies(amount = 10) {
for (let i = 1; i <= amount; ++i) { for (let i = 1; i <= amount; ++i) {
agencies.push({ agencies.push({
id: faker.random.uuid(), id: faker.datatype.uuid(),
name: faker.company.companyName(), name: faker.company.companyName(),
kaNumber: faker.random.number({ min: 100000, max: 999999 }), kaNumber: faker.datatype.number({ min: 100000, max: 999999 }),
address: { address: {
street: faker.address.streetName(), street: faker.address.streetName(),
houseNumber: faker.random.number(100), houseNumber: faker.datatype.number(100),
postalCode: faker.address.zipCode(), postalCode: faker.address.zipCode(),
city: faker.address.city(), city: faker.address.city(),
kommun: KOMMUN[Math.floor(Math.random() * KOMMUN.length)].kommun, kommun: KOMMUN[Math.floor(Math.random() * KOMMUN.length)].kommun,

View File

@@ -12,13 +12,13 @@ function generateParticipants(amount = 10) {
for (let i = 1; i <= amount; ++i) { for (let i = 1; i <= amount; ++i) {
const participant = { const participant = {
id: faker.random.uuid(), id: faker.datatype.uuid(),
firstName: faker.name.firstName(), firstName: faker.name.firstName(),
lastName: faker.name.lastName(), lastName: faker.name.lastName(),
status: STATUSES[Math.floor(Math.random() * STATUSES.length)], status: STATUSES[Math.floor(Math.random() * STATUSES.length)],
service: SERVICES[Math.floor(Math.random() * SERVICES.length)].name, service: SERVICES[Math.floor(Math.random() * SERVICES.length)].name,
nextStep: STEPS[Math.floor(Math.random() * STEPS.length)], nextStep: STEPS[Math.floor(Math.random() * STEPS.length)],
errandNumber: faker.random.number({ min: 100000, max: 999999 }), errandNumber: faker.datatype.number({ min: 100000, max: 999999 }),
startDate: faker.date.recent(), startDate: faker.date.recent(),
endDate: faker.date.future(), endDate: faker.date.future(),
handleBefore: faker.date.soon(), handleBefore: faker.date.soon(),

View File

@@ -19,8 +19,8 @@ function generateStaff(amount = 10) {
for (let i = 1; i <= amount; ++i) { for (let i = 1; i <= amount; ++i) {
const person = { const person = {
id: faker.random.uuid(), id: faker.datatype.uuid(),
staffId: faker.random.number(), staffId: faker.datatype.number(),
firstName: faker.name.firstName(), firstName: faker.name.firstName(),
lastName: faker.name.lastName(), lastName: faker.name.lastName(),
kommun: KOMMUN[Math.floor(Math.random() * KOMMUN.length)].kommun, kommun: KOMMUN[Math.floor(Math.random() * KOMMUN.length)].kommun,
@@ -28,17 +28,17 @@ function generateStaff(amount = 10) {
service: SERVICES[Math.floor(Math.random() * SERVICES.length)].name, service: SERVICES[Math.floor(Math.random() * SERVICES.length)].name,
languages: [ languages: [
LANGUAGES.find(language => language.name === 'Svenska'), LANGUAGES.find(language => language.name === 'Svenska'),
...chooseRandom(LANGUAGES, faker.random.number(3)), ...chooseRandom(LANGUAGES, faker.datatype.number(3)),
], ],
ssn: `${faker.date.between('1950', '2000').toISOString().split('T')[0].replaceAll('-', '')}-${faker.random.number( ssn: `${faker.date.between('1950', '2000').toISOString().split('T')[0].replace(/-/g, '')}-${faker.datatype.number(
{ {
min: 1000, min: 1000,
max: 9999, max: 9999,
} }
)}`, )}`,
phone: `07${faker.random.number(9)}-${faker.random.number({ min: 1000000, max: 9999999 })}`, phone: `07${faker.datatype.number(9)}-${faker.datatype.number({ min: 1000000, max: 9999999 })}`,
email: faker.internet.email(), email: faker.internet.email(),
authorisations: chooseRandom(AUTHORISATIONS, faker.random.number(3)), authorisations: chooseRandom(AUTHORISATIONS, faker.datatype.number(3)),
outOfOffice: STATUSES[Math.floor(Math.random() * STATUSES.length)] outOfOffice: STATUSES[Math.floor(Math.random() * STATUSES.length)]
? [ ? [
{ {
@@ -47,7 +47,7 @@ function generateStaff(amount = 10) {
}, },
] ]
: [], : [],
agencies: chooseRandom(AGENCIES, faker.random.number(3)), agencies: chooseRandom(AGENCIES, faker.datatype.number(3)),
}; };
staff.push({ ...person, fullName: `${person.firstName} ${person.lastName}` }); staff.push({ ...person, fullName: `${person.firstName} ${person.lastName}` });

View File

@@ -64,13 +64,13 @@ http {
add_header Cache-Control "no-cache, public, must-revalidate, proxy-revalidate"; add_header Cache-Control "no-cache, public, must-revalidate, proxy-revalidate";
} }
underscores_in_headers on; # underscores_in_headers on;
$RESOLVER # $RESOLVER
# JWT TOKEN # # JWT TOKEN
location /token/jwt/rest/idp/v0/dafa { # location /token/jwt/rest/idp/v0/dafa {
proxy_pass $JWT_URL; # proxy_pass $JWT_URL;
} # }
error_page 404 /404.html; error_page 404 /404.html;

86
nginx/nginx.conf Normal file
View File

@@ -0,0 +1,86 @@
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
worker_processes auto;
error_log /var/opt/rh/rh-nginx112/log/nginx/error.log;
pid /var/opt/rh/rh-nginx112/run/nginx/nginx.pid;
# Load dynamic modules. See /opt/rh/rh-nginx112/root/usr/share/doc/README.dynamic.
include /opt/rh/rh-nginx112/root/usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/opt/rh/rh-nginx112/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
gzip on;
gzip_types application/xml application/json text/css text/javascript application/javascript;
gzip_vary on;
gzip_comp_level 6;
gzip_min_length 500;
include /etc/opt/rh/rh-nginx112/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /opt/app-root/etc/nginx.d/*.conf;
server {
listen 8080 default_server;
listen [::]:8080 default_server;
server_name _;
root /opt/app-root/src;
# Load configuration files for the default server block.
include /opt/app-root/etc/nginx.default.d/*.conf;
location / {
try_files $uri $uri/ /index.html;
expires -1;
}
location ~* \.(?:jpg|jpeg|gif|png|ico|woff2)$ {
expires 1M;
add_header Cache-Control "public";
}
location ~* \.(?:js|json|css)$ {
add_header Cache-Control "no-cache, public, must-revalidate, proxy-revalidate";
}
# underscores_in_headers on;
# $RESOLVER
# # JWT TOKEN
# location /token/jwt/rest/idp/v0/dafa {
# proxy_pass $JWT_URL;
# }
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}

View File

@@ -1,10 +1,11 @@
def cicdproject = "${CICD_NAMESPACE}" def cicdproject = "${CICD_NAMESPACE}"
def appname = "${APP_NAME}" def appname = "${APP_NAME}"
def devproject = "${DEV_NAMESPACE}" def utv_project = "${UTV_NAMESPACE}"
def i1project = "${I1_NAMESPACE}" def test_project = "${TEST_NAMESPACE}"
def u1project = "${U1_NAMESPACE}" def auto_project = "${AUTO_NAMESPACE}"
def t1project = "${T1_NAMESPACE}" def sys_project = "${SYS_NAMESPACE}"
def jenkinsslave = "nodejs12-agent" def jenkinsslave = "nodejs15-agent"
def dist_path = "dist/apps/dafa-web"
pipeline { pipeline {
@@ -89,19 +90,18 @@ pipeline {
} }
stage("Build application") { stage("Build application") {
environment {
NGINX_PATH = "${dist_path}/."
}
steps { steps {
echo '### Building application... ###' echo '### Building application... ###'
sh ''' sh '''
npm run build -- --output-path=dist npm run build:dafa
cp -r nginx/* dist/.
'''
// Used when testing Openshift, so that we dont need to wait for build. Also put a # before npm ci above cp nginx/nginx.conf ${NGINX_PATH}
// sh ''' #cp -r nginx/* ${NGINX_PATH}
// mkdir dist '''
// echo hello > dist/index.html
// '''
echo '### Application built! ###' echo '### Application built! ###'
} }
@@ -111,8 +111,8 @@ pipeline {
echo '### Creating image... ###' echo '### Creating image... ###'
script { script {
openshift.withCluster() { openshift.withCluster() {
openshift.withProject(devproject) { openshift.withProject(utv_project) {
openshift.selector("bc", "${ appname }").startBuild("--from-dir=./dist", "--wait=true") openshift.selector("bc", "${ appname }").startBuild("--from-dir=${dist_path}", "--wait=true")
openshift.tag("${ appname }:latest", "${ appname }:${BUILD_TAG}") openshift.tag("${ appname }:latest", "${ appname }:${BUILD_TAG}")
} }
} }
@@ -121,51 +121,51 @@ pipeline {
} }
} }
stage('Deploy u1') { stage('Deploy to "auto"') {
steps { steps {
echo '### Deploying to U1... ###' echo '### Deploying to "auto"... ###'
script { script {
openshift.withCluster() { openshift.withCluster() {
openshift.withProject(u1project) { openshift.withProject(auto_project) {
openshift.raw("set image dc/${ appname } ${ appname }=docker-registry.default.svc:5000/${devproject}/${ appname }:${BUILD_TAG} --record=true --source=docker") openshift.raw("set image dc/${ appname } ${ appname }=docker-registry.default.svc:5000/${utv_project}/${ appname }:${BUILD_TAG} --record=true --source=docker")
openshift.raw("annotate dc ${ appname } version=${BUILD_TAG} --overwrite=true") openshift.raw("annotate dc ${ appname } version=${BUILD_TAG} --overwrite=true")
openshift.selector("dc", "${ appname }").rollout().status(); openshift.selector("dc", "${ appname }").rollout().status();
} }
} }
} }
echo '### Deployed to U1! ###' echo '### Deployed to "auto"! ###'
} }
} }
stage('Deploy i1') { stage('Deploy to "test"') {
steps { steps {
echo '### Deploying to I1... ###' echo '### Deploying to "test"... ###'
script { script {
openshift.withCluster() { openshift.withCluster() {
openshift.withProject(i1project) { openshift.withProject(test_project) {
openshift.raw("set image dc/${ appname } ${ appname }=docker-registry.default.svc:5000/${devproject}/${ appname }:${BUILD_TAG} --record=true --source=docker") openshift.raw("set image dc/${ appname } ${ appname }=docker-registry.default.svc:5000/${utv_project}/${ appname }:${BUILD_TAG} --record=true --source=docker")
openshift.raw("annotate dc ${ appname } version=${BUILD_TAG} --overwrite=true") openshift.raw("annotate dc ${ appname } version=${BUILD_TAG} --overwrite=true")
openshift.selector("dc", "${ appname }").rollout().status(); openshift.selector("dc", "${ appname }").rollout().status();
} }
} }
} }
echo '### Deployed to I1! ###' echo '### Deployed to "test"! ###'
} }
} }
stage('Deploy t1') { stage('Deploy "sys"') {
steps { steps {
echo '### Deploying to T1... ###' echo '### Deploying to "sys"... ###'
script { script {
openshift.withCluster() { openshift.withCluster() {
openshift.withProject(t1project) { openshift.withProject(sys_project) {
openshift.raw("set image dc/${ appname } ${ appname }=docker-registry.default.svc:5000/${devproject}/${ appname }:${BUILD_TAG} --record=true --source=docker") openshift.raw("set image dc/${ appname } ${ appname }=docker-registry.default.svc:5000/${utv_project}/${ appname }:${BUILD_TAG} --record=true --source=docker")
openshift.raw("annotate dc ${ appname } version=${BUILD_TAG} --overwrite=true") openshift.raw("annotate dc ${ appname } version=${BUILD_TAG} --overwrite=true")
openshift.selector("dc", "${ appname }").rollout().status(); openshift.selector("dc", "${ appname }").rollout().status();
} }
} }
} }
echo '### Deployed to T1! ###' echo '### Deployed to "sys"! ###'
} }
} }

View File

@@ -1,9 +1,10 @@
def cicdproject = "${CI_CD_NAMESPACE}" def cicdproject = "${CICD_NAMESPACE}"
def appname = "${APP_NAME}" def appname = "${APP_NAME}"
def devproject = "${DEV_NAMESPACE}" def utv_project = "${UTV_NAMESPACE}"
def t2project = "${T2_NAMESPACE}" def acc_project = "${ACC_NAMESPACE}"
def prodproject = "${PROD_NAMESPACE}" def prod_project = "${PROD_NAMESPACE}"
def jenkinsslave = "nodejs12-agent" def jenkinsslave = "nodejs15-agent"
def dist_path = "dist/apps/dafa-web"
pipeline { pipeline {
@@ -88,11 +89,17 @@ pipeline {
} }
stage("Build application") { stage("Build application") {
environment {
NGINX_PATH = "${dist_path}/."
}
steps { steps {
echo '### Building application... ###' echo '### Building application... ###'
sh ''' sh '''
npm run build:prod -- --output-path=dist npm run build:dafa -- --prod
cp -r nginx/* dist/.
cp nginx/nginx.conf ${NGINX_PATH}
#cp -r nginx/* ${NGINX_PATH}
ls -la dist ls -la dist
''' '''
echo '### Application built! ###' echo '### Application built! ###'
@@ -104,8 +111,8 @@ pipeline {
echo '### Creating image... ###' echo '### Creating image... ###'
script { script {
openshift.withCluster() { openshift.withCluster() {
openshift.withProject(devproject) { openshift.withProject(utv_project) {
openshift.selector("bc", "${ appname }").startBuild("--from-dir=./dist", "--wait=true") openshift.selector("bc", "${ appname }").startBuild("--from-dir=${dist_path}", "--wait=true")
openshift.tag("${ appname }:latest", "${ appname }:${BUILD_TAG}") openshift.tag("${ appname }:latest", "${ appname }:${BUILD_TAG}")
} }
} }
@@ -115,19 +122,19 @@ pipeline {
} }
} }
stage('Deploy T2') { stage('Deploy to "acc"') {
steps { steps {
echo '### Deploying to T2... ###' echo '### Deploying to "acc"... ###'
script { script {
openshift.withCluster() { openshift.withCluster() {
openshift.withProject(t2project) { openshift.withProject(acc_project) {
openshift.raw("set image dc/${ appname } ${ appname }=docker-registry.default.svc:5000/${devproject}/${ appname }:${BUILD_TAG} --record=true --source=docker ") openshift.raw("set image dc/${ appname } ${ appname }=docker-registry.default.svc:5000/${utv_project}/${ appname }:${BUILD_TAG} --record=true --source=docker ")
openshift.raw("annotate dc ${ appname } version=${BUILD_TAG} --overwrite=true") openshift.raw("annotate dc ${ appname } version=${BUILD_TAG} --overwrite=true")
openshift.selector("dc", "${ appname }").rollout().status(); openshift.selector("dc", "${ appname }").rollout().status();
} }
} }
} }
echo '### Deployed to T2! ###' echo '### Deployed to "acc"! ###'
} }
} }
@@ -145,7 +152,7 @@ pipeline {
openshift.withProject(cicdproject) { openshift.withProject(cicdproject) {
def registry = "nexus.arbetsformedlingen.se:5555" def registry = "nexus.arbetsformedlingen.se:5555"
withCredentials([usernamePassword(credentialsId: "${openshift.project()}-nexus-secret", usernameVariable: "REG_USER", passwordVariable: "REG_PWD")]) { withCredentials([usernamePassword(credentialsId: "${openshift.project()}-nexus-secret", usernameVariable: "REG_USER", passwordVariable: "REG_PWD")]) {
sh "skopeo copy docker://docker-registry.default.svc:5000/${devproject}/${appname}:latest docker://${registry}/app-af-nexus/${appname}:${BUILD_TAG} --src-creds jenkins:\$(oc whoami -t) --dest-creds \"$REG_USER:$REG_PWD\" --src-tls-verify=false --dest-tls-verify=false --format v2s2" sh "skopeo copy docker://docker-registry.default.svc:5000/${utv_project}/${appname}:latest docker://${registry}/app-af-nexus/${appname}:${BUILD_TAG} --src-creds jenkins:\$(oc whoami -t) --dest-creds \"$REG_USER:$REG_PWD\" --src-tls-verify=false --dest-tls-verify=false --format v2s2"
} }
} }
} }
@@ -166,7 +173,7 @@ pipeline {
} }
openshift.withCluster( env.API, env.TOKEN ) { openshift.withCluster( env.API, env.TOKEN ) {
openshift.withProject(prodproject) { openshift.withProject(prod_project) {
// Wait for approval // Wait for approval
timeout(time:1440, unit:'MINUTES') { timeout(time:1440, unit:'MINUTES') {
input message: "Go Live with ${ appname } in Production?", ok: "Confirm" input message: "Go Live with ${ appname } in Production?", ok: "Confirm"

35295
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -41,7 +41,7 @@
"private": true, "private": true,
"dependencies": { "dependencies": {
"@af/auth": "^11.1.0", "@af/auth": "^11.1.0",
"@af/digi-ng": "^12.1.0", "@af/digi-ng": "^14.0.0",
"@angular/animations": "^11.2.0", "@angular/animations": "^11.2.0",
"@angular/common": "^11.2.0", "@angular/common": "^11.2.0",
"@angular/compiler": "^11.2.0", "@angular/compiler": "^11.2.0",
@@ -50,7 +50,7 @@
"@angular/platform-browser": "^11.2.0", "@angular/platform-browser": "^11.2.0",
"@angular/platform-browser-dynamic": "^11.2.0", "@angular/platform-browser-dynamic": "^11.2.0",
"@angular/router": "^11.2.0", "@angular/router": "^11.2.0",
"@digi/core": "^6.0.2", "@digi/core": "^9.0.0",
"@digi/styles": "^6.0.2", "@digi/styles": "^6.0.2",
"@nrwl/angular": "11.5.1", "@nrwl/angular": "11.5.1",
"rxjs": "~6.6.3", "rxjs": "~6.6.3",