mirror of
https://github.com/nextcloud/server.git
synced 2026-06-08 16:26:59 -04:00
Merge pull request #9766 from nextcloud/vue-build-tests
Add vue apps build tests
This commit is contained in:
commit
132597bbd3
20 changed files with 3783 additions and 8532 deletions
15
.drone.yml
15
.drone.yml
|
|
@ -14,6 +14,20 @@ pipeline:
|
|||
when:
|
||||
matrix:
|
||||
TESTS: jsunit
|
||||
vue-build-settings:
|
||||
image: node
|
||||
commands:
|
||||
- ./build/vue-builds.sh ./settings/js/main.js
|
||||
when:
|
||||
matrix:
|
||||
TESTS: vue-builds
|
||||
vue-build-updatenotification:
|
||||
image: node
|
||||
commands:
|
||||
- ./build/vue-builds.sh ./apps/updatenotification/js/merged.js
|
||||
when:
|
||||
matrix:
|
||||
TESTS: vue-builds
|
||||
checkers:
|
||||
image: nextcloudci/php7.0:php7.0-19
|
||||
commands:
|
||||
|
|
@ -662,6 +676,7 @@ pipeline:
|
|||
matrix:
|
||||
include:
|
||||
- TESTS: checkers
|
||||
- TESTS: vue-builds
|
||||
- TESTS: nodb-codecov
|
||||
ENABLE_REDIS: true
|
||||
- TESTS: db-codecov
|
||||
|
|
|
|||
4
.gitignore
vendored
4
.gitignore
vendored
|
|
@ -32,8 +32,8 @@
|
|||
!/apps/admin_audit
|
||||
!/apps/updatenotification
|
||||
/apps/updatenotification/build
|
||||
/apps/updatenotification/js/merged.js
|
||||
/apps/updatenotification/js/merged.js.map
|
||||
#/apps/updatenotification/js/merged.js
|
||||
#/apps/updatenotification/js/merged.js.map
|
||||
/apps/updatenotification/js/*.hot-update.*
|
||||
/apps/updatenotification/node_modules
|
||||
!/apps/theming
|
||||
|
|
|
|||
|
|
@ -3,14 +3,15 @@ app_name=updatenotification
|
|||
project_dir=$(CURDIR)/../$(app_name)
|
||||
build_dir=$(CURDIR)/build
|
||||
source_dir=$(build_dir)/$(app_name)
|
||||
sign_dir=$(build_dir)/sign
|
||||
|
||||
all: package
|
||||
all: dev-setup build-js-production
|
||||
|
||||
dev-setup: clean npm-update build-js
|
||||
dev-setup: clean clean-dev npm-init
|
||||
|
||||
npm-init:
|
||||
npm install
|
||||
|
||||
npm-update:
|
||||
rm -rf node_modules
|
||||
npm update
|
||||
|
||||
build-js:
|
||||
|
|
@ -19,9 +20,17 @@ build-js:
|
|||
build-js-production:
|
||||
npm run build
|
||||
|
||||
watch-js:
|
||||
npm run watch
|
||||
|
||||
clean:
|
||||
rm -f js/merged.js
|
||||
rm -f js/merged.js.map
|
||||
rm -rf $(build_dir)
|
||||
|
||||
clean-dev:
|
||||
rm -rf node_modules
|
||||
|
||||
package: clean build-js-production
|
||||
mkdir -p $(source_dir)
|
||||
rsync -a \
|
||||
|
|
|
|||
|
|
@ -1,54 +0,0 @@
|
|||
/**
|
||||
* @copyright (c) 2018 Joas Schilling <coding@schilljs.com>
|
||||
*
|
||||
* @author Joas Schilling <coding@schilljs.com>
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later. See the COPYING file.
|
||||
*/
|
||||
|
||||
/* global $, define */
|
||||
|
||||
define(function (require) {
|
||||
"use strict";
|
||||
|
||||
return {
|
||||
|
||||
/** @type {Vue|null} */
|
||||
vm: null,
|
||||
|
||||
/**
|
||||
* Initialise the app
|
||||
*/
|
||||
initialise: function() {
|
||||
var data = JSON.parse($('#updatenotification').attr('data-json'));
|
||||
var Vue = require('vue');
|
||||
var vSelect = require('vue-select');
|
||||
Vue.component('v-select', vSelect.VueSelect);
|
||||
Vue.mixin({
|
||||
methods: {
|
||||
t: function(app, text, vars, count, options) {
|
||||
return OC.L10N.translate(app, text, vars, count, options);
|
||||
},
|
||||
n: function(app, textSingular, textPlural, count, vars, options) {
|
||||
return OC.L10N.translatePlural(app, textSingular, textPlural, count, vars, options);
|
||||
}
|
||||
}
|
||||
});
|
||||
this.vm = new Vue(require('./components/root.vue'));
|
||||
|
||||
this.vm.newVersionString = data.newVersionString;
|
||||
this.vm.lastCheckedDate = data.lastChecked;
|
||||
this.vm.isUpdateChecked = data.isUpdateChecked;
|
||||
this.vm.updaterEnabled = data.updaterEnabled;
|
||||
this.vm.downloadLink = data.downloadLink;
|
||||
this.vm.isNewVersionAvailable = data.isNewVersionAvailable;
|
||||
this.vm.updateServerURL = data.updateServerURL;
|
||||
this.vm.currentChannel = data.currentChannel;
|
||||
this.vm.channels = data.channels;
|
||||
this.vm.notifyGroups = data.notifyGroups;
|
||||
this.vm.isDefaultUpdateServerURL = data.isDefaultUpdateServerURL;
|
||||
this.vm.versionIsEol = data.versionIsEol;
|
||||
}
|
||||
};
|
||||
});
|
||||
|
|
@ -79,11 +79,13 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import vSelect from 'vue-select';
|
||||
|
||||
export default {
|
||||
name: "root",
|
||||
|
||||
el: '#updatenotification',
|
||||
|
||||
name: 'root',
|
||||
components: {
|
||||
vSelect,
|
||||
},
|
||||
data: function () {
|
||||
return {
|
||||
newVersionString: '',
|
||||
|
|
@ -261,7 +263,23 @@
|
|||
this.hideAvailableUpdates = !this.hideAvailableUpdates;
|
||||
}
|
||||
},
|
||||
beforeMount: function() {
|
||||
// Parse server data
|
||||
var data = JSON.parse($('#updatenotification').attr('data-json'));
|
||||
|
||||
this.newVersionString = data.newVersionString;
|
||||
this.lastCheckedDate = data.lastChecked;
|
||||
this.isUpdateChecked = data.isUpdateChecked;
|
||||
this.updaterEnabled = data.updaterEnabled;
|
||||
this.downloadLink = data.downloadLink;
|
||||
this.isNewVersionAvailable = data.isNewVersionAvailable;
|
||||
this.updateServerURL = data.updateServerURL;
|
||||
this.currentChannel = data.currentChannel;
|
||||
this.channels = data.channels;
|
||||
this.notifyGroups = data.notifyGroups;
|
||||
this.isDefaultUpdateServerURL = data.isDefaultUpdateServerURL;
|
||||
this.versionIsEol = data.versionIsEol;
|
||||
},
|
||||
mounted: function () {
|
||||
this._$el = $(this.$el);
|
||||
this._$releaseChannel = this._$el.find('#release-channel');
|
||||
|
|
@ -271,15 +289,12 @@
|
|||
}.bind(this));
|
||||
|
||||
$.ajax({
|
||||
url: OC.generateUrl('/settings/users/groups'),
|
||||
url: OC.linkToOCS('cloud', 2)+ '/groups',
|
||||
dataType: 'json',
|
||||
success: function(data) {
|
||||
var results = [];
|
||||
$.each(data.data.adminGroups, function(i, group) {
|
||||
results.push({value: group.id, label: group.name});
|
||||
});
|
||||
$.each(data.data.groups, function(i, group) {
|
||||
results.push({value: group.id, label: group.name});
|
||||
$.each(data.ocs.data.groups, function(i, group) {
|
||||
results.push({value: group, label: group});
|
||||
});
|
||||
|
||||
this.availableGroups = results;
|
||||
|
|
|
|||
|
|
@ -19,13 +19,22 @@
|
|||
*/
|
||||
|
||||
/* global define, $ */
|
||||
import Vue from 'vue';
|
||||
import Root from './components/root'
|
||||
|
||||
define(function(require) {
|
||||
'use strict';
|
||||
|
||||
var App = require('./app');
|
||||
|
||||
$(function() {
|
||||
App.initialise();
|
||||
});
|
||||
Vue.mixin({
|
||||
methods: {
|
||||
t: function(app, text, vars, count, options) {
|
||||
return OC.L10N.translate(app, text, vars, count, options);
|
||||
},
|
||||
n: function(app, textSingular, textPlural, count, vars, options) {
|
||||
return OC.L10N.translatePlural(app, textSingular, textPlural, count, vars, options);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const vm = new Vue({
|
||||
render: h => h(Root)
|
||||
}).$mount('#updatenotification');
|
||||
|
||||
|
||||
|
|
|
|||
28
apps/updatenotification/js-src/webpack.common.js
Normal file
28
apps/updatenotification/js-src/webpack.common.js
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
const path = require('path')
|
||||
const { VueLoaderPlugin } = require('vue-loader');
|
||||
|
||||
module.exports = {
|
||||
entry: './js-src/init.js',
|
||||
output: {
|
||||
path: path.resolve(__dirname, '../js'),
|
||||
publicPath: '/',
|
||||
filename: 'merged.js'
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.vue$/,
|
||||
loader: 'vue-loader',
|
||||
}
|
||||
]
|
||||
},
|
||||
plugins: [
|
||||
new VueLoaderPlugin()
|
||||
],
|
||||
resolve: {
|
||||
alias: {
|
||||
'vue$': 'vue/dist/vue.esm.js'
|
||||
},
|
||||
extensions: ['*', '.js', '.vue', '.json']
|
||||
}
|
||||
}
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
var path = require('path');
|
||||
var webpack = require('webpack');
|
||||
|
||||
module.exports = {
|
||||
entry: './js-src/init.js',
|
||||
output: {
|
||||
path: path.resolve(__dirname, '../js'),
|
||||
publicPath: '/',
|
||||
filename: 'merged.js'
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.vue$/,
|
||||
loader: 'vue-loader',
|
||||
options: {
|
||||
loaders: {
|
||||
},
|
||||
esModule: false
|
||||
// other vue-loader options go here
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
'vue-select': 'vue-select/dist/vue-select.js',
|
||||
'vue': process.env.NODE_ENV === 'production' ? 'vue/dist/vue.min.js' : 'vue/dist/vue.js'
|
||||
}
|
||||
},
|
||||
performance: {
|
||||
hints: false
|
||||
},
|
||||
devtool: '#eval-source-map'
|
||||
};
|
||||
|
||||
if (process.env.NODE_ENV === 'production') {
|
||||
module.exports.devtool = '#source-map';
|
||||
// http://vue-loader.vuejs.org/en/workflow/production.html
|
||||
module.exports.plugins = (module.exports.plugins || []).concat([
|
||||
new webpack.DefinePlugin({
|
||||
'process.env': {
|
||||
NODE_ENV: '"production"'
|
||||
}
|
||||
}),
|
||||
new webpack.optimize.UglifyJsPlugin({
|
||||
sourceMap: true,
|
||||
compress: {
|
||||
warnings: false
|
||||
}
|
||||
}),
|
||||
new webpack.LoaderOptionsPlugin({
|
||||
minimize: true
|
||||
})
|
||||
]);
|
||||
}
|
||||
12
apps/updatenotification/js-src/webpack.dev.js
Normal file
12
apps/updatenotification/js-src/webpack.dev.js
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
const merge = require('webpack-merge');
|
||||
const common = require('./webpack.common.js');
|
||||
|
||||
module.exports = merge(common, {
|
||||
mode: 'development',
|
||||
devServer: {
|
||||
historyApiFallback: true,
|
||||
noInfo: true,
|
||||
overlay: true
|
||||
},
|
||||
devtool: '#eval-source-map',
|
||||
})
|
||||
7
apps/updatenotification/js-src/webpack.prod.js
Normal file
7
apps/updatenotification/js-src/webpack.prod.js
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
const merge = require('webpack-merge')
|
||||
const common = require('./webpack.common.js')
|
||||
|
||||
module.exports = merge(common, {
|
||||
mode: 'production',
|
||||
devtool: '#source-map'
|
||||
})
|
||||
27
apps/updatenotification/js/merged.js
Normal file
27
apps/updatenotification/js/merged.js
Normal file
File diff suppressed because one or more lines are too long
1
apps/updatenotification/js/merged.js.map
Normal file
1
apps/updatenotification/js/merged.js.map
Normal file
File diff suppressed because one or more lines are too long
5414
apps/updatenotification/package-lock.json
generated
5414
apps/updatenotification/package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "notifications",
|
||||
"version": "2.2.0",
|
||||
"version": "2.3.0",
|
||||
"description": "This app provides a backend and frontend for the notification API available in Nextcloud.",
|
||||
"main": "init.js",
|
||||
"directories": {
|
||||
|
|
@ -8,8 +8,9 @@
|
|||
"test": "tests"
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "cross-env NODE_ENV=development webpack --progress --hot --config js-src/webpack.config.js --watch",
|
||||
"build": "cross-env NODE_ENV=production webpack --progress --hide-modules --config js-src/webpack.config.js",
|
||||
"dev": "webpack --config js-src/webpack.dev.js",
|
||||
"watch": "webpack --progress --watch --config js-src/webpack.dev.js",
|
||||
"build": "webpack --progress --hide-modules --config js-src/webpack.prod.js",
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
|
|
@ -27,11 +28,12 @@
|
|||
"vue-select": "^2.4.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"cross-env": "^5.1.6",
|
||||
"css-loader": "^0.28.11",
|
||||
"file-loader": "^1.1.6",
|
||||
"vue-loader": "^13.7.0",
|
||||
"file-loader": "^1.1.11",
|
||||
"vue-loader": "^15.2.4",
|
||||
"vue-template-compiler": "^2.5.16",
|
||||
"webpack": "^3.6.0"
|
||||
"webpack": "^4.11.1",
|
||||
"webpack-cli": "^3.0.3",
|
||||
"webpack-merge": "^4.1.2"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
37
build/vue-builds.sh
Executable file
37
build/vue-builds.sh
Executable file
|
|
@ -0,0 +1,37 @@
|
|||
#!/bin/bash
|
||||
|
||||
declare -a apps=("./settings/js/main.js" "./apps/updatenotification/js/merged.js")
|
||||
root=$(pwd)
|
||||
entryFile=$1
|
||||
|
||||
if [ ! -f "$entryFile" ]
|
||||
then
|
||||
echo "The build file $entryFile does not exists"
|
||||
exit 2
|
||||
else
|
||||
backupFile="$entryFile.orig"
|
||||
path=$(dirname "$entryFile")
|
||||
|
||||
# Backup original file
|
||||
echo "Backing up $entryFile to $backupFile"
|
||||
cp $entryFile $backupFile
|
||||
|
||||
# Make the app
|
||||
set -e
|
||||
cd "$path/../"
|
||||
make
|
||||
|
||||
# Reset
|
||||
cd $root
|
||||
|
||||
# Compare build files
|
||||
echo "Comparing $entryFile to the original"
|
||||
if ! diff -q $entryFile $backupFile &>/dev/null
|
||||
then
|
||||
echo "$entryFile build is NOT up-to-date! Please send the proper production build within the pull request"
|
||||
cat $HOME/.npm/_logs/*.log
|
||||
exit 2
|
||||
else
|
||||
echo "$entryFile build is up-to-date"
|
||||
fi
|
||||
fi
|
||||
3493
settings/js/main.js
3493
settings/js/main.js
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
3044
settings/package-lock.json
generated
3044
settings/package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -34,10 +34,10 @@
|
|||
"babel-preset-stage-3": "^6.24.1",
|
||||
"css-loader": "^0.28.11",
|
||||
"file-loader": "^1.1.11",
|
||||
"vue-loader": "^14.2.2",
|
||||
"vue-loader": "^15.2.4",
|
||||
"vue-template-compiler": "^2.5.16",
|
||||
"webpack": "^4.8.3",
|
||||
"webpack-cli": "^2.1.4",
|
||||
"webpack": "^4.11.1",
|
||||
"webpack-cli": "^3.0.2",
|
||||
"webpack-merge": "^4.1.2"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
const path = require('path')
|
||||
const { VueLoaderPlugin } = require('vue-loader');
|
||||
|
||||
module.exports = {
|
||||
entry: './src/main.js',
|
||||
output: {
|
||||
path: path.resolve(__dirname, './js'),
|
||||
publicPath: '/dist/',
|
||||
publicPath: '/',
|
||||
filename: 'main.js'
|
||||
},
|
||||
module: {
|
||||
|
|
@ -12,39 +13,30 @@ module.exports = {
|
|||
{
|
||||
test: /\.css$/,
|
||||
use: [
|
||||
'vue-style-loader',
|
||||
'css-loader'
|
||||
],
|
||||
},
|
||||
{
|
||||
test: /\.scss$/,
|
||||
use: [
|
||||
'vue-style-loader',
|
||||
'css-loader',
|
||||
'css-loader',
|
||||
'sass-loader'
|
||||
],
|
||||
},
|
||||
{
|
||||
test: /\.vue$/,
|
||||
loader: 'vue-loader',
|
||||
options: {
|
||||
loaders: {}
|
||||
// other vue-loader options go here
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.js$/,
|
||||
loader: 'babel-loader',
|
||||
exclude: /node_modules/
|
||||
},
|
||||
{
|
||||
test: /\.(png|jpg|gif|svg)$/,
|
||||
loader: 'file-loader',
|
||||
options: {
|
||||
name: '[name].[ext]?[hash]'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
plugins: [
|
||||
new VueLoaderPlugin()
|
||||
],
|
||||
resolve: {
|
||||
alias: {
|
||||
'vue$': 'vue/dist/vue.esm.js'
|
||||
|
|
|
|||
Loading…
Reference in a new issue