Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Add BitbucketCloud support #214

Merged
merged 5 commits into from
Apr 26, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -12,6 +12,7 @@
-->
## Master

- Add support of BitBucketCloud [@vchernyshov] - [#214](https://github.com/danger/kotlin/pull/214)
- Make `force_remove_source_branch` nullable in GitLab Merge request entity [@davidbilik] - [#197](https://github.com/danger/kotlin/pull/197)
- Update `GitLabMergeRequest` model: add `squash` field [@sonulen] - [#212](https://github.com/danger/kotlin/pull/212)
- Add Gitlab extensions for url's: to project, to file diff, to current version of file [@sonulen] - [#212](https://github.com/danger/kotlin/pull/212)
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package systems.danger.kotlin

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

/**
* Execute the block only if danger is running on BitBucketCloud
* Example code:
* ```
* danger(args) {
* onBitBucketCloud {
* ...
* }
* }
* ```
*
* @param onBitBucket the block
* @receiver the [BitBucketCloud] descriptor
*/
inline fun DangerDSL.onBitBucketCloud(onBitBucket: BitBucketCloud.() -> Unit) {
if (this.onBitBucketCloud) {
bitBucketCloud.run(onBitBucket)
}
}

/**
* Execute a [Git] block
* Example code:
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
@file:UseSerializers(DateSerializer::class)

package systems.danger.kotlin.models.bitbucket

import kotlinx.datetime.Instant
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.UseSerializers
import systems.danger.kotlin.models.serializers.DateSerializer

@Serializable
data class BitBucketCloud(
val metadata: BitBucketMetadata,
@SerialName("pr")
val pullRequest: PullRequest,
val commits: List<Commit>,
val comments: List<Comment>,
val activities: List<Activity>
) {

@Serializable
data class Activity(
val comment: Comment? = null
)

@Serializable
data class Comment(
val id: Int,
val content: Content,
@SerialName("created_on")
val createdOn: Instant,
@SerialName("updated_on")
val updatedOn: Instant,
val deleted: Boolean,
val user: User,
)

@Serializable
data class Content(
val html: String,
val markup: String,
val raw: String
)

@Serializable
data class User(
val uuid: String,
@SerialName("account_id")
val accountId: String? = null,
@SerialName("display_name")
val displayName: String? = null,
val nickname: String? = null
)

@Serializable
data class Commit(
val hash: String,
val author: Author,
val date: Instant,
val message: String
) {

@Serializable
data class Author(
val raw: String,
val user: User
)
}

@Serializable
data class PullRequest(
val id: Int,
val title: String,
val author: User,
val description: String,
@SerialName("close_source_branch")
val closeSourceBranch : Boolean,
@SerialName("created_on")
val createdOn: Instant,
@SerialName("updated_on")
val updatedOn: Instant,
@SerialName("task_count")
val taskCount: Int,
@SerialName("comment_count")
val commentCount: Int,
val participants: List<Participant>,
val reviewers: List<User>,
val source: MergeRef,
val destination: MergeRef,
val state: State,
val summary: Content,
) {
@Serializable
enum class State {
OPEN, MERGED, SUPERSEDED, DECLINED
}

@Serializable
data class Participant(
val approved: Boolean,
val role: Role,
val user: User
) {

@Serializable
enum class Role {
REVIEWER, PARTICIPANT
}
}
}

@Serializable
data class MergeRef(
val branch: Branch,
val commit: Commit,
val repository: Repo
) {

@Serializable
data class Branch(
val name: String
)

@Serializable
data class Commit(
val hash: String
)
}

@Serializable
data class Repo(
val uuid: String,
val name: String,
@SerialName("full_name")
val fullName: String
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package systems.danger.kotlin.models.bitbucket

import kotlinx.serialization.Serializable

/**
* The pull request and repository metadata
* @property pullRequestId The PR's ID
* @property repoSlug The complete repo slug including project slug.
*/
@Serializable
data class BitBucketMetadata internal constructor(
val pullRequestID: String,
val repoSlug: String
)
Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@ import kotlinx.serialization.*
*/
@Serializable
data class BitBucketServer(
val metadata: BitBucketServerMetadata,
val metadata: BitBucketMetadata,
@SerialName("pr")
val pullRequest: BitBucketServerPR,
val commits: List<BitBucketServerCommit>,
@@ -38,17 +38,6 @@ data class BitBucketServerActivity(
val commentAction: String? = null
)

/**
* The pull request and repository metadata
* @property pullRequestId The PR's ID
* @property repoSlug The complete repo slug including project slug.
*/
@Serializable
data class BitBucketServerMetadata internal constructor(
val pullRequestID: String,
val repoSlug: String
)

@Serializable
internal data class BitBucketServerEnv(
val pr: String,
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package systems.danger.kotlin.models.danger

import kotlinx.serialization.*
import systems.danger.kotlin.models.bitbucket.BitBucketCloud
import systems.danger.kotlin.models.bitbucket.BitBucketServer
import systems.danger.kotlin.models.git.Git
import systems.danger.kotlin.models.github.GitHub
@@ -17,6 +18,8 @@ data class DangerDSL(
private val _github: GitHub? = null,
@SerialName("bitbucket_server")
private val _bitBucketServer: BitBucketServer? = null,
@SerialName("bitbucket_cloud")
private val _bitBucketCloud: BitBucketCloud? = null,
@SerialName("gitlab")
private val _gitlab: GitLab? = null,
val git: Git
@@ -25,13 +28,17 @@ data class DangerDSL(
get() = _github!!
val bitBucketServer: BitBucketServer
get() = _bitBucketServer!!
val bitBucketCloud: BitBucketCloud
get() = _bitBucketCloud!!
val gitlab: GitLab
get() = _gitlab!!

val onGitHub
get() = _github != null
val onBitBucketServer
get() = _bitBucketServer != null
val onBitBucketCloud
get() = _bitBucketCloud != null
val onGitLab
get() = _gitlab != null

Original file line number Diff line number Diff line change
@@ -9,7 +9,6 @@ import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import java.lang.Exception
import java.text.SimpleDateFormat
import java.util.*

@@ -30,12 +29,12 @@ object DateSerializer : KSerializer<Instant> {
return try {
Instant.parse(value)
} catch(e: Throwable) {
Instant.fromEpochMilliseconds(GitLabISO8601DateFormat().parse(value).toInstant().toEpochMilli())
Instant.fromEpochMilliseconds(ISO8601DateFormat().parse(value).toInstant().toEpochMilli())
}
}
}

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