Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
660 changes: 330 additions & 330 deletions .yarn/releases/yarn-4.9.4.cjs → .yarn/releases/yarn-4.10.3.cjs

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion .yarnrc.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
nodeLinker: node-modules

yarnPath: .yarn/releases/yarn-4.9.4.cjs
yarnPath: .yarn/releases/yarn-4.10.3.cjs
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
"dependencies": {
"@electron/github-app-auth": "^3.0.0",
"@octokit/graphql": "^5.0.6",
"@octokit/rest": "^21.1.1",
"@octokit/rest": "^22.0.0",
"@octokit/webhooks": "^13.8.2",
"@slack/web-api": "^6.8.0",
"@slack/webhook": "^7.0.0",
Expand All @@ -38,7 +38,7 @@
"queue": "^6.0.2"
},
"devDependencies": {
"@octokit/openapi-types": "^24.0.0",
"@octokit/openapi-types": "^26.0.0",
"@types/dotenv": "^8.2.3",
"@types/dotenv-safe": "^9.1.0",
"@types/express": "^4.17.0",
Expand All @@ -58,5 +58,5 @@
"prettier --write"
]
},
"packageManager": "yarn@4.9.4+sha512.7b1cb0b62abba6a537b3a2ce00811a843bea02bcf53138581a6ae5b1bf563f734872bd47de49ce32a9ca9dcaff995aa789577ffb16811da7c603dcf69e73750b"
"packageManager": "yarn@4.10.3+sha512.c38cafb5c7bb273f3926d04e55e1d8c9dfa7d9c3ea1f36a4868fa028b9e5f72298f0b7f401ad5eb921749eb012eb1c3bb74bf7503df3ee43fd600d14a018266f"
}
69 changes: 64 additions & 5 deletions src/permissions/ruleset.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,31 @@
import type { components as OctokitTypes } from '@octokit/openapi-types';
import { diff } from 'jest-diff';

import { Ruleset } from './types.js';
import { OrgRuleset, Ruleset } from './types.js';

export function rulesetToGithub(ruleset: Ruleset, allTeams: { id: number; name: string }[]) {
const generatedRules: OctokitTypes['schemas']['repository-rule'][] = [];
type GeneratedRules =
| OctokitTypes['schemas']['repository-rule-creation']
| OctokitTypes['schemas']['repository-rule-update']
| OctokitTypes['schemas']['repository-rule-deletion']
| OctokitTypes['schemas']['repository-rule-required-linear-history']
| OctokitTypes['schemas']['repository-rule-required-deployments']
| OctokitTypes['schemas']['repository-rule-required-signatures']
| OctokitTypes['schemas']['repository-rule-pull-request']
| OctokitTypes['schemas']['repository-rule-required-status-checks']
| OctokitTypes['schemas']['repository-rule-non-fast-forward']
| OctokitTypes['schemas']['repository-rule-commit-message-pattern']
| OctokitTypes['schemas']['repository-rule-commit-author-email-pattern']
| OctokitTypes['schemas']['repository-rule-committer-email-pattern']
| OctokitTypes['schemas']['repository-rule-branch-name-pattern']
| OctokitTypes['schemas']['repository-rule-tag-name-pattern']
| OctokitTypes['schemas']['repository-rule-file-path-restriction']
| OctokitTypes['schemas']['repository-rule-max-file-path-length']
| OctokitTypes['schemas']['repository-rule-file-extension-restriction']
| OctokitTypes['schemas']['repository-rule-max-file-size']
| OctokitTypes['schemas']['repository-rule-workflows'];

export function repoRulesetToGithub(ruleset: Ruleset, allTeams: { id: number; name: string }[]) {
const generatedRules: GeneratedRules[] = [];
if (ruleset.rules) {
for (const basicRule of ruleset.rules) {
switch (basicRule) {
Expand Down Expand Up @@ -98,6 +119,42 @@ export function rulesetToGithub(ruleset: Ruleset, allTeams: { id: number; name:
} as const;
}

export function orgRulesetToGithub(ruleset: OrgRuleset, allTeams: { id: number; name: string }[]) {
const base = repoRulesetToGithub(ruleset, allTeams);

if (ruleset.repositories.target_by === 'properties') {
return {
...base,
conditions: {
...base.conditions,
repository_property: {
include: ruleset.repositories.include.map((r) => ({
name: r.name,
property_values: r.values,
source: 'custom' as const,
})),
exclude: ruleset.repositories.exclude.map((r) => ({
name: r.name,
property_values: r.values,
source: 'custom' as const,
})),
},
},
} as const;
}

return {
...base,
conditions: {
...base.conditions,
repository_name: {
include: ruleset.repositories.include,
exclude: ruleset.repositories.exclude,
},
},
} as const;
}

type BypassActor = Required<OctokitTypes['schemas']['repository-ruleset']>['bypass_actors'][0];
function sortBypassActors(a: BypassActor, b: BypassActor): number {
if (a.actor_type === b.actor_type) {
Expand All @@ -107,14 +164,16 @@ function sortBypassActors(a: BypassActor, b: BypassActor): number {
}

export function getDifferenceWithGithubRuleset(
ruleset: ReturnType<typeof rulesetToGithub>,
ruleset: ReturnType<typeof repoRulesetToGithub> | ReturnType<typeof orgRulesetToGithub>,
githubRuleset: OctokitTypes['schemas']['repository-ruleset'] | null,
stripAnsi: boolean,
) {
const _clonedGithubRuleset: OctokitTypes['schemas']['repository-ruleset'] = githubRuleset
? JSON.parse(JSON.stringify(githubRuleset))
: githubRuleset;
const clonedGitHubRuleset: ReturnType<typeof rulesetToGithub> = githubRuleset
const clonedGitHubRuleset:
| ReturnType<typeof repoRulesetToGithub>
| ReturnType<typeof orgRulesetToGithub> = githubRuleset
? {
name: _clonedGithubRuleset.name,
target: _clonedGithubRuleset.target as any,
Expand Down
Loading