--- /dev/null
+! Copyright (C) 2018 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: io.files.links io.launcher io.standard-paths json.reader
+kernel literals namespaces sequences strings system ;
+IN: ci.docker
+
+SYMBOL: docker-username
+SYMBOL: docker-password
+
+: docker-path ( -- path )
+ "docker" find-in-standard-login-path ;
+
+: docker-machine-path ( -- path )
+ "docker-machine" find-in-standard-login-path ;
+
+: vboxmanage-path ( -- path )
+ "VBoxManage" find-in-standard-login-path ;
+
+: sudo-linux ( seq -- seq' )
+ os linux? [ "sudo" prefix ] when ;
+
+: docker-lines ( seq -- lines )
+ docker-path prefix sudo-linux process-lines ;
+
+: docker-machine-lines ( seq -- lines )
+ docker-machine-path prefix process-lines ;
+
+
+: docker-command ( seq -- )
+ docker-path prefix sudo-linux try-output-process ;
+
+: docker-machine-command ( seq -- )
+ docker-machine-path prefix try-output-process ;
+
+
+: docker-version ( -- string )
+ { "version" } docker-lines ;
+
+: docker-machine-version ( -- string )
+ { "version" } docker-machine-lines ?first ;
+
+
+
+: docker-machine-inspect ( string -- json )
+ { "inspect" } swap suffix docker-machine-lines "" join json> ;
+
+
+: docker-machines ( -- seq )
+ { "ls" "-q" } docker-machine-lines ;
+
+: docker-machine-status ( string -- status )
+ { "status" } swap suffix docker-machine-lines ;
+
+
+: docker-image-names ( -- seq )
+ { "image" "ls" "-q" } docker-lines ;
+
+: docker-image-ls ( -- seq )
+ { "image" "ls" } docker-lines ;
+
+: docker-login ( -- )
+ ${
+ "sudo"
+ docker-path "login"
+ "-p" docker-password get-global
+ "-u" docker-username get-global
+ } run-process drop ;
+
+GENERIC: docker-pull ( obj -- )
+
+M: string docker-pull ( string -- )
+ { "pull" } swap suffix docker-command ;
+
+M: sequence docker-pull ( seq -- )
+ [ docker-pull ] each ;
+
+: docker-hello-world ( -- )
+ { "run" "hello-world" } docker-command ;