All Projects β†’ americanexpress β†’ Bucketlist

americanexpress / Bucketlist

Licence: apache-2.0
See what's in your BitBucket Server

Programming Languages

kotlin
9241 projects

Labels

Projects that are alternatives of or similar to Bucketlist

Atlassian Agent
Atlassian's productions crack.
Stars: ✭ 285 (+1483.33%)
Mutual labels:  bitbucket
Danger
🚫 Stop saying "you forgot to …" in code review (in Ruby)
Stars: ✭ 4,691 (+25961.11%)
Mutual labels:  bitbucket
Webhooks
🎣 Webhook receiver for GitHub, Bitbucket, GitLab, Gogs
Stars: ✭ 601 (+3238.89%)
Mutual labels:  bitbucket
Reviewdog
🐢 Automated code review tool integrated with any code analysis tools regardless of programming language
Stars: ✭ 4,541 (+25127.78%)
Mutual labels:  bitbucket
Upmgitextension
This package extends the UI of Unity Package Manager (UPM) for the packages installed from git repository.
Stars: ✭ 438 (+2333.33%)
Mutual labels:  bitbucket
Vssue
πŸ“« A Vue-powered Issue-based Comment Plugin
Stars: ✭ 496 (+2655.56%)
Mutual labels:  bitbucket
Github Updater
This WP plugin will update GitHub, Bitbucket, GitLab, and Gitea hosted plugins and themes
Stars: ✭ 2,893 (+15972.22%)
Mutual labels:  bitbucket
Scala Steward
πŸ€– A bot that helps you keep your Scala projects up-to-date
Stars: ✭ 812 (+4411.11%)
Mutual labels:  bitbucket
Codestream
The Code Collaboration Tool Built for Remote Teams
Stars: ✭ 459 (+2450%)
Mutual labels:  bitbucket
Atlassian Python Api
Atlassian Python REST API wrapper
Stars: ✭ 564 (+3033.33%)
Mutual labels:  bitbucket
Oauth
πŸ”— OAuth 2.0 implementation for various providers in one place.
Stars: ✭ 336 (+1766.67%)
Mutual labels:  bitbucket
Gosint
OSINT Swiss Army Knife
Stars: ✭ 401 (+2127.78%)
Mutual labels:  bitbucket
Renovate
Universal dependency update tool that fits into your workflows.
Stars: ✭ 6,700 (+37122.22%)
Mutual labels:  bitbucket
Generic Webhook Trigger Plugin
Can receive any HTTP request, extract any values from JSON or XML and trigger a job with those values available as variables. Works with GitHub, GitLab, Bitbucket, Jira and many more.
Stars: ✭ 287 (+1494.44%)
Mutual labels:  bitbucket
Git Touch
An open-source app for GitHub, GitLab, Bitbucket, Gitea, and Gitee(码云), built with Flutter
Stars: ✭ 663 (+3583.33%)
Mutual labels:  bitbucket
Skyhook
Parses webhooks and forwards them in the proper format to Discord.
Stars: ✭ 263 (+1361.11%)
Mutual labels:  bitbucket
Git Deploy
Php Script for Auto-Pull in server (Using WebHook from GitLab, GitHub and Bitbucket)
Stars: ✭ 495 (+2650%)
Mutual labels:  bitbucket
Git Repo
Git-Repo: CLI utility to manage git services from your workspace
Stars: ✭ 818 (+4444.44%)
Mutual labels:  bitbucket
Git Credential Manager Core
Secure, cross-platform Git credential storage with authentication to GitHub, Azure Repos, and other popular Git hosting services.
Stars: ✭ 670 (+3622.22%)
Mutual labels:  bitbucket
Refined Bitbucket
Chrome and Firefox extension that improves Bitbucket's user experience
Stars: ✭ 560 (+3011.11%)
Mutual labels:  bitbucket

What's BucketList for?

BucketList lets you access various types of information about pull requests in Bitbucket Server, formerly Stash. You can list them, get detailed info, create them, etc. This doesn't use the same HTTP API as Bitbucket.org, unfortunately, so you can only use this for Bitbucket's self-hosted offering.

We built this to evaluate the hypothesis that CI improvements and process changes will improve our productivity with a measurable decrease in PR lifetimes.

Atlassian already provides a simple stash-java-client, but we needed access to pull request info via the API, which that client did not support. We also wanted to consume the result of API calls as Observables, and we wanted to experiment with Kotlin as well, so we decided to explore in our own project rather than making a hefty exploratory fork.

How do I use it?

BucketListClient is the interface you'll use to interact with Bitbucket Server. It lets you perform various operations with the REST API (currently focused on pull request operations). The default implementation is HttpBucketListClient.

Some of the API responses are exposed as pages; the resulting Observable will emit a page at a time. The client will keep fetching pages for you automatically.

See the examples and tests for more on how to construct and use these objects. Especially, note that the Jackson ObjectMapper must be configured to not fail on unknown properties.

Artifacts are available in JCenter.

Gradle:

compile 'io.aexp.bucketlist:bucketlist:0.1'

Maven:

<dependency>
    <groupId>io.aexp.bucketlist</groupId>
    <artifactId>bucketlist</artifactId>
    <version>0.1</version>
</dependency>

Terminology

You'll see references to a project and a repoSlug in the API; these are terms Bitbucket Server uses to describe the path to a particular repo. If you have a url to browse the source of a Bitbucket Server repo, like this:

https://bitbucketserver.company.com/projects/FOO/repos/best-code-ever/browse

then FOO is the project and best-code-ever is the repoSlug.

What did we use to build it?

This is a client for the Bitbucket Server REST API written in Kotlin and using RxJava Observables as the means of exposing the results of API calls. (If you're using Java or another JVM language, don't worry: Kotlin's interop with Java is great, so you can use this from plain old Java too.)

Examples

We've written several examples of the sort of things we find interesting to analyze in our repositories and included them for you to try out. First, build the examples:

./gradlew :examples:shadowJar

The examples use a properties file to provide the Bitbucket Server url and credentials, so prepare a bitbucket-server.properties (or whatever you'd like) file:

url: https://bitbucket-server.domain.in.your.company.com
username: thor
password: god-of-thunder

You can then use that jar as the classpath for invocations of the example tools, like ones to graph PR lifetime. Substitute SOME-PROJ and some-repo as appropriate for your repo of interest:

java -cp examples/build/libs/examples-all.jar \
  io.aexp.bucketlist.examples.prlifetime.ExportPrLifetimeData \
  bitbucket-server.properties \
  SOME-PROJ \
  some-repo \
  pr-lifetime-data.tsv \
  2015-01-01 \
  2015-12-31 \
  prCreation

And then turn the tsv into a graph:

java -cp examples/build/libs/examples-all.jar \
  io.aexp.bucketlist.examples.prlifetime.RenderPrLifetimeBoxWhiskerPlot \
  pr-lifetime-data.tsv \
  pr-lifetime-data.svg

There are several more examples in the examples project showing other ways to slice and dice PR data into interesting numbers and graphs, so check 'em out!

PR Lifetime

One of the examples we've included is representative of the primary goal we had when originally writing this: measuring PR lifetime so we could tell quantitatively how much of an impact new CI hardware or changing team PR policies had.

ExportPrLifetimeData and RenderPrLifetimeBoxWhiskerPlot together provide this. The former downloads the necessary data to a tsv, and the latter makes a plot of the data. They're separated to allow easier experimentation with plotting.

Testing

Sadly (and ironically, given the the original need for this code: measuring the effect of faster test turnaround), we haven't included integration tests that run against an actual Bitbucket Server instance for this, because Bitbucket Server isn't free. If you have an idea of how we could have everyone programmatically set up a Bitbucket Server instance, run tests, and tear it down, all without violating Bitbucket Server licensing terms, let us know!

Contributing

We welcome Your interest in the American Express Open Source Community on Github. Any Contributor to any Open Source Project managed by the American Express Open Source Community must accept and sign an Agreement indicating agreement to the terms below. Except for the rights granted in this Agreement to American Express and to recipients of software distributed by American Express, You reserve all right, title, and interest, if any, in and to Your Contributions. Please fill out the Agreement.

License

Any contributions made under this project will be governed by the Apache License 2.0.

Code of Conduct

This project adheres to the American Express Community Guidelines. By participating, you are expected to honor these guidelines.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].