👷(circle) setup circle ci
Add circleci configuration. Add jobs and workflows.
This commit is contained in:
176
.circleci/config.yml
Normal file
176
.circleci/config.yml
Normal file
@@ -0,0 +1,176 @@
|
||||
version: 2.1
|
||||
|
||||
aliases:
|
||||
- &checkout_cunningham
|
||||
checkout:
|
||||
path: ~/cunningham
|
||||
|
||||
- &restore_node_modules
|
||||
restore_cache:
|
||||
name: Restore node_modules cache
|
||||
keys:
|
||||
- v1-front-dependencies-{{ checksum "~/cunningham/yarn.lock" }}
|
||||
|
||||
jobs:
|
||||
lint-git:
|
||||
docker:
|
||||
- image: cimg/python:3.11
|
||||
working_directory: ~/cunningham
|
||||
steps:
|
||||
- checkout:
|
||||
path: ~/cunningham
|
||||
- run:
|
||||
name: Check absence of fixup commits
|
||||
command: |
|
||||
! git log origin/main..HEAD | grep 'fixup!'
|
||||
- run:
|
||||
name: Install gitlint
|
||||
command: |
|
||||
pip install --user requests gitlint
|
||||
- run:
|
||||
name: lint commit messages added to main
|
||||
command: |
|
||||
~/.local/bin/gitlint --commits origin/main..HEAD
|
||||
|
||||
# Check that the CHANGELOG has been updated in the current branch
|
||||
check-changelog:
|
||||
docker:
|
||||
- image: cimg/base:2022.11
|
||||
working_directory: ~/cunningham
|
||||
steps:
|
||||
- checkout:
|
||||
path: ~/cunningham
|
||||
- run:
|
||||
name: Check that the CHANGELOG has been modified in the current branch
|
||||
command: |
|
||||
git whatchanged --name-only --pretty="" origin..HEAD | grep CHANGELOG
|
||||
|
||||
# Check that the CHANGELOG max line length does not exceed 80 characters
|
||||
lint-changelog:
|
||||
docker:
|
||||
- image: debian:stretch
|
||||
working_directory: ~/cunningham
|
||||
steps:
|
||||
- checkout:
|
||||
path: ~/cunningham
|
||||
- run:
|
||||
name: Check CHANGELOG max line length
|
||||
command: |
|
||||
# Get the longuest line width (ignoring release links)
|
||||
test $(cat CHANGELOG.md | grep -Ev "^\[.*\]: https://github.com/openfun" | wc -L) -le 80
|
||||
|
||||
# Check that renovate configuration file is valid
|
||||
check-renovate-configuration:
|
||||
docker:
|
||||
- image: renovate/renovate
|
||||
auth:
|
||||
username: $DOCKER_USER
|
||||
password: $DOCKER_PASS
|
||||
working_directory: ~/cunningham
|
||||
steps:
|
||||
- *checkout_cunningham
|
||||
- run:
|
||||
name: Run renovate-config-validator command
|
||||
command: renovate-config-validator
|
||||
|
||||
# ---- Codebase -----
|
||||
build:
|
||||
docker:
|
||||
- image: cimg/node:16.18
|
||||
working_directory: ~/cunningham
|
||||
steps:
|
||||
- *checkout_cunningham
|
||||
- *restore_node_modules
|
||||
# If the yarn.lock file is not up-to-date with the package.json file,
|
||||
# using the --frozen-lockfile should fail.
|
||||
- run:
|
||||
name: Install dependencies
|
||||
command: yarn install --frozen-lockfile
|
||||
- run:
|
||||
name: Build packages
|
||||
command: yarn build
|
||||
- persist_to_workspace:
|
||||
root: ~/cunningham
|
||||
paths:
|
||||
- apps/demo/dist
|
||||
- packages/tokens/dist
|
||||
- packages/react/dist
|
||||
- save_cache:
|
||||
paths:
|
||||
- ./node_modules
|
||||
- ./apps/demo/node_modules
|
||||
- ./packages/eslint-config-custom/node_modules
|
||||
- ./packages/react/node_modules
|
||||
- ./packages/tokens/node_modules
|
||||
key: v1-front-dependencies-{{ checksum "yarn.lock" }}
|
||||
lint:
|
||||
docker:
|
||||
- image: cimg/node:16.18
|
||||
working_directory: ~/cunningham
|
||||
steps:
|
||||
- *checkout_cunningham
|
||||
- *restore_node_modules
|
||||
- run:
|
||||
name: Run linter over all workspaces
|
||||
command: yarn lint
|
||||
|
||||
test:
|
||||
docker:
|
||||
- image: cimg/node:16.18
|
||||
working_directory: ~/cunningham
|
||||
steps:
|
||||
- *checkout_cunningham
|
||||
- *restore_node_modules
|
||||
- run:
|
||||
name: Run test suites over all workspaces
|
||||
command: yarn test
|
||||
|
||||
|
||||
workflows:
|
||||
version: 2.1
|
||||
|
||||
cunningham:
|
||||
jobs:
|
||||
# Git jobs
|
||||
#
|
||||
# Check validity of git history
|
||||
- lint-git:
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
# Check CHANGELOG update
|
||||
- check-changelog:
|
||||
filters:
|
||||
branches:
|
||||
ignore: main
|
||||
tags:
|
||||
only: /(?!^v).*/
|
||||
- lint-changelog:
|
||||
filters:
|
||||
branches:
|
||||
ignore: main
|
||||
tags:
|
||||
only: /.*/
|
||||
# Check Renovate
|
||||
- check-renovate-configuration:
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
# ---- Codebase ----
|
||||
- build:
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
- lint:
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
requires:
|
||||
- build
|
||||
- test:
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
requires:
|
||||
- build
|
||||
- lint
|
||||
78
.gitlint
Normal file
78
.gitlint
Normal file
@@ -0,0 +1,78 @@
|
||||
# All these sections are optional, edit this file as you like.
|
||||
[general]
|
||||
# Ignore certain rules, you can reference them by their id or by their full name
|
||||
# ignore=title-trailing-punctuation, T3
|
||||
|
||||
# verbosity should be a value between 1 and 3, the commandline -v flags take precedence over this
|
||||
# verbosity = 2
|
||||
|
||||
# By default gitlint will ignore merge commits. Set to 'false' to disable.
|
||||
# ignore-merge-commits=true
|
||||
|
||||
# By default gitlint will ignore fixup commits. Set to 'false' to disable.
|
||||
# ignore-fixup-commits=true
|
||||
|
||||
# By default gitlint will ignore squash commits. Set to 'false' to disable.
|
||||
# ignore-squash-commits=true
|
||||
|
||||
# Enable debug mode (prints more output). Disabled by default.
|
||||
# debug=true
|
||||
|
||||
# Set the extra-path where gitlint will search for user defined rules
|
||||
# See http://jorisroovers.github.io/gitlint/user_defined_rules for details
|
||||
extra-path=gitlint/
|
||||
|
||||
# [title-max-length]
|
||||
# line-length=80
|
||||
|
||||
[title-must-not-contain-word]
|
||||
# Comma-separated list of words that should not occur in the title. Matching is case
|
||||
# insensitive. It's fine if the keyword occurs as part of a larger word (so "WIPING"
|
||||
# will not cause a violation, but "WIP: my title" will.
|
||||
words=wip
|
||||
|
||||
#[title-match-regex]
|
||||
# python like regex (https://docs.python.org/2/library/re.html) that the
|
||||
# commit-msg title must be matched to.
|
||||
# Note that the regex can contradict with other rules if not used correctly
|
||||
# (e.g. title-must-not-contain-word).
|
||||
#regex=
|
||||
|
||||
# [B1]
|
||||
# B1 = body-max-line-length
|
||||
# line-length=120
|
||||
# [body-min-length]
|
||||
# min-length=5
|
||||
|
||||
# [body-is-missing]
|
||||
# Whether to ignore this rule on merge commits (which typically only have a title)
|
||||
# default = True
|
||||
# ignore-merge-commits=false
|
||||
|
||||
# [body-changed-file-mention]
|
||||
# List of files that need to be explicitly mentioned in the body when they are changed
|
||||
# This is useful for when developers often erroneously edit certain files or git submodules.
|
||||
# By specifying this rule, developers can only change the file when they explicitly reference
|
||||
# it in the commit message.
|
||||
# files=gitlint/rules.py,README.md
|
||||
|
||||
# [author-valid-email]
|
||||
# python like regex (https://docs.python.org/2/library/re.html) that the
|
||||
# commit author email address should be matched to
|
||||
# For example, use the following regex if you only want to allow email addresses from foo.com
|
||||
# regex=[^@]+@foo.com
|
||||
|
||||
[ignore-by-title]
|
||||
# Allow empty body & wrong title pattern only when bots (pyup/greenkeeper)
|
||||
# upgrade dependencies
|
||||
regex=^(⬆️.*|Update (.*) from (.*) to (.*)|(chore|fix)\(package\): update .*)$
|
||||
ignore=B6,UC1
|
||||
|
||||
# [ignore-by-body]
|
||||
# Ignore certain rules for commits of which the body has a line that matches a regex
|
||||
# E.g. Match bodies that have a line that that contain "release"
|
||||
# regex=(.*)release(.*)
|
||||
#
|
||||
# Ignore certain rules, you can reference them by their id or by their full name
|
||||
# Use 'all' to ignore all rules
|
||||
# ignore=T1,body-min-length
|
||||
37
gitlint/gitlint_emoji.py
Normal file
37
gitlint/gitlint_emoji.py
Normal file
@@ -0,0 +1,37 @@
|
||||
"""
|
||||
Gitlint extra rule to validate that the message title is of the form
|
||||
"<gitmoji>(<scope>) <subject>"
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import re
|
||||
|
||||
import requests
|
||||
|
||||
from gitlint.rules import CommitMessageTitle, LineRule, RuleViolation
|
||||
|
||||
|
||||
class GitmojiTitle(LineRule):
|
||||
"""
|
||||
This rule will enforce that each commit title is of the form "<gitmoji>(<scope>) <subject>"
|
||||
where gitmoji is an emoji from the list defined in https://gitmoji.carloscuesta.me and
|
||||
subject should be all lowercase
|
||||
"""
|
||||
|
||||
id = "UC1"
|
||||
name = "title-should-have-gitmoji-and-scope"
|
||||
target = CommitMessageTitle
|
||||
|
||||
def validate(self, title, _commit):
|
||||
"""
|
||||
Download the list possible gitmojis from the project's github repository and check that
|
||||
title contains one of them.
|
||||
"""
|
||||
gitmojis = requests.get(
|
||||
"https://raw.githubusercontent.com/carloscuesta/gitmoji/master/src/data/gitmojis.json"
|
||||
).json()["gitmojis"]
|
||||
emojis = [item["emoji"] for item in gitmojis]
|
||||
pattern = r"^({:s})\(.*\)\s[a-z].*$".format("|".join(emojis))
|
||||
if not re.search(pattern, title):
|
||||
violation_msg = 'Title does not match regex "<gitmoji>(<scope>) <subject>"'
|
||||
return [RuleViolation(self.id, violation_msg, title)]
|
||||
Reference in New Issue
Block a user