Skip to content

Commit 5601317

Browse files
authored
Merge pull request #214 from vchernyshov/bitbucket-cloud
2 parents b83849c + 528186e commit 5601317

File tree

13 files changed

+602
-18
lines changed

13 files changed

+602
-18
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
-->
1313
## Master
1414

15+
- Add support of BitBucketCloud [@vchernyshov] - [#214](https://github.com/danger/kotlin/pull/214)
1516
- Make `force_remove_source_branch` nullable in GitLab Merge request entity [@davidbilik] - [#197](https://github.com/danger/kotlin/pull/197)
1617
- Make `lastReviewedCommit` nullable on BitBucket Server [@f-meloni] - [#211](https://github.com/danger/kotlin/pull/211)
1718
- Update `GitLabMergeRequest` model: add `squash` field [@sonulen] - [#212](https://github.com/danger/kotlin/pull/212)

danger-kotlin-library/src/main/kotlin/systems/danger/kotlin/KtxDangerDSL.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package systems.danger.kotlin
22

3+
import systems.danger.kotlin.models.bitbucket.BitBucketCloud
34
import systems.danger.kotlin.models.bitbucket.BitBucketServer
45
import systems.danger.kotlin.models.danger.DangerDSL
56
import systems.danger.kotlin.models.git.Git
@@ -68,6 +69,26 @@ inline fun DangerDSL.onBitBucket(onBitBucket: BitBucketServer.() -> Unit) {
6869
}
6970
}
7071

72+
/**
73+
* Execute the block only if danger is running on BitBucketCloud
74+
* Example code:
75+
* ```
76+
* danger(args) {
77+
* onBitBucketCloud {
78+
* ...
79+
* }
80+
* }
81+
* ```
82+
*
83+
* @param onBitBucket the block
84+
* @receiver the [BitBucketCloud] descriptor
85+
*/
86+
inline fun DangerDSL.onBitBucketCloud(onBitBucket: BitBucketCloud.() -> Unit) {
87+
if (this.onBitBucketCloud) {
88+
bitBucketCloud.run(onBitBucket)
89+
}
90+
}
91+
7192
/**
7293
* Execute a [Git] block
7394
* Example code:
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
@file:UseSerializers(DateSerializer::class)
2+
3+
package systems.danger.kotlin.models.bitbucket
4+
5+
import kotlinx.datetime.Instant
6+
import kotlinx.serialization.SerialName
7+
import kotlinx.serialization.Serializable
8+
import kotlinx.serialization.UseSerializers
9+
import systems.danger.kotlin.models.serializers.DateSerializer
10+
11+
@Serializable
12+
data class BitBucketCloud(
13+
val metadata: BitBucketMetadata,
14+
@SerialName("pr")
15+
val pullRequest: PullRequest,
16+
val commits: List<Commit>,
17+
val comments: List<Comment>,
18+
val activities: List<Activity>
19+
) {
20+
21+
@Serializable
22+
data class Activity(
23+
val comment: Comment? = null
24+
)
25+
26+
@Serializable
27+
data class Comment(
28+
val id: Int,
29+
val content: Content,
30+
@SerialName("created_on")
31+
val createdOn: Instant,
32+
@SerialName("updated_on")
33+
val updatedOn: Instant,
34+
val deleted: Boolean,
35+
val user: User,
36+
)
37+
38+
@Serializable
39+
data class Content(
40+
val html: String,
41+
val markup: String,
42+
val raw: String
43+
)
44+
45+
@Serializable
46+
data class User(
47+
val uuid: String,
48+
@SerialName("account_id")
49+
val accountId: String? = null,
50+
@SerialName("display_name")
51+
val displayName: String? = null,
52+
val nickname: String? = null
53+
)
54+
55+
@Serializable
56+
data class Commit(
57+
val hash: String,
58+
val author: Author,
59+
val date: Instant,
60+
val message: String
61+
) {
62+
63+
@Serializable
64+
data class Author(
65+
val raw: String,
66+
val user: User
67+
)
68+
}
69+
70+
@Serializable
71+
data class PullRequest(
72+
val id: Int,
73+
val title: String,
74+
val author: User,
75+
val description: String,
76+
@SerialName("close_source_branch")
77+
val closeSourceBranch : Boolean,
78+
@SerialName("created_on")
79+
val createdOn: Instant,
80+
@SerialName("updated_on")
81+
val updatedOn: Instant,
82+
@SerialName("task_count")
83+
val taskCount: Int,
84+
@SerialName("comment_count")
85+
val commentCount: Int,
86+
val participants: List<Participant>,
87+
val reviewers: List<User>,
88+
val source: MergeRef,
89+
val destination: MergeRef,
90+
val state: State,
91+
val summary: Content,
92+
) {
93+
@Serializable
94+
enum class State {
95+
OPEN, MERGED, SUPERSEDED, DECLINED
96+
}
97+
98+
@Serializable
99+
data class Participant(
100+
val approved: Boolean,
101+
val role: Role,
102+
val user: User
103+
) {
104+
105+
@Serializable
106+
enum class Role {
107+
REVIEWER, PARTICIPANT
108+
}
109+
}
110+
}
111+
112+
@Serializable
113+
data class MergeRef(
114+
val branch: Branch,
115+
val commit: Commit,
116+
val repository: Repo
117+
) {
118+
119+
@Serializable
120+
data class Branch(
121+
val name: String
122+
)
123+
124+
@Serializable
125+
data class Commit(
126+
val hash: String
127+
)
128+
}
129+
130+
@Serializable
131+
data class Repo(
132+
val uuid: String,
133+
val name: String,
134+
@SerialName("full_name")
135+
val fullName: String
136+
)
137+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package systems.danger.kotlin.models.bitbucket
2+
3+
import kotlinx.serialization.Serializable
4+
5+
/**
6+
* The pull request and repository metadata
7+
* @property pullRequestId The PR's ID
8+
* @property repoSlug The complete repo slug including project slug.
9+
*/
10+
@Serializable
11+
data class BitBucketMetadata internal constructor(
12+
val pullRequestID: String,
13+
val repoSlug: String
14+
)

danger-kotlin-library/src/main/kotlin/systems/danger/kotlin/models/bitbucket/BitBucketServer.kt

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import kotlinx.serialization.*
1212
*/
1313
@Serializable
1414
data class BitBucketServer(
15-
val metadata: BitBucketServerMetadata,
15+
val metadata: BitBucketMetadata,
1616
@SerialName("pr")
1717
val pullRequest: BitBucketServerPR,
1818
val commits: List<BitBucketServerCommit>,
@@ -38,17 +38,6 @@ data class BitBucketServerActivity(
3838
val commentAction: String? = null
3939
)
4040

41-
/**
42-
* The pull request and repository metadata
43-
* @property pullRequestId The PR's ID
44-
* @property repoSlug The complete repo slug including project slug.
45-
*/
46-
@Serializable
47-
data class BitBucketServerMetadata internal constructor(
48-
val pullRequestID: String,
49-
val repoSlug: String
50-
)
51-
5241
@Serializable
5342
internal data class BitBucketServerEnv(
5443
val pr: String,

danger-kotlin-library/src/main/kotlin/systems/danger/kotlin/models/danger/DangerDSL.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package systems.danger.kotlin.models.danger
22

33
import kotlinx.serialization.*
4+
import systems.danger.kotlin.models.bitbucket.BitBucketCloud
45
import systems.danger.kotlin.models.bitbucket.BitBucketServer
56
import systems.danger.kotlin.models.git.Git
67
import systems.danger.kotlin.models.github.GitHub
@@ -17,6 +18,8 @@ data class DangerDSL(
1718
private val _github: GitHub? = null,
1819
@SerialName("bitbucket_server")
1920
private val _bitBucketServer: BitBucketServer? = null,
21+
@SerialName("bitbucket_cloud")
22+
private val _bitBucketCloud: BitBucketCloud? = null,
2023
@SerialName("gitlab")
2124
private val _gitlab: GitLab? = null,
2225
val git: Git
@@ -25,13 +28,17 @@ data class DangerDSL(
2528
get() = _github!!
2629
val bitBucketServer: BitBucketServer
2730
get() = _bitBucketServer!!
31+
val bitBucketCloud: BitBucketCloud
32+
get() = _bitBucketCloud!!
2833
val gitlab: GitLab
2934
get() = _gitlab!!
3035

3136
val onGitHub
3237
get() = _github != null
3338
val onBitBucketServer
3439
get() = _bitBucketServer != null
40+
val onBitBucketCloud
41+
get() = _bitBucketCloud != null
3542
val onGitLab
3643
get() = _gitlab != null
3744

danger-kotlin-library/src/main/kotlin/systems/danger/kotlin/models/serializers/DateSerializer.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
99
import kotlinx.serialization.descriptors.SerialDescriptor
1010
import kotlinx.serialization.encoding.Decoder
1111
import kotlinx.serialization.encoding.Encoder
12-
import java.lang.Exception
1312
import java.text.SimpleDateFormat
1413
import java.util.*
1514

@@ -30,12 +29,12 @@ object DateSerializer : KSerializer<Instant> {
3029
return try {
3130
Instant.parse(value)
3231
} catch(e: Throwable) {
33-
Instant.fromEpochMilliseconds(GitLabISO8601DateFormat().parse(value).toInstant().toEpochMilli())
32+
Instant.fromEpochMilliseconds(ISO8601DateFormat().parse(value).toInstant().toEpochMilli())
3433
}
3534
}
3635
}
3736

38-
class GitLabISO8601DateFormat {
37+
class ISO8601DateFormat {
3938
fun parse(string: String?): Date {
4039
val formatter = SimpleDateFormat(
4140
"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"

0 commit comments

Comments
 (0)