Skip to content
Merged
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
11 changes: 11 additions & 0 deletions config/repos.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,17 @@ repos:
deleteBranchOnMerge: true
autoInit: true


- name: brand-assets
description: Shared Thaw brand assets — headers, icons, packaging art, marketing.
visibility: public
adopt: true
bare: true
hasIssues: false
hasWiki: false
hasProjects: false
hasDiscussions: false

- name: menubarspawner
description: Small macOS menu-bar helper that spawns customizable status items.
visibility: public
Expand Down
5 changes: 5 additions & 0 deletions config/rulesets.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@ rulesets:
refName:
includes:
- "~DEFAULT_BRANCH"
repositoryName:
includes:
- "~ALL"
excludes:
- brand-assets
rules:
creation: true
update: false
Expand Down
4 changes: 4 additions & 0 deletions config/schema/repos.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,10 @@
"required": ["name"],
"additionalProperties": false
}
},
"bare": {
"type": "boolean",
"description": "Adopt as a plain repo: no org labels, rulesets, CODEOWNERS, or implied team access."
}
},
"required": ["name", "description"],
Expand Down
13 changes: 8 additions & 5 deletions src/setup/resolve.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,16 +106,19 @@
hasWiki: repo.hasWiki ?? features.wiki,
hasProjects: repo.hasProjects ?? features.projects,
hasDiscussions: repo.hasDiscussions ?? features.discussions,
labels: { ...labels, ...repo.labels },
labels: repo.bare
? { ...(repo.labels ?? {}) }

Check warning on line 110 in src/setup/resolve.ts

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

The empty object is useless.

See more on https://sonarcloud.io/project/issues?id=thaw-app_platform&issues=AZ-h6LzDIPvQyd8fAU_8&open=AZ-h6LzDIPvQyd8fAU_8&pullRequest=12
: { ...labels, ...repo.labels },
teams: teamAccess,
resolvedRepoRulesets: provisionRepoRulesets
? rulesetsForRepo(repo.name, rulesets)
: [],
resolvedRepoRulesets:
repo.bare || !provisionRepoRulesets
? []
: rulesetsForRepo(repo.name, rulesets),
resolvedBranchProtection,
squashMergeCommitTitle: defaults.squashMergeCommitTitle,
squashMergeCommitMessage: defaults.squashMergeCommitMessage,
defaultBranch: defaults.defaultBranch,
codeownersContent: ctx.codeownersContent,
codeownersContent: repo.bare ? "" : ctx.codeownersContent,
pulumiName: repo.pulumiName ?? repo.name,
organization,
};
Expand Down
1 change: 1 addition & 0 deletions src/types/repo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ export const RepoConfigSchema = v.pipe(
adopt: v.optional(v.boolean()),
pulumiName: v.optional(v.string()),
archived: v.optional(v.boolean()),
bare: v.optional(v.boolean()),
hasIssues: v.optional(v.boolean()),
hasWiki: v.optional(v.boolean()),
hasProjects: v.optional(v.boolean()),
Expand Down
36 changes: 36 additions & 0 deletions test/resolve.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,42 @@ describe("buildRepoConfig", () => {
);
expect(Object.keys(built.labels ?? {})).toEqual(["global", "local"]);
});

it("bare repos skip org labels, rulesets, and CODEOWNERS", () => {
const built = buildRepoConfig(repo({ name: "brand-assets", bare: true }), {
...baseCtx,
labels: { global: { color: "000000" } },
provisionRepoRulesets: true,
rulesets: [
{
id: "main-default",
target: "branch",
enforcement: "active",
conditions: { refName: { includes: ["~DEFAULT_BRANCH"] } },
rules: {
creation: false,
update: false,
deletion: false,
nonFastForward: false,
requiredLinearHistory: false,
requiredSignatures: false,
copilotCodeReview: {
reviewDraftPullRequests: false,
reviewOnPush: false,
},
pullRequest: {},
requiredStatusChecks: { enabled: false },
requiredCodeScanning: { enabled: false },
mergeQueue: { enabled: false },
requiredDeployments: { enabled: false },
},
},
],
});
expect(built.labels).toEqual({});
expect(built.resolvedRepoRulesets).toEqual([]);
expect(built.codeownersContent).toBe("");
});
});

describe("resolveTeamAccess", () => {
Expand Down