Read HEAD commit and use as releases value
This commit is contained in:
parent
9d29eb7e29
commit
fa04b50b3c
|
@ -6,6 +6,10 @@ const index = function index() {
|
||||||
currentUserId: gon.current_user_id,
|
currentUserId: gon.current_user_id,
|
||||||
whitelistUrls: [gon.gitlab_url],
|
whitelistUrls: [gon.gitlab_url],
|
||||||
isProduction: process.env.NODE_ENV,
|
isProduction: process.env.NODE_ENV,
|
||||||
|
release: process.env.HEAD_COMMIT_SHA,
|
||||||
|
tags: {
|
||||||
|
HEAD_COMMIT_SHA: process.env.HEAD_COMMIT_SHA,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
return RavenConfig;
|
return RavenConfig;
|
||||||
|
|
|
@ -57,6 +57,8 @@ const RavenConfig = {
|
||||||
|
|
||||||
configure() {
|
configure() {
|
||||||
Raven.config(this.options.sentryDsn, {
|
Raven.config(this.options.sentryDsn, {
|
||||||
|
release: this.options.release,
|
||||||
|
tags: this.options.tags,
|
||||||
whitelistUrls: this.options.whitelistUrls,
|
whitelistUrls: this.options.whitelistUrls,
|
||||||
environment: this.options.isProduction ? 'production' : 'development',
|
environment: this.options.isProduction ? 'production' : 'development',
|
||||||
ignoreErrors: this.IGNORE_ERRORS,
|
ignoreErrors: this.IGNORE_ERRORS,
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
|
var execSync = require('child_process').execSync;
|
||||||
var webpack = require('webpack');
|
var webpack = require('webpack');
|
||||||
var StatsPlugin = require('stats-webpack-plugin');
|
var StatsPlugin = require('stats-webpack-plugin');
|
||||||
var CompressionPlugin = require('compression-webpack-plugin');
|
var CompressionPlugin = require('compression-webpack-plugin');
|
||||||
|
@ -197,7 +198,33 @@ var config = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getHeadCommitSHA() {
|
||||||
|
// Simple SHA validation.
|
||||||
|
// Match 5-40 numbers or lowercase letters between a and f.
|
||||||
|
const SHA_REGEX = /^\b[0-9a-f]{5,40}\b$/;
|
||||||
|
let stdout;
|
||||||
|
|
||||||
|
try {
|
||||||
|
stdout = execSync('git rev-parse HEAD');
|
||||||
|
} catch (error) {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
|
||||||
|
const headCommitSHA = stdout.trim();
|
||||||
|
if (!SHA_REGEX.test(headCommitSHA)) {
|
||||||
|
throw new Error(`\`git rev-parse HEAD\` output is not a valid SHA1: ${headCommitSHA}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
return headCommitSHA;
|
||||||
|
}
|
||||||
|
|
||||||
if (IS_PRODUCTION) {
|
if (IS_PRODUCTION) {
|
||||||
|
const processEnv = {
|
||||||
|
NODE_ENV: JSON.stringify('production'),
|
||||||
|
};
|
||||||
|
|
||||||
|
processEnv.HEAD_COMMIT_SHA = getHeadCommitSHA();
|
||||||
|
|
||||||
config.devtool = 'source-map';
|
config.devtool = 'source-map';
|
||||||
config.plugins.push(
|
config.plugins.push(
|
||||||
new webpack.NoEmitOnErrorsPlugin(),
|
new webpack.NoEmitOnErrorsPlugin(),
|
||||||
|
@ -209,7 +236,7 @@ if (IS_PRODUCTION) {
|
||||||
sourceMap: true
|
sourceMap: true
|
||||||
}),
|
}),
|
||||||
new webpack.DefinePlugin({
|
new webpack.DefinePlugin({
|
||||||
'process.env': { NODE_ENV: JSON.stringify('production') }
|
'process.env': processEnv,
|
||||||
}),
|
}),
|
||||||
new CompressionPlugin({
|
new CompressionPlugin({
|
||||||
asset: '[path].gz[query]',
|
asset: '[path].gz[query]',
|
||||||
|
|
|
@ -2,18 +2,14 @@ import RavenConfig from '~/raven/raven_config';
|
||||||
import index from '~/raven/index';
|
import index from '~/raven/index';
|
||||||
|
|
||||||
describe('RavenConfig options', () => {
|
describe('RavenConfig options', () => {
|
||||||
let sentryDsn;
|
const sentryDsn = 'sentryDsn';
|
||||||
let currentUserId;
|
const currentUserId = 'currentUserId';
|
||||||
let gitlabUrl;
|
const gitlabUrl = 'gitlabUrl';
|
||||||
let isProduction;
|
const isProduction = 'isProduction';
|
||||||
|
const headCommitSHA = 'headCommitSHA';
|
||||||
let indexReturnValue;
|
let indexReturnValue;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
sentryDsn = 'sentryDsn';
|
|
||||||
currentUserId = 'currentUserId';
|
|
||||||
gitlabUrl = 'gitlabUrl';
|
|
||||||
isProduction = 'isProduction';
|
|
||||||
|
|
||||||
window.gon = {
|
window.gon = {
|
||||||
sentry_dsn: sentryDsn,
|
sentry_dsn: sentryDsn,
|
||||||
current_user_id: currentUserId,
|
current_user_id: currentUserId,
|
||||||
|
@ -21,6 +17,7 @@ describe('RavenConfig options', () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
process.env.NODE_ENV = isProduction;
|
process.env.NODE_ENV = isProduction;
|
||||||
|
process.env.HEAD_COMMIT_SHA = headCommitSHA;
|
||||||
|
|
||||||
spyOn(RavenConfig, 'init');
|
spyOn(RavenConfig, 'init');
|
||||||
|
|
||||||
|
@ -33,6 +30,10 @@ describe('RavenConfig options', () => {
|
||||||
currentUserId,
|
currentUserId,
|
||||||
whitelistUrls: [gitlabUrl],
|
whitelistUrls: [gitlabUrl],
|
||||||
isProduction,
|
isProduction,
|
||||||
|
release: headCommitSHA,
|
||||||
|
tags: {
|
||||||
|
HEAD_COMMIT_SHA: headCommitSHA,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -25,17 +25,9 @@ describe('RavenConfig', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('init', () => {
|
describe('init', () => {
|
||||||
let options;
|
const options = {};
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
options = {
|
|
||||||
sentryDsn: '//sentryDsn',
|
|
||||||
ravenAssetUrl: '//ravenAssetUrl',
|
|
||||||
currentUserId: 1,
|
|
||||||
whitelistUrls: ['//gitlabUrl'],
|
|
||||||
isProduction: true,
|
|
||||||
};
|
|
||||||
|
|
||||||
spyOn(RavenConfig, 'configure');
|
spyOn(RavenConfig, 'configure');
|
||||||
spyOn(RavenConfig, 'bindRavenErrors');
|
spyOn(RavenConfig, 'bindRavenErrors');
|
||||||
spyOn(RavenConfig, 'setUser');
|
spyOn(RavenConfig, 'setUser');
|
||||||
|
@ -84,6 +76,10 @@ describe('RavenConfig', () => {
|
||||||
sentryDsn: '//sentryDsn',
|
sentryDsn: '//sentryDsn',
|
||||||
whitelistUrls: ['//gitlabUrl'],
|
whitelistUrls: ['//gitlabUrl'],
|
||||||
isProduction: true,
|
isProduction: true,
|
||||||
|
release: 'release',
|
||||||
|
tags: {
|
||||||
|
HEAD_COMMIT_SHA: 'headCommitSha',
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
ravenConfig = jasmine.createSpyObj('ravenConfig', ['shouldSendSample']);
|
ravenConfig = jasmine.createSpyObj('ravenConfig', ['shouldSendSample']);
|
||||||
|
@ -100,6 +96,8 @@ describe('RavenConfig', () => {
|
||||||
|
|
||||||
it('should call Raven.config', () => {
|
it('should call Raven.config', () => {
|
||||||
expect(Raven.config).toHaveBeenCalledWith(options.sentryDsn, {
|
expect(Raven.config).toHaveBeenCalledWith(options.sentryDsn, {
|
||||||
|
release: options.release,
|
||||||
|
tags: options.tags,
|
||||||
whitelistUrls: options.whitelistUrls,
|
whitelistUrls: options.whitelistUrls,
|
||||||
environment: 'production',
|
environment: 'production',
|
||||||
ignoreErrors: ravenConfig.IGNORE_ERRORS,
|
ignoreErrors: ravenConfig.IGNORE_ERRORS,
|
||||||
|
|
Loading…
Reference in New Issue