xref: /Lucene/dev-tools/scripts/releaseWizard.yaml (revision 9fa2b53a69b341545d9b5a200f3fc0e5ed8f7f38)
187c131baSJan Høydahl#
287c131baSJan Høydahl# Licensed to the Apache Software Foundation (ASF) under one or more
387c131baSJan Høydahl# contributor license agreements.  See the NOTICE file distributed with
487c131baSJan Høydahl# this work for additional information regarding copyright ownership.
587c131baSJan Høydahl# The ASF licenses this file to You under the Apache License, Version 2.0
687c131baSJan Høydahl# (the "License"); you may not use this file except in compliance with
787c131baSJan Høydahl# the License.  You may obtain a copy of the License at
887c131baSJan Høydahl#
987c131baSJan Høydahl#     http://www.apache.org/licenses/LICENSE-2.0
1087c131baSJan Høydahl#
1187c131baSJan Høydahl# Unless required by applicable law or agreed to in writing, software
1287c131baSJan Høydahl# distributed under the License is distributed on an "AS IS" BASIS,
1387c131baSJan Høydahl# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1487c131baSJan Høydahl# See the License for the specific language governing permissions and
1587c131baSJan Høydahl# limitations under the License.
1687c131baSJan Høydahl#
1787c131baSJan Høydahl
1887c131baSJan Høydahl# =====================================================================
19462c6c70SJan Høydahl# This file contains the definition TO-DO steps and commands to run for the
2087c131baSJan Høydahl# releaseWizard.py script. It also contains Jinja2 templates for use in those
2187c131baSJan Høydahl# definitions. See documentation for "groups" below the templates.
2287c131baSJan Høydahl# Edit this file with an editor with YAML support, such as Sublime Text
2387c131baSJan Høydahl# for syntax highlighting and context sensitive tag suggestion
2487c131baSJan Høydahl# =====================================================================
2587c131baSJan Høydahl#
2687c131baSJan Høydahl# Templates may be included in any text by starting a line with this syntax:
2787c131baSJan Høydahl# (( template=my_template_name ))
2887c131baSJan Høydahl# Templates may contain other templates for easy re-use of snippets
2987c131baSJan Høydahl# And of course all Jinja2 syntax for inclusion of variables etc is supported.
3087c131baSJan Høydahl# See http://jinja.pocoo.org/docs/2.10/templates/ for details
3187c131baSJan Høydahl# To add new global variables or functions/filters, edit releaseWizard.py
3287c131baSJan Høydahl#
3387c131baSJan Høydahltemplates:
3487c131baSJan Høydahl  help: |
35674b66ddSJan Høydahl    Welcome to the role as Release Manager for Lucene, and the releaseWizard!
3687c131baSJan Høydahl
3787c131baSJan Høydahl    The Release Wizard aims to walk you through the whole release process step by step,
3887c131baSJan Høydahl    helping you to to run the right commands in the right order, generating
3987c131baSJan Høydahl    e-mail templates for you with the correct texts, versions, paths etc, obeying
4087c131baSJan Høydahl    the voting rules and much more. It also serves as a documentation of all the
4187c131baSJan Høydahl    steps, with timestamps, preserving log files from each command etc.
4287c131baSJan Høydahl
4387c131baSJan Høydahl    As you complete each step the tool will ask you if the task is complete, making
4487c131baSJan Høydahl    it easy for you to know what is done and what is left to do. If you need to
4587c131baSJan Høydahl    re-spin a Release Candidata (RC) the Wizard will also help.
4687c131baSJan Høydahl
4787c131baSJan Høydahl    The Lucene project has automated much of the release process with various scripts,
4887c131baSJan Høydahl    and this wizard is the glue that binds it all together.
4987c131baSJan Høydahl
5087c131baSJan Høydahl    In the first TODO step in the checklist you will be asked to read up on the
5187c131baSJan Høydahl    Apache release policy and other relevant documents before you start the release.
5287c131baSJan Høydahl
5387c131baSJan Høydahl    NOTE: Even if we have great tooling and some degree of automation, there are
5487c131baSJan Høydahl          still many manual steps and it is also important that the RM validates
5587c131baSJan Høydahl          and QAs the process, validating that the right commands are run, and that
5687c131baSJan Høydahl          the output from scripts are correct before proceeding.
5787c131baSJan Høydahl  vote_logic: |
5887c131baSJan Høydahl    {% set passed = plus_binding >= 3 and minus < plus_binding %}
5987c131baSJan Høydahl    {% set too_few = plus_binding < 3 %}
6087c131baSJan Høydahl    {% set veto = plus_binding < minus %}
6187c131baSJan Høydahl    {% set reason = 'too few binding votes' if too_few else 'too many negative votes' if veto else 'unknown' %}
6287c131baSJan Høydahl  vote_macro: |
6387c131baSJan Høydahl    {% macro end_vote_result(plus_binding, plus_other, zero, minus) -%}
6487c131baSJan Høydahl    (( template=vote_logic ))
6587c131baSJan Høydahl    .Mail template {% if passed %}successful{% else %}failed{% endif %} vote
6687c131baSJan Høydahl    ----
6787c131baSJan Høydahl    To: dev@lucene.apache.org
68674b66ddSJan Høydahl    Subject: [{% if passed %}RESULT{% else %}FAILED{% endif %}] [VOTE] Release Lucene {{ release_version }} RC{{ rc_number }}
6987c131baSJan Høydahl
7087c131baSJan Høydahl    It's been >72h since the vote was initiated and the result is:
7187c131baSJan Høydahl
7287c131baSJan Høydahl    +1  {{ plus_binding + plus_other }}  ({{ plus_binding }} binding)
7387c131baSJan Høydahl     0  {{ zero }}
7487c131baSJan Høydahl    -1  {{ minus }}
7587c131baSJan Høydahl
7687c131baSJan Høydahl    {% if not passed %}
7787c131baSJan Høydahl    Reason for fail is {{ reason }}.
7887c131baSJan Høydahl
7987c131baSJan Høydahl    {% endif %}
8087c131baSJan Høydahl    This vote has {% if passed %}PASSED{% else %}FAILED{% endif %}
8187c131baSJan Høydahl    ----
8287c131baSJan Høydahl    {%- endmacro %}
8387c131baSJan Høydahl  announce_lucene: |
84329e7c7bSJan Høydahl    Title: Apache Lucene™ {{ release_version }} available
85329e7c7bSJan Høydahl    category: core/news
86329e7c7bSJan Høydahl    URL:
87329e7c7bSJan Høydahl    save_as:
8887c131baSJan Høydahl
8987c131baSJan Høydahl    The Lucene PMC is pleased to announce the release of Apache Lucene {{ release_version }}.
9087c131baSJan Høydahl
916149387fSAdrien Grand    Apache Lucene is a high-performance, full-featured search engine library written entirely in Java. It is a technology suitable for nearly any application that requires structured search, full-text search, faceting, nearest-neighbor search across high-dimensionality vectors, spell correction or query suggestions.
9287c131baSJan Høydahl
9387c131baSJan Høydahl    This release contains numerous bug fixes, optimizations, and improvements, some of which are highlighted below. The release is available for immediate download at:
9487c131baSJan Høydahl
9587c131baSJan Høydahl      <https://lucene.apache.org/core/downloads.html>
9687c131baSJan Høydahl
9787c131baSJan Høydahl    ### Lucene {{ release_version }} Release Highlights:
9887c131baSJan Høydahl
99329e7c7bSJan Høydahl     * Feature 1 pasted from WIKI release notes
100329e7c7bSJan Høydahl     * Feature 2 ...
10187c131baSJan Høydahl
10287c131baSJan Høydahl    Please read CHANGES.txt for a full list of {% if is_feature_release %}new features and {% endif %}changes:
10387c131baSJan Høydahl
10487c131baSJan Høydahl      <https://lucene.apache.org/core/{{ release_version_underscore }}/changes/Changes.html>
10587c131baSJan Høydahl  announce_lucene_mail: |
10687c131baSJan Høydahl    The template below can be used to announce the Lucene release to the
10787c131baSJan Høydahl    internal mailing lists.
10887c131baSJan Høydahl
10987c131baSJan Høydahl    .Mail template
11087c131baSJan Høydahl    ----
11187c131baSJan Høydahl    To: dev@lucene.apache.org, general@lucene.apache.org, java-user@lucene.apache.org
11287c131baSJan Høydahl    Subject: [ANNOUNCE] Apache Lucene {{ release_version }} released
11387c131baSJan Høydahl
11487c131baSJan Høydahl    (( template=announce_lucene_mail_body ))
11587c131baSJan Høydahl    ----
11687c131baSJan Høydahl  announce_lucene_sign_mail: |
11787c131baSJan Høydahl    The template below can be used to announce the Lucene release to the
11887c131baSJan Høydahl    `announce@apache.org` mailing list. The mail *should be signed with PGP.*
11987c131baSJan Høydahl    and sent *from your `@apache.org` account*.
12087c131baSJan Høydahl
12187c131baSJan Høydahl    .Mail template
12287c131baSJan Høydahl    ----
12387c131baSJan Høydahl    From: {{ gpg.apache_id }}@apache.org
12487c131baSJan Høydahl    To: announce@apache.org
12587c131baSJan Høydahl    Subject: [ANNOUNCE] Apache Lucene {{ release_version }} released
12687c131baSJan Høydahl
12787c131baSJan Høydahl    (( template=announce_lucene_mail_body ))
12887c131baSJan Høydahl    ----
12987c131baSJan Høydahl  announce_lucene_mail_body: |
130329e7c7bSJan Høydahl    {% for line in load_lines(lucene_news_file, 5) -%}
13187c131baSJan Høydahl    {{ line }}
13287c131baSJan Høydahl    {%- endfor %}
13387c131baSJan Høydahl
13487c131baSJan Høydahl
13587c131baSJan Høydahl    Note: The Apache Software Foundation uses an extensive mirroring network for
13687c131baSJan Høydahl    distributing releases. It is possible that the mirror you are using may not have
13787c131baSJan Høydahl    replicated the release yet. If that is the case, please try another mirror.
13887c131baSJan Høydahl    This also applies to Maven access.
13987c131baSJan Høydahl# TODOs belong to groups for easy navigation in menus. Todo objects may contain asciidoc
14087c131baSJan Høydahl# descriptions, a number of commands to execute, some links to display, user input to gather
14187c131baSJan Høydahl# etc. Here is the documentation of each type of object. For further details, please consult
14287c131baSJan Høydahl# the corresponding Python object in releaseWizard.py, as these are parsed 1:1 from yaml.
14387c131baSJan Høydahl#
14487c131baSJan Høydahl# - !TodoGroup
14587c131baSJan Høydahl#   id: unique_id
14687c131baSJan Høydahl#   title: Title which will appear in menu
14787c131baSJan Høydahl#   description: Longer description that will appear in sub-menu
14887c131baSJan Høydahl#   depends: ['group1_id', 'group2_id'] # Explicit dependencies for groups
14987c131baSJan Høydahl#   is_in_rc_loop: Tells that a group is thrown away on RC re-psin (default=False)
15087c131baSJan Høydahl#   todos:    # Array of !Todo objects beloning to the group
15187c131baSJan Høydahl#     !Todo
15287c131baSJan Høydahl#     id: todo_id
15387c131baSJan Høydahl#     title: Short title that will appear in menu and elsewhere
15487c131baSJan Høydahl#     description: |
15587c131baSJan Høydahl#         The main description being printed when selecing the todo item. Here
15687c131baSJan Høydahl#         you should introduce the task in more detail. You can use {{ jinja_var }} to
15787c131baSJan Høydahl#         reference variables. See `releaseWizard.py` for list of global vars supported.
15887c131baSJan Høydahl#         You can reference state saved from earlier TODO items using syntax
15987c131baSJan Høydahl#           {{ todi_id.var_name }}
16087c131baSJan Høydahl#         with `var_name` being either fetched from user_input or persist_vars
16187c131baSJan Høydahl#     depends:  # One or more dependencies which will bar execution
16287c131baSJan Høydahl#     - todo_id1
16387c131baSJan Høydahl#     - todo_id2
16487c131baSJan Høydahl#     vars:  # Dictionary of jinja2 variables local to this TODO, e.g.
16587c131baSJan Høydahl#       logfile_path: "{{ [rc_folder, 'logs'] | path_join }}"
16687c131baSJan Høydahl#       # Vars can contain global jinja vars or local vars earlier defined (ordered dict)
16787c131baSJan Høydahl#     persist_vars: ['var_name', 'var_name'] # List of variables to persist in TODO state
16887c131baSJan Høydahl#     asciidoc: |
16987c131baSJan Høydahl#         Some `asciidoc` text to be included in asciidoc guide
17087c131baSJan Høydahl#         *instead of* description/post_description
17187c131baSJan Høydahl#     function: my_python_function  # Will call the named function for complex tasks
17287c131baSJan Høydahl#     commands: !Commands   # A !Commands object holding commands to execute for this todo
17387c131baSJan Høydahl#       root_folder: '{{ git_checkout_folder }}' # path to where commands will run
17487c131baSJan Høydahl#       commands_text: Introduction text to be displayed just before the commands
17587c131baSJan Høydahl#       enable_execute: true # Set to false to never offer to run commands automatically
17687c131baSJan Høydahl#       confirm_each_command: true # Set to false to run all commands without prompting
17787c131baSJan Høydahl#       remove_files: ['file1', 'folder2'] # List of files or folders that must be gone
17887c131baSJan Høydahl#       logs_prefix: prefix # Lets you prefix logs file names with this string
17987c131baSJan Høydahl#       commands:   # List of !Commands to execute
18087c131baSJan Høydahl#       - !Command  # One single command
18187c131baSJan Høydahl#         cmd: "ls {{ folder_to_ls }}"  # A single command. May reference jinja vars
18287c131baSJan Høydahl#              # Double spaces in a cmd will trigger multi-line display with continuation char \
18387c131baSJan Høydahl#         cwd: relative_path # Where to run command, relative to root_folder
18487c131baSJan Høydahl#         comment: # Will display a # or REM comment above the command in printouts
18587c131baSJan Høydahl#         vars: {} # Possible to define local vars for this command only
18687c131baSJan Høydahl#         logfile: my.og # Overrides log file name which may grow very long :)
18787c131baSJan Høydahl#         tee: false       # If true, sends output to console and file
18887c131baSJan Høydahl#         stdout: false    # if true, sends output only to console, not log file
18987c131baSJan Høydahl#         live: false      # If true, sends output live byte-by-byte to console
19087c131baSJan Høydahl#         redirect: file.txt      # Send output to file. Use instead of >
19187c131baSJan Høydahl#         redirect_append: false  # Will cause output to be appended, like >>
19287c131baSJan Høydahl#         shell: false     $ Set to true to use built-in shell commands
19387c131baSJan Høydahl#     user_input: # An array of !UserInput objects for requesting input from user
19487c131baSJan Høydahl#     - !UserInput
19587c131baSJan Høydahl#       prompt: Please enter your gpg key ID, e.g. 0D8D0B93
19687c131baSJan Høydahl#       name: gpg_id  # This will be stored in todo state and can be referenced as {{ todo_id.name }}
19787c131baSJan Høydahl#       type: int  # if no type is given, a string is stored. Supported types are 'int'
19887c131baSJan Høydahl#     post_description: |
19987c131baSJan Høydahl#       Some `asciidoc` text (with jinja template support)
20087c131baSJan Høydahl#       to be printed *after* commands and user_input is done.
20187c131baSJan Høydahl#     links:
20287c131baSJan Høydahl#     - http://example.com/list/of/links?to&be&displayed
20387c131baSJan Høydahlgroups:
20487c131baSJan Høydahl- !TodoGroup
20587c131baSJan Høydahl  id: prerequisites
20687c131baSJan Høydahl  title: Prerequisites
20787c131baSJan Høydahl  description: |
20887c131baSJan Høydahl    Releasing software requires thorough understanding of the process and careful execution,
20987c131baSJan Høydahl    as it is easy to make mistakes. It also requires an environtment and tools such as gpg
21087c131baSJan Høydahl    correctly setup. This section makes sure you're in good shape for the job!
21187c131baSJan Høydahl  todos:
21287c131baSJan Høydahl  - !Todo
21387c131baSJan Høydahl    id: read_up
21487c131baSJan Høydahl    title: Read up on the release process
21587c131baSJan Høydahl    description: |-
21687c131baSJan Høydahl      As a Release Manager (RM) you should be familiar with Apache's release policy,
21787c131baSJan Høydahl      voting rules, create a PGP/GPG key for use with signing and more. Please familiarise
21887c131baSJan Høydahl      yourself with the resources listed below.
21987c131baSJan Høydahl    links:
220674b66ddSJan Høydahl    - https://www.apache.org/dev/release-publishing.html
221674b66ddSJan Høydahl    - https://www.apache.org/legal/release-policy.html
222674b66ddSJan Høydahl    - https://infra.apache.org/release-signing.html
223674b66ddSJan Høydahl    - https://cwiki.apache.org/confluence/display/LUCENE/ReleaseTodo
22487c131baSJan Høydahl  - !Todo
22587c131baSJan Høydahl    id: tools
22687c131baSJan Høydahl    title: Necessary tools are installed
22787c131baSJan Høydahl    description: |
22887c131baSJan Høydahl      You will need these tools:
22987c131baSJan Høydahl
23087c131baSJan Høydahl      * Python v3.4 or later, with dependencies listed in requirements.txt
2313134f10aSMike Drob      * Java 11 in $JAVA11_HOME
23287c131baSJan Høydahl      * gpg
23387c131baSJan Høydahl      * git
23487c131baSJan Høydahl      * svn
23587c131baSJan Høydahl      * asciidoctor (to generate HTML version)
23687c131baSJan Høydahl
23787c131baSJan Høydahl      You should also set the $EDITOR environment variable, else we'll fallback to
23887c131baSJan Høydahl      `vi` on Linux and `notepad.exe` on Windows, and you don't want that :)
23987c131baSJan Høydahl    function: check_prerequisites
24087c131baSJan Høydahl    links:
24187c131baSJan Høydahl    - https://gnupg.org/download/index.html
24287c131baSJan Høydahl    - https://asciidoctor.org
24387c131baSJan Høydahl  - !Todo
24487c131baSJan Høydahl    id: gpg
24587c131baSJan Høydahl    title: GPG key id is configured
24687c131baSJan Høydahl    description: |-
24787c131baSJan Høydahl      To sign the release you need to provide your GPG key ID. This must be
24887c131baSJan Høydahl      the same key ID that you have registered in your Apache account.
24987c131baSJan Høydahl      The ID is the last 8 bytes of your key fingerprint, e.g. 0D8D0B93.
25087c131baSJan Høydahl
25187c131baSJan Høydahl      * Make sure your gpg key is 4096 bits key or larger
25287c131baSJan Høydahl      * Upload your key to the MIT key server, pgp.mit.edu
25387c131baSJan Høydahl      * Put you GPG key's fingerprint in the `OpenPGP Public Key Primary Fingerprint`
25487c131baSJan Høydahl        field in your id.apache.org profile
25587c131baSJan Høydahl      * The tests will complain if your GPG key has not been signed by another Lucene
25687c131baSJan Høydahl        committer. This makes you a part of the GPG "web of trust" (WoT). Ask a committer
25787c131baSJan Høydahl        that you know personally to sign your key for you, providing them with the
25887c131baSJan Høydahl        fingerprint for the key.
25987c131baSJan Høydahl    function: configure_pgp
26087c131baSJan Høydahl    links:
26187c131baSJan Høydahl    - http://www.apache.org/dev/release-signing.html
26287c131baSJan Høydahl    - http://www.apache.org/dev/openpgp.html#apache-wot
26387c131baSJan Høydahl    - https://id.apache.org
26487c131baSJan Høydahl    - https://dist.apache.org/repos/dist/release/lucene/KEYS
2650f06eff4SHouston Putman  - !Todo
2660f06eff4SHouston Putman    id: jira_permissions
2670f06eff4SHouston Putman    title: Obtain the neccessary permissions for Apache Jira
2680f06eff4SHouston Putman    description: |-
2690f06eff4SHouston Putman      If you are not a PMC member and this is your first time as RM, please ask to be granted extra permissions in Jira in order to complete all steps of the release.
2700f06eff4SHouston Putman
2710f06eff4SHouston Putman      If you are a PMC member, you will already have the necessary permissions.
2720f06eff4SHouston Putman    links:
2730f06eff4SHouston Putman      - https://issues.apache.org/jira/projects/LUCENE
27487c131baSJan Høydahl- !TodoGroup
27587c131baSJan Høydahl  id: preparation
27687c131baSJan Høydahl  title: Prepare for the release
27787c131baSJan Høydahl  description: Work with the community to decide when the release will happen and what work must be completed before it can happen
27887c131baSJan Høydahl  todos:
27987c131baSJan Høydahl  - !Todo
28087c131baSJan Høydahl    id: decide_jira_issues
28187c131baSJan Høydahl    title: Select JIRA issues to be included
28287c131baSJan Høydahl    description: Set the appropriate "Fix Version" in JIRA for the issues that should be included in the release.
28387c131baSJan Høydahl  - !Todo
2849eeef080SJulie Tibshirani    id: fix_build_failures
2859eeef080SJulie Tibshirani    title: Look into common build failures
2869eeef080SJulie Tibshirani    description: |
2879eeef080SJulie Tibshirani      Look over recent build results sent to the builds@lucene.apache.org list and try to address any recurring
2889eeef080SJulie Tibshirani      failures. It's best to fix common failures now, so they don't pop up later and interfere with release smoke
2899eeef080SJulie Tibshirani      testing. Build email archives are available at https://lists.apache.org/list.html?builds@lucene.apache.org.
2909eeef080SJulie Tibshirani  - !Todo
29187c131baSJan Høydahl    id: decide_branch_date
29287c131baSJan Høydahl    title: Decide the date for branching
29387c131baSJan Høydahl    types:
29487c131baSJan Høydahl    - major
29587c131baSJan Høydahl    - minor
29687c131baSJan Høydahl    user_input: !UserInput
29787c131baSJan Høydahl      prompt: Enter date (YYYY-MM-DD)
29887c131baSJan Høydahl      name: branch_date
29987c131baSJan Høydahl  - !Todo
30087c131baSJan Høydahl    id: decide_freeze_length
3019eeef080SJulie Tibshirani    title: Decide the length of feature freeze
30287c131baSJan Høydahl    types:
30387c131baSJan Høydahl    - major
30487c131baSJan Høydahl    - minor
30587c131baSJan Høydahl    user_input: !UserInput
30687c131baSJan Høydahl      prompt: Enter end date of feature freeze (YYYY-MM-DD)
30787c131baSJan Høydahl      name: feature_freeze_date
30887c131baSJan Høydahl- !TodoGroup
30987c131baSJan Høydahl  id: branching_versions
31087c131baSJan Høydahl  title: Create branch (if needed) and update versions
31187c131baSJan Høydahl  description: Here you'll do all the branching and version updates needed to prepare for the new release version
31287c131baSJan Høydahl  todos:
31387c131baSJan Høydahl  - !Todo
31487c131baSJan Høydahl    id: clean_git_checkout
3153134f10aSMike Drob    title: Do a clean git clone to do the release from
31687c131baSJan Høydahl    description: This eliminates the risk of a dirty checkout
31787c131baSJan Høydahl    commands: !Commands
31887c131baSJan Høydahl      root_folder: '{{ release_folder }}'
31987c131baSJan Høydahl      commands_text: Run these commands to make a fresh clone in the release folder
32087c131baSJan Høydahl      remove_files:
32187c131baSJan Høydahl      - '{{ git_checkout_folder }}'
32287c131baSJan Høydahl      commands:
32387c131baSJan Høydahl      - !Command
324674b66ddSJan Høydahl        cmd: git clone --progress https://gitbox.apache.org/repos/asf/lucene.git lucene
32587c131baSJan Høydahl        logfile: git_clone.log
32687c131baSJan Høydahl  - !Todo
3273134f10aSMike Drob    id: gradle_precommit
3283134f10aSMike Drob    title: Run gradle precommit and fix issues
32987c131baSJan Høydahl    depends: clean_git_checkout
33087c131baSJan Høydahl    commands: !Commands
33187c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
33287c131baSJan Høydahl      commands_text: |-
33387c131baSJan Høydahl        From the base branch {{ base_branch }} we'll run precommit tests.
33487c131baSJan Høydahl        Fix any problems that are found by pushing fixes to the branch
33587c131baSJan Høydahl        and then running this task again. This task will always do `git pull`
3363134f10aSMike Drob        before `{{ gradle_cmd }} precommit` so it will catch changes to your branch :)
33787c131baSJan Høydahl      confirm_each_command: false
33887c131baSJan Høydahl      commands:
33987c131baSJan Høydahl      - !Command
34087c131baSJan Høydahl        cmd: git checkout {{ base_branch }}
34187c131baSJan Høydahl        stdout: true
34287c131baSJan Høydahl      - !Command
34387c131baSJan Høydahl        cmd: git clean -df && git checkout -- .
34487c131baSJan Høydahl        comment: Make sure checkout is clean and up to date
34587c131baSJan Høydahl        logfile: git_clean.log
34687c131baSJan Høydahl        tee: true
34787c131baSJan Høydahl      - !Command
3483134f10aSMike Drob        cmd: git pull --ff-only
34987c131baSJan Høydahl        stdout: true
35087c131baSJan Høydahl      - !Command
3513134f10aSMike Drob        cmd: "{{ gradle_cmd }} localSettings"
3523134f10aSMike Drob      - !Command
3533134f10aSMike Drob        cmd: "{{ gradle_cmd }} clean check -x test"
35487c131baSJan Høydahl  - !Todo
35587c131baSJan Høydahl    id: create_stable_branch
35657524c6aSChristine Poerschke    title: Create a new stable branch, off from main
35787c131baSJan Høydahl    description: In our case we'll create {{ stable_branch }}
35887c131baSJan Høydahl    types:
35987c131baSJan Høydahl    - major
36087c131baSJan Høydahl    depends: clean_git_checkout
36187c131baSJan Høydahl    commands: !Commands
36287c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
36387c131baSJan Høydahl      commands_text: Run these commands to create a stable branch
36487c131baSJan Høydahl      commands:
36587c131baSJan Høydahl      - !Command
36657524c6aSChristine Poerschke        cmd: git checkout main
36787c131baSJan Høydahl        tee: true
36887c131baSJan Høydahl      - !Command
3693134f10aSMike Drob        cmd: git pull --ff-only
37087c131baSJan Høydahl        tee: true
37187c131baSJan Høydahl      - !Command
37287c131baSJan Høydahl        cmd: git ls-remote --exit-code --heads origin {{ stable_branch }}
37387c131baSJan Høydahl        stdout: true
37487c131baSJan Høydahl        should_fail: true
37587c131baSJan Høydahl        comment: We expect error code 2 since {{ stable_branch }} does not already exist
37687c131baSJan Høydahl      - !Command
37787c131baSJan Høydahl        cmd: git checkout -b {{ stable_branch }}
37887c131baSJan Høydahl        tee: true
37987c131baSJan Høydahl      - !Command
38087c131baSJan Høydahl        cmd: git push origin {{ stable_branch }}
38187c131baSJan Høydahl        tee: true
38287c131baSJan Høydahl  - !Todo
38387c131baSJan Høydahl    id: create_minor_branch
38487c131baSJan Høydahl    title: Create a new minor branch off the stable branch
38587c131baSJan Høydahl    description: In our case we'll create {{ release_branch }}
38687c131baSJan Høydahl    types:
38787c131baSJan Høydahl    - major
38887c131baSJan Høydahl    - minor
38987c131baSJan Høydahl    depends: clean_git_checkout
39087c131baSJan Høydahl    commands: !Commands
39187c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
39287c131baSJan Høydahl      commands_text: Run these commands to create a release branch
39387c131baSJan Høydahl      commands:
39487c131baSJan Høydahl      - !Command
39587c131baSJan Høydahl        cmd: git checkout {{ stable_branch }}
39687c131baSJan Høydahl        tee: true
39787c131baSJan Høydahl      - !Command
3983134f10aSMike Drob        cmd: git pull --ff-only
39987c131baSJan Høydahl        tee: true
40087c131baSJan Høydahl      - !Command
40187c131baSJan Høydahl        cmd: git ls-remote --exit-code --heads origin {{ release_branch }}
40287c131baSJan Høydahl        stdout: true
40387c131baSJan Høydahl        should_fail: true
40487c131baSJan Høydahl        comment: This command should fail with exit code 2 to verify branch {{ release_branch }} does not already exist
40587c131baSJan Høydahl      - !Command
40687c131baSJan Høydahl        cmd: git checkout -b {{ release_branch }}
40787c131baSJan Høydahl        tee: true
40887c131baSJan Høydahl      - !Command
40987c131baSJan Høydahl        cmd: git push origin {{ release_branch }}
41087c131baSJan Høydahl        tee: true
41187c131baSJan Høydahl  - !Todo
41287c131baSJan Høydahl    id: add_version_major
41357524c6aSChristine Poerschke    title: Add a new major version on main branch
41487c131baSJan Høydahl    types:
41587c131baSJan Høydahl    - major
41687c131baSJan Høydahl    depends: clean_git_checkout
41787c131baSJan Høydahl    vars:
41887c131baSJan Høydahl      next_version: "{{ release_version_major + 1 }}.0.0"
41987c131baSJan Høydahl    commands: !Commands
42087c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
42157524c6aSChristine Poerschke      commands_text: Run these commands to add the new major version {{ next_version }} to the main branch
42287c131baSJan Høydahl      commands:
42387c131baSJan Høydahl      - !Command
42457524c6aSChristine Poerschke        cmd: git checkout main
42587c131baSJan Høydahl        tee: true
42687c131baSJan Høydahl      - !Command
42787c131baSJan Høydahl        cmd: python3 -u dev-tools/scripts/addVersion.py {{ next_version }}
42887c131baSJan Høydahl        tee: true
42936af839eSJan Høydahl      - !Command
43036af839eSJan Høydahl        comment: Make sure the edits done by `addVersion.py` are ok, then push
43136af839eSJan Høydahl        cmd: git add -u .  && git commit -m "Add next major version {{ next_version }}"  && git push
43236af839eSJan Høydahl        logfile: commit-stable.log
43387c131baSJan Høydahl    post_description: |
43487c131baSJan Høydahl      Make sure to follow the manual instructions printed by the script:
43587c131baSJan Høydahl
43687c131baSJan Høydahl      * Move backcompat oldIndexes to unsupportedIndexes in TestBackwardsCompatibility
43787c131baSJan Høydahl      * Update IndexFormatTooOldException throw cases
43887c131baSJan Høydahl
43987c131baSJan Høydahl      There may be other steps needed as well
44087c131baSJan Høydahl  - !Todo
44187c131baSJan Høydahl    id: add_version_minor
44287c131baSJan Høydahl    title: Add a new minor version on stable branch
44387c131baSJan Høydahl    types:
44487c131baSJan Høydahl    - major
44587c131baSJan Høydahl    - minor
44687c131baSJan Høydahl    depends: clean_git_checkout
44787c131baSJan Høydahl    vars:
44887c131baSJan Høydahl      next_version: "{{ release_version_major }}.{{ release_version_minor + 1 }}.0"
44987c131baSJan Høydahl    commands: !Commands
45087c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
45136af839eSJan Høydahl      commands_text: Run these commands to add the new minor version {{ next_version }} to the stable branch
45287c131baSJan Høydahl      commands:
45387c131baSJan Høydahl      - !Command
45487c131baSJan Høydahl        cmd: git checkout {{ stable_branch }}
45587c131baSJan Høydahl        tee: true
45687c131baSJan Høydahl      - !Command
45787c131baSJan Høydahl        cmd: python3 -u dev-tools/scripts/addVersion.py {{ next_version }}
45887c131baSJan Høydahl        tee: true
45936af839eSJan Høydahl      - !Command
46036af839eSJan Høydahl        comment: Make sure the edits done by `addVersion.py` are ok, then push
46136af839eSJan Høydahl        cmd: git add -u .  && git commit -m "Add next minor version {{ next_version }}"  && git push
46236af839eSJan Høydahl        logfile: commit-stable.log
46387c131baSJan Høydahl  - !Todo
46487c131baSJan Høydahl    id: sanity_check_doap
46587c131baSJan Høydahl    title: Sanity check the DOAP files
46687c131baSJan Høydahl    description: |-
46787c131baSJan Høydahl      Sanity check the DOAP files under `dev-tools/doap/`.
46887c131baSJan Høydahl      Do they contain all releases less than the one in progress?
46987c131baSJan Høydahl
47087c131baSJan Høydahl      TIP: The buildAndPushRelease script run later will check this automatically
47187c131baSJan Høydahl    links:
47287c131baSJan Høydahl    - https://projects.apache.org/doap.html
47387c131baSJan Høydahl  - !Todo
47487c131baSJan Høydahl    id: jenkins_builds
47587c131baSJan Høydahl    title: Add Jenkins task for the release branch
47687c131baSJan Høydahl    description: '...so that builds run for the new branch. Consult the JenkinsReleaseBuilds page.'
47787c131baSJan Høydahl    types:
47887c131baSJan Høydahl    - major
47987c131baSJan Høydahl    - minor
48087c131baSJan Høydahl    links:
481674b66ddSJan Høydahl    - https://cwiki.apache.org/confluence/display/LUCENEJAVA/JenkinsReleaseBuilds
48287c131baSJan Høydahl  - !Todo
48387c131baSJan Høydahl    id: inform_devs
48487c131baSJan Høydahl    title: Inform Devs of the new Release Branch
48587c131baSJan Høydahl    description: |-
48687c131baSJan Høydahl      Send a note to dev@ to inform the committers that the branch
48787c131baSJan Høydahl      has been created and the feature freeze phase has started.
48887c131baSJan Høydahl
48987c131baSJan Høydahl      This is an e-mail template you can use as a basis for
49087c131baSJan Høydahl      announcing the new branch and feature freeze.
49187c131baSJan Høydahl
49287c131baSJan Høydahl      .Mail template
49387c131baSJan Høydahl      ----
49487c131baSJan Høydahl      To: dev@lucene.apache.org
495674b66ddSJan Høydahl      Subject: New branch and feature freeze for Lucene {{ release_version }}
49687c131baSJan Høydahl
49787c131baSJan Høydahl      NOTICE:
49887c131baSJan Høydahl
49987c131baSJan Høydahl      Branch {{ release_branch }} has been cut and versions updated to {{ release_version_major }}.{{ release_version_minor + 1 }} on stable branch.
50087c131baSJan Høydahl
50187c131baSJan Høydahl      Please observe the normal rules:
50287c131baSJan Høydahl
50387c131baSJan Høydahl      * No new features may be committed to the branch.
50487c131baSJan Høydahl      * Documentation patches, build patches and serious bug fixes may be
50587c131baSJan Høydahl        committed to the branch. However, you should submit all patches you
50687c131baSJan Høydahl        want to commit to Jira first to give others the chance to review
50787c131baSJan Høydahl        and possibly vote against the patch. Keep in mind that it is our
50887c131baSJan Høydahl        main intention to keep the branch as stable as possible.
50987c131baSJan Høydahl      * All patches that are intended for the branch should first be committed
51087c131baSJan Høydahl        to the unstable branch, merged into the stable branch, and then into
51187c131baSJan Høydahl        the current release branch.
51287c131baSJan Høydahl      * Normal unstable and stable branch development may continue as usual.
51387c131baSJan Høydahl        However, if you plan to commit a big change to the unstable branch
51487c131baSJan Høydahl        while the branch feature freeze is in effect, think twice: can't the
51587c131baSJan Høydahl        addition wait a couple more days? Merges of bug fixes into the branch
51687c131baSJan Høydahl        may become more difficult.
51787c131baSJan Høydahl      * Only Jira issues with Fix version {{ release_version_major }}.{{ release_version_minor }} and priority "Blocker" will delay
51887c131baSJan Høydahl        a release candidate build.
51987c131baSJan Høydahl      ----
52087c131baSJan Høydahl    types:
52187c131baSJan Høydahl    - major
52287c131baSJan Høydahl    - minor
52387c131baSJan Høydahl  - !Todo
52487c131baSJan Høydahl    id: inform_devs_bugfix
52587c131baSJan Høydahl    title: Inform Devs about the planned release
52687c131baSJan Høydahl    description: |-
52787c131baSJan Høydahl      Send a note to dev@ to inform the committers about the rules for committing to the branch.
52887c131baSJan Høydahl
52987c131baSJan Høydahl      This is an e-mail template you can use as a basis for
53087c131baSJan Høydahl      announcing the rules for committing to the release branch
53187c131baSJan Høydahl
53287c131baSJan Høydahl      .Mail template
53387c131baSJan Høydahl      ----
53487c131baSJan Høydahl      To: dev@lucene.apache.org
535674b66ddSJan Høydahl      Subject: Bugfix release Lucene {{ release_version }}
53687c131baSJan Høydahl
53787c131baSJan Høydahl      NOTICE:
53887c131baSJan Høydahl
53987c131baSJan Høydahl      I am now preparing for a bugfix release from branch {{ release_branch }}
54087c131baSJan Høydahl
54187c131baSJan Høydahl      Please observe the normal rules for committing to this branch:
54287c131baSJan Høydahl
54387c131baSJan Høydahl      * Before committing to the branch, reply to this thread and argue
54487c131baSJan Høydahl        why the fix needs backporting and how long it will take.
54587c131baSJan Høydahl      * All issues accepted for backporting should be marked with {{ release_version }}
54687c131baSJan Høydahl        in JIRA, and issues that should delay the release must be marked as Blocker
54787c131baSJan Høydahl      * All patches that are intended for the branch should first be committed
54887c131baSJan Høydahl        to the unstable branch, merged into the stable branch, and then into
54987c131baSJan Høydahl        the current release branch.
55087c131baSJan Høydahl      * Only Jira issues with Fix version {{ release_version }} and priority "Blocker" will delay
55187c131baSJan Høydahl        a release candidate build.
55287c131baSJan Høydahl      ----
55387c131baSJan Høydahl    types:
55487c131baSJan Høydahl    - bugfix
55587c131baSJan Høydahl  - !Todo
55687c131baSJan Høydahl    id: draft_release_notes
55787c131baSJan Høydahl    title: Get a draft of the release notes in place
55887c131baSJan Høydahl    description: |-
559329e7c7bSJan Høydahl      These are typically edited on the Wiki
56087c131baSJan Høydahl
56187c131baSJan Høydahl      Clone a page for a previous version as a starting point for your release notes.
56287c131baSJan Høydahl      Edit the contents of `CHANGES.txt` into a more concise format for public consumption.
56387c131baSJan Høydahl      Ask on dev@ for input. Ideally the timing of this request mostly coincides with the
56487c131baSJan Høydahl      release branch creation. It's a good idea to remind the devs of this later in the release too.
565329e7c7bSJan Høydahl
566329e7c7bSJan Høydahl      NOTE: Do not add every single JIRA issue, but distill the Release note into important changes!
56787c131baSJan Høydahl    links:
568329e7c7bSJan Høydahl    - https://cwiki.apache.org/confluence/display/LUCENE/Release+Notes
56987c131baSJan Høydahl  - !Todo
57087c131baSJan Høydahl    id: new_jira_versions
57187c131baSJan Høydahl    title: Add a new version in JIRA for the next release
57287c131baSJan Høydahl    description: |-
57387c131baSJan Høydahl      Go to the JIRA "Manage Versions" Administration pages and add the new version:
57487c131baSJan Høydahl
57587c131baSJan Høydahl      {% if release_type == 'major' -%}
57657524c6aSChristine Poerschke      . Change name of version `main ({{ release_version_major }}.0)` into `{{ release_version_major }}.0`
57787c131baSJan Høydahl      {%- endif %}
57887c131baSJan Høydahl      . Create a new (unreleased) version `{{ get_next_version }}`
57987c131baSJan Høydahl    types:
58087c131baSJan Høydahl    - major
58187c131baSJan Høydahl    - minor
58287c131baSJan Høydahl    links:
58387c131baSJan Høydahl    - https://issues.apache.org/jira/plugins/servlet/project-config/LUCENE/versions
58487c131baSJan Høydahl- !TodoGroup
58587c131baSJan Høydahl  id: artifacts
58687c131baSJan Høydahl  title: Build the release artifacts
58787c131baSJan Høydahl  description: |-
58887c131baSJan Høydahl    If after the last day of the feature freeze phase no blocking issues are
58987c131baSJan Høydahl    in JIRA with "Fix Version" {{ release_version }}, then it's time to build the
59087c131baSJan Høydahl    release artifacts, run the smoke tester and stage the RC in svn
59187c131baSJan Høydahl  depends:
59287c131baSJan Høydahl  - test
59387c131baSJan Høydahl  - prerequisites
59487c131baSJan Høydahl  is_in_rc_loop: true
59587c131baSJan Høydahl  todos:
59687c131baSJan Høydahl  - !Todo
59787c131baSJan Høydahl    id: run_tests
59887c131baSJan Høydahl    title: Run javadoc tests
59987c131baSJan Høydahl    depends: clean_git_checkout
60087c131baSJan Høydahl    commands: !Commands
60187c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
60287c131baSJan Høydahl      commands_text: Run some tests not ran by `buildAndPublishRelease.py`
60387c131baSJan Høydahl      confirm_each_command: false
60487c131baSJan Høydahl      commands:
60587c131baSJan Høydahl      - !Command
60687c131baSJan Høydahl        cmd: git checkout {{ release_branch }}
60787c131baSJan Høydahl        stdout: true
60887c131baSJan Høydahl      - !Command
6093134f10aSMike Drob        cmd: "{{ gradle_cmd }} documentation"
61008e38d34SMike Drob    post_description: Check that the task passed. If it failed, commit fixes for the failures before proceeding.
61187c131baSJan Høydahl  - !Todo
6123134f10aSMike Drob    id: clear_gradle_cache
6133134f10aSMike Drob    title: Clear the gradle cache
61487c131baSJan Høydahl    description: |
6153134f10aSMike Drob        It is recommended to clean your Gradle cache before building the artifacts.
6163134f10aSMike Drob        This ensures that all Gradle dependencies are freshly downloaded,
61787c131baSJan Høydahl        so we emulate a user that never used the Lucene build system before.
61887c131baSJan Høydahl    commands: !Commands
61987c131baSJan Høydahl      root_folder: '{{ home }}'
6203134f10aSMike Drob      remove_files: .gradle/caches/modules-2/files-2.1_bak
62187c131baSJan Høydahl      commands_text: These commands will help you rename the folder so you can get it back later if you wish
62287c131baSJan Høydahl      commands:
62387c131baSJan Høydahl      - !Command
6243134f10aSMike Drob        cmd: "{{ rename_cmd }} files-2.1 files-2.1_bak"
6253134f10aSMike Drob        cwd: .gradle/caches/modules-2
62687c131baSJan Høydahl        stdout: true
62787c131baSJan Høydahl  - !Todo
62887c131baSJan Høydahl    id: build_rc
62987c131baSJan Høydahl    title: Build the release candidate
63087c131baSJan Høydahl    depends: 
63187c131baSJan Høydahl    - gpg
63287c131baSJan Høydahl    - run_tests
63387c131baSJan Høydahl    vars:
63487c131baSJan Høydahl      logfile: '{{ [rc_folder, ''logs'', ''buildAndPushRelease.log''] | path_join }}'
63587c131baSJan Høydahl      git_rev: '{{ current_git_rev }}' # Note, git_rev will be recorded in todo state AFTER completion of commands
63687c131baSJan Høydahl      local_keys: '{% if keys_downloaded %} --local-keys "{{ [config_path, ''KEYS''] | path_join }}"{% endif %}'
63787c131baSJan Høydahl    persist_vars:
63887c131baSJan Høydahl    - git_rev
63987c131baSJan Høydahl    commands: !Commands
64087c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
64187c131baSJan Høydahl      commands_text: |-
64287c131baSJan Høydahl        In this step we will build the RC using python script `buildAndPushRelease.py`
64387c131baSJan Høydahl        We have tried to compile the correct command below, and you can choose whether
64487c131baSJan Høydahl        to let this script kick it off or execute them in another Terminal window yourself
64587c131baSJan Høydahl
64687c131baSJan Høydahl        Note that the build will take a long time. To follow the detailed build
64787c131baSJan Høydahl        log, you can tail the log file {{ logfile | default("<logfile>") }}.
64887c131baSJan Høydahl      confirm_each_command: false
64987c131baSJan Høydahl      remove_files: 
65087c131baSJan Høydahl      - '{{ dist_file_path }}'
65187c131baSJan Høydahl      commands:
65287c131baSJan Høydahl      - !Command
65387c131baSJan Høydahl        cmd: git checkout {{ release_branch }}
65487c131baSJan Høydahl        tee: true
65587c131baSJan Høydahl      - !Command
65687c131baSJan Høydahl        cmd: git clean -df && git checkout -- .
65787c131baSJan Høydahl        comment: Make sure checkout is clean and up to date
65887c131baSJan Høydahl        logfile: git_clean.log
65987c131baSJan Høydahl        tee: true
66087c131baSJan Høydahl      - !Command
6613134f10aSMike Drob        cmd: git pull --ff-only
66287c131baSJan Høydahl        tee: true
66387c131baSJan Høydahl      - !Command
664daf14981SAlan Woodward        cmd: python3 -u dev-tools/scripts/buildAndPushRelease.py {{ local_keys }}  --logfile {{ logfile }}  --push-local "{{ dist_file_path }}"  --rc-num {{ rc_number }}  --sign {{ gpg_key | default("<gpg_key_id>", True) }}
66587c131baSJan Høydahl        comment: "NOTE: Remember to type your GPG pass-phrase at the prompt!"
66687c131baSJan Høydahl        logfile: build_rc.log
66787c131baSJan Høydahl        tee: true
66887c131baSJan Høydahl  - !Todo
66987c131baSJan Høydahl    id: smoke_tester
67087c131baSJan Høydahl    title: Run the smoke tester
67187c131baSJan Høydahl    depends: build_rc
67287c131baSJan Høydahl    vars:
6730902d803SAdrien Grand      dist_folder: lucene-{{ release_version }}-RC{{ rc_number }}-rev-{{ build_rc.git_rev | default("<git_rev>", True) }}
67487c131baSJan Høydahl      dist_path: '{{ [dist_file_path, dist_folder] | path_join }}'
67587c131baSJan Høydahl      tmp_dir: '{{ [rc_folder, ''smoketest''] | path_join }}'
67687c131baSJan Høydahl      local_keys: '{% if keys_downloaded %} --local-keys "{{ [config_path, ''KEYS''] | path_join }}"{% endif %}'
67787c131baSJan Høydahl    commands: !Commands
67887c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
67987c131baSJan Høydahl      commands_text: Here we'll smoke test the release by 'downloading' the artifacts, running the tests, validating GPG signatures etc.
68087c131baSJan Høydahl      remove_files:
68187c131baSJan Høydahl      - '{{ tmp_dir }}'
68287c131baSJan Høydahl      commands:
68387c131baSJan Høydahl      - !Command
68487c131baSJan Høydahl        cmd: python3 -u dev-tools/scripts/smokeTestRelease.py {{ local_keys }}  --tmp-dir "{{ tmp_dir }}"  file://{{ dist_path | expanduser }}
68587c131baSJan Høydahl        logfile: smoketest.log
68687c131baSJan Høydahl  - !Todo
68787c131baSJan Høydahl    id: import_svn
68887c131baSJan Høydahl    title: Import artifacts into SVN
68987c131baSJan Høydahl    description: |
69087c131baSJan Høydahl      Here we'll import the artifacts into Subversion.
69187c131baSJan Høydahl    depends: smoke_tester
69287c131baSJan Høydahl    vars:
6930902d803SAdrien Grand      dist_folder: lucene-{{ release_version }}-RC{{ rc_number }}-rev-{{ build_rc.git_rev | default("<git_rev>", True) }}
69487c131baSJan Høydahl      dist_path: '{{ [dist_file_path, dist_folder] | path_join }}'
69587c131baSJan Høydahl      dist_url: https://dist.apache.org/repos/dist/dev/lucene/{{ dist_folder}}
69687c131baSJan Høydahl    commands: !Commands
69787c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
69887c131baSJan Høydahl      commands_text: Have your Apache credentials handy, you'll be prompted for your password
69987c131baSJan Høydahl      commands:
70087c131baSJan Høydahl      - !Command
701674b66ddSJan Høydahl        cmd: svn -m "Lucene {{ release_version }} RC{{ rc_number }}" import  {{ dist_path }}  {{ dist_url }}
70287c131baSJan Høydahl        logfile: import_svn.log
70387c131baSJan Høydahl        tee: true
70487c131baSJan Høydahl  - !Todo
70587c131baSJan Høydahl    id: verify_staged
70687c131baSJan Høydahl    title: Verify staged artifacts
70787c131baSJan Høydahl    description: |
70887c131baSJan Høydahl      A lightweight smoke testing which downloads the artifacts from stage
70987c131baSJan Høydahl      area and checks hash and signatures, but does not re-run all tests.
71087c131baSJan Høydahl    depends: import_svn
71187c131baSJan Høydahl    vars:
7120902d803SAdrien Grand      dist_folder: lucene-{{ release_version }}-RC{{ rc_number }}-rev-{{ build_rc.git_rev | default("<git_rev>", True) }}
71387c131baSJan Høydahl      dist_url: https://dist.apache.org/repos/dist/dev/lucene/{{ dist_folder}}
71487c131baSJan Høydahl      tmp_dir: '{{ [rc_folder, ''smoketest_staged''] | path_join }}'
71587c131baSJan Høydahl      local_keys: '{% if keys_downloaded %} --local-keys "{{ [config_path, ''KEYS''] | path_join }}"{% endif %}'
71687c131baSJan Høydahl    commands: !Commands
71787c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
71887c131baSJan Høydahl      commands_text: Here we'll verify that the staged artifacts are downloadable and hash/signatures match.
71987c131baSJan Høydahl      remove_files:
72087c131baSJan Høydahl      - '{{ tmp_dir }}'
72187c131baSJan Høydahl      commands:
72287c131baSJan Høydahl      - !Command
72387c131baSJan Høydahl        cmd: python3 -u dev-tools/scripts/smokeTestRelease.py {{ local_keys }}  --download-only  --tmp-dir "{{ tmp_dir }}"  {{ dist_url }}
72487c131baSJan Høydahl        logfile: smoketest_staged.log
72587c131baSJan Høydahl- !TodoGroup
72687c131baSJan Høydahl  id: voting
72787c131baSJan Høydahl  title: Hold the vote and sum up the results
72887c131baSJan Høydahl  description: These are the steps necessary for the voting process. Read up on the link first!
72987c131baSJan Høydahl  is_in_rc_loop: true
73087c131baSJan Høydahl  todos:
73187c131baSJan Høydahl  - !Todo
73287c131baSJan Høydahl    id: initiate_vote
73387c131baSJan Høydahl    title: Initiate the vote
73487c131baSJan Høydahl    depends: verify_staged
73587c131baSJan Høydahl    description: |
73687c131baSJan Høydahl      If the smoke test passes against the staged artifacts, send an email to the dev mailing list announcing the release candidate.
73787c131baSJan Høydahl
73887c131baSJan Høydahl      .Mail template
73987c131baSJan Høydahl      ----
74087c131baSJan Høydahl      To: dev@lucene.apache.org
741674b66ddSJan Høydahl      Subject: [VOTE] Release Lucene {{ release_version }} RC{{ rc_number }}
74287c131baSJan Høydahl
743674b66ddSJan Høydahl      Please vote for release candidate {{ rc_number }} for Lucene {{ release_version }}
74487c131baSJan Høydahl
74587c131baSJan Høydahl      The artifacts can be downloaded from:
7460902d803SAdrien Grand      https://dist.apache.org/repos/dist/dev/lucene/lucene-{{ release_version }}-RC{{ rc_number }}-rev-{{ build_rc.git_rev | default("<git_rev>", True) }}
74787c131baSJan Høydahl
74887c131baSJan Høydahl      You can run the smoke tester directly with this command:
74987c131baSJan Høydahl
75087c131baSJan Høydahl      python3 -u dev-tools/scripts/smokeTestRelease.py \
7510902d803SAdrien Grand      https://dist.apache.org/repos/dist/dev/lucene/lucene-{{ release_version }}-RC{{ rc_number }}-rev-{{ build_rc.git_rev | default("<git_rev>", True) }}
75287c131baSJan Høydahl
753d86b473aSJan Høydahl      The vote will be open for at least 72 hours i.e. until {{ vote_close }}.
75487c131baSJan Høydahl
75587c131baSJan Høydahl      [ ] +1  approve
75687c131baSJan Høydahl      [ ] +0  no opinion
75787c131baSJan Høydahl      [ ] -1  disapprove (and reason why)
75887c131baSJan Høydahl
75987c131baSJan Høydahl      Here is my +1
76087c131baSJan Høydahl      ----
761d86b473aSJan Høydahl
762d86b473aSJan Høydahl      {% if vote_close_72h_holidays %}
763d86b473aSJan Høydahl      [IMPORTANT]
764d86b473aSJan Høydahl      ====
765d86b473aSJan Høydahl      The voting period contains one or more holidays. Please consider extending the vote deadline.
766d86b473aSJan Høydahl
767d86b473aSJan Høydahl      {% for holiday in vote_close_72h_holidays %}* {{ holiday }}
768d86b473aSJan Høydahl      {% endfor %}
769d86b473aSJan Høydahl      ====
770d86b473aSJan Høydahl      {%- endif %}
77187c131baSJan Høydahl    vars:
77287c131baSJan Høydahl      vote_close: '{{ vote_close_72h }}'
77387c131baSJan Høydahl      vote_close_epoch: '{{ vote_close_72h_epoch }}'
77487c131baSJan Høydahl    persist_vars:
77587c131baSJan Høydahl    - vote_close
77687c131baSJan Høydahl    - vote_close_epoch
77787c131baSJan Høydahl    function: create_ical
77887c131baSJan Høydahl    links:
77987c131baSJan Høydahl    - https://www.apache.org/foundation/voting.html
78087c131baSJan Høydahl  - !Todo
78187c131baSJan Høydahl    id: end_vote
78287c131baSJan Høydahl    title: End vote
78387c131baSJan Høydahl    depends: initiate_vote
78487c131baSJan Høydahl    description: |
78587c131baSJan Høydahl      At the end of the voting deadline, count the votes and send RESULT message to the mailing list.
78687c131baSJan Høydahl
78787c131baSJan Høydahl      {% set vote_close_epoch = initiate_vote.vote_close_epoch | int %}
78887c131baSJan Høydahl      {% if epoch < vote_close_epoch %}
78987c131baSJan Høydahl      WARNING: The planned voting deadline {{ initiate_vote.vote_close }} has not yet passed
79087c131baSJan Høydahl      {% else %}
79187c131baSJan Høydahl      The planned 72h voting deadline {{ initiate_vote.vote_close }} has passed.
79287c131baSJan Høydahl      {% endif %}
79387c131baSJan Høydahl    asciidoc: |
79487c131baSJan Høydahl      (( template=vote_macro ))
79587c131baSJan Høydahl      Note down how many votes were cast, summing as:
79687c131baSJan Høydahl
79787c131baSJan Høydahl      * Binding PMC-member +1 votes
79887c131baSJan Høydahl      * Non-binding +1 votes
79987c131baSJan Høydahl      * Neutral +/-0 votes
80087c131baSJan Høydahl      * Negative -1 votes
80187c131baSJan Høydahl
80287c131baSJan Høydahl      You need 3 binding +1 votes and more +1 than -1 votes for the release to happen.
80387c131baSJan Høydahl      A release cannot be vetoed, see more in provided links.
80487c131baSJan Høydahl
80587c131baSJan Høydahl      Here are some mail templates for successful and failed vote results with sample numbers:
80687c131baSJan Høydahl
80787c131baSJan Høydahl      {{ end_vote_result(3,1,0,2) }}
80887c131baSJan Høydahl
80987c131baSJan Høydahl      {{ end_vote_result(3,1,0,4) }}
81087c131baSJan Høydahl
81187c131baSJan Høydahl      {{ end_vote_result(2,9,0,0) }}
81287c131baSJan Høydahl    user_input:
81387c131baSJan Høydahl    - !UserInput
81487c131baSJan Høydahl      type: int
81587c131baSJan Høydahl      prompt: Number of binding +1 votes (PMC members)
81687c131baSJan Høydahl      name: plus_binding
81787c131baSJan Høydahl    - !UserInput
81887c131baSJan Høydahl      type: int
81987c131baSJan Høydahl      prompt: Number of other +1 votes
82087c131baSJan Høydahl      name: plus_other
82187c131baSJan Høydahl    - !UserInput
82287c131baSJan Høydahl      type: int
82387c131baSJan Høydahl      prompt: Number of 0 votes
82487c131baSJan Høydahl      name: zero
82587c131baSJan Høydahl    - !UserInput
82687c131baSJan Høydahl      type: int
82787c131baSJan Høydahl      prompt: Number of -1 votes
82887c131baSJan Høydahl      name: minus
82987c131baSJan Høydahl    post_description: |
83087c131baSJan Høydahl        (( template=vote_logic ))
83187c131baSJan Høydahl        (( template=vote_macro ))
83287c131baSJan Høydahl        {% if passed -%}
83387c131baSJan Høydahl        Congratulations! The vote has passed.
83487c131baSJan Høydahl
83587c131baSJan Høydahl        {% if minus > 0 %}
83687c131baSJan Høydahl        However, there were negative votes. A release cannot be vetoed, and as long as
83787c131baSJan Høydahl        there are more positive than negative votes you can techically release
83887c131baSJan Høydahl        the software. However, please review the negative votes and consider
83987c131baSJan Høydahl        a re-spin.
84087c131baSJan Høydahl
84187c131baSJan Høydahl        {% endif %}
84287c131baSJan Høydahl        {%- endif %}
84387c131baSJan Høydahl        {{ end_vote_result(plus_binding,plus_other,zero,minus) }}
84487c131baSJan Høydahl    links:
84587c131baSJan Høydahl    - https://www.apache.org/foundation/voting.html
84687c131baSJan Høydahl- !TodoGroup
84787c131baSJan Høydahl  id: publish
848f38c4012SJan Høydahl  title: Publishing to the ASF Distribution Directory
849f38c4012SJan Høydahl  description: Once the vote has passed, the release may be published to the ASF Distribution Directory and to Maven Central.
85087c131baSJan Høydahl  todos:
85187c131baSJan Høydahl  - !Todo
85287c131baSJan Høydahl    id: tag_release
85387c131baSJan Høydahl    title: Tag the release
85487c131baSJan Høydahl    description: Tag the release from the same revision from which the passing release candidate's was built
85587c131baSJan Høydahl    commands: !Commands
85687c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
85787c131baSJan Høydahl      commands_text: This will tag the release in git
85887c131baSJan Høydahl      logs_prefix: tag_release
85987c131baSJan Høydahl      commands:
86087c131baSJan Høydahl      - !Command
861674b66ddSJan Høydahl        cmd: git tag -a releases/lucene/{{ release_version }}  -m "Lucene {{ release_version }} release"  {{ build_rc.git_rev | default("<git_rev>", True) }}
86287c131baSJan Høydahl        logfile: git_tag.log
86387c131baSJan Høydahl        tee: true
86487c131baSJan Høydahl      - !Command
865674b66ddSJan Høydahl        cmd: git push origin releases/lucene/{{ release_version }}
86687c131baSJan Høydahl        logfile: git_push_tag.log
86787c131baSJan Høydahl        tee: true
86887c131baSJan Høydahl  - !Todo
86987c131baSJan Høydahl    id: rm_staged_mvn
87087c131baSJan Høydahl    title: Delete mvn artifacts from staging repo
87187c131baSJan Høydahl    vars:
8720902d803SAdrien Grand      dist_folder: lucene-{{ release_version }}-RC{{ rc_number }}-rev-{{ build_rc.git_rev | default("<git_rev>", True) }}
87387c131baSJan Høydahl      dist_path: '{{ [dist_file_path, dist_folder] | path_join }}'
87487c131baSJan Høydahl      dist_stage_url: https://dist.apache.org/repos/dist/dev/lucene/{{ dist_folder}}
87587c131baSJan Høydahl    commands: !Commands
87687c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
87787c131baSJan Høydahl      confirm_each_command: false
878f38c4012SJan Høydahl      commands_text: This will remove maven artifacts so they do not end up in the Distribution Directory
87987c131baSJan Høydahl      commands:
88087c131baSJan Høydahl      - !Command
88187c131baSJan Høydahl        cmd: svn rm -m "Delete the lucene maven artifacts"  {{ dist_stage_url }}/lucene/maven
88287c131baSJan Høydahl        logfile: svn_rm_mvn_lucene.log
88387c131baSJan Høydahl        tee: true
88487c131baSJan Høydahl  - !Todo
88587c131baSJan Høydahl    id: mv_to_release
88687c131baSJan Høydahl    title: Move release artifacts to release repo
88787c131baSJan Høydahl    vars:
8880902d803SAdrien Grand      dist_folder: lucene-{{ release_version }}-RC{{ rc_number }}-rev-{{ build_rc.git_rev | default("<git_rev>", True) }}
88987c131baSJan Høydahl      dist_stage_url: https://dist.apache.org/repos/dist/dev/lucene/{{ dist_folder}}
89087c131baSJan Høydahl      dist_release_url: https://dist.apache.org/repos/dist/release/lucene
89187c131baSJan Høydahl    commands: !Commands
89287c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
89387c131baSJan Høydahl      confirm_each_command: false
89487c131baSJan Høydahl      commands_text: This will move the new release artifacts from staging repo to the release repo
89587c131baSJan Høydahl      commands:
89687c131baSJan Høydahl      - !Command
89787c131baSJan Høydahl        cmd: svn move -m "Move Lucene {{ release_version }} RC{{ rc_number }} to release repo"  {{ dist_stage_url }}/lucene  {{ dist_release_url }}/java/{{ release_version }}
89887c131baSJan Høydahl        logfile: svn_mv_lucene.log
89987c131baSJan Høydahl        tee: true
90087c131baSJan Høydahl      - !Command
9010902d803SAdrien Grand        cmd: svn rm -m "Clean up the RC folder for {{ release_version }} RC{{ rc_number }}"  https://dist.apache.org/repos/dist/dev/lucene/lucene-{{ release_version }}-RC{{ rc_number }}-rev-{{ build_rc.git_rev | default("<git_rev>", True) }}
90287c131baSJan Høydahl        logfile: svn_rm_containing.log
90387c131baSJan Høydahl        comment: Clean up containing folder on the staging repo
90487c131baSJan Høydahl        tee: true
905674b66ddSJan Høydahl    post_description: 'Note at this point you will see the Jenkins job "Lucene-SmokeRelease-main" begin to fail, until you run the "Generate Backcompat Indexes" '
90687c131baSJan Høydahl  - !Todo
9072f6807ccSJan Høydahl    id: stage_maven
9082f6807ccSJan Høydahl    title: Stage the maven artifacts for publishing
90987c131baSJan Høydahl    vars:
9100902d803SAdrien Grand      dist_folder: lucene-{{ release_version }}-RC{{ rc_number }}-rev-{{ build_rc.git_rev | default("<git_rev>", True) }}
91187c131baSJan Høydahl    commands: !Commands
91287c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
91387c131baSJan Høydahl      confirm_each_command: true
91487c131baSJan Høydahl      commands_text: In the source checkout do the following (note that this step will prompt you for your Apache LDAP credentials)
91587c131baSJan Høydahl      commands:
91687c131baSJan Høydahl        - !Command
91787c131baSJan Høydahl          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 }}
91887c131baSJan Høydahl          logfile: publish_lucene_maven.log
9192f6807ccSJan Høydahl    post_description: The artifacts are not published yet, please proceed with the next step to actually publish!
9202f6807ccSJan Høydahl  - !Todo
9212f6807ccSJan Høydahl    id: publish_maven
9222f6807ccSJan Høydahl    depends: stage_maven
9232f6807ccSJan Høydahl    title: Publish the staged maven artifacts
9242f6807ccSJan Høydahl    description: |
92587c131baSJan Høydahl      Once you have transferred all maven artifacts to repository.apache.org,
9262f6807ccSJan Høydahl      you will need to do some manual steps to actually release them to Maven Central:
92787c131baSJan Høydahl
92887c131baSJan Høydahl      * Close the staging repository
92987c131baSJan Høydahl      . Log in to https://repository.apache.org/ with your ASF credentials
93087c131baSJan Høydahl      . Select "Staging Repositories" under "Build Promotion" from the navigation bar on the left
93187c131baSJan Høydahl      . Select the staging repository containing the Lucene artifacts
932674b66ddSJan Høydahl      . Click on the "Close" button above the repository list, then enter a description when prompted, e.g. "Lucene {{ release_version }} RC{{ rc_number }}"
933674c2c28SMike Drob      * The system will now spend some time validating the artifacts. Grab a coke and come back.
934674b66ddSJan Høydahl      * Release the Lucene artifacts
93587c131baSJan Høydahl      . Wait and keep clicking refresh until the "Release" button becomes available
936674b66ddSJan Høydahl      . Click on the "Release" button above the repository list, then enter a description when prompted, e.g. "Lucene {{ release_version }}".
93787c131baSJan Høydahl
938f38c4012SJan Høydahl      Maven central should show the release after a short while
93987c131baSJan Høydahl    links:
94087c131baSJan Høydahl    - https://wiki.apache.org/lucene-java/PublishMavenArtifacts
94187c131baSJan Høydahl    - https://repository.apache.org/index.html
94287c131baSJan Høydahl  - !Todo
943f38c4012SJan Høydahl    id: check_distribution_directory
944f38c4012SJan Høydahl    depends: publish_maven
945f38c4012SJan Høydahl    title: Check that artifacts are available
946f38c4012SJan Høydahl    function: check_artifacts_available
947f38c4012SJan Høydahl    description: |
948f38c4012SJan Høydahl      The task will attempt to fetch https://dlcdn.apache.org/lucene/java/{{ release_version }}/lucene-{{ release_version }}-src.tgz.asc
949f38c4012SJan Høydahl      to validate ASF repo, and https://repo1.maven.org/maven2/org/apache/lucene/lucene-core/{{ release_version }}/lucene-core-{{ release_version }}.pom.asc
950f38c4012SJan Høydahl      to validate Maven repo.
951f38c4012SJan Høydahl
952f38c4012SJan Høydahl      If the check fails, please re-run the task, until it succeeds.
953f38c4012SJan Høydahl
95487c131baSJan Høydahl- !TodoGroup
95587c131baSJan Høydahl  id: website
95687c131baSJan Høydahl  title: Update the website
95787c131baSJan Høydahl  description: |
958329e7c7bSJan Høydahl    For every release, we publish docs on the website, we need to update the
959329e7c7bSJan Høydahl    download pages etc. The website is hosted in https://github.com/apache/lucene-site
960674b66ddSJan Høydahl    but the Javadocs are pushed to SVN and then included in the main site through links.
96187c131baSJan Høydahl  todos:
96287c131baSJan Høydahl  - !Todo
96387c131baSJan Høydahl    id: website_docs
96487c131baSJan Høydahl    title: Publish docs, changes and javadocs
96587c131baSJan Høydahl    description: |
966674c2c28SMike Drob      Ensure your refrigerator has at least 2 beers - the svn import operation can take a while,
96787c131baSJan Høydahl      depending on your upload bandwidth. We'll publish this directly to the production tree.
96887c131baSJan Høydahl      At the end of the task, the two links below shall work.
96987c131baSJan Høydahl    links:
97087c131baSJan Høydahl    - http://lucene.apache.org/core/{{ version }}
97187c131baSJan Høydahl    vars:
972674b66ddSJan Høydahl      release_tag: releases/lucene/{{ release_version }}
97387c131baSJan Høydahl      version: "{{ release_version_major }}_{{ release_version_minor }}_{{ release_version_bugfix }}"
97487c131baSJan Høydahl    commands: !Commands
97587c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
976329e7c7bSJan Høydahl      commands_text: Build the documentation and add it to SVN production tree
97787c131baSJan Høydahl      commands:
97887c131baSJan Høydahl      - !Command
97987c131baSJan Høydahl        cmd: git fetch && git checkout {{ release_tag }}
98087c131baSJan Høydahl        comment: Checkout the release branch
98187c131baSJan Høydahl        logfile: checkout-release-tag.log
98287c131baSJan Høydahl        tee: true
98387c131baSJan Høydahl      - !Command
98408e38d34SMike Drob        cmd: "{{ gradle_cmd }} documentation -Dversion.release={{ release_version }}"
98587c131baSJan Høydahl        comment: Build documentation
98687c131baSJan Høydahl      - !Command
987603a43f6SAdrien Grand        cmd: svn -m "Add docs, changes and javadocs for Lucene {{ release_version }}"  import {{ git_checkout_folder }}/lucene/documentation/build/site  https://svn.apache.org/repos/infra/sites/lucene/core/{{ version }}
98887c131baSJan Høydahl        logfile: add-docs-lucene.log
98987c131baSJan Høydahl        comment: Add docs for Lucene
99087c131baSJan Høydahl  - !Todo
991329e7c7bSJan Høydahl    id: website_git_clone
992329e7c7bSJan Høydahl    title: Do a clean git clone of the website repo
993329e7c7bSJan Høydahl    description: This is where we'll commit later updates for the website.
994329e7c7bSJan Høydahl    commands: !Commands
995329e7c7bSJan Høydahl      root_folder: '{{ release_folder }}'
996329e7c7bSJan Høydahl      commands_text: Run this command to clone the website git repo
997329e7c7bSJan Høydahl      remove_files:
998329e7c7bSJan Høydahl        - '{{ git_website_folder }}'
999329e7c7bSJan Høydahl      commands:
1000329e7c7bSJan Høydahl        - !Command
1001329e7c7bSJan Høydahl          cmd: git clone --progress https://gitbox.apache.org/repos/asf/lucene-site.git lucene-site
1002329e7c7bSJan Høydahl          logfile: website_git_clone.log
1003329e7c7bSJan Høydahl  - !Todo
1004329e7c7bSJan Høydahl    id: website_update_versions
1005329e7c7bSJan Høydahl    title: Update website versions
1006329e7c7bSJan Høydahl    depends: website_git_clone
100787c131baSJan Høydahl    vars:
1008674b66ddSJan Høydahl      release_tag: releases/lucene/{{ release_version }}
100987c131baSJan Høydahl    description: |
1010329e7c7bSJan Høydahl      We need to update the website so that the download pages list the new release, and the
1011329e7c7bSJan Høydahl      "latest" javadoc links point to the new release.
101287c131baSJan Høydahl
1013329e7c7bSJan Høydahl      Fortunately the only thing you need to change is a few variables in `pelicanconf.py`.
1014329e7c7bSJan Høydahl      If you release a current latest release, change the `LUCENE_LATEST_RELEASE` and `LUCENE_LATEST_RELEASE_DATE`
1015329e7c7bSJan Høydahl      variables.
1016329e7c7bSJan Høydahl      If you relese a bugfix release for previos version, then change the `LUCENE_PREVIOUS_MAJOR_RELEASE` variable.
101787c131baSJan Høydahl    commands: !Commands
1018329e7c7bSJan Høydahl      root_folder: '{{ git_website_folder }}'
1019329e7c7bSJan Høydahl      commands_text: Edit pelicanconf.py to update version numbers
102087c131baSJan Høydahl      commands:
102187c131baSJan Høydahl        - !Command
1022329e7c7bSJan Høydahl          cmd: "{{ editor }} pelicanconf.py"
1023329e7c7bSJan Høydahl          comment: Edit the pelicanconf.file
1024329e7c7bSJan Høydahl          stdout: true
102587c131baSJan Høydahl        - !Command
1026329e7c7bSJan Høydahl          cmd: git commit -am "Update version variables for release {{ release_version }}"
1027329e7c7bSJan Høydahl          logfile: commit.log
1028329e7c7bSJan Høydahl          stdout: true
1029329e7c7bSJan Høydahl    post_description: |
1030329e7c7bSJan Høydahl      You will push and verify all changes in a later step
103187c131baSJan Høydahl  - !Todo
1032329e7c7bSJan Høydahl    id: prepare_announce_lucene
1033329e7c7bSJan Høydahl    title: Author the Lucene release news
1034329e7c7bSJan Høydahl    depends: website_git_clone
103587c131baSJan Høydahl    description: |
1036329e7c7bSJan Høydahl      Edit a news text for the Lucene website. This text will be the basis for the release announcement email later.
1037329e7c7bSJan Høydahl      This step will open an editor with a template. You will need to copy/paste the final release announcement text
1038329e7c7bSJan Høydahl      from the Wiki page and format it as Markdown.
1039329e7c7bSJan Høydahl    function: prepare_announce_lucene
104087c131baSJan Høydahl    commands: !Commands
1041329e7c7bSJan Høydahl      root_folder: '{{ git_website_folder }}'
104287c131baSJan Høydahl      commands_text: |
1043329e7c7bSJan Høydahl        Copy the Lucene announcement from https://cwiki.apache.org/confluence/display/LUCENE/Release+Notes
104487c131baSJan Høydahl        You have to exit the editor after edit to continue.
104587c131baSJan Høydahl      commands:
104687c131baSJan Høydahl      - !Command
104787c131baSJan Høydahl        cmd: "{{ editor }} {{ lucene_news_file }}"
1048329e7c7bSJan Høydahl        comment: Edit the for Lucene announcement news
1049329e7c7bSJan Høydahl        stdout: true
105087c131baSJan Høydahl      - !Command
1051329e7c7bSJan Høydahl        cmd: git add . && git commit -m "Adding Lucene news for release {{ release_version }}"
1052329e7c7bSJan Høydahl        logfile: commit.log
1053329e7c7bSJan Høydahl        stdout: true
105487c131baSJan Høydahl    post_description: |
1055329e7c7bSJan Høydahl      You will push and verify all changes in a later step
105687c131baSJan Høydahl  - !Todo
105787c131baSJan Høydahl    id: update_other
105887c131baSJan Høydahl    title: Update rest of webpage
1059329e7c7bSJan Høydahl    depends: website_update_versions
106087c131baSJan Høydahl    description: |
106187c131baSJan Høydahl      Update the rest of the web page. Please review all files in the checkout
106287c131baSJan Høydahl      and consider if any need change based on what changes there are in the
106387c131baSJan Høydahl      release you are doing. Things to consider:
106487c131baSJan Høydahl
106587c131baSJan Høydahl      * System requirements
106687c131baSJan Høydahl      * Quickstart and tutorial?
106787c131baSJan Høydahl    commands: !Commands
1068329e7c7bSJan Høydahl      root_folder: '{{ git_website_folder }}'
106987c131baSJan Høydahl      commands_text: |
107087c131baSJan Høydahl        We'll open an editor on the root folder of the site checkout
107187c131baSJan Høydahl        You have to exit the editor after edit to continue.
107287c131baSJan Høydahl      commands:
107387c131baSJan Høydahl        - !Command
107487c131baSJan Høydahl          cmd: "{{ editor }} ."
107587c131baSJan Høydahl          comment: Open an editor on the root folder
107687c131baSJan Høydahl          stdout: true
1077329e7c7bSJan Høydahl        - !Command
1078329e7c7bSJan Høydahl          cmd: git commit -am "Other website changes for release {{ release_version }}"
1079329e7c7bSJan Høydahl          comment: Commit the other changes
1080329e7c7bSJan Høydahl          logfile: commit.log
1081329e7c7bSJan Høydahl          stdout: true
108287c131baSJan Høydahl  - !Todo
1083329e7c7bSJan Høydahl    id: stage_website
1084329e7c7bSJan Høydahl    title: Stage the website changes
108587c131baSJan Høydahl    depends:
1086674b66ddSJan Høydahl    - prepare_announce_lucene
108787c131baSJan Høydahl    description: |
108857524c6aSChristine Poerschke      Push the website changes to 'main' branch, and check the staging site.
1089329e7c7bSJan Høydahl      You will get a chance to preview the diff of all changes before you push.
1090329e7c7bSJan Høydahl      If you need to do changes, do the changes (e.g. by re-running previous step 'Update rest of webpage')
1091329e7c7bSJan Høydahl      and commit your changes. Then re-run this step and push when everything is OK.
109287c131baSJan Høydahl    commands: !Commands
1093329e7c7bSJan Høydahl      root_folder: '{{ git_website_folder }}'
109487c131baSJan Høydahl      commands_text: |
109587c131baSJan Høydahl        Verify that changes look good, and then publish.
109687c131baSJan Høydahl        You have to exit the editor after review to continue.
109787c131baSJan Høydahl      commands:
109887c131baSJan Høydahl      - !Command
109957524c6aSChristine Poerschke        cmd: git checkout main && git status
110087c131baSJan Høydahl        stdout: true
110187c131baSJan Høydahl      - !Command
1102329e7c7bSJan Høydahl        cmd: git diff
110387c131baSJan Høydahl        redirect: "{{ [release_folder, 'website.diff'] | path_join }}"
110487c131baSJan Høydahl        comment: Make a diff of all edits. Will open in next step
110587c131baSJan Høydahl      - !Command
110687c131baSJan Høydahl        cmd: "{{ editor }} {{ [release_folder, 'website.diff'] | path_join }}"
1107329e7c7bSJan Høydahl        comment: View the diff of the website changes. Abort if you need to do changes.
110887c131baSJan Høydahl        stdout: true
110987c131baSJan Høydahl      - !Command
1110329e7c7bSJan Høydahl        cmd: git push origin
1111329e7c7bSJan Høydahl        comment: Push all changes
1112329e7c7bSJan Høydahl        logfile: push-website.log
111387c131baSJan Høydahl    post_description: |
1114329e7c7bSJan Høydahl      Wait a few minutes for the build to happen. You can follow the site build at https://ci2.apache.org/#/builders/3
1115329e7c7bSJan Høydahl      and view the staged site at https://lucene.staged.apache.org
1116329e7c7bSJan Høydahl      Verify that correct links and versions are mentioned in download pages, download buttons etc.
1117329e7c7bSJan Høydahl      If you find anything wrong, then commit and push any changes and check again.
111887c131baSJan Høydahl
1119329e7c7bSJan Høydahl      Next step is to merge the changes to branch 'production' in order to publish the site.
112087c131baSJan Høydahl    links:
1121329e7c7bSJan Høydahl    - https://ci2.apache.org/#/builders/3
1122329e7c7bSJan Høydahl    - https://lucene.staged.apache.org
1123329e7c7bSJan Høydahl  - !Todo
1124329e7c7bSJan Høydahl    id: publish_website
1125329e7c7bSJan Høydahl    title: Publish the website changes
1126329e7c7bSJan Høydahl    depends:
1127329e7c7bSJan Høydahl      - stage_website
1128329e7c7bSJan Høydahl    description: |
1129329e7c7bSJan Høydahl      Push the website changes to 'production' branch. This will build and publish the live site on
1130329e7c7bSJan Høydahl      https://lucene.apache.org
1131329e7c7bSJan Høydahl    commands: !Commands
1132329e7c7bSJan Høydahl      root_folder: '{{ git_website_folder }}'
1133329e7c7bSJan Høydahl      commands:
1134329e7c7bSJan Høydahl        - !Command
11353134f10aSMike Drob          cmd: git checkout production && git pull --ff-only
1136329e7c7bSJan Høydahl          stdout: true
1137329e7c7bSJan Høydahl        - !Command
113857524c6aSChristine Poerschke          cmd: git merge main
1139329e7c7bSJan Høydahl          stdout: true
1140329e7c7bSJan Høydahl        - !Command
1141329e7c7bSJan Høydahl          cmd: git push origin
1142329e7c7bSJan Høydahl          comment: Push all changes to production branch
1143329e7c7bSJan Høydahl          logfile: push-website.log
1144329e7c7bSJan Høydahl    post_description: |
1145329e7c7bSJan Høydahl      Wait a few minutes for the build to happen. You can follow the site build at https://ci2.apache.org/#/builders/3
1146329e7c7bSJan Høydahl
1147329e7c7bSJan Høydahl      Verify on https://lucene.apache.org that the site is OK.
1148329e7c7bSJan Høydahl
1149674b66ddSJan Høydahl      You can now also verify that http://lucene.apache.org/core/api/core/ redirects to the latest version
1150329e7c7bSJan Høydahl    links:
1151329e7c7bSJan Høydahl      - https://ci2.apache.org/#/builders/3
1152329e7c7bSJan Høydahl      - https://lucene.apache.org
1153329e7c7bSJan Høydahl      - http://lucene.apache.org/core/api/core/
115487c131baSJan Høydahl  - !Todo
115587c131baSJan Høydahl    id: update_doap
115687c131baSJan Høydahl    title: Update the DOAP files
115787c131baSJan Høydahl    description: |
1158674b66ddSJan Høydahl      Update the DOAP RDF files on the unstable, stable and release branches to
115987c131baSJan Høydahl      reflect the new versions (note that the website .htaccess file redirects from their
1160674b66ddSJan Høydahl      canonical URLs to their locations in the Lucene Git source repository - see
116187c131baSJan Høydahl      dev-tools/doap/README.txt for more info)
116287c131baSJan Høydahl    commands: !Commands
116387c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
116487c131baSJan Høydahl      commands_text: Edit DOAP files
116587c131baSJan Høydahl      commands:
116687c131baSJan Høydahl      - !Command
116757524c6aSChristine Poerschke        cmd: git checkout main && git pull --ff-only
116887c131baSJan Høydahl        stdout: true
116957524c6aSChristine Poerschke        comment: Goto main branch
117087c131baSJan Høydahl      - !Command
117187c131baSJan Høydahl        cmd: "{{ editor }} dev-tools/doap/lucene.rdf"
117287c131baSJan Høydahl        comment: Edit Lucene DOAP, add version {{ release_version }}
117387c131baSJan Høydahl        stdout: true
117487c131baSJan Høydahl      - !Command
1175674b66ddSJan Høydahl        cmd: git add dev-tools/doap/lucene.rdf && git commit -m "DOAP changes for release {{ release_version }}"
117687c131baSJan Høydahl        logfile: commit.log
117787c131baSJan Høydahl        stdout: true
117887c131baSJan Høydahl      - !Command
117987c131baSJan Høydahl        cmd: git push origin
118087c131baSJan Høydahl        logfile: push.log
118187c131baSJan Høydahl        stdout: true
118257524c6aSChristine Poerschke        comment: Push the main branch
11830f06eff4SHouston Putman      - !Command
11843134f10aSMike Drob        cmd: "git checkout {{ stable_branch }} && git pull --ff-only"
11850f06eff4SHouston Putman        stdout: true
11860f06eff4SHouston Putman        comment: Checkout the stable branch
11870f06eff4SHouston Putman      - !Command
118857524c6aSChristine Poerschke        cmd: "git cherry-pick main"
11890f06eff4SHouston Putman        logfile: commit.log
11900f06eff4SHouston Putman        stdout: true
119157524c6aSChristine Poerschke        comment: Cherrypick the DOAP changes from main onto the stable branch.
11920f06eff4SHouston Putman      - !Command
11930f06eff4SHouston Putman        cmd: git show HEAD
11940f06eff4SHouston Putman        stdout: true
11950f06eff4SHouston Putman        comment: Ensure the only change is adding the new version.
11960f06eff4SHouston Putman      - !Command
11970f06eff4SHouston Putman        cmd: git push origin
11980f06eff4SHouston Putman        logfile: push.log
11990f06eff4SHouston Putman        stdout: true
12000f06eff4SHouston Putman        comment: Push the stable branch
12010f06eff4SHouston Putman      - !Command
12023134f10aSMike Drob        cmd: "git checkout {{ release_branch }} && git pull --ff-only"
12030f06eff4SHouston Putman        stdout: true
12040f06eff4SHouston Putman        comment: Checkout the release branch
12050f06eff4SHouston Putman      - !Command
12060f06eff4SHouston Putman        cmd: "git cherry-pick {{ stable_branch }}"
12070f06eff4SHouston Putman        logfile: commit.log
12080f06eff4SHouston Putman        stdout: true
12090f06eff4SHouston Putman        comment: Cherrypick the DOAP changes from the stable branch onto the release branch.
12100f06eff4SHouston Putman      - !Command
12110f06eff4SHouston Putman        cmd: git show HEAD
12120f06eff4SHouston Putman        stdout: true
12130f06eff4SHouston Putman        comment: Ensure the only change is adding the new version.
12140f06eff4SHouston Putman      - !Command
12150f06eff4SHouston Putman        cmd: git push origin
12160f06eff4SHouston Putman        logfile: push.log
12170f06eff4SHouston Putman        stdout: true
12180f06eff4SHouston Putman        comment: Push the release branch
121987c131baSJan Høydahl- !TodoGroup
122087c131baSJan Høydahl  id: announce
122187c131baSJan Høydahl  title: Announce the release
122287c131baSJan Høydahl  description: |
122387c131baSJan Høydahl    For feature releases, your announcement should describe the main features included
122487c131baSJan Høydahl    in the release. *Send the announce as Plain-text email, not HTML.*
122587c131baSJan Høydahl
1226329e7c7bSJan Høydahl    This step will generate email templates based on the news files you edited earler for the website.
1227329e7c7bSJan Høydahl    Do any last-minute necessary edits to the text as you copy it over to the email.
122887c131baSJan Høydahl  todos:
122987c131baSJan Høydahl  - !Todo
123087c131baSJan Høydahl    id: announce_lucene
123187c131baSJan Høydahl    title: Announce the Lucene release (@l.a.o)
123287c131baSJan Høydahl    description: |
123387c131baSJan Høydahl      (( template=announce_lucene_mail ))
123487c131baSJan Høydahl  - !Todo
123587c131baSJan Høydahl    id: setup_pgp_mail
123687c131baSJan Høydahl    title: Setup your mail client for PGP
123787c131baSJan Høydahl    description: |
123887c131baSJan Høydahl      The announce mail to `announce@apache.org` should be cryptographically signed.
123943e30f96SAdrien Grand      Make sure you have a PGP enabled email client with your apache key installed.
124087c131baSJan Høydahl      There are plugins for popular email programs, as well as browser plugins for webmail.
124187c131baSJan Høydahl      See links for help on how to setup your email client for PGP.
1242674c2c28SMike Drob
1243674c2c28SMike Drob      If you prefer to sign the announcements manually rather than using a plugin,
1244674c2c28SMike Drob      you can do so from the command line and then copy the output into your mail program.
1245674c2c28SMike Drob
1246674c2c28SMike Drob      gpg --output - --clearsign lucene_announce.txt
124787c131baSJan Høydahl    links:
124887c131baSJan Høydahl    - https://www.openpgp.org/software/
124987c131baSJan Høydahl    - https://ssd.eff.org/en/module/how-use-pgp-mac-os-x
125087c131baSJan Høydahl    - https://ssd.eff.org/en/module/how-use-pgp-linux
125187c131baSJan Høydahl    - https://ssd.eff.org/en/module/how-use-pgp-windows
125287c131baSJan Høydahl    - https://www.openpgp.org/software/mailvelope/
125387c131baSJan Høydahl  - !Todo
125487c131baSJan Høydahl    id: announce_lucene_sig
125587c131baSJan Høydahl    title: Announce the Lucene release (announce@a.o)
125687c131baSJan Høydahl    description: |
125743e30f96SAdrien Grand      (( template=announce_lucene_sign_mail ))
125887c131baSJan Høydahl  - !Todo
125987c131baSJan Høydahl    id: add_to_wikipedia
126087c131baSJan Høydahl    title: Add the new version to Wikipedia
126187c131baSJan Høydahl    description: |
126287c131baSJan Høydahl      Go to Wikipedia and edit the page to include the new release.
126387c131baSJan Høydahl      Major versions should have a small new paragraph under 'History'.
126487c131baSJan Høydahl      If you know other languages than English, edit those as well.
126587c131baSJan Høydahl    links:
126687c131baSJan Høydahl    - https://en.wikipedia.org/wiki/Apache_Lucene
12670f15b5e2SHouston Putman  - !Todo
12680f15b5e2SHouston Putman    id: add_to_apache_reporter
12690f15b5e2SHouston Putman    title: Add the new version to the Apache Release Reporter
12700f15b5e2SHouston Putman    description: |
12710f15b5e2SHouston Putman      Go to the Apache Release Reporter and add a release for lucene.
12720f15b5e2SHouston Putman      Fill in the same date that you used for the release in previous steps.
12730f15b5e2SHouston Putman      Do not use a product name prefix for the version, as this is the main release of the lucene PMC.
12740f15b5e2SHouston Putman      Just use the version of this release: {{ release_version }}
12750f15b5e2SHouston Putman    links:
12760f15b5e2SHouston Putman      - https://reporter.apache.org/addrelease.html?lucene
127787c131baSJan Høydahl- !TodoGroup
127887c131baSJan Høydahl  id: post_release
12790f06eff4SHouston Putman  title: Tasks to do after release.
12800f06eff4SHouston Putman  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.
128187c131baSJan Høydahl  todos:
128287c131baSJan Høydahl  - !Todo
128387c131baSJan Høydahl    id: add_version_bugfix
128487c131baSJan Høydahl    title: Add a new bugfix version to stable and unstable branches
128587c131baSJan Høydahl    types:
128687c131baSJan Høydahl    - bugfix
128787c131baSJan Høydahl    commands: !Commands
128887c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
128987c131baSJan Høydahl      commands_text: |
129057524c6aSChristine Poerschke        Update versions on main and stable branch.
129187c131baSJan Høydahl        You may have to hand-edit some files before commit, so go slowly :)
129287c131baSJan Høydahl      confirm_each_command: true
129387c131baSJan Høydahl      commands:
129487c131baSJan Høydahl      - !Command
129557524c6aSChristine Poerschke        cmd: git checkout main && git pull --ff-only && git clean -df && git checkout -- .
129657524c6aSChristine Poerschke        comment: Go to main branch
129757524c6aSChristine Poerschke        logfile: checkout-main.log
129887c131baSJan Høydahl      - !Command
129987c131baSJan Høydahl        cmd: python3 -u dev-tools/scripts/addVersion.py {{ release_version }}
130057524c6aSChristine Poerschke        logfile: addversion-main.log
130187c131baSJan Høydahl      - !Command
130287c131baSJan Høydahl        cmd: git diff
130357524c6aSChristine Poerschke        logfile: diff-main.log
130487c131baSJan Høydahl        tee: true
130587c131baSJan Høydahl      - !Command
130687c131baSJan Høydahl        cmd: git add -u .  && git commit -m "Add bugfix version {{ release_version }}"  && git push
130757524c6aSChristine Poerschke        logfile: commit-main.log
130887c131baSJan Høydahl      - !Command
13093134f10aSMike Drob        cmd: git checkout {{ stable_branch }} && git pull --ff-only && git clean -df && git checkout -- .
131087c131baSJan Høydahl        logfile: checkout-stable.log
131187c131baSJan Høydahl        comment: Now the same for the stable branch
131287c131baSJan Høydahl      - !Command
131387c131baSJan Høydahl        cmd: python3 -u dev-tools/scripts/addVersion.py {{ release_version }}
131487c131baSJan Høydahl        logfile: addversion-stable.log
131587c131baSJan Høydahl      - !Command
131687c131baSJan Høydahl        cmd: git diff
131787c131baSJan Høydahl        logfile: diff-stable.log
131887c131baSJan Høydahl        tee: true
131987c131baSJan Høydahl      - !Command
132087c131baSJan Høydahl        cmd: git add -u .  && git commit -m "Add bugfix version {{ release_version }}"  && git push
132187c131baSJan Høydahl        logfile: commit-stable.log
132287c131baSJan Høydahl  - !Todo
132387c131baSJan Høydahl    id: synchronize_changes
132487c131baSJan Høydahl    title: Synchronize CHANGES.txt
132587c131baSJan Høydahl    description: |
132687c131baSJan Høydahl      Copy the CHANGES.txt section for this release back to the stable and unstable branches'
132787c131baSJan Høydahl      CHANGES.txt files, removing any duplicate entries, but only from sections for as-yet
132887c131baSJan Høydahl      unreleased versions; leave intact duplicate entries for already-released versions.
132987c131baSJan Høydahl
133087c131baSJan Høydahl      There is a script to generate a regex that will match JIRAs fixed in a release: 
133187c131baSJan Høydahl      `releasedJirasRegex.py`. The following examples will print regexes matching all JIRAs
133287c131baSJan Høydahl      fixed in {{ release_version }}, which can then be used to find duplicates in unreleased
133387c131baSJan Høydahl      version sections of the corresponding CHANGES.txt files.
133487c131baSJan Høydahl    commands: !Commands
133587c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
133687c131baSJan Høydahl      commands_text: Synchronize CHANGES.txt
133787c131baSJan Høydahl      commands:
133887c131baSJan Høydahl      - !Command
133987c131baSJan Høydahl        cmd: git checkout {{ release_branch }}
134087c131baSJan Høydahl        comment: Go to release branch
134187c131baSJan Høydahl        logfile: checkout-release.log
134287c131baSJan Høydahl        stdout: true
134387c131baSJan Høydahl      - !Command
1344674b66ddSJan Høydahl        cmd: python3 -u -B dev-tools/scripts/releasedJirasRegex.py {{ release_version }} lucene/CHANGES.txt
134587c131baSJan Høydahl        tee: true
134687c131baSJan Høydahl        comment: Find version regexes
134787c131baSJan Høydahl      - !Command
134857524c6aSChristine Poerschke        cmd: git checkout main && git pull --ff-only && git clean -df && git checkout -- .
134957524c6aSChristine Poerschke        comment: Go to main branch
135057524c6aSChristine Poerschke        logfile: checkout-main.log
135187c131baSJan Høydahl      - !Command
135287c131baSJan Høydahl        cmd: "{{ editor }} lucene/CHANGES.txt"
1353674b66ddSJan Høydahl        comment: Edit CHANGES.txt for main branch, do necessary changes
135487c131baSJan Høydahl        stdout: true
135587c131baSJan Høydahl      - !Command
135687c131baSJan Høydahl        cmd: git add -u .  && git commit -m "Sync CHANGES for {{ release_version }}"  && git push
135757524c6aSChristine Poerschke        logfile: commit-main.log
135887c131baSJan Høydahl      - !Command
13593134f10aSMike Drob        cmd: git checkout {{ stable_branch }} && git pull --ff-only && git clean -df && git checkout -- .
136087c131baSJan Høydahl        comment: Go to stable branch
136187c131baSJan Høydahl        logfile: checkout-stable.log
136287c131baSJan Høydahl      - !Command
136387c131baSJan Høydahl        cmd: "{{ editor }} lucene/CHANGES.txt"
1364674b66ddSJan Høydahl        comment: Edit CHANGES.txt for stable branch, do necessary changes
136587c131baSJan Høydahl        stdout: true
136687c131baSJan Høydahl      - !Command
136787c131baSJan Høydahl        cmd: git add -u .  && git commit -m "Sync CHANGES for {{ release_version }}"  && git push
136887c131baSJan Høydahl        logfile: commit-stable.log
136987c131baSJan Høydahl  - !Todo
137087c131baSJan Høydahl    id: increment_release_version
137187c131baSJan Høydahl    title: Add the next version on release branch
137287c131baSJan Høydahl    description: Add the next version after the just-released version on the release branch
137387c131baSJan Høydahl    depends: publish_maven
137487c131baSJan Høydahl    vars:
137587c131baSJan Høydahl      next_version: "{{ release_version_major }}.{{ release_version_minor }}.{{ release_version_bugfix + 1 }}"
137687c131baSJan Høydahl    commands: !Commands
137787c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
137887c131baSJan Høydahl      commands_text: Run these commands to add the new bugfix version {{ next_version }} to the release branch
137987c131baSJan Høydahl      commands:
138087c131baSJan Høydahl      - !Command
138187c131baSJan Høydahl        cmd: git checkout {{ release_branch }}
138287c131baSJan Høydahl        tee: true
138387c131baSJan Høydahl      - !Command
138487c131baSJan Høydahl        cmd: python3 -u dev-tools/scripts/addVersion.py {{ next_version }}
138587c131baSJan Høydahl        tee: true
138687c131baSJan Høydahl      - !Command
138787c131baSJan Høydahl        cmd: git diff
138887c131baSJan Høydahl        logfile: diff.log
138987c131baSJan Høydahl        comment: Check the git diff before committing. Do any edits if necessary
139087c131baSJan Høydahl        tee: true
139187c131baSJan Høydahl      - !Command
139287c131baSJan Høydahl        cmd: git add -u .  && git commit -m "Add next bugfix version {{ next_version }}"  && git push
139387c131baSJan Høydahl        logfile: commit-stable.log
139487c131baSJan Høydahl  - !Todo
139587c131baSJan Høydahl    id: backcompat_release
139687c131baSJan Høydahl    title: Generate Backcompat Indexes for release branch
139787c131baSJan Høydahl    description: |
139887c131baSJan Høydahl      After each version of Lucene is released, compressed CFS, non-CFS, and sorted indexes created with
139987c131baSJan Høydahl      the newly released version are added to `lucene/backwards-codecs/src/test/org/apache/lucene/index/`,
140087c131baSJan Høydahl      for use in testing backward index compatibility via org.apache.lucene.index.TestBackwardsCompatibility,
140187c131baSJan Høydahl      which is also located under the `backwards-codecs/` module. There are also three indexes created only
140287c131baSJan Høydahl      with major Lucene versions: moreterms, empty, and dvupdates. These indexes are created via methods
140387c131baSJan Høydahl      on `TestBackwardsCompatibility` itself - see comments in the source for more information.
140487c131baSJan Høydahl
140587c131baSJan Høydahl      There is a script (`dev-tools/scripts/addBackcompatIndexes.py`) that automates most of the process.
140687c131baSJan Høydahl      It downloads the source for the specified release; generates indexes for the current release using
140787c131baSJan Høydahl      `TestBackwardsCompatibility`; compresses the indexes and places them in the correct place in the source
140887c131baSJan Høydahl      tree; modifies TestBackwardsCompatibility.java to include the generated indexes in the list of indexes
140987c131baSJan Høydahl      to test; and then runs `TestBackwardsCompatibility`.
141087c131baSJan Høydahl
141187c131baSJan Høydahl      In this and the next two steps we'll guide you through using this tool on each of the branches.
141287c131baSJan Høydahl    depends: 
141387c131baSJan Høydahl    - increment_release_version
141487c131baSJan Høydahl    vars:
141587c131baSJan Høydahl      temp_dir: "{{ [release_folder, 'backcompat'] | path_join }}"
141687c131baSJan Høydahl    commands: !Commands
141787c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
141887c131baSJan Høydahl      commands_text: Run these commands to add back-compat indices to release branch
141987c131baSJan Høydahl      commands:
142087c131baSJan Høydahl      - !Command
14213134f10aSMike Drob        cmd: git checkout {{ release_branch }} && git pull --ff-only && git clean -df && git checkout -- .
142287c131baSJan Høydahl        tee: true
142387c131baSJan Høydahl        logfile: checkout.log
142487c131baSJan Høydahl      - !Command
14253134f10aSMike Drob        cmd: "{{ gradle_cmd }} clean"
142687c131baSJan Høydahl      - !Command
1427*9fa2b53aSAlan Woodward        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/backward_index/
1428674c2c28SMike Drob        logfile: add-backcompat.log
142987c131baSJan Høydahl      - !Command
1430674c2c28SMike Drob        cmd: git diff --staged
143187c131baSJan Høydahl        comment: Check the git diff before committing
143287c131baSJan Høydahl        tee: true
143387c131baSJan Høydahl      - !Command
1434674c2c28SMike Drob        cmd: git commit -m "Add back-compat indices for {{ release_version }}"  && git push
143587c131baSJan Høydahl        logfile: commit.log
143687c131baSJan Høydahl  - !Todo
143787c131baSJan Høydahl    id: backcompat_stable
143887c131baSJan Høydahl    title: Generate Backcompat Indexes for stable branch
143987c131baSJan Høydahl    description: |
144087c131baSJan Høydahl      Now generate back-compat for stable branch ({{ stable_branch }})
144187c131baSJan Høydahl    depends: 
144287c131baSJan Høydahl    - increment_release_version
144387c131baSJan Høydahl    vars:
144487c131baSJan Høydahl      temp_dir: "{{ [release_folder, 'backcompat'] | path_join }}"
144587c131baSJan Høydahl    commands: !Commands
144687c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
144787c131baSJan Høydahl      commands_text: Run these commands to add back-compat indices to {{ stable_branch }}
144887c131baSJan Høydahl      commands:
144987c131baSJan Høydahl      - !Command
14503134f10aSMike Drob        cmd: git checkout {{ stable_branch }} && git pull --ff-only && git clean -df && git checkout -- .
145187c131baSJan Høydahl        tee: true
145287c131baSJan Høydahl        logfile: checkout.log
145387c131baSJan Høydahl      - !Command
14543134f10aSMike Drob        cmd: "{{ gradle_cmd }} clean"
145587c131baSJan Høydahl      - !Command
1456*9fa2b53aSAlan Woodward        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/backward_index/
1457674c2c28SMike Drob        logfile: add-backcompat.log
145887c131baSJan Høydahl      - !Command
1459674c2c28SMike Drob        cmd: git diff --staged
146087c131baSJan Høydahl        comment: Check the git diff before committing
146187c131baSJan Høydahl        tee: true
146287c131baSJan Høydahl      - !Command
1463674c2c28SMike Drob        cmd: git commit -m "Add back-compat indices for {{ release_version }}"  && git push
146487c131baSJan Høydahl        logfile: commit.log
146587c131baSJan Høydahl  - !Todo
146657524c6aSChristine Poerschke    id: backcompat_main
146787c131baSJan Høydahl    title: Generate Backcompat Indexes for unstable branch
146887c131baSJan Høydahl    description: |
146957524c6aSChristine Poerschke      Now generate back-compat for unstable (main) branch.
147087c131baSJan Høydahl      Note that this time we do not specify `--no-cleanup` meaning the tmp folder will be deleted
147187c131baSJan Høydahl    depends: 
147287c131baSJan Høydahl    - increment_release_version
147387c131baSJan Høydahl    vars:
147487c131baSJan Høydahl      temp_dir: "{{ [release_folder, 'backcompat'] | path_join }}"
147557524c6aSChristine Poerschke      version: "{{ set_java_home(main_version) }}"
147687c131baSJan Høydahl    commands: !Commands
147787c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
147857524c6aSChristine Poerschke      commands_text: Run these commands to add back-compat indices to main
147987c131baSJan Høydahl      commands:
148087c131baSJan Høydahl      - !Command
148157524c6aSChristine Poerschke        cmd: git checkout main && git pull --ff-only && git clean -df && git checkout -- .
148287c131baSJan Høydahl        tee: true
148387c131baSJan Høydahl        logfile: checkout.log
148487c131baSJan Høydahl      - !Command
14853134f10aSMike Drob        cmd: "{{ gradle_cmd }} clean"
148687c131baSJan Høydahl      - !Command
1487*9fa2b53aSAlan Woodward        cmd: python3 -u dev-tools/scripts/addBackcompatIndexes.py  --temp-dir {{ temp_dir }}  {{ release_version }}  && git add lucene/backward-codecs/src/test/org/apache/lucene/backward_index/
1488674c2c28SMike Drob        logfile: add-backcompat.log
148987c131baSJan Høydahl      - !Command
1490674c2c28SMike Drob        cmd: git diff --staged
149187c131baSJan Høydahl        comment: Check the git diff before committing
149287c131baSJan Høydahl        tee: true
149387c131baSJan Høydahl      - !Command
1494674c2c28SMike Drob        cmd: git commit -m "Add back-compat indices for {{ release_version }}"  && git push
149587c131baSJan Høydahl        logfile: commit.log
149687c131baSJan Høydahl    post_description: |
149787c131baSJan Høydahl      When doing a major version release, eg. 8.0.0, you might also need to reenable some
149887c131baSJan Høydahl      backward compatibility tests for corner cases. To find them, run grep -r assume
149957524c6aSChristine Poerschke      lucene/backward-codecs/, which should find tests that have been disabled on main
150087c131baSJan Høydahl      because there was no released Lucene version to test against.
150187c131baSJan Høydahl      {{ set_java_home(release_version) }}
150287c131baSJan Høydahl  - !Todo
150387c131baSJan Høydahl    id: jira_release
150487c131baSJan Høydahl    title: Mark version as released in JIRA
150587c131baSJan Høydahl    description: |-
150687c131baSJan Høydahl      Go to the JIRA "Manage Versions" Administration pages.
150787c131baSJan Høydahl
150887c131baSJan Høydahl      . Next to version {{ release_version }}, click the gear pop-up menu icon and choose "Release"
150987c131baSJan Høydahl      . Fill in the release date ({{ release_date | formatdate }})
151087c131baSJan Høydahl      . It will give the option of transitioning issues marked fix-for the released version to the
151187c131baSJan Høydahl        next version, but do not do this as it will send an email for each issue :)
151287c131baSJan Høydahl    links:
151387c131baSJan Høydahl    - https://issues.apache.org/jira/plugins/servlet/project-config/LUCENE/versions
151487c131baSJan Høydahl  - !Todo
151587c131baSJan Høydahl    id: jira_close_resolved
151687c131baSJan Høydahl    title: Close all issues resolved in the release
151787c131baSJan Høydahl    description: |-
1518674b66ddSJan Høydahl      Go to JIRA search to find all issues that were fixed in the release
151987c131baSJan Høydahl      you just made, whose Status is Resolved.
152087c131baSJan Høydahl
1521674b66ddSJan Høydahl      . Go to https://issues.apache.org/jira/issues/?jql=project+in+(LUCENE)+AND+status=Resolved+AND+fixVersion={{ release_version }}
152287c131baSJan Høydahl      . Do a bulk change (Under Tools... menu) to close all of these issues. This is a workflow transition task
152387c131baSJan Høydahl      . In the 'Comment' box type `Closing after the {{ release_version }} release`
152487c131baSJan Høydahl      . *Uncheck* the box that says `Send mail for this update`
152587c131baSJan Høydahl    links:
1526674b66ddSJan Høydahl    - https://issues.apache.org/jira/issues/?jql=project+in+(LUCENE)+AND+status=Resolved+AND+fixVersion={{ release_version }}
152787c131baSJan Høydahl  - !Todo
152887c131baSJan Høydahl    id: jira_change_unresolved
152987c131baSJan Høydahl    title: Remove fixVersion for unresolved
153087c131baSJan Høydahl    description: |-
153187c131baSJan Høydahl      Do another JIRA search to find all issues with Resolution=_Unresolved_ and fixVersion=_{{ release_version }}_.
153287c131baSJan Høydahl
153387c131baSJan Høydahl      . Open https://issues.apache.org/jira/issues/?jql=project+=+LUCENE+AND+resolution=Unresolved+AND+fixVersion={{ release_version }}
153487c131baSJan Høydahl      . In the `Tools` menu, start a bulk change - operation="Edit issues"
153587c131baSJan Høydahl      . Identify issues that *are included* in the release, but are unresolved e.g. due to being REOPENED. These shall *not* be bulk changed!
153687c131baSJan Høydahl      . Check the box next to `Change Fix Version/s` and in the dropdown `Find and remove these`, selecting v {{ release_version }}
153787c131baSJan Høydahl      . On the bottom of the form, uncheck the box that says `Send mail for this update`
153887c131baSJan Høydahl      . Click `Next`, review the changes and click `Confirm`
153987c131baSJan Høydahl    links:
154087c131baSJan Høydahl    - https://issues.apache.org/jira/issues/?jql=project+=+LUCENE+AND+resolution=Unresolved+AND+fixVersion={{ release_version }}
154187c131baSJan Høydahl  - !Todo
154287c131baSJan Høydahl    id: new_jira_versions_bugfix
154387c131baSJan Høydahl    title: Add a new version in JIRA for the next release
154487c131baSJan Høydahl    description: |-
154587c131baSJan Høydahl      Go to the JIRA "Manage Versions" Administration pages and add the new version:
154687c131baSJan Høydahl
154787c131baSJan Høydahl      . Create a new (unreleased) version `{{ get_next_version }}`
154887c131baSJan Høydahl    types:
154987c131baSJan Høydahl    - bugfix
155087c131baSJan Høydahl    links:
155187c131baSJan Høydahl    - https://issues.apache.org/jira/plugins/servlet/project-config/LUCENE/versions
155287c131baSJan Høydahl  - !Todo
1553f38c4012SJan Høydahl    id: stop_promoting_old
1554f38c4012SJan Høydahl    title: Stop promoting old releases
155587c131baSJan Høydahl    description: |
1556f38c4012SJan Høydahl      Shortly after new releases are first published, they are automatically copied to the archives.
155787c131baSJan Høydahl      Only the latest point release from each active branch should be kept under the Lucene PMC
1558674b66ddSJan Høydahl      svnpubsub area `dist/releases/lucene/`. Older releases can be
155987c131baSJan Høydahl      safely deleted, since they are already backed up in the archives.
156087c131baSJan Høydahl
1561f38c4012SJan Høydahl      Currenlty these versions exist in the distribution directory:
156287c131baSJan Høydahl
156387c131baSJan Høydahl      *{{ mirrored_versions|join(', ') }}*
156487c131baSJan Høydahl
156587c131baSJan Høydahl      The commands below will remove old versions automatically. If this suggestion is wrong,
156687c131baSJan Høydahl      please do *not* execute the commands automatically, but edit the command and run manually.
1567f38c4012SJan Høydahl      Versions to be deleted from the distribution directory are:
156887c131baSJan Høydahl
156987c131baSJan Høydahl      *{{ mirrored_versions_to_delete|join(', ') }}*
157087c131baSJan Høydahl
157187c131baSJan Høydahl    commands: !Commands
157287c131baSJan Høydahl      root_folder: '{{ git_checkout_folder }}'
157387c131baSJan Høydahl      commands_text: |
1574f38c4012SJan Høydahl        Run these commands to delete proposed versions from distribution directory.
157587c131baSJan Høydahl
157687c131baSJan Høydahl        WARNING: Validate that the proposal is correct!
157787c131baSJan Høydahl      commands:
157887c131baSJan Høydahl      - !Command
157987c131baSJan Høydahl        cmd: |
1580f38c4012SJan Høydahl          svn rm -m "Stop publishing old Lucene releases"{% for ver in mirrored_versions_to_delete %}  https://dist.apache.org/repos/dist/release/lucene/java/{{ ver }}{% endfor %}
158187c131baSJan Høydahl        logfile: svn-rm-lucene.log
1582