98 lines
3.2 KiB
YAML
98 lines
3.2 KiB
YAML
name: "Pull Request Labeler"
|
|
on:
|
|
pull_request_target:
|
|
workflow_dispatch:
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
cancel-in-progress: true
|
|
jobs:
|
|
labeler:
|
|
permissions:
|
|
contents: read
|
|
pull-requests: write
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/labeler@v4
|
|
with:
|
|
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
|
# https://github.com/actions/labeler/issues/442#issuecomment-1297359481
|
|
sync-labels: ""
|
|
team-labels:
|
|
permissions:
|
|
contents: read
|
|
pull-requests: write
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: equitybee/team-label-action@main
|
|
with:
|
|
repo-token: ${{ secrets.EQUITY_BEE_TEAM_LABELER_ACTION_TOKEN }}
|
|
organization-name: calcom
|
|
ignore-labels: "app-store, ai, authentication, automated-testing, platform, billing, bookings, caldav, calendar-apps, ci, console, crm-apps, docs, documentation, emails, embeds, event-types, i18n, impersonation, manual-testing, ui, performance, ops-stack, organizations, public-api, routing-forms, seats, teams, webhooks, workflows, zapier"
|
|
apply-labels-from-issue:
|
|
runs-on: ubuntu-latest
|
|
|
|
permissions:
|
|
contents: none
|
|
issues: read
|
|
pull-requests: write
|
|
|
|
steps:
|
|
- name: Apply labels from linked issue to PR
|
|
uses: actions/github-script@v5
|
|
with:
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
script: |
|
|
async function getLinkedIssues(owner, repo, prNumber) {
|
|
const query = `query GetLinkedIssues($owner: String!, $repo: String!, $prNumber: Int!) {
|
|
repository(owner: $owner, name: $repo) {
|
|
pullRequest(number: $prNumber) {
|
|
closingIssuesReferences(first: 10) {
|
|
nodes {
|
|
number
|
|
labels(first: 10) {
|
|
nodes {
|
|
name
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}`;
|
|
|
|
const variables = {
|
|
owner: owner,
|
|
repo: repo,
|
|
prNumber: prNumber,
|
|
};
|
|
|
|
const result = await github.graphql(query, variables);
|
|
return result.repository.pullRequest.closingIssuesReferences.nodes;
|
|
}
|
|
|
|
const pr = context.payload.pull_request;
|
|
const linkedIssues = await getLinkedIssues(
|
|
context.repo.owner,
|
|
context.repo.repo,
|
|
pr.number
|
|
);
|
|
|
|
const labelsToAdd = new Set();
|
|
for (const issue of linkedIssues) {
|
|
if (issue.labels && issue.labels.nodes) {
|
|
for (const label of issue.labels.nodes) {
|
|
labelsToAdd.add(label.name);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (labelsToAdd.size) {
|
|
await github.rest.issues.addLabels({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
issue_number: pr.number,
|
|
labels: Array.from(labelsToAdd),
|
|
});
|
|
}
|