mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2025-12-22 22:20:02 +00:00
* ci: replace pull-request actions with cyborg Signed-off-by: tison <wander4096@gmail.com> * skip cron maintenance in forks Signed-off-by: tison <wander4096@gmail.com> --------- Signed-off-by: tison <wander4096@gmail.com>
80 lines
2.9 KiB
TypeScript
80 lines
2.9 KiB
TypeScript
/*
|
|
* Copyright 2023 Greptime Team
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
import * as core from '@actions/core'
|
|
import {handleError, obtainClient} from "@/common";
|
|
import {context} from "@actions/github";
|
|
import {PullRequestEvent} from "@octokit/webhooks-types";
|
|
import {Options, sync as conventionalCommitsParser} from 'conventional-commits-parser';
|
|
import conventionalCommitTypes from 'conventional-commit-types';
|
|
import _ from "lodash";
|
|
|
|
const defaultTypes = Object.keys(conventionalCommitTypes.types)
|
|
const breakingChangeLabel = "breaking-change"
|
|
|
|
// These options are copied from [1].
|
|
// [1] https://github.com/conventional-changelog/conventional-changelog/blob/3f60b464/packages/conventional-changelog-conventionalcommits/src/parser.js
|
|
export const parserOpts: Options = {
|
|
headerPattern: /^(\w*)(?:\((.*)\))?!?: (.*)$/,
|
|
breakingHeaderPattern: /^(\w*)(?:\((.*)\))?!: (.*)$/,
|
|
headerCorrespondence: [
|
|
'type',
|
|
'scope',
|
|
'subject'
|
|
],
|
|
noteKeywords: ['BREAKING CHANGE', 'BREAKING-CHANGE'],
|
|
revertPattern: /^(?:Revert|revert:)\s"?([\s\S]+?)"?\s*This reverts commit (\w*)\./i,
|
|
revertCorrespondence: ['header', 'hash'],
|
|
issuePrefixes: ['#']
|
|
}
|
|
|
|
async function main() {
|
|
if (!context.payload.pull_request) {
|
|
throw new Error(`Only pull request event supported. ${context.eventName} is unsupported.`)
|
|
}
|
|
|
|
const client = obtainClient("GITHUB_TOKEN")
|
|
const payload = context.payload as PullRequestEvent
|
|
const { owner, repo, number } = {
|
|
owner: payload.pull_request.base.user.login,
|
|
repo: payload.pull_request.base.repo.name,
|
|
number: payload.pull_request.number,
|
|
}
|
|
const { data: pull_request } = await client.rest.pulls.get({
|
|
owner, repo, pull_number: number,
|
|
})
|
|
|
|
const commit = conventionalCommitsParser(pull_request.title, parserOpts)
|
|
core.info(`Receive commit: ${JSON.stringify(commit)}`)
|
|
|
|
if (!commit.type) {
|
|
throw Error(`Malformed commit: ${JSON.stringify(commit)}`)
|
|
}
|
|
|
|
if (!defaultTypes.includes(commit.type)) {
|
|
throw Error(`Unexpected type ${JSON.stringify(commit.type)} of commit: ${JSON.stringify(commit)}`)
|
|
}
|
|
|
|
const breakingChanges = _.filter(commit.notes, _.matches({ title: 'BREAKING CHANGE'}))
|
|
if (breakingChanges.length > 0) {
|
|
await client.rest.issues.addLabels({
|
|
owner, repo, issue_number: number, labels: [breakingChangeLabel]
|
|
})
|
|
}
|
|
}
|
|
|
|
main().catch(handleError)
|