From cdd855c745e44ba9498e3e98c764bcf198364266 Mon Sep 17 00:00:00 2001 From: Erik Rose Date: Wed, 2 Dec 2015 02:01:22 -0500 Subject: [PATCH] Add build script for letsencrypt-auto. Change template language to reference files, saving me some boilerplate over the dict-based .format() thing I originally had in mind. Put newlines at the ends of bootstrap scripts. It makes the built le-auto script prettier. --- letsencrypt_auto/build.py | 30 +++++++++++++++++++ letsencrypt_auto/letsencrypt-auto.template | 20 ++++++------- .../pieces/bootstrappers/arch_common.sh | 2 +- .../bootstrappers/{freebsd.sh => free_bsd.sh} | 2 +- .../pieces/bootstrappers/gentoo_common.sh | 2 +- letsencrypt_auto/pieces/bootstrappers/mac.sh | 2 +- .../pieces/bootstrappers/rpm_common.sh | 2 +- .../pieces/bootstrappers/suse_common.sh | 2 +- 8 files changed, 46 insertions(+), 16 deletions(-) create mode 100755 letsencrypt_auto/build.py rename letsencrypt_auto/pieces/bootstrappers/{freebsd.sh => free_bsd.sh} (98%) diff --git a/letsencrypt_auto/build.py b/letsencrypt_auto/build.py new file mode 100755 index 000000000..b7dd40890 --- /dev/null +++ b/letsencrypt_auto/build.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python +"""Stitch together the letsencrypt-auto script. + +Implement a simple templating language in which {{ some/file }} turns into the +contents of the file at ./pieces/some/file. + +""" +from os.path import dirname, join +import re +from sys import argv + + +def main(): + dir = dirname(argv[0]) + + def replacer(match): + rel_path = match.group(1) + with open(join(dir, 'pieces', rel_path)) as replacement: + return replacement.read() + + with open(join(dir, 'letsencrypt-auto.template')) as template: + result = re.sub(r'{{\s*([A-Za-z0-9_./-]+)\s*}}', + replacer, + template.read()) + with open(join(dir, 'letsencrypt-auto'), 'w') as out: + out.write(result) + + +if __name__ == '__main__': + main() diff --git a/letsencrypt_auto/letsencrypt-auto.template b/letsencrypt_auto/letsencrypt-auto.template index f3fa542e2..b20187506 100755 --- a/letsencrypt_auto/letsencrypt-auto.template +++ b/letsencrypt_auto/letsencrypt-auto.template @@ -49,13 +49,13 @@ DeterminePythonVersion() { fi } -{{bootstrap_deb_common}} -{{bootstrap_rpm_common}} -{{bootstrap_suse_common}} -{{bootstrap_arch_common}} -{{bootstrap_gentoo_common}} -{{bootstrap_free_bsd}} -{{bootstrap_mac}} +{{ bootstrappers/deb_common.sh }} +{{ bootstrappers/rpm_common.sh }} +{{ bootstrappers/suse_common.sh }} +{{ bootstrappers/arch_common.sh }} +{{ bootstrappers/gentoo_common.sh }} +{{ bootstrappers/free_bsd.sh }} +{{ bootstrappers/mac.sh }} # Install required OS packages: Bootstrap() { @@ -180,7 +180,7 @@ elif [ "$1" != "--_skip-to-install" ]; then # There is no $ interpolation due to quotes on heredoc delimiters. set +e TEMP_DIR=`$PYTHON - << "UNLIKELY_EOF" -{{download_upgrade}} +{{ download_upgrade.py }} UNLIKELY_EOF` DOWNLOAD_STATUS=$? set -e @@ -205,11 +205,11 @@ else # --_skip-to-install was passed. TEMP_DIR="$2" shift 2 cat << "UNLIKELY_EOF" > $TEMP_DIR/letsencrypt-auto-requirements.txt -{{requirements}} +{{ letsencrypt-auto-requirements.txt }} UNLIKELY_EOF cat << "UNLIKELY_EOF" > $TEMP_DIR/peep.py -{{peep}} +{{ peep.py }} UNLIKELY_EOF set +e diff --git a/letsencrypt_auto/pieces/bootstrappers/arch_common.sh b/letsencrypt_auto/pieces/bootstrappers/arch_common.sh index ef881448e..a6114787e 100755 --- a/letsencrypt_auto/pieces/bootstrappers/arch_common.sh +++ b/letsencrypt_auto/pieces/bootstrappers/arch_common.sh @@ -24,4 +24,4 @@ BootstrapArchCommon() { if [ "$missing" ]; then "$SUDO" pacman -S --needed $missing fi -} \ No newline at end of file +} diff --git a/letsencrypt_auto/pieces/bootstrappers/freebsd.sh b/letsencrypt_auto/pieces/bootstrappers/free_bsd.sh similarity index 98% rename from letsencrypt_auto/pieces/bootstrappers/freebsd.sh rename to letsencrypt_auto/pieces/bootstrappers/free_bsd.sh index 8c65c97c0..371ca03f3 100755 --- a/letsencrypt_auto/pieces/bootstrappers/freebsd.sh +++ b/letsencrypt_auto/pieces/bootstrappers/free_bsd.sh @@ -5,4 +5,4 @@ BootstrapFreeBsd() { py27-virtualenv \ augeas \ libffi \ -} \ No newline at end of file +} diff --git a/letsencrypt_auto/pieces/bootstrappers/gentoo_common.sh b/letsencrypt_auto/pieces/bootstrappers/gentoo_common.sh index 557ae2d5c..1d4753633 100755 --- a/letsencrypt_auto/pieces/bootstrappers/gentoo_common.sh +++ b/letsencrypt_auto/pieces/bootstrappers/gentoo_common.sh @@ -20,4 +20,4 @@ BootstrapGentooCommon() { "$SUDO" emerge --noreplace $PACKAGES ;; esac -} \ No newline at end of file +} diff --git a/letsencrypt_auto/pieces/bootstrappers/mac.sh b/letsencrypt_auto/pieces/bootstrappers/mac.sh index 16bcfe1cf..9318d18c8 100755 --- a/letsencrypt_auto/pieces/bootstrappers/mac.sh +++ b/letsencrypt_auto/pieces/bootstrappers/mac.sh @@ -16,4 +16,4 @@ BootstrapMac() { echo "virtualenv Not Installed\nInstalling with pip" pip install virtualenv fi -} \ No newline at end of file +} diff --git a/letsencrypt_auto/pieces/bootstrappers/rpm_common.sh b/letsencrypt_auto/pieces/bootstrappers/rpm_common.sh index 459bd1408..ebc64413c 100755 --- a/letsencrypt_auto/pieces/bootstrappers/rpm_common.sh +++ b/letsencrypt_auto/pieces/bootstrappers/rpm_common.sh @@ -46,4 +46,4 @@ BootstrapRpmCommon() { echo "Could not install additional dependencies. Aborting bootstrap!" exit 1 fi -} \ No newline at end of file +} diff --git a/letsencrypt_auto/pieces/bootstrappers/suse_common.sh b/letsencrypt_auto/pieces/bootstrappers/suse_common.sh index dff40dcf1..34511bf22 100755 --- a/letsencrypt_auto/pieces/bootstrappers/suse_common.sh +++ b/letsencrypt_auto/pieces/bootstrappers/suse_common.sh @@ -11,4 +11,4 @@ BootstrapSuseCommon() { libopenssl-devel \ libffi-devel \ ca-certificates \ -} \ No newline at end of file +}