On-demand preview environments for your pull requests, branches, and tags

Spinning up or updating new servers to review a pull request or branch takes time and costs money.

PullPreview provides on-demand preview environments for any pull request, branch or tag from your GitHub repositories.

Screenshot 2

Features

On demand preview environments

From your project, just click on any pull request, branch, or tag to start a live environment based on your docker-compose.pullpreview.yml file. You'll get a custom URL that you can share with anyone wanting to have a look at the app or a new feature.

Screenshot 3

Integrated with GitHub pull requests

Any time a preview session is started for a pull request, you will get an additional status badge (via the GitHub status API) showing the status of the preview environment. Clicking on the details link will show you the preview session details and the link to access the environment.

Screenshot 8

Auto-deploy pull requests and branches

Manually starting sessions from any reference is nice, but what's better is to automatically deploy new commits as they come for a pull request or branch. Enabling auto-deploy will make sure your preview environment is always up to date with the latest changes.

By default, and to save on credits, auto-deployed environments will be shut down after 72h, unless a new commit is pushed. You can also manually wake up an auto-deploy environment that went asleep from the UI.

When a branch or pull request is deleted, any auto-deploy environment associated with it will be automatically shut down, ending the credits consumption.

Screenshot 6

Expose any port

Contrary to a lot of other platforms, you are not limited to only 1 publicly-exposed port. Any process declared in your docker-compose file can expose any number of ports (as long as they don't conflict). You will get a dedicated IP for each deployment.

Screenshot 7

Persistent volumes

Want to keep demo data around across redeploys? Just define volumes in your docker-compose file and we'll take care of persisting them, and reattaching them for your next deploys. For instance, you can easily keep a persistent postgres/mysql database with demo data for the same branch or pull request, across deployments.

Screenshot 5

Simple credit system

Each plan comes with a dedicated number of credits. A one-hour preview session costs 1 credit (each hour started is due). On the free plan you will get 50 credits/month. The first paid plan starts at $75, for 750 credits/month (equivalent to 1 session running without interruption for 1 month). With auto-deploy jobs automatically going asleep or ending when the branch or pull request is closed, you should be able to run a lot of auto-deploy sessions on that plan. A common use case is to enable auto-deploy for your main branch (e.g. master), and for any pull request that requires thorough end-to-end testing and/or approval by a product manager.

Try it for FREE

(Free plan includes 50 credits = 50 hours of live preview environments, every month)

How it works

  1. Create a docker-compose.pullpreview.yml file and declare your process formation
  2. Push to a branch, open a pull request
  3. Go to your project's dashboard on PullPreview to start a session and/or enable auto-deploy
  4. A link to the preview session will be added as a comment to the pull request (you can also go through your PullPreview dashboard)

PullPreview will automatically build your docker images for the specific commit of the pull request or branch, and will deploy each process according to your docker-compose configuration. You get 1GB of RAM to share across all the processes of a Preview Session.

Example

Assuming your application has already been dockerized (i.e. it has a Dockerfile in its repository), you just need to add a docker-compose.yml file describing the various services that needs to run in each preview environments. By default it will also use a docker-compose.pullpreview.yml file if present, in case you don't want any conflicts with an existing docker-compose file.

For instance, a large Rails and Angular application such as OpenProject can take advantage of PullPreview just by adding the following file:

# docker-compose.pullpreview.yml
db:
  image: postgres:9.4.5
  environment:
    POSTGRES_USER: app
    POSTGRES_PASSWORD: p4ssw0rd
    POSTGRES_DB: app
  volumes:
    - ./export/db:/var/lib/postgresql/data
  memory: 64
  expose:
    - '5432'

worker: &ruby
  build: .
  volumes:
    - .:/usr/src/app
  links:
    - db
  environment:
    - "RAILS_CACHE_STORE=file_store"
    - "DATABASE_URL=postgresql://app:p4ssw0rd@db:5432/app?encoding=utf8&pool=5&timeout=5000&reconnect=true"
    - "SECRET_KEY_BASE=d4e74f017910ac56c6ebad01165b7e1b37f4c9c02e9716836f8670cdc8d65a231e64e4f6416b19c8"
    - "RAILS_ENV=production"
    - "HEROKU=true"
    - "OP_ADMIN_USER_SEEDER_FORCE_PASSWORD_CHANGE=off"
  command: "bundle exec rake db:migrate db:seed jobs:work"
  memory: 384

web:
  <<: *ruby
  ports:
    - "80:8080"
  command: "./docker/web"
  memory: 1024

You can find another example of a Rails app with postgres + redis at pullpreview/pullpreview-example-rails-app.

Get started

(and get 50 hours of glorious on-demand preview environments on us, every month)