Skip to content

Commit

Permalink
fix(testing): activate GitHub workflow for commits (#432)
Browse files Browse the repository at this point in the history
* commit_lint, GitHub pull request workflow
* commit.test, actions.commit, move original check
  • Loading branch information
cdcabrera committed Oct 26, 2020
1 parent 4b8f86a commit 37dd445
Show file tree
Hide file tree
Showing 3 changed files with 134 additions and 99 deletions.
36 changes: 36 additions & 0 deletions .github/workflows/commit_lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: Commit lint
on:
pull_request
env:
BRANCH: ${{ github.base_ref }}

jobs:
Commits:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [12.x]
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Git commits
run: |
git remote add ssh-origin "https://github.com/$GITHUB_REPOSITORY"
git fetch ssh-origin
COMMITS=$(git cherry -v ssh-origin/${{ env.BRANCH }} | grep "+")
echo ::set-env name=GIT_COMMITS::$COMMITS
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: Lint
uses: actions/github-script@v2
with:
script: |
const actionCommit = require(`${process.env.GITHUB_WORKSPACE}/scripts/actions.commit.js`)
const { resultsArray, resultsString } = actionCommit(process.env.GIT_COMMITS)
if (resultsArray.length) {
core.setFailed(resultsString)
}
98 changes: 98 additions & 0 deletions scripts/actions.commit.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
/**
* Breakout individual commits.
*
* @param {string} commits
* @returns {{issueNumber: string, description: string, trimmedMessage: string, hash: string, typeScope: string}[]}
*/
const messages = commits =>
commits
.trim()
.replace(/\n/g, '')
.replace(/\+\s/g, '\n')
.replace(/\n/, '')
.split(/\n/g)
.map(message => {
const [hashTypeScope, ...issueNumberDescription] =
(/:/.test(message) && message.split(/:/)) || message.split(/\s/);

const [hash, typeScope = ''] = hashTypeScope.split(/\s/);
const [issueNumber, ...description] = issueNumberDescription.join(' ').trim().split(/\s/g);

const updatedTypeScope = (typeScope && `${typeScope}:`) || '';
const updatedDescription = description.join(' ');
const [updatedMessage, remainingMessage = ''] = `${updatedTypeScope} ${issueNumber} ${updatedDescription}`.split(
/\(#\d{1,5}\)/
);

return {
trimmedMessage:
(remainingMessage.trim().length === 0 && updatedMessage.trim()) ||
`${updatedTypeScope} ${issueNumber} ${updatedDescription}`,
hash,
typeScope: updatedTypeScope,
issueNumber,
description: updatedDescription
};
});

/**
* Apply valid/invalid checks.
*
* @param {Array} parsedMessages
* @returns {Array}
*/
const messagesList = parsedMessages =>
parsedMessages.map(message => {
const { trimmedMessage = null, typeScope = null, issueNumber = null, description = null } = message;

const issueNumberException =
/(^chore\([\d\D]+\))|(^fix\([\d\D]+\))|(^perf\([\d\D]+\))|(^build\([\d\D]+\))|(^[\d\D]+\(build\))/.test(
typeScope
) || /\(#[\d\D]+\)$/.test(description);

const typeScopeValid = (/(^[\d\D]+\([\d\D]+\):$)|(^[\d\D]+:$)/.test(typeScope) && 'valid') || 'INVALID: type scope';

const issueNumberValid =
(/(^issues\/[\d,]+$)/.test(issueNumber) && 'valid') ||
(issueNumberException && 'valid') ||
'INVALID: issue number';

const descriptionValid =
(/(^[\d\D]+$)/.test(description || (issueNumberException && issueNumber)) && 'valid') ||
(issueNumberException && !description && issueNumber && 'valid') ||
'INVALID: description';

const lengthValid =
(trimmedMessage && trimmedMessage.length <= 65 && 'valid') ||
`INVALID: message length (${trimmedMessage && trimmedMessage.length} > 65)`;

// <type>([scope]): issues/<number> <description> <messageLength>
return `${typeScope}<${typeScopeValid}> ${issueNumber}<${issueNumberValid}> ${description}<${descriptionValid}><${lengthValid}>`;
});

/**
* Remove valid commits.
*
* @param {Array} parsedMessagesList
* @returns {Array}
*/
const filteredMessages = parsedMessagesList =>
parsedMessagesList.filter(value => !/<valid>[\d\D]*<valid>[\d\D]*<valid><valid>/.test(value));

/**
* If commits exist, lint them.
*
* @param {string} commits
* @returns {{resultsArray: Array, resultsString: string}}
*/
module.exports = commits => {
const lintResults = { resultsArray: [], resultsString: '' };

if (commits) {
const parsedResults = filteredMessages(messagesList(messages(commits)));
lintResults.resultsArray = parsedResults;
lintResults.resultsString = JSON.stringify(parsedResults, null, 2);
}

return lintResults;
};
99 changes: 0 additions & 99 deletions tests/commit.test.js

This file was deleted.

0 comments on commit 37dd445

Please sign in to comment.