From 7e824ca3923bab4cd3850e485a6fde147df3be9e Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Wed, 30 Mar 2016 11:18:55 -0700 Subject: [PATCH] mason.release: Move code signing to its own vocab. Add hooks for mac and windows code signing. --- extra/mason/release/archive/archive.factor | 17 -------- extra/mason/release/release.factor | 5 ++- extra/mason/release/sign/authors.txt | 1 + extra/mason/release/sign/sign.factor | 48 ++++++++++++++++++++++ 4 files changed, 52 insertions(+), 19 deletions(-) create mode 100644 extra/mason/release/sign/authors.txt create mode 100644 extra/mason/release/sign/sign.factor diff --git a/extra/mason/release/archive/archive.factor b/extra/mason/release/archive/archive.factor index e2df88f350..79fb4c34f4 100644 --- a/extra/mason/release/archive/archive.factor +++ b/extra/mason/release/archive/archive.factor @@ -32,25 +32,8 @@ IN: mason.release.archive archive-name } short-running-process ; -: cert-path ( -- path ) - home "config/mac_app.cer" append-path ; - -: sign-factor.app? ( -- ? ) cert-path exists? ; - -: factor.app-path ( -- path ) - build-dir get "factor/Factor.app/" append-path ; - -:: sign-factor.app ( -- ) - ${ - "codesign" "--force" "--sign" - "Developer ID Application" - cert-path - factor.app-path - } short-running-process ; - ! Make the .dmg : make-macosx-archive ( archive-name -- ) - sign-factor.app? [ sign-factor.app ] when "dmg-root" make-directory "factor" "dmg-root" copy-tree-into "factor" "dmg-root" make-disk-image diff --git a/extra/mason/release/release.factor b/extra/mason/release/release.factor index ae34339804..49f97171c5 100644 --- a/extra/mason/release/release.factor +++ b/extra/mason/release/release.factor @@ -1,14 +1,15 @@ ! Copyright (C) 2008, 2009 Eduardo Cavazos, Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: combinators mason.notify mason.release.archive -mason.release.branch mason.release.dlls mason.release.tidy -mason.release.upload ; +mason.release.branch mason.release.dlls mason.release.sign +mason.release.tidy mason.release.upload ; IN: mason.release : release ( -- ) update-clean-branch tidy copy-dlls + sign-factor-app archive-name { [ make-archive ] [ upload ] diff --git a/extra/mason/release/sign/authors.txt b/extra/mason/release/sign/authors.txt new file mode 100644 index 0000000000..7c1b2f2279 --- /dev/null +++ b/extra/mason/release/sign/authors.txt @@ -0,0 +1 @@ +Doug Coleman diff --git a/extra/mason/release/sign/sign.factor b/extra/mason/release/sign/sign.factor new file mode 100644 index 0000000000..0ca4bf7fd2 --- /dev/null +++ b/extra/mason/release/sign/sign.factor @@ -0,0 +1,48 @@ +! Copyright (C) 2016 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: io.backend io.pathnames kernel literals locals +mason.common namespaces sequences system ; +IN: mason.release.sign + +<< +! Two cases to allow signing in mason or in the UI +: make-factor-path ( path -- path ) + build-dir get [ + ! In a build, make dir: "build-dir/factor/factor.com" + [ "factor/" prepend-path ] dip prepend-path + ] [ + ! Not in build, make dir: "resource:factor.com" + "resource:" prepend-path normalize-path + ] if* ; + +HOOK: cert-path os ( -- path/f ) + +M: macosx cert-path + home "config/mac_app.cer" append-path ; + +M: windows cert-path + home "config/FactorSPC.pfx" append-path ; +>> + +HOOK: sign-factor-app os ( -- ) + +M: object sign-factor-app ; + +M:: macosx sign-factor-app ( -- ) + ${ + "codesign" "--force" "--sign" + "Developer ID Application" + cert-path + "Factor.app/" make-factor-path + } short-running-process ; + +M:: windows sign-factor-app ( -- ) + { "factor.com" "factor.exe" } [ + [ + { + "signtool" "sign" + "/v" + "/f" cert-path + } + ] dip make-factor-path suffix short-running-process + ] each ;