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
Thumbs.db
mock-api/**/node_modules
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 { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouterModule } from '@angular/router';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { NavigationModule } from './components/navigation/navigation.module';
@@ -14,6 +15,7 @@ import { SkipToContentModule } from './components/skip-to-content/skip-to-conten
BrowserModule,
HttpClientModule,
AppRoutingModule,
RouterModule,
SkipToContentModule,
NavigationModule,
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) {
agencies.push({
id: faker.random.uuid(),
id: faker.datatype.uuid(),
name: faker.company.companyName(),
kaNumber: faker.random.number({ min: 100000, max: 999999 }),
kaNumber: faker.datatype.number({ min: 100000, max: 999999 }),
address: {
street: faker.address.streetName(),
houseNumber: faker.random.number(100),
houseNumber: faker.datatype.number(100),
postalCode: faker.address.zipCode(),
city: faker.address.city(),
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) {
const participant = {
id: faker.random.uuid(),
id: faker.datatype.uuid(),
firstName: faker.name.firstName(),
lastName: faker.name.lastName(),
status: STATUSES[Math.floor(Math.random() * STATUSES.length)],
service: SERVICES[Math.floor(Math.random() * SERVICES.length)].name,
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(),
endDate: faker.date.future(),
handleBefore: faker.date.soon(),

View File

@@ -19,8 +19,8 @@ function generateStaff(amount = 10) {
for (let i = 1; i <= amount; ++i) {
const person = {
id: faker.random.uuid(),
staffId: faker.random.number(),
id: faker.datatype.uuid(),
staffId: faker.datatype.number(),
firstName: faker.name.firstName(),
lastName: faker.name.lastName(),
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,
languages: [
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,
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(),
authorisations: chooseRandom(AUTHORISATIONS, faker.random.number(3)),
authorisations: chooseRandom(AUTHORISATIONS, faker.datatype.number(3)),
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}` });

View File

@@ -64,13 +64,13 @@ http {
add_header Cache-Control "no-cache, public, must-revalidate, proxy-revalidate";
}
underscores_in_headers on;
$RESOLVER
# underscores_in_headers on;
# $RESOLVER
# JWT TOKEN
location /token/jwt/rest/idp/v0/dafa {
proxy_pass $JWT_URL;
}
# # JWT TOKEN
# location /token/jwt/rest/idp/v0/dafa {
# proxy_pass $JWT_URL;
# }
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 appname = "${APP_NAME}"
def devproject = "${DEV_NAMESPACE}"
def i1project = "${I1_NAMESPACE}"
def u1project = "${U1_NAMESPACE}"
def t1project = "${T1_NAMESPACE}"
def jenkinsslave = "nodejs12-agent"
def utv_project = "${UTV_NAMESPACE}"
def test_project = "${TEST_NAMESPACE}"
def auto_project = "${AUTO_NAMESPACE}"
def sys_project = "${SYS_NAMESPACE}"
def jenkinsslave = "nodejs15-agent"
def dist_path = "dist/apps/dafa-web"
pipeline {
@@ -89,19 +90,18 @@ pipeline {
}
stage("Build application") {
environment {
NGINX_PATH = "${dist_path}/."
}
steps {
echo '### Building application... ###'
sh '''
npm run build -- --output-path=dist
cp -r nginx/* dist/.
'''
npm run build:dafa
// Used when testing Openshift, so that we dont need to wait for build. Also put a # before npm ci above
// sh '''
// mkdir dist
// echo hello > dist/index.html
// '''
cp nginx/nginx.conf ${NGINX_PATH}
#cp -r nginx/* ${NGINX_PATH}
'''
echo '### Application built! ###'
}
@@ -111,8 +111,8 @@ pipeline {
echo '### Creating image... ###'
script {
openshift.withCluster() {
openshift.withProject(devproject) {
openshift.selector("bc", "${ appname }").startBuild("--from-dir=./dist", "--wait=true")
openshift.withProject(utv_project) {
openshift.selector("bc", "${ appname }").startBuild("--from-dir=${dist_path}", "--wait=true")
openshift.tag("${ appname }:latest", "${ appname }:${BUILD_TAG}")
}
}
@@ -121,51 +121,51 @@ pipeline {
}
}
stage('Deploy u1') {
stage('Deploy to "auto"') {
steps {
echo '### Deploying to U1... ###'
echo '### Deploying to "auto"... ###'
script {
openshift.withCluster() {
openshift.withProject(u1project) {
openshift.raw("set image dc/${ appname } ${ appname }=docker-registry.default.svc:5000/${devproject}/${ appname }:${BUILD_TAG} --record=true --source=docker")
openshift.withProject(auto_project) {
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.selector("dc", "${ appname }").rollout().status();
}
}
}
echo '### Deployed to U1! ###'
echo '### Deployed to "auto"! ###'
}
}
stage('Deploy i1') {
stage('Deploy to "test"') {
steps {
echo '### Deploying to I1... ###'
echo '### Deploying to "test"... ###'
script {
openshift.withCluster() {
openshift.withProject(i1project) {
openshift.raw("set image dc/${ appname } ${ appname }=docker-registry.default.svc:5000/${devproject}/${ appname }:${BUILD_TAG} --record=true --source=docker")
openshift.withProject(test_project) {
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.selector("dc", "${ appname }").rollout().status();
}
}
}
echo '### Deployed to I1! ###'
echo '### Deployed to "test"! ###'
}
}
stage('Deploy t1') {
stage('Deploy "sys"') {
steps {
echo '### Deploying to T1... ###'
echo '### Deploying to "sys"... ###'
script {
openshift.withCluster() {
openshift.withProject(t1project) {
openshift.raw("set image dc/${ appname } ${ appname }=docker-registry.default.svc:5000/${devproject}/${ appname }:${BUILD_TAG} --record=true --source=docker")
openshift.withProject(sys_project) {
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.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 devproject = "${DEV_NAMESPACE}"
def t2project = "${T2_NAMESPACE}"
def prodproject = "${PROD_NAMESPACE}"
def jenkinsslave = "nodejs12-agent"
def utv_project = "${UTV_NAMESPACE}"
def acc_project = "${ACC_NAMESPACE}"
def prod_project = "${PROD_NAMESPACE}"
def jenkinsslave = "nodejs15-agent"
def dist_path = "dist/apps/dafa-web"
pipeline {
@@ -88,11 +89,17 @@ pipeline {
}
stage("Build application") {
environment {
NGINX_PATH = "${dist_path}/."
}
steps {
echo '### Building application... ###'
sh '''
npm run build:prod -- --output-path=dist
cp -r nginx/* dist/.
npm run build:dafa -- --prod
cp nginx/nginx.conf ${NGINX_PATH}
#cp -r nginx/* ${NGINX_PATH}
ls -la dist
'''
echo '### Application built! ###'
@@ -104,8 +111,8 @@ pipeline {
echo '### Creating image... ###'
script {
openshift.withCluster() {
openshift.withProject(devproject) {
openshift.selector("bc", "${ appname }").startBuild("--from-dir=./dist", "--wait=true")
openshift.withProject(utv_project) {
openshift.selector("bc", "${ appname }").startBuild("--from-dir=${dist_path}", "--wait=true")
openshift.tag("${ appname }:latest", "${ appname }:${BUILD_TAG}")
}
}
@@ -115,19 +122,19 @@ pipeline {
}
}
stage('Deploy T2') {
stage('Deploy to "acc"') {
steps {
echo '### Deploying to T2... ###'
echo '### Deploying to "acc"... ###'
script {
openshift.withCluster() {
openshift.withProject(t2project) {
openshift.raw("set image dc/${ appname } ${ appname }=docker-registry.default.svc:5000/${devproject}/${ appname }:${BUILD_TAG} --record=true --source=docker ")
openshift.withProject(acc_project) {
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.selector("dc", "${ appname }").rollout().status();
}
}
}
echo '### Deployed to T2! ###'
echo '### Deployed to "acc"! ###'
}
}
@@ -145,7 +152,7 @@ pipeline {
openshift.withProject(cicdproject) {
def registry = "nexus.arbetsformedlingen.se:5555"
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.withProject(prodproject) {
openshift.withProject(prod_project) {
// Wait for approval
timeout(time:1440, unit:'MINUTES') {
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,
"dependencies": {
"@af/auth": "^11.1.0",
"@af/digi-ng": "^12.1.0",
"@af/digi-ng": "^14.0.0",
"@angular/animations": "^11.2.0",
"@angular/common": "^11.2.0",
"@angular/compiler": "^11.2.0",
@@ -50,7 +50,7 @@
"@angular/platform-browser": "^11.2.0",
"@angular/platform-browser-dynamic": "^11.2.0",
"@angular/router": "^11.2.0",
"@digi/core": "^6.0.2",
"@digi/core": "^9.0.0",
"@digi/styles": "^6.0.2",
"@nrwl/angular": "11.5.1",
"rxjs": "~6.6.3",