| |
| <!DOCTYPE html> |
| |
| |
| <html lang="en" data-content_root="../" > |
| |
| <head> |
| <meta charset="utf-8" /> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> |
| |
| <title>Release Management Guide — Apache Arrow v24.0.0.dev279</title> |
| |
| |
| |
| <script data-cfasync="false"> |
| document.documentElement.dataset.mode = localStorage.getItem("mode") || ""; |
| document.documentElement.dataset.theme = localStorage.getItem("theme") || ""; |
| </script> |
| <!-- |
| this give us a css class that will be invisible only if js is disabled |
| --> |
| <noscript> |
| <style> |
| .pst-js-only { display: none !important; } |
| |
| </style> |
| </noscript> |
| |
| <!-- Loaded before other Sphinx assets --> |
| <link href="../_static/styles/theme.css?digest=8878045cc6db502f8baf" rel="stylesheet" /> |
| <link href="../_static/styles/pydata-sphinx-theme.css?digest=8878045cc6db502f8baf" rel="stylesheet" /> |
| |
| <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=03e43079" /> |
| <link rel="stylesheet" type="text/css" href="../_static/copybutton.css?v=76b2166b" /> |
| <link rel="stylesheet" type="text/css" href="../_static/sphinx-design.min.css?v=95c83b7e" /> |
| <link rel="stylesheet" type="text/css" href="../_static/theme_overrides.css?v=8dcd28dc" /> |
| |
| <!-- So that users can add custom icons --> |
| <script src="../_static/scripts/fontawesome.js?digest=8878045cc6db502f8baf"></script> |
| <!-- Pre-loaded scripts that we'll load fully later --> |
| <link rel="preload" as="script" href="../_static/scripts/bootstrap.js?digest=8878045cc6db502f8baf" /> |
| <link rel="preload" as="script" href="../_static/scripts/pydata-sphinx-theme.js?digest=8878045cc6db502f8baf" /> |
| |
| <script src="../_static/documentation_options.js?v=7be3efae"></script> |
| <script src="../_static/doctools.js?v=fd6eb6e6"></script> |
| <script src="../_static/sphinx_highlight.js?v=6ffebe34"></script> |
| <script src="../_static/clipboard.min.js?v=a7894cd8"></script> |
| <script src="../_static/copybutton.js?v=3bb21c8c"></script> |
| <script src="../_static/design-tabs.js?v=f930bc37"></script> |
| <script>DOCUMENTATION_OPTIONS.pagename = 'developers/release';</script> |
| <script> |
| DOCUMENTATION_OPTIONS.theme_version = '0.16.1'; |
| DOCUMENTATION_OPTIONS.theme_switcher_json_url = '/docs/_static/versions.json'; |
| DOCUMENTATION_OPTIONS.theme_switcher_version_match = 'dev/'; |
| DOCUMENTATION_OPTIONS.show_version_warning_banner = |
| true; |
| </script> |
| <link rel="canonical" href="https://arrow.apache.org/docs/developers/release.html" /> |
| <link rel="icon" href="../_static/favicon.ico"/> |
| <link rel="index" title="Index" href="../genindex.html" /> |
| <link rel="search" title="Search" href="../search.html" /> |
| <link rel="next" title="Release Verification Process" href="release_verification.html" /> |
| <link rel="prev" title="Building the Documentation" href="documentation.html" /> |
| |
| <meta name="viewport" content="width=device-width, initial-scale=1"/> |
| <meta name="docsearch:language" content="en"/> |
| <meta name="docsearch:version" content="24.0.0.dev279" /> |
| |
| <!-- Matomo --> |
| <script> |
| var _paq = window._paq = window._paq || []; |
| /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ |
| /* We explicitly disable cookie tracking to avoid privacy issues */ |
| _paq.push(['disableCookies']); |
| _paq.push(['trackPageView']); |
| _paq.push(['enableLinkTracking']); |
| (function() { |
| var u="https://analytics.apache.org/"; |
| _paq.push(['setTrackerUrl', u+'matomo.php']); |
| _paq.push(['setSiteId', '20']); |
| var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; |
| g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); |
| })(); |
| </script> |
| <!-- End Matomo Code --> |
| |
| </head> |
| |
| |
| <body data-bs-spy="scroll" data-bs-target=".bd-toc-nav" data-offset="180" data-bs-root-margin="0px 0px -60%" data-default-mode=""> |
| |
| |
| |
| <div id="pst-skip-link" class="skip-link d-print-none"><a href="#main-content">Skip to main content</a></div> |
| |
| <div id="pst-scroll-pixel-helper"></div> |
| |
| <button type="button" class="btn rounded-pill" id="pst-back-to-top"> |
| <i class="fa-solid fa-arrow-up"></i>Back to top</button> |
| |
| |
| <dialog id="pst-search-dialog"> |
| |
| <form class="bd-search d-flex align-items-center" |
| action="../search.html" |
| method="get"> |
| <i class="fa-solid fa-magnifying-glass"></i> |
| <input type="search" |
| class="form-control" |
| name="q" |
| placeholder="Search the docs ..." |
| aria-label="Search the docs ..." |
| autocomplete="off" |
| autocorrect="off" |
| autocapitalize="off" |
| spellcheck="false"/> |
| <span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd>K</kbd></span> |
| </form> |
| </dialog> |
| |
| <div class="pst-async-banner-revealer d-none"> |
| <aside id="bd-header-version-warning" class="d-none d-print-none" aria-label="Version warning"></aside> |
| </div> |
| |
| |
| <header class="bd-header navbar navbar-expand-lg bd-navbar d-print-none"> |
| <div class="bd-header__inner bd-page-width"> |
| <button class="pst-navbar-icon sidebar-toggle primary-toggle" aria-label="Site navigation"> |
| <span class="fa-solid fa-bars"></span> |
| </button> |
| |
| |
| <div class=" navbar-header-items__start"> |
| |
| <div class="navbar-item"> |
| |
| |
| |
| |
| |
| <a class="navbar-brand logo" href="../index.html"> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <img src="../_static/arrow.png" class="logo__image only-light" alt="Apache Arrow v24.0.0.dev279 - Home"/> |
| <img src="../_static/arrow-dark.png" class="logo__image only-dark pst-js-only" alt="Apache Arrow v24.0.0.dev279 - Home"/> |
| |
| |
| </a></div> |
| |
| </div> |
| |
| <div class=" navbar-header-items"> |
| |
| <div class="me-auto navbar-header-items__center"> |
| |
| <div class="navbar-item"> |
| <nav> |
| <ul class="bd-navbar-elements navbar-nav"> |
| |
| <li class="nav-item "> |
| <a class="nav-link nav-internal" href="../format/index.html"> |
| Specifications |
| </a> |
| </li> |
| |
| |
| <li class="nav-item current active"> |
| <a class="nav-link nav-internal" href="index.html"> |
| Development |
| </a> |
| </li> |
| |
| |
| <li class="nav-item "> |
| <a class="nav-link nav-internal" href="../implementations.html"> |
| Implementations |
| </a> |
| </li> |
| |
| </ul> |
| </nav></div> |
| |
| </div> |
| |
| |
| <div class="navbar-header-items__end"> |
| |
| <div class="navbar-item navbar-persistent--container"> |
| |
| |
| <button class="btn search-button-field search-button__button pst-js-only" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip"> |
| <i class="fa-solid fa-magnifying-glass"></i> |
| <span class="search-button__default-text">Search</span> |
| <span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span> |
| </button> |
| </div> |
| |
| |
| <div class="navbar-item"><div class="kapa-ai-bot"> |
| <script |
| async |
| src="https://widget.kapa.ai/kapa-widget.bundle.js" |
| data-website-id="9db461d5-ac77-4b3f-a5c5-75efa78339d2" |
| data-project-name="Apache Arrow" |
| data-project-color="#000000" |
| data-project-logo="https://arrow.apache.org/img/arrow-logo_chevrons_white-txt_black-bg.png" |
| data-modal-disclaimer="This is a custom LLM with access to all [Arrow documentation](https://arrow.apache.org/docs/). Please include the language you are using in your question, e.g., Python, C++, Java, R, etc." |
| data-consent-required="true" |
| data-user-analytics-cookie-enabled="false" |
| data-consent-screen-disclaimer="By clicking "I agree, let's chat", you consent to the use of the AI assistant in accordance with kapa.ai's [Privacy Policy](https://www.kapa.ai/content/privacy-policy). This service uses reCAPTCHA, which requires your consent to Google's [Privacy Policy](https://policies.google.com/privacy) and [Terms of Service](https://policies.google.com/terms). By proceeding, you explicitly agree to both kapa.ai's and Google's privacy policies." |
| ></script> |
| |
| </div> |
| |
| </div> |
| |
| <div class="navbar-item"> |
| <div class="version-switcher__container dropdown pst-js-only"> |
| <button id="pst-version-switcher-button-2" |
| type="button" |
| class="version-switcher__button btn btn-sm dropdown-toggle" |
| data-bs-toggle="dropdown" |
| aria-haspopup="listbox" |
| aria-controls="pst-version-switcher-list-2" |
| aria-label="Version switcher list" |
| > |
| Choose version <!-- this text may get changed later by javascript --> |
| <span class="caret"></span> |
| </button> |
| <div id="pst-version-switcher-list-2" |
| class="version-switcher__menu dropdown-menu list-group-flush py-0" |
| role="listbox" aria-labelledby="pst-version-switcher-button-2"> |
| <!-- dropdown will be populated by javascript on page load --> |
| </div> |
| </div></div> |
| |
| <div class="navbar-item"> |
| |
| <button class="btn btn-sm nav-link pst-navbar-icon theme-switch-button pst-js-only" aria-label="Color mode" data-bs-title="Color mode" data-bs-placement="bottom" data-bs-toggle="tooltip"> |
| <i class="theme-switch fa-solid fa-sun fa-lg" data-mode="light" title="Light"></i> |
| <i class="theme-switch fa-solid fa-moon fa-lg" data-mode="dark" title="Dark"></i> |
| <i class="theme-switch fa-solid fa-circle-half-stroke fa-lg" data-mode="auto" title="System Settings"></i> |
| </button></div> |
| |
| <div class="navbar-item"><ul class="navbar-icon-links" |
| aria-label="Icon Links"> |
| <li class="nav-item"> |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://github.com/apache/arrow" title="GitHub" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-brands fa-square-github fa-lg" aria-hidden="true"></i> |
| <span class="sr-only">GitHub</span></a> |
| </li> |
| <li class="nav-item"> |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://www.linkedin.com/company/apache-arrow/" title="LinkedIn" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-brands fa-linkedin fa-lg" aria-hidden="true"></i> |
| <span class="sr-only">LinkedIn</span></a> |
| </li> |
| <li class="nav-item"> |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://bsky.app/profile/arrow.apache.org" title="BlueSky" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-brands fa-bluesky fa-lg" aria-hidden="true"></i> |
| <span class="sr-only">BlueSky</span></a> |
| </li> |
| </ul></div> |
| |
| </div> |
| |
| </div> |
| |
| |
| <div class="navbar-persistent--mobile"> |
| |
| <button class="btn search-button-field search-button__button pst-js-only" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip"> |
| <i class="fa-solid fa-magnifying-glass"></i> |
| <span class="search-button__default-text">Search</span> |
| <span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span> |
| </button> |
| </div> |
| |
| |
| |
| <button class="pst-navbar-icon sidebar-toggle secondary-toggle" aria-label="On this page"> |
| <span class="fa-solid fa-outdent"></span> |
| </button> |
| |
| </div> |
| |
| </header> |
| |
| |
| <div class="bd-container"> |
| <div class="bd-container__inner bd-page-width"> |
| |
| |
| |
| <dialog id="pst-primary-sidebar-modal"></dialog> |
| <div id="pst-primary-sidebar" class="bd-sidebar-primary bd-sidebar"> |
| |
| |
| |
| <div class="sidebar-header-items sidebar-primary__section"> |
| |
| |
| <div class="sidebar-header-items__center"> |
| |
| |
| |
| <div class="navbar-item"> |
| <nav> |
| <ul class="bd-navbar-elements navbar-nav"> |
| |
| <li class="nav-item "> |
| <a class="nav-link nav-internal" href="../format/index.html"> |
| Specifications |
| </a> |
| </li> |
| |
| |
| <li class="nav-item current active"> |
| <a class="nav-link nav-internal" href="index.html"> |
| Development |
| </a> |
| </li> |
| |
| |
| <li class="nav-item "> |
| <a class="nav-link nav-internal" href="../implementations.html"> |
| Implementations |
| </a> |
| </li> |
| |
| </ul> |
| </nav></div> |
| |
| |
| </div> |
| |
| |
| |
| <div class="sidebar-header-items__end"> |
| |
| <div class="navbar-item"><div class="kapa-ai-bot"> |
| <script |
| async |
| src="https://widget.kapa.ai/kapa-widget.bundle.js" |
| data-website-id="9db461d5-ac77-4b3f-a5c5-75efa78339d2" |
| data-project-name="Apache Arrow" |
| data-project-color="#000000" |
| data-project-logo="https://arrow.apache.org/img/arrow-logo_chevrons_white-txt_black-bg.png" |
| data-modal-disclaimer="This is a custom LLM with access to all [Arrow documentation](https://arrow.apache.org/docs/). Please include the language you are using in your question, e.g., Python, C++, Java, R, etc." |
| data-consent-required="true" |
| data-user-analytics-cookie-enabled="false" |
| data-consent-screen-disclaimer="By clicking "I agree, let's chat", you consent to the use of the AI assistant in accordance with kapa.ai's [Privacy Policy](https://www.kapa.ai/content/privacy-policy). This service uses reCAPTCHA, which requires your consent to Google's [Privacy Policy](https://policies.google.com/privacy) and [Terms of Service](https://policies.google.com/terms). By proceeding, you explicitly agree to both kapa.ai's and Google's privacy policies." |
| ></script> |
| |
| </div> |
| |
| </div> |
| |
| <div class="navbar-item"> |
| <div class="version-switcher__container dropdown pst-js-only"> |
| <button id="pst-version-switcher-button-3" |
| type="button" |
| class="version-switcher__button btn btn-sm dropdown-toggle" |
| data-bs-toggle="dropdown" |
| aria-haspopup="listbox" |
| aria-controls="pst-version-switcher-list-3" |
| aria-label="Version switcher list" |
| > |
| Choose version <!-- this text may get changed later by javascript --> |
| <span class="caret"></span> |
| </button> |
| <div id="pst-version-switcher-list-3" |
| class="version-switcher__menu dropdown-menu list-group-flush py-0" |
| role="listbox" aria-labelledby="pst-version-switcher-button-3"> |
| <!-- dropdown will be populated by javascript on page load --> |
| </div> |
| </div></div> |
| |
| <div class="navbar-item"> |
| |
| <button class="btn btn-sm nav-link pst-navbar-icon theme-switch-button pst-js-only" aria-label="Color mode" data-bs-title="Color mode" data-bs-placement="bottom" data-bs-toggle="tooltip"> |
| <i class="theme-switch fa-solid fa-sun fa-lg" data-mode="light" title="Light"></i> |
| <i class="theme-switch fa-solid fa-moon fa-lg" data-mode="dark" title="Dark"></i> |
| <i class="theme-switch fa-solid fa-circle-half-stroke fa-lg" data-mode="auto" title="System Settings"></i> |
| </button></div> |
| |
| <div class="navbar-item"><ul class="navbar-icon-links" |
| aria-label="Icon Links"> |
| <li class="nav-item"> |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://github.com/apache/arrow" title="GitHub" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-brands fa-square-github fa-lg" aria-hidden="true"></i> |
| <span class="sr-only">GitHub</span></a> |
| </li> |
| <li class="nav-item"> |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://www.linkedin.com/company/apache-arrow/" title="LinkedIn" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-brands fa-linkedin fa-lg" aria-hidden="true"></i> |
| <span class="sr-only">LinkedIn</span></a> |
| </li> |
| <li class="nav-item"> |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://bsky.app/profile/arrow.apache.org" title="BlueSky" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-brands fa-bluesky fa-lg" aria-hidden="true"></i> |
| <span class="sr-only">BlueSky</span></a> |
| </li> |
| </ul></div> |
| |
| </div> |
| |
| </div> |
| |
| <div class="sidebar-primary-items__start sidebar-primary__section"> |
| <div class="sidebar-primary-item"> |
| <nav class="bd-docs-nav bd-links" |
| aria-label="Section Navigation"> |
| <p class="bd-links__title" role="heading" aria-level="1">Section Navigation</p> |
| <div class="bd-toc-item navbar-nav"><ul class="current nav bd-sidenav"> |
| <li class="toctree-l1"><a class="reference internal" href="bug_reports.html">Bug reports and feature requests</a></li> |
| <li class="toctree-l1 has-children"><a class="reference internal" href="guide/index.html">New Contributor’s Guide</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul> |
| <li class="toctree-l2"><a class="reference internal" href="guide/architectural_overview.html">Architectural Overview</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="guide/communication.html">Communication</a></li> |
| <li class="toctree-l2 has-children"><a class="reference internal" href="guide/step_by_step/index.html">Steps in making your first PR</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul> |
| <li class="toctree-l3"><a class="reference internal" href="guide/step_by_step/set_up.html">Set up</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="guide/step_by_step/building.html">Building the Arrow libraries 🏋🏿♀️</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="guide/step_by_step/finding_issues.html">Finding good first issues 🔎</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="guide/step_by_step/arrow_codebase.html">Working on the Arrow codebase 🧐</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="guide/step_by_step/testing.html">Testing 🧪</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="guide/step_by_step/styling.html">Styling 😎</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="guide/step_by_step/pr_lifecycle.html">Lifecycle of a pull request</a></li> |
| </ul> |
| </details></li> |
| <li class="toctree-l2"><a class="reference internal" href="guide/documentation.html">Helping with documentation</a></li> |
| <li class="toctree-l2 has-children"><a class="reference internal" href="guide/tutorials/index.html">Tutorials</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul> |
| <li class="toctree-l3"><a class="reference internal" href="guide/tutorials/python_tutorial.html">Python tutorial</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="guide/tutorials/r_tutorial.html">R tutorials</a></li> |
| </ul> |
| </details></li> |
| <li class="toctree-l2"><a class="reference internal" href="guide/resources.html">Additional information and resources</a></li> |
| </ul> |
| </details></li> |
| <li class="toctree-l1"><a class="reference internal" href="overview.html">Contributing Overview</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="reviewing.html">Reviewing contributions</a></li> |
| <li class="toctree-l1 has-children"><a class="reference internal" href="cpp/index.html">C++ Development</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul> |
| <li class="toctree-l2"><a class="reference internal" href="cpp/building.html">Building Arrow C++</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="cpp/development.html">Development Guidelines</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="cpp/windows.html">Developing on Windows</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="cpp/emscripten.html">Cross compiling for WebAssembly with Emscripten</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="cpp/conventions.html">Conventions</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="cpp/fuzzing.html">Fuzzing Arrow C++</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="cpp/compute.html">Developing Arrow C++ Compute</a></li> |
| <li class="toctree-l2 has-children"><a class="reference internal" href="cpp/acero.html">Developing Acero</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul> |
| <li class="toctree-l3"><a class="reference internal" href="cpp/acero/swiss_table.html">Swiss Table</a></li> |
| </ul> |
| </details></li> |
| </ul> |
| </details></li> |
| <li class="toctree-l1 has-children"><a class="reference internal" href="java/index.html">Java Development</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul> |
| <li class="toctree-l2"><a class="reference internal" href="java/building.html">Building Arrow Java</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="java/development.html">Development Guidelines</a></li> |
| </ul> |
| </details></li> |
| <li class="toctree-l1 has-children"><a class="reference internal" href="python/index.html">Python Development</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul> |
| <li class="toctree-l2"><a class="reference internal" href="python/building.html">Building PyArrow</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="python/development.html">Developing PyArrow</a></li> |
| </ul> |
| </details></li> |
| <li class="toctree-l1 has-children"><a class="reference internal" href="continuous_integration/index.html">Continuous Integration</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul> |
| <li class="toctree-l2"><a class="reference internal" href="continuous_integration/overview.html">Continuous Integration</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="continuous_integration/docker.html">Running Docker Builds</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="continuous_integration/archery.html">Daily Development using Archery</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="continuous_integration/crossbow.html">Packaging and Testing with Crossbow</a></li> |
| </ul> |
| </details></li> |
| <li class="toctree-l1"><a class="reference internal" href="benchmarks.html">Benchmarks</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="documentation.html">Building the Documentation</a></li> |
| <li class="toctree-l1 current active"><a class="current reference internal" href="#">Release Management Guide</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="release_verification.html">Release Verification Process</a></li> |
| </ul> |
| </div> |
| </nav></div> |
| </div> |
| |
| |
| <div class="sidebar-primary-items__end sidebar-primary__section"> |
| <div class="sidebar-primary-item"> |
| <div id="ethical-ad-placement" |
| class="flat" |
| data-ea-publisher="readthedocs" |
| data-ea-type="readthedocs-sidebar" |
| data-ea-manual="true"> |
| </div></div> |
| </div> |
| |
| |
| </div> |
| |
| <main id="main-content" class="bd-main" role="main"> |
| |
| |
| <div class="bd-content"> |
| <div class="bd-article-container"> |
| |
| <div class="bd-header-article d-print-none"> |
| <div class="header-article-items header-article__inner"> |
| |
| <div class="header-article-items__start"> |
| |
| <div class="header-article-item"> |
| |
| <nav aria-label="Breadcrumb" class="d-print-none"> |
| <ul class="bd-breadcrumbs"> |
| |
| <li class="breadcrumb-item breadcrumb-home"> |
| <a href="../index.html" class="nav-link" aria-label="Home"> |
| <i class="fa-solid fa-home"></i> |
| </a> |
| </li> |
| |
| <li class="breadcrumb-item"><a href="index.html" class="nav-link">Development</a></li> |
| |
| <li class="breadcrumb-item active" aria-current="page"><span class="ellipsis">Release Management Guide</span></li> |
| </ul> |
| </nav> |
| </div> |
| |
| </div> |
| |
| |
| </div> |
| </div> |
| |
| |
| |
| |
| <div id="searchbox"></div> |
| <article class="bd-article"> |
| |
| <section id="release-management-guide"> |
| <span id="release"></span><h1>Release Management Guide<a class="headerlink" href="#release-management-guide" title="Link to this heading">#</a></h1> |
| <p>This page provides detailed information on the steps followed to perform |
| a release. It can be used both as a guide to learn the Apache Arrow release |
| process and as a comprehensive checklist for the Release Manager when |
| performing a release. The person acting as Release Manager must at least have |
| committer status in order to perform the tasks below. If the Release Manager is |
| a committer but not a member of the PMC, some tasks will need to be delegated |
| to a PMC member and these are marked below accordingly.</p> |
| <section id="principles"> |
| <h2>Principles<a class="headerlink" href="#principles" title="Link to this heading">#</a></h2> |
| <p>The Apache Arrow Release follows the guidelines defined at the |
| <a class="reference external" href="https://www.apache.org/legal/release-policy.html">Apache Software Foundation Release Policy</a>.</p> |
| </section> |
| <section id="preparing-for-the-release"> |
| <h2>Preparing for the release<a class="headerlink" href="#preparing-for-the-release" title="Link to this heading">#</a></h2> |
| <p>In advance to the Release date the Release Manager communicates with the community |
| usually via Zulip, Mailing List or the bi-weekly community call about the |
| upcoming release and proposes a feature freeze date.</p> |
| <p>The feature freeze date is the date the maintenance branch is created and |
| from that point no new features are allowed to be added to the release, unless there |
| is community consensus to allow it, and only bug fixes will be accepted.</p> |
| <p>Once the feature freeze is in place issues labelled as <code class="docutils literal notranslate"><span class="pre">blocker</span></code> must be resolved before |
| the first release candidate can be created.</p> |
| <p>Before creating a release candidate, the Release Manager must ensure that any |
| resolved GitHub issues have the appropriate milestone set so that the changelog |
| is generated properly.</p> |
| <p>Note that pull requests without a corresponding GitHub issue won’t be detected |
| by the cherry-pick script and must be cherry-picked manually by the release |
| manager onto the maintenance branch. Examples include MINOR and Dependabot pull |
| requests. For this reason, it’s encouraged to avoid the need for manual |
| cherry-picking by creating issues for any pull requests that are merged to the |
| default branch after the release maintenance branch has been created.</p> |
| <details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3 sd-shadow-md sd-fade-in-slide-down"> |
| <summary class="sd-summary-title sd-card-header sd-fs-5"> |
| <span class="sd-summary-text">Requirements</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> |
| <blockquote> |
| <div><p class="sd-card-text">Some steps of the release require being a committer or a PMC member.</p> |
| <ul class="simple"> |
| <li><p class="sd-card-text">Install the <a class="reference internal" href="continuous_integration/archery.html#archery"><span class="std std-ref">Archery</span></a> utility which is required for the release.</p></li> |
| <li><p class="sd-card-text">You must not have any arrow-cpp or parquet-cpp environment variables defined except CC or CXX if you want to build with something other than GCC by default (e.g. clang).</p></li> |
| <li><p class="sd-card-text">A GPG key in the Apache Web of Trust to sign binary artifacts. This will have to be cross signed by other Apache committers/PMC members. If you have multiple GPG keys, you must set the correct GPG key ID in <code class="docutils literal notranslate"><span class="pre">~/.gnupg/gpg.conf</span></code> by adding:</p></li> |
| </ul> |
| <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>default-key ${YOUR_GPG_KEY_ID} |
| </pre></div> |
| </div> |
| <ul class="simple"> |
| <li><p class="sd-card-text">The GPG key needs to be added to this <a class="reference external" href="https://dist.apache.org/repos/dist/dev/arrow/">SVN repo</a> and <a class="reference external" href="https://dist.apache.org/repos/dist/release/arrow/">this one</a>.</p></li> |
| <li><p class="sd-card-text">Have the build requirements for cpp and c_glib installed.</p></li> |
| <li><p class="sd-card-text">Install <code class="docutils literal notranslate"><span class="pre">en_US.UTF-8</span></code> locale. You can confirm available locales by <code class="docutils literal notranslate"><span class="pre">locale</span> <span class="pre">-a</span></code>.</p></li> |
| <li><p class="sd-card-text">Install Python 3 as python</p></li> |
| <li><p class="sd-card-text">Create dev/release/.env from dev/release/.env.example. See the comments in dev/release/.env.example how to set each variable.</p></li> |
| <li><p class="sd-card-text">Setup <a class="reference internal" href="continuous_integration/crossbow.html#crossbow"><span class="std std-ref">Crossbow</span></a> as defined.</p></li> |
| <li><p class="sd-card-text">Have Docker and Docker Compose installed.</p></li> |
| <li><p class="sd-card-text">Have GitHub CLI installed.</p></li> |
| </ul> |
| </div></blockquote> |
| </div> |
| </details></section> |
| <section id="before-creating-a-release-candidate"> |
| <h2>Before creating a Release Candidate<a class="headerlink" href="#before-creating-a-release-candidate" title="Link to this heading">#</a></h2> |
| <p>Ensure local tags are removed, gpg-agent is set and GitHub issues are correctly |
| assigned.</p> |
| <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># Delete the local tag for RC1 or later</span> |
| <span class="n">git</span> <span class="n">tag</span> <span class="o">-</span><span class="n">d</span> <span class="n">apache</span><span class="o">-</span><span class="n">arrow</span><span class="o">-<</span><span class="n">version</span><span class="o">></span> |
| |
| <span class="c1"># Setup gpg agent for signing binary artifacts</span> |
| <span class="n">source</span> <span class="n">dev</span><span class="o">/</span><span class="n">release</span><span class="o">/</span><span class="n">setup</span><span class="o">-</span><span class="n">gpg</span><span class="o">-</span><span class="n">agent</span><span class="o">.</span><span class="n">sh</span> |
| |
| <span class="c1"># Curate the release</span> |
| <span class="c1"># The end of the generated report shows any GitHub issues with the wrong</span> |
| <span class="c1"># version number assigned.</span> |
| <span class="n">archery</span> <span class="n">release</span> <span class="n">curate</span> <span class="o"><</span><span class="n">version</span><span class="o">></span> |
| </pre></div> |
| </div> |
| <p>Ensure a major version milestone for a follow up release is created on GitHub. This will |
| automatically be used by our merge script as the new version for issues closed when |
| the maintenance branch is created.</p> |
| </section> |
| <section id="patch-releases"> |
| <h2>Patch Releases<a class="headerlink" href="#patch-releases" title="Link to this heading">#</a></h2> |
| <p>We usually create patch releases once a major breaking issue has been identified. |
| Issues that are identified as major breaking issues can be security fixes, broken packages |
| for specific builds and others.</p> |
| <p>Any developer can ask for a patch release to be generated sending an email to the |
| <a class="reference external" href="https://arrow.apache.org/community/">Arrow development mailing-list</a> with the reason |
| of why a new release is necessary. |
| If there is consensus and there is a Release Manager willing to make the effort to create |
| the release a patch release can be created.</p> |
| <p>Committers can tag issues that should be included on the next patch release using the |
| <code class="docutils literal notranslate"><span class="pre">backport-candidate</span></code> label. Is the responsibility of the author or the committer to add the |
| label to the issue to help the Release Manager identify the issues that should be backported.</p> |
| <p>If a specific issue is identified as the reason to create a patch release the Release Manager |
| should validate that, at least, this issue is correctly tagged and included in the patch release.</p> |
| <p>Be sure to go through on the following checklist:</p> |
| <ol class="arabic simple"> |
| <li><p>Create milestone</p></li> |
| <li><p>Create maintenance branch</p></li> |
| <li><p>Include issue that was requested as requiring new patch release</p></li> |
| <li><p>Add new milestone to issues with <code class="docutils literal notranslate"><span class="pre">backport-candidate</span></code> label</p></li> |
| <li><p>cherry-pick issues into maintenance branch</p></li> |
| </ol> |
| </section> |
| <section id="creating-a-release-candidate"> |
| <h2>Creating a Release Candidate<a class="headerlink" href="#creating-a-release-candidate" title="Link to this heading">#</a></h2> |
| <p>These are the different steps that are required to create a Release Candidate.</p> |
| <p>For the initial Release Candidate on a major release, we will create a maintenance |
| branch from main. This is done on the feature freeze date.</p> |
| <p>Follow up Release Candidates will update the maintenance branch by cherry-picking |
| specific commits.</p> |
| <p>For the initial Release Candidate for a minor or a patch release we will create |
| a maintenance branch from the previous corresponding release. For example, |
| for a 15.0.1 patch we will create a maint-15.0.1 branch from maint-15.0.0 and for |
| a maint-15.0.2 we will create it from maint-15.0.1. Once the maintenance branch is |
| created we will update the created maintenance branch by cherry-picking specific |
| commits.</p> |
| <section id="create-or-update-the-corresponding-maintenance-branch"> |
| <h3>Create or update the corresponding maintenance branch<a class="headerlink" href="#create-or-update-the-corresponding-maintenance-branch" title="Link to this heading">#</a></h3> |
| <div class="sd-tab-set docutils"> |
| <input checked="checked" id="sd-tab-item-0" name="sd-tab-set-0" type="radio"> |
| <label class="sd-tab-label" for="sd-tab-item-0"> |
| Initial Release Candidate</label><div class="sd-tab-content docutils"> |
| <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># Execute the following from an up to date main branch.</span> |
| <span class="c1"># This will create a branch locally called maint-X.Y.Z.</span> |
| <span class="c1"># X.Y.Z corresponds with the Major, Minor and Patch version number</span> |
| <span class="c1"># of the release respectively. As an example 9.0.0</span> |
| <span class="n">archery</span> <span class="n">release</span> <span class="n">cherry</span><span class="o">-</span><span class="n">pick</span> <span class="n">X</span><span class="o">.</span><span class="n">Y</span><span class="o">.</span><span class="n">Z</span> <span class="o">--</span><span class="n">execute</span> |
| <span class="c1"># Push the maintenance branch to the remote repository</span> |
| <span class="n">git</span> <span class="n">push</span> <span class="o">-</span><span class="n">u</span> <span class="n">upstream</span> <span class="n">maint</span><span class="o">-</span><span class="n">X</span><span class="o">.</span><span class="n">Y</span><span class="o">.</span><span class="n">Z</span> |
| </pre></div> |
| </div> |
| </div> |
| <input id="sd-tab-item-1" name="sd-tab-set-0" type="radio"> |
| <label class="sd-tab-label" for="sd-tab-item-1"> |
| Follow up Release Candidates</label><div class="sd-tab-content docutils"> |
| <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># First run in dry-mode to see which commits will be cherry-picked.</span> |
| <span class="c1"># If there are commits that we don't want to get applied, ensure the</span> |
| <span class="c1"># milestone on GitHub is set to the following release.</span> |
| <span class="n">archery</span> <span class="n">release</span> <span class="n">cherry</span><span class="o">-</span><span class="n">pick</span> <span class="n">X</span><span class="o">.</span><span class="n">Y</span><span class="o">.</span><span class="n">Z</span> <span class="o">--</span><span class="k">continue</span> |
| <span class="c1"># Update the maintenance branch with the previous commits</span> |
| <span class="n">archery</span> <span class="n">release</span> <span class="n">cherry</span><span class="o">-</span><span class="n">pick</span> <span class="n">X</span><span class="o">.</span><span class="n">Y</span><span class="o">.</span><span class="n">Z</span> <span class="o">--</span><span class="k">continue</span> <span class="o">--</span><span class="n">execute</span> |
| <span class="c1"># Push the updated maintenance branch to the remote repository</span> |
| <span class="n">git</span> <span class="n">push</span> <span class="o">-</span><span class="n">u</span> <span class="n">upstream</span> <span class="n">maint</span><span class="o">-</span><span class="n">X</span><span class="o">.</span><span class="n">Y</span><span class="o">.</span><span class="n">Z</span> |
| </pre></div> |
| </div> |
| </div> |
| </div> |
| </section> |
| <section id="optional-test-before-creating-a-release-candidate"> |
| <h3>Optional: Test Before Creating a Release Candidate<a class="headerlink" href="#optional-test-before-creating-a-release-candidate" title="Link to this heading">#</a></h3> |
| <p>Some release managers prefer to perform testing before creating the first |
| release candidate to avoid the need to create multiple release candidates within |
| a given release.</p> |
| <p>To test before creating a release candidate:</p> |
| <ul class="simple"> |
| <li><p>Create a pull request from the up-to-date maint-X.Y.Z branch onto main</p></li> |
| <li><p>Title the pull request “WIP: Dummy PR to check maint-X.Y.Z status”</p></li> |
| <li><p>Comment on the pull request to trigger the relevant Crossbow jobs:</p> |
| <ul> |
| <li><p><code class="docutils literal notranslate"><span class="pre">@github-actions</span> <span class="pre">crossbow</span> <span class="pre">submit</span> <span class="pre">--group</span> <span class="pre">verify-rc-source</span></code></p></li> |
| <li><p><code class="docutils literal notranslate"><span class="pre">@github-actions</span> <span class="pre">crossbow</span> <span class="pre">submit</span> <span class="pre">--group</span> <span class="pre">packaging</span></code></p></li> |
| </ul> |
| </li> |
| </ul> |
| </section> |
| <section id="create-the-release-candidate-branch-from-the-updated-maintenance-branch"> |
| <h3>Create the Release Candidate branch from the updated maintenance branch<a class="headerlink" href="#create-the-release-candidate-branch-from-the-updated-maintenance-branch" title="Link to this heading">#</a></h3> |
| <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># Start from the updated maintenance branch.</span> |
| <span class="n">git</span> <span class="n">checkout</span> <span class="n">maint</span><span class="o">-</span><span class="n">X</span><span class="o">.</span><span class="n">Y</span><span class="o">.</span><span class="n">Z</span> |
| |
| <span class="c1"># The following script will create a branch for the Release Candidate,</span> |
| <span class="c1"># place the necessary commits updating the version number and then create a git tag</span> |
| <span class="c1"># on OSX use gnu-sed with homebrew: brew install gnu-sed (and export to $PATH)</span> |
| <span class="c1">#</span> |
| <span class="c1"># <rc-number> starts at 0 and increments every time the Release Candidate is created</span> |
| <span class="c1"># so for the first RC this would be: dev/release/01-prepare.sh 4.0.0 5.0.0 0</span> |
| <span class="n">dev</span><span class="o">/</span><span class="n">release</span><span class="o">/</span><span class="mi">01</span><span class="o">-</span><span class="n">prepare</span><span class="o">.</span><span class="n">sh</span> <span class="o"><</span><span class="n">version</span><span class="o">></span> <span class="o"><</span><span class="nb">next</span><span class="o">-</span><span class="n">version</span><span class="o">></span> <span class="o"><</span><span class="n">rc</span><span class="o">-</span><span class="n">number</span><span class="o">></span> |
| |
| <span class="c1"># Push the release candidate tag</span> |
| <span class="n">git</span> <span class="n">push</span> <span class="o">-</span><span class="n">u</span> <span class="n">upstream</span> <span class="n">apache</span><span class="o">-</span><span class="n">arrow</span><span class="o">-<</span><span class="n">version</span><span class="o">>-</span><span class="n">rc</span><span class="o"><</span><span class="n">rc</span><span class="o">-</span><span class="n">number</span><span class="o">></span> |
| <span class="c1"># Push the release candidate branch in order to trigger verification jobs later</span> |
| <span class="n">git</span> <span class="n">push</span> <span class="o">-</span><span class="n">u</span> <span class="n">upstream</span> <span class="n">release</span><span class="o">-<</span><span class="n">version</span><span class="o">>-</span><span class="n">rc</span><span class="o"><</span><span class="n">rc</span><span class="o">-</span><span class="n">number</span><span class="o">></span> |
| </pre></div> |
| </div> |
| <p>Once the tag is created the GitHub Actions workflow on <code class="docutils literal notranslate"><span class="pre">verify-rc.yml</span></code> will be triggered to verify |
| the release candidate.</p> |
| <p>The <code class="docutils literal notranslate"><span class="pre">release_candidate.yml</span></code> workflow will also be triggered which will sign the source code |
| for the release and will create a GitHub pre-release with the corresponding source and signatures.</p> |
| </section> |
| <section id="build-source-and-binaries-and-submit-them"> |
| <h3>Build source and binaries and submit them<a class="headerlink" href="#build-source-and-binaries-and-submit-them" title="Link to this heading">#</a></h3> |
| <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># Waits for previous workflows to finish and uploads source and signatures to SVN.</span> |
| <span class="c1">#</span> |
| <span class="c1"># NOTE: This must be run by a PMC member</span> |
| <span class="c1"># NOTE: You need to have GitHub CLI installed to run this script.</span> |
| <span class="n">dev</span><span class="o">/</span><span class="n">release</span><span class="o">/</span><span class="mi">02</span><span class="o">-</span><span class="n">source</span><span class="o">.</span><span class="n">sh</span> <span class="o"><</span><span class="n">version</span><span class="o">></span> <span class="o"><</span><span class="n">rc</span><span class="o">-</span><span class="n">number</span><span class="o">></span> |
| |
| <span class="c1"># Submit binary tasks using crossbow, the command will output the crossbow build id</span> |
| <span class="n">dev</span><span class="o">/</span><span class="n">release</span><span class="o">/</span><span class="mi">03</span><span class="o">-</span><span class="n">binary</span><span class="o">-</span><span class="n">submit</span><span class="o">.</span><span class="n">sh</span> <span class="o"><</span><span class="n">version</span><span class="o">></span> <span class="o"><</span><span class="n">rc</span><span class="o">-</span><span class="n">number</span><span class="o">></span> |
| |
| <span class="c1"># Wait for the crossbow jobs to finish</span> |
| <span class="n">archery</span> <span class="n">crossbow</span> <span class="n">status</span> <span class="o"><</span><span class="n">crossbow</span><span class="o">-</span><span class="n">build</span><span class="o">-</span><span class="nb">id</span><span class="o">></span> |
| |
| <span class="c1"># Download the produced binaries</span> |
| <span class="c1"># This will download packages generated from the archery tasks</span> |
| <span class="c1"># to a directory called packages/release-<version>-rc<rc-number></span> |
| <span class="n">dev</span><span class="o">/</span><span class="n">release</span><span class="o">/</span><span class="mi">04</span><span class="o">-</span><span class="n">binary</span><span class="o">-</span><span class="n">download</span><span class="o">.</span><span class="n">sh</span> <span class="o"><</span><span class="n">version</span><span class="o">></span> <span class="o"><</span><span class="n">rc</span><span class="o">-</span><span class="n">number</span><span class="o">></span> |
| |
| <span class="c1"># Sign and upload the binaries</span> |
| <span class="c1">#</span> |
| <span class="c1"># NOTE: This must be run by a PMC member</span> |
| <span class="c1">#</span> |
| <span class="c1"># On macOS the only way I could get this to work was running "echo "UPDATESTARTUPTTY" | gpg-connect-agent" before running this comment</span> |
| <span class="c1"># otherwise I got errors referencing "ioctl" errors.</span> |
| <span class="n">dev</span><span class="o">/</span><span class="n">release</span><span class="o">/</span><span class="mi">05</span><span class="o">-</span><span class="n">binary</span><span class="o">-</span><span class="n">upload</span><span class="o">.</span><span class="n">sh</span> <span class="o"><</span><span class="n">version</span><span class="o">></span> <span class="o"><</span><span class="n">rc</span><span class="o">-</span><span class="n">number</span><span class="o">></span> |
| |
| <span class="c1"># Sign and upload MATLAB artifacts to the GitHub Releases area.</span> |
| <span class="c1">#</span> |
| <span class="c1"># NOTE: This must be run by a PMC member</span> |
| <span class="c1"># NOTE: You need to have GitHub CLI installed to run this script.</span> |
| <span class="n">dev</span><span class="o">/</span><span class="n">release</span><span class="o">/</span><span class="mi">06</span><span class="o">-</span><span class="n">matlab</span><span class="o">-</span><span class="n">upload</span><span class="o">.</span><span class="n">sh</span> <span class="o"><</span><span class="n">version</span><span class="o">></span> <span class="o"><</span><span class="n">rc</span><span class="o">-</span><span class="n">number</span><span class="o">></span> |
| |
| <span class="c1"># Move the Release Candidate GitHub Release from draft to published state</span> |
| <span class="c1"># This will update the artifacts download URL which will be available for the</span> |
| <span class="c1"># verification step.</span> |
| <span class="n">dev</span><span class="o">/</span><span class="n">release</span><span class="o">/</span><span class="mi">07</span><span class="o">-</span><span class="n">publish</span><span class="o">-</span><span class="n">gh</span><span class="o">-</span><span class="n">release</span><span class="o">.</span><span class="n">sh</span> <span class="o"><</span><span class="n">version</span><span class="o">></span> <span class="o"><</span><span class="n">rc</span><span class="o">-</span><span class="n">number</span><span class="o">></span> |
| |
| <span class="c1"># Start verifications for binaries and wheels</span> |
| <span class="n">dev</span><span class="o">/</span><span class="n">release</span><span class="o">/</span><span class="mi">08</span><span class="o">-</span><span class="n">binary</span><span class="o">-</span><span class="n">verify</span><span class="o">.</span><span class="n">sh</span> <span class="o"><</span><span class="n">version</span><span class="o">></span> <span class="o"><</span><span class="n">rc</span><span class="o">-</span><span class="n">number</span><span class="o">></span> |
| </pre></div> |
| </div> |
| </section> |
| <section id="verify-the-release"> |
| <h3>Verify the Release<a class="headerlink" href="#verify-the-release" title="Link to this heading">#</a></h3> |
| <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># Once the automatic verification has passed start the vote thread</span> |
| <span class="c1"># on dev@arrow.apache.org. To regenerate the email template use</span> |
| <span class="n">SOURCE_DEFAULT</span><span class="o">=</span><span class="mi">0</span> <span class="n">SOURCE_VOTE</span><span class="o">=</span><span class="mi">1</span> <span class="n">dev</span><span class="o">/</span><span class="n">release</span><span class="o">/</span><span class="mi">02</span><span class="o">-</span><span class="n">source</span><span class="o">.</span><span class="n">sh</span> <span class="o"><</span><span class="n">version</span><span class="o">></span> <span class="o"><</span><span class="n">rc</span><span class="o">-</span><span class="n">number</span><span class="o">></span> |
| </pre></div> |
| </div> |
| <p>See <a class="reference internal" href="release_verification.html#release-verification"><span class="std std-ref">Release Verification Process</span></a> for details.</p> |
| </section> |
| </section> |
| <section id="voting-and-approval"> |
| <h2>Voting and approval<a class="headerlink" href="#voting-and-approval" title="Link to this heading">#</a></h2> |
| <p>Start the vote thread on <a class="reference external" href="mailto:dev%40arrow.apache.org">dev<span>@</span>arrow<span>.</span>apache<span>.</span>org</a> and supply instructions for verifying the integrity of the release. |
| Approval requires a net of 3 +1 votes from PMC members. A release cannot be vetoed.</p> |
| </section> |
| <section id="post-release-tasks"> |
| <h2>Post-release tasks<a class="headerlink" href="#post-release-tasks" title="Link to this heading">#</a></h2> |
| <p>After the release vote, we must undertake many tasks to update source artifacts, binary builds, and the Arrow website.</p> |
| <p>Be sure to go through on the following checklist:</p> |
| <ol class="arabic simple"> |
| <li><p>Update the released milestone Date and set to “Closed” on GitHub</p></li> |
| <li><p>Merge changes on release branch to maintenance branch for patch releases</p></li> |
| <li><p>Add the new release to the Apache Reporter System</p></li> |
| <li><p>Push release tag</p></li> |
| <li><p>Upload source</p></li> |
| <li><p>Upload binaries</p></li> |
| <li><p>Update website</p></li> |
| <li><p>Update GitHub Release Notes</p></li> |
| <li><p>Update Homebrew packages</p></li> |
| <li><p>Update MSYS2 package</p></li> |
| <li><p>Upload RubyGems</p></li> |
| <li><p>Update conda recipes</p></li> |
| <li><p>Upload wheels/sdist to pypi</p></li> |
| <li><p>Update R packages</p></li> |
| <li><p>Update vcpkg port</p></li> |
| <li><p>Update Conan recipe</p></li> |
| <li><p>Bump versions</p></li> |
| <li><p>Update docs</p></li> |
| <li><p>Update version in Apache Arrow Cookbook</p></li> |
| <li><p>Announce the new release</p></li> |
| <li><p>Publish release blog posts</p></li> |
| <li><p>Announce the release on BlueSky</p></li> |
| <li><p>Remove old artifacts</p></li> |
| </ol> |
| <details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3 sd-shadow-md sd-fade-in-slide-down"> |
| <summary class="sd-summary-title sd-card-header sd-fs-5"> |
| <span class="sd-summary-text">Merge changes on release branch to maintenance branch for patch releases</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> |
| <p class="sd-card-text">Merge <code class="docutils literal notranslate"><span class="pre">release-X.Y.Z-rcN</span></code> to <code class="docutils literal notranslate"><span class="pre">maint-X.Y.Z</span></code>:</p> |
| <div class="highlight-Bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># git checkout maint-10.0.0</span> |
| git<span class="w"> </span>checkout<span class="w"> </span>maint-X.Y.Z |
| <span class="c1"># git merge release-10.0.0-rc0</span> |
| git<span class="w"> </span>merge<span class="w"> </span>release-X.Y.Z-rcN |
| <span class="c1"># git push -u upstream maint-10.0.0</span> |
| git<span class="w"> </span>push<span class="w"> </span>-u<span class="w"> </span>upstream<span class="w"> </span>maint-X.Y.Z |
| </pre></div> |
| </div> |
| </div> |
| </details><details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3 sd-shadow-md sd-fade-in-slide-down"> |
| <summary class="sd-summary-title sd-card-header sd-fs-5"> |
| <span class="sd-summary-text">Add the new release to the Apache Reporter System</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> |
| <p class="sd-card-text">Add relevant release data for Arrow to <a class="reference external" href="https://reporter.apache.org/addrelease.html?arrow">Apache reporter</a>.</p> |
| </div> |
| </details><details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3 sd-shadow-md sd-fade-in-slide-down"> |
| <summary class="sd-summary-title sd-card-header sd-fs-5"> |
| <span class="sd-summary-text">Push release tag and create GitHub Release</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> |
| <p class="sd-card-text">A committer must push the release tag to GitHub:</p> |
| <div class="highlight-Bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># dev/release/post-01-tag.sh 0.1.0 0</span> |
| dev/release/post-01-tag.sh<span class="w"> </span><version><span class="w"> </span><rc> |
| </pre></div> |
| </div> |
| </div> |
| </details><details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3 sd-shadow-md sd-fade-in-slide-down"> |
| <summary class="sd-summary-title sd-card-header sd-fs-5"> |
| <span class="sd-summary-text">Upload source release artifacts to Subversion</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> |
| <p class="sd-card-text">A PMC member must commit the source release artifacts to Subversion:</p> |
| <div class="highlight-Bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># dev/release/post-02-upload.sh 0.1.0 0</span> |
| dev/release/post-02-upload.sh<span class="w"> </span><version><span class="w"> </span><rc> |
| </pre></div> |
| </div> |
| </div> |
| </details><details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3 sd-shadow-md sd-fade-in-slide-down"> |
| <summary class="sd-summary-title sd-card-header sd-fs-5"> |
| <span class="sd-summary-text">Upload binary release artifacts to Artifactory</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> |
| <p class="sd-card-text">A committer must upload the binary release artifacts to Artifactory and create the GitHub Release:</p> |
| <div class="highlight-Bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># dev/release/post-03-binary.sh 0.1.0 0</span> |
| dev/release/post-03-binary.sh<span class="w"> </span><version><span class="w"> </span><rc<span class="w"> </span>number> |
| </pre></div> |
| </div> |
| </div> |
| </details><details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3 sd-shadow-md sd-fade-in-slide-down"> |
| <summary class="sd-summary-title sd-card-header sd-fs-5"> |
| <span class="sd-summary-text">Update website</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> |
| <p class="sd-card-text">Add a release note for the new version to our website and update the latest release information:</p> |
| <div class="highlight-Bash notranslate"><div class="highlight"><pre><span></span><span class="c1">## Prepare your fork of https://github.com/apache/arrow-site .</span> |
| <span class="c1">## You need to do this only once.</span> |
| <span class="c1"># git clone git@github.com:kou/arrow-site.git ../</span> |
| git<span class="w"> </span>clone<span class="w"> </span>git@github.com:<YOUR_GITHUB_ID>/arrow-site.git<span class="w"> </span>../ |
| <span class="nb">cd</span><span class="w"> </span>../arrow-site |
| <span class="c1">## Add git@github.com:apache/arrow-site.git as "upstream" remote.</span> |
| git<span class="w"> </span>remote<span class="w"> </span>add<span class="w"> </span>upstream<span class="w"> </span>git@github.com:apache/arrow-site.git |
| <span class="nb">cd</span><span class="w"> </span>- |
| |
| <span class="c1">## Generate a release note for the new version, update the</span> |
| <span class="c1">## latest release information automatically.</span> |
| <span class="c1"># dev/release/post-04-website.sh 9.0.0 10.0.0</span> |
| dev/release/post-04-website.sh<span class="w"> </span>OLD_X.OLD_Y.OLD_Z<span class="w"> </span>X.Y.Z |
| </pre></div> |
| </div> |
| <p class="sd-card-text">This script pushes a <code class="docutils literal notranslate"><span class="pre">release-note-X.Y.Z</span></code> branch to your <code class="docutils literal notranslate"><span class="pre">apache/arrow-site</span></code> fork. You need to open a pull request from the <code class="docutils literal notranslate"><span class="pre">release-note-X.Y.Z</span></code> branch on your Web browser.</p> |
| </div> |
| </details><details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3 sd-shadow-md sd-fade-in-slide-down"> |
| <summary class="sd-summary-title sd-card-header sd-fs-5"> |
| <span class="sd-summary-text">Update Release Notes in apache/arrow GitHub Release</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> |
| <p class="sd-card-text">A committer must run the following script. This has to be done once the |
| Pull Request from the Update Website script has been merged:</p> |
| <div class="highlight-Bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># dev/release/post-05-update-gh-release-notes.sh 17.0.0</span> |
| dev/release/post-05-update-gh-release-notes.sh<span class="w"> </span><version> |
| </pre></div> |
| </div> |
| </div> |
| </details><details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3 sd-shadow-md sd-fade-in-slide-down"> |
| <summary class="sd-summary-title sd-card-header sd-fs-5"> |
| <span class="sd-summary-text">Update Homebrew packages</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> |
| <p class="sd-card-text">Open a pull request to Homebrew:</p> |
| <div class="highlight-Bash notranslate"><div class="highlight"><pre><span></span><span class="c1">## You need to run this on macOS or Linux that Homebrew is installed.</span> |
| |
| <span class="c1">## Fork https://github.com/Homebrew/homebrew-core on GitHub.</span> |
| <span class="c1">## You need to do this only once.</span> |
| <span class="c1">##</span> |
| <span class="c1">## Prepare your fork of https://github.com/Homebrew/homebrew-core .</span> |
| <span class="c1">## You need to do this only once.</span> |
| <span class="nb">cd</span><span class="w"> </span><span class="s2">"</span><span class="k">$(</span>brew<span class="w"> </span>--repository<span class="w"> </span>homebrew/core<span class="k">)</span><span class="s2">"</span> |
| <span class="c1"># git remote add kou git@github.com:kou/homebrew-core.git</span> |
| git<span class="w"> </span>remote<span class="w"> </span>add<span class="w"> </span><YOUR_GITHUB_ID><span class="w"> </span>git@github.com:<YOUR_GITHUB_ID>/homebrew-core.git |
| <span class="nb">cd</span><span class="w"> </span>- |
| |
| <span class="c1"># dev/release/post-12-homebrew.sh 10.0.0 kou</span> |
| dev/release/post-12-homebrew.sh<span class="w"> </span>X.Y.Z<span class="w"> </span><YOUR_GITHUB_ID> |
| </pre></div> |
| </div> |
| <p class="sd-card-text">This script pushes a <code class="docutils literal notranslate"><span class="pre">apache-arrow-X.Y.Z</span></code> branch to your <code class="docutils literal notranslate"><span class="pre">Homebrew/homebrew-core</span></code> fork. You need to create a pull request from the <code class="docutils literal notranslate"><span class="pre">apache-arrow-X.Y.Z</span></code> branch with <code class="docutils literal notranslate"><span class="pre">apache-arrow,</span> <span class="pre">apache-arrow-glib:</span> <span class="pre">X.Y.Z</span></code> title on your Web browser.</p> |
| </div> |
| </details><details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3 sd-shadow-md sd-fade-in-slide-down"> |
| <summary class="sd-summary-title sd-card-header sd-fs-5"> |
| <span class="sd-summary-text">Update MSYS2 packages</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> |
| <p class="sd-card-text">Open a pull request to MSYS2:</p> |
| <div class="highlight-Bash notranslate"><div class="highlight"><pre><span></span><span class="c1">## Fork https://github.com/msys2/MINGW-packages on GitHub.</span> |
| <span class="c1">## You need to do this only once.</span> |
| <span class="c1">##</span> |
| <span class="c1">## Prepare your fork of https://github.com/msys2/MINGW-packages .</span> |
| <span class="c1">## You need to do this only once.</span> |
| <span class="c1"># git clone git@github.com:kou/MINGW-packages.git ../</span> |
| git<span class="w"> </span>clone<span class="w"> </span>git@github.com:<YOUR_GITHUB_ID>/MINGW-packages.git<span class="w"> </span>../ |
| <span class="nb">cd</span><span class="w"> </span>../MINGW-packages |
| <span class="c1">## Add https://github.com/msys2/MINGW-packages.git as "upstream" remote.</span> |
| git<span class="w"> </span>remote<span class="w"> </span>add<span class="w"> </span>upstream<span class="w"> </span>https://github.com/msys2/MINGW-packages.git |
| <span class="nb">cd</span><span class="w"> </span>- |
| |
| <span class="c1"># dev/release/post-11-msys2.sh 10.0.0 ../MINGW-packages</span> |
| dev/release/post-11-msys2.sh<span class="w"> </span>X.Y.Z<span class="w"> </span><YOUR_MINGW_PACKAGES_FORK> |
| </pre></div> |
| </div> |
| <p class="sd-card-text">This script pushes a <code class="docutils literal notranslate"><span class="pre">arrow-X.Y.Z</span></code> branch to your <code class="docutils literal notranslate"><span class="pre">msys2/MINGW-packages</span></code> fork. You need to create a pull request from the <code class="docutils literal notranslate"><span class="pre">arrow-X.Y.Z</span></code> branch with <code class="docutils literal notranslate"><span class="pre">arrow:</span> <span class="pre">Update</span> <span class="pre">to</span> <span class="pre">X.Y.Z</span></code> title on your Web browser.</p> |
| </div> |
| </details><details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3 sd-shadow-md sd-fade-in-slide-down"> |
| <summary class="sd-summary-title sd-card-header sd-fs-5"> |
| <span class="sd-summary-text">Update RubyGems</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> |
| <p class="sd-card-text">You need an account on <a class="reference external" href="https://rubygems.org/">https://rubygems.org/</a> to release Ruby packages.</p> |
| <p class="sd-card-text">If you have an account on <a class="reference external" href="https://rubygems.org/">https://rubygems.org/</a> , you need to join owners of our gems.</p> |
| <p class="sd-card-text">Existing owners can add a new account to the owners of them by the following command line:</p> |
| <div class="highlight-Bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># dev/release/account-ruby.sh raulcd</span> |
| dev/release/account-ruby.sh<span class="w"> </span>NEW_ACCOUNT |
| </pre></div> |
| </div> |
| <p class="sd-card-text">Update RubyGems after Homebrew packages and MSYS2 packages are updated:</p> |
| <div class="highlight-Bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># dev/release/post-06-ruby.sh 10.0.0</span> |
| dev/release/post-06-ruby.sh<span class="w"> </span>X.Y.Z |
| </pre></div> |
| </div> |
| </div> |
| </details><details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3 sd-shadow-md sd-fade-in-slide-down"> |
| <summary class="sd-summary-title sd-card-header sd-fs-5"> |
| <span class="sd-summary-text">Upload wheels/sdist to PyPI</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> |
| <p class="sd-card-text">pip binary packages (called “wheels”) and source package (called “sdist”) are built using the crossbow tool that we used above during the release candidate creation process and then uploaded to PyPI (Python Package Index) under the pyarrow package.</p> |
| <p class="sd-card-text">We use the twine tool to upload wheels to PyPI:</p> |
| <div class="highlight-Bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># dev/release/post-09-python.sh 10.0.0</span> |
| dev/release/post-09-python.sh<span class="w"> </span><version> |
| </pre></div> |
| </div> |
| </div> |
| </details><details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3 sd-shadow-md sd-fade-in-slide-down"> |
| <summary class="sd-summary-title sd-card-header sd-fs-5"> |
| <span class="sd-summary-text">Update R packages</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> |
| <p class="sd-card-text">To publish the R package on CRAN, there are a few steps we need to do first |
| in order to ensure that binaries for Windows and macOS are available to CRAN. |
| Jeroen Ooms <<a class="reference external" href="mailto:jeroenooms%40gmail.com">jeroenooms<span>@</span>gmail<span>.</span>com</a>> maintains several projects that build C++ |
| dependencies for R packages for macOS and Windows. We test copies of these |
| same build scripts in our CI, and at release time, we need to send any |
| changes we have and update the versions/hashes upstream.</p> |
| <p class="sd-card-text">When the release candidate is made, make draft pull requests to each |
| repository using the rc, updating the version and SHA, as well as any cmake |
| build changes from the corresponding files in apache/arrow. Jeroen may |
| merge these PRs before the release vote passes, build the binary artifacts, |
| and publish them in the right places so that we can do pre-submission checks |
| (see below). After the release candidate vote passes, update these PRs |
| to point to the official (non-rc) URL and mark them as ready for review. |
| Jeroen will merge, build the binary artifacts, and publish them in the |
| right places. See the |
| <a class="reference external" href="https://github.com/apache/arrow/blob/main/r/PACKAGING.md">packaging checklist</a>. |
| for a precise list of pull requests that must be made prior to submission |
| to CRAN.</p> |
| <p class="sd-card-text">Once these binary prerequisites have been satisfied, we can submit to CRAN. |
| Given the vagaries of the process, it is best if the R developers on the |
| project verify the CRAN-worthiness of the package before submitting. |
| Our CI systems give us some coverage for the things that CRAN checks, but |
| there are a couple of final tests we should do to confirm that the release |
| binaries will work and that everything runs on the same infrastructure that |
| CRAN has, which is difficult/impossible to emulate fully with Docker. For a |
| precise list of checks, see the |
| <a class="reference external" href="https://github.com/apache/arrow/blob/main/r/PACKAGING.md">packaging checklist</a>.</p> |
| <p class="sd-card-text">Once all checks are clean, we submit to CRAN, which has a web form for |
| uploading packages. The release process requires email confirmation |
| from the R package maintainer, currently Neal Richardson.</p> |
| </div> |
| </details><details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3 sd-shadow-md sd-fade-in-slide-down"> |
| <summary class="sd-summary-title sd-card-header sd-fs-5"> |
| <span class="sd-summary-text">Update vcpkg port</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> |
| <p class="sd-card-text">Open a pull request to vcpkg:</p> |
| <div class="highlight-Bash notranslate"><div class="highlight"><pre><span></span><span class="c1">## Fork https://github.com/microsoft/vcpkg on GitHub.</span> |
| <span class="c1">## You need to do this only once.</span> |
| <span class="c1">##</span> |
| <span class="c1">## Prepare your fork of https://github.com/microsoft/vcpkg .</span> |
| <span class="c1">## You need to do this only once.</span> |
| <span class="c1"># git clone git@github.com:kou/vcpkg.git ../</span> |
| git<span class="w"> </span>clone<span class="w"> </span>git@github.com:<YOUR_GITHUB_ID>/vcpkg.git<span class="w"> </span>../ |
| <span class="nb">cd</span><span class="w"> </span>../vcpkg |
| ./bootstrap-vcpkg.sh |
| <span class="c1">## Add https://github.com/microsoft/vcpkg.git as "upstream" remote.</span> |
| git<span class="w"> </span>remote<span class="w"> </span>add<span class="w"> </span>upstream<span class="w"> </span>https://github.com/microsoft/vcpkg.git |
| <span class="nb">cd</span><span class="w"> </span>- |
| |
| <span class="c1"># dev/release/post-13-vcpkg.sh 10.0.0 ../vcpkg</span> |
| dev/release/post-13-vcpkg.sh<span class="w"> </span>X.Y.Z<span class="w"> </span><YOUR_VCPKG_FORK> |
| </pre></div> |
| </div> |
| <p class="sd-card-text">This script pushes a <code class="docutils literal notranslate"><span class="pre">arrow-X.Y.Z</span></code> branch to your <code class="docutils literal notranslate"><span class="pre">microsoft/vcpkg</span></code> fork. You need to create a pull request from the <code class="docutils literal notranslate"><span class="pre">arrow-X.Y.Z</span></code> branch with <code class="docutils literal notranslate"><span class="pre">[arrow]</span> <span class="pre">Update</span> <span class="pre">to</span> <span class="pre">X.Y.Z</span></code> title on your Web browser.</p> |
| </div> |
| </details><details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3 sd-shadow-md sd-fade-in-slide-down"> |
| <summary class="sd-summary-title sd-card-header sd-fs-5"> |
| <span class="sd-summary-text">Update Conan port</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> |
| <p class="sd-card-text">Open a pull request to Conan:</p> |
| <div class="highlight-Bash notranslate"><div class="highlight"><pre><span></span><span class="c1">## Fork https://github.com/conan-io/conan-center-index on GitHub.</span> |
| <span class="c1">## You need to do this only once.</span> |
| <span class="c1">##</span> |
| <span class="c1">## Prepare your fork of https://github.com/conan-io/conan-center-index .</span> |
| <span class="c1">## You need to do this only once.</span> |
| <span class="c1"># git clone git@github.com:kou/conan-center-index.git ../</span> |
| git<span class="w"> </span>clone<span class="w"> </span>git@github.com:<YOUR_GITHUB_ID>/conan-center-index.git<span class="w"> </span>../ |
| <span class="nb">cd</span><span class="w"> </span>../conan-center-index |
| <span class="c1">## Add https://github.com/conan-io/conan-center-index.git as "upstream" remote.</span> |
| git<span class="w"> </span>remote<span class="w"> </span>add<span class="w"> </span>upstream<span class="w"> </span>https://github.com/conan-io/conan-center-index.git |
| <span class="nb">cd</span><span class="w"> </span>- |
| |
| <span class="c1"># dev/release/post-14-conan.sh 10.0.1 ../conan-center-index</span> |
| dev/release/post-14-conan.sh<span class="w"> </span>X.Y.Z<span class="w"> </span><YOUR_CONAN_CENTER_INDEX_FORK> |
| </pre></div> |
| </div> |
| <p class="sd-card-text">This script pushes a <code class="docutils literal notranslate"><span class="pre">arrow-X.Y.Z</span></code> branch to your <code class="docutils literal notranslate"><span class="pre">conan-io/conan-center-index</span></code> fork. You need to create a pull request from the <code class="docutils literal notranslate"><span class="pre">arrow-X.Y.Z</span></code> branch on your Web browser.</p> |
| </div> |
| </details><details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3 sd-shadow-md sd-fade-in-slide-down"> |
| <summary class="sd-summary-title sd-card-header sd-fs-5"> |
| <span class="sd-summary-text">Bump versions</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> |
| <div class="highlight-Bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># You can run the script with BUMP_TAG=0 and BUMP_PUSH=0</span> |
| <span class="c1"># this will avoid default pushing to main and pushing the tag</span> |
| <span class="c1"># but you will require to push manually after reviewing the commits.</span> |
| <span class="c1"># dev/release/post-10-bump-versions.sh 10.0.0 11.0.0</span> |
| dev/release/post-10-bump-versions.sh<span class="w"> </span>X.Y.Z<span class="w"> </span>NEXT_X.NEXT_Y.NEXT_Z |
| </pre></div> |
| </div> |
| </div> |
| </details><details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3 sd-shadow-md sd-fade-in-slide-down"> |
| <summary class="sd-summary-title sd-card-header sd-fs-5"> |
| <span class="sd-summary-text">Update docs</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> |
| <p class="sd-card-text">Documentation is generated as part of the release process. We just need to |
| upload the generated documentation:</p> |
| <div class="highlight-Bash notranslate"><div class="highlight"><pre><span></span><span class="c1">## Prepare your fork of https://github.com/apache/arrow-site .</span> |
| <span class="c1">## You need to do this only once.</span> |
| <span class="c1"># git clone git@github.com:kou/arrow-site.git ../</span> |
| git<span class="w"> </span>clone<span class="w"> </span>git@github.com:<YOUR_GITHUB_ID>/arrow-site.git<span class="w"> </span>../ |
| <span class="nb">cd</span><span class="w"> </span>../arrow-site |
| <span class="c1">## Add git@github.com:apache/arrow-site.git as "upstream" remote.</span> |
| git<span class="w"> </span>remote<span class="w"> </span>add<span class="w"> </span>upstream<span class="w"> </span>git@github.com:apache/arrow-site.git |
| <span class="nb">cd</span><span class="w"> </span>- |
| |
| <span class="c1"># dev/release/post-08-docs.sh 10.0.0 9.0.0</span> |
| dev/release/post-08-docs.sh<span class="w"> </span>X.Y.Z<span class="w"> </span>PREVIOUS_X.PREVIOUS_Y.PREVIOUS_Z |
| </pre></div> |
| </div> |
| <p class="sd-card-text">This script pushes a <code class="docutils literal notranslate"><span class="pre">release-docs-X.Y.Z</span></code> branch to your <code class="docutils literal notranslate"><span class="pre">arrow-site</span></code> fork. You need to create a Pull Request and use the <code class="docutils literal notranslate"><span class="pre">asf-site</span></code> branch as base for it.</p> |
| </div> |
| </details><details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3 sd-shadow-md sd-fade-in-slide-down"> |
| <summary class="sd-summary-title sd-card-header sd-fs-5"> |
| <span class="sd-summary-text">Update version in Apache Arrow Cookbook</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> |
| <p class="sd-card-text">Follow <a class="reference external" href="https://github.com/apache/arrow-cookbook/tree/main/dev/release">the documentation</a> |
| in the Apache Arrow Cookbook repository</p> |
| </div> |
| </details><details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3 sd-shadow-md sd-fade-in-slide-down"> |
| <summary class="sd-summary-title sd-card-header sd-fs-5"> |
| <span class="sd-summary-text">Announce the new release</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> |
| <p class="sd-card-text">Write a release announcement (see <a class="reference external" href="https://lists.apache.org/thread/6rkjwvyjjfodrxffllh66pcqnp729n3k">example</a>) and send to <a class="reference external" href="mailto:announce%40apache.org">announce<span>@</span>apache<span>.</span>org</a> and <a class="reference external" href="mailto:dev%40arrow.apache.org">dev<span>@</span>arrow<span>.</span>apache<span>.</span>org</a>.</p> |
| <p class="sd-card-text">The announcement to <a class="reference external" href="mailto:announce%40apache.org">announce<span>@</span>apache<span>.</span>org</a> must be sent from your apache.org e-mail address to be accepted.</p> |
| </div> |
| </details><details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3 sd-shadow-md sd-fade-in-slide-down"> |
| <summary class="sd-summary-title sd-card-header sd-fs-5"> |
| <span class="sd-summary-text">Publish release blog post</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> |
| <p class="sd-card-text">The blog post process isn’t automated. The rough set of steps we usually take |
| are:</p> |
| <ul class="simple"> |
| <li><p class="sd-card-text">Clone <a class="github reference external" href="https://github.com/apache/arrow-site">apache/arrow-site</a>.</p></li> |
| <li><p class="sd-card-text">Create a new branch off <code class="docutils literal notranslate"><span class="pre">main</span></code> for the blog post pull request we’re |
| creating.</p></li> |
| <li><p class="sd-card-text">Duplicate a recent blog post entry in the <code class="docutils literal notranslate"><span class="pre">_posts</span></code> subfolder and update |
| the filename and YAML metadata.</p> |
| <ul> |
| <li><p class="sd-card-text">Set the date in the filename and in the YAML metadata to the date that the |
| release candidate vote thread for the release closed (in GMT).</p></li> |
| </ul> |
| </li> |
| <li><p class="sd-card-text"><em>For minor releases only</em>, remove any section about community updates (new |
| committers, PMC members, etc).</p></li> |
| <li><p class="sd-card-text">Update the remainder of the text as needed</p></li> |
| <li><p class="sd-card-text">Create the pull request</p></li> |
| <li><p class="sd-card-text">In the pull request, ping contributors in each section requesting help |
| filling in the details for each section.</p></li> |
| </ul> |
| </div> |
| </details><details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3 sd-shadow-md sd-fade-in-slide-down"> |
| <summary class="sd-summary-title sd-card-header sd-fs-5"> |
| <span class="sd-summary-text">Announce the release on social media</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> |
| <p class="sd-card-text">Post about the release and link to the blog post on social media. The project |
| has two official accounts:</p> |
| <ul class="simple"> |
| <li><p class="sd-card-text">BlueSky: <a class="reference external" href="https://bsky.app/profile/arrow.apache.org">@arrow.apache.org</a></p></li> |
| <li><p class="sd-card-text">LinkedIn: <a class="reference external" href="https://www.linkedin.com/company/apache-arrow/">https://www.linkedin.com/company/apache-arrow/</a></p></li> |
| </ul> |
| <p class="sd-card-text">PMC members have access or can request access to post under these accounts.</p> |
| </div> |
| </details><details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3 sd-shadow-md sd-fade-in-slide-down"> |
| <summary class="sd-summary-title sd-card-header sd-fs-5"> |
| <span class="sd-summary-text">Remove old artifacts</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> |
| <p class="sd-card-text">Remove RC artifacts on <a class="reference external" href="https://dist.apache.org/repos/dist/dev/arrow/">https://dist.apache.org/repos/dist/dev/arrow/</a> and old release artifacts on <a class="reference external" href="https://dist.apache.org/repos/dist/release/arrow">https://dist.apache.org/repos/dist/release/arrow</a> to follow <a class="reference external" href="https://infra.apache.org/release-download-pages.html#current-and-older-releases">the ASF policy</a>:</p> |
| <div class="highlight-Bash notranslate"><div class="highlight"><pre><span></span>dev/release/post-07-remove-old-artifacts.sh |
| </pre></div> |
| </div> |
| <p class="sd-card-text">Note: This step must be done by a PMC member.</p> |
| </div> |
| </details></section> |
| </section> |
| |
| |
| </article> |
| |
| |
| |
| |
| |
| <footer class="prev-next-footer d-print-none"> |
| |
| <div class="prev-next-area"> |
| <a class="left-prev" |
| href="documentation.html" |
| title="previous page"> |
| <i class="fa-solid fa-angle-left"></i> |
| <div class="prev-next-info"> |
| <p class="prev-next-subtitle">previous</p> |
| <p class="prev-next-title">Building the Documentation</p> |
| </div> |
| </a> |
| <a class="right-next" |
| href="release_verification.html" |
| title="next page"> |
| <div class="prev-next-info"> |
| <p class="prev-next-subtitle">next</p> |
| <p class="prev-next-title">Release Verification Process</p> |
| </div> |
| <i class="fa-solid fa-angle-right"></i> |
| </a> |
| </div> |
| </footer> |
| |
| </div> |
| |
| |
| |
| <dialog id="pst-secondary-sidebar-modal"></dialog> |
| <div id="pst-secondary-sidebar" class="bd-sidebar-secondary bd-toc"><div class="sidebar-secondary-items sidebar-secondary__inner"> |
| |
| |
| <div class="sidebar-secondary-item"> |
| <div |
| id="pst-page-navigation-heading-2" |
| class="page-toc tocsection onthispage"> |
| <i class="fa-solid fa-list"></i> On this page |
| </div> |
| <nav class="bd-toc-nav page-toc" aria-labelledby="pst-page-navigation-heading-2"> |
| <ul class="visible nav section-nav flex-column"> |
| <li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#principles">Principles</a></li> |
| <li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#preparing-for-the-release">Preparing for the release</a></li> |
| <li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#before-creating-a-release-candidate">Before creating a Release Candidate</a></li> |
| <li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#patch-releases">Patch Releases</a></li> |
| <li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#creating-a-release-candidate">Creating a Release Candidate</a><ul class="visible nav section-nav flex-column"> |
| <li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#create-or-update-the-corresponding-maintenance-branch">Create or update the corresponding maintenance branch</a></li> |
| <li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#optional-test-before-creating-a-release-candidate">Optional: Test Before Creating a Release Candidate</a></li> |
| <li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#create-the-release-candidate-branch-from-the-updated-maintenance-branch">Create the Release Candidate branch from the updated maintenance branch</a></li> |
| <li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#build-source-and-binaries-and-submit-them">Build source and binaries and submit them</a></li> |
| <li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#verify-the-release">Verify the Release</a></li> |
| </ul> |
| </li> |
| <li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#voting-and-approval">Voting and approval</a></li> |
| <li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#post-release-tasks">Post-release tasks</a></li> |
| </ul> |
| </nav></div> |
| |
| <div class="sidebar-secondary-item"> |
| |
| |
| <div class="tocsection editthispage"> |
| <a href="https://github.com/apache/arrow/edit/main/docs/source/developers/release.rst"> |
| <i class="fa-solid fa-pencil"></i> |
| |
| |
| |
| Edit on GitHub |
| |
| |
| </a> |
| </div> |
| </div> |
| |
| </div></div> |
| |
| |
| </div> |
| <footer class="bd-footer-content"> |
| |
| </footer> |
| |
| </main> |
| </div> |
| </div> |
| |
| <!-- Scripts loaded after <body> so the DOM is not blocked --> |
| <script defer src="../_static/scripts/bootstrap.js?digest=8878045cc6db502f8baf"></script> |
| <script defer src="../_static/scripts/pydata-sphinx-theme.js?digest=8878045cc6db502f8baf"></script> |
| |
| <footer class="bd-footer"> |
| <div class="bd-footer__inner bd-page-width"> |
| |
| <div class="footer-items__start"> |
| |
| <div class="footer-item"> |
| |
| <p class="copyright"> |
| |
| © Copyright 2016-2026 Apache Software Foundation. |
| Apache Arrow, Arrow, Apache, the Apache logo, and the Apache Arrow project logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries. |
| <br/> |
| |
| </p> |
| </div> |
| |
| <div class="footer-item"> |
| |
| <p class="sphinx-version"> |
| Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 9.1.0. |
| <br/> |
| </p> |
| </div> |
| |
| </div> |
| |
| |
| |
| <div class="footer-items__end"> |
| |
| <div class="footer-item"> |
| <p class="theme-version"> |
| <!-- # L10n: Setting the PST URL as an argument as this does not need to be localized --> |
| Built with the <a href="https://pydata-sphinx-theme.readthedocs.io/en/stable/index.html">PyData Sphinx Theme</a> 0.16.1. |
| </p></div> |
| |
| </div> |
| |
| </div> |
| |
| </footer> |
| </body> |
| </html> |