factor/extra/mason/server/release/release.factor

83 lines
2.3 KiB
Factor
Raw Normal View History

2010-02-09 05:27:39 -05:00
! Copyright (C) 2010 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
2010-02-10 22:26:12 -05:00
USING: accessors calendar db db.tuples db.types grouping io
2010-02-09 05:27:39 -05:00
io.encodings.ascii io.launcher kernel locals make
2010-02-14 07:03:15 -05:00
mason.release.archive mason.config mason.platform mason.server
namespaces sequences ;
2010-02-09 05:27:39 -05:00
IN: mason.server.release
: platform ( builder -- string )
2010-02-14 07:03:15 -05:00
[ os>> ] [ cpu>> ] bi (platform) ;
2010-02-09 05:27:39 -05:00
: package-name ( builder -- string )
[ platform ] [ last-release>> ] bi "/" glue ;
: release-name ( version builder -- string )
[
"releases/" %
2010-02-14 07:03:15 -05:00
over % "/" %
2010-02-09 05:27:39 -05:00
[ "factor-" % platform % "-" % % ]
[ os>> extension % ]
2010-02-14 07:03:15 -05:00
bi
2010-02-09 05:27:39 -05:00
] "" make ;
: release-command ( version builder -- command )
[
2010-02-14 07:03:15 -05:00
"cp " %
2010-02-09 05:27:39 -05:00
[ nip package-name % " " % ] [ release-name % ] 2bi
2010-02-14 07:03:15 -05:00
] "" make ;
2010-02-09 05:27:39 -05:00
TUPLE: release
host-name os cpu
last-release release-git-id ;
2010-02-10 22:26:12 -05:00
release "RELEASES" {
{ "host-name" "HOST_NAME" TEXT +user-assigned-id+ }
{ "os" "OS" TEXT +user-assigned-id+ }
{ "cpu" "CPU" TEXT +user-assigned-id+ }
{ "last-release" "LAST_RELEASE" TEXT }
{ "release-git-id" "RELEASE_GIT_ID" TEXT }
} define-persistent
2010-02-09 05:27:39 -05:00
:: <release> ( version builder -- release )
release new
builder host-name>> >>host-name
builder os>> >>os
builder cpu>> >>cpu
builder release-git-id>> >>release-git-id
version builder release-name >>last-release ;
: execute-on-server ( string -- )
[ "ssh" , upload-host get , "-l" , upload-username get , ] { } make
<process>
swap >>command
2010-02-14 07:03:15 -05:00
5 minutes >>timeout
2010-02-09 05:27:39 -05:00
ascii [ write ] with-process-writer ;
: release-script ( version builders -- string )
2010-02-14 07:03:15 -05:00
[ upload-directory get "cd " "\n" surround ] 2dip
[ release-command ] with map "\n" join
append ;
2010-02-09 05:27:39 -05:00
: create-releases ( version builders -- )
release-script execute-on-server ;
: update-releases ( version builders -- )
[
release new delete-tuples
[ <release> insert-tuple ] with each
] with-transaction ;
: check-releases ( builders -- )
[ release-git-id>> ] map all-equal?
[ "Not all builders are up to date" throw ] unless ;
: do-release ( version -- )
[
builder new select-tuples
[ nip check-releases ]
[ create-releases ]
[ update-releases ]
2tri
] with-mason-db ;