Skip to content

All system components should have consistent continuous testing and build pipelines #34

@gobengo

Description

@gobengo

@eenblam and I talked today about build pipelines and standardizing them so we can catch inevitable mistakes before pull requests are merged. Assuming everyone is okay with using travis-ci.org to start with this (we can always add/switch later), the table below can track our progress in adding a baseline of automated testing to each of our major system component repositories.

Definitions

  • .travis.yml - The repo has this file that configures travis

  • Travis Badget - The README of the repo has a pretty badge to show how great the build is

  • Deployable - When the build passes in master, the project should be 'deployed' automatically. e.g. firmware builds might be deployed to a publicly accesible URL for people to download from. Web apps might get automatically deployed to staging.

    • sudomesh/monitor
      • Heroku Pipeline. Any Pull Request can be built/deployed as a "Review App". Once merged to master, Heroku can wait until CI passes (e.g. tests pass) and only then deploy to a peoplesopen-monitor-production app.

        (Heroku Pipeline is a little opaque and definitely nonfree, but wanted to prototype using it as the quickest way to have a reasonable separation between deploying new branches and deploying prod. I hope we use something else in the future, and the whole pipeline can be encoded in a file in this repo).

        The Heroku Pipeline is called peoplesopen-monitor and is owned by a new sudomesh heroku team that @eenblam created. Inquire to be added to it.

      • - Travis creates git tags and pushes to github as release

    • sudomesh/exitnode
      • Travis should be able to build and run the process
      • It makes sense to do an automating staging deploy to ensure the deploy scripts work
      • Eventually can deploy to production as well using same, tested deploy script
      • tagged releases
    • sudowrt-firmware
      • Deploy built docker image
      • Deploy all builds, even pre-release ones to ??? builds server??, s3?
      • Deploy master or tagged builds to build server, zemondo
      • tagged releases
    • peoplesopen-front
      • travis npm test
      • Automate deployment to staging
      • Automate deployment to production
      • tagged releases
    • peoplesopen-dash
      • travis-ci tests
      • Staging deploys (won't work just like home node, but can do cursory tests)
      • Tag git releases in release branch
  • Versioned releases - Not every commit in the repository makes sense to be officially supported. Instead, we can use git tags to mark known-working versions of the code, and only support or test at these milestones. If anyone has a bug, it is invaluable to know with the bug report what version of the code they were using.

  • Staging - Even when the build passes, there can still be bugs in the software or the deployment process. Quality in production can be improved by first doing a practice deploy to a production-like 'staging' environment where actual humans can do a final round of testing and acceptance. Without staging, we test in production, and users are worse off for it.

Software Project .travis.yml Travis Badge in README Deployable Versioned Releases Staging
sudomesh/monitor Build Status yes Heroku Pipeline PR peoplesopen-monitor-staging
sudomesh/exitnode Build Status PR
sudomesh/sudowrt-firmware Build Status yes
sudomesh/peoplesopen-dash Build Status yes
sudomesh/peoplesopen-front Build Status yes PR peoplesopen-front-staging
sudomesh/meshnode-database Build Status

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions