My guess is there is some translation issues. How I read it was, after your license expires it no longer performs the license check and it just says "I'm Allowed". It probably calls the server with the key, says oh you're license has expired ignore the check. (Note: I could be wrong).
For all I know the key we have is some hash that before it calls out to the external server is decoded and returns a expiration date and then doesn't call the license server if its expired.
I think the guys should provide the full details on what is expected and how the system works with some examples.
They also provided a couple of ways for you to bypass the check, don't run in debug mode. (I wonder if remote debug would trigger the check). Block the site its trying to check against to force it to never work. Don't make copies of the code youre not licensed for.
If they had a non licensed checked subscription for xxx $ would you purchase it? IE Licensed Checked 1 Project 1000, Non Licensen Checked Unlimited 15000. I can only see non license checked as unlimited since they wouldnt have control at that time.
Yeah I've caught on and try to include the time into our sprints :D
That's how we do it. Then we use GITFlow to make a new feature to integrate the changes. GITFlow is just a plugin for git that automates some of the processes for you. It follows a standard methodology.
My steps are: Dotnet restore - Path to MVC Project NPM Install - Path to MVC Project Root folder (IE src/*.Web.MVC) Dotnet build - Path to MVC Project Gulp - Path to GulpFile.js in MVC Project (Using my vstsbuild gulp task) DotNet Publish - Path to MVC project (Zip, add name checked) Publish Artifact - Path to generated artifact
My Modified GulpFile.
/// <binding Clean='clean' />
"use strict";
var gulp = require("gulp"),
async = require('async'),
concat = require("gulp-concat"),
cssmin = require("gulp-cssmin"),
uglify = require("gulp-uglify"),
merge = require("merge-stream"),
rimraf = require("rimraf"),
gutil = require('gulp-util'),
cleanCSS = require('gulp-clean-css'),
runSequence = require('run-sequence'),
bundleconfig = require("./bundle.config.js");
var regex = {
css: /\.css$/,
js: /\.js$/
};
gulp.task("min", ["min:js", "min:css"]);
gulp.task("min:js", function () {
var tasks = getBundles(regex.js).map(function (bundle) {
var outputFileName = getOutputFileName(bundle.outputFileName);
var outputFolder = getOutputFolder(bundle.outputFileName);
console.log(outputFolder + " -- " + outputFileName);
return gulp.src(bundle.inputFiles)
.pipe(concat(outputFileName))
.pipe(gulp.dest(outputFolder));
});
//if (gutil.env.prod) {
var minifyTasks = getBundles(regex.js).map(function (bundle) {
var outputFileName = getOutputFileName(bundle.outputFileName);
var outputFolder = getOutputFolder(bundle.outputFileName);
if (bundle.createMinified === false || outputFileName.endsWith('.min.js')) {
return null;
}
console.log(outputFolder + " -- " + outputFileName);
var minifiedJsOutputFile = outputFileName.substr(0, outputFileName.lastIndexOf(".")) + ".min.js";
return gulp.src(bundle.inputFiles)
.pipe(concat(minifiedJsOutputFile))
.pipe(uglify()).on('error', function (err) { gutil.log(gutil.colors.red('[Error]'), err.toString()); })
.pipe(gulp.dest(outputFolder));
});
for (var i = 0; i < minifyTasks.length; i++) {
if (minifyTasks[i] == null) {
continue;
}
tasks.push(minifyTasks[i]);
}
//}
return merge(tasks);
});
gulp.task("min:css", function () {
var tasks = getBundles(regex.css).map(function (bundle) {
var outputFolder = getOutputFolder(bundle.outputFileName);
var outputFileName = getOutputFileName(bundle.outputFileName);
return gulp.src(bundle.inputFiles)
.pipe(cleanCSS({
level: 0, // no optimization on css file
rebaseTo: outputFolder
}))
.pipe(concat(outputFileName))
.pipe(gulp.dest(outputFolder));
});
//if (gutil.env.prod) {
var minifyTasks = getBundles(regex.css).map(function (bundle) {
var outputFolder = getOutputFolder(bundle.outputFileName);
var outputFileName = getOutputFileName(bundle.outputFileName);
if (bundle.createMinified === false || outputFileName.endsWith('.min.css')) {
return null;
}
var minifiedCssOutputFile = outputFileName.substr(0, outputFileName.lastIndexOf(".")) + ".min.css";
return gulp.src(bundle.inputFiles)
.pipe(cleanCSS({
rebaseTo: outputFolder,
level: 1 // default optimization on css file
}))
.pipe(concat(minifiedCssOutputFile))
.pipe(gulp.dest(outputFolder));
});
for (var i = 0; i < minifyTasks.length; i++) {
if (minifyTasks[i] == null) {
continue;
}
tasks.push(minifyTasks[i]);
}
//}
return merge(tasks);
});
gulp.task("clean_bundles", function (cb) {
async.parallel(bundleconfig.bundles.map(function (bundle) {
return function (done) {
if (bundle.outputFileName.match(/[^/]+(css|js)$/)) {
rimraf(bundle.outputFileName, done);
} else {
rimraf(bundle.outputFileName + '/*', done);
}
}
}), cb);
});
gulp.task("watch", function () {
getBundles(regex.js).forEach(function (bundle) {
gulp.watch(bundle.inputFiles, ["min:js"]);
});
getBundles(regex.css).forEach(function (bundle) {
gulp.watch(bundle.inputFiles, ["min:css"]);
});
gulp.watch('./bundle.config.js', function () {
runSequence(['min:css', 'min:js']);
});
});
gulp.task('copy:node_modules', function () {
rimraf.sync(bundleconfig.libsFolder + '/**/*', { force: true });
var tasks = [];
for (var mapping in bundleconfig.mappings) {
if (bundleconfig.mappings.hasOwnProperty(mapping)) {
var destination = bundleconfig.libsFolder + '/' + bundleconfig.mappings[mapping];
if (mapping.match(/[^/]+(css|js)$/)) {
tasks.push(
gulp.src(mapping).pipe(gulp.dest(destination))
);
} else {
tasks.push(
gulp.src(mapping + '/**/*').pipe(gulp.dest(destination))
);
}
}
}
return merge(tasks);
});
gulp.task('default', ['copy:node_modules'], function () {
runSequence('watch', ['min:css', 'min:js']);
});
function getBundles(regexPattern) {
return bundleconfig.bundles.filter(function (bundle) {
return regexPattern.test(bundle.outputFileName);
});
}
function getOutputFileName(fullFilePath) {
var lastIndexOfSlash = fullFilePath.lastIndexOf('/');
return fullFilePath.substr(lastIndexOfSlash, fullFilePath.length - lastIndexOfSlash);
}
function getOutputFolder(fullFilePath) {
var lastIndexOfSlash = fullFilePath.lastIndexOf('/');
return fullFilePath.substr(0, lastIndexOfSlash);
}
@ismcagdas - I think it might be beneficial to set some type of release schedule. It would help us to also prioritize in our sprints knowing that we will need to spend xx hrs to implement the next version. I would think bi-weekly would good for bugfixes, monthly for larger features/enhancements. Then emergency fixes as needed. Then we can be like hmm, we dont need the biweekly bugfix we can wait until the next one or next feature update.
I mean maybe 10min isnt acceptable for your org to make builds, but for ours its perfectly fine. After its built it will get deployed to the proper site (pending approvals for some). I just looked at our build times and its 5.2min for v 4.6, and 7min for v5. In the v5 I also run the guilpFile which adds 1.5min, if I took t his out our builds would be roughly the same. I see the npm takes maybe 20seconds longer than bower did.
Im not sure what you are expecting to happen. This is a packaged product, you dont like it, you dont have to use it, but since you have the source code you and modify it will. You dont like that it includes all the extra JS bloat then take it out :) Make sure you share the code though so I can copy it, we use DevExtreme for everything so we dont need any of the extra JS they package, so we plan to strip it out and re-make all their base pages using the DevExtreme features when we have time, but its not a huge issue for us since all the features that the end users would see are using DevExtreme and anything an admin person would configure is in their jtables or whatever.
Note: we dont use angular so maybe there is extra packages/times I dont know about.
Here is my gulp file, i made a new task called vstsbuild it removes the watch function and I removed the prod check in the min functions. On our build server I run the vstsbuild. I had issues where if I didnt remove the prod check some of the min files wouldnt get update, not sure if it was a permission issue or this prod check. But I ended up removing everything from the bundles dir and the prod check and everything works fine now.
/// <binding Clean='clean' />
"use strict";
var gulp = require("gulp"),
async = require('async'),
concat = require("gulp-concat"),
cssmin = require("gulp-cssmin"),
uglify = require("gulp-uglify"),
merge = require("merge-stream"),
rimraf = require("rimraf"),
gutil = require('gulp-util'),
cleanCSS = require('gulp-clean-css'),
runSequence = require('run-sequence'),
bundleconfig = require("./bundle.config.js");
var regex = {
css: /\.css$/,
js: /\.js$/
};
gulp.task("min", ["min:js", "min:css"]);
gulp.task("min:js", function () {
var tasks = getBundles(regex.js).map(function (bundle) {
var outputFileName = getOutputFileName(bundle.outputFileName);
var outputFolder = getOutputFolder(bundle.outputFileName);
console.log(outputFolder + " -- " + outputFileName);
return gulp.src(bundle.inputFiles)
.pipe(concat(outputFileName))
.pipe(gulp.dest(outputFolder));
});
//if (gutil.env.prod) {
var minifyTasks = getBundles(regex.js).map(function (bundle) {
var outputFileName = getOutputFileName(bundle.outputFileName);
var outputFolder = getOutputFolder(bundle.outputFileName);
if (bundle.createMinified === false || outputFileName.endsWith('.min.js')) {
return null;
}
console.log(outputFolder + " -- " + outputFileName);
var minifiedJsOutputFile = outputFileName.substr(0, outputFileName.lastIndexOf(".")) + ".min.js";
return gulp.src(bundle.inputFiles)
.pipe(concat(minifiedJsOutputFile))
.pipe(uglify()).on('error', function (err) { gutil.log(gutil.colors.red('[Error]'), err.toString()); })
.pipe(gulp.dest(outputFolder));
});
for (var i = 0; i < minifyTasks.length; i++) {
if (minifyTasks[i] == null) {
continue;
}
tasks.push(minifyTasks[i]);
}
//}
return merge(tasks);
});
gulp.task("min:css", function () {
var tasks = getBundles(regex.css).map(function (bundle) {
var outputFolder = getOutputFolder(bundle.outputFileName);
var outputFileName = getOutputFileName(bundle.outputFileName);
return gulp.src(bundle.inputFiles)
.pipe(cleanCSS({
level: 0, // no optimization on css file
rebaseTo: outputFolder
}))
.pipe(concat(outputFileName))
.pipe(gulp.dest(outputFolder));
});
//if (gutil.env.prod) {
var minifyTasks = getBundles(regex.css).map(function (bundle) {
var outputFolder = getOutputFolder(bundle.outputFileName);
var outputFileName = getOutputFileName(bundle.outputFileName);
if (bundle.createMinified === false || outputFileName.endsWith('.min.css')) {
return null;
}
var minifiedCssOutputFile = outputFileName.substr(0, outputFileName.lastIndexOf(".")) + ".min.css";
return gulp.src(bundle.inputFiles)
.pipe(cleanCSS({
rebaseTo: outputFolder,
level: 1 // default optimization on css file
}))
.pipe(concat(minifiedCssOutputFile))
.pipe(gulp.dest(outputFolder));
});
for (var i = 0; i < minifyTasks.length; i++) {
if (minifyTasks[i] == null) {
continue;
}
tasks.push(minifyTasks[i]);
}
//}
return merge(tasks);
});
gulp.task("clean_bundles", function (cb) {
async.parallel(bundleconfig.bundles.map(function (bundle) {
return function (done) {
if (bundle.outputFileName.match(/[^/]+(css|js)$/)) {
rimraf(bundle.outputFileName, done);
} else {
rimraf(bundle.outputFileName + '/*', done);
}
}
}), cb);
});
gulp.task("watch", function () {
getBundles(regex.js).forEach(function (bundle) {
gulp.watch(bundle.inputFiles, ["min:js"]);
});
getBundles(regex.css).forEach(function (bundle) {
gulp.watch(bundle.inputFiles, ["min:css"]);
});
gulp.watch('./bundle.config.js', function () {
runSequence(['min:css', 'min:js']);
});
});
gulp.task('copy:node_modules', function () {
rimraf.sync(bundleconfig.libsFolder + '/**/*', { force: true });
var tasks = [];
for (var mapping in bundleconfig.mappings) {
if (bundleconfig.mappings.hasOwnProperty(mapping)) {
var destination = bundleconfig.libsFolder + '/' + bundleconfig.mappings[mapping];
if (mapping.match(/[^/]+(css|js)$/)) {
tasks.push(
gulp.src(mapping).pipe(gulp.dest(destination))
);
} else {
tasks.push(
gulp.src(mapping + '/**/*').pipe(gulp.dest(destination))
);
}
}
}
return merge(tasks);
});
gulp.task('default', ['copy:node_modules'], function () {
runSequence('watch', ['min:css', 'min:js']);
});
gulp.task('vstsbuild', ['copy:node_modules'], function () {
runSequence(['min:css', 'min:js']);
});
function getBundles(regexPattern) {
return bundleconfig.bundles.filter(function (bundle) {
return regexPattern.test(bundle.outputFileName);
});
}
function getOutputFileName(fullFilePath) {
var lastIndexOfSlash = fullFilePath.lastIndexOf('/');
return fullFilePath.substr(lastIndexOfSlash, fullFilePath.length - lastIndexOfSlash);
}
function getOutputFolder(fullFilePath) {
var lastIndexOfSlash = fullFilePath.lastIndexOf('/');
return fullFilePath.substr(0, lastIndexOfSlash);
}
You can always modify whats in your packages to remove things you dont need. The other option is to bloat your repository with all the packages when you check in (remove them from the git ignore) then you dont need to do any npm installs, not sure if this will be faster since your build server would still need to download the files, though if its a local machine it might be faster.
For me it takes 7-10min to build on our hosted box at MS. Thats with doing a full package install and making new min js/css.
If you login to the site w/a username/password you don't need a token and can test the endpoints that way.
We don't usually use {Tenancy_Name} with our local/dev machines. If you remove it from the config when you goto login you can choose what tenant you want to use. Then in our Prod environment we have our build server add it back in and it works fine (Note you have have to have a wild card DNS and the bindings properly set for your domains to make it work)