devtools/issues: add mailing support

Resolves b/15

Change-Id: I53a4057ff428219ae1d4928db74eaa2e8bda6651
diff --git a/devtools/issues/redmine.libsonnet b/devtools/issues/redmine.libsonnet
index 420e488..2c4d4e0 100644
--- a/devtools/issues/redmine.libsonnet
+++ b/devtools/issues/redmine.libsonnet
@@ -31,8 +31,23 @@
             clientID: error "oidc.clientID must be set",
             clientSecret: error "oidc.clientSecret must be set",
         },
+
+        # Mailing configuration object passed to smtp_settings
+        mailing: {
+            address: error "mailing.address must be set",
+            port: 465,
+            ssl: true,
+            domain: error "mailing.domain must be set",
+            authentication: ":login",
+            user_name: error "mailing.user_name must be set",
+            password: error "mailing.password must be set",
+        },
     },
 
+    # Generates YAML file while preserving specified ruby-style symbols.
+    # (ie. removes surrounding quotes)
+    rubyYaml(obj, symbols):: std.foldr(function (symbol, str) std.strReplace(str, '"%s"' % symbol, symbol), symbols, std.manifestYamlDoc(obj)),
+
     ns: kube.Namespace(app.cfg.namespace),
 
     postgres: postgres {
@@ -59,6 +74,11 @@
                     containers_: {
                         web: kube.Container("redmine") {
                             image: cfg.image,
+                            args: ['sh', '-c', |||
+                                set -e
+                                echo "${X_EXTRA_CONFIGURATION}" > config/configuration.yml
+                                exec /docker-entrypoint.sh rails server -b 0.0.0.0
+                            |||],
                             ports_: {
                                 http: { containerPort: 3000 },
                             },
@@ -81,6 +101,18 @@
                                 REDMINE_S3_ACCESS_KEY_ID: cfg.storage.accessKey,
                                 REDMINE_S3_SECRET_ACCESS_KEY: cfg.storage.secretKey,
                                 REDMINE_S3_REGION: cfg.storage.region,
+
+                                REDMINE_MAILING_PASSWORD: cfg.mailing.password,
+                                X_EXTRA_CONFIGURATION: app.rubyYaml({
+                                    production: {
+                                        email_delivery: {
+                                            delivery_method: ":smtp",
+                                            smtp_settings: cfg.mailing {
+                                                password: "$(REDMINE_MAILING_PASSWORD)",
+                                            },
+                                        }
+                                    },
+                                }, [":smtp", ":login"]),
                             },
                         },
                     },