refs #5739 feat(docker): run back tests
gitea/salix/pipeline/head There was a failure building this commit
Details
gitea/salix/pipeline/head There was a failure building this commit
Details
This commit is contained in:
parent
865ab56ef3
commit
e4dcdc0a72
|
@ -3,7 +3,7 @@
|
|||
// Carácter predeterminado de final de línea.
|
||||
"files.eol": "\n",
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll.eslint": true
|
||||
"source.fixAll.eslint": "explicit"
|
||||
},
|
||||
"search.useIgnoreFiles": false,
|
||||
"editor.defaultFormatter": "dbaeumer.vscode-eslint",
|
||||
|
|
|
@ -31,14 +31,13 @@ RUN apt-get update \
|
|||
WORKDIR /salix
|
||||
|
||||
COPY print/package.json print/package-lock.json print/
|
||||
RUN npm --prefix ./print install ./print
|
||||
RUN npm --prefix ./print install --omit=dev ./print
|
||||
|
||||
COPY package.json package-lock.json ./
|
||||
COPY loopback/package.json loopback/
|
||||
RUN npm install
|
||||
RUN npm install --omit=dev
|
||||
|
||||
COPY loopback loopback
|
||||
COPY storage storage
|
||||
COPY back back
|
||||
COPY modules modules
|
||||
COPY print print
|
||||
|
|
|
@ -39,10 +39,7 @@ pipeline {
|
|||
NODE_ENV = ""
|
||||
}
|
||||
steps {
|
||||
nodejs('node-v20') {
|
||||
sh 'npm install --no-audit --prefer-offline'
|
||||
sh 'gulp install --ci'
|
||||
}
|
||||
sh "docker build -f front/Dockerfile.test -t salix-front"
|
||||
}
|
||||
}
|
||||
stage('Test') {
|
||||
|
@ -57,16 +54,12 @@ pipeline {
|
|||
parallel {
|
||||
stage('Frontend') {
|
||||
steps {
|
||||
nodejs('node-v20') {
|
||||
sh 'jest --ci --reporters=default --reporters=jest-junit --maxWorkers=2'
|
||||
}
|
||||
sh docker compose -f docker-compose.test.yml up front
|
||||
}
|
||||
}
|
||||
stage('Backend') {
|
||||
steps {
|
||||
nodejs('node-v20') {
|
||||
sh 'npm run test:back:ci'
|
||||
}
|
||||
sh docker compose -f docker-compose.test.yml up back
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
FROM node:20-bullseye-slim
|
||||
ENV TZ Europe/Madrid
|
||||
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
|
||||
# Puppeteer
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
gnupg2 \
|
||||
|
@ -19,15 +16,12 @@ RUN apt-get update \
|
|||
fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
|
||||
|
||||
# Extra dependencies
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
samba-common-bin samba-dsdb-modules\
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& npm -g install pm2
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Salix
|
||||
|
||||
WORKDIR /salix
|
||||
|
||||
COPY print/package.json print/package-lock.json print/
|
||||
|
@ -35,16 +29,15 @@ RUN npm --prefix ./print install ./print
|
|||
|
||||
COPY package.json package-lock.json ./
|
||||
COPY loopback/package.json loopback/
|
||||
RUN npm install
|
||||
RUN npm install --ci
|
||||
|
||||
COPY gulpfile.js ./
|
||||
|
||||
COPY \
|
||||
LICENSE \
|
||||
README.md \
|
||||
./
|
||||
|
||||
CMD ["npx", "gulp", "backOnly"]
|
||||
FROM scratch
|
||||
WORKDIR /salix
|
||||
|
||||
HEALTHCHECK --interval=15s --timeout=10s \
|
||||
CMD curl -f http://localhost:3000/api/Applications/status || exit 1
|
||||
CMD ["npx", "gulp", "backWatch"]
|
|
@ -0,0 +1,9 @@
|
|||
FROM back:local
|
||||
|
||||
COPY loopback loopback
|
||||
COPY back back
|
||||
COPY modules modules
|
||||
COPY print print
|
||||
COPY storage storage
|
||||
|
||||
CMD ["npx", "gulp", "backOnly"]
|
|
@ -1,4 +1,4 @@
|
|||
const Docker = require('../db/docker.js');
|
||||
// const Docker = require('../db/docker.js');
|
||||
let dataSources = require('../loopback/server/datasources.json');
|
||||
|
||||
process.on('warning', warning => {
|
||||
|
@ -11,23 +11,14 @@ process.on('exit', async function() {
|
|||
if (container) await container.rm();
|
||||
});
|
||||
|
||||
let container;
|
||||
async function test() {
|
||||
let isCI = false;
|
||||
|
||||
if (process.argv[2] === 'ci')
|
||||
isCI = true;
|
||||
|
||||
container = new Docker();
|
||||
|
||||
await container.run(isCI);
|
||||
dataSources = JSON.parse(JSON.stringify(dataSources));
|
||||
|
||||
Object.assign(dataSources.vn, {
|
||||
host: container.dbConf.host,
|
||||
port: container.dbConf.port
|
||||
});
|
||||
|
||||
const bootOptions = {dataSources};
|
||||
const app = require('vn-loopback/server/server');
|
||||
await new Promise((resolve, reject) => {
|
||||
|
@ -73,7 +64,6 @@ async function test() {
|
|||
|
||||
await jasmine.execute();
|
||||
if (app) await app.disconnect();
|
||||
if (container) await container.rm();
|
||||
console.log('App disconnected & container removed');
|
||||
}
|
||||
|
||||
|
|
|
@ -1,12 +1,15 @@
|
|||
version: "3.7"
|
||||
services:
|
||||
db:
|
||||
image: salix-db
|
||||
image: db:local
|
||||
restart: unless-stopped
|
||||
build:
|
||||
context: db
|
||||
dockerfile: Dockerfile
|
||||
ports:
|
||||
- 3306:3306
|
||||
front:
|
||||
image: front
|
||||
image: front:local
|
||||
restart: unless-stopped
|
||||
build:
|
||||
context: .
|
||||
|
@ -20,17 +23,13 @@ services:
|
|||
- ./dist:/salix/dist
|
||||
- ./front:/salix/front
|
||||
- ./loopback:/salix/loopback
|
||||
x-develop:
|
||||
watch:
|
||||
- action: sync
|
||||
- path: ./modules
|
||||
- target: /modules
|
||||
|
||||
back:
|
||||
image: salix-back
|
||||
image: back:local
|
||||
restart: unless-stopped
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile.local
|
||||
dockerfile: back/Dockerfile.local
|
||||
ports:
|
||||
- 3000:3000
|
||||
environment:
|
||||
|
@ -43,14 +42,7 @@ services:
|
|||
- ./modules:/salix/modules
|
||||
- ./back:/salix/back
|
||||
- ./print:/salix/print
|
||||
x-develop:
|
||||
watch:
|
||||
- action: sync
|
||||
- path: ./back
|
||||
- target: /back
|
||||
- action: sync
|
||||
- path: ./models
|
||||
- target: /models
|
||||
|
||||
networks:
|
||||
salix-stack-network:
|
||||
driver: host
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
version: "3.7"
|
||||
services:
|
||||
db:
|
||||
image: salix-db
|
||||
restart: always
|
||||
build:
|
||||
context: db
|
||||
dockerfile: Dockerfile
|
||||
front:
|
||||
image: salix-front
|
||||
restart: always
|
||||
command: ["npm", "run", "test:front:ci"]
|
||||
build:
|
||||
context: .
|
||||
dockerfile: front/Dockerfile.test
|
||||
depends_on:
|
||||
- back
|
||||
back:
|
||||
image: salix-back
|
||||
restart: always
|
||||
command: ["npm", "run", "test:back:ci"]
|
||||
build:
|
||||
context: .
|
||||
dockerfile: back/Dockerfile.test
|
||||
environment:
|
||||
- NODE_ENV
|
||||
depends_on:
|
||||
- db
|
||||
|
||||
networks:
|
||||
salix-stack-network:
|
||||
driver: host
|
||||
|
|
@ -1,13 +1,10 @@
|
|||
FROM salix-back
|
||||
EXPOSE 5000
|
||||
|
||||
COPY /dist dist
|
||||
COPY /front front
|
||||
COPY /front/gulpfile.js ./
|
||||
COPY /front/webpack.config.js ./
|
||||
COPY /front/package.json ./front/
|
||||
|
||||
RUN cd front && npm install
|
||||
# RUN npx gulp build
|
||||
# RUN npx gulp front
|
||||
RUN cd front && npm install --ci
|
||||
|
||||
CMD ["npx", "gulp", "front"]
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
FROM salix-back
|
||||
EXPOSE 5000
|
||||
|
||||
COPY front front
|
||||
RUN cd front && npm install --ci
|
||||
|
||||
COPY modules modules
|
||||
COPY dist dist
|
||||
COPY jest-front.js ./
|
||||
COPY jest.front.config.js ./
|
||||
COPY fileMock.js ./
|
||||
|
||||
COPY /front/gulpfile.js ./
|
||||
COPY /front/webpack.config.js ./
|
||||
|
||||
|
||||
CMD ["npx", "gulp", "front"]
|
|
@ -4,6 +4,7 @@
|
|||
"author": "Verdnatura Levante SL",
|
||||
"description": "Salix frontend",
|
||||
"license": "GPL-3.0",
|
||||
"type": "module",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://gitea.verdnatura.es/verdnatura/salix"
|
||||
|
|
|
@ -59,6 +59,13 @@ function backWatch(done) {
|
|||
}
|
||||
backWatch.description = `Starts backend in watcher mode`;
|
||||
|
||||
function backTest(done) {
|
||||
let app = require(`./loopback/server/server`);
|
||||
app.start();
|
||||
app.on('started', done);
|
||||
}
|
||||
backOnly.description = `Starts backend service`;
|
||||
|
||||
const back = gulp.series(dockerStart, backWatch);
|
||||
back.description = `Starts backend and database service`;
|
||||
|
||||
|
|
|
@ -107,13 +107,16 @@
|
|||
},
|
||||
"scripts": {
|
||||
"dbtest": "nodemon -q db/tests.js -w db/tests",
|
||||
"test:back": "nodemon -q back/tests.js --config back/nodemonConfig.json",
|
||||
"test:back": "docker compose -f docker-compose.test.yml run --build back npm run test:back:ci",
|
||||
"test:back:ci": "node back/tests.js ci",
|
||||
"test:e2e": "node e2e/helpers/tests.js",
|
||||
"test:front": "jest --watch",
|
||||
"test:front": "docker compose -f docker-compose.test.yml up front --build",
|
||||
"test:front:ci": "jest --ci --maxWorkers=2",
|
||||
"back": "nodemon --inspect -w modules ./node_modules/gulp/bin/gulp.js back",
|
||||
"lint": "eslint ./ --cache --ignore-pattern .gitignore",
|
||||
"docker": "docker build --progress=plain -t salix-db ./db"
|
||||
"docker": "docker build --progress=plain -t salix-db ./db",
|
||||
"start": "docker compose -f docker-compose.local.yml up",
|
||||
"restart": "docker compose -f docker-compose.local.yml up --build"
|
||||
},
|
||||
"jest": {
|
||||
"projects": [
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
gulp build
|
||||
docker-compose -f "docker-compose.local.yml" up --build
|
|
@ -1,159 +0,0 @@
|
|||
require('require-yaml');
|
||||
const webpack = require('webpack');
|
||||
const path = require('path');
|
||||
const merge = require('webpack-merge');
|
||||
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
||||
|
||||
let env = process.env.NODE_ENV || 'development';
|
||||
let mode = env == 'development' ? env : 'production';
|
||||
|
||||
let baseConfig = {
|
||||
entry: {salix: 'salix'},
|
||||
mode,
|
||||
output: {
|
||||
path: path.join(__dirname, 'dist'),
|
||||
publicPath: '/'
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.js$/,
|
||||
loader: 'babel-loader',
|
||||
exclude: /node_modules/,
|
||||
options: {
|
||||
presets: ['@babel/preset-env'],
|
||||
plugins: ['@babel/plugin-syntax-dynamic-import']
|
||||
}
|
||||
}, {
|
||||
test: /\.yml$/,
|
||||
use: ['json-loader!yaml-loader']
|
||||
}, {
|
||||
test: /\.html$/,
|
||||
loader: 'html-loader',
|
||||
options: {
|
||||
attrs: [
|
||||
'img:src',
|
||||
'link:href'
|
||||
]
|
||||
}
|
||||
}, {
|
||||
test: /\.css$/,
|
||||
use: ['style-loader', 'css-loader']
|
||||
}, {
|
||||
test: /\.scss$/,
|
||||
use: [
|
||||
'style-loader', 'css-loader', {
|
||||
loader: 'sass-loader',
|
||||
options: {
|
||||
// XXX: Don't work in Firefox
|
||||
// https://github.com/webpack-contrib/style-loader/issues/303
|
||||
// sourceMap: true,
|
||||
sassOptions: {
|
||||
includePaths: [
|
||||
path.resolve(__dirname, 'front/core/styles/')
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}, {
|
||||
test: /\.(woff(2)?|ttf|eot|svg|png)(\?v=\d+\.\d+\.\d+)?$/,
|
||||
type: 'asset/resource',
|
||||
}, {
|
||||
test: /manifest\.json$/,
|
||||
type: 'javascript/auto',
|
||||
loader: 'file-loader',
|
||||
options: {
|
||||
esModule: false,
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
optimization: {
|
||||
runtimeChunk: true,
|
||||
splitChunks: {
|
||||
chunks: 'all',
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
modules: [
|
||||
`front`,
|
||||
`modules`,
|
||||
`front/node_modules`,
|
||||
`node_modules`
|
||||
],
|
||||
alias: {
|
||||
'vn-loopback': `${__dirname}/loopback`
|
||||
}
|
||||
},
|
||||
watchOptions: {
|
||||
ignored: [
|
||||
'node_modules',
|
||||
'./modules/*/back/**'
|
||||
]
|
||||
},
|
||||
plugins: [
|
||||
new HtmlWebpackPlugin({
|
||||
template: 'front/salix/index.ejs',
|
||||
favicon: 'front/salix/favicon.ico',
|
||||
filename: 'index.html',
|
||||
chunks: ['salix']
|
||||
}),
|
||||
new webpack.DefinePlugin({
|
||||
'process.env.NODE_ENV': JSON.stringify(env)
|
||||
})
|
||||
],
|
||||
devtool: 'source-map',
|
||||
stats: {
|
||||
assets: false,
|
||||
modules: false,
|
||||
children: false,
|
||||
entrypoints: false,
|
||||
colors: true
|
||||
}
|
||||
};
|
||||
|
||||
let prodConfig = {
|
||||
output: {
|
||||
filename: '[name].[chunkhash].js',
|
||||
chunkFilename: '[id].[chunkhash].js'
|
||||
},
|
||||
plugins: [
|
||||
new webpack.ids.HashedModuleIdsPlugin()
|
||||
],
|
||||
performance: {
|
||||
maxEntrypointSize: 2000000,
|
||||
maxAssetSize: 2000000
|
||||
}
|
||||
};
|
||||
|
||||
let devConfig = {
|
||||
output: {
|
||||
filename: '[name].js',
|
||||
chunkFilename: '[id].js'
|
||||
},
|
||||
plugins: [
|
||||
new webpack.HotModuleReplacementPlugin()
|
||||
],
|
||||
devServer: {
|
||||
host: '0.0.0.0',
|
||||
port: 5000,
|
||||
publicPath: '/',
|
||||
contentBase: 'dist',
|
||||
quiet: false,
|
||||
noInfo: false,
|
||||
hot: true,
|
||||
inline: true,
|
||||
stats: baseConfig.stats,
|
||||
proxy: {
|
||||
'/api': 'http://back:3000',
|
||||
'/*/api/**': {
|
||||
target: 'http://back:3000',
|
||||
pathRewrite: {'^/[\\w-]+': ''}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
let mrgConfig = mode === 'development' ? devConfig : prodConfig;
|
||||
module.exports = merge(baseConfig, mrgConfig);
|
Loading…
Reference in New Issue