Giter Site home page Giter Site logo

carrot's Introduction

CARROT

CARROT

This repository contains the Cromwell Automated Runner for Regression and Automation Testing. This is a tool for configuring, running, and comparing the results of tests run in the Cromwell Workflow Engine.

Table of Contents

  • A Rust version >=1.67.1 is required to build CARROT
    • rustup, the installer for Rust, can be found on the Rust website, here.
    • rustup will install the Rust compiler (rustc) and the Rust package manager (Cargo).
  • CARROT currently requires a PostgreSQL database with version >=12.2 for storing test information.
    • PostgreSQL can be downloaded from the PostgreSQL website, here.
    • It is also a requirement that the PostgreSQL DB have the uuid-ossp extension for using UUIDs.
      • This extension can be installed by connecting to the database as a user with SUPERUSER privileges and running the following command: create extension if not exists "uuid-ossp";
  • Certain configuration information must be specified in config variables before running.
    • These variables can be specified using a .yml file. An example of a .yml configuration can be found within the carrot.example.yml file.
  • CARROT uses the Diesel crate for interfacing with the database. For certain dev and build tasks, the Diesel CLI is required.
    • Instructions for installing the Diesel CLI can be found here.
    • Once the Diesel CLI is installed and the PostgreSQL database is running, the Diesel CLI migration tool can be used to create all of the required tables and types in the database with the command diesel migration run
    • Alternatively, these tables and types will all be created when running CARROT for the first time
  • CARROT uses womtool for WDL validation. If running outside of a docker container created using the included Dockerfile, it will be necessary to include the womtool jar on the same machine and set the womtool_location config variable to its location, as shown in the carrot.example.yml file
  • Once Rust is installed, the project can be built using the cargo build command in the project directory.
    • Building for release can be done using cargo build --release
  • CARROT requires a Cromwell server to run tests
    • Setting up a Cromwell server can be accomplished by following the instructions here
  • A Dockerfile is provided in the project root directory that can be used to run CARROT in a Docker container.
    • The image can be built by running docker build . from the project root.
  • For development purposes, the scripts/docker/docker-compose.yml file can be used to run CARROT with a PostreSQL server and a Cromwell server in their own containers. This can be done using docker-compose build followed by docker-compose up within that directory.
    • Running CARROT in this way uses the bare minimum features for CARROT and Cromwell, so software building, reporting, and GitHub integration are unavailable with the default configuration in that docker-compose.yml file. Since we're using minimum features for Cromwell, it will also be impossible to access Cromwell job metadata between restarts of the container (although the actual data for jobs will be retained within the volume).
    • Accessing result files when running like this requires accessing the docker volume which contains the data for the cromwell instance. This will be within a directory called docker_cromwell-data within the Docker volumes directory on your machine.
      • Note: if you are running Docker on Mac, it is necessary to connect to the Docker VM to access the volumes directory. Recent versions of Docker have a bug preventing doing so via screen, so the easiest way to do it is to connect via a container using docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
  • To run unit tests in Docker, use docker-compose build followed by docker-compose up --abort-on-container-exit --exit-code-from carrot-test within the /scripts/docker/test directory.
    • Building and running tests this way seems to occasionally result in failures with the carrot-test container being killed because it exceeds the default docker memory allocation while compiling. This can be resolved by increasing your allocated memory for docker in your docker settings.
  • CARROT supports the option of sending email notifications to subscribed users upon completion of a test run.
    • Emails can be configured to be sent in the following ways:
      • Using the local machine's sendmail utility, or
      • Using an SMTP mail server (either running your own, or using an existing mail service like GMail).
    • Enabling this requires the use of a few configuration variables which are listed and explained in the carrot.example.yml file.
  • It is possible (and encouraged) to set up CARROT to allow automatic generation of docker images for testing specific software hosted in a git repository
  • In order to allow this for private GitHub repos, it is necessary to set up private github access configuration as detailed in the carrot.example.yml file
  • CARROT supports triggering runs via GitHub PR comments, and receiving reply comments with run results.
  • Enabling this functionality requires multiple steps:
    • Set up a Google Cloud PubSub Topic
      • CARROT will use the created subscription to read messages to trigger runs from the topic
    • Create a GitHub account for CARROT to use to view and interact with GitHub
    • Add the carrot-publish-github-action to the GitHub Actions workflow for the repository you want to test
      • Instructions for doing so are included in the README for the action
    • Set up the github configuration as detailed in the carrot.example.yml file
  • An important functionality of CARROT is the generation of reports from test runs in the form of Jupyter Notebooks
  • In order for this functionality to work properly, it is necessary to:
    • Set up the reporting config in the config yaml file
      • Create a Google Cloud bucket for storing report templates and use it as the value for the report_location variable
      • Build and push the report Dockerfile (scripts/docker/reports/Dockerfile) to a repository accessible by the Google Cloud service account associated with your Cromwell instance
        • Also set the report_docker_location variable to its location
        • Alternatively, you can build a docker image with Jupyter Notebook support and the libraries you need if the provided Dockerfile does not meet your needs

When contributing to CARROT, you should do your best to adhere to the Rust style guide.

To make adhering to the style guide easier, there is a Rust automatic formatting tool called rustfmt. This tool can be installed with cargo using the command rustup component add rustfmt and should be run using cargo fmt before making a pull request.

Once you have a CARROT server running, please see the User Guide for instructions on using CARROT.

There is also an example test repo available with instructions on how to create and run an example test on your CARROT server.

Licensed under Apache License, Version 2.0, (LICENSE-APACHE) AND MIT License (LICENSE-MIT)

We use bumpversion.sh to maintain version numbers. DO NOT MANUALLY EDIT ANY VERSION NUMBERS.

Our versions are specified by a 3 number semantic version system (https://semver.org/):

major.minor.patch

To update the version do the following:

./bumpversion.sh PART where PART is one of:

  • major
  • minor
  • patch

This will increase the corresponding version number by 1.

carrot's People

Contributors

kevinclydon avatar jonn-smith avatar

Stargazers

 avatar  avatar Adam Nichols avatar

Watchers

 avatar James Cloos avatar Louis Bergelson avatar  avatar  avatar  avatar  avatar

Forkers

vjalili

carrot's Issues

Create PUBLIC infrastructure

  • Does not replace PRIVATE infrastructure
  • Migrate PRIVATE data that is publicly releasable to PUBLIC infrastructure

Add command line tool for running migrations

Currently, DB schema migrations can only be run using the Diesel CLI tool, which is obviously a problem for anyone wanting to run this in their own DB in a non-dev environment. There should be a command line tool added that, instead of starting the carrot server, runs any migrations that have not yet been applied in the DB.

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.