killbill-memoizeit

Merge branch 'master' into work-for-release-0.19.x Signed-off-by:

4/5/2018 5:18:59 AM

Details

diff --git a/bin/gen_updater.rb b/bin/gen_updater.rb
index 14f75c9..9ad2429 100644
--- a/bin/gen_updater.rb
+++ b/bin/gen_updater.rb
@@ -21,10 +21,10 @@ metadata.each do |entry|
   train = parsed.last.to_i
   if train % 2 == 1
     current_dev_train = train if current_dev_train.to_i < train
-    current_dev_version = version if current_dev_version.nil? || (current_dev_version < version)
+    current_dev_version = version if current_dev_version.nil? || (Gem::Version.new(current_dev_version) < Gem::Version.new(version))
   else
     current_stable_train = train if current_stable_train.to_i < train
-    current_stable_version = version if current_stable_version.nil? || (current_stable_version < version)
+    current_stable_version = version if current_stable_version.nil? || (Gem::Version.new(current_stable_version) < Gem::Version.new(version))
   end
 
   releases << {
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
index 2de2814..0c79bed 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
@@ -700,7 +700,7 @@ public class AccountResource extends JaxRsResourceBase {
     @GET
     @Path("/{accountId:" + UUID_PATTERN + "}/" + INVOICES)
     @Produces(APPLICATION_JSON)
-    @ApiOperation(value = "Retrieve account invoices", response = InvoiceJson.class)
+    @ApiOperation(value = "Retrieve account invoices", response = InvoiceJson.class, responseContainer = "List")
     @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid account id supplied"),
                            @ApiResponse(code = 404, message = "Account not found")})
     public Response getInvoices(@PathParam("accountId") final UUID accountId,

NEWS 5(+1 -4)

diff --git a/NEWS b/NEWS
index b69e7fa..eb29201 100644
--- a/NEWS
+++ b/NEWS
@@ -24,10 +24,7 @@
     See https://github.com/killbill/killbill/releases/tag/killbill-0.18.18
 
 0.18.17
-    Relax sanity checks for STANDALONE subscriptions #840
-    Fix JDBC connection leak in pagination API #853
-    Fix limitation where catalog plan name cannot end with an number #842
-    Reduce log level of InvoiceItemGeneratorLogger #851
+    See https://github.com/killbill/killbill/releases/tag/killbill-0.18.17
 
 0.18.16
     See https://github.com/killbill/killbill/releases/tag/killbill-0.18.16
diff --git a/profiles/killbill/src/main/java/org/killbill/billing/server/log/obfuscators/ObfuscatorConverter.java b/profiles/killbill/src/main/java/org/killbill/billing/server/log/obfuscators/ObfuscatorConverter.java
index 6e522d6..a45d67e 100644
--- a/profiles/killbill/src/main/java/org/killbill/billing/server/log/obfuscators/ObfuscatorConverter.java
+++ b/profiles/killbill/src/main/java/org/killbill/billing/server/log/obfuscators/ObfuscatorConverter.java
@@ -17,14 +17,16 @@
 
 package org.killbill.billing.server.log.obfuscators;
 
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 
 import ch.qos.logback.classic.pattern.ClassicConverter;
 import ch.qos.logback.classic.spi.ILoggingEvent;
-import com.google.common.collect.ImmutableList;
 
 /**
- * ObfuscatorConverter attempts to mask sensitive data in the log files.
+ * ObfuscatorConverter attempts to mask sensitive data in the log files. Extra parameters can be passed to the
+ * converter and the underlying obsfucators by adding arguments behind maskedMsg like the example shown below.
  * <p/>
  * To use, define a new conversion word in your Logback configuration, e.g.:
  * <pre>
@@ -33,7 +35,7 @@ import com.google.common.collect.ImmutableList;
  *             converterClass="org.killbill.billing.server.log.obfuscators.ObfuscatorConverter" />
  *         <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  *             <encoder>
- *                 <pattern>%date [%thread] - %maskedMsg%n</pattern>
+ *                 <pattern>%date [%thread] - %maskedMsg{param1, param2, ...}%n</pattern>
  *             </encoder>
  *         </appender>
  *         <root level="DEBUG">
@@ -44,10 +46,16 @@ import com.google.common.collect.ImmutableList;
  */
 public class ObfuscatorConverter extends ClassicConverter {
 
-    private final Collection<Obfuscator> obfuscators = ImmutableList.<Obfuscator>of(new ConfigMagicObfuscator(),
-                                                                                    new LoggingFilterObfuscator(),
-                                                                                    new PatternObfuscator(),
-                                                                                    new LuhnMaskingObfuscator());
+    private final Collection<Obfuscator> obfuscators = new ArrayList<Obfuscator>();
+
+    @Override
+    public void start() {
+        obfuscators.addAll(Arrays.asList(new ConfigMagicObfuscator(),
+                                         new LoggingFilterObfuscator(),
+                                         new PatternObfuscator(getOptionList()),
+                                         new LuhnMaskingObfuscator()));
+        super.start();
+    }
 
     @Override
     public String convert(final ILoggingEvent event) {
diff --git a/profiles/killbill/src/main/java/org/killbill/billing/server/log/obfuscators/PatternObfuscator.java b/profiles/killbill/src/main/java/org/killbill/billing/server/log/obfuscators/PatternObfuscator.java
index a850c5b..df4887a 100644
--- a/profiles/killbill/src/main/java/org/killbill/billing/server/log/obfuscators/PatternObfuscator.java
+++ b/profiles/killbill/src/main/java/org/killbill/billing/server/log/obfuscators/PatternObfuscator.java
@@ -17,6 +17,7 @@
 
 package org.killbill.billing.server.log.obfuscators;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.regex.Pattern;
@@ -27,7 +28,7 @@ import com.google.common.collect.ImmutableList;
 public class PatternObfuscator extends Obfuscator {
 
     // Hide by default sensitive bank, PCI and PII data. For PANs, see LuhnMaskingObfuscator
-    private static final String[] DEFAULT_SENSITIVE_KEYS = {
+    private static final Collection<String> DEFAULT_SENSITIVE_KEYS = ImmutableList.of(
             "accountnumber",
             "authenticationdata",
             "bankaccountnumber",
@@ -49,19 +50,27 @@ public class PatternObfuscator extends Obfuscator {
             "name",
             "number",
             "password",
-            "xid"
-    };
+            "xid");
 
     private final Collection<Pattern> patterns = new LinkedList<Pattern>();
 
     public PatternObfuscator() {
-        this(ImmutableList.<Pattern>of());
+        this(ImmutableList.<Pattern>of(), ImmutableList.<String>of());
     }
 
-    public PatternObfuscator(final Collection<Pattern> extraPatterns) {
+    public PatternObfuscator(final Collection<String> extraKeywords) {
+        this(ImmutableList.<Pattern>of(), extraKeywords);
+    }
+
+    public PatternObfuscator(final Collection<Pattern> extraPatterns, final Collection<String> extraKeywords) {
         super();
+        Collection<String> keywords = new ArrayList<String>();
+        keywords.addAll(DEFAULT_SENSITIVE_KEYS);
+        if (extraKeywords != null) {
+            keywords.addAll(extraKeywords);
+        }
 
-        for (final String sensitiveKey : DEFAULT_SENSITIVE_KEYS) {
+        for (final String sensitiveKey : keywords) {
             this.patterns.add(buildJSONPattern(sensitiveKey));
             this.patterns.add(buildXMLPattern(sensitiveKey));
             this.patterns.add(buildMultiValuesXMLPattern(sensitiveKey));
@@ -81,7 +90,7 @@ public class PatternObfuscator extends Obfuscator {
     }
 
     private Pattern buildXMLPattern(final String key) {
-        return Pattern.compile(key + ">([^<\\n]+)</[^<>]*" + key + ">", DEFAULT_PATTERN_FLAGS);
+        return Pattern.compile(key + "(?:\\s+.*?)?>([^<\\n]+)</[^<>]*" + key + ">", DEFAULT_PATTERN_FLAGS);
     }
 
     private Pattern buildMultiValuesXMLPattern(final String key) {
diff --git a/profiles/killbill/src/main/resources/update-checker/killbill-server-update-list.properties b/profiles/killbill/src/main/resources/update-checker/killbill-server-update-list.properties
index c8dde49..e03035f 100644
--- a/profiles/killbill/src/main/resources/update-checker/killbill-server-update-list.properties
+++ b/profiles/killbill/src/main/resources/update-checker/killbill-server-update-list.properties
@@ -1,18 +1,155 @@
 ## Top level keys
 # general.notice = This notice should rarely, if ever, be used as everyone will see it
 
+### 0.19.x series ###
+
+# 0.19.7
+0.19.7.updates           =
+0.19.7.notices           = This is the latest dev release.
+0.19.7.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.19.7
+
+# 0.19.6
+0.19.6.updates           = 0.19.7
+0.19.6.notices           = We recommend upgrading to 0.19.7, our latest dev release.
+0.19.6.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.19.6
+
+# 0.19.5
+0.19.5.updates           = 0.19.7
+0.19.5.notices           = We recommend upgrading to 0.19.7, our latest dev release.
+0.19.5.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.19.5
+
+# 0.19.4
+0.19.4.updates           = 0.19.7
+0.19.4.notices           = We recommend upgrading to 0.19.7, our latest dev release.
+0.19.4.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.19.4
+
+# 0.19.3
+0.19.3.updates           = 0.19.7
+0.19.3.notices           = We recommend upgrading to 0.19.7, our latest dev release.
+0.19.3.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.19.3
+
+# 0.19.2
+0.19.2.updates           = 0.19.7
+0.19.2.notices           = We recommend upgrading to 0.19.7, our latest dev release.
+0.19.2.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.19.2
+
+# 0.19.1
+0.19.1.updates           = 0.19.7
+0.19.1.notices           = We recommend upgrading to 0.19.7, our latest dev release.
+0.19.1.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.19.1
+
+# 0.19.0
+0.19.0.updates           = 0.19.7
+0.19.0.notices           = We recommend upgrading to 0.19.7, our latest dev release.
+0.19.0.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.19.0
+
 ### 0.18.x series ###
 
+# 0.18.19
+0.18.19.updates           =
+0.18.19.notices           = This is the latest GA release.
+0.18.19.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.19
+
+# 0.18.18
+0.18.18.updates           = 0.18.19
+0.18.18.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.18.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.18
+
+# 0.18.17
+0.18.17.updates           = 0.18.19
+0.18.17.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.17.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.17
+
+# 0.18.16
+0.18.16.updates           = 0.18.19
+0.18.16.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.16.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.16
+
+# 0.18.15
+0.18.15.updates           = 0.18.19
+0.18.15.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.15.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.15
+
+# 0.18.14
+0.18.14.updates           = 0.18.19
+0.18.14.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.14.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.14
+
+# 0.18.13
+0.18.13.updates           = 0.18.19
+0.18.13.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.13.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.13
+
+# 0.18.12
+0.18.12.updates           = 0.18.19
+0.18.12.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.12.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.12
+
+# 0.18.11
+0.18.11.updates           = 0.18.19
+0.18.11.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.11.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.11
+
+# 0.18.10
+0.18.10.updates           = 0.18.19
+0.18.10.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.10.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.10
+
+# 0.18.9
+0.18.9.updates           = 0.18.19
+0.18.9.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.9.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.9
+
+# 0.18.8
+0.18.8.updates           = 0.18.19
+0.18.8.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.8.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.8
+
+# 0.18.7
+0.18.7.updates           = 0.18.19
+0.18.7.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.7.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.7
+
+# 0.18.6
+0.18.6.updates           = 0.18.19
+0.18.6.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.6.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.6
+
+# 0.18.5
+0.18.5.updates           = 0.18.19
+0.18.5.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.5.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.5
+
+# 0.18.4
+0.18.4.updates           = 0.18.19
+0.18.4.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.4.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.4
+
+# 0.18.3
+0.18.3.updates           = 0.18.19
+0.18.3.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.3.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.3
+
+# 0.18.2
+0.18.2.updates           = 0.18.19
+0.18.2.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.2.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.2
+
+# 0.18.1
+0.18.1.updates           = 0.18.19
+0.18.1.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.1.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.1
+
 # 0.18.0
-0.18.0.updates           =
-0.18.0.notices           = This is the latest GA release.
+0.18.0.updates           = 0.18.19
+0.18.0.notices           = We recommend upgrading to 0.18.19, our latest GA release.
 0.18.0.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.0
 
 ### 0.17.x series ###
 
 # 0.17.8
 0.17.8.updates           =
-0.17.8.notices           = This is the latest dev release.
+0.17.8.notices           = We recommend upgrading to 0.18.19, our latest GA release.
 0.17.8.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.17.8
 
 # 0.17.7
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/server/log/obfuscators/TestObfuscatorConverter.java b/profiles/killbill/src/test/java/org/killbill/billing/server/log/obfuscators/TestObfuscatorConverter.java
index 4d54512..ba4aa74 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/server/log/obfuscators/TestObfuscatorConverter.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/server/log/obfuscators/TestObfuscatorConverter.java
@@ -17,12 +17,15 @@
 
 package org.killbill.billing.server.log.obfuscators;
 
+import java.util.List;
+
 import org.killbill.billing.server.log.ServerTestSuiteNoDB;
 import org.mockito.Mockito;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import ch.qos.logback.classic.spi.ILoggingEvent;
+import com.google.common.collect.ImmutableList;
 
 public class TestObfuscatorConverter extends ServerTestSuiteNoDB {
 
@@ -60,11 +63,52 @@ public class TestObfuscatorConverter extends ServerTestSuiteNoDB {
                "</gateway>");
     }
 
+    @Test(groups = "fast")
+    public void testLogSensitiveDataWithExtraKeywords() throws Exception {
+        verifyWithExtendedPatternObfuscator("Starting purchase call: \n" +
+                                            "<gateway>\n" +
+                                            "<card>4111111111111111</card>\n" +
+                                            "<address1>790 test blvd</address1>\n" +
+                                            "<bankAccountNumber>482391823</bankAccountNumber>\n" +
+                                            "<password>supersecret</password>\n" +
+                                            "</gateway>",
+                                            "Starting purchase call: \n" +
+                                            "<gateway>\n" +
+                                            "<card>411111******1111</card>\n" +
+                                            "<address1>*************</address1>\n" +
+                                            "<bankAccountNumber>*********</bankAccountNumber>\n" +
+                                            "<password>***********</password>\n" +
+                                            "</gateway>");
+    }
+
     private void verify(final String input, final String output) {
         final ILoggingEvent event = Mockito.mock(ILoggingEvent.class);
         Mockito.when(event.getFormattedMessage()).thenReturn(input);
 
+        converter.start();
         final String obfuscated = converter.convert(event);
         Assert.assertEquals(obfuscated, output, obfuscated);
     }
+
+    private void verifyWithExtendedPatternObfuscator(final String input, final String output) {
+        final ExtendedObfuscatorConverter extendedConverter = new ExtendedObfuscatorConverter();
+        final ILoggingEvent event = Mockito.mock(ILoggingEvent.class);
+        Mockito.when(event.getFormattedMessage()).thenReturn(input);
+
+        extendedConverter.start();
+        final String obfuscated = extendedConverter.convert(event);
+        Assert.assertEquals(obfuscated, output, obfuscated);
+    }
+
+    class ExtendedObfuscatorConverter extends ObfuscatorConverter {
+        @Override
+        public void start() {
+            super.start();
+        }
+
+        @Override
+        public List<String> getOptionList() {
+            return ImmutableList.of("address1");
+        }
+    }
 }
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/server/log/obfuscators/TestPatternObfuscator.java b/profiles/killbill/src/test/java/org/killbill/billing/server/log/obfuscators/TestPatternObfuscator.java
index 934b81e..ecc3cf3 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/server/log/obfuscators/TestPatternObfuscator.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/server/log/obfuscators/TestPatternObfuscator.java
@@ -59,6 +59,29 @@ public class TestPatternObfuscator extends ServerTestSuiteNoDB {
     }
 
     @Test(groups = "fast")
+    public void testXmlWithAttributesOnTheKey() throws Exception {
+        verify("<PayerInfo xsi:type=\"ebl:PayerInfoType\">\n" +
+               "<accountnumber xsi:type=\"ebl:EmailAddressType\">michaelhk@gmail.com</accountnumber>\n" +
+               "<PayerID xsi:type=\"ebl:UserIDType\">ZZS5TS7FD7MRA</PayerID>\n" +
+               "<PayerStatus xsi:type=\"ebl:PayPalUserStatusCodeType\">verified</PayerStatus>\n" +
+               "<PayerName xsi:type=\"ebl:PersonNameType\">\n" +
+               "<Salutation xmlns=\"urn:ebay:apis:eBLBaseComponents\"></Salutation>\n" +
+               "<ccFirstName xmlns=\"urn:ebay:apis:eBLBaseComponents\">Michael</ccFirstName>\n" +
+               "<MiddleName xmlns=\"urn:ebay:apis:eBLBaseComponents\"></MiddleName>\n" +
+               "<ccLastName xmlns=\"urn:ebay:apis:eBLBaseComponents\">Henrick</ccLastName>",
+
+               "<PayerInfo xsi:type=\"ebl:PayerInfoType\">\n" +
+               "<accountnumber xsi:type=\"ebl:EmailAddressType\">*******************</accountnumber>\n" +
+               "<PayerID xsi:type=\"ebl:UserIDType\">ZZS5TS7FD7MRA</PayerID>\n" +
+               "<PayerStatus xsi:type=\"ebl:PayPalUserStatusCodeType\">verified</PayerStatus>\n" +
+               "<PayerName xsi:type=\"ebl:PersonNameType\">\n" +
+               "<Salutation xmlns=\"urn:ebay:apis:eBLBaseComponents\"></Salutation>\n" +
+               "<ccFirstName xmlns=\"urn:ebay:apis:eBLBaseComponents\">*******</ccFirstName>\n" +
+               "<MiddleName xmlns=\"urn:ebay:apis:eBLBaseComponents\"></MiddleName>\n" +
+               "<ccLastName xmlns=\"urn:ebay:apis:eBLBaseComponents\">*******</ccLastName>");
+    }
+
+    @Test(groups = "fast")
     public void testCyberSource() throws Exception {
         verify("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" +
diff --git a/profiles/killpay/src/main/resources/update-checker/killbill-server-update-list.properties b/profiles/killpay/src/main/resources/update-checker/killbill-server-update-list.properties
index c8dde49..e03035f 100644
--- a/profiles/killpay/src/main/resources/update-checker/killbill-server-update-list.properties
+++ b/profiles/killpay/src/main/resources/update-checker/killbill-server-update-list.properties
@@ -1,18 +1,155 @@
 ## Top level keys
 # general.notice = This notice should rarely, if ever, be used as everyone will see it
 
+### 0.19.x series ###
+
+# 0.19.7
+0.19.7.updates           =
+0.19.7.notices           = This is the latest dev release.
+0.19.7.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.19.7
+
+# 0.19.6
+0.19.6.updates           = 0.19.7
+0.19.6.notices           = We recommend upgrading to 0.19.7, our latest dev release.
+0.19.6.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.19.6
+
+# 0.19.5
+0.19.5.updates           = 0.19.7
+0.19.5.notices           = We recommend upgrading to 0.19.7, our latest dev release.
+0.19.5.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.19.5
+
+# 0.19.4
+0.19.4.updates           = 0.19.7
+0.19.4.notices           = We recommend upgrading to 0.19.7, our latest dev release.
+0.19.4.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.19.4
+
+# 0.19.3
+0.19.3.updates           = 0.19.7
+0.19.3.notices           = We recommend upgrading to 0.19.7, our latest dev release.
+0.19.3.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.19.3
+
+# 0.19.2
+0.19.2.updates           = 0.19.7
+0.19.2.notices           = We recommend upgrading to 0.19.7, our latest dev release.
+0.19.2.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.19.2
+
+# 0.19.1
+0.19.1.updates           = 0.19.7
+0.19.1.notices           = We recommend upgrading to 0.19.7, our latest dev release.
+0.19.1.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.19.1
+
+# 0.19.0
+0.19.0.updates           = 0.19.7
+0.19.0.notices           = We recommend upgrading to 0.19.7, our latest dev release.
+0.19.0.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.19.0
+
 ### 0.18.x series ###
 
+# 0.18.19
+0.18.19.updates           =
+0.18.19.notices           = This is the latest GA release.
+0.18.19.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.19
+
+# 0.18.18
+0.18.18.updates           = 0.18.19
+0.18.18.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.18.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.18
+
+# 0.18.17
+0.18.17.updates           = 0.18.19
+0.18.17.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.17.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.17
+
+# 0.18.16
+0.18.16.updates           = 0.18.19
+0.18.16.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.16.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.16
+
+# 0.18.15
+0.18.15.updates           = 0.18.19
+0.18.15.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.15.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.15
+
+# 0.18.14
+0.18.14.updates           = 0.18.19
+0.18.14.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.14.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.14
+
+# 0.18.13
+0.18.13.updates           = 0.18.19
+0.18.13.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.13.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.13
+
+# 0.18.12
+0.18.12.updates           = 0.18.19
+0.18.12.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.12.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.12
+
+# 0.18.11
+0.18.11.updates           = 0.18.19
+0.18.11.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.11.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.11
+
+# 0.18.10
+0.18.10.updates           = 0.18.19
+0.18.10.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.10.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.10
+
+# 0.18.9
+0.18.9.updates           = 0.18.19
+0.18.9.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.9.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.9
+
+# 0.18.8
+0.18.8.updates           = 0.18.19
+0.18.8.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.8.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.8
+
+# 0.18.7
+0.18.7.updates           = 0.18.19
+0.18.7.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.7.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.7
+
+# 0.18.6
+0.18.6.updates           = 0.18.19
+0.18.6.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.6.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.6
+
+# 0.18.5
+0.18.5.updates           = 0.18.19
+0.18.5.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.5.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.5
+
+# 0.18.4
+0.18.4.updates           = 0.18.19
+0.18.4.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.4.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.4
+
+# 0.18.3
+0.18.3.updates           = 0.18.19
+0.18.3.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.3.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.3
+
+# 0.18.2
+0.18.2.updates           = 0.18.19
+0.18.2.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.2.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.2
+
+# 0.18.1
+0.18.1.updates           = 0.18.19
+0.18.1.notices           = We recommend upgrading to 0.18.19, our latest GA release.
+0.18.1.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.1
+
 # 0.18.0
-0.18.0.updates           =
-0.18.0.notices           = This is the latest GA release.
+0.18.0.updates           = 0.18.19
+0.18.0.notices           = We recommend upgrading to 0.18.19, our latest GA release.
 0.18.0.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.18.0
 
 ### 0.17.x series ###
 
 # 0.17.8
 0.17.8.updates           =
-0.17.8.notices           = This is the latest dev release.
+0.17.8.notices           = We recommend upgrading to 0.18.19, our latest GA release.
 0.17.8.release-notes     = https://github.com/killbill/killbill/releases/tag/killbill-0.17.8
 
 # 0.17.7