Skip to content

Commit

Permalink
Merge pull request #28 from yumemi-inc/feature/git_hosting
Browse files Browse the repository at this point in the history
feat: support for Git hosting other than GitHub
  • Loading branch information
novr authored Jan 15, 2024
2 parents 038ed10 + 2cb3ac1 commit 632f117
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 13 deletions.
2 changes: 1 addition & 1 deletion Sources/DangerSwiftEda/DangerDSL+.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ extension DangerDSL {
public var eda: Eda {
.init(
prMetaDataResolver: { .init(
gitHubInstanceResolver: { github },
gitHostingInstanceResolver: { Eda.gitHostingInstance ?? github },
gitInstanceResolver: { git },
hammerResolver: { hammer }
)},
Expand Down
7 changes: 6 additions & 1 deletion Sources/DangerSwiftEda/Eda.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ import DangerSwiftShoki

// MARK: resolvers and executors
public struct Eda {

public static var gitHostingInstance: GitHostingInstance?

private let prMetaDataResolver: () -> PRMetaData
private let prUtilityResolver: () -> PRUtility
private let shokiResolver: () -> Shoki
Expand Down Expand Up @@ -43,6 +44,10 @@ extension Eda {
let utility = prUtilityResolver()
let shoki = shokiResolver()

if metadata.customGitHostingInstance == nil {
utility.message("local PR Check: skip")
return
}
do {
let report = try workflow.doWorkflowCheck(against: metadata, using: utility)
shoki.report(report)
Expand Down
87 changes: 87 additions & 0 deletions Sources/DangerSwiftEda/GitHostingInstance.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
//
// GitHostingInstance.swift
//
//
// Created by 古宮 伸久 on 2024/01/12.
//

import Danger

public protocol GitHostingInstance {
var baseBranchName: String { get }
var headBranchName: String { get }
var additionLines: Int? { get }
var deletionLines: Int? { get }
}

extension Danger.GitHub: GitHostingInstance {
public var baseBranchName: String {
pullRequest.base.ref
}

public var headBranchName: String {
pullRequest.head.ref
}

public var additionLines: Int? {
pullRequest.additions
}

public var deletionLines: Int? {
pullRequest.deletions
}
}

extension Danger.GitLab: GitHostingInstance {
public var baseBranchName: String {
mergeRequest.sourceBranch.name
}

public var headBranchName: String {
mergeRequest.targetBranch.name
}

public var additionLines: Int? {
Int(mergeRequest.changesCount.replacingOccurrences(of: "+", with: ""))
}

public var deletionLines: Int? {
nil
}
}

extension Danger.BitBucketCloud: GitHostingInstance {
public var baseBranchName: String {
pr.source.branchName
}

public var headBranchName: String {
pr.destination.branchName
}

public var additionLines: Int? {
nil
}

public var deletionLines: Int? {
nil
}
}

extension Danger.BitBucketServer: GitHostingInstance {
public var baseBranchName: String {
pullRequest.fromRef.id
}

public var headBranchName: String {
pullRequest.toRef.id
}

public var additionLines: Int? {
nil
}

public var deletionLines: Int? {
nil
}
}
26 changes: 15 additions & 11 deletions Sources/DangerSwiftEda/PRMetaData.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import DangerSwiftHammer
// MARK: resolvers
public struct PRMetaData {

private let gitHubInstanceResolver: () -> Danger.GitHub
private let gitHostingInstanceResolver: () -> GitHostingInstance?
private let gitInstanceResolver: () -> Danger.Git
private let hammerResolver: () -> Hammer

Expand All @@ -26,9 +26,9 @@ public struct PRMetaData {
private let deletionLinesResolver: (() -> Int)?
private let modifiedFilesResolver: (() -> [String])?
private let commitsResolver: (() -> [GitCommit])?

init(
gitHubInstanceResolver: @escaping () -> Danger.GitHub,
gitHostingInstanceResolver: @escaping () -> GitHostingInstance?,
gitInstanceResolver: @escaping () -> Danger.Git,
hammerResolver: @escaping () -> Hammer,
baseBranchNameResolver: (() -> String)? = nil,
Expand All @@ -38,7 +38,7 @@ public struct PRMetaData {
modifiedFilesResolver: (() -> [String])? = nil,
commitsResolver: (() -> [GitCommit])? = nil
) {
self.gitHubInstanceResolver = gitHubInstanceResolver
self.gitHostingInstanceResolver = gitHostingInstanceResolver
self.gitInstanceResolver = gitInstanceResolver
self.hammerResolver = hammerResolver
self.baseBranchNameResolver = baseBranchNameResolver
Expand All @@ -48,26 +48,25 @@ public struct PRMetaData {
self.modifiedFilesResolver = modifiedFilesResolver
self.commitsResolver = commitsResolver
}

}

// MARK: resolved properties
extension PRMetaData {

public var baseBranchName: String {
baseBranchNameResolver?() ?? gitHubInstanceResolver().pullRequest.base.ref
baseBranchNameResolver?() ?? gitHostingInstanceResolver()?.baseBranchName ?? ""
}

public var headBranchName: String {
headBranchNameResolver?() ?? gitHubInstanceResolver().pullRequest.head.ref
headBranchNameResolver?() ?? gitHostingInstanceResolver()?.headBranchName ?? ""
}

public var additionLines: Int {
additionLinesResolver?() ?? gitHubInstanceResolver().pullRequest.additions ?? 0
additionLinesResolver?() ?? gitHostingInstanceResolver()?.additionLines ?? 0
}

public var deletionLines: Int {
deletionLinesResolver?() ?? gitHubInstanceResolver().pullRequest.deletions ?? 0
deletionLinesResolver?() ?? gitHostingInstanceResolver()?.deletionLines ?? 0
}

public var modifiedLines: Int {
Expand All @@ -93,9 +92,14 @@ extension PRMetaData {
public func diffLines(in filePath: String) -> (deletions: [String], additions: [String]) {
hammerResolver().diffLines(in: filePath)
}


@available(*, deprecated, renamed: "customGitHostingInstance")
public var customGitHubInstance: Danger.GitHub {
gitHubInstanceResolver()
Danger().github
}

public var customGitHostingInstance: GitHostingInstance? {
gitHostingInstanceResolver()
}

public var customGitInstance: Danger.Git {
Expand Down

0 comments on commit 632f117

Please sign in to comment.