aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael G. Martins <rafael@rafaelmartins.eng.br>2017-03-06 21:38:41 +0100
committerRafael G. Martins <rafael@rafaelmartins.eng.br>2017-03-07 01:30:54 +0100
commitd41c2fcdd9366fb3f1fcb11aceed919bfebbed61 (patch)
tree1081416126a9bff58857ade5984e5e3b9b45a487
parentab1120742467f887b33cd89addf3c89b5f9bf5b6 (diff)
downloadblogc-d41c2fcdd9366fb3f1fcb11aceed919bfebbed61.tar.gz
blogc-d41c2fcdd9366fb3f1fcb11aceed919bfebbed61.tar.bz2
blogc-d41c2fcdd9366fb3f1fcb11aceed919bfebbed61.zip
make: add support to "production" builds
this is used by blogc-github-lambda and blogc-git-receiver.
-rw-r--r--man/blogc-make.1.ronn4
-rw-r--r--src/blogc-git-receiver/pre-receive.c2
-rw-r--r--src/blogc-github-lambda/lambda_function.py3
-rw-r--r--src/blogc-make/ctx.c1
-rw-r--r--src/blogc-make/ctx.h2
-rw-r--r--src/blogc-make/exec.c9
-rw-r--r--src/blogc-make/exec.h2
-rw-r--r--src/blogc-make/main.c10
-rw-r--r--tests/blogc-make/check_exec.c54
9 files changed, 74 insertions, 13 deletions
diff --git a/man/blogc-make.1.ronn b/man/blogc-make.1.ronn
index 10819da..4f9fe8c 100644
--- a/man/blogc-make.1.ronn
+++ b/man/blogc-make.1.ronn
@@ -20,6 +20,10 @@ EXPAND-ME!
* `-f` <FILE>:
Reads <FILE> as `blogcfile`.
+ * `-p`:
+ Builds for production environment. Adds two global variables to all blogc(1)
+ calls: `MAKE_ENV_PRODUCTION=1` and `MAKE_ENV=production`.
+
* `-v`:
Show program name, version and exit.
diff --git a/src/blogc-git-receiver/pre-receive.c b/src/blogc-git-receiver/pre-receive.c
index c2fe080..3b05e07 100644
--- a/src/blogc-git-receiver/pre-receive.c
+++ b/src/blogc-git-receiver/pre-receive.c
@@ -202,7 +202,7 @@ bgr_pre_receive_hook(int argc, char *argv[])
rv = 3;
goto cleanup;
}
- build_cmd = bc_strdup_printf("OUTPUT_DIR=\"%s\" blogc-make -V all",
+ build_cmd = bc_strdup_printf("OUTPUT_DIR=\"%s\" blogc-make -p -V all",
output_dir);
}
else if ((0 == access("Makefile", F_OK)) || (0 == access("GNUMakefile", F_OK))) {
diff --git a/src/blogc-github-lambda/lambda_function.py b/src/blogc-github-lambda/lambda_function.py
index f8a259d..fb8492f 100644
--- a/src/blogc-github-lambda/lambda_function.py
+++ b/src/blogc-github-lambda/lambda_function.py
@@ -165,7 +165,7 @@ def sns_handler(message):
if os.path.isfile(blogcfile):
# deploy using blogc-make
- args = [os.path.join(cwd, 'blogc'), '-m', '-f', blogcfile,
+ args = [os.path.join(cwd, 'blogc'), '-m', '-p', '-f', blogcfile,
'all']
if debug:
args.append('-V')
@@ -186,6 +186,7 @@ def sns_handler(message):
else:
print "Commit not for master branch, skipping: %s" % payload['ref']
+
def lambda_handler(event, context):
for record in event['Records']:
if 'Sns' in record:
diff --git a/src/blogc-make/ctx.c b/src/blogc-make/ctx.c
index fc59457..753aadf 100644
--- a/src/blogc-make/ctx.c
+++ b/src/blogc-make/ctx.c
@@ -143,6 +143,7 @@ bm_ctx_new(bm_ctx_t *base, const char *settings_file, const char *argv0,
rv->blogc = bm_exec_find_binary(argv0, "blogc", "BLOGC");
rv->blogc_runserver = bm_exec_find_binary(argv0, "blogc-runserver",
"BLOGC_RUNSERVER");
+ rv->production = false;
rv->verbose = false;
}
else {
diff --git a/src/blogc-make/ctx.h b/src/blogc-make/ctx.h
index 8d87163..e36fa4c 100644
--- a/src/blogc-make/ctx.h
+++ b/src/blogc-make/ctx.h
@@ -31,6 +31,8 @@ typedef struct {
typedef struct {
char *blogc;
char *blogc_runserver;
+
+ bool production;
bool verbose;
bm_settings_t *settings;
diff --git a/src/blogc-make/exec.c b/src/blogc-make/exec.c
index df028c2..db20cae 100644
--- a/src/blogc-make/exec.c
+++ b/src/blogc-make/exec.c
@@ -205,7 +205,7 @@ list_variables(const char *key, const char *value, bc_string_t *str)
char*
bm_exec_build_blogc_cmd(const char *blogc_bin, bm_settings_t *settings,
bc_trie_t *variables, bool listing, const char *template,
- const char *output, bool sources_stdin)
+ const char *output, bool production, bool sources_stdin)
{
bc_string_t *rv = bc_string_new();
@@ -228,6 +228,11 @@ bm_exec_build_blogc_cmd(const char *blogc_bin, bm_settings_t *settings,
bc_trie_foreach(variables, (bc_trie_foreach_func_t) list_variables, rv);
+ if (production) {
+ bc_string_append(rv,
+ " -D MAKE_ENV_PRODUCTION=1 -D MAKE_ENV='production'");
+ }
+
if (listing) {
bc_string_append(rv, " -l");
}
@@ -268,7 +273,7 @@ bm_exec_blogc(bm_ctx_t *ctx, bc_trie_t *variables, bool listing,
}
char *cmd = bm_exec_build_blogc_cmd(ctx->blogc, ctx->settings, variables,
- listing, template->path, output->path, input->len > 0);
+ listing, template->path, output->path, ctx->production, input->len > 0);
if (ctx->verbose)
printf("%s\n", cmd);
diff --git a/src/blogc-make/exec.h b/src/blogc-make/exec.h
index 08cc608..fadaafe 100644
--- a/src/blogc-make/exec.h
+++ b/src/blogc-make/exec.h
@@ -20,7 +20,7 @@ int bm_exec_command(const char *cmd, const char *input, char **output,
char **error, bc_error_t **err);
char* bm_exec_build_blogc_cmd(const char *blogc_bin, bm_settings_t *settings,
bc_trie_t *variables, bool listing, const char *template,
- const char *output, bool sources_stdin);
+ const char *output, bool production, bool sources_stdin);
int bm_exec_blogc(bm_ctx_t *ctx, bc_trie_t *variables, bool listing,
bm_filectx_t *template, bm_filectx_t *output, bc_slist_t *sources,
bool only_first_source);
diff --git a/src/blogc-make/main.c b/src/blogc-make/main.c
index 8e15981..eb7f504 100644
--- a/src/blogc-make/main.c
+++ b/src/blogc-make/main.c
@@ -36,7 +36,8 @@ print_help(void)
" -h show this help message and exit\n"
" -v show version and exit\n"
" -V be verbose when executing commands\n"
- " -f FILE read FILE as blogcfile\n");
+ " -f FILE read FILE as blogcfile\n"
+ " -p build for production environment\n");
bm_rule_print_help();
}
@@ -44,7 +45,7 @@ print_help(void)
static void
print_usage(void)
{
- printf("usage: blogc-make [-h] [-v] [-V] [-f FILE] [RULE ...]\n");
+ printf("usage: blogc-make [-h] [-v] [-V] [-f FILE] [-p] [RULE ...]\n");
}
@@ -62,6 +63,7 @@ main(int argc, char **argv)
bc_slist_t *rules = NULL;
bool verbose = false;
+ bool production = false;
char *blogcfile = NULL;
bm_ctx_t *ctx = NULL;
@@ -83,6 +85,9 @@ main(int argc, char **argv)
else if (i + 1 < argc)
blogcfile = bc_strdup(argv[++i]);
break;
+ case 'p':
+ production = true;
+ break;
#ifdef MAKE_EMBEDDED
case 'm':
// no-op, for embedding into blogc binary.
@@ -112,6 +117,7 @@ main(int argc, char **argv)
rv = 3;
goto cleanup;
}
+ ctx->production = production;
ctx->verbose = verbose;
rv = bm_rule_executor(ctx, rules);
diff --git a/tests/blogc-make/check_exec.c b/tests/blogc-make/check_exec.c
index 506c5f6..081aa25 100644
--- a/tests/blogc-make/check_exec.c
+++ b/tests/blogc-make/check_exec.c
@@ -81,20 +81,20 @@ test_build_blogc_cmd_with_settings(void **state)
bc_trie_insert(variables, "LOL", bc_strdup("HEHE"));
char *rv = bm_exec_build_blogc_cmd("blogc", settings, variables, true,
- "main.tmpl", "foo.html", true);
+ "main.tmpl", "foo.html", false, true);
assert_string_equal(rv,
"LC_ALL='en_US.utf8' blogc -D FOO='BAR' -D BAR='BAZ' -D LOL='HEHE' -l "
"-t 'main.tmpl' -o 'foo.html' -i");
free(rv);
rv = bm_exec_build_blogc_cmd("blogc", settings, variables, false, NULL, NULL,
- false);
+ false, false);
assert_string_equal(rv,
"LC_ALL='en_US.utf8' blogc -D FOO='BAR' -D BAR='BAZ' -D LOL='HEHE'");
free(rv);
rv = bm_exec_build_blogc_cmd("blogc", settings, NULL, false, NULL, NULL,
- false);
+ false, false);
assert_string_equal(rv,
"LC_ALL='en_US.utf8' blogc -D FOO='BAR' -D BAR='BAZ'");
free(rv);
@@ -106,6 +106,46 @@ test_build_blogc_cmd_with_settings(void **state)
}
+static void
+test_build_blogc_cmd_with_settings_and_production(void **state)
+{
+ bm_settings_t *settings = bc_malloc(sizeof(bm_settings_t));
+ settings->settings = bc_trie_new(free);
+ bc_trie_insert(settings->settings, "locale", bc_strdup("en_US.utf8"));
+ settings->global = bc_trie_new(free);
+ bc_trie_insert(settings->global, "FOO", bc_strdup("BAR"));
+ bc_trie_insert(settings->global, "BAR", bc_strdup("BAZ"));
+ bc_trie_t *variables = bc_trie_new(free);
+ bc_trie_insert(variables, "LOL", bc_strdup("HEHE"));
+
+ char *rv = bm_exec_build_blogc_cmd("blogc", settings, variables, true,
+ "main.tmpl", "foo.html", true, true);
+ assert_string_equal(rv,
+ "LC_ALL='en_US.utf8' blogc -D FOO='BAR' -D BAR='BAZ' -D LOL='HEHE' "
+ "-D MAKE_ENV_PRODUCTION=1 -D MAKE_ENV='production' -l -t 'main.tmpl' "
+ "-o 'foo.html' -i");
+ free(rv);
+
+ rv = bm_exec_build_blogc_cmd("blogc", settings, variables, false, NULL, NULL,
+ true, false);
+ assert_string_equal(rv,
+ "LC_ALL='en_US.utf8' blogc -D FOO='BAR' -D BAR='BAZ' -D LOL='HEHE' "
+ "-D MAKE_ENV_PRODUCTION=1 -D MAKE_ENV='production'");
+ free(rv);
+
+ rv = bm_exec_build_blogc_cmd("blogc", settings, NULL, false, NULL, NULL,
+ true, false);
+ assert_string_equal(rv,
+ "LC_ALL='en_US.utf8' blogc -D FOO='BAR' -D BAR='BAZ' "
+ "-D MAKE_ENV_PRODUCTION=1 -D MAKE_ENV='production'");
+ free(rv);
+
+ bc_trie_free(variables);
+ bc_trie_free(settings->settings);
+ bc_trie_free(settings->global);
+ free(settings);
+}
+
static void
test_build_blogc_cmd_without_settings(void **state)
@@ -114,18 +154,19 @@ test_build_blogc_cmd_without_settings(void **state)
bc_trie_insert(variables, "LOL", bc_strdup("HEHE"));
char *rv = bm_exec_build_blogc_cmd("blogc", NULL, variables, true,
- "main.tmpl", "foo.html", true);
+ "main.tmpl", "foo.html", false, true);
assert_string_equal(rv,
"blogc -D LOL='HEHE' -l -t 'main.tmpl' -o 'foo.html' -i");
free(rv);
rv = bm_exec_build_blogc_cmd("blogc", NULL, variables, false, NULL, NULL,
- false);
+ false, false);
assert_string_equal(rv,
"blogc -D LOL='HEHE'");
free(rv);
- rv = bm_exec_build_blogc_cmd("blogc", NULL, NULL, false, NULL, NULL, false);
+ rv = bm_exec_build_blogc_cmd("blogc", NULL, NULL, false, NULL, NULL,
+ false, false);
assert_string_equal(rv,
"blogc");
free(rv);
@@ -140,6 +181,7 @@ main(void)
const UnitTest tests[] = {
unit_test(test_find_binary),
unit_test(test_build_blogc_cmd_with_settings),
+ unit_test(test_build_blogc_cmd_with_settings_and_production),
unit_test(test_build_blogc_cmd_without_settings),
};
return run_tests(tests);