"Fossies" - the Fresh Open Source Software Archive

Member "solr-8.4.1/dev-tools/scripts/releaseWizard.yaml" (10 Jan 2020, 77185 Bytes) of package /linux/www/solr-8.4.1-src.tgz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Ansible YAML source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file. See also the latest Fossies "Diffs" side-by-side code changes report for "releaseWizard.yaml": 8.4.0_vs_8.4.1.

    1 #
    2 # Licensed to the Apache Software Foundation (ASF) under one or more
    3 # contributor license agreements.  See the NOTICE file distributed with
    4 # this work for additional information regarding copyright ownership.
    5 # The ASF licenses this file to You under the Apache License, Version 2.0
    6 # (the "License"); you may not use this file except in compliance with
    7 # the License.  You may obtain a copy of the License at
    8 #
    9 #     http://www.apache.org/licenses/LICENSE-2.0
   10 #
   11 # Unless required by applicable law or agreed to in writing, software
   12 # distributed under the License is distributed on an "AS IS" BASIS,
   13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   14 # See the License for the specific language governing permissions and
   15 # limitations under the License.
   16 #
   17 
   18 # =====================================================================
   19 # This file contains the definition TODO steps and commands to run for the
   20 # releaseWizard.py script. It also contains Jinja2 templates for use in those
   21 # definitions. See documentation for "groups" below the templates.
   22 # Edit this file with an editor with YAML support, such as Sublime Text
   23 # for syntax highlighting and context sensitive tag suggestion
   24 # =====================================================================
   25 #
   26 # Templates may be included in any text by starting a line with this syntax:
   27 # (( template=my_template_name ))
   28 # Templates may contain other templates for easy re-use of snippets
   29 # And of course all Jinja2 syntax for inclusion of variables etc is supported.
   30 # See http://jinja.pocoo.org/docs/2.10/templates/ for details
   31 # To add new global variables or functions/filters, edit releaseWizard.py
   32 #
   33 templates:
   34   help: |
   35     Welcome to the role as Release Manager for Lucene/Solr, and the releaseWizard!
   36 
   37     The Release Wizard aims to walk you through the whole release process step by step,
   38     helping you to to run the right commands in the right order, generating
   39     e-mail templates for you with the correct texts, versions, paths etc, obeying
   40     the voting rules and much more. It also serves as a documentation of all the
   41     steps, with timestamps, preserving log files from each command etc.
   42 
   43     As you complete each step the tool will ask you if the task is complete, making
   44     it easy for you to know what is done and what is left to do. If you need to
   45     re-spin a Release Candidata (RC) the Wizard will also help.
   46 
   47     The Lucene project has automated much of the release process with various scripts,
   48     and this wizard is the glue that binds it all together.
   49 
   50     In the first TODO step in the checklist you will be asked to read up on the
   51     Apache release policy and other relevant documents before you start the release.
   52 
   53     NOTE: Even if we have great tooling and some degree of automation, there are
   54           still many manual steps and it is also important that the RM validates
   55           and QAs the process, validating that the right commands are run, and that
   56           the output from scripts are correct before proceeding.
   57 
   58     DISCLAIMER: This is an alpha version. The wizard may be buggy and may generate
   59                 faulty commands, commands that won't work on your OS or with all
   60                 versions of tooling etc. So please keep the old ReleaseTODO handy
   61                 for cross-checking for now :)
   62   vote_logic: |
   63     {% set passed = plus_binding >= 3 and minus < plus_binding %}
   64     {% set too_few = plus_binding < 3 %}
   65     {% set veto = plus_binding < minus %}
   66     {% set reason = 'too few binding votes' if too_few else 'too many negative votes' if veto else 'unknown' %}    
   67   vote_macro: |
   68     {% macro end_vote_result(plus_binding, plus_other, zero, minus) -%}
   69     (( template=vote_logic ))
   70     .Mail template {% if passed %}successful{% else %}failed{% endif %} vote
   71     ----
   72     To: dev@lucene.apache.org
   73     Subject: [{% if passed %}RESULT{% else %}FAILED{% endif %}] [VOTE] Release Lucene/Solr {{ release_version }} RC{{ rc_number }}
   74 
   75     It's been >72h since the vote was initiated and the result is:
   76 
   77     +1  {{ plus_binding + plus_other }}  ({{ plus_binding }} binding)
   78      0  {{ zero }}
   79     -1  {{ minus }}
   80 
   81     {% if not passed %}
   82     Reason for fail is {{ reason }}.
   83     
   84     {% endif %}
   85     This vote has {% if passed %}PASSED{% else %}FAILED{% endif %} 
   86     ----
   87     {%- endmacro %}
   88   announce_tlp: |
   89     ## {{ release_date | formatdate | default('<date>') }}, Apache Lucene {{ release_version }} and Apache Solr {{ release_version }} available
   90 
   91     The Lucene PMC is pleased to announce the release of Apache® Lucene™ {{ release_version }} and Apache® Solr™ {{ release_version }}.
   92 
   93     Lucene can be downloaded from <https://lucene.apache.org/core/downloads.html>
   94     and Solr can be downloaded from <https://lucene.apache.org/solr/downloads.html>
   95 
   96     ### Highlights of this Lucene release include:
   97     
   98     {% for line in load_lines(lucene_highlights_file) %}
   99       {{ line }}
  100     {%- endfor %}
  101 
  102 
  103     ### Highlights of this Solr release include:
  104 
  105     {% for line in load_lines(solr_highlights_file) %}
  106       {{ line }}
  107     {%- endfor %}
  108   announce_lucene: |
  109     ## {{ release_date | formatdate | default('<date>') }}, Apache Lucene™ {{ release_version }} available
  110 
  111     The Lucene PMC is pleased to announce the release of Apache Lucene {{ release_version }}.
  112 
  113     Apache Lucene is a high-performance, full-featured text search engine library written entirely in Java. It is a technology suitable for nearly any application that requires full-text search, especially cross-platform.
  114 
  115     This release contains numerous bug fixes, optimizations, and improvements, some of which are highlighted below. The release is available for immediate download at:
  116 
  117       <https://lucene.apache.org/core/downloads.html>
  118 
  119     ### Lucene {{ release_version }} Release Highlights:
  120 
  121     {% for line in load_lines(lucene_highlights_file) %}
  122       {{ line }}
  123     {%- endfor %}
  124 
  125 
  126     Please read CHANGES.txt for a full list of {% if is_feature_release %}new features and {% endif %}changes:
  127 
  128       <https://lucene.apache.org/core/{{ release_version_underscore }}/changes/Changes.html>
  129   announce_solr: |
  130     ## {{ release_date | formatdate | default('<date>') }}, Apache Solr™ {{ release_version }} available
  131 
  132     The Lucene PMC is pleased to announce the release of Apache Solr {{ release_version }}.
  133 
  134     Solr is the popular, blazing fast, open source NoSQL search platform from the Apache Lucene project. Its major features include powerful full-text search, hit highlighting, faceted search, dynamic clustering, database integration, rich document handling, and geospatial search. Solr is highly scalable, providing fault tolerant distributed search and indexing, and powers the search and navigation features of many of the world's largest internet sites.
  135 
  136     Solr {{ release_version }} is available for immediate download at:
  137 
  138       <https://lucene.apache.org/solr/downloads.html>
  139 
  140     ### Solr {{ release_version }} Release Highlights:
  141 
  142     {% for line in load_lines(solr_highlights_file) %}
  143       {{ line }}
  144     {%- endfor %}
  145 
  146 
  147     Please read CHANGES.txt for a full list of {% if is_feature_release %}new features and {% endif %}changes:
  148 
  149       <https://lucene.apache.org/solr/{{ release_version_underscore }}/changes/Changes.html>
  150 
  151     Solr {{ release_version }} also includes {% if is_feature_release %}features, optimizations {% endif %} and bugfixes in the corresponding Apache Lucene release:
  152 
  153       <https://lucene.apache.org/core/{{ release_version_underscore }}/changes/Changes.html>
  154   announce_lucene_mail: |
  155     The template below can be used to announce the Lucene release to the
  156     internal mailing lists.
  157 
  158     .Mail template
  159     ----
  160     To: dev@lucene.apache.org, general@lucene.apache.org, java-user@lucene.apache.org
  161     Subject: [ANNOUNCE] Apache Lucene {{ release_version }} released
  162 
  163     (( template=announce_lucene_mail_body ))
  164     ----
  165   announce_lucene_sign_mail: |
  166     The template below can be used to announce the Lucene release to the
  167     `announce@apache.org` mailing list. The mail *should be signed with PGP.*
  168     and sent *from your `@apache.org` account*.    
  169 
  170     .Mail template
  171     ----
  172     From: {{ gpg.apache_id }}@apache.org
  173     To: announce@apache.org
  174     Subject: [ANNOUNCE] Apache Lucene {{ release_version }} released
  175 
  176     (( template=announce_lucene_mail_body ))
  177     ----
  178   announce_lucene_mail_body: |
  179     {% for line in load_lines(lucene_news_draft) -%}
  180     {{ line }}
  181     {%- endfor %}
  182 
  183 
  184     Note: The Apache Software Foundation uses an extensive mirroring network for
  185     distributing releases. It is possible that the mirror you are using may not have
  186     replicated the release yet. If that is the case, please try another mirror.
  187     This also applies to Maven access.
  188   announce_solr_mail: |
  189     The template below can be used to announce the Solr release to the
  190     internal mailing lists.
  191 
  192     .Mail template
  193     ----
  194     To: dev@lucene.apache.org, general@lucene.apache.org, solr-user@lucene.apache.org
  195     Subject: [ANNOUNCE] Apache Solr {{ release_version }} released
  196 
  197     (( template=announce_solr_mail_body ))
  198     ----
  199   announce_solr_sign_mail: |
  200     The template below can be used to announce the Solr release to the
  201     `announce@apache.org` mailing list. The mail *should be signed with PGP.*
  202     and sent *from your `@apache.org` account*.
  203 
  204     .Mail template
  205     ----
  206     From: {{ gpg.apache_id }}@apache.org
  207     To: announce@apache.org
  208     Subject: [ANNOUNCE] Apache Solr {{ release_version }} released
  209 
  210     (( template=announce_solr_mail_body ))
  211     ----
  212   announce_solr_mail_body: |
  213     {% for line in load_lines(solr_news_draft) -%}
  214     {{ line }}
  215     {%- endfor %}
  216 
  217 
  218     Note: The Apache Software Foundation uses an extensive mirroring network for
  219     distributing releases. It is possible that the mirror you are using may not have
  220     replicated the release yet. If that is the case, please try another mirror.
  221     This also applies to Maven access.
  222 # TODOs belong to groups for easy navigation in menus. Todo objects may contain asciidoc
  223 # descriptions, a number of commands to execute, some links to display, user input to gather
  224 # etc. Here is the documentation of each type of object. For further details, please consult
  225 # the corresponding Python object in releaseWizard.py, as these are parsed 1:1 from yaml.
  226 #
  227 # - !TodoGroup
  228 #   id: unique_id
  229 #   title: Title which will appear in menu
  230 #   description: Longer description that will appear in sub-menu
  231 #   depends: ['group1_id', 'group2_id'] # Explicit dependencies for groups
  232 #   is_in_rc_loop: Tells that a group is thrown away on RC re-psin (default=False)
  233 #   todos:    # Array of !Todo objects beloning to the group
  234 #     !Todo
  235 #     id: todo_id
  236 #     title: Short title that will appear in menu and elsewhere
  237 #     description: |
  238 #         The main description being printed when selecing the todo item. Here
  239 #         you should introduce the task in more detail. You can use {{ jinja_var }} to
  240 #         reference variables. See `releaseWizard.py` for list of global vars supported.
  241 #         You can reference state saved from earlier TODO items using syntax
  242 #           {{ todi_id.var_name }}
  243 #         with `var_name` being either fetched from user_input or persist_vars
  244 #     depends:  # One or more dependencies which will bar execution
  245 #     - todo_id1
  246 #     - todo_id2
  247 #     vars:  # Dictionary of jinja2 variables local to this TODO, e.g.
  248 #       logfile_path: "{{ [rc_folder, 'logs'] | path_join }}"
  249 #       # Vars can contain global jinja vars or local vars earlier defined (ordered dict)
  250 #     persist_vars: ['var_name', 'var_name'] # List of variables to persist in TODO state
  251 #     asciidoc: |
  252 #         Some `asciidoc` text to be included in asciidoc guide 
  253 #         *instead of* description/post_description
  254 #     function: my_python_function  # Will call the named function for complex tasks
  255 #     commands: !Commands   # A !Commands object holding commands to execute for this todo
  256 #       root_folder: '{{ git_checkout_folder }}' # path to where commands will run
  257 #       commands_text: Introduction text to be displayed just before the commands 
  258 #       enable_execute: true # Set to false to never offer to run commands automatically
  259 #       confirm_each_command: true # Set to false to run all commands without prompting
  260 #       remove_files: ['file1', 'folder2'] # List of files or folders that must be gone
  261 #       logs_prefix: prefix # Lets you prefix logs file names with this string
  262 #       commands:   # List of !Commands to execute
  263 #       - !Command  # One single command
  264 #         cmd: "ls {{ folder_to_ls }}"  # A single command. May reference jinja vars
  265 #              # Double spaces in a cmd will trigger multi-line display with continuation char \
  266 #         cwd: relative_path # Where to run command, relative to root_folder
  267 #         comment: # Will display a # or REM comment above the command in printouts
  268 #         vars: {} # Possible to define local vars for this command only
  269 #         logfile: my.og # Overrides log file name which may grow very long :)
  270 #         tee: false       # If true, sends output to console and file
  271 #         stdout: false    # if true, sends output only to console, not log file
  272 #         live: false      # If true, sends output live byte-by-byte to console
  273 #         redirect: file.txt      # Send output to file. Use instead of >
  274 #         redirect_append: false  # Will cause output to be appended, like >>
  275 #         shell: false     $ Set to true to use built-in shell commands
  276 #     user_input: # An array of !UserInput objects for requesting input from user
  277 #     - !UserInput
  278 #       prompt: Please enter your gpg key ID, e.g. 0D8D0B93
  279 #       name: gpg_id  # This will be stored in todo state and can be referenced as {{ todo_id.name }}
  280 #       type: int  # if no type is given, a string is stored. Supported types are 'int'
  281 #     post_description: |
  282 #       Some `asciidoc` text (with jinja template support) 
  283 #       to be printed *after* commands and user_input is done.
  284 #     links:
  285 #     - http://example.com/list/of/links?to&be&displayed
  286 groups:
  287 - !TodoGroup
  288   id: prerequisites
  289   title: Prerequisites
  290   description: |
  291     Releasing software requires thorough understanding of the process and careful execution,
  292     as it is easy to make mistakes. It also requires an environtment and tools such as gpg
  293     correctly setup. This section makes sure you're in good shape for the job!
  294   todos:
  295   - !Todo
  296     id: read_up
  297     title: Read up on the release process
  298     description: |-
  299       As a Release Manager (RM) you should be familiar with Apache's release policy,
  300       voting rules, create a PGP/GPG key for use with signing and more. Please familiarise
  301       yourself with the resources listed below.
  302     links:
  303     - http://www.apache.org/dev/release-publishing.html
  304     - http://www.apache.org/legal/release-policy.html
  305     - http://www.apache.org/dev/release-signing.html
  306     - https://wiki.apache.org/lucene-java/ReleaseTodo
  307   - !Todo
  308     id: tools
  309     title: Necessary tools are installed
  310     description: |
  311       You will need these tools:
  312 
  313       * Python v3.4 or later, with dependencies listed in requirements.txt
  314       * Java 8 in $JAVA8_HOME and Java 11 in $JAVA11_HOME
  315       * Apache Ant 1.8 or later. (Known issue with 1.10 and GPG password entry)
  316       * gpg
  317       * git
  318       * svn
  319       * asciidoctor (to generate HTML version)
  320 
  321       You should also set the $EDITOR environment variable, else we'll fallback to
  322       `vi` on Linux and `notepad.exe` on Windows, and you don't want that :)
  323     function: check_prerequisites
  324     links:
  325     - https://gnupg.org/download/index.html
  326     - https://asciidoctor.org
  327   - !Todo
  328     id: gpg
  329     title: GPG key id is configured
  330     description: |-
  331       To sign the release you need to provide your GPG key ID. This must be
  332       the same key ID that you have registered in your Apache account.
  333       The ID is the last 8 bytes of your key fingerprint, e.g. 0D8D0B93.
  334 
  335       * Make sure your gpg key is 4096 bits key or larger
  336       * Upload your key to the MIT key server, pgp.mit.edu
  337       * Put you GPG key's fingerprint in the `OpenPGP Public Key Primary Fingerprint`
  338         field in your id.apache.org profile
  339       * The tests will complain if your GPG key has not been signed by another Lucene
  340         committer. This makes you a part of the GPG "web of trust" (WoT). Ask a committer
  341         that you know personally to sign your key for you, providing them with the
  342         fingerprint for the key.
  343     function: configure_pgp
  344     links:
  345     - http://www.apache.org/dev/release-signing.html
  346     - http://www.apache.org/dev/openpgp.html#apache-wot
  347     - https://id.apache.org
  348     - https://dist.apache.org/repos/dist/release/lucene/KEYS
  349 - !TodoGroup
  350   id: preparation
  351   title: Prepare for the release
  352   description: Work with the community to decide when the release will happen and what work must be completed before it can happen
  353   todos:
  354   - !Todo
  355     id: decide_jira_issues
  356     title: Select JIRA issues to be included
  357     description: Set the appropriate "Fix Version" in JIRA for the issues that should be included in the release.
  358   - !Todo
  359     id: decide_branch_date
  360     title: Decide the date for branching
  361     types:
  362     - major
  363     - minor
  364     user_input: !UserInput
  365       prompt: Enter date (YYYY-MM-DD)
  366       name: branch_date
  367   - !Todo
  368     id: decide_freeze_length
  369     title: Decide the lenght of feature freeze
  370     types:
  371     - major
  372     - minor
  373     user_input: !UserInput
  374       prompt: Enter end date of feature freeze (YYYY-MM-DD)
  375       name: feature_freeze_date
  376 - !TodoGroup
  377   id: branching_versions
  378   title: Create branch (if needed) and update versions
  379   description: Here you'll do all the branching and version updates needed to prepare for the new release version
  380   todos:
  381   - !Todo
  382     id: clean_git_checkout
  383     title: Do a clean git clone to do the release from.
  384     description: This eliminates the risk of a dirty checkout
  385     commands: !Commands
  386       root_folder: '{{ release_folder }}'
  387       commands_text: Run these commands to make a fresh clone in the release folder
  388       remove_files:
  389       - '{{ git_checkout_folder }}'
  390       commands:
  391       - !Command
  392         cmd: git clone --progress https://gitbox.apache.org/repos/asf/lucene-solr.git lucene-solr
  393         logfile: git_clone.log
  394   - !Todo
  395     id: ant_precommit
  396     title: Run ant precommit and fix issues
  397     depends: clean_git_checkout
  398     commands: !Commands
  399       root_folder: '{{ git_checkout_folder }}'
  400       commands_text: |-
  401         From the base branch {{ base_branch }} we'll run precommit tests.
  402         Fix any problems that are found by pushing fixes to the branch
  403         and then running this task again. This task will always do `git pull`
  404         before `ant precommit` so it will catch changes to your branch :)
  405       confirm_each_command: false
  406       commands:
  407       - !Command
  408         cmd: git checkout {{ base_branch }}
  409         stdout: true
  410       - !Command
  411         cmd: git clean -df && git checkout -- .
  412         comment: Make sure checkout is clean and up to date
  413         logfile: git_clean.log
  414         tee: true
  415       - !Command
  416         cmd: git pull
  417         stdout: true
  418       - !Command
  419         cmd: ant clean precommit
  420   - !Todo
  421     id: create_stable_branch
  422     title: Create a new stable branch, off from master
  423     description: In our case we'll create {{ stable_branch }}
  424     types:
  425     - major
  426     depends: clean_git_checkout
  427     commands: !Commands
  428       root_folder: '{{ git_checkout_folder }}'
  429       commands_text: Run these commands to create a stable branch
  430       commands:
  431       - !Command
  432         cmd: git checkout master
  433         tee: true
  434       - !Command
  435         cmd: git update
  436         tee: true
  437       - !Command
  438         cmd: git ls-remote --exit-code --heads origin {{ stable_branch }}
  439         stdout: true
  440         should_fail: true
  441         comment: We expect error code 2 since {{ stable_branch }} does not already exist
  442       - !Command
  443         cmd: git checkout -b {{ stable_branch }}
  444         tee: true
  445       - !Command
  446         cmd: git push origin {{ stable_branch }}
  447         tee: true
  448   - !Todo
  449     id: create_minor_branch
  450     title: Create a new minor branch off the stable branch
  451     description: In our case we'll create {{ release_branch }}
  452     types:
  453     - major
  454     - minor
  455     depends: clean_git_checkout
  456     commands: !Commands
  457       root_folder: '{{ git_checkout_folder }}'
  458       commands_text: Run these commands to create a release branch
  459       commands:
  460       - !Command
  461         cmd: git checkout {{ stable_branch }}
  462         tee: true
  463       - !Command
  464         cmd: git update
  465         tee: true
  466       - !Command
  467         cmd: git ls-remote --exit-code --heads origin {{ release_branch }}
  468         stdout: true
  469         should_fail: true
  470         comment: This command should fail with exit code 2 to verify branch {{ release_branch }} does not already exist
  471       - !Command
  472         cmd: git checkout -b {{ release_branch }}
  473         tee: true
  474       - !Command
  475         cmd: git push origin {{ release_branch }}
  476         tee: true
  477   - !Todo
  478     id: add_version_major
  479     title: Add a new major version on master branch
  480     types:
  481     - major
  482     depends: clean_git_checkout
  483     vars:
  484       next_version: "{{ release_version_major + 1 }}.0.0"
  485     commands: !Commands
  486       root_folder: '{{ git_checkout_folder }}'
  487       commands_text: Run these commands to add the new major version {{ next_version }} to the master branch
  488       commands:
  489       - !Command
  490         cmd: git checkout master
  491         tee: true
  492       - !Command
  493         cmd: python3 -u dev-tools/scripts/addVersion.py {{ next_version }}
  494         tee: true
  495       - !Command
  496         comment: Make sure the edits done by `addVersion.py` are ok, then push
  497         cmd: git add -u .  && git commit -m "Add next major version {{ next_version }}"  && git push
  498         logfile: commit-stable.log
  499     post_description: |
  500       Make sure to follow the manual instructions printed by the script:
  501 
  502       * Move backcompat oldIndexes to unsupportedIndexes in TestBackwardsCompatibility
  503       * Update IndexFormatTooOldException throw cases
  504 
  505       There may be other steps needed as well
  506   - !Todo
  507     id: add_version_minor
  508     title: Add a new minor version on stable branch
  509     types:
  510     - major
  511     - minor
  512     depends: clean_git_checkout
  513     vars:
  514       next_version: "{{ release_version_major }}.{{ release_version_minor + 1 }}.0"
  515     commands: !Commands
  516       root_folder: '{{ git_checkout_folder }}'
  517       commands_text: Run these commands to add the new minor version {{ next_version }} to the stable branch
  518       commands:
  519       - !Command
  520         cmd: git checkout {{ stable_branch }}
  521         tee: true
  522       - !Command
  523         cmd: python3 -u dev-tools/scripts/addVersion.py {{ next_version }}
  524         tee: true
  525       - !Command
  526         comment: Make sure the edits done by `addVersion.py` are ok, then push
  527         cmd: git add -u .  && git commit -m "Add next minor version {{ next_version }}"  && git push
  528         logfile: commit-stable.log
  529   - !Todo
  530     id: sanity_check_doap
  531     title: Sanity check the DOAP files
  532     description: |-
  533       Sanity check the DOAP files under `dev-tools/doap/`.
  534       Do they contain all releases less than the one in progress?
  535 
  536       TIP: The buildAndPushRelease script run later will check this automatically
  537     links:
  538     - https://projects.apache.org/doap.html
  539   - !Todo
  540     id: jenkins_builds
  541     title: Add Jenkins task for the release branch
  542     description: '...so that builds run for the new branch. Consult the JenkinsReleaseBuilds page.'
  543     types:
  544     - major
  545     - minor
  546     links:
  547     - https://wiki.apache.org/lucene-java/JenkinsReleaseBuilds
  548   - !Todo
  549     id: inform_devs
  550     title: Inform Devs of the new Release Branch
  551     description: |-
  552       Send a note to dev@ to inform the committers that the branch
  553       has been created and the feature freeze phase has started.
  554 
  555       This is an e-mail template you can use as a basis for
  556       announcing the new branch and feature freeze.
  557 
  558       .Mail template
  559       ----
  560       To: dev@lucene.apache.org
  561       Subject: New branch and feature freeze for Lucene/Solr {{ release_version }}
  562 
  563       NOTICE:
  564 
  565       Branch {{ release_branch }} has been cut and versions updated to {{ release_version_major }}.{{ release_version_minor + 1 }} on stable branch.
  566 
  567       Please observe the normal rules:
  568 
  569       * No new features may be committed to the branch.
  570       * Documentation patches, build patches and serious bug fixes may be
  571         committed to the branch. However, you should submit all patches you
  572         want to commit to Jira first to give others the chance to review
  573         and possibly vote against the patch. Keep in mind that it is our
  574         main intention to keep the branch as stable as possible.
  575       * All patches that are intended for the branch should first be committed
  576         to the unstable branch, merged into the stable branch, and then into
  577         the current release branch.
  578       * Normal unstable and stable branch development may continue as usual.
  579         However, if you plan to commit a big change to the unstable branch
  580         while the branch feature freeze is in effect, think twice: can't the
  581         addition wait a couple more days? Merges of bug fixes into the branch
  582         may become more difficult.
  583       * Only Jira issues with Fix version {{ release_version_major }}.{{ release_version_minor }} and priority "Blocker" will delay
  584         a release candidate build.
  585       ----
  586     types:
  587     - major
  588     - minor
  589   - !Todo
  590     id: inform_devs_bugfix
  591     title: Inform Devs about the planned release
  592     description: |-
  593       Send a note to dev@ to inform the committers about the rules for committing to the branch.
  594 
  595       This is an e-mail template you can use as a basis for
  596       announcing the rules for committing to the release branch
  597 
  598       .Mail template
  599       ----
  600       To: dev@lucene.apache.org
  601       Subject: Bugfix release Lucene/Solr {{ release_version }}
  602 
  603       NOTICE:
  604 
  605       I am now preparing for a bugfix release from branch {{ release_branch }}
  606 
  607       Please observe the normal rules for committing to this branch:
  608 
  609       * Before committing to the branch, reply to this thread and argue
  610         why the fix needs backporting and how long it will take.
  611       * All issues accepted for backporting should be marked with {{ release_version }}
  612         in JIRA, and issues that should delay the release must be marked as Blocker
  613       * All patches that are intended for the branch should first be committed
  614         to the unstable branch, merged into the stable branch, and then into
  615         the current release branch.
  616       * Only Jira issues with Fix version {{ release_version }} and priority "Blocker" will delay
  617         a release candidate build.
  618       ----
  619     types:
  620     - bugfix
  621   - !Todo
  622     id: draft_release_notes
  623     title: Get a draft of the release notes in place
  624     description: |-
  625       These are typically edited on the Wiki.
  626 
  627       Clone a page for a previous version as a starting point for your release notes.
  628       You will need two pages, one for Lucene and another for Solr, see links.
  629       Edit the contents of `CHANGES.txt` into a more concise format for public consumption.
  630       Ask on dev@ for input. Ideally the timing of this request mostly coincides with the
  631       release branch creation. It's a good idea to remind the devs of this later in the release too.
  632     links:
  633     - https://wiki.apache.org/lucene-java/ReleaseNote77
  634     - https://wiki.apache.org/solr/ReleaseNote77
  635   - !Todo
  636     id: new_jira_versions
  637     title: Add a new version in JIRA for the next release
  638     description: |-
  639       Go to the JIRA "Manage Versions" Administration pages and add the new version:
  640 
  641       {% if release_type == 'major' -%}
  642       . Change name of version `master ({{ release_version_major }}.0)` into `{{ release_version_major }}.0`
  643       {%- endif %}
  644       . Create a new (unreleased) version `{{ get_next_version }}`
  645 
  646       This needs to be done both for Lucene and Solr JIRAs, see links.
  647     types:
  648     - major
  649     - minor
  650     links:
  651     - https://issues.apache.org/jira/plugins/servlet/project-config/LUCENE/versions
  652     - https://issues.apache.org/jira/plugins/servlet/project-config/SOLR/versions
  653 - !TodoGroup
  654   id: artifacts
  655   title: Build the release artifacts
  656   description: |-
  657     If after the last day of the feature freeze phase no blocking issues are
  658     in JIRA with "Fix Version" {{ release_version }}, then it's time to build the
  659     release artifacts, run the smoke tester and stage the RC in svn
  660   depends:
  661   - test
  662   - prerequisites
  663   is_in_rc_loop: true
  664   todos:
  665   - !Todo
  666     id: run_tests
  667     title: Run javadoc tests
  668     depends: clean_git_checkout
  669     commands: !Commands
  670       root_folder: '{{ git_checkout_folder }}'
  671       commands_text: Run some tests not ran by `buildAndPublishRelease.py`
  672       confirm_each_command: false
  673       commands:
  674       - !Command
  675         cmd: git checkout {{ release_branch }}
  676         stdout: true
  677       - !Command
  678         cmd: ant javadocs
  679         cwd: lucene
  680       - !Command
  681         cmd: ant javadocs
  682         cwd: solr
  683     post_description: Check that both tests pass. If they fail, commit fixes for the failures before proceeding.
  684   - !Todo
  685     id: clear_ivy_cache
  686     title: Clear the ivy cache
  687     description: |
  688         It is recommended to clean your Ivy cache before building the artifacts.
  689         This ensures that all Ivy dependencies are freshly downloaded,
  690         so we emulate a user that never used the Lucene build system before.
  691     commands: !Commands
  692       root_folder: '{{ home }}'
  693       remove_files: .ivy2/cache_bak
  694       commands_text: These commands will help you rename the folder so you can get it back later if you wish
  695       commands:
  696       - !Command
  697         cmd: "{{ rename_cmd }} cache cache_bak"
  698         cwd: .ivy2
  699         stdout: true
  700   - !Todo
  701     id: build_rc
  702     title: Build the release candidate
  703     depends: 
  704     - gpg
  705     - run_tests
  706     vars:
  707       logfile: '{{ [rc_folder, ''logs'', ''buildAndPushRelease.log''] | path_join }}'
  708       git_rev: '{{ current_git_rev }}' # Note, git_rev will be recorded in todo state AFTER completion of commands
  709       local_keys: '{% if keys_downloaded %} --local-keys "{{ [config_path, ''KEYS''] | path_join }}"{% endif %}'      
  710     persist_vars:
  711     - git_rev
  712     commands: !Commands
  713       root_folder: '{{ git_checkout_folder }}'
  714       commands_text: |-
  715         In this step we will build the RC using python script `buildAndPushRelease.py`
  716         We have tried to compile the correct command below, and you can choose whether
  717         to let this script kick it off or execute them in another Terminal window yourself
  718 
  719         Note that the build will take a long time. To follow the detailed build
  720         log, you can tail the log file {{ logfile | default("<logfile>") }}.
  721       confirm_each_command: false
  722       remove_files: 
  723       - '{{ dist_file_path }}'
  724       commands:
  725       - !Command
  726         cmd: git checkout {{ release_branch }}
  727         tee: true
  728       - !Command
  729         cmd: git clean -df && git checkout -- .
  730         comment: Make sure checkout is clean and up to date
  731         logfile: git_clean.log
  732         tee: true
  733       - !Command
  734         cmd: git pull
  735         tee: true
  736       - !Command
  737         cmd: python3 -u dev-tools/scripts/buildAndPushRelease.py {{ local_keys }}  --logfile {{ logfile }}  --push-local "{{ dist_file_path }}"  --rc-num {{ rc_number }}  --sign {{ gpg.gpg_id | default("<gpg_key_id>", True) }}
  738         comment: "NOTE: Remember to type your GPG pass-phrase at the prompt!"
  739         logfile: build_rc.log
  740         tee: true
  741   - !Todo
  742     id: smoke_tester
  743     title: Run the smoke tester
  744     depends: build_rc
  745     vars:
  746       dist_folder: lucene-solr-{{ release_version }}-RC{{ rc_number }}-rev{{ build_rc.git_rev | default("<git_rev>", True) }}
  747       dist_path: '{{ [dist_file_path, dist_folder] | path_join }}'
  748       tmp_dir: '{{ [rc_folder, ''smoketest''] | path_join }}'
  749       local_keys: '{% if keys_downloaded %} --local-keys "{{ [config_path, ''KEYS''] | path_join }}"{% endif %}'
  750     commands: !Commands
  751       root_folder: '{{ git_checkout_folder }}'
  752       commands_text: Here we'll smoke test the release by 'downloading' the artifacts, running the tests, validating GPG signatures etc.
  753       remove_files:
  754       - '{{ tmp_dir }}'
  755       commands:
  756       - !Command
  757         cmd: python3 -u dev-tools/scripts/smokeTestRelease.py {{ local_keys }}  --tmp-dir "{{ tmp_dir }}"  file://{{ dist_path | expanduser }}
  758         logfile: smoketest.log
  759   - !Todo
  760     id: import_svn
  761     title: Import artifacts into SVN
  762     description: |
  763       Here we'll import the artifacts into Subversion.
  764     depends: smoke_tester
  765     vars:
  766       dist_folder: lucene-solr-{{ release_version }}-RC{{ rc_number }}-rev{{ build_rc.git_rev | default("<git_rev>", True) }}
  767       dist_path: '{{ [dist_file_path, dist_folder] | path_join }}'
  768       dist_url: https://dist.apache.org/repos/dist/dev/lucene/{{ dist_folder}}
  769     commands: !Commands
  770       root_folder: '{{ git_checkout_folder }}'
  771       commands_text: Have your Apache credentials handy, you'll be prompted for your password
  772       commands:
  773       - !Command
  774         cmd: svn -m "Lucene/Solr {{ release_version }} RC{{ rc_number }}" import  {{ dist_path }}  {{ dist_url }}
  775         logfile: import_svn.log
  776         tee: true
  777   - !Todo
  778     id: verify_staged
  779     title: Verify staged artifacts
  780     description: |
  781       A lightweight smoke testing which downloads the artifacts from stage 
  782       area and checks hash and signatures, but does not re-run all tests.
  783     depends: import_svn
  784     vars:
  785       dist_folder: lucene-solr-{{ release_version }}-RC{{ rc_number }}-rev{{ build_rc.git_rev | default("<git_rev>", True) }}
  786       dist_url: https://dist.apache.org/repos/dist/dev/lucene/{{ dist_folder}}
  787       tmp_dir: '{{ [rc_folder, ''smoketest_staged''] | path_join }}'
  788       local_keys: '{% if keys_downloaded %} --local-keys "{{ [config_path, ''KEYS''] | path_join }}"{% endif %}'
  789     commands: !Commands
  790       root_folder: '{{ git_checkout_folder }}'
  791       commands_text: Here we'll verify that the staged artifacts are downloadable and hash/signatures match.
  792       remove_files:
  793       - '{{ tmp_dir }}'
  794       commands:
  795       - !Command
  796         cmd: python3 -u dev-tools/scripts/smokeTestRelease.py {{ local_keys }}  --download-only  --tmp-dir "{{ tmp_dir }}"  {{ dist_url }}
  797         logfile: smoketest_staged.log
  798 - !TodoGroup
  799   id: voting
  800   title: Hold the vote and sum up the results
  801   description: These are the steps necessary for the voting process. Read up on the link first!
  802   is_in_rc_loop: true
  803   todos:
  804   - !Todo
  805     id: initiate_vote
  806     title: Initiate the vote
  807     depends: verify_staged
  808     description: |
  809       If the smoke test passes against the staged artifacts, send an email to the dev mailing list announcing the release candidate.
  810 
  811       .Mail template
  812       ----
  813       To: dev@lucene.apache.org
  814       Subject: [VOTE] Release Lucene/Solr {{ release_version }} RC{{ rc_number }}
  815 
  816       Please vote for release candidate {{ rc_number }} for Lucene/Solr {{ release_version }}
  817 
  818       The artifacts can be downloaded from:
  819       https://dist.apache.org/repos/dist/dev/lucene/lucene-solr-{{ release_version }}-RC{{ rc_number }}-rev{{ build_rc.git_rev | default("<git_rev>", True) }}
  820 
  821       You can run the smoke tester directly with this command:
  822 
  823       python3 -u dev-tools/scripts/smokeTestRelease.py \
  824       https://dist.apache.org/repos/dist/dev/lucene/lucene-solr-{{ release_version }}-RC{{ rc_number }}-rev{{ build_rc.git_rev | default("<git_rev>", True) }}
  825 
  826       The vote will be open for at least 72 hours i.e. until {{ vote_close }}.
  827 
  828       [ ] +1  approve
  829       [ ] +0  no opinion
  830       [ ] -1  disapprove (and reason why)
  831 
  832       Here is my +1
  833       ----
  834 
  835       {% if vote_close_72h_holidays %}
  836       [IMPORTANT]
  837       ====
  838       The voting period contains one or more holidays. Please consider extending the vote deadline.
  839 
  840       {% for holiday in vote_close_72h_holidays %}* {{ holiday }}
  841       {% endfor %}
  842       ====
  843       {%- endif %}
  844     vars:
  845       vote_close: '{{ vote_close_72h }}'
  846       vote_close_epoch: '{{ vote_close_72h_epoch }}'
  847     persist_vars:
  848     - vote_close
  849     - vote_close_epoch
  850     function: create_ical
  851     links:
  852     - https://www.apache.org/foundation/voting.html
  853   - !Todo
  854     id: end_vote
  855     title: End vote
  856     depends: initiate_vote
  857     description: |
  858       At the end of the voting deadline, count the votes and send RESULT message to the mailing list.
  859 
  860       {% set vote_close_epoch = initiate_vote.vote_close_epoch | int %}
  861       {% if epoch < vote_close_epoch %}
  862       WARNING: The planned voting deadline {{ initiate_vote.vote_close }} has not yet passed
  863       {% else %}
  864       The planned 72h voting deadline {{ initiate_vote.vote_close }} has passed.
  865       {% endif %}
  866     asciidoc: |
  867       (( template=vote_macro ))
  868       Note down how many votes were cast, summing as:
  869 
  870       * Binding PMC-member +1 votes
  871       * Non-binding +1 votes
  872       * Neutral +/-0 votes
  873       * Negative -1 votes
  874 
  875       You need 3 binding +1 votes and more +1 than -1 votes for the release to happen.
  876       A release cannot be vetoed, see more in provided links.
  877 
  878       Here are some mail templates for successful and failed vote results with sample numbers:
  879 
  880       {{ end_vote_result(3,1,0,2) }}
  881 
  882       {{ end_vote_result(3,1,0,4) }}
  883 
  884       {{ end_vote_result(2,9,0,0) }}
  885     user_input:
  886     - !UserInput
  887       type: int
  888       prompt: Number of binding +1 votes (PMC members)
  889       name: plus_binding
  890     - !UserInput
  891       type: int
  892       prompt: Number of other +1 votes
  893       name: plus_other
  894     - !UserInput
  895       type: int
  896       prompt: Number of 0 votes
  897       name: zero
  898     - !UserInput
  899       type: int
  900       prompt: Number of -1 votes
  901       name: minus
  902     post_description: |
  903         (( template=vote_logic ))
  904         (( template=vote_macro ))
  905         {% if passed -%}
  906         Congratulations! The vote has passed.
  907 
  908         {% if minus > 0 %}
  909         However, there were negative votes. A release cannot be vetoed, and as long as
  910         there are more positive than negative votes you can techically release
  911         the software. However, please review the negative votes and consider
  912         a re-spin.
  913         
  914         {% endif %}
  915         {%- endif %}
  916         {{ end_vote_result(plus_binding,plus_other,zero,minus) }}
  917     links:
  918     - https://www.apache.org/foundation/voting.html
  919 - !TodoGroup
  920   id: publish
  921   title: Publishing to the ASF Mirrors
  922   description: Once the vote has passed, the release may be published to the ASF Mirrors and to Maven Central.
  923   todos:
  924   - !Todo
  925     id: tag_release
  926     title: Tag the release
  927     description: Tag the release from the same revision from which the passing release candidate's was built
  928     commands: !Commands
  929       root_folder: '{{ git_checkout_folder }}'
  930       commands_text: This will tag the release in git
  931       logs_prefix: tag_release
  932       commands:
  933       - !Command
  934         cmd: git tag -a releases/lucene-solr/{{ release_version }}  -m "Lucene/Solr {{ release_version }} release"  {{ build_rc.git_rev | default("<git_rev>", True) }}
  935         logfile: git_tag.log
  936         tee: true
  937       - !Command
  938         cmd: git push origin releases/lucene-solr/{{ release_version }}
  939         logfile: git_push_tag.log
  940         tee: true
  941   - !Todo
  942     id: rm_staged_mvn
  943     title: Delete mvn artifacts from staging repo
  944     vars:
  945       dist_folder: lucene-solr-{{ release_version }}-RC{{ rc_number }}-rev{{ build_rc.git_rev | default("<git_rev>", True) }}
  946       dist_path: '{{ [dist_file_path, dist_folder] | path_join }}'
  947       dist_stage_url: https://dist.apache.org/repos/dist/dev/lucene/{{ dist_folder}}
  948     commands: !Commands
  949       root_folder: '{{ git_checkout_folder }}'
  950       confirm_each_command: false
  951       commands_text: This will remove maven artifacts so they do not end up in the mirrors
  952       commands:
  953       - !Command
  954         cmd: svn rm -m "Delete the lucene maven artifacts"  {{ dist_stage_url }}/lucene/maven
  955         logfile: svn_rm_mvn_lucene.log
  956         tee: true
  957       - !Command
  958         cmd: svn rm -m "Delete the solr maven artifacts"  {{ dist_stage_url }}/solr/maven
  959         logfile: svn_rm_mvn_solr.log
  960         tee: true
  961   - !Todo
  962     id: mv_to_release
  963     title: Move release artifacts to release repo
  964     vars:
  965       dist_folder: lucene-solr-{{ release_version }}-RC{{ rc_number }}-rev{{ build_rc.git_rev | default("<git_rev>", True) }}
  966       dist_stage_url: https://dist.apache.org/repos/dist/dev/lucene/{{ dist_folder}}
  967       dist_release_url: https://dist.apache.org/repos/dist/release/lucene
  968     commands: !Commands
  969       root_folder: '{{ git_checkout_folder }}'
  970       confirm_each_command: false
  971       commands_text: This will move the new release artifacts from staging repo to the release repo
  972       commands:
  973       - !Command
  974         cmd: svn move -m "Move Lucene {{ release_version }} RC{{ rc_number }} to release repo"  {{ dist_stage_url }}/lucene  {{ dist_release_url }}/java/{{ release_version }}
  975         logfile: svn_mv_lucene.log
  976         tee: true
  977       - !Command
  978         cmd: svn move -m "Move Solr {{ release_version }} RC{{ rc_number }} to release repo"  {{ dist_stage_url }}/solr  {{ dist_release_url }}/solr/{{ release_version }}
  979         logfile: svn_mv_solr.log
  980         tee: true
  981       - !Command
  982         cmd: svn rm -m "Clean up the RC folder for {{ release_version }} RC{{ rc_number }}"  https://dist.apache.org/repos/dist/dev/lucene/lucene-solr-{{ release_version }}-RC{{ rc_number }}-rev{{ build_rc.git_rev | default("<git_rev>", True) }}
  983         logfile: svn_rm_containing.log
  984         comment: Clean up containing folder on the staging repo
  985         tee: true
  986     post_description: 'Note at this point you will see the Jenkins job "Lucene-Solr-SmokeRelease-master" begin to fail, until you run the "Generate Backcompat Indexes" '
  987   - !Todo
  988     id: publish_maven
  989     title: Publish maven artifacts
  990     vars:
  991       dist_folder: lucene-solr-{{ release_version }}-RC{{ rc_number }}-rev{{ build_rc.git_rev | default("<git_rev>", True) }}
  992     commands: !Commands
  993       root_folder: '{{ git_checkout_folder }}'
  994       confirm_each_command: true
  995       commands_text: In the source checkout do the following (note that this step will prompt you for your Apache LDAP credentials)
  996       commands:
  997       - !Command
  998         cmd: ant clean stage-maven-artifacts  -Dmaven.dist.dir={{ [dist_file_path, dist_folder, 'lucene', 'maven'] | path_join }}  -Dm2.repository.id=apache.releases.https  -Dm2.repository.url={{ m2_repository_url }}
  999         logfile: publish_lucene_maven.log
 1000       - !Command
 1001         cmd: ant clean stage-maven-artifacts  -Dmaven.dist.dir={{ [dist_file_path, dist_folder, 'solr', 'maven'] | path_join }}  -Dm2.repository.id=apache.releases.https  -Dm2.repository.url={{ m2_repository_url }}
 1002         logfile: publish_solr_maven.log
 1003     post_description: |
 1004       Once you have transferred all maven artifacts to repository.apache.org,
 1005       you will need to:
 1006 
 1007       * Close the staging repository
 1008       . Log in to https://repository.apache.org/ with your ASF credentials
 1009       . Select "Staging Repositories" under "Build Promotion" from the navigation bar on the left
 1010       . Select the staging repository containing the Lucene artifacts
 1011       . Click on the "Close" button above the repository list, then enter a description when prompted, e.g. "Lucene/Solr {{ release_version }} RC{{ rc_number }}"
 1012       * The system will not spend some time validating the artifacts. Grab a coke and come back.
 1013       * Release the Lucene and/or Solr artifacts
 1014       . Wait and keep clicking refresh until the "Release" button becomes available
 1015       . Click on the "Release" button above the repository list, then enter a description when prompted, e.g. "Lucene/Solr {{ release_version }}".
 1016 
 1017       Maven central should show the release after a short while, but you need to
 1018       wait 24 hours to give the Apache mirrors a chance to copy the new release.
 1019     links:
 1020     - https://wiki.apache.org/lucene-java/PublishMavenArtifacts
 1021     - https://repository.apache.org/index.html
 1022   - !Todo
 1023     id: check_mirroring
 1024     title: Check state of mirroring so far
 1025     description: Mark this as complete once a good spread is confirmed
 1026     commands: !Commands
 1027       root_folder: '{{ git_checkout_folder }}'
 1028       commands_text: Run this script to check the number and percentage of mirrors (and Maven Central) that have the release
 1029       commands:
 1030       - !Command
 1031         cmd: python3 -u dev-tools/scripts/poll-mirrors.py -version {{ release_version }} -o
 1032         live: true
 1033 - !TodoGroup
 1034   id: website
 1035   title: Update the website
 1036   description: |
 1037     For every release we publish docs on the website, we need to update the
 1038     download pages etc.
 1039   todos:
 1040   - !Todo
 1041     id: website_expaths
 1042     title: Update extpaths.txt
 1043     description: |
 1044       The file extpaths.txt lists paths in the svn production tree, relative to the project website's root directory, 
 1045       that are allowed to be out of sync with the staging tree. We need to update this in order to push generated
 1046       javadocs directly to production SVN and thus avoid breaking the CMS staging capability.
 1047     links:
 1048     - http://www.apache.org/dev/cmsref
 1049     - http://www.apache.org/dev/cmsref#extpaths
 1050     - http://www.apache.org/dev/cmsref#generated-docs
 1051     commands: !Commands
 1052       root_folder: '{{ release_folder }}'
 1053       confirm_each_command: true
 1054       commands:
 1055       - !Command
 1056         cmd: svn co https://svn.apache.org/repos/asf/lucene/cms/trunk  website-source
 1057         logfile: svn-checkout-website.log
 1058         tee: true
 1059       - !Command
 1060         cmd: echo core/{{ release_version_underscore }}
 1061         cwd: website-source/content
 1062         redirect: extpaths.txt
 1063         redirect_append: true
 1064         comment: Add Lucene javadocs dir to extpaths
 1065       - !Command
 1066         cmd: echo solr/{{ release_version_underscore }}
 1067         cwd: website-source/content
 1068         redirect: extpaths.txt
 1069         redirect_append: true
 1070         comment: Add Solr javadocs dir to extpaths
 1071       - !Command
 1072         cmd: svn commit -m "Update CMS production sync exceptions for {{ release_version_underscore }} javadocs" extpaths.txt
 1073         cwd: website-source/content
 1074         logfile: svn_commit_website.log
 1075         tee: true
 1076   - !Todo
 1077     id: website_docs
 1078     title: Publish docs, changes and javadocs
 1079     description: |
 1080       Ensure your refridgerator has at least 2 beers - the svn import operation can take a while, 
 1081       depending on your upload bandwidth. We'll publish this directly to the production tree.
 1082       At the end of the task, the two links below shall work.
 1083     links:
 1084     - http://lucene.apache.org/core/{{ version }}
 1085     - http://lucene.apache.org/solr/{{ version }}
 1086     vars:
 1087       release_tag: releases/lucene-solr/{{ release_version }}
 1088       version: "{{ release_version_major }}_{{ release_version_minor }}_{{ release_version_bugfix }}"
 1089     commands: !Commands
 1090       root_folder: '{{ git_checkout_folder }}'
 1091       commands_text: Check out the CMS content folder
 1092       commands:
 1093       - !Command
 1094         cmd: git fetch && git checkout {{ release_tag }}
 1095         comment: Checkout the release branch
 1096         logfile: checkout-release-tag.log
 1097         tee: true
 1098       - !Command
 1099         cmd: ant documentation -Dversion={{ release_version }}
 1100         comment: Build documentation
 1101       - !Command
 1102         cmd: svn -m "Add docs, changes and javadocs for Lucene {{ release_version }}"  import {{ git_checkout_folder }}/lucene/build/docs  https://svn.apache.org/repos/infra/websites/production/lucene/content/core/{{ version }}
 1103         logfile: add-docs-lucene.log
 1104         comment: Add docs for Lucene
 1105       - !Command
 1106         cmd: svn -m "Add docs, changes and javadocs for Solr {{ release_version }}"  import {{ git_checkout_folder }}/solr/build/docs  https://svn.apache.org/repos/infra/websites/production/lucene/content/solr/{{ version }}
 1107         logfile: add-docs-solr.log
 1108         comment: Add docs for Solr
 1109   - !Todo
 1110     id: website_javadoc_redirect
 1111     title: Update redirect to latest Javadoc
 1112     depends: website_expaths
 1113     vars:
 1114       release_tag: releases/lucene-solr/{{ release_version }}
 1115       version: "{{ release_version_major }}_{{ release_version_minor }}_{{ release_version_bugfix }}"
 1116     description: |
 1117       We make it possible to link to latest javadoc by providing redirect links for e.g. 
 1118       http://lucene.apache.org/solr/api/solr-core/ which will auto redirect to whatever 
 1119       is the latest released version, i.e. http://lucene.apache.org/solr/{{ version }}/solr-core/<version>.
 1120       This is handled in `.htaccess`
 1121 
 1122       *NOT YET IMPLEMENTED*
 1123     function: website_javadoc_redirect
 1124     asciidoc: |
 1125       We make it possible to link to latest javadoc by providing redirect links for e.g. 
 1126       http://lucene.apache.org/solr/api/solr-core/ which will auto redirect to whatever 
 1127       is the latest released version, i.e. http://lucene.apache.org/solr/{{ version }}/solr-core/<version>.
 1128 
 1129       If we are releasing the latest version, this task will offer to patch the `.htaccess`
 1130       file with latest redirect info and commit this file back to website svn.
 1131     post_description: After the task is done, please test that the links below redirect to the correct version
 1132     links:
 1133     - http://lucene.apache.org/solr/api/solr-core/
 1134     - http://lucene.apache.org/core/api/core/
 1135   - !Todo
 1136     id: prepare_highlights
 1137     title: Edit the release highlights for Lucene and Solr
 1138     description: |
 1139       You will edit the release highlights for Lucene and Solr.
 1140       This will be done in two separate files, one highlight per line,
 1141       each line starting with a '*'.
 1142     function: prepare_highlights
 1143     commands: !Commands
 1144       root_folder: '{{ release_folder }}'
 1145       commands_text: |
 1146         Edit the highlights files, one highlight per line.
 1147         You have to exit the editor after edit to continue.
 1148       commands:
 1149       - !Command
 1150         cmd: "{{ editor }} {{ lucene_highlights_file }}"
 1151         comment: Edit the Lucene highlights      
 1152       - !Command
 1153         cmd: "{{ editor }} {{ solr_highlights_file }}"
 1154         comment: Edit the Solr highlights      
 1155   - !Todo
 1156     id: prepare_announce
 1157     title: Edit the drafts for the website news
 1158     description: |
 1159       Edit draft news texts for the TLP site and for Lucene and Solr sites.
 1160       These texts will also be used as a starting point for the release email later.
 1161     function: prepare_announce
 1162     commands: !Commands
 1163       root_folder: '{{ release_folder }}'
 1164       commands_text: |
 1165         Proof read the draft announcements and edit as you see fit.
 1166         You have to exit the editor after edit to continue.
 1167       commands:
 1168       - !Command
 1169         cmd: "{{ editor }} {{ tlp_news_draft }}"
 1170         comment: Edit the draft for TLP news announcement
 1171       - !Command
 1172         cmd: "{{ editor }} {{ lucene_news_draft }}"
 1173         comment: Edit the draft for Lucene announcement
 1174       - !Command
 1175         cmd: "{{ editor }} {{ solr_news_draft }}"
 1176         comment: Edit the draft for Solr announcement
 1177   - !Todo
 1178     id: update_news
 1179     title: Publish news to the web site
 1180     depends: prepare_announce
 1181     description: |
 1182       Update the news sections of the TLP, Lucene and Solr sites
 1183     vars:
 1184       website_source: "{{ [release_folder, 'website-source'] | path_join }}"
 1185     function: update_news
 1186     commands: !Commands
 1187       root_folder: '{{ website_source }}'
 1188       commands_text: |
 1189         Add news to the site. We'll first add the {{ release_version }} text to the file, 
 1190         then ask you to edit the file to verify the end result. You will now only edit
 1191         the files, we'll commit all changes in a later step.
 1192 
 1193         You have to exit the editor after edit to continue.
 1194       commands:
 1195       - !Command
 1196         cmd: "{{ editor }} {{ tlp_news_file }}"
 1197         comment: Edit the complete website file for TLP news
 1198       - !Command
 1199         cmd: "{{ editor }} {{ lucene_news_file }}"
 1200         comment: Edit the complete website file for Lucene news
 1201       - !Command
 1202         cmd: "{{ editor }} {{ solr_news_file }}"
 1203         comment: Edit the complete website file for Solr news
 1204     post_description: |
 1205       You will review and commit all changes later
 1206   - !Todo
 1207     id: update_download_page
 1208     title: Update the download pages
 1209     depends: prepare_announce
 1210     description: |
 1211       Update the download pages
 1212     vars:
 1213       website_source: "{{ [release_folder, 'website-source'] | path_join }}"
 1214     commands: !Commands
 1215       root_folder: '{{ website_source }}'
 1216       commands_text: |
 1217         Update download pages to point to the latest release.
 1218         You have to exit the editor after edit to continue.
 1219       commands:
 1220       - !Command
 1221         cmd: "{{ editor }} content/solr/downloads.mdtext"
 1222         comment: Edit the Solr downloads page
 1223         stdout: true
 1224       - !Command
 1225         cmd: "{{ editor }} content/core/downloads.mdtext"
 1226         comment: Edit the Lucene downloads page
 1227         stdout: true
 1228     post_description: |
 1229       You will review and commit all changes later
 1230     links:
 1231     - https://www.apache.org/dev/release-download-pages.html
 1232   - !Todo
 1233     id: update_other
 1234     title: Update rest of webpage
 1235     depends: prepare_announce
 1236     description: |
 1237       Update the rest of the web page. Please review all files in the checkout
 1238       and consider if any need change based on what changes there are in the
 1239       release you are doing. Things to consider:
 1240 
 1241       * System requirements
 1242       * Quickstart and tutorial?
 1243     vars:
 1244       website_source: "{{ [release_folder, 'website-source'] | path_join }}"
 1245     commands: !Commands
 1246       root_folder: '{{ website_source }}'
 1247       commands_text: |
 1248         We'll open an editor on the root folder of the site checkout
 1249         You have to exit the editor after edit to continue.
 1250       commands:
 1251       - !Command
 1252         cmd: "{{ editor }} ."
 1253         comment: Open an editor on the root folder
 1254         stdout: true
 1255   - !Todo
 1256     id: publish_website
 1257     title: Publish the website changes
 1258     depends:
 1259     - update_news
 1260     - update_download_page
 1261     description: |
 1262       Publish the website changes
 1263     vars:
 1264       website_source: "{{ [release_folder, 'website-source'] | path_join }}"
 1265     commands: !Commands
 1266       root_folder: '{{ website_source }}'
 1267       commands_text: |
 1268         Verify that changes look good, and then publish.
 1269         You have to exit the editor after review to continue.
 1270       commands:
 1271       - !Command
 1272         cmd: svn st
 1273         stdout: true
 1274       - !Command
 1275         cmd: svn diff
 1276         redirect: "{{ [release_folder, 'website.diff'] | path_join }}"
 1277         comment: Make a diff of all edits. Will open in next step
 1278       - !Command
 1279         cmd: "{{ editor }} {{ [release_folder, 'website.diff'] | path_join }}"
 1280         comment: View the diff of the website changes
 1281         stdout: true
 1282       - !Command
 1283         cmd: svn commit -m "Update website for {{ release_version }} release"
 1284         comment: Commit changes if all looks good
 1285         logfile: commit-website.log
 1286     post_description: |
 1287       * Go to https://ci.apache.org/builders/lucene-site-staging and see that site is built
 1288       * Open http://lucene.staging.apache.org and see that everything looks fine
 1289       * Publish the site at https://cms.apache.org/lucene/publish
 1290 
 1291       Wait for these changes to appear on both of Apache's main webservers 
 1292       (US: http://lucene.us.apache.org, EU: http://lucene.eu.apache.org, http://lucene.apache.org 
 1293       is dependent on your own geographic location, so the other mirror may still be outdated) 
 1294       before doing the next steps (see http://www.apache.org/dev/project-site.html for details on 
 1295       how the site is mirrored to Apache's main web servers). Once they appear, verify all links 
 1296       are correct in your changes!
 1297     links:
 1298     - https://ci.apache.org/builders/lucene-site-staging
 1299     - http://lucene.staging.apache.org
 1300     - https://svn.apache.org/repos/asf/lucene/cms/trunk/
 1301     - https://cms.apache.org/lucene/publish
 1302   - !Todo
 1303     id: update_doap
 1304     title: Update the DOAP files
 1305     description: |
 1306       Update the Core & Solr DOAP RDF files on the unstable, stable and release branches to 
 1307       reflect the new versions (note that the website .htaccess file redirects from their 
 1308       canonical URLs to their locations in the Lucene/Solr Git source repository - see 
 1309       dev-tools/doap/README.txt for more info)
 1310     commands: !Commands
 1311       root_folder: '{{ git_checkout_folder }}'
 1312       commands_text: Edit DOAP files
 1313       commands:
 1314       - !Command
 1315         cmd: git checkout master && git pull
 1316         stdout: true
 1317         comment: Goto master branch
 1318       - !Command
 1319         cmd: "{{ editor }} dev-tools/doap/lucene.rdf"
 1320         comment: Edit Lucene DOAP, add version {{ release_version }}
 1321         stdout: true
 1322       - !Command
 1323         cmd: "{{ editor }} dev-tools/doap/solr.rdf"
 1324         comment: Edit Solr DOAP, add version {{ release_version }}
 1325         stdout: true
 1326       - !Command
 1327         cmd: git add dev-tools/doap/lucene.rdf dev-tools/doap/solr.rdf  && git commit -m "DOAP changes for release {{ release_version }}"
 1328         logfile: commit.log
 1329         stdout: true
 1330       - !Command
 1331         cmd: git push origin
 1332         logfile: push.log
 1333         stdout: true
 1334 - !TodoGroup
 1335   id: announce
 1336   title: Announce the release
 1337   description: |
 1338     For feature releases, your announcement should describe the main features included 
 1339     in the release. *Send the announce as Plain-text email, not HTML.*
 1340 
 1341     NOTE: Copy-pasting from the release notes might sometimes make cause it to be sent
 1342           as HTML formatted, which can break at the mailing list bot.
 1343           Better to copy-paste the raw/edit text.
 1344   todos:
 1345   - !Todo
 1346     id: announce_lucene
 1347     title: Announce the Lucene release (@l.a.o)
 1348     description: |
 1349       (( template=announce_lucene_mail ))
 1350   - !Todo
 1351     id: announce_solr
 1352     title: Announce the Solr release (@l.a.o)
 1353     description: |
 1354       (( template=announce_solr_mail ))
 1355   - !Todo
 1356     id: setup_pgp_mail
 1357     title: Setup your mail client for PGP
 1358     description: |
 1359       The announce mail to `announce@apache.org` should be cryptographically signed.
 1360       Make sure you have a PGP enabled email client with your apache key installed.
 1361       There are plugins for popular email programs, as well as browser plugins for webmail.
 1362       See links for help on how to setup your email client for PGP.
 1363     links:
 1364     - https://www.openpgp.org/software/
 1365     - https://ssd.eff.org/en/module/how-use-pgp-mac-os-x
 1366     - https://ssd.eff.org/en/module/how-use-pgp-linux
 1367     - https://ssd.eff.org/en/module/how-use-pgp-windows
 1368     - https://www.openpgp.org/software/mailvelope/
 1369   - !Todo
 1370     id: announce_lucene_sig
 1371     title: Announce the Lucene release (announce@a.o)
 1372     description: |
 1373       (( template=announce_lucene_sign_mail ))
 1374   - !Todo
 1375     id: announce_solr_sig
 1376     title: Announce the Solr release (announce@a.o)
 1377     description: |
 1378       (( template=announce_solr_sign_mail ))
 1379   - !Todo
 1380     id: add_to_wikipedia
 1381     title: Add the new version to Wikipedia
 1382     description: |
 1383       Go to Wikipedia and edit the page to include the new release.
 1384       Major versions should have a small new paragraph under 'History'.
 1385       If you know other languages than English, edit those as well.
 1386     links:
 1387     - https://en.wikipedia.org/wiki/Apache_Lucene
 1388     - https://en.wikipedia.org/wiki/Apache_Solr
 1389 - !TodoGroup
 1390   id: post_release
 1391   title: Tasks to do after release
 1392   description: There are many more tasks to do now that the new version is out there, so hang in there for a few more hours :)
 1393   todos:
 1394   - !Todo
 1395     id: add_version_bugfix
 1396     title: Add a new bugfix version to stable and unstable branches
 1397     types:
 1398     - bugfix
 1399     commands: !Commands
 1400       root_folder: '{{ git_checkout_folder }}'
 1401       commands_text: |
 1402         Update versions on master and stable branch.
 1403         You may have to hand-edit some files before commit, so go slowly :)
 1404       confirm_each_command: true
 1405       commands:
 1406       - !Command
 1407         cmd: git checkout master && git pull && git clean -df && git checkout -- .
 1408         comment: Go to master branch
 1409         logfile: checkout-master.log
 1410       - !Command
 1411         cmd: python3 -u dev-tools/scripts/addVersion.py {{ release_version }}
 1412         logfile: addversion-master.log
 1413       - !Command
 1414         cmd: git diff
 1415         logfile: diff-master.log
 1416         tee: true
 1417       - !Command
 1418         cmd: git add -u .  && git commit -m "Add bugfix version {{ release_version }}"  && git push
 1419         logfile: commit-master.log
 1420       - !Command
 1421         cmd: git checkout {{ stable_branch }} && git pull && git clean -df && git checkout -- .
 1422         logfile: checkout-stable.log
 1423         comment: Now the same for the stable branch
 1424       - !Command
 1425         cmd: python3 -u dev-tools/scripts/addVersion.py {{ release_version }}
 1426         logfile: addversion-stable.log
 1427       - !Command
 1428         cmd: git diff
 1429         logfile: diff-stable.log
 1430         tee: true
 1431       - !Command
 1432         cmd: git add -u .  && git commit -m "Add bugfix version {{ release_version }}"  && git push
 1433         logfile: commit-stable.log
 1434   - !Todo
 1435     id: synchronize_changes
 1436     title: Synchronize CHANGES.txt
 1437     description: |
 1438       Copy the CHANGES.txt section for this release back to the stable and unstable branches' 
 1439       CHANGES.txt files, removing any duplicate entries, but only from sections for as-yet 
 1440       unreleased versions; leave intact duplicate entries for already-released versions.
 1441 
 1442       There is a script to generate a regex that will match JIRAs fixed in a release: 
 1443       `releasedJirasRegex.py`. The following examples will print regexes matching all JIRAs 
 1444       fixed in {{ release_version }}, which can then be used to find duplicates in unreleased 
 1445       version sections of the corresponding CHANGES.txt files.
 1446     commands: !Commands
 1447       root_folder: '{{ git_checkout_folder }}'
 1448       commands_text: Synchronize CHANGES.txt
 1449       commands:
 1450       - !Command
 1451         cmd: git checkout {{ release_branch }}
 1452         comment: Go to release branch
 1453         logfile: checkout-release.log
 1454         stdout: true
 1455       - !Command
 1456         cmd: python3 -u -B dev-tools/scripts/releasedJirasRegex.py {{ release_version }} lucene/CHANGES.txt  && python3 -u -B dev-tools/scripts/releasedJirasRegex.py {{ release_version }} solr/CHANGES.txt
 1457         tee: true
 1458         comment: Find version regexes
 1459       - !Command
 1460         cmd: git checkout master && git pull && git clean -df && git checkout -- .
 1461         comment: Go to master branch
 1462         logfile: checkout-master.log
 1463       - !Command
 1464         cmd: "{{ editor }} solr/CHANGES.txt"
 1465         comment: Edit Solr CHANGES, do necessary changes
 1466         stdout: true
 1467       - !Command
 1468         cmd: "{{ editor }} lucene/CHANGES.txt"
 1469         comment: Edit Lucene CHANGES, do necessary changes
 1470         stdout: true
 1471       - !Command
 1472         cmd: git add -u .  && git commit -m "Sync CHANGES for {{ release_version }}"  && git push
 1473         logfile: commit-master.log
 1474       - !Command
 1475         cmd: git checkout {{ stable_branch }} && git pull && git clean -df && git checkout -- .
 1476         comment: Go to stable branch
 1477         logfile: checkout-stable.log
 1478       - !Command
 1479         cmd: "{{ editor }} solr/CHANGES.txt"
 1480         comment: Edit Solr CHANGES, do necessary changes
 1481         stdout: true
 1482       - !Command
 1483         cmd: "{{ editor }} lucene/CHANGES.txt"
 1484         comment: Edit Lucene CHANGES, do necessary changes
 1485         stdout: true
 1486       - !Command
 1487         cmd: git add -u .  && git commit -m "Sync CHANGES for {{ release_version }}"  && git push
 1488         logfile: commit-stable.log
 1489   - !Todo
 1490     id: increment_release_version
 1491     title: Add the next version on release branch
 1492     description: Add the next version after the just-released version on the release branch
 1493     depends: publish_maven
 1494     vars:
 1495       next_version: "{{ release_version_major }}.{{ release_version_minor }}.{{ release_version_bugfix + 1 }}"
 1496     commands: !Commands
 1497       root_folder: '{{ git_checkout_folder }}'
 1498       commands_text: Run these commands to add the new bugfix version {{ next_version }} to the release branch
 1499       commands:
 1500       - !Command
 1501         cmd: git checkout {{ release_branch }}
 1502         tee: true
 1503       - !Command
 1504         cmd: python3 -u dev-tools/scripts/addVersion.py {{ next_version }}
 1505         tee: true
 1506       - !Command
 1507         cmd: git diff
 1508         logfile: diff.log
 1509         comment: Check the git diff before committing. Do any edits if necessary
 1510         tee: true
 1511       - !Command
 1512         cmd: git add -u .  && git commit -m "Add next bugfix version {{ next_version }}"  && git push
 1513         logfile: commit-stable.log
 1514   - !Todo
 1515     id: backcompat_release
 1516     title: Generate Backcompat Indexes for release branch
 1517     description: |
 1518       After each version of Lucene is released, compressed CFS, non-CFS, and sorted indexes created with 
 1519       the newly released version are added to `lucene/backwards-codecs/src/test/org/apache/lucene/index/`, 
 1520       for use in testing backward index compatibility via org.apache.lucene.index.TestBackwardsCompatibility, 
 1521       which is also located under the `backwards-codecs/` module. There are also three indexes created only 
 1522       with major Lucene versions: moreterms, empty, and dvupdates. These indexes are created via methods 
 1523       on `TestBackwardsCompatibility` itself - see comments in the source for more information.
 1524 
 1525       There is a script (`dev-tools/scripts/addBackcompatIndexes.py`) that automates most of the process.
 1526       It downloads the source for the specified release; generates indexes for the current release using 
 1527       `TestBackwardsCompatibility`; compresses the indexes and places them in the correct place in the source 
 1528       tree; modifies TestBackwardsCompatibility.java to include the generated indexes in the list of indexes 
 1529       to test; and then runs `TestBackwardsCompatibility`.
 1530       
 1531       In this and the next two steps we'll guide you through using this tool on each of the branches.
 1532     depends: 
 1533     - increment_release_version
 1534     vars:
 1535       temp_dir: "{{ [release_folder, 'backcompat'] | path_join }}"
 1536     commands: !Commands
 1537       root_folder: '{{ git_checkout_folder }}'
 1538       commands_text: Run these commands to add back-compat indices to release branch
 1539       commands:
 1540       - !Command
 1541         cmd: git checkout {{ release_branch }} && git pull && git clean -df && git checkout -- .
 1542         tee: true
 1543         logfile: checkout.log
 1544       - !Command
 1545         cmd: ant clean
 1546       - !Command
 1547         cmd: python3 -u dev-tools/scripts/addBackcompatIndexes.py --no-cleanup  --temp-dir {{ temp_dir }} {{ release_version }}  && git add lucene/backward-codecs/src/test/org/apache/lucene/index/
 1548         logfile: add-bakccompat.log
 1549       - !Command
 1550         cmd: git diff
 1551         comment: Check the git diff before committing
 1552         tee: true
 1553       - !Command
 1554         cmd: git add -u .  && git commit -m "Add back-compat indices for {{ release_version }}"  && git push
 1555         logfile: commit.log
 1556   - !Todo
 1557     id: backcompat_stable
 1558     title: Generate Backcompat Indexes for stable branch
 1559     description: |
 1560       Now generate back-compat for stable branch ({{ stable_branch }})
 1561     depends: 
 1562     - increment_release_version
 1563     vars:
 1564       temp_dir: "{{ [release_folder, 'backcompat'] | path_join }}"
 1565     commands: !Commands
 1566       root_folder: '{{ git_checkout_folder }}'
 1567       commands_text: Run these commands to add back-compat indices to {{ stable_branch }}
 1568       commands:
 1569       - !Command
 1570         cmd: git checkout {{ stable_branch }} && git pull && git clean -df && git checkout -- .
 1571         tee: true
 1572         logfile: checkout.log
 1573       - !Command
 1574         cmd: ant clean
 1575       - !Command
 1576         cmd: python3 -u dev-tools/scripts/addBackcompatIndexes.py --no-cleanup  --temp-dir {{ temp_dir }} {{ release_version }}  && git add lucene/backward-codecs/src/test/org/apache/lucene/index/  
 1577         logfile: add-bakccompat.log
 1578       - !Command
 1579         cmd: git diff
 1580         comment: Check the git diff before committing
 1581         tee: true
 1582       - !Command
 1583         cmd: git add -u .  && git commit -m "Add back-compat indices for {{ release_version }}"  && git push
 1584         logfile: commit.log
 1585   - !Todo
 1586     id: backcompat_master
 1587     title: Generate Backcompat Indexes for unstable branch
 1588     description: |
 1589       Now generate back-compat for unstable (master) branch.
 1590       Note that this time we do not specify `--no-cleanup` meaning the tmp folder will be deleted
 1591     depends: 
 1592     - increment_release_version
 1593     vars:
 1594       temp_dir: "{{ [release_folder, 'backcompat'] | path_join }}"
 1595       version: "{{ set_java_home(master_version) }}"
 1596     commands: !Commands
 1597       root_folder: '{{ git_checkout_folder }}'
 1598       commands_text: Run these commands to add back-compat indices to master
 1599       commands:
 1600       - !Command
 1601         cmd: git checkout master && git pull && git clean -df && git checkout -- .
 1602         tee: true
 1603         logfile: checkout.log
 1604       - !Command
 1605         cmd: ant clean
 1606       - !Command
 1607         cmd: python3 -u dev-tools/scripts/addBackcompatIndexes.py  --temp-dir {{ temp_dir }}  {{ release_version }}  && git add lucene/backward-codecs/src/test/org/apache/lucene/index/  
 1608         logfile: add-bakccompat.log
 1609       - !Command
 1610         cmd: git diff
 1611         comment: Check the git diff before committing
 1612         tee: true
 1613       - !Command
 1614         cmd: git add -u .  && git commit -m "Add back-compat indices for {{ release_version }}"  && git push
 1615         logfile: commit.log
 1616     post_description: |
 1617       When doing a major version release, eg. 8.0.0, you might also need to reenable some 
 1618       backward compatibility tests for corner cases. To find them, run grep -r assume 
 1619       lucene/backward-codecs/, which should find tests that have been disabled on master 
 1620       because there was no released Lucene version to test against.
 1621       {{ set_java_home(release_version) }}
 1622   - !Todo
 1623     id: jira_release
 1624     title: Mark version as released in JIRA
 1625     description: |-
 1626       Go to the JIRA "Manage Versions" Administration pages.
 1627 
 1628       . Next to version {{ release_version }}, click the gear pop-up menu icon and choose "Release"
 1629       . Fill in the release date ({{ release_date | formatdate }})
 1630       . It will give the option of transitioning issues marked fix-for the released version to the 
 1631         next version, but do not do this as it will send an email for each issue :)
 1632 
 1633       This needs to be done both for Lucene and Solr JIRAs, see links.
 1634     links:
 1635     - https://issues.apache.org/jira/plugins/servlet/project-config/LUCENE/versions
 1636     - https://issues.apache.org/jira/plugins/servlet/project-config/SOLR/versions
 1637   - !Todo
 1638     id: jira_close_resolved
 1639     title: Close all issues resolved in the release
 1640     description: |-
 1641       Go to JIRA search in both Solr and Lucene and find all issues that were fixed in the release 
 1642       you just made, whose Status is Resolved.
 1643 
 1644       . Go to https://issues.apache.org/jira/issues/?jql=project+in+(LUCENE,SOLR)+AND+status=Resolved+AND+fixVersion={{ release_version }}
 1645       . Do a bulk change (Under Tools... menu) to close all of these issues. This is a workflow transition task
 1646       . In the 'Comment' box type `Closing after the {{ release_version }} release`
 1647       . *Uncheck* the box that says `Send mail for this update`
 1648 
 1649       This needs to be done both for Lucene and Solr JIRAs, see links.
 1650     links:
 1651     - https://issues.apache.org/jira/issues/?jql=project+in+(LUCENE,SOLR)+AND+status=Resolved+AND+fixVersion={{ release_version }}
 1652   - !Todo
 1653     id: jira_change_unresolved
 1654     title: Remove fixVersion for unresolved
 1655     description: |-
 1656       Do another JIRA search to find all issues with Resolution=_Unresolved_ and fixVersion=_{{ release_version }}_.
 1657       You need to do this separately for Lucene and Solr.
 1658 
 1659       *Lucene*
 1660 
 1661       . Open https://issues.apache.org/jira/issues/?jql=project+=+LUCENE+AND+resolution=Unresolved+AND+fixVersion={{ release_version }}
 1662       . In the `Tools` menu, start a bulk change - operation="Edit issues"
 1663       . Identify issues that *are included* in the release, but are unresolved e.g. due to being REOPENED. These shall *not* be bulk changed!
 1664       . Check the box next to `Change Fix Version/s` and in the dropdown `Find and remove these`, selecting v {{ release_version }}
 1665       . On the bottom of the form, uncheck the box that says `Send mail for this update`
 1666       . Click `Next`, review the changes and click `Confirm`
 1667 
 1668       *Solr*
 1669 
 1670       . Open https://issues.apache.org/jira/issues/?jql=project+=+SOLR+AND+resolution=Unresolved+AND+fixVersion={{ release_version }}
 1671       . In the `Tools` menu, start a bulk change - operation="Edit issues"
 1672       . Identify issues that *are included* in the release, but are unresolved e.g. due to being REOPENED. These shall *not* be bulk changed!
 1673       . Check the box next to `Change Fix Version/s` and in the dropdown `Find and remove these`, selecting v {{ release_version }}
 1674       . On the bottom of the form, uncheck the box that says `Send mail for this update`
 1675       . Click `Next`, review the changes and click `Confirm`
 1676     links:
 1677     - https://issues.apache.org/jira/issues/?jql=project+=+LUCENE+AND+resolution=Unresolved+AND+fixVersion={{ release_version }}
 1678     - https://issues.apache.org/jira/issues/?jql=project+=+SOLR+AND+resolution=Unresolved+AND+fixVersion={{ release_version }}
 1679   - !Todo
 1680     id: jira_clear_security
 1681     title: Clear Security Level of Public Solr JIRA Issues
 1682     description: |-
 1683       ASF JIRA has a deficiency in which issues that have a security level of "Public" are nonetheless not searchable. 
 1684       As a maintenance task, we'll clear the security flag for all public Solr JIRAs, even if it is not a task directly
 1685       related to the release:
 1686 
 1687       . Open in browser: https://issues.apache.org/jira/issues/?jql=project+=+SOLR+AND+level+=+%22Public%22
 1688       . In the `Tools` menu, start a bulk change, select all issues and click `Next`
 1689       . Select operation="Edit issues" and click `Next`
 1690       . Click the checkbox next to `Change security level` and choose `None` in the dropdown.
 1691       . On the bottom of the form, uncheck the box that says `Send mail for this update`
 1692       . Click `Next`, review the changes and click `Confirm`
 1693     links:
 1694     - https://issues.apache.org/jira/issues/?jql=project+=+SOLR+AND+level+=+%22Public%22
 1695   - !Todo
 1696     id: new_jira_versions_bugfix
 1697     title: Add a new version in JIRA for the next release
 1698     description: |-
 1699       Go to the JIRA "Manage Versions" Administration pages and add the new version:
 1700 
 1701       . Create a new (unreleased) version `{{ get_next_version }}`
 1702 
 1703       This needs to be done both for Lucene and Solr JIRAs, see links.
 1704     types:
 1705     - bugfix
 1706     links:
 1707     - https://issues.apache.org/jira/plugins/servlet/project-config/LUCENE/versions
 1708     - https://issues.apache.org/jira/plugins/servlet/project-config/SOLR/versions
 1709   - !Todo
 1710     id: stop_mirroring
 1711     title: Stop mirroring old releases
 1712     description: |
 1713       Shortly after new releases are first mirrored, they are automatically copied to the archives. 
 1714       Only the latest point release from each active branch should be kept under the Lucene PMC 
 1715       svnpubsub areas `dist/releases/lucene/` and `dist/releases/solr/`. Older releases can be 
 1716       safely deleted, since they are already backed up in the archives.
 1717 
 1718       Currenlty these versions are in the mirrors:
 1719 
 1720       *{{ mirrored_versions|join(', ') }}*
 1721 
 1722       The commands below will remove old versions automatically. If this suggestion is wrong,
 1723       please do *not* execute the commands automatically, but edit the command and run manually.
 1724       Versions to be deleted from the mirrors are:
 1725 
 1726       *{{ mirrored_versions_to_delete|join(', ') }}*
 1727 
 1728     commands: !Commands
 1729       root_folder: '{{ git_checkout_folder }}'
 1730       commands_text: |
 1731         Run these commands to delete proposed versions from mirrors.
 1732 
 1733         WARNING: Validate that the proposal is correct!
 1734       commands:
 1735       - !Command
 1736         cmd: |
 1737           svn rm -m "Stop mirroring old Lucene releases"{% for ver in mirrored_versions_to_delete %}  https://dist.apache.org/repos/dist/release/lucene/java/{{ ver }}{% endfor %}
 1738         logfile: svn-rm-lucene.log
 1739       - !Command
 1740         cmd: |
 1741           svn rm -m "Stop mirroring old Solr releases"{% for ver in mirrored_versions_to_delete %}  https://dist.apache.org/repos/dist/release/lucene/solr/{{ ver }}{% endfor %}
 1742         logfile: svn-rm-lucene.log
 1743   - !Todo
 1744     id: update_wiki
 1745     title: Update old WIKI
 1746     description: |
 1747       The Solr WIKI has a page for every version which is often linked to from WIKI pages to 
 1748       indicate differences between versions, example: http://wiki.apache.org/solr/Solr4.3. 
 1749 
 1750       Do the following:
 1751 
 1752       . Update the page for the released version with release date and link to release statement
 1753       . Create a new placeholder page for the "next" version, if it does not exist