Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Working with Workspace

Oliver Davies
February 02, 2021

Working with Workspace

Oliver Davies

February 02, 2021
Tweet

More Decks by Oliver Davies

Other Decks in Technology

Transcript

  1. What is Workspace? • A tool that we use and

    maintain at Inviqa • Primarily for building and managing Docker Compose environments • Built on Symfony • Create custom commands for your project environments • Alternative to a bash script or a Makefile • And more... @opdavies
  2. Features • Commands • Functions • Attributes • Encrypting/decrypting secrets

    • Generating configuration files • Global services: logging, mail, proxy @opdavies
  3. Installation # Download from GitHub. wget https://github.com/my127/workspace/releases/download/0.1.3/ws # Make it

    executable. chmod +x ws # Make it accessible. mv ws /usr/local/bin @opdavies
  4. Running simple commands 1 # workspace.yml 2 3 workspace('oliverdavies-uk'): 4

    description: My personal website codebase. 5 6 command('say-hello'): 7 #!bash 8 echo 'Hello world' 9 10 command('say-hello'): 11 #!php 12 echo 'Hello World'; @opdavies
  5. Arguments 1 command('say-hello <name>'): | 2 #!bash|= 3 echo ={

    @('message') } from ={ input.argument('name') } @opdavies
  6. Environment variables 1 command('say-hello <name>'): 2 env: 3 MESSAGE: =

    @('message') 4 NAME: = input.argument('name') 5 exec: | 6 #!bash|= 7 echo "$MESSAGE from $NAME" @opdavies
  7. Managing secrets # ws secret generate-random-key key('default'): 'd38be3b7aa42fdbfb14c0d25f07bc1875edd5f13f640cd76' # ws

    secret encrypt 'Hello World!' attribute('message'): = decrypt('YTozOntpOjA7czo3OiJkZWZhdWx0Ijt') command('say-hello'): | #!bash|@ echo @('message') @opdavies
  8. Attributes attributes: rst2pdf: command: | = 'rst2pdf ' ~ @('rst2pdf.filename.rst')

    ~ ' --break-level 1 --stylesheets main --fit-background-mode scale --extension-module preprocess --output ' ~ @('rst2pdf.filename.pdf') filename: pdf: slides.pdf rst: slides.rst thumbnail: filename: thumbnail.png @opdavies
  9. Generating PDFs command('pdf generate <talk>'): | #!bash|= cd ={ input.argument('talk')

    } passthru ={ @('rst2pdf.command') } command('pdf watch <talk>'): | #!bash|= cd ={ input.argument('talk') } passthru nodemon -e rst,style,txt -x "={ @('rst2pdf.command') }" @opdavies
  10. Generating thumbnails command('thumbnail <talk>'): env: PDF_FILENAME: = @('rst2pdf.filename.pdf') THUMBNAIL_FILENAME: =

    @('thumbnail.filename') exec: | #!bash|= cd ={ input.argument('talk') } passthru gs -sDEVICE=png16m -r300 -dDownScaleFactor=4 -sOutputFile=$THUMBNAIL_FILENAME -dLastPage=1 $PDF_FILENAME @opdavies
  11. Using confd 1 attributes: 2 drupal: 3 docroot: web 4

    5 command('apply config'): | 6 #!php 7 $ws->confd('workspace:/confd')->apply(); 8 9 confd('workspace:/confd'): 10 - src: 'vhost.conf' 11 dst: 'workspace:/.my127ws/docker/nginx/default.conf' @opdavies
  12. vhost.conf.twig The source file. 1 server { 2 server_name _;

    3 root /app/{{ @('drupal.docroot' )}}; 4 @opdavies