mirror of
https://github.com/mdbootstrap/mdb-ui-kit.git
synced 2025-02-03 13:24:16 +03:00
update docs with removal of grunt
This commit is contained in:
parent
30be30c51c
commit
3088171c65
637
Gruntfile.js
637
Gruntfile.js
|
@ -1,637 +0,0 @@
|
|||
module.exports = function (grunt) {
|
||||
'use strict';
|
||||
|
||||
// Force use of Unix newlines
|
||||
grunt.util.linefeed = '\n';
|
||||
|
||||
RegExp.quote = function (string) {
|
||||
return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&');
|
||||
};
|
||||
|
||||
var referenceDocNotice =
|
||||
'$1\n\n'
|
||||
+ '[//]: # DO NOT EDIT IT WILL BE OVERWRITTEN - copy of bootstrap documentation generated by grunt docs-copy-bootstrap-docs\n\n'
|
||||
+ '{% callout info %}\n**Bootstrap Reference Documentation** \n'
|
||||
+ 'This is a part of the reference documentation from <a href="http://getbootstrap.com">Bootstrap</a>. \n'
|
||||
+ 'It is included here to demonstrate rendering with Material Design for Bootstrap default styling. \n'
|
||||
+ 'See the <a href="/material-design/buttons">Material Design</a> section for more elements and customization options.\n'
|
||||
+ '{% endcallout %}'
|
||||
+ '\n\n$2'
|
||||
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
var glob = require('glob');
|
||||
var isTravis = require('is-travis');
|
||||
var npmShrinkwrap = require('npm-shrinkwrap');
|
||||
var mq4HoverShim = require('mq4-hover-shim');
|
||||
var autoprefixer = require('autoprefixer')({
|
||||
browsers: [
|
||||
//
|
||||
// Official browser support policy:
|
||||
// http://v4-alpha.getbootstrap.com/getting-started/browsers-devices/#supported-browsers
|
||||
//
|
||||
'Chrome >= 35', // Exact version number here is kinda arbitrary
|
||||
// Rather than using Autoprefixer's native "Firefox ESR" version specifier string,
|
||||
// we deliberately hardcode the number. This is to avoid unwittingly severely breaking the previous ESR in the event that:
|
||||
// (a) we happen to ship a new Bootstrap release soon after the release of a new ESR,
|
||||
// such that folks haven't yet had a reasonable amount of time to upgrade; and
|
||||
// (b) the new ESR has unprefixed CSS properties/values whose absence would severely break webpages
|
||||
// (e.g. `box-sizing`, as opposed to `background: linear-gradient(...)`).
|
||||
// Since they've been unprefixed, Autoprefixer will stop prefixing them,
|
||||
// thus causing them to not work in the previous ESR (where the prefixes were required).
|
||||
'Firefox >= 31', // Current Firefox Extended Support Release (ESR)
|
||||
// Note: Edge versions in Autoprefixer & Can I Use refer to the EdgeHTML rendering engine version,
|
||||
// NOT the Edge app version shown in Edge's "About" screen.
|
||||
// For example, at the time of writing, Edge 20 on an up-to-date system uses EdgeHTML 12.
|
||||
// See also https://github.com/Fyrd/caniuse/issues/1928
|
||||
'Edge >= 12',
|
||||
'Explorer >= 9',
|
||||
// Out of leniency, we prefix these 1 version further back than the official policy.
|
||||
'iOS >= 8',
|
||||
'Safari >= 8',
|
||||
// The following remain NOT officially supported, but we're lenient and include their prefixes to avoid severely breaking in them.
|
||||
'Android 2.3',
|
||||
'Android >= 4',
|
||||
'Opera >= 12'
|
||||
]
|
||||
});
|
||||
|
||||
// Project configuration.
|
||||
grunt.initConfig({
|
||||
|
||||
// Metadata.
|
||||
pkg: grunt.file.readJSON('package.json'),
|
||||
banner: '/*!\n' +
|
||||
' * Bootstrap Material Design v<%= pkg.version %> (<%= pkg.homepage %>)\n' +
|
||||
' * Copyright 2014-<%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' +
|
||||
' * Licensed under MIT (https://github.com/FezVrasta/bootstrap-material-design/blob/master/LICENSE)\n' +
|
||||
' */\n',
|
||||
|
||||
// Task configuration.
|
||||
clean: {
|
||||
dist: 'dist',
|
||||
'dist-css': 'dist/css',
|
||||
'dist-js': 'dist/js',
|
||||
'docs-dist-js': 'docs/dist/js',
|
||||
'docs-dist-css': 'docs/dist/css'
|
||||
},
|
||||
|
||||
sass: {
|
||||
options: {
|
||||
includePaths: ['scss', 'node_modules'],
|
||||
precision: 6,
|
||||
sourceComments: true,
|
||||
sourceMap: true,
|
||||
outputStyle: 'expanded'
|
||||
},
|
||||
core: {
|
||||
files: {
|
||||
'dist/css/<%= pkg.name %>.css': 'scss/<%= pkg.name %>.scss'
|
||||
}
|
||||
},
|
||||
docs: {
|
||||
files: {
|
||||
'docs/dist/css/docs.css': 'docs/assets/scss/docs.scss'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
eslint: {
|
||||
options: {
|
||||
configFile: 'js/.eslintrc'
|
||||
},
|
||||
target: ['js/src/*.js', 'docs/assets/js/src/*.js']
|
||||
},
|
||||
|
||||
jscs: {
|
||||
options: {
|
||||
config: 'js/.jscsrc'
|
||||
},
|
||||
grunt: {
|
||||
src: ['Gruntfile.js', 'grunt/*.js']
|
||||
},
|
||||
core: {
|
||||
src: 'js/src/*.js'
|
||||
},
|
||||
test: {
|
||||
src: 'js/tests/unit/*.js'
|
||||
},
|
||||
docs: {
|
||||
options: {
|
||||
requireCamelCaseOrUpperCaseIdentifiers: null
|
||||
},
|
||||
src: ['docs/assets/js/src/*.js', 'docs/assets/js/*.js', '!docs/assets/js/*.min.js']
|
||||
}
|
||||
},
|
||||
|
||||
stamp: {
|
||||
options: {
|
||||
banner: '<%= banner %>\n'
|
||||
},
|
||||
core: {
|
||||
files: {
|
||||
src: 'dist/js/*.js'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
//concat: {
|
||||
// options: {
|
||||
// stripBanners: false,
|
||||
// sourceMap: true
|
||||
// },
|
||||
|
||||
uglify: {
|
||||
options: {
|
||||
compress: {
|
||||
warnings: true
|
||||
},
|
||||
mangle: false,
|
||||
preserveComments: /^!|@preserve|@license|@cc_on/i
|
||||
},
|
||||
|
||||
dist: {
|
||||
files: {
|
||||
'dist/js/bootstrap-material-design.iife.min.js': 'dist/js/bootstrap-material-design.iife.js',
|
||||
'dist/js/bootstrap-material-design.umd.min.js': 'dist/js/bootstrap-material-design.umd.js'
|
||||
//,
|
||||
//'dist/js/bootstrap-material-design.es.min.js': 'dist/js/bootstrap-material-design.es.js'
|
||||
}
|
||||
},
|
||||
|
||||
'docs-vendor': {
|
||||
options: {
|
||||
compress: false
|
||||
},
|
||||
src: 'docs/assets/js/vendor/*.js',
|
||||
//dest: 'docs/assets/js/docs.min.js'
|
||||
dest: 'docs/dist/js/docs-vendor.min.js'
|
||||
},
|
||||
docs: {
|
||||
files: {
|
||||
'docs/dist/js/docs.iife.min.js': 'docs/dist/js/docs.iife.js'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
qunit: {
|
||||
options: {
|
||||
inject: 'js/tests/unit/phantom.js'
|
||||
},
|
||||
files: 'js/tests/index.html'
|
||||
},
|
||||
|
||||
// CSS build configuration
|
||||
scsslint: {
|
||||
options: {
|
||||
bundleExec: true,
|
||||
config: 'scss/.scss-lint.yml',
|
||||
reporterOutput: null
|
||||
},
|
||||
core: {
|
||||
src: ['scss/*.scss', '!scss/_normalize.scss']
|
||||
},
|
||||
docs: {
|
||||
src: ['docs/assets/scss/*.scss', '!scss/_normalize.scss', '!docs/assets/scss/docs.scss']
|
||||
}
|
||||
},
|
||||
|
||||
postcss: {
|
||||
core: {
|
||||
options: {
|
||||
map: true,
|
||||
processors: [
|
||||
mq4HoverShim.postprocessorFor({hoverSelectorPrefix: '.bs-true-hover '}),
|
||||
autoprefixer
|
||||
]
|
||||
},
|
||||
src: 'dist/css/*.css'
|
||||
},
|
||||
docs: {
|
||||
options: {
|
||||
processors: [
|
||||
autoprefixer
|
||||
]
|
||||
},
|
||||
src: 'docs/dist/css/*.css'
|
||||
},
|
||||
examples: {
|
||||
options: {
|
||||
processors: [
|
||||
autoprefixer
|
||||
]
|
||||
},
|
||||
expand: true,
|
||||
cwd: 'docs/examples/',
|
||||
src: ['**/*.css'],
|
||||
dest: 'docs/examples/'
|
||||
}
|
||||
},
|
||||
|
||||
cssmin: {
|
||||
options: {
|
||||
// TODO: disable `zeroUnits` optimization once clean-css 3.2 is released
|
||||
// and then simplify the fix for https://github.com/twbs/bootstrap/issues/14837 accordingly
|
||||
compatibility: 'ie9',
|
||||
keepSpecialComments: '*',
|
||||
sourceMap: true,
|
||||
advanced: false
|
||||
},
|
||||
core: {
|
||||
files: [
|
||||
{
|
||||
expand: true,
|
||||
cwd: 'dist/css',
|
||||
src: ['*.css', '!*.min.css'],
|
||||
dest: 'dist/css',
|
||||
ext: '.min.css'
|
||||
}
|
||||
]
|
||||
},
|
||||
docs: {
|
||||
files: [
|
||||
{
|
||||
expand: true,
|
||||
cwd: 'docs/dist/css',
|
||||
src: ['*.css', '!*.min.css'],
|
||||
dest: 'docs/dist/css',
|
||||
ext: '.min.css'
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
copy: {
|
||||
//'dist-to-docs': { // for example templates
|
||||
// expand: true,
|
||||
// cwd: 'dist',
|
||||
// src: [
|
||||
// 'js/*.iife*',
|
||||
// 'css/*.*'
|
||||
// ],
|
||||
// dest: 'docs/dist/'
|
||||
//},
|
||||
//'bs-docs-js-vendor': {
|
||||
// expand: true,
|
||||
// cwd: '../bootstrap/docs/assets/js/vendor',
|
||||
// src: [
|
||||
// '**/*',
|
||||
// '!tether.min.js',
|
||||
// '!jquery.min.js'
|
||||
// ],
|
||||
// dest: 'docs/assets/js/vendor/'
|
||||
//},
|
||||
//'bs-docs-plugins': {
|
||||
// expand: true,
|
||||
// cwd: '../bootstrap/docs/_plugins',
|
||||
// src: ['**/*', '!bridge.rb'],
|
||||
// dest: 'docs/_plugins/'
|
||||
//},
|
||||
//'bs-docs-scss': {
|
||||
// options: {
|
||||
// // https://regex101.com/r/hG8lU4/1
|
||||
// process: function (content, srcpath) {
|
||||
// return content.replace(/([\s\S]+)/mg, '// DO NOT EDIT IT WILL BE OVERWRITTEN - copy of bootstrap documentation generated by grunt docs-copy-bootstrap-docs\n\n$1');
|
||||
// }
|
||||
// },
|
||||
// expand: true,
|
||||
// cwd: '../bootstrap/docs/assets/scss',
|
||||
// src: [
|
||||
// '**/*',
|
||||
// '!docs.scss' // keep variable customizations
|
||||
// ],
|
||||
// dest: 'docs/assets/scss/'
|
||||
//},
|
||||
//'bs-docs-components': {
|
||||
// options: {
|
||||
// // //https://regex101.com/r/cZ7aO8/2
|
||||
// process: function (content, srcpath) {
|
||||
// return content.replace(/(---[\s\S]+?---)([\s\S]+)/mg, referenceDocNotice);
|
||||
// }
|
||||
// },
|
||||
// expand: true,
|
||||
// cwd: '../bootstrap/docs/components',
|
||||
// src: [
|
||||
// '**/*'
|
||||
// ],
|
||||
// dest: 'docs/components/'
|
||||
//},
|
||||
//'bs-docs-getting-started': {
|
||||
// options: {
|
||||
// // https://regex101.com/r/cZ7aO8/2
|
||||
// process: function (content, srcpath) {
|
||||
// return content
|
||||
// // insert docs reference
|
||||
// .replace(/(---[\s\S]+?---)([\s\S]+)/mg, referenceDocNotice)
|
||||
// // remove sample text 'display' as this is a particular style and is confusing
|
||||
// .replace(/Fancy display heading/, 'Fancy heading');
|
||||
// }
|
||||
// },
|
||||
// expand: true,
|
||||
// cwd: '../bootstrap/docs/getting-started',
|
||||
// src: [
|
||||
// 'browsers-devices.md' // only one file
|
||||
// ],
|
||||
// dest: 'docs/getting-started/'
|
||||
//},
|
||||
//'bs-docs-content': {
|
||||
// options: {
|
||||
// // https://regex101.com/r/cZ7aO8/2
|
||||
// process: function (content, srcpath) {
|
||||
// return content
|
||||
// // insert docs reference
|
||||
// .replace(/(---[\s\S]+?---)([\s\S]+)/mg, referenceDocNotice)
|
||||
// // remove sample text 'display' as this is a particular style and is confusing
|
||||
// .replace(/Fancy display heading/, 'Fancy heading');
|
||||
// }
|
||||
// },
|
||||
// expand: true,
|
||||
// cwd: '../bootstrap/docs/content',
|
||||
// src: [
|
||||
// '**/*'
|
||||
// ],
|
||||
// dest: 'docs/content/'
|
||||
//}
|
||||
},
|
||||
|
||||
connect: {
|
||||
server: {
|
||||
options: {
|
||||
port: 3000,
|
||||
base: '.'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
//jekyll: {
|
||||
// options: {
|
||||
// bundleExec: true,
|
||||
// config: '_config.yml',
|
||||
// incremental: false
|
||||
// },
|
||||
// docs: {},
|
||||
// github: {
|
||||
// options: {
|
||||
// //raw: 'github: true'
|
||||
// raw: 'baseurl: "/bootstrap-material-design"'
|
||||
// }
|
||||
// }
|
||||
//},
|
||||
|
||||
htmllint: {
|
||||
options: {
|
||||
ignore: [
|
||||
'Element “img” is missing required attribute “src”.',
|
||||
'Attribute “autocomplete” is only allowed when the input type is “color”, “date”, “datetime”, “datetime-local”, “email”, “month”, “number”, “password”, “range”, “search”, “tel”, “text”, “time”, “url”, or “week”.',
|
||||
'Attribute “autocomplete” not allowed on element “button” at this point.',
|
||||
'Element “div” not allowed as child of element “progress” in this context. (Suppressing further errors from this subtree.)',
|
||||
'Consider using the “h1” element as a top-level heading only (all “h1” elements are treated as top-level headings by many screen readers and other tools).',
|
||||
'The “datetime” input type is not supported in all browsers. Please be sure to test, and consider using a polyfill.'
|
||||
]
|
||||
},
|
||||
src: ['_gh_pages/**/*.html', 'js/tests/visual/*.html']
|
||||
},
|
||||
|
||||
watch: {
|
||||
corejs: {
|
||||
files: 'js/src/*.js',
|
||||
tasks: ['dist-js']
|
||||
},
|
||||
docsjs: { // watch both the source and docs js
|
||||
files: ['js/src/*.js', 'docs/assets/js/src/*.js'],
|
||||
tasks: ['docs-js']
|
||||
},
|
||||
core: {
|
||||
files: 'scss/**/*.scss',
|
||||
tasks: ['dist-css']
|
||||
},
|
||||
docs: { // watch both the source and docs scss
|
||||
files: ['docs/assets/scss/**/*.scss', 'scss/**/*.scss'],
|
||||
tasks: ['scsslint:docs', 'sass:docs', 'postcss:docs']
|
||||
}
|
||||
},
|
||||
|
||||
'saucelabs-qunit': {
|
||||
all: {
|
||||
options: {
|
||||
build: process.env.TRAVIS_JOB_ID,
|
||||
concurrency: 10,
|
||||
maxRetries: 3,
|
||||
maxPollRetries: 4,
|
||||
urls: ['http://127.0.0.1:3000/js/tests/index.html?hidepassed'],
|
||||
browsers: grunt.file.readYAML('grunt/sauce_browsers.yml')
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
exec: {
|
||||
npmUpdate: {
|
||||
command: 'npm update'
|
||||
},
|
||||
'rollup-docs-iife': {
|
||||
command: 'rollup -c grunt/rollup.docs.iife.config.js'
|
||||
},
|
||||
'rollup-iife': {
|
||||
command: 'rollup -c grunt/rollup.iife.config.js'
|
||||
},
|
||||
'rollup-umd': {
|
||||
command: 'rollup -c grunt/rollup.umd.config.js'
|
||||
},
|
||||
'rollup-es2015': {
|
||||
command: 'rollup -c grunt/rollup.es.config.js'
|
||||
}
|
||||
},
|
||||
|
||||
buildcontrol: {
|
||||
options: {
|
||||
commit: true,
|
||||
push: true,
|
||||
remote: 'git@github.com:FezVrasta/bootstrap-material-design.git'
|
||||
},
|
||||
pages: {
|
||||
options: {
|
||||
// FIXME: remove this when we are ready!!!
|
||||
remote: 'git@github.com:rosskevin/bootstrap-material-design.git',
|
||||
dir: '_gh_pages',
|
||||
branch: 'gh-pages',
|
||||
message: 'Built from commit %sourceCommit% on branch %sourceBranch%'
|
||||
}
|
||||
},
|
||||
dist: {
|
||||
options: {
|
||||
dir: 'dist',
|
||||
branch: 'v4-dist',
|
||||
message: 'dist from commit %sourceCommit% on branch %sourceBranch%'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
compress: {
|
||||
main: {
|
||||
options: {
|
||||
archive: 'bootstrap-material-design-<%= pkg.version %>-dist.zip',
|
||||
mode: 'zip',
|
||||
level: 9,
|
||||
pretty: true
|
||||
},
|
||||
files: [
|
||||
{
|
||||
expand: true,
|
||||
cwd: 'dist/',
|
||||
src: ['**'],
|
||||
dest: 'bootstrap-material-design-<%= pkg.version %>-dist'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
// These plugins provide necessary tasks.
|
||||
require('load-grunt-tasks')(grunt);
|
||||
require('time-grunt')(grunt);
|
||||
|
||||
// Docs HTML validation task
|
||||
grunt.registerTask('validate-html', ['jekyll:docs', 'htmllint']);
|
||||
|
||||
var runSubset = function (subset) {
|
||||
return !process.env.MDB_TEST || process.env.MDB_TEST === subset;
|
||||
};
|
||||
var isUndefOrNonZero = function (val) {
|
||||
return val === undefined || val !== '0';
|
||||
};
|
||||
|
||||
// Test task.
|
||||
var testSubtasks = [];
|
||||
// Skip core tests if running a different subset of the test suite
|
||||
if (runSubset('core') &&
|
||||
// Skip core tests if this is a Savage build
|
||||
process.env.TRAVIS_REPO_SLUG !== 'twbs-savage/bootstrap') {
|
||||
testSubtasks = testSubtasks.concat(['dist-css', 'dist-js', 'test-scss', 'test-js', 'docs']);
|
||||
}
|
||||
// Skip HTML validation if running a different subset of the test suite
|
||||
if (runSubset('validate-html') &&
|
||||
isTravis &&
|
||||
// Skip HTML5 validator when [skip validator] is in the commit message
|
||||
isUndefOrNonZero(process.env.MDB_DO_VALIDATOR)) {
|
||||
testSubtasks.push('validate-html');
|
||||
}
|
||||
// Only run Sauce Labs tests if there's a Sauce access key
|
||||
if (typeof process.env.SAUCE_ACCESS_KEY !== 'undefined' &&
|
||||
// Skip Sauce if running a different subset of the test suite
|
||||
runSubset('sauce-js-unit') &&
|
||||
// Skip Sauce on Travis when [skip sauce] is in the commit message
|
||||
isUndefOrNonZero(process.env.MDB_DO_SAUCE)) {
|
||||
testSubtasks.push('babel:core');
|
||||
testSubtasks.push('connect');
|
||||
testSubtasks.push('saucelabs-qunit');
|
||||
}
|
||||
grunt.registerTask('test', testSubtasks);
|
||||
grunt.registerTask('test-js', ['eslint'/*, 'jscs:core', 'jscs:test', 'jscs:grunt'*/, 'qunit']);
|
||||
|
||||
// JS distribution task.
|
||||
grunt.registerTask('dist-js', [
|
||||
'clean:dist-js',
|
||||
'eslint',
|
||||
//'jscs:grunt',
|
||||
//'jscs:core',
|
||||
//'jscs:test',
|
||||
'exec:rollup-iife',
|
||||
'exec:rollup-umd',
|
||||
'exec:rollup-es2015',
|
||||
'stamp',
|
||||
'uglify:dist',
|
||||
'copy:dist-to-docs'
|
||||
]);
|
||||
grunt.registerTask('docs-js', [
|
||||
'clean:docs-dist-js',
|
||||
'copy:dist-to-docs', // ensure dist is present after cleaning
|
||||
'eslint',
|
||||
//'jscs:docs',
|
||||
'exec:rollup-docs-iife',
|
||||
'uglify:docs',
|
||||
'uglify:docs-vendor'
|
||||
]);
|
||||
|
||||
|
||||
grunt.registerTask('test-scss', ['scsslint:core']);
|
||||
|
||||
// CSS distribution task.
|
||||
grunt.registerTask('sass-compile', ['sass:core', 'sass:docs']);
|
||||
|
||||
grunt.registerTask('dist-css', [
|
||||
'scsslint:core',
|
||||
'clean:dist-css',
|
||||
'sass-compile',
|
||||
'postcss:core',
|
||||
'cssmin:core',
|
||||
'copy:dist-to-docs'
|
||||
]);
|
||||
|
||||
grunt.registerTask('docs-css', [
|
||||
'scsslint:docs',
|
||||
'clean:docs-dist-css',
|
||||
'copy:dist-to-docs', // ensure dist is present after cleaning
|
||||
'sass:docs',
|
||||
'postcss:docs',
|
||||
'postcss:examples',
|
||||
'cssmin:docs'
|
||||
]);
|
||||
|
||||
// Full distribution task.
|
||||
grunt.registerTask('dist', ['clean:dist', 'dist-css', 'dist-js', 'docs']);
|
||||
|
||||
// Default task.
|
||||
grunt.registerTask('default', ['clean:dist', 'test']);
|
||||
//------
|
||||
// Docs tasks
|
||||
|
||||
// Independent task to be run when we are ready to sync the bootstrap repo's docs locally.
|
||||
// Should be automated with no need for intervention (other than pulling the right bootstrap release locally)
|
||||
grunt.registerTask('docs-copy-bootstrap-docs', [
|
||||
'copy:bs-docs-js-vendor',
|
||||
'copy:bs-docs-scss',
|
||||
//'copy:bs-docs-getting-started',
|
||||
'copy:bs-docs-components',
|
||||
'copy:bs-docs-content',
|
||||
'copy:bs-docs-plugins'
|
||||
]);
|
||||
|
||||
grunt.registerTask('docs', ['docs-css', 'docs-js']);
|
||||
//------
|
||||
|
||||
//------
|
||||
// Release and publish
|
||||
grunt.registerTask('prep-release', [
|
||||
//'update-shrinkwrap',
|
||||
'dist',
|
||||
'jekyll:github' // build site from scratch
|
||||
//'compress' // compress zip
|
||||
]);
|
||||
grunt.registerTask('publish', [
|
||||
'prep-release', // build all including dist, docs, site
|
||||
'buildcontrol:dist', // push dist
|
||||
'buildcontrol:pages' // push site
|
||||
]);
|
||||
//------
|
||||
|
||||
// Task for updating the cached npm packages used by the Travis build (which are controlled by test-infra/npm-shrinkwrap.json).
|
||||
// This task should be run and the updated file should be committed whenever Bootstrap's dependencies change.
|
||||
grunt.registerTask('update-shrinkwrap', ['exec:npmUpdate', '_update-shrinkwrap']);
|
||||
grunt.registerTask('_update-shrinkwrap', function () {
|
||||
var done = this.async();
|
||||
npmShrinkwrap({dev: true, dirname: __dirname}, function (err) {
|
||||
if (err) {
|
||||
grunt.fail.warn(err);
|
||||
}
|
||||
var dest = 'grunt/npm-shrinkwrap.json';
|
||||
fs.renameSync('npm-shrinkwrap.json', dest);
|
||||
grunt.log.writeln('File ' + dest.cyan + ' updated.');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
//grunt.registerTask('debug', function () {
|
||||
// console.log('');
|
||||
//});
|
||||
};
|
|
@ -47,9 +47,9 @@ url: "http://rosskevin.github.io"
|
|||
#
|
||||
cdn:
|
||||
# # See https://www.srihash.org for info on how to generate the hashes
|
||||
css: https://cdn.rawgit.com/fezvrasta/bootstrap-material-design/v4-dist/css/bootstrap-material-design.css
|
||||
css: https://cdn.rawgit.com/FezVrasta/bootstrap-material-design/dist/dist/bootstrap-material-design.min.css
|
||||
# css_hash: "sha384-XXXXXXXX"
|
||||
js: https://cdn.rawgit.com/fezvrasta/bootstrap-material-design/v4-dist/js/bootstrap-material-design
|
||||
js: https://cdn.rawgit.com/fezvrasta/bootstrap-material-design/dist/dist/bootstrap-material-design
|
||||
# js_hash: "sha384-XXXXXXXX"
|
||||
|
||||
# fonts
|
||||
|
|
|
@ -4,42 +4,36 @@ title: Build tools
|
|||
group: getting-started
|
||||
---
|
||||
|
||||
Material Design for Bootstrap uses [Grunt](http://gruntjs.com) for its CSS and JavaScript build system and Jekyll for the written documentation. Our Gruntfile includes convenient methods for working with the framework, including compiling code, running tests, and more.
|
||||
Material Design for Bootstrap uses [Gulp v4](http://gulpjs.com) for its CSS and JavaScript build system and Jekyll for the written documentation. Our gulpfile includes convenient methods for working with the framework, including compiling code, running tests, and more.
|
||||
|
||||
## Tooling setup
|
||||
|
||||
To use our Gruntfile and run our documentation locally, you'll need a copy of Material Design for Bootstrap's source files, Node, and Grunt. Follow these steps and you should be ready to rock:
|
||||
To use our gulpfile and run our documentation locally, you'll need a copy of Material Design for Bootstrap's source files, Node, and Gulp v4. Follow these steps and you should be ready to rock:
|
||||
|
||||
1. [Download and install Node](https://nodejs.org/download), which we use to manage our dependencies.
|
||||
2. Install the Grunt command line tools, `grunt-cli`, with `npm install -g grunt-cli`.
|
||||
2. Install the Gulp command line tools, `gulp-cli`, with `npm install -g gulpjs/gulp-cli#4.0`.
|
||||
3. Navigate to the root `/bootstrap-material-design` directory and run `npm install` to install our local dependencies listed in [package.json](https://github.com/FezVrasta/bootstrap-material-design/blob/master/package.json).
|
||||
4. [Install RVM][install-rvm]
|
||||
4. [Install RVM](http://rvm.io/rvm/install)
|
||||
5. Install ruby. `cd bootstrap-material-design` and if installation is needed, it will give an install command such as `To install do: 'rvm install ruby-2.x.x'`
|
||||
6. Install [Bundler][gembundler] with `gem install bundler`
|
||||
6. Install Bundler with `gem install bundler`
|
||||
7. Finally run `bundle install`. This will install all Ruby dependencies, such as Jekyll and plugins.
|
||||
- **Windows users:** Read [this unofficial guide](http://jekyll-windows.juthilo.com/) to get Jekyll up and running without problems.
|
||||
|
||||
When completed, you'll be able to run the various Grunt commands provided from the command line.
|
||||
When completed, you'll be able to run the various Gulp commands provided from the command line to view them run `gulp --tasks`
|
||||
|
||||
[install-rvm]: https://rvm.io/rvm/install#1-download-and-run-the-rvm-installation-script
|
||||
[gembundler]: http://bundler.io/
|
||||
## Using Gulp
|
||||
|
||||
## Using Grunt
|
||||
|
||||
Our Gruntfile includes the following commands and tasks:
|
||||
Our gulpfile includes the many tasks you can view with `gulp --tasks`, here are the important ones:
|
||||
|
||||
| Task | Description |
|
||||
| --- | --- |
|
||||
| `grunt` | Run `grunt` to run tests locally and compile the CSS and JavaScript into `/dist`. **Uses [Sass](http://sass-lang.com/), [Autoprefixer][autoprefixer], and [UglifyJS](http://lisperator.net/uglifyjs/).** |
|
||||
| `grunt dist` | `grunt dist` creates the `/dist` directory with compiled files. **Uses [Sass](http://sass-lang.com/), [Autoprefixer][autoprefixer], and [UglifyJS](http://lisperator.net/uglifyjs/).** |
|
||||
| `grunt test` | Runs [scss-lint](https://github.com/brigade/scss-lint), [ESLint](http://eslint.org/) and [QUnit](http://qunitjs.com/) tests headlessly in [PhantomJS](http://phantomjs.org/) (used for CI). |
|
||||
| `grunt docs` | Builds and tests CSS, JavaScript, and other assets which are used when running the documentation locally via `jekyll serve`. |
|
||||
| `grunt watch` | This is a convenience method for watching just Sass files and automatically building them whenever you save. |
|
||||
|
||||
| `gulp publish` | Run everything, publish dist, npm, and gh-pages |
|
||||
| `gulp` | `gulp` runs the `default` task that builds all core files to the `dist` directory |
|
||||
| `gulp docs:default` | creates all the `docs/dist` files needed to support the documentation |
|
||||
|
||||
## Autoprefixer
|
||||
|
||||
Material Design for Bootstrap uses [Autoprefixer][autoprefixer] (included in our Gruntfile and build process) to automatically add vendor prefixes to some CSS properties at build time. Doing so saves us time and code by allowing us to write key parts of our CSS a single time while eliminating the need for vendor mixins like those found in v3.
|
||||
Material Design for Bootstrap uses [Autoprefixer][autoprefixer] (included in our gulpfile and build process) to automatically add vendor prefixes to some CSS properties at build time. Doing so saves us time and code by allowing us to write key parts of our CSS a single time while eliminating the need for vendor mixins like those found in v3.
|
||||
|
||||
|
||||
## Local documentation
|
||||
|
@ -49,7 +43,7 @@ markdown-based files, templates, and more. Here's how to get it started:
|
|||
|
||||
1. Run through the [tooling setup](#tooling-setup) above to install Jekyll (the site builder) and other Ruby dependencies with `bundle install`.
|
||||
2. From the root `/bootstrap-material-design` directory, run `bundle exec jekyll serve` in the command line.
|
||||
3. Open <http://localhost:9001> in your browser, and voilà.
|
||||
3. Open <http://localhost:9000> in your browser, and voilà.
|
||||
|
||||
Learn more about using Jekyll by reading its [documentation](http://jekyllrb.com/docs/home/).
|
||||
|
||||
|
@ -57,41 +51,24 @@ Learn more about using Jekyll by reading its [documentation](http://jekyllrb.com
|
|||
|
||||
The development and testing with the documentation has been connected so we not only can utilize Material Design examples,
|
||||
but all of the original Bootstrap documentation examples as well. The most productive environment so far is to have
|
||||
Bootstrap checked out in parallel to this project, running three (3) different terminal commands simultaneously:
|
||||
Bootstrap checked out in parallel to this project, running two (2) different terminal commands simultaneously:
|
||||
|
||||
1. _Terminal 1_: Bootstrap documentation for reference
|
||||
1. _Terminal 1_: Initial build and watch
|
||||
|
||||
1. Performs an initial dependency setup/build
|
||||
|
||||
`bundle install && npm install && grunt dist`
|
||||
`bundle install && npm install && gulp default && gulp docs:default`
|
||||
|
||||
1. Start serving the documentation on <http://localhost:9000>
|
||||
1. Watch both the core and docs sources for changes and build to the docs site
|
||||
|
||||
`jekyll serve`
|
||||
`grunt docs:default:watch`
|
||||
|
||||
1. _Terminal 2_: Initial build and watch
|
||||
1. _Terminal 2_: Start serving documentation on <http://localhost:9000> with `jekyll serve`
|
||||
|
||||
1. Performs an initial dependency setup/build
|
||||
|
||||
`bundle install && npm install && grunt dist`
|
||||
|
||||
1. Watch both the core and docs sources for changes
|
||||
|
||||
`grunt watch`
|
||||
|
||||
1. _Terminal 3_: Start serving documentation on <http://localhost:9001> with `jekyll serve`
|
||||
|
||||
Now go forth and develop, the `watch` task will keep tabs on source files and docs files, meanwhile the `jekyll serve` command
|
||||
will generate new documentation pages with the changes. Simply refresh your browser to see the changes.
|
||||
Now go forth and develop, the `docs:default:watch` task will keep tabs on source files and docs files, meanwhile the `jekyll serve` command will generate new documentation pages with the changes. Simply refresh your browser to see the changes.
|
||||
|
||||
(TODO: someone please investigate adding autoreload to jekyll development cycle)
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
Should you encounter problems with installing dependencies or running Grunt commands, uninstall all previous dependency versions (global and local). Then, rerun `npm install`.
|
||||
|
||||
[ruby-sass]: https://github.com/sass/sass
|
||||
[grunt-contrib-sass]: https://github.com/gruntjs/grunt-contrib-sass
|
||||
[libsass]: https://github.com/sass/libsass
|
||||
[grunt-sass]: https://github.com/sindresorhus/grunt-sass
|
||||
[autoprefixer]: https://github.com/postcss/autoprefixer
|
||||
Should you encounter problems with installing dependencies or running Gulp commands, uninstall all previous dependency versions (global and local). Then, rerun `rm -Rf node_modules && npm install`.
|
||||
|
|
|
@ -32,7 +32,7 @@ Copy-paste the font and stylesheet `<link>` into your `<head>` before all other
|
|||
<link rel="stylesheet" href="{{ site.cdn.css }}">
|
||||
{% endhighlight %}
|
||||
|
||||
Add jQuery, Bootstrap, and our Javascript plugins near the end of your pages, right before the closing `</body>` tag. Be sure to place jQuery first as our code depends on it.
|
||||
Add jQuery, Tether, and our Javascript near the end of your pages, right before the closing `</body>` tag. Be sure to place jQuery first as our code depends on it.
|
||||
|
||||
{% highlight html %}
|
||||
<script src="{{ site.data.cdn.jquery }}.min.js"></script>
|
||||
|
@ -76,7 +76,7 @@ Put it all together and your pages should look like this:
|
|||
<body>
|
||||
<h1>Hello, world!</h1>
|
||||
|
||||
<!-- jQuery first, optional tether for tooltips, then Bootstrap and Material Design for Bootstrap JS. -->
|
||||
<!-- jQuery first, optional tether for tooltips, then Material Design for Bootstrap JS. -->
|
||||
<script src="{{ site.data.cdn.jquery }}.min.js"></script>
|
||||
<script src="{{ site.data.cdn.tether }}.min.js"></script>
|
||||
<script src="{{ site.cdn.js }}.iife.min.js"></script>
|
||||
|
|
|
@ -4,7 +4,7 @@ title: Release process
|
|||
group: getting-started
|
||||
---
|
||||
|
||||
Material Design for Bootstrap has a well defined release process that is automated by [Grunt](http://gruntjs.com). See the [Build Tools](../build-tools) section for setup.
|
||||
Material Design for Bootstrap has a well defined release process that is automated by [Gulp](http://gulpjs.com). See the [Build Tools](../build-tools) section for setup.
|
||||
|
||||
## Creating a release
|
||||
|
||||
|
@ -13,36 +13,14 @@ Material Design for Bootstrap has a well defined release process that is automat
|
|||
Use the following task template:
|
||||
|
||||
~~~~~~~~
|
||||
- [] update `package.json` version
|
||||
- [] `grunt prep-release`
|
||||
- [] commit
|
||||
- [] travis success
|
||||
- [] tag for bower e.g. `v4.0.0`
|
||||
- [] push to npm
|
||||
- [] push to meteor
|
||||
- [] `grunt publish`
|
||||
- [] run `gulp publish` it will bump the version, build core, docs, gh-pages, publish them all (with a tag) and push to npm
|
||||
- [] `meteor publish`
|
||||
- [] close any milestone
|
||||
- [] create release and reference milestone issues</code>
|
||||
- [] create release from tag and reference milestone issues
|
||||
~~~~~~~~
|
||||
|
||||
|
||||
### Build the release
|
||||
1. Update the version in `package.json`, it's version is used in the documentation
|
||||
1. Build the distribution `grunt prep-release`
|
||||
1. Commit
|
||||
1. Ensure travis succeeds
|
||||
|
||||
### Bower
|
||||
Tag for bower - a valid tag starts with a `v` such as `v4.0.0`
|
||||
|
||||
### NPM
|
||||
`npm publish`
|
||||
|
||||
### Meteor
|
||||
TODO: push to meteor?
|
||||
|
||||
### Github tasks
|
||||
1. Push documentation with `grunt publish`
|
||||
1. Close any related open milestone
|
||||
1. Create a release and reference the milestone
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user