Code Monkey home page Code Monkey logo

tramline's People

Contributors

kitallis avatar nid90 avatar pratul avatar tachyons avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

tramline's Issues

Clean-up release page

Release page is currently a mess as there are too many conditions and SQL queries are being generated from there. It is due to missing abstractions and lack of clean-up.

Enhance the sidebar

  • All apps with configured release train nested under Apps
  • Under the trains, nest the active run

Better workflow detection mechanism

We are currently creating an extra job on the workflow solely for storing the version_code and refer that once the workflow is finished.

This approach is having following drawbacks

  1. Additional job
  2. Artifact extraction is expensive
  3. We get to link step_runs with workflow only after workflow run is finished
  4. This approach is platform dependent.

Alternate approach is to have

  1. An end point in tramline to receive workflow event
  2. Create a http call from workflow as the first step with workflow details to this endpoint
  3. This can be accomplished by our own cli or simple curl script

Advantages

  1. Early feedback so that we can link step runs with workflow run(CI action) and show in the UI
  2. No expensive processing in callback handler
  3. Similar approach can be implemented in most of CI platforms

Parallel branching strategy: update kickoff PR text

Title

[Release kickoff] vX.Y.?

Description

New release train (train name) triggered by user name.
The working branch branch has been merged into release branch branch, as per branching strategy name branching strategy.

Introduce proper abstraction for the Step runs within a Step

As per our current data modelling, each train can have multiple train runs (AKA releases) and steps. A step_run refers to the execution of train run for the given step for given commit. Ie there is no proper abstraction train run per step. This makes storing approval status complicated. Current workaround is to use sign_required column, but it is a clear smell of missing abstraction

Process webhooks using background jobs

We are currently processing webhooks in synchronous manner and return status to Github only after process is completed. This causes issues due to following reasons.

  • Github is not interested in what we do with the payload or result, it only interested whether the payload received successfully or not
  • Some payload handlers take time, sometimes several seconds, this causes webhook to timeout and retry
  • When we process webhooks in synchronous manner, the number of requests we need to handle at the same time increases due to latency and causes bigger request queue.

Should we have a health check somewhere in settings?

IMO we need an easy way to debug a setup. For example, without running an actual release I cannot figure out if my webhooks and integrations are properly set up or not.

Aboo thinks that such a feature will be useful to validate values with connected integrations.

Should be able to edit core settings of an app

Constraints

name

no constraint

description

no constraint

bundle identifier

  • no release train should be running
    • because if it is, then the system will attempt to submit a build to the wrong play store account because the build identifier has changed
    • the submission will not go through and the system will start throwing errors

build number

  • only allowed to increase the build number, not decrease it
  • both play store and app store only allow builds with increasing "version numbers" anyway so this constraint makes sense

Validations and automations for Almost Trunk branching strategy

Approaches

Choosing commits

  1. User marks a commit message
    ... and we automatically cherry pick that commit onto the release branch of the live release.

  2. User picks commits from a list populated from the working branch
    ... and we cherry pick that commit onto the release branch

Direction of copy

  1. Commit lands on release branch and is cherry picked onto the working branch

  2. Commit lands on working branch and is cherry picked onto the release branch

Questions

  • which one of the two approaches is simpler to implement? better for the user?
  • how will failures be handled?

Notes

Handle stopping release with a warning if a diff exists between the release and working branch. Also, do the same for other branching strategies.

Persist notifications

Currently we are just generating and sending notifications without any persistence. Having persistence feature makes sending notifications to multiple channels and showing notifications on the UI easy. noticed is a good gem which take care of most of the heavy lifting regarding the notifications

Handle merge conflicts while creating and merging PRs during post-release

We need to make merging PRs sequential but non-blocking, as creating and merging PRS aren't straight forward when there are merge conflicts which need to be manually handled by developer. If there are multiple PRs we need to wait for the first PR to be merged before creating the second PR. We need to persist the state to handle this and can't be done inside a transaction.

This is currently only an issue in Parallel Branch & Back-merge strategy.

Unzip archive before saving to object storage

We are currently storing artifacts in zip as provided by GitHub action, this makes uploading to play store difficult and expensive. Also, since different CI providers might provide artificats in different formats, it is better to store in standardized format

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.