Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Working with Workspace
Search
Oliver Davies
February 02, 2021
Technology
0
720
Working with Workspace
https://www.oliverdavies.uk/talks/working-with-workspace
Oliver Davies
February 02, 2021
Tweet
Share
More Decks by Oliver Davies
See All by Oliver Davies
Building Static Websites with Sculpin
opdavies
0
1.5k
Taking Flight with Tailwind CSS
opdavies
0
4.7k
TDD - Test Driven Drupal
opdavies
0
3.4k
Building "Build Configs"
opdavies
0
350
Communities and contribution
opdavies
0
140
Working without Workspace
opdavies
0
200
Things you should know about PHP
opdavies
1
690
An Introduction to Mob Programming
opdavies
0
220
Deploying PHP applications with Ansible, Ansible Vault and Ansistrano
opdavies
0
6.1k
Other Decks in Technology
See All in Technology
Cosmos DB で持続可能な RAG を実現しよう!~ AOAI Dev Day ふりかえりを添えて / Sustainable RAG with Cosmos DB with recap AOAI Dev Day
miyake
0
170
JAWS-UG 事務局 の「これまで」から みんなで「ここから」を考えよう
miu_crescent
2
140
The road to green code (with Sonar)
bluehats
0
150
SageMaker学習のツボ / The Key Points of Learning SageMaker
cmhiranofumio
0
270
Oracle Cloud Infrastructure:2024年10月度サービス・アップデート
oracle4engineer
PRO
0
140
テストを楽に書きたい
tomorrowkey
2
260
【完全版】Dify - LINE Bot連携 考え方と実用テクニック
uezo
3
850
寒冷地稲作の歴史にみるコミュニティ
miu_crescent
2
130
パートナー企業のテクニカルサポートエンジニアとして気になる、より良い AWS サポートの利活用について
kazzpapa3
0
180
Amazon Managed Grafana で AWS IoT TwinMaker によるデジタルツインアプリケーションを動かしてみた
wakatsuki
0
110
Road to Single Activity Uncovered
yurihondo
0
110
さくっと実践!Postmanを活用した高品質で持続可能なAPI管理
yokawasa
5
350
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
26
700
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
26
4.1k
Writing Fast Ruby
sferik
626
60k
Done Done
chrislema
181
16k
Bash Introduction
62gerente
608
210k
Designing Experiences People Love
moore
138
23k
Agile that works and the tools we love
rasmusluckow
327
21k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.6k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
Docker and Python
trallard
40
3k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
Pencils Down: Stop Designing & Start Developing
hursman
119
11k
Transcript
Working with Workspace Oliver Davies, Inviqa
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
Features • Commands • Functions • Attributes • Encrypting/decrypting secrets
• Generating configuration files • Global services: logging, mail, proxy @opdavies
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
@opdavies
Replacing your Makefile @opdavies
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
@opdavies
'run' vs. 'passthru' command('say-hello'): #!bash run echo 'Hello World' passthru
echo 'Hello World' @opdavies
Attributes 1 attribute('message'): Hello World! 2 3 command('say-hello'): | 4
#!bash|@ 5 echo @('message') @opdavies
Arguments 1 command('say-hello <name>'): | 2 #!bash|= 3 echo ={
@('message') } from ={ input.argument('name') } @opdavies
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
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
Example: building slides from rst2pdf @opdavies
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
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
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
Configuration files @opdavies
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
vhost.conf.twig The source file. 1 server { 2 server_name _;
3 root /app/{{ @('drupal.docroot' )}}; 4 @opdavies
default.conf The generated file. 1 server { 2 server_name _;
3 root /app/web; 4 @opdavies
Demo: "Workspacing" my site @opdavies
Thanks! References: • https://github.com/my127/workspace • https://oliverdavies.link/workspace-demo • https://oliverdavies.link/workspacing-site Me: •
https://www.oliverdavies.uk @opdavies