diff --git a/.travis.yml b/.travis.yml index 70f63c3..0561326 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,4 +14,6 @@ script: - npm install - npm t -after_success: npm run coverage +after_success: + - npm run coverage + - npm run release diff --git a/package.json b/package.json index b745128..b89d7e3 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,9 @@ "doc": "react-docgen", "storybook": "start-storybook -c scripts/storybook -p 6006", "build-storybook": "build-storybook -c scripts/storybook -o .out", - "coveralls": "cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js" + "coveralls": "cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js", + "prepublishOnly": "npm run build", + "release": "semantic-release" }, "engines": { "node": ">= 6.0.0", @@ -94,6 +96,7 @@ "redux-mock-store": "^1.5.1", "resolve-url-loader": "^2.2.1", "sass-loader": "^6.0.6", + "semantic-release": "^15.5.0", "style-loader": "^0.20.1", "url-loader": "^0.6.2", "webpack": "^3.10.0", @@ -112,5 +115,12 @@ "redux": "^3.7.2", "redux-form-validators": "^2.4.3", "redux-mock-store": "^1.5.1" + }, + "release": { + "analyzeCommits": [ + { + "path": "./scripts/verify-commits.js" + } + ] } } diff --git a/scripts/verify-commits.js b/scripts/verify-commits.js new file mode 100644 index 0000000..cd4936f --- /dev/null +++ b/scripts/verify-commits.js @@ -0,0 +1,42 @@ +const releaseTypes = ['major', 'minor', 'patch', 'prerelease']; +let patterns = { + major: '', + minor: '', + patch: '', + noRelease: '', +}; + +async function commitAnalyzer(pluginConfig, { options: { analyzeCommits }, commits, logger }) { + let releaseNumber = 3; + analyzeCommits.map((onePlugin) => { + patterns = { + ...patterns, + ...onePlugin.patterns, + }; + return null; + }); + logger.log(` + Using patterns: + major - ${patterns.major} + minor - ${patterns.minor} + patch - ${patterns.patch} + noRelease - ${patterns.noRelease}`); + let i = 0; const iMax = commits.length; + for (; i < iMax; i++) { + if (commits[i].message.search(new RegExp(patterns.major), i) !== -1) { + releaseNumber = 0; + } else if (commits[i].message.search(new RegExp(patterns.minor), i) !== -1 && releaseNumber > 1) { + releaseNumber = 1; + } else if (commits[i].message.search(new RegExp(patterns.patch), i) !== -1 && releaseNumber > 2) { + releaseNumber = 2; + } else if (commits[i].message.search(new RegExp(patterns.noRelease), i) !== -1 && releaseNumber > 2) { + logger.log('No release !'); + return null; + } + } + releaseNumber = releaseNumber === 3 ? 2 : releaseNumber; + logger.log('Release version %s', releaseTypes[releaseNumber]); + return releaseTypes[releaseNumber]; +} + +module.exports = commitAnalyzer;