Read HEAD commit and use as releases value

This commit is contained in:
Luke "Jared" Bennett 2017-05-19 21:13:57 +01:00
parent 9d29eb7e29
commit fa04b50b3c
No known key found for this signature in database
GPG Key ID: 402ED51FB5D306C2
5 changed files with 51 additions and 19 deletions

View File

@ -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;

View File

@ -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,

View File

@ -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]',

View File

@ -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,
},
}); });
}); });

View File

@ -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,