Releases Matching

Vadim Markovtsev, Head of Analytics.

Releases Matching

Vadim Markovtsev
Head of Analytics

Problématique

What have we released today?
What to improve in how we release?

Clients

Do you mean...

How can we release?

Release == commit pointer + meta.

Release by tag

🏷1.1.0 released PR X.

Release by branch

Release settings

Requirements

Quirks

Squash

Tag deleted

Tag deleted

Tag inserted

Tag inserted

Rebase

Rebase

Ambiguity

Ambiguity

Match release branch: master|production

Overview

Plan

  1. Discover release commits.
  2. Analyze release ownership.
  3. Match to PRs.

time_from, time_to

independent of the Heater

Discover release commits

Analyze release ownership

Match to PRs

Match to PRs - rebases

"Merge pull request #1841 from athenianco/fix-pr-dep-dupes"

False positives: <0.1%.

Empty merge commits are sometimes discarded 😭

Doesn't work for squashes 😭

Building the commit DAG

Building the commit DAG

Code

Python for Athenian API

Python + C/C++ = Cython

@cython.boundscheck(False)
@cython.wraparound(False)
cdef void _copy_parents_to_array(const vector[vector[uint32_t]] *parents,
                                 uint32_t[:] output,
                                 int64_t[:] splits) nogil:
        cdef int64_t i, offset = 0
        for i in range(<int64_t>parents.size()):
            vec = dereference(parents)[i]  # (*parents)[i]
            memcpy(&output[offset], vec.data(), 4 * vec.size())
            offset += vec.size()
            splits[i] = offset

Athenian DAG format

Athenian DAG format

DAG = (hashes, vertexes, edges)

For N commits with E parent-child relations:

Athenian DAG format advantages

Precomputed tables

Everything related to releases has release_match in PK.

Thank you, and see you tomorrow