diff --git a/scripts/packages/convert_changelog.py b/scripts/packages/convert_changelog.py
index 78edbda..07ed9d4 100644
--- a/scripts/packages/convert_changelog.py
+++ b/scripts/packages/convert_changelog.py
@@ -18,28 +18,39 @@
 import sys
 
 
-def main(input_file, output_file):
+def main(input_file, changelog_file, output_file):
   changelog_out = open(output_file, "w")
-  time_stamp = None
-  with open(input_file, "r") as changelog_in:
-    for line in changelog_in:
+  changelog = None
+  version = None
+  with open(input_file, "r") as status_file:
+    for line in status_file:
       line = line.strip()
 
-      if line.startswith("```") or line.startswith("Baseline"):
-        continue
+      if line.startswith("RELEASE_NOTES"):
+        changelog = line[14:].strip().replace("\f", "\n")
+      elif line.startswith("RELEASE_NAME"):
+        version = line[13:].strip()
 
-      if line.startswith("## Release"):
-        if time_stamp:
-          changelog_out.write(
-              "\n -- The Bazel Authors <bazel-dev@googlegroups.com>  %s\n\n" %
-              time_stamp)
-        parts = line.split(" ")
-        version = parts[2]
-        time_stamp = datetime.strptime(
-            parts[3], "(%Y-%m-%d)").strftime("%a, %d %b %Y %H:%M:%S +0100")
-        changelog_out.write("bazel (%s) unstable; urgency=low\n" % version)
+  if changelog:
+    time_stamp = None
+    lines = changelog.split("\n")
+    header = lines[0]
+    lines = lines[4:]  # Skip the header
+    if lines[0] == "Cherry picks:":
+      # Skip cherry picks list
+      i = 1
+      while lines[i].strip():
+        i += 1
+      lines = lines[i + 1:]
 
-      elif line.startswith("+") or line.startswith("-"):
+    # Process header
+    parts = header.split(" ")
+    time_stamp = datetime.strptime(
+        parts[2], "(%Y-%m-%d)").strftime("%a, %d %b %Y %H:%M:%S +0100")
+    changelog_out.write("bazel (%s) unstable; urgency=low\n" % version)
+
+    for line in lines:
+      if line.startswith("+") or line.startswith("-"):
         parts = line.split(" ")
         line = "*" + line[1:]
         changelog_out.write("  %s\n" % line)
@@ -54,7 +65,24 @@
       changelog_out.write(
           "\n -- The Bazel Authors <bazel-dev@googlegroups.com>  %s\n\n" %
           time_stamp)
-
+  else:
+    # Develeopment version, generate a changelog from the change log file
+    with open(changelog_file, "r") as changelog_in:
+      for line in changelog_in:
+        line = line.strip()
+        if line.startswith("## Release"):
+          parts = line.split(" ")
+          version = parts[2]
+          time_stamp = datetime.strptime(
+              parts[3], "(%Y-%m-%d)").strftime("%a, %d %b %Y %H:%M:%S +0100")
+          changelog_out.write("bazel (%s~HEAD) unstable; urgency=low\n" %
+                              version)
+          changelog_out.write("    Development version\n")
+          changelog_out.write(
+              "\n -- The Bazel Authors <bazel-dev@googlegroups.com>  %s\n\n" %
+              time_stamp)
+          # Stop after parsing latest release
+          return
 
 if __name__ == "__main__":
-  main(sys.argv[1], sys.argv[2])
+  main(sys.argv[1], sys.argv[2], sys.argv[3])
