Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Apply -snapshot suffix during build task #7317

Merged
merged 1 commit into from
Jun 14, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 13 additions & 13 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,35 +113,35 @@ Once that is complete just run:

```
sh
npm run test && npm run build
npm run test && npm run build -- --skip-os-packages
```

#### Debugging unit tests

The standard `npm run test` task runs several sub tasks and can take several minutes to complete, making debugging failures pretty painful. In order to ease the pain specialized tasks provide alternate methods for running the tests.


`npm run test:quick`
`npm run test:quick`
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have no clue why all of these lines had spaces after them, but my editor removed them on save.

Runs both server and browser tests, but skips linting

`npm run test:server`
`npm run test:server`
Run only the server tests

`npm run test:browser`
`npm run test:browser`
Run only the browser tests. Coverage reports are available for browser tests by running `npm run test:coverage`. You can find the results under the `coverage/` directory that will be created upon completion.

`npm run test:dev`
Initializes an environment for debugging the browser tests. Includes an dedicated instance of the kibana server for building the test bundle, and a karma server. When running this task the build is optimized for the first time and then a karma-owned instance of the browser is opened. Click the "debug" button to open a new tab that executes the unit tests.
`npm run test:dev`
Initializes an environment for debugging the browser tests. Includes an dedicated instance of the kibana server for building the test bundle, and a karma server. When running this task the build is optimized for the first time and then a karma-owned instance of the browser is opened. Click the "debug" button to open a new tab that executes the unit tests.
![Browser test debugging](http://i.imgur.com/DwHxgfq.png)

`npm run mocha [test file or dir]` or `npm run mocha:debug [test file or dir]`
`npm run mocha [test file or dir]` or `npm run mocha:debug [test file or dir]`
Run a one off test with the local project version of mocha, babel compilation, and optional debugging. Great
for development and fixing individual tests.

#### Unit testing plugins
This should work super if you're using the [Kibana plugin generator](https://github.com/elastic/generator-kibana-plugin). If you're not using the generator, well, you're on your own. We suggest you look at how the generator works.

`npm run test:dev -- --kbnServer.testsBundle.pluginId=some_special_plugin --kbnServer.plugin-path=../some_special_plugin`
`npm run test:dev -- --kbnServer.testsBundle.pluginId=some_special_plugin --kbnServer.plugin-path=../some_special_plugin`
Run the tests for just your particular plugin. Assuming you plugin lives outside of the `installedPlugins directory`, which it should.

#### Running browser automation tests:
Expand All @@ -151,13 +151,13 @@ Run the tests for just your particular plugin. Assuming you plugin lives outside

The following will start Kibana, Elasticsearch and Selenium for you. To run the functional UI tests use the following commands

`npm run test:ui`
`npm run test:ui`
Run the functional UI tests one time and exit. This is used by the CI systems and is great for quickly checking that things pass. It is essentially a combination of the next two tasks.

`npm run test:ui:server`
`npm run test:ui:server`
Start the server required for the `test:ui:runner` tasks. Once the server is started `test:ui:runner` can be run multiple times without waiting for the server to start.

`npm run test:ui:runner`
`npm run test:ui:runner`
Execute the front-end selenium tests. This requires the server started by the `test:ui:server` task.

##### If you already have ElasticSearch, Kibana, and Selenium Server running:
Expand Down Expand Up @@ -187,12 +187,12 @@ Packages are built using fpm, pleaserun, dpkg, and rpm. fpm and pleaserun can b
apt-get install ruby-dev rpm
gem install fpm -v 1.5.0 # required by pleaserun 0.0.16
gem install pleaserun -v 0.0.16 # higher versions fail at the moment
npm run build:ospackages
npm run build -- --skip-archives
```

To specify a package to build you can add `rpm` or `deb` as an argument.
```sh
npm run build:ospackages -- --rpm
npm run build -- --rpm
```

Distributable packages can be found in `target/` after the build completes.
Expand Down
5 changes: 4 additions & 1 deletion Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ module.exports = function (grunt) {
pkg: grunt.file.readJSON('package.json'),
root: __dirname,
src: __dirname + '/src',
build: __dirname + '/build', // temporary build directory
buildDir: __dirname + '/build', // temporary build directory
plugins: __dirname + '/src/plugins',
server: __dirname + '/src/server',
target: __dirname + '/target', // location of the compressed build targets
Expand Down Expand Up @@ -69,6 +69,9 @@ module.exports = function (grunt) {

grunt.config.merge(config);

// must run before even services/platforms
grunt.config.set('build', require('./tasks/config/build')(grunt));

config.packageScriptsDir = __dirname + '/tasks/build/package_scripts';
// ensure that these run first, other configs need them
config.services = require('./tasks/config/services')(grunt);
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Kibana 5.0.0-snapshot
# Kibana 5.0.0

Kibana is an open source ([Apache Licensed](https://github.com/elastic/kibana/blob/master/LICENSE.md)), browser based analytics and search dashboard for Elasticsearch. Kibana is a snap to setup and start using. Kibana strives to be easy to get started with, while also being flexible and powerful, just like Elasticsearch.

Expand Down
3 changes: 1 addition & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"dashboarding"
],
"private": false,
"version": "5.0.0-snapshot",
"version": "5.0.0",
"build": {
"number": 8467,
"sha": "6cb7fec4e154faa0a4a3fee4b33dfef91b9870d9"
Expand Down Expand Up @@ -48,7 +48,6 @@
"test:server": "grunt test:server",
"test:coverage": "grunt test:coverage",
"build": "grunt build",
"build:ospackages": "grunt build --os-packages",
"start": "sh ./bin/kibana --dev",
"precommit": "grunt precommit",
"karma": "karma start",
Expand Down
7 changes: 0 additions & 7 deletions tasks/build/get_props.js

This file was deleted.

7 changes: 3 additions & 4 deletions tasks/build/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ module.exports = function (grunt) {

grunt.registerTask('build', 'Build packages', function () {
grunt.task.run(flatten([
'_build:getProps',
'clean:build',
'clean:target',
'_build:downloadNodeBuilds:start',
Expand All @@ -23,11 +22,11 @@ module.exports = function (grunt) {
'_build:downloadNodeBuilds:finish',
'_build:versionedLinks',
'_build:osShellScripts',
'_build:archives',
grunt.option('os-packages') ? [
grunt.option('skip-archives') ? [] : ['_build:archives'],
grunt.option('skip-os-packages') ? [] : [
'_build:pleaseRun',
'_build:osPackages',
] : [],
],
'_build:shasums'
]));
});
Expand Down
38 changes: 20 additions & 18 deletions tasks/build/os_packages.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,16 @@ import { indexBy } from 'lodash';
import exec from '../utils/exec';

export default (grunt) => {
const targetDir = grunt.config.get('target');
const { config } = grunt;
const exec = require('../utils/exec');
const targetDir = config.get('target');
const packageScriptsDir = grunt.config.get('packageScriptsDir');
const servicesByName = indexBy(grunt.config.get('services'), 'name');
const config = grunt.config.get('packages');
const servicesByName = indexBy(config.get('services'), 'name');
const packages = config.get('packages');
const fpm = args => exec('fpm', args);

grunt.registerTask('_build:osPackages', function () {
grunt.config.get('platforms')
config.get('platforms')
.filter(({ name }) => /linux-x(86|64)$/.test(name))
.map(({ name, buildDir }) => {
const architecture = /x64$/.test(name) ? 'x86_64' : 'i386';
Expand All @@ -25,25 +27,25 @@ export default (grunt) => {
'--package', targetDir,
'-s', 'dir', // input type
'--architecture', architecture,
'--name', config.name,
'--description', config.description,
'--version', config.version,
'--url', config.site,
'--vendor', config.vendor,
'--maintainer', config.maintainer,
'--license', config.license,
'--name', packages.name,
'--description', packages.description,
'--version', packages.version,
'--url', packages.site,
'--vendor', packages.vendor,
'--maintainer', packages.maintainer,
'--license', packages.license,
'--after-install', resolve(packageScriptsDir, 'post_install.sh'),
'--before-install', resolve(packageScriptsDir, 'pre_install.sh'),
'--before-remove', resolve(packageScriptsDir, 'pre_remove.sh'),
'--after-remove', resolve(packageScriptsDir, 'post_remove.sh'),
'--config-files', config.path.kibanaConfig,
'--template-value', `user=${config.user}`,
'--template-value', `group=${config.group}`,
'--template-value', `optimizeDir=${config.path.home}/optimize`,
'--config-files', packages.path.kibanaConfig,
'--template-value', `user=${packages.user}`,
'--template-value', `group=${packages.group}`,
'--template-value', `optimizeDir=${packages.path.home}/optimize`,

//config folder is moved to path.conf, exclude {path.home}/config
//uses relative path to --prefix, strip the leading /
'--exclude', `${config.path.home.slice(1)}/config`
'--exclude', `${packages.path.home.slice(1)}/config`
];
const debOptions = [
'-t', 'deb',
Expand All @@ -54,8 +56,8 @@ export default (grunt) => {
'--rpm-os', 'linux'
];
const args = [
`${buildDir}/=${config.path.home}/`,
`${buildDir}/config/=${config.path.conf}/`,
`${buildDir}/=${packages.path.home}/`,
`${buildDir}/config/=${packages.path.conf}/`,
`${servicesByName.sysv.outputDir}/etc/=/etc/`,
`${servicesByName.systemd.outputDir}/lib/=/lib/`
];
Expand Down
7 changes: 4 additions & 3 deletions tasks/build/package_json.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,18 @@ module.exports = function (grunt) {
let deepModules = grunt.config.get('deepModules');

grunt.registerTask('_build:packageJson', function () {
const { sha, number, version } = grunt.config.get('build');

grunt.file.write(
'build/kibana/package.json',
JSON.stringify({
name: pkg.name,
description: pkg.description,
keywords: pkg.keywords,
version: pkg.version,
version,
build: {
number: grunt.config.get('buildNum'),
sha: grunt.config.get('buildSha')
number,
sha
},
repository: pkg.repository,
engines: {
Expand Down
3 changes: 3 additions & 0 deletions tasks/build/shasums.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ module.exports = function (grunt) {
grunt.registerTask('_build:shasums', function () {
var targetDir = grunt.config.get('target');

// for when shasums is run but archives and ospackages was not
grunt.file.mkdir(targetDir);

readdir(targetDir)
.map(function (archive) {
// only sha the archives and packages
Expand Down
5 changes: 1 addition & 4 deletions tasks/build/versioned_links.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,7 @@ module.exports = function (grunt) {
return resolve(rootPath, file);
});

//We don't want to build os packages with symlinks
let transferFiles = (source, link) => grunt.option('os-packages')
? exec('cp', ['-r', source, link])
: exec('ln', ['-s', source, link]);
let transferFiles = (source, link) => exec('cp', ['-r', source, link]);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I removed the symlink behavior altogether rather than updating this to rely on skip-os-packages because how we create our builds should be consistent regardless of whether we intend to create rpm/deb targets.


grunt.config.get('platforms').forEach(function (platform) {
grunt.file.mkdir(platform.buildDir);
Expand Down
15 changes: 15 additions & 0 deletions tasks/config/build.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { execSync as exec } from 'child_process';

export default (grunt) => {
const pkgVersion = grunt.config.get('pkg.version');

const sha = String(exec('git rev-parse HEAD')).trim();
const number = parseFloat(String(exec('git log --format="%h" | wc -l')).trim());
const version = buildVersion(grunt.option('release'), pkgVersion);

return { sha, number, version };
};

function buildVersion(isRelease, version) {
return isRelease ? version : `${version}-snapshot`;
}
2 changes: 1 addition & 1 deletion tasks/config/packages.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
export default (grunt) => {
const VERSION = grunt.config.get('pkg.version');
const VERSION = grunt.config.get('build.version');

const FOLDER_STAGING = `kibana/staging/${VERSION.match(/\d\.\d\.\d/)[0]}-XXXXXXX/repos/${VERSION.match(/\d\./)[0]}x`;
const FOLDER_PRODUCTION = `kibana/${VERSION.match(/\d\.\d/)[0]}`;
Expand Down
2 changes: 1 addition & 1 deletion tasks/config/platforms.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
module.exports = function (grunt) {
let { resolve } = require('path');

let version = grunt.config.get('pkg.version');
let { version } = grunt.config.get('build');
let nodeVersion = grunt.config.get('nodeVersion');
let rootPath = grunt.config.get('root');
let baseUri = `https://nodejs.org/dist/v${nodeVersion}`;
Expand Down
3 changes: 0 additions & 3 deletions tasks/jenkins.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@ module.exports = function (grunt) {
path.unshift(`${HOME}/bin`);
process.env.PATH = path.join(delimiter);

// always build os packages on jenkins
grunt.option('os-packages', true);

grunt.task.run(compact([
'rejectRejFiles',
'test',
Expand Down
4 changes: 2 additions & 2 deletions tasks/rebuild/confirm.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import { createInterface } from 'readline';
export default (grunt) => {
grunt.registerTask('_rebuild:confirm', function () {
const newVersion = grunt.option('buildversion') || grunt.config.get('pkg').version;
const newBuildNum = grunt.option('buildnum') || grunt.config.get('buildNum');
const newSha = grunt.option('buildsha') || grunt.config.get('buildSha');
const newBuildNum = grunt.option('buildnum') || grunt.config.get('build.number');
const newSha = grunt.option('buildsha') || grunt.config.get('build.sha');

grunt.config('rebuild', { newVersion, newBuildNum, newSha });

Expand Down
2 changes: 1 addition & 1 deletion tasks/rebuild/create_archives.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { join } from 'path';

export default (grunt) => {
grunt.registerTask('_rebuild:createArchives', function () {
const buildDir = grunt.config.get('build');
const buildDir = grunt.config.get('buildDir');
const targetDir = grunt.config.get('target');

grunt.file.mkdir('target');
Expand Down
2 changes: 1 addition & 1 deletion tasks/rebuild/extract_zips.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { execFileSync } from 'child_process';

export default (grunt) => {
grunt.registerTask('_rebuild:extractZips', function () {
const buildDir = grunt.config.get('build');
const buildDir = grunt.config.get('buildDir');
const targetDir = grunt.config.get('target');

const zips = grunt.file.expand({ cwd: targetDir }, '*.zip');
Expand Down
1 change: 0 additions & 1 deletion tasks/rebuild/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import { trim } from 'lodash';
export default (grunt) => {
grunt.registerTask('rebuild', 'Rebuilds targets as a new version', function () {
grunt.task.run([
'_build:getProps',
'_rebuild:confirm',
'_rebuild:continue'
]);
Expand Down
2 changes: 1 addition & 1 deletion tasks/rebuild/update_builds.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { join } from 'path';

export default (grunt) => {
grunt.registerTask('_rebuild:updateBuilds', function () {
const buildDir = grunt.config.get('build');
const buildDir = grunt.config.get('buildDir');

const { newVersion, newBuildNum, newSha } = grunt.config.get('rebuild');

Expand Down