diff --git a/.github/workflows/danger.yml b/.github/workflows/danger.yml new file mode 100644 index 000000000..f11fb9360 --- /dev/null +++ b/.github/workflows/danger.yml @@ -0,0 +1,20 @@ +name: Danger CI + +on: [pull_request] + +jobs: + build: + runs-on: ubuntu-latest + name: Danger + steps: + - uses: actions/checkout@v2 + + - uses: actions/cache@v2 + with: + path: ~/.danger-swift + key: danger-swift-cache-key + + - name: Danger + uses: docker://ghcr.io/danger/danger-swift-with-swiftlint:3.12.3 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.swiftlint.yml b/.swiftlint.yml index 66730e43a..10519fb37 100755 --- a/.swiftlint.yml +++ b/.swiftlint.yml @@ -46,6 +46,3 @@ custom_rules: match_kinds: identifier message: "MXLog should be used instead of os_log()" severity: error - - - diff --git a/Brewfile.lock.json b/Brewfile.lock.json index f77487fc7..d5df96685 100644 --- a/Brewfile.lock.json +++ b/Brewfile.lock.json @@ -103,10 +103,10 @@ "system": { "macos": { "monterey": { - "HOMEBREW_VERSION": "3.4.8", + "HOMEBREW_VERSION": "3.4.9", "HOMEBREW_PREFIX": "/opt/homebrew", - "Homebrew/homebrew-core": "c8e031fcd136549b38e0275bc7a3f9969caa60d3", - "CLT": "12.5.0.22.9", + "Homebrew/homebrew-core": "297be05c529835e0e211de450aa55836b6b1fca7", + "CLT": "13.0.0.0.1.1627064638", "Xcode": "13.3.1", "macOS": "12.2.1" } diff --git a/Dangerfile.swift b/Dangerfile.swift new file mode 100644 index 000000000..f4256cccf --- /dev/null +++ b/Dangerfile.swift @@ -0,0 +1,77 @@ +import Foundation +import Danger + +SwiftLint.lint(inline: true) + +let danger = Danger() + +// Warn when there is a big PR +if (danger.github.pullRequest.additions ?? 0) > 500 { + 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 hasChangelog = danger.git.modifiedFiles.contains("/changelog.d") + +if editedFiles.count > 0 && !hasChangelog { + 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("vector-im/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 consinder using them for better tracking.") + } +} + +// Check for a sign-off +let signOff = "Signed-off-by:" + +let allowList = ["stefanceriu", + "Johennes", + "yostyle", + "SBiOSoftWhare", + "ismailgulek", + "Anderas", + "pixlwave", + "langleyd", + "manuroe", + "gileluard", + "phlniji", + "MaximeEvrard42", + "aringenbach"] + +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 { + fail("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.") + } +} diff --git a/ElementX.xcodeproj/project.pbxproj b/ElementX.xcodeproj/project.pbxproj index 4bc8d09bc..643ee5444 100644 --- a/ElementX.xcodeproj/project.pbxproj +++ b/ElementX.xcodeproj/project.pbxproj @@ -1623,6 +1623,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MACOSX_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1687,6 +1688,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MACOSX_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; diff --git a/project.yml b/project.yml index d8f3353a2..d4e664448 100644 --- a/project.yml +++ b/project.yml @@ -10,6 +10,7 @@ options: createIntermediateGroups: true deploymentTarget: iOS: "15.0" + macOS: "12.0" settings: CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED: YES