import Danger import Foundation SwiftLint.lint(inline: true) let danger = Danger() // Warn when there is a big PR if (danger.github.pullRequest.additions ?? 0) > 1000 { warn("This pull request seems relatively large. Please consider splitting it into multiple smaller ones.") } // Check that the PR has a description if danger.github.pullRequest.body?.isEmpty ?? true { warn("Please provide a description for this PR.") } // Request a changelog for each app change let editedFiles = danger.git.modifiedFiles + danger.git.createdFiles let changelogFiles = editedFiles.filter { $0.hasPrefix("changelog.d/") } if editedFiles.count > 0, changelogFiles.isEmpty { warn("Please add a changelog.") } // Check for a ticket number if let ticketNumberRegex = try? NSRegularExpression(pattern: "#\\d+") { let missingTicketNumber = !danger.git.commits.filter { !$0.message.contains("element-hq/element-x-ios/issues/") && ticketNumberRegex.firstMatch(in: $0.message, options: [], range: .init(location: 0, length: $0.message.utf16.count)) == nil }.isEmpty if missingTicketNumber { warn("Some of the commits are missing ticket numbers. Please consider squashing all commits that don't have a tracking number.") } } // Check for a sign-off let signOff = "Signed-off-by:" let allowList = ["stefanceriu", "Johennes", "yostyle", "SBiOSoftWhare", "ismailgulek", "Anderas", "pixlwave", "langleyd", "manuroe", "gileluard", "phlniji", "aringenbach", "flescio", "Velin92", "alfogrillo", "nimau"] let requiresSignOff = !allowList.contains(where: { $0.caseInsensitiveCompare(danger.github.pullRequest.user.login) == .orderedSame }) if requiresSignOff { let hasPRBodySignOff = danger.github.pullRequest.body?.contains(signOff) ?? false let isMissingCommitsSignOff = !danger.git.commits.filter { !$0.message.contains(signOff) }.isEmpty if !hasPRBodySignOff, isMissingCommitsSignOff { warn("Please add a sign-off to either the PR description or to the commits themselves.") } } // Check for screenshots on view changes let hasChangedViews = !editedFiles.filter { $0.lowercased().contains("/view") }.isEmpty if hasChangedViews { if (danger.github.pullRequest.body?.contains("user-images") ?? false) == false { warn("You seem to have made changes to views. Please consider adding screenshots.") } } // Check for pngs on resources let hasPngs = !editedFiles.filter { $0.lowercased().contains(".xcassets") && $0.lowercased().hasSuffix(".png") }.isEmpty if hasPngs { warn("You seem to have made changes to some resource images. Please consider using an SVG or PDF.") }