Skip to content

Commit ff45fb7

Browse files
committed
Check for added feature flags.
1 parent 57701b9 commit ff45fb7

2 files changed

Lines changed: 80 additions & 0 deletions

File tree

org/allPRs.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,26 @@ export const singletons = async () => {
129129
}
130130
}
131131

132+
export const remoteReleasableFeatureWarning = async () => {
133+
const changedFiles = [
134+
...danger.git.modified_files,
135+
...danger.git.created_files
136+
].filter(file => file.endsWith(".swift"));
137+
138+
if (changedFiles.length === 0) {
139+
return;
140+
}
141+
142+
for (const file of changedFiles) {
143+
let diff = await danger.git.diffForFile(file);
144+
let addedLines = diff?.added.split(/\n/);
145+
if (addedLines?.find(value => value.startsWith("+") && value.includes(".remoteReleasable(.feature"))) {
146+
warn("⚠️ Parent feature flags do not support rollouts - if you wish to use a rollout for your feature, please use a subfeature flag.");
147+
return;
148+
}
149+
}
150+
}
151+
132152
export const localizedStrings = async () => {
133153
for (let file of danger.git.modified_files) {
134154
let diff = await danger.git.diffForFile(file);
@@ -264,6 +284,7 @@ export default async () => {
264284
await xcodeprojConfiguration_macOS()
265285
await xcodeprojObjectVersion_macOS()
266286
await singletons()
287+
await remoteReleasableFeatureWarning()
267288
await localizedStrings()
268289
await licensedFonts()
269290
await newColors()
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
jest.mock("danger", () => jest.fn())
2+
import danger from 'danger'
3+
const dm = danger as any;
4+
5+
import { remoteReleasableFeatureWarning } from '../org/allPRs'
6+
7+
beforeEach(() => {
8+
dm.addedLines = ""
9+
dm.warn = jest.fn().mockReturnValue(true);
10+
11+
dm.danger = {
12+
git: {
13+
diffForFile: async (_filename) => {
14+
return { added: dm.addedLines }
15+
},
16+
modified_files: [
17+
"ModifiedFile.swift"
18+
],
19+
created_files: [
20+
"CreatedFile.swift"
21+
]
22+
}
23+
}
24+
})
25+
26+
describe("remoteReleasable(.feature warning", () => {
27+
it("does not warn with no changes to Swift files", async () => {
28+
dm.danger.git.modified_files = ["ModifiedFile.m"]
29+
dm.danger.git.created_files = []
30+
31+
await remoteReleasableFeatureWarning()
32+
expect(dm.warn).not.toHaveBeenCalled()
33+
})
34+
35+
it("does not warn with no diff in Swift files", async () => {
36+
dm.danger.git.diffForFile = async (_filename) => {}
37+
38+
await remoteReleasableFeatureWarning()
39+
expect(dm.warn).not.toHaveBeenCalled()
40+
})
41+
42+
it("does not warn with deletions", async () => {
43+
dm.addedLines = `
44+
- .remoteReleasable(.feature("example"))
45+
`
46+
47+
await remoteReleasableFeatureWarning()
48+
expect(dm.warn).not.toHaveBeenCalled()
49+
})
50+
51+
it("warns with remoteReleasable(.feature additions", async () => {
52+
dm.addedLines = `
53+
+ .remoteReleasable(.feature("example"))
54+
`
55+
56+
await remoteReleasableFeatureWarning()
57+
expect(dm.warn).toHaveBeenCalledWith("⚠️ Parent feature flags do not support rollouts - if you wish to use a rollout for your feature, please use a subfeature flag.")
58+
})
59+
})

0 commit comments

Comments
 (0)