Home

Awesome

<img src="https://raw.githubusercontent.com/getpopper/website/bcba4c8/assets/images/popper_logo_just_jug.png" width="64" valign="middle" alt="Popper"/> Popper

Downloads Build Status codecov Join the chat at https://gitter.im/systemslab/popper slack CROSS

Popper is a tool for defining and executing container-native testing workflows in Docker. With Popper, you define a workflow in a YAML file, and then execute it with a single command. A workflow file looks like this:

steps:
- id: dev-init
  uses: docker://rikorose/gcc-cmake:gcc-9
  runs: [sh, -uexc]
  args:
  - |
    rm -rf build/
    cmake -DCMAKE_BUILD_TYPE=Release -S . -B build

- id: build
  uses: docker://rikorose/gcc-cmake:gcc-9
  runs: [cmake, --build, build/, --parallel, '4']

- id: test
  uses: docker://rikorose/gcc-cmake:gcc-9
  dir: /workspace/build/
  runs: [ctest]

Assuming the above is stored in a ci.yml file in the root of your project folder, this entire workflow gets executed by running:

popper run -f ci.yml

Running a single step:

popper run -f ci.yml build

Starting a shell inside the build step container:

popper run -f ci.yml build

Running on another engine (Podman):

popper run -f ci.yml -e podman build

See the examples/ folder for examples for tests for other languages, as well as other types of tests (integration, regresssion, etc.).

Installation

To install or upgrade Popper, run the following in your terminal:

curl -sSfL https://raw.githubusercontent.com/getpopper/popper/master/install.sh | sh

Docker is required to run Popper and the installer will abort if the docker command cannot be invoked from your shell. For other installation options, including installing for use with the other supported engines (Singularity and Podman), or for setting up a developing environment for Popper, read the complete installation instructions.

Once installed, you can get an overview and list of available commands:

popper help

Read the Quickstart Guide to learn the basics of how to use Popper. Or browse the Official documentation.

Features

What Problem Does Popper Solve?

Popper is a container-native workflow execution and task automation engine. In practice, when we work following the container-native paradigm, we end up interactively executing multiple Docker commands (docker pull, docker build, docker run, etc.) so that we can build containers, compile code, test applications, deploy software, among others. Keeping track of which docker commands we have executed, in which order, and which flags were passed to each, can quickly become unmanageable, difficult to document (think of outdated README instructions) and error prone.

On top of this, having the same workflow work in other environments (CI, K8S, etc.) is time-consuming and defeats the purpose of using containers (portability). The goal of Popper is to bring order to this chaotic scenario by providing a framework for clearly and explicitly defining container-native tasks. You can think of Popper as tool for wrapping all these manual tasks in a lightweight, machine-readable, self-documented format (YAML).

While this sounds simple at first, it has significant implications: results in time-savings, improves communication and in general unifies development, testing and deployment workflows. As a developer or user of "Popperized" container-native projects, you only need to learn one tool, and leave the execution details to Popper, whether is to build and tests applications locally, on a remote CI server or a Kubernetes cluster.

Contributing

Anyone is welcome to contribute to Popper! To get started, take a look at our contributing guidelines, then dive in with our list of good first issues.

Participation Guidelines

Popper adheres to the code of conduct posted in this repository. By participating or contributing to Popper, you're expected to uphold this code. If you encounter unacceptable behavior, please immediately email us.

How to Cite Popper

Ivo Jimenez, Michael Sevilla, Noah Watkins, Carlos Maltzahn, Jay Lofstead, Kathryn Mohror, Andrea Arpaci-Dusseau and Remzi Arpaci-Dusseau. The Popper Convention: Making Reproducible Systems Evaluation Practical. In 2017 IEEE International Parallel and Distributed Processing Symposium Workshops (IPDPSW), 1561–70, 2017. (https://doi.org/10.1109/IPDPSW.2017.157)

PDF for a pre-print version available here. For BibTeX, click here.