sdev.sh

I’ve been setting up most of my development environments in the last 3 years using docker and docker-compose without any important issues. Having said that, in the last couple of month I’ve repeating the following script (with some variations cases by case) in most of my projects.

#!/bin/bash

case "$1" in
  server)
    docker-compose -f docker/docker-compose.yml run --rm -p 8080:8080 yarn start
    ;;
  build)
    docker-compose -f docker/docker-compose.yml run --rm app yarn build
    ;;
  test)
    docker-compose -f docker/docker-compose.yml run --rm app yarn test
    ;;
  bash)
    docker-compose -f docker/docker-compose.yml run --rm -p 8080:8080 server /bin/bash
    ;;
esac

I always ended up writing a call to docker-compose depending on the task I need to perform with some flag or arguments variations.

At the same time, I’ve spend some time working on different projects that had multiple ways of running it and lacked a simple documentation on what tasks were available inside the project.

I realized that this small script that I duplicated in most of my applications could be better expressed in a declarative fashion using a yaml file.

Hi sdev.sh

sdev.sh purpose is simple, Simple declarative syntax for your projects tasks.

Previous bash script is now expressed as:

version: 1
name: My Cool App
description: This text should briefly mention what the application/library is about
docker:
  compose_file: docker/docker-compose.yml
tasks:
  - name: server
    description: Start the development server
    command: yarn start
    container: app
    rm: true
    ports:
      "8080:8080"

  - name: build
    description: This command will build the entire application and install dependencies
    command: yarn build
    container: app
    rm: true

  - name: test
    description: run unit test suite.
    command: yarn test
    container: app

  - name: bash
    description: ssh in docker container
    command: /bin/bash
    container: app
    ports:
      "8080:8080"

Using that yaml file as input, sdev will generate the following command for you.

➜  sdev.sh git:(improve-readme) ✗ sdev

  Usage: sdev [options] [command]

  This text should briefly mention what the application/library is about


  Options:

    -V, --version  output the version number
    -h, --help     output usage information


  Commands:

    build       This command will build the entire application and install dependencies
    test        run unit test suite.
    bash        ssh in docker container
    help [cmd]  display help for [cmd]

The code is open source and can be found here.

I’m looking for more cool features that could be built in sdev.sh. If you think this tool might be useful in your projects, I want to hear about it :). Ping me at [email protected]

Enjoy 🎉

*****
Written by Martín Fernández on 28 February 2018