mirror of
https://gitee.com/ByteDance/flowgram.ai.git
synced 2025-07-07 17:43:29 +08:00
chore: setup some common config (#66)
* chore: setup some common config * chore: setup some common config * chore: setup commit lint
This commit is contained in:
parent
b726f3cfea
commit
be5d086811
39
.github/workflows/common-pr-checks.yml
vendored
Normal file
39
.github/workflows/common-pr-checks.yml
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
name: PR Common Checks
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, edited, synchronize, reopened]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
common-checks:
|
||||||
|
name: PR Common Checks
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 1
|
||||||
|
|
||||||
|
- name: Config Git User
|
||||||
|
run: |
|
||||||
|
git config --local user.name "tecvan"
|
||||||
|
git config --local user.email "fanwenjie.fe@bytedance.com"
|
||||||
|
|
||||||
|
- uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 18
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: node common/scripts/install-run-rush.js install
|
||||||
|
|
||||||
|
# PR Title Format Check
|
||||||
|
- name: Check PR Title Format
|
||||||
|
if: ${{ !contains(github.event.pull_request.title, 'WIP') && !contains(github.event.pull_request.title, 'wip') }}
|
||||||
|
env:
|
||||||
|
PR_TITLE: ${{ github.event.pull_request.title }}
|
||||||
|
run: |
|
||||||
|
node common/scripts/install-run-rush.js update-autoinstaller --name rush-commitlint && \
|
||||||
|
pushd common/autoinstallers/rush-commitlint && \
|
||||||
|
echo "$PR_TITLE" | npx commitlint --config commitlint.config.js && \
|
||||||
|
popd
|
||||||
|
|
||||||
|
# Add more common checks here
|
||||||
|
# For example: file size checks, specific file format validations, etc.
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
@ -94,7 +94,7 @@ jspm_packages/
|
|||||||
*.iml
|
*.iml
|
||||||
|
|
||||||
# Visual Studio Code
|
# Visual Studio Code
|
||||||
.vscode/
|
.vscode/settings.json
|
||||||
!.vscode/tasks.json
|
!.vscode/tasks.json
|
||||||
!.vscode/launch.json
|
!.vscode/launch.json
|
||||||
|
|
||||||
|
|||||||
13
.vscode/extentions.json
vendored
Normal file
13
.vscode/extentions.json
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"recommendations": [
|
||||||
|
"editorconfig.editorconfig",
|
||||||
|
"esbenp.prettier-vscode",
|
||||||
|
"streetsidesoftware.code-spell-checker",
|
||||||
|
"codezombiech.gitignore",
|
||||||
|
"aaron-bond.better-comments"
|
||||||
|
],
|
||||||
|
"unwantedRecommendations": [
|
||||||
|
"nucllear.vscode-extension-auto-import",
|
||||||
|
"steoates.autoimport"
|
||||||
|
]
|
||||||
|
}
|
||||||
87
common/autoinstallers/rush-commitlint/.cz-config.js
Normal file
87
common/autoinstallers/rush-commitlint/.cz-config.js
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
const chalk = require('chalk');
|
||||||
|
const spawn = require('cross-spawn');
|
||||||
|
const defaultConfig = require('cz-customizable');
|
||||||
|
const { getChangedPackages } = require('./utils');
|
||||||
|
|
||||||
|
const typesConfig = [
|
||||||
|
{ value: 'feat', name: 'A new feature' },
|
||||||
|
{ value: 'fix', name: 'A bug fix' },
|
||||||
|
{ value: 'docs', name: 'Documentation only changes' },
|
||||||
|
{
|
||||||
|
value: 'style',
|
||||||
|
name: 'Changes that do not affect the meaning of the code\n (white-space, formatting, missing semi-colons, etc)',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 'refactor',
|
||||||
|
name: 'A code change that neither fixes a bug nor adds a feature',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 'perf',
|
||||||
|
name: 'A code change that improves performance',
|
||||||
|
},
|
||||||
|
{ value: 'test', name: 'Adding missing tests' },
|
||||||
|
{
|
||||||
|
value: 'chore',
|
||||||
|
name: 'Changes to the build process or auxiliary tools',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 'build',
|
||||||
|
name: 'Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 'ci',
|
||||||
|
name: 'Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 'revert',
|
||||||
|
name: 'Reverts a previous commit',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const { stdout = '' } = spawn.sync(`git diff --staged --name-only`, {
|
||||||
|
shell: true,
|
||||||
|
encoding: 'utf8',
|
||||||
|
stdio: 'pipe',
|
||||||
|
});
|
||||||
|
const changedFiles = stdout.split('\n').filter(Boolean);
|
||||||
|
const changeSet = getChangedPackages(changedFiles);
|
||||||
|
|
||||||
|
if (changeSet.size > 1) {
|
||||||
|
process.stderr.write(
|
||||||
|
`${[
|
||||||
|
chalk.yellow(
|
||||||
|
`Multiple packages detected in current commit, please consider splitting into smaller commits`,
|
||||||
|
),
|
||||||
|
].join('\n')}\n`,
|
||||||
|
);
|
||||||
|
|
||||||
|
changeSet.clear();
|
||||||
|
changeSet.add('multiple');
|
||||||
|
}
|
||||||
|
|
||||||
|
const changedScopes = [...changeSet];
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
...defaultConfig,
|
||||||
|
types: typesConfig.map(({ value, name }) => {
|
||||||
|
return {
|
||||||
|
name: `${value}:${new Array(10 - value.length)
|
||||||
|
.fill(' ')
|
||||||
|
.join('')}${name}`,
|
||||||
|
value,
|
||||||
|
};
|
||||||
|
}),
|
||||||
|
messages: {
|
||||||
|
...defaultConfig.messages,
|
||||||
|
type: "Select the type of change that you're committing",
|
||||||
|
scope: 'Ensure the scope of this change',
|
||||||
|
subject: 'Write a short, imperative tense description of the change',
|
||||||
|
body: 'Provide a longer description of the change. Use "|" to break new line:\n',
|
||||||
|
breaking: 'List any BREAKING CHANGES (optional):\n',
|
||||||
|
confirmCommit: 'Are you sure you want to proceed with the commit above?',
|
||||||
|
},
|
||||||
|
scopes: changedScopes.join(','),
|
||||||
|
allowCustomScopes: false,
|
||||||
|
skipQuestions: ['customScope', 'footer', 'body'],
|
||||||
|
allowBreakingChanges: ['feat', 'fix'],
|
||||||
|
};
|
||||||
14
common/autoinstallers/rush-commitlint/commitlint.config.js
Normal file
14
common/autoinstallers/rush-commitlint/commitlint.config.js
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
module.exports = {
|
||||||
|
extends: ['@commitlint/config-conventional'],
|
||||||
|
rules: {
|
||||||
|
'header-max-length': [2, 'always', 150],
|
||||||
|
'subject-full-stop': [0, 'never'],
|
||||||
|
'subject-case': [
|
||||||
|
2,
|
||||||
|
'never',
|
||||||
|
[
|
||||||
|
'upper-case', // UPPERCASE
|
||||||
|
],
|
||||||
|
],
|
||||||
|
},
|
||||||
|
};
|
||||||
21
common/autoinstallers/rush-commitlint/package.json
Normal file
21
common/autoinstallers/rush-commitlint/package.json
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"name": "rush-commitlint",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"private": true,
|
||||||
|
"author": "fanwenjie.fe@bytedance.com",
|
||||||
|
"config": {
|
||||||
|
"commitizen": {
|
||||||
|
"path": "common/autoinstallers/rush-commitlint/node_modules/cz-customizable"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@commitlint/cli": "^17.2.0",
|
||||||
|
"@commitlint/config-conventional": "^17.2.0",
|
||||||
|
"@rushstack/rush-sdk": "5.100.2",
|
||||||
|
"commitizen": "^4.2.6",
|
||||||
|
"cz-customizable": "^7.2.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/node": "^20"
|
||||||
|
}
|
||||||
|
}
|
||||||
2391
common/autoinstallers/rush-commitlint/pnpm-lock.yaml
generated
Normal file
2391
common/autoinstallers/rush-commitlint/pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load Diff
37
common/autoinstallers/rush-commitlint/utils.js
Normal file
37
common/autoinstallers/rush-commitlint/utils.js
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
const { RushConfiguration } = require('@rushstack/rush-sdk')
|
||||||
|
|
||||||
|
const getRushConfiguration = (function () {
|
||||||
|
let rushConfiguration = null
|
||||||
|
return function () {
|
||||||
|
// eslint-disable-next-line
|
||||||
|
return (rushConfiguration ||= RushConfiguration.loadFromDefaultLocation({
|
||||||
|
startingFolder: process.cwd(),
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
})()
|
||||||
|
|
||||||
|
function getChangedPackages(changedFiles) {
|
||||||
|
const changedPackages = new Set()
|
||||||
|
|
||||||
|
try {
|
||||||
|
const rushConfiguration = getRushConfiguration()
|
||||||
|
const { rushJsonFolder } = rushConfiguration
|
||||||
|
const lookup = rushConfiguration.getProjectLookupForRoot(rushJsonFolder)
|
||||||
|
for (const file of changedFiles) {
|
||||||
|
const project = lookup.findChildPath(file)
|
||||||
|
// 如果没找到注册的包信息,则认为是通用文件更改
|
||||||
|
const packageName = project?.packageName || 'misc'
|
||||||
|
if (!changedPackages.has(packageName)) {
|
||||||
|
changedPackages.add(packageName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e)
|
||||||
|
throw e
|
||||||
|
}
|
||||||
|
|
||||||
|
return changedPackages
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.getChangedPackages = getChangedPackages
|
||||||
|
exports.getRushConfiguration = getRushConfiguration
|
||||||
24
common/git-hooks/commit-msg.sample → common/git-hooks/commit-msg
Normal file → Executable file
24
common/git-hooks/commit-msg.sample → common/git-hooks/commit-msg
Normal file → Executable file
@ -1,4 +1,4 @@
|
|||||||
#!/bin/sh
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# This is an example Git hook for use with Rush. To enable this hook, rename this file
|
# This is an example Git hook for use with Rush. To enable this hook, rename this file
|
||||||
# to "commit-msg" and then run "rush install", which will copy it from common/git-hooks
|
# to "commit-msg" and then run "rush install", which will copy it from common/git-hooks
|
||||||
@ -18,8 +18,22 @@
|
|||||||
|
|
||||||
# This example enforces that commit message should contain a minimum amount of
|
# This example enforces that commit message should contain a minimum amount of
|
||||||
# description text.
|
# description text.
|
||||||
if [ `cat $1 | wc -w` -lt 3 ]; then
|
# if [ `cat $1 | wc -w` -lt 3 ]; then
|
||||||
echo ""
|
# echo ""
|
||||||
echo "Invalid commit message: The message must contain at least 3 words."
|
# echo "Invalid commit message: The message must contain at least 3 words."
|
||||||
exit 1
|
# exit 1
|
||||||
|
# fi
|
||||||
|
|
||||||
|
# rebase 过程中分支名格式为 (no branch, rebasing chore/replace-rushtool)
|
||||||
|
# 正常提交时分支名格式为 chore/replace-rushtool
|
||||||
|
BRANCH_NAME=$(git branch | grep '*' | sed 's/* //')
|
||||||
|
# 如果匹配到 rebase 格式的输出,认为是在rebase ,则跳过自动推送
|
||||||
|
if [[ "X${BRANCH_NAME}" == "X(no branch"* ]]; then
|
||||||
|
exit
|
||||||
|
else
|
||||||
|
node common/scripts/install-run-rush.js -q commitlint \
|
||||||
|
--config common/autoinstallers/rush-commitlint/commitlint.config.js \
|
||||||
|
--edit "$1" || exit 1
|
||||||
|
# 如果当前分支是 main 分支,则不进行推送
|
||||||
|
node infra/rush-x/bin/run change || exit 1
|
||||||
fi
|
fi
|
||||||
4
common/git-hooks/post-checkout
Executable file
4
common/git-hooks/post-checkout
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# avoid conflicts in pnpm lock
|
||||||
|
# https://7tonshark.com/posts/avoid-conflicts-in-pnpm-lock/
|
||||||
|
git config merge.ours.driver true
|
||||||
6
package-lock.json
generated
6
package-lock.json
generated
@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "flow-editor-public",
|
|
||||||
"lockfileVersion": 3,
|
|
||||||
"requires": true,
|
|
||||||
"packages": {}
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user