You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ja...@apache.org on 2020/05/13 21:54:18 UTC

[lucene-solr] branch branch_8_5 updated: LUCENE-9033 Update ReleaseWizard for new website instructions (#1324)

This is an automated email from the ASF dual-hosted git repository.

janhoy pushed a commit to branch branch_8_5
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/branch_8_5 by this push:
     new 81dc5c2  LUCENE-9033 Update ReleaseWizard for new website instructions (#1324)
81dc5c2 is described below

commit 81dc5c241948cd7680a30f47cd586a64dfd1071f
Author: Jan Høydahl <ja...@users.noreply.github.com>
AuthorDate: Wed May 13 23:52:40 2020 +0200

    LUCENE-9033 Update ReleaseWizard for new website instructions (#1324)
    
    (cherry picked from commit 329e7c7bd5e20853ffca9815bfd916ffd6f4b448)
---
 dev-tools/scripts/releaseWizard.py   | 146 +++++---------
 dev-tools/scripts/releaseWizard.yaml | 368 +++++++++++++++--------------------
 2 files changed, 207 insertions(+), 307 deletions(-)

diff --git a/dev-tools/scripts/releaseWizard.py b/dev-tools/scripts/releaseWizard.py
index 3710616..253604c 100755
--- a/dev-tools/scripts/releaseWizard.py
+++ b/dev-tools/scripts/releaseWizard.py
@@ -68,7 +68,7 @@ from scriptutil import BranchType, Version, check_ant, download, run
 
 # Solr-to-Java version mapping
 java_versions = {6: 8, 7: 8, 8: 8, 9: 11}
-
+editor = None
 
 # Edit this to add other global jinja2 variables or filters
 def expand_jinja(text, vars=None):
@@ -83,6 +83,7 @@ def expand_jinja(text, vars=None):
         'script_branch': state.script_branch,
         'release_folder': state.get_release_folder(),
         'git_checkout_folder': state.get_git_checkout_folder(),
+        'git_website_folder': state.get_website_git_folder(),
         'dist_url_base': 'https://dist.apache.org/repos/dist/dev/lucene',
         'm2_repository_url': 'https://repository.apache.org/service/local/staging/deploy/maven2',
         'dist_file_path': state.get_dist_folder(),
@@ -107,12 +108,6 @@ def expand_jinja(text, vars=None):
         'vote_close_72h': vote_close_72h_date().strftime("%Y-%m-%d %H:00 UTC"),
         'vote_close_72h_epoch': unix_time_millis(vote_close_72h_date()),
         'vote_close_72h_holidays': vote_close_72h_holidays(),
-        'lucene_highlights_file': lucene_highlights_file,
-        'solr_highlights_file': solr_highlights_file,
-        'tlp_news_draft': tlp_news_draft,
-        'lucene_news_draft': lucene_news_draft,
-        'solr_news_draft': solr_news_draft,
-        'tlp_news_file': tlp_news_file,
         'lucene_news_file': lucene_news_file,
         'solr_news_file': solr_news_file,
         'load_lines': load_lines,
@@ -161,7 +156,19 @@ def getScriptVersion():
 
 
 def get_editor():
-    return os.environ['EDITOR'] if 'EDITOR' in os.environ else 'notepad.exe' if is_windows() else 'vi'
+    global editor
+    if editor is None:
+      if 'EDITOR' in os.environ:
+          if os.environ['EDITOR'] in ['vi', 'vim', 'nano', 'pico', 'emacs']:
+              print("WARNING: You have EDITOR set to %s, which will not work when launched from this tool. Please use an editor that launches a separate window/process" % os.environ['EDITOR'])
+          editor = os.environ['EDITOR']
+      elif is_windows():
+          editor = 'notepad.exe'
+      elif is_mac():
+          editor = 'open -a TextEdit'
+      else:
+          sys.exit("On Linux you have to set EDITOR variable to a command that will start an editor in its own window")
+    return editor
 
 
 def check_prerequisites(todo=None):
@@ -316,6 +323,13 @@ class ReleaseState:
         else:
             return None
 
+    def get_release_date_iso(self):
+        release_date = self.get_release_date()
+        if release_date is None:
+            return "yyyy-mm-dd"
+        else:
+            return release_date.isoformat()[:10]
+
     def get_latest_version(self):
         if self.latest_version is None:
             versions = self.get_mirrored_versions()
@@ -345,7 +359,7 @@ class ReleaseState:
           if Version.parse(state.release_version).major == Version.parse(state.get_latest_version()).major:
             to_keep = [self.release_version, self.get_latest_lts_version()]
           elif Version.parse(state.release_version).major == Version.parse(state.get_latest_lts_version()).major:
-            to_keep = [self.get_latest_version(), self.release_version()]
+            to_keep = [self.get_latest_version(), self.release_version]
           else:
             raise Exception("Release version %s must have same major version as current minor or lts release")
         return [ver for ver in versions if ver not in to_keep]
@@ -544,6 +558,10 @@ class ReleaseState:
         folder = os.path.join(self.get_release_folder(), "lucene-solr")
         return folder
 
+    def get_website_git_folder(self):
+        folder = os.path.join(self.get_release_folder(), "lucene-site")
+        return folder
+
     def get_minor_branch_name(self):
         latest = state.get_latest_version()
         if latest is not None:
@@ -1361,24 +1379,13 @@ def main():
     os.environ['JAVA_HOME'] = state.get_java_home()
     os.environ['JAVACMD'] = state.get_java_cmd()
 
-    global tlp_news_draft
-    global lucene_news_draft
-    global solr_news_draft
-    global lucene_highlights_file
-    global solr_highlights_file
-    global website_folder
-    global tlp_news_file
     global lucene_news_file
     global solr_news_file
-    lucene_highlights_file = os.path.join(state.get_release_folder(), 'lucene_highlights.txt')
-    solr_highlights_file = os.path.join(state.get_release_folder(), 'solr_highlights.txt')
-    tlp_news_draft = os.path.join(state.get_release_folder(), 'tlp_news.md')
-    lucene_news_draft = os.path.join(state.get_release_folder(), 'lucene_news.md')
-    solr_news_draft = os.path.join(state.get_release_folder(), 'solr_news.md')
-    website_folder = os.path.join(state.get_release_folder(), 'website-source')
-    tlp_news_file = os.path.join(website_folder, 'content', 'mainnews.mdtext')
-    lucene_news_file = os.path.join(website_folder, 'content', 'core', 'corenews.mdtext')
-    solr_news_file = os.path.join(website_folder, 'content', 'solr', 'news.mdtext')
+    lucene_news_file = os.path.join(state.get_website_git_folder(), 'content', 'core', 'core_news',
+      "%s-%s-available.md" % (state.get_release_date_iso(), state.release_version.replace(".", "-")))
+    solr_news_file = os.path.join(state.get_website_git_folder(), 'content', 'solr', 'solr_news',
+      "%s-%s-available.md" % (state.get_release_date_iso(), state.release_version.replace(".", "-")))
+    website_folder = state.get_website_git_folder()
 
     main_menu = UpdatableConsoleMenu(title="Lucene/Solr ReleaseWizard",
                             subtitle=get_releasing_text,
@@ -1571,6 +1578,11 @@ def run_follow(command, cwd=None, fh=sys.stdout, tee=False, live=False, shell=No
 def is_windows():
     return platform.system().startswith("Win")
 
+def is_mac():
+    return platform.system().startswith("Darwin")
+
+def is_linux():
+    return platform.system().startswith("Linux")
 
 class Commands(SecretYamlObject):
     yaml_tag = u'!Commands'
@@ -1933,82 +1945,24 @@ def vote_close_72h_holidays():
     return holidays if len(holidays) > 0 else None
 
 
-def website_javadoc_redirect(todo):
-    htfile = os.path.join(website_folder, 'content', '.htaccess')
-    latest = state.get_latest_version()
-    if Version.parse(state.release_version).gt(Version.parse(latest)):
-        print("We are releasing the latest version ")
-        htaccess = file_to_string(htfile)
-        print("NOT YET IMPLEMENTED")
-        return False
-    else:
-        print("Task not necessary since %s is not the latest release version" % state.release_version)
-        return True
-
-
-def prepare_highlights(todo):
-    if not os.path.exists(lucene_highlights_file):
-        with open(lucene_highlights_file, 'w') as fp:
-            fp.write("* New cool Lucene feature\n* Important bugfix")
-    if not os.path.exists(solr_highlights_file):
-        with open(solr_highlights_file, 'w') as fp:
-            fp.write("* New cool Solr feature\n* Important bugfix")
-    return True
-
-
-def prepare_announce(todo):
-    if not os.path.exists(tlp_news_draft):
-        tlp_text = expand_jinja("(( template=announce_tlp ))")
-        with open(tlp_news_draft, 'w') as fp:
-            fp.write(tlp_text)
-        # print("Wrote TLP announce draft to %s" % tlp_news_file)
-
+def prepare_announce_lucene(todo):
+    if not os.path.exists(lucene_news_file):
         lucene_text = expand_jinja("(( template=announce_lucene ))")
-        with open(lucene_news_draft, 'w') as fp:
+        with open(lucene_news_file, 'w') as fp:
             fp.write(lucene_text)
         # print("Wrote Lucene announce draft to %s" % lucene_news_file)
+    else:
+        print("Draft already exist, not re-generating")
+    return True
 
+def prepare_announce_solr(todo):
+    if not os.path.exists(solr_news_file):
         solr_text = expand_jinja("(( template=announce_solr ))")
-        with open(solr_news_draft, 'w') as fp:
+        with open(solr_news_file, 'w') as fp:
             fp.write(solr_text)
         # print("Wrote Solr announce draft to %s" % solr_news_file)
     else:
-        print("Drafts already exist, not re-generating")
-    return True
-
-
-def patch_news_file(orig, draft, sticky_lines):
-    orig_lines = open(orig).readlines()
-    draft_lines = open(draft).readlines()
-    lines = orig_lines[0:sticky_lines]
-    lines.extend(draft_lines)
-    lines.append('\n')
-    lines.append('\n')
-    lines.extend(orig_lines[sticky_lines:])
-    with open(orig, 'w') as fp:
-        fp.writelines(lines)
-    print("Added news to %s" % orig)
-
-
-def update_news(todo):
-    touch_file = os.path.join(state.get_release_folder(), 'news_updated')
-    if not os.path.exists(touch_file):
-        patch_news_file(tlp_news_file, tlp_news_draft, 2)
-        patch_news_file(lucene_news_file, lucene_news_draft, 2)
-        patch_news_file(solr_news_file, solr_news_draft, 4)
-
-        latest = state.get_latest_version()
-        if Version.parse(state.release_version).gt(Version.parse(latest)):
-            print("We are releasing the latest version, updating latestversion.mdtext")
-            with open(os.path.join(website_folder, 'content', 'latestversion.mdtext'), 'w') as fp:
-                fp.write(state.release_version)
-
-        with open(touch_file, 'w') as fp:
-            fp.write("true")
-        print("News files in website folder updated with draft announcements")
-    else:
-        print("News files not changed, already patched earlier. Please edit by hand")
-
+        print("Draft already exist, not re-generating")
     return True
 
 
@@ -2017,12 +1971,12 @@ def set_java_home(version):
     os.environ['JAVACMD'] = state.get_java_cmd_for_version(version)
 
 
-def load_lines(file):
+def load_lines(file, from_line=0):
     if os.path.exists(file):
         with open(file, 'r') as fp:
-            return fp.readlines()
+            return fp.readlines()[from_line:]
     else:
-        return ['* foo', '* bar']
+        return ["<Please paste the announcement text here>\n"]
 
 
 if __name__ == '__main__':
diff --git a/dev-tools/scripts/releaseWizard.yaml b/dev-tools/scripts/releaseWizard.yaml
index 0311b1f..b2e864a 100644
--- a/dev-tools/scripts/releaseWizard.yaml
+++ b/dev-tools/scripts/releaseWizard.yaml
@@ -85,28 +85,11 @@ templates:
     This vote has {% if passed %}PASSED{% else %}FAILED{% endif %} 
     ----
     {%- endmacro %}
-  announce_tlp: |
-    ## {{ release_date | formatdate | default('<date>') }}, Apache Lucene {{ release_version }} and Apache Solr {{ release_version }} available
-
-    The Lucene PMC is pleased to announce the release of Apache® Lucene™ {{ release_version }} and Apache® Solr™ {{ release_version }}.
-
-    Lucene can be downloaded from <https://lucene.apache.org/core/downloads.html>
-    and Solr can be downloaded from <https://lucene.apache.org/solr/downloads.html>
-
-    ### Highlights of this Lucene release include:
-    
-    {% for line in load_lines(lucene_highlights_file) %}
-      {{ line }}
-    {%- endfor %}
-
-
-    ### Highlights of this Solr release include:
-
-    {% for line in load_lines(solr_highlights_file) %}
-      {{ line }}
-    {%- endfor %}
   announce_lucene: |
-    ## {{ release_date | formatdate | default('<date>') }}, Apache Lucene™ {{ release_version }} available
+    Title: Apache Lucene™ {{ release_version }} available
+    category: core/news
+    URL:
+    save_as:
 
     The Lucene PMC is pleased to announce the release of Apache Lucene {{ release_version }}.
 
@@ -118,16 +101,16 @@ templates:
 
     ### Lucene {{ release_version }} Release Highlights:
 
-    {% for line in load_lines(lucene_highlights_file) %}
-      {{ line }}
-    {%- endfor %}
-
+     * Feature 1 pasted from WIKI release notes
+     * Feature 2 ...
 
     Please read CHANGES.txt for a full list of {% if is_feature_release %}new features and {% endif %}changes:
 
       <https://lucene.apache.org/core/{{ release_version_underscore }}/changes/Changes.html>
   announce_solr: |
-    ## {{ release_date | formatdate | default('<date>') }}, Apache Solr™ {{ release_version }} available
+    Title: Apache Solr™ {{ release_version }} available
+    category: solr/news
+    save_as:
 
     The Lucene PMC is pleased to announce the release of Apache Solr {{ release_version }}.
 
@@ -139,10 +122,8 @@ templates:
 
     ### Solr {{ release_version }} Release Highlights:
 
-    {% for line in load_lines(solr_highlights_file) %}
-      {{ line }}
-    {%- endfor %}
-
+     * Feature 1 pasted from WIKI release notes
+     * Feature 2 ...
 
     Please read CHANGES.txt for a full list of {% if is_feature_release %}new features and {% endif %}changes:
 
@@ -176,7 +157,7 @@ templates:
     (( template=announce_lucene_mail_body ))
     ----
   announce_lucene_mail_body: |
-    {% for line in load_lines(lucene_news_draft) -%}
+    {% for line in load_lines(lucene_news_file, 5) -%}
     {{ line }}
     {%- endfor %}
 
@@ -210,7 +191,7 @@ templates:
     (( template=announce_solr_mail_body ))
     ----
   announce_solr_mail_body: |
-    {% for line in load_lines(solr_news_draft) -%}
+    {% for line in load_lines(solr_news_file, 4) -%}
     {{ line }}
     {%- endfor %}
 
@@ -622,16 +603,18 @@ groups:
     id: draft_release_notes
     title: Get a draft of the release notes in place
     description: |-
-      These are typically edited on the Wiki.
+      These are typically edited on the Wiki
 
       Clone a page for a previous version as a starting point for your release notes.
       You will need two pages, one for Lucene and another for Solr, see links.
       Edit the contents of `CHANGES.txt` into a more concise format for public consumption.
       Ask on dev@ for input. Ideally the timing of this request mostly coincides with the
       release branch creation. It's a good idea to remind the devs of this later in the release too.
+
+      NOTE: Do not add every single JIRA issue, but distill the Release note into important changes!
     links:
-    - https://wiki.apache.org/lucene-java/ReleaseNote77
-    - https://wiki.apache.org/solr/ReleaseNote77
+    - https://cwiki.apache.org/confluence/display/LUCENE/Release+Notes
+    - https://cwiki.apache.org/confluence/display/SOLR/Release+Notes
   - !Todo
     id: new_jira_versions
     title: Add a new version in JIRA for the next release
@@ -1034,46 +1017,12 @@ groups:
   id: website
   title: Update the website
   description: |
-    For every release we publish docs on the website, we need to update the
-    download pages etc.
+    For every release, we publish docs on the website, we need to update the
+    download pages etc. The website is hosted in https://github.com/apache/lucene-site
+    but the Javadocs and Solr Reference Guide are pushed to SVN and then included
+    in the main site through links.
   todos:
   - !Todo
-    id: website_expaths
-    title: Update extpaths.txt
-    description: |
-      The file extpaths.txt lists paths in the svn production tree, relative to the project website's root directory, 
-      that are allowed to be out of sync with the staging tree. We need to update this in order to push generated
-      javadocs directly to production SVN and thus avoid breaking the CMS staging capability.
-    links:
-    - http://www.apache.org/dev/cmsref
-    - http://www.apache.org/dev/cmsref#extpaths
-    - http://www.apache.org/dev/cmsref#generated-docs
-    commands: !Commands
-      root_folder: '{{ release_folder }}'
-      confirm_each_command: true
-      commands:
-      - !Command
-        cmd: svn co https://svn.apache.org/repos/asf/lucene/cms/trunk  website-source
-        logfile: svn-checkout-website.log
-        tee: true
-      - !Command
-        cmd: echo core/{{ release_version_underscore }}
-        cwd: website-source/content
-        redirect: extpaths.txt
-        redirect_append: true
-        comment: Add Lucene javadocs dir to extpaths
-      - !Command
-        cmd: echo solr/{{ release_version_underscore }}
-        cwd: website-source/content
-        redirect: extpaths.txt
-        redirect_append: true
-        comment: Add Solr javadocs dir to extpaths
-      - !Command
-        cmd: svn commit -m "Update CMS production sync exceptions for {{ release_version_underscore }} javadocs" extpaths.txt
-        cwd: website-source/content
-        logfile: svn_commit_website.log
-        tee: true
-  - !Todo
     id: website_docs
     title: Publish docs, changes and javadocs
     description: |
@@ -1088,7 +1037,7 @@ groups:
       version: "{{ release_version_major }}_{{ release_version_minor }}_{{ release_version_bugfix }}"
     commands: !Commands
       root_folder: '{{ git_checkout_folder }}'
-      commands_text: Check out the CMS content folder
+      commands_text: Build the documentation and add it to SVN production tree
       commands:
       - !Command
         cmd: git fetch && git checkout {{ release_tag }}
@@ -1107,132 +1056,100 @@ groups:
         logfile: add-docs-solr.log
         comment: Add docs for Solr
   - !Todo
-    id: website_javadoc_redirect
-    title: Update redirect to latest Javadoc
-    depends: website_expaths
-    vars:
-      release_tag: releases/lucene-solr/{{ release_version }}
-      version: "{{ release_version_major }}_{{ release_version_minor }}_{{ release_version_bugfix }}"
-    description: |
-      We make it possible to link to latest javadoc by providing redirect links for e.g. 
-      http://lucene.apache.org/solr/api/solr-core/ which will auto redirect to whatever 
-      is the latest released version, i.e. http://lucene.apache.org/solr/{{ version }}/solr-core/<version>.
-      This is handled in `.htaccess`
-
-      *NOT YET IMPLEMENTED*
-    function: website_javadoc_redirect
-    asciidoc: |
-      We make it possible to link to latest javadoc by providing redirect links for e.g. 
-      http://lucene.apache.org/solr/api/solr-core/ which will auto redirect to whatever 
-      is the latest released version, i.e. http://lucene.apache.org/solr/{{ version }}/solr-core/<version>.
-
-      If we are releasing the latest version, this task will offer to patch the `.htaccess`
-      file with latest redirect info and commit this file back to website svn.
-    post_description: After the task is done, please test that the links below redirect to the correct version
-    links:
-    - http://lucene.apache.org/solr/api/solr-core/
-    - http://lucene.apache.org/core/api/core/
-  - !Todo
-    id: prepare_highlights
-    title: Edit the release highlights for Lucene and Solr
-    description: |
-      You will edit the release highlights for Lucene and Solr.
-      This will be done in two separate files, one highlight per line,
-      each line starting with a '*'.
-    function: prepare_highlights
+    id: website_git_clone
+    title: Do a clean git clone of the website repo
+    description: This is where we'll commit later updates for the website.
     commands: !Commands
       root_folder: '{{ release_folder }}'
-      commands_text: |
-        Edit the highlights files, one highlight per line.
-        You have to exit the editor after edit to continue.
+      commands_text: Run this command to clone the website git repo
+      remove_files:
+        - '{{ git_website_folder }}'
       commands:
-      - !Command
-        cmd: "{{ editor }} {{ lucene_highlights_file }}"
-        comment: Edit the Lucene highlights      
-      - !Command
-        cmd: "{{ editor }} {{ solr_highlights_file }}"
-        comment: Edit the Solr highlights      
+        - !Command
+          cmd: git clone --progress https://gitbox.apache.org/repos/asf/lucene-site.git lucene-site
+          logfile: website_git_clone.log
   - !Todo
-    id: prepare_announce
-    title: Edit the drafts for the website news
+    id: website_update_versions
+    title: Update website versions
+    depends: website_git_clone
+    vars:
+      release_tag: releases/lucene-solr/{{ release_version }}
     description: |
-      Edit draft news texts for the TLP site and for Lucene and Solr sites.
-      These texts will also be used as a starting point for the release email later.
-    function: prepare_announce
+      We need to update the website so that the download pages list the new release, and the
+      "latest" javadoc links point to the new release.
+
+      Fortunately the only thing you need to change is a few variables in `pelicanconf.py`.
+      If you release a current latest release, change the `LUCENE_LATEST_RELEASE` and `LUCENE_LATEST_RELEASE_DATE`
+      variables.
+      If you relese a bugfix release for previos version, then change the `LUCENE_PREVIOUS_MAJOR_RELEASE` variable.
     commands: !Commands
-      root_folder: '{{ release_folder }}'
-      commands_text: |
-        Proof read the draft announcements and edit as you see fit.
-        You have to exit the editor after edit to continue.
+      root_folder: '{{ git_website_folder }}'
+      commands_text: Edit pelicanconf.py to update version numbers
       commands:
-      - !Command
-        cmd: "{{ editor }} {{ tlp_news_draft }}"
-        comment: Edit the draft for TLP news announcement
-      - !Command
-        cmd: "{{ editor }} {{ lucene_news_draft }}"
-        comment: Edit the draft for Lucene announcement
-      - !Command
-        cmd: "{{ editor }} {{ solr_news_draft }}"
-        comment: Edit the draft for Solr announcement
+        - !Command
+          cmd: "{{ editor }} pelicanconf.py"
+          comment: Edit the pelicanconf.file
+          stdout: true
+        - !Command
+          cmd: git commit -am "Update version variables for release {{ release_version }}"
+          logfile: commit.log
+          stdout: true
+    post_description: |
+      You will push and verify all changes in a later step
   - !Todo
-    id: update_news
-    title: Publish news to the web site
-    depends: prepare_announce
+    id: prepare_announce_lucene
+    title: Author the Lucene release news
+    depends: website_git_clone
     description: |
-      Update the news sections of the TLP, Lucene and Solr sites
-    vars:
-      website_source: "{{ [release_folder, 'website-source'] | path_join }}"
-    function: update_news
+      Edit a news text for the Lucene website. This text will be the basis for the release announcement email later.
+      This step will open an editor with a template. You will need to copy/paste the final release announcement text
+      from the Wiki page and format it as Markdown.
+    function: prepare_announce_lucene
     commands: !Commands
-      root_folder: '{{ website_source }}'
+      root_folder: '{{ git_website_folder }}'
       commands_text: |
-        Add news to the site. We'll first add the {{ release_version }} text to the file, 
-        then ask you to edit the file to verify the end result. You will now only edit
-        the files, we'll commit all changes in a later step.
-
+        Copy the Lucene announcement from https://cwiki.apache.org/confluence/display/LUCENE/Release+Notes
         You have to exit the editor after edit to continue.
       commands:
       - !Command
-        cmd: "{{ editor }} {{ tlp_news_file }}"
-        comment: Edit the complete website file for TLP news
-      - !Command
         cmd: "{{ editor }} {{ lucene_news_file }}"
-        comment: Edit the complete website file for Lucene news
+        comment: Edit the for Lucene announcement news
+        stdout: true
       - !Command
-        cmd: "{{ editor }} {{ solr_news_file }}"
-        comment: Edit the complete website file for Solr news
+        cmd: git add . && git commit -m "Adding Lucene news for release {{ release_version }}"
+        logfile: commit.log
+        stdout: true
     post_description: |
-      You will review and commit all changes later
+      You will push and verify all changes in a later step
   - !Todo
-    id: update_download_page
-    title: Update the download pages
-    depends: prepare_announce
+    id: prepare_announce_solr
+    title: Author the Solr release news
+    depends: website_git_clone
     description: |
-      Update the download pages
-    vars:
-      website_source: "{{ [release_folder, 'website-source'] | path_join }}"
+      Edit a news text for the Solr website. This text will be the basis for the release announcement email later.
+      This step will open an editor with a template. You will need to copy/paste the final release announcement text
+      from the Wiki page and format it as Markdown.
+    function: prepare_announce_solr
     commands: !Commands
-      root_folder: '{{ website_source }}'
+      root_folder: '{{ git_website_folder }}'
       commands_text: |
-        Update download pages to point to the latest release.
+        Copy the Solr announcement from https://cwiki.apache.org/confluence/display/SOLR/Release+Notes
         You have to exit the editor after edit to continue.
       commands:
-      - !Command
-        cmd: "{{ editor }} content/solr/downloads.mdtext"
-        comment: Edit the Solr downloads page
-        stdout: true
-      - !Command
-        cmd: "{{ editor }} content/core/downloads.mdtext"
-        comment: Edit the Lucene downloads page
-        stdout: true
+        - !Command
+          cmd: "{{ editor }} {{ solr_news_file }}"
+          comment: Edit the Solr announcement news
+          stdout: true
+        - !Command
+          cmd: git add . && git commit -m "Adding Solr news for release {{ release_version }}"
+          logfile: commit.log
+          stdout: true
     post_description: |
-      You will review and commit all changes later
-    links:
-    - https://www.apache.org/dev/release-download-pages.html
+      You will push and verify all changes in a later step
   - !Todo
     id: update_other
     title: Update rest of webpage
-    depends: prepare_announce
+    depends: website_update_versions
     description: |
       Update the rest of the web page. Please review all files in the checkout
       and consider if any need change based on what changes there are in the
@@ -1240,65 +1157,95 @@ groups:
 
       * System requirements
       * Quickstart and tutorial?
-    vars:
-      website_source: "{{ [release_folder, 'website-source'] | path_join }}"
     commands: !Commands
-      root_folder: '{{ website_source }}'
+      root_folder: '{{ git_website_folder }}'
       commands_text: |
         We'll open an editor on the root folder of the site checkout
         You have to exit the editor after edit to continue.
       commands:
-      - !Command
-        cmd: "{{ editor }} ."
-        comment: Open an editor on the root folder
-        stdout: true
+        - !Command
+          cmd: "{{ editor }} ."
+          comment: Open an editor on the root folder
+          stdout: true
+        - !Command
+          cmd: git commit -am "Other website changes for release {{ release_version }}"
+          comment: Commit the other changes
+          logfile: commit.log
+          stdout: true
   - !Todo
-    id: publish_website
-    title: Publish the website changes
+    id: stage_website
+    title: Stage the website changes
     depends:
-    - update_news
-    - update_download_page
+    - prepare_announce_solr
     description: |
-      Publish the website changes
-    vars:
-      website_source: "{{ [release_folder, 'website-source'] | path_join }}"
+      Push the website changes to 'master' branch, and check the staging site.
+      You will get a chance to preview the diff of all changes before you push.
+      If you need to do changes, do the changes (e.g. by re-running previous step 'Update rest of webpage')
+      and commit your changes. Then re-run this step and push when everything is OK.
     commands: !Commands
-      root_folder: '{{ website_source }}'
+      root_folder: '{{ git_website_folder }}'
       commands_text: |
         Verify that changes look good, and then publish.
         You have to exit the editor after review to continue.
       commands:
       - !Command
-        cmd: svn st
+        cmd: git checkout master && git status
         stdout: true
       - !Command
-        cmd: svn diff
+        cmd: git diff
         redirect: "{{ [release_folder, 'website.diff'] | path_join }}"
         comment: Make a diff of all edits. Will open in next step
       - !Command
         cmd: "{{ editor }} {{ [release_folder, 'website.diff'] | path_join }}"
-        comment: View the diff of the website changes
+        comment: View the diff of the website changes. Abort if you need to do changes.
         stdout: true
       - !Command
-        cmd: svn commit -m "Update website for {{ release_version }} release"
-        comment: Commit changes if all looks good
-        logfile: commit-website.log
+        cmd: git push origin
+        comment: Push all changes
+        logfile: push-website.log
+    post_description: |
+      Wait a few minutes for the build to happen. You can follow the site build at https://ci2.apache.org/#/builders/3
+      and view the staged site at https://lucene.staged.apache.org
+      Verify that correct links and versions are mentioned in download pages, download buttons etc.
+      If you find anything wrong, then commit and push any changes and check again.
+
+      Next step is to merge the changes to branch 'production' in order to publish the site.
+    links:
+    - https://ci2.apache.org/#/builders/3
+    - https://lucene.staged.apache.org
+  - !Todo
+    id: publish_website
+    title: Publish the website changes
+    depends:
+      - stage_website
+    description: |
+      Push the website changes to 'production' branch. This will build and publish the live site on
+      https://lucene.apache.org
+    commands: !Commands
+      root_folder: '{{ git_website_folder }}'
+      commands:
+        - !Command
+          cmd: git checkout production && git pull
+          stdout: true
+        - !Command
+          cmd: git merge master
+          stdout: true
+        - !Command
+          cmd: git push origin
+          comment: Push all changes to production branch
+          logfile: push-website.log
     post_description: |
-      * Go to https://ci.apache.org/builders/lucene-site-staging and see that site is built
-      * Open http://lucene.staging.apache.org and see that everything looks fine
-      * Publish the site at https://cms.apache.org/lucene/publish
-
-      Wait for these changes to appear on both of Apache's main webservers 
-      (US: http://lucene.us.apache.org, EU: http://lucene.eu.apache.org, http://lucene.apache.org 
-      is dependent on your own geographic location, so the other mirror may still be outdated) 
-      before doing the next steps (see http://www.apache.org/dev/project-site.html for details on 
-      how the site is mirrored to Apache's main web servers). Once they appear, verify all links 
-      are correct in your changes!
+      Wait a few minutes for the build to happen. You can follow the site build at https://ci2.apache.org/#/builders/3
+
+      Verify on https://lucene.apache.org that the site is OK.
+
+      You can now also verify that http://lucene.apache.org/solr/api/solr-core/ and http://lucene.apache.org/core/api/core/
+      redirects to the latest version
     links:
-    - https://ci.apache.org/builders/lucene-site-staging
-    - http://lucene.staging.apache.org
-    - https://svn.apache.org/repos/asf/lucene/cms/trunk/
-    - https://cms.apache.org/lucene/publish
+      - https://ci2.apache.org/#/builders/3
+      - https://lucene.apache.org
+      - http://lucene.apache.org/solr/api/solr-core/
+      - http://lucene.apache.org/core/api/core/
   - !Todo
     id: update_doap
     title: Update the DOAP files
@@ -1338,9 +1285,8 @@ groups:
     For feature releases, your announcement should describe the main features included 
     in the release. *Send the announce as Plain-text email, not HTML.*
 
-    NOTE: Copy-pasting from the release notes might sometimes make cause it to be sent
-          as HTML formatted, which can break at the mailing list bot.
-          Better to copy-paste the raw/edit text.
+    This step will generate email templates based on the news files you edited earler for the website.
+    Do any last-minute necessary edits to the text as you copy it over to the email.
   todos:
   - !Todo
     id: announce_lucene