| <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>How to Prepare a Release · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="<!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -->"/><meta name="docsearch:version" content="4.1.0"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="How to Prepare a Release · Apache SINGA"/><meta property="og:type" content="website"/><meta property="og:url" content="https://singa.apache.org/"/><meta property="og:description" content="<!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -->"/><meta property="og:image" content="https://singa.apache.org/img/singa_twitter_banner.jpeg"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://singa.apache.org/img/singa_twitter_banner.jpeg"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://singa.apache.org/blog/atom.xml" title="Apache SINGA Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://singa.apache.org/blog/feed.xml" title="Apache SINGA Blog RSS Feed"/><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400i,700"/><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Baloo+Paaji+2&family=Source+Sans+Pro:wght@200;300&display=swap"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script src="https://unpkg.com/vanilla-back-to-top@7.1.14/dist/vanilla-back-to-top.min.js"></script><script> |
| document.addEventListener('DOMContentLoaded', function() { |
| addBackToTop( |
| {"zIndex":100} |
| ) |
| }); |
| </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>4.1.0</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/installation" target="_self">Docs</a></li><li class=""><a href="/docs/source-repository" target="_self">Community</a></li><li class=""><a href="/blog/" target="_self">News</a></li><li class=""><a href="https://apache-singa.readthedocs.io/en/latest/" target="_self">API</a></li><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li><li class=""><a href="https://github.com/apache/singa" target="_self">GitHub</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>Development</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle">Getting Started</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/installation">Installation</a></li><li class="navListItem"><a class="navItem" href="/docs/software-stack">Software Stack</a></li><li class="navListItem"><a class="navItem" href="/docs/examples">Examples</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Guides</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/device">Device</a></li><li class="navListItem"><a class="navItem" href="/docs/tensor">Tensor</a></li><li class="navListItem"><a class="navItem" href="/docs/autograd">Autograd</a></li><li class="navListItem"><a class="navItem" href="/docs/optimizer">Optimizer</a></li><li class="navListItem"><a class="navItem" href="/docs/graph">Model</a></li><li class="navListItem"><a class="navItem" href="/docs/onnx">ONNX</a></li><li class="navListItem"><a class="navItem" href="/docs/dist-train">Distributed Training</a></li><li class="navListItem"><a class="navItem" href="/docs/time-profiling">Time Profiling</a></li><li class="navListItem"><a class="navItem" href="/docs/half-precision">Half Precision</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Development</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/downloads">Download SINGA</a></li><li class="navListItem"><a class="navItem" href="/docs/build">Build SINGA from Source</a></li><li class="navListItem"><a class="navItem" href="/docs/contribute-code">How to Contribute Code</a></li><li class="navListItem"><a class="navItem" href="/docs/contribute-docs">How to Contribute to Documentation</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/how-to-release">How to Prepare a Release</a></li><li class="navListItem"><a class="navItem" href="/docs/git-workflow">Git Workflow</a></li></ul></div></div></section></div><script> |
| var coll = document.getElementsByClassName('collapsible'); |
| var checkActiveCategory = true; |
| for (var i = 0; i < coll.length; i++) { |
| var links = coll[i].nextElementSibling.getElementsByTagName('*'); |
| if (checkActiveCategory){ |
| for (var j = 0; j < links.length; j++) { |
| if (links[j].classList.contains('navListItemActive')){ |
| coll[i].nextElementSibling.classList.toggle('hide'); |
| coll[i].childNodes[1].classList.toggle('rotate'); |
| checkActiveCategory = false; |
| break; |
| } |
| } |
| } |
| |
| coll[i].addEventListener('click', function() { |
| var arrow = this.childNodes[1]; |
| arrow.classList.toggle('rotate'); |
| var content = this.nextElementSibling; |
| content.classList.toggle('hide'); |
| }); |
| } |
| |
| document.addEventListener('DOMContentLoaded', function() { |
| createToggler('#navToggler', '#docsNav', 'docsSliderActive'); |
| createToggler('#tocToggler', 'body', 'tocActive'); |
| |
| var headings = document.querySelector('.toc-headings'); |
| headings && headings.addEventListener('click', function(event) { |
| var el = event.target; |
| while(el !== headings){ |
| if (el.tagName === 'A') { |
| document.body.classList.remove('tocActive'); |
| break; |
| } else{ |
| el = el.parentNode; |
| } |
| } |
| }, false); |
| |
| function createToggler(togglerSelector, targetSelector, className) { |
| var toggler = document.querySelector(togglerSelector); |
| var target = document.querySelector(targetSelector); |
| |
| if (!toggler) { |
| return; |
| } |
| |
| toggler.onclick = function(event) { |
| event.preventDefault(); |
| |
| target.classList.toggle(className); |
| }; |
| } |
| }); |
| </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/how-to-release.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">How to Prepare a Release</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> |
| <p>This is a guide for the |
| <a href="http://www.apache.org/dev/release-publishing.html">release preparing process</a> |
| in SINGA.</p> |
| <ol> |
| <li><p>Select a release manager. The release manager (RM) is the coordinator for the |
| release process. It is the RM's signature (.asc) that is uploaded together |
| with the release. The RM generates KEY (RSA 4096-bit) and uploads it to a |
| public key server. The RM needs to get his key endorsed (signed) by other |
| Apache user, to be connected to the web of trust. He should first ask the |
| mentor to help signing his key. |
| <a href="http://www.apache.org/dev/release-signing.html">How to generate the key</a>?</p></li> |
| <li><p>Check license. <a href="https://www.apache.org/legal/src-headers.html#faq-docs">FAQ</a>; |
| <a href="https://issues.apache.org/jira/projects/SINGA/issues/SINGA-447">SINGA Issue</a></p> |
| <ul> |
| <li>The codebase does not include third-party code which is not compatible to |
| APL;</li> |
| <li>The dependencies are compatible with APL. GNU-like licenses are NOT |
| compatible;</li> |
| <li>All source files written by us MUST include the Apache license header: |
| <a href="http://www.apache.org/legal/src-headers.html">http://www.apache.org/legal/src-headers.html</a>. There's a script in there |
| which helps propagating the header to all files.</li> |
| <li>Update the LICENSE file. If we include any third party code in the release |
| package which is not APL, must state it at the end of the NOTICE file.</li> |
| </ul></li> |
| <li><p>Bump the version. Check code and documentation</p> |
| <ul> |
| <li>The build process is error-free.</li> |
| <li>Unit tests are included (as much as possible)</li> |
| <li>Wheel packages run without errors.</li> |
| <li>The online documentation on the Apache website is up to date.</li> |
| </ul></li> |
| <li><p>Prepare the RELEASE_NOTES file. Include the following items, Introduction, |
| Features, Bugs (link to JIRA or Github PR), Changes, Dependency list, |
| Incompatibility issues. Follow this |
| <a href="http://commons.apache.org/proper/commons-digester/commons-digester-3.0/RELEASE-NOTES.txt">example</a>.</p></li> |
| <li><p>Package the release candidate. The release should be packaged into : |
| apache-singa-VERSION.tar.gz. The release should not include any binary files |
| including git files. However, the CMake compilation depends on the git tag to |
| get the version numbers; to remove this dependency, you need to manually |
| update the CMakeLists.txt file to set the version numbers.</p> |
| <pre><code class="hljs"># remove the following lines |
| include(GetGitRevisionDescription) |
| git_describe(VERSION --tags --dirty=-d) |
| <span class="hljs-type">string</span>(REGEX REPLACE <span class="hljs-string">"^([0-9]+)<span class="hljs-subst">\\</span>..*"</span> <span class="hljs-string">"<span class="hljs-subst">\\</span>1"</span> VERSION_MAJOR <span class="hljs-string">"${VERSION}"</span>) |
| <span class="hljs-type">string</span>(REGEX REPLACE <span class="hljs-string">"^[0-9]+<span class="hljs-subst">\\</span>.([0-9]+).*"</span> <span class="hljs-string">"<span class="hljs-subst">\\</span>1"</span> VERSION_MINOR <span class="hljs-string">"${VERSION}"</span>) |
| <span class="hljs-type">string</span>(REGEX REPLACE <span class="hljs-string">"^[0-9]+<span class="hljs-subst">\\</span>.[0-9]+<span class="hljs-subst">\\</span>.([0-9]+).*"</span> <span class="hljs-string">"<span class="hljs-subst">\\</span>1"</span> VERSION_PATCH <span class="hljs-string">"${VERSION}"</span>) |
| |
| # set the numbers manually |
| SET(PACKAGE_VERSION <span class="hljs-number">3.0</span><span class="hljs-number">.0</span>) |
| SET(VERSION <span class="hljs-number">3.0</span><span class="hljs-number">.0</span>) |
| SET(SINGA_MAJOR_VERSION <span class="hljs-number">3</span>) # <span class="hljs-number">0</span> - |
| SET(SINGA_MINOR_VERSION <span class="hljs-number">0</span>) # <span class="hljs-number">0</span> - <span class="hljs-number">9</span> |
| SET(SINGA_PATCH_VERSION <span class="hljs-number">0</span>) # <span class="hljs-number">0</span> - <span class="hljs-number">99</span> |
| </code></pre> |
| <p>Upload the package to the |
| <a href="https://dist.apache.org/repos/dist/dev/singa/">stage repo</a>. The tar file, |
| signature, KEY and SHA256 checksum file should be included. MD5 is no longer |
| used. Policy is |
| <a href="http://www.apache.org/dev/release-distribution#sigs-and-sums">here</a>. The |
| stage folder should include:</p> |
| <ul> |
| <li>apache-singa-VERSION.tar.gz</li> |
| <li>apache-singa-VERSION.acs</li> |
| <li>apache-singa-VERSION.SHA256</li> |
| </ul> |
| <p>The commands to create these files and upload them to the stage svn repo:</p> |
| <pre><code class="hljs css language-sh"><span class="hljs-comment"># in singa repo</span> |
| rm -rf .git |
| rm -rf ./.gitignore |
| rm -rf ./.gitmodules |
| rm -rf rafiki/* |
| <span class="hljs-built_in">cd</span> .. |
| tar -czvf apache-singa-VERSION.tar.gz singa/ |
| |
| mkdir stage |
| <span class="hljs-built_in">cd</span> stage |
| svn co https://dist.apache.org/repos/dist/dev/singa/ |
| <span class="hljs-built_in">cd</span> singa |
| <span class="hljs-comment"># copy the KEYS file from singa repo to this folder if it is not here</span> |
| cp ../../singa/KEYS . |
| mkdir VERSION |
| <span class="hljs-comment"># copy the tar.gz file</span> |
| mv ../../apache-singa-VERSION.tar.gz VERSION/ |
| <span class="hljs-built_in">cd</span> VERSION |
| sha512sum apache-singa-VERSION.tar.gz > apache-singa-VERSION.tar.gz.sha512 |
| gpg --armor --output apache-singa-VERSION.tar.gz.asc --detach-sig apache-singa-VERSION.tar.gz |
| <span class="hljs-built_in">cd</span> .. |
| svn add VERSION |
| svn commit |
| </code></pre></li> |
| </ol> |
| <ol start="6"> |
| <li><p>Call for vote by sending an email. An example is provided as follows.</p> |
| <pre><code class="hljs"><span class="hljs-attribute">To</span>: dev<span class="hljs-variable">@singa</span>.apache.org |
| <span class="hljs-attribute">Subject</span>: [VOTE] Release apache-singa-X.Y.Z (release candidate N) |
| |
| Hi all, |
| |
| I have created a build for Apache SINGA <span class="hljs-number">3.1</span>.<span class="hljs-number">0</span>, release candidate <span class="hljs-number">2</span>. |
| |
| The release note is at |
| <span class="hljs-attribute">https</span>:<span class="hljs-comment">//github.com/apache/singa/blob/master/RELEASE_NOTES.</span> |
| |
| The artifacts to be voted on are located <span class="hljs-attribute">here</span>: |
| <span class="hljs-attribute">https</span>:<span class="hljs-comment">//dist.apache.org/repos/dist/dev/singa/3.1.0.rc2/apache-singa-3.1.0.rc2.tar.gz</span> |
| |
| The hashes of the artifacts are as <span class="hljs-attribute">follows</span>: |
| <span class="hljs-attribute">SHA512</span>: <span class="hljs-number">84545499</span>ad36da108c6a599edd1d853f82d331bc03273b5278515554866f0c698e881f956b2eabcb6b29c07fa9fa4ff1add5a777b58db8a6a2362cf383b5c04d |
| |
| Release artifacts are signed with the <span class="hljs-attribute">followingkey</span>: |
| <span class="hljs-attribute">https</span>:<span class="hljs-comment">//dist.apache.org/repos/dist/dev/singa/KEYS</span> |
| |
| The signature file <span class="hljs-attribute">is</span>: |
| <span class="hljs-attribute">https</span>:<span class="hljs-comment">//dist.apache.org/repos/dist/dev/singa/3.1.0.rc2/apache-singa-3.1.0.rc2.tar.gz.asc</span> |
| |
| The Github tag is <span class="hljs-attribute">at</span>: |
| <span class="hljs-attribute">https</span>:<span class="hljs-comment">//github.com/apache/singa/releases/tag/3.1.0.rc2</span> |
| |
| The documentation website is at |
| <span class="hljs-attribute">http</span>:<span class="hljs-comment">//singa.apache.org/docs/next/installation/</span> |
| |
| Some examples are available for <span class="hljs-attribute">testing</span>: |
| <span class="hljs-attribute">https</span>:<span class="hljs-comment">//github.com/apache/singa/tree/master/examples</span> |
| </code></pre></li> |
| </ol> |
| <p>Please vote on releasing this package. The vote is open for at least 72 hours |
| and passes if a majority of at least three +1 votes are cast.</p> |
| <p>[ ] +1 Release this package as Apache SINGA X.Y.Z [ ] 0 I don't feel strongly |
| about it, but I'm okay with the release [ ] -1 Do not release this package |
| because...</p> |
| <p>Here is my vote: +1</p> |
| <pre><code class="hljs"> |
| 7) Wait at least 48 hours for test responses. Any PMC, committer<span class="hljs-built_in"> or </span>contributor |
| can test features for releasing,<span class="hljs-built_in"> and </span>feedback. Everyone should<span class="hljs-built_in"> check </span>these |
| before vote +1. If the vote passes, then send the result email. Otherwise, |
| repeat from the beginning. |
| |
| </code></pre> |
| <p>To: <a href="mailto:dev@singa.apache.org">dev@singa.apache.org</a> Subject: [RESULT][vote] Release apache-singa-X.Y.Z |
| (release candidate N)</p> |
| <p>Thanks to everyone who has voted and given their comments. The tally is as |
| follows.</p> |
| <p>N binding +1s: <names></p> |
| <p>N non-binding +1s: <names></p> |
| <p>No 0s or -1s.</p> |
| <p>I am delighted to announce that the proposal to release Apache SINGA X.Y.Z has |
| passed.</p> |
| <pre><code class="hljs"> |
| 8) Upload the package for |
| [<span class="hljs-string">distribution</span>](<span class="hljs-link">http://www.apache.org/dev/release-publishing.html#distribution</span>) |
| to https://dist.apache.org/repos/dist/release/singa/. |
| |
| 9) Update the Download page of SINGA website. The tar.gz file MUST be downloaded |
| from mirror, using closer.cgi script; other artifacts MUST be downloaded from |
| main Apache site. More details |
| [<span class="hljs-string">here</span>](<span class="hljs-link">http://www.apache.org/dev/release-download-pages.html</span>). Some feedback |
| we got during the previous releases: "Download pages must only link to formal |
| releases, so must not include links to GitHub.", "Links to KEYS, sigs and |
| hashes must not use dist.apache.org; instead use |
| https://www.apache.org/dist/singa/...;", "Also you only need one KEYS link, |
| and there should be a description of how to use KEYS + sig or hash to verify |
| the downloads." |
| |
| 10) Remove the RC tag and compile the conda packages. |
| |
| 11) Publish the release information. |
| |
| <span class="hljs-code">```</span> |
| To: announce@apache.org, dev@singa.apache.org |
| Subject: [ANNOUNCE] Apache SINGA X.Y.Z released |
| |
| We are pleased to announce that SINGA X.Y.Z is released. |
| |
| SINGA is a general distributed deep learning platform |
| for training big deep learning models over large datasets. |
| The release is available at: http://singa.apache.org/downloads.html |
| The main features of this release include XXX |
| We look forward to hearing your feedback, suggestions, |
| and contributions to the project. |
| |
| On behalf of the SINGA team, {SINGA Team Member Name} |
| <span class="hljs-code">```</span> |
| </code></pre> |
| </span></div></article></div><div class="docLastUpdate"><em>Last updated on 10/21/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/contribute-docs"><span class="arrow-prev">← </span><span>How to Contribute to Documentation</span></a><a class="docs-next button" href="/docs/git-workflow"><span>Git Workflow</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/singa-logo-square.png" alt="Apache SINGA" width="66" height="58"/></a><div><h5>Docs</h5><a href="/docs/installation">Getting Started</a><a href="/docs/device">Guides</a><a href="/en/https://apache-singa.readthedocs.io/en/latest/">API Reference</a><a href="/docs/examples">Examples</a><a href="/docs/download-singa">Development</a></div><div><h5>Community</h5><a href="/en/users.html">User Showcase</a><a href="/docs/history-singa">SINGA History</a><a href="/docs/team-list">SINGA Team</a><a href="/blog">SINGA News</a><a href="https://github.com/apache/singa">GitHub</a><div class="social"><a class="github-button" href="https://github.com/apache/singa" data-count-href="/apache/singa/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">apache/singa-doc</a></div><div class="social"><a href="https://twitter.com/ApacheSINGA" class="twitter-follow-button">Follow @ApacheSINGA</a></div></div><div><h5>Apache Software Foundation</h5><a href="https://apache.org/" target="_blank" rel="noreferrer noopener">Foundation</a><a href="http://www.apache.org/licenses/" target="_blank" rel="noreferrer noopener">License</a><a href="http://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noreferrer noopener">Sponsorship</a><a href="http://www.apache.org/foundation/thanks.html" target="_blank" rel="noreferrer noopener">Thanks</a><a href="http://www.apache.org/events/current-event" target="_blank" rel="noreferrer noopener">Events</a><a href="http://www.apache.org/security/" target="_blank" rel="noreferrer noopener">Security</a></div></section><div style="width:100%;text-align:center"><a href="https://apache.org/" target="_blank" rel="noreferrer noopener" class="ApacheOpenSource"><img src="/img/asf_logo_wide.svg" alt="Apache Open Source"/></a><section class="copyright" style="max-width:60%;margin:0 auto">Copyright © 2023 |
| The Apache Software Foundation. All rights reserved. |
| Apache SINGA, Apache, the Apache feather logo, and |
| the Apache SINGA project logos are trademarks of The |
| Apache Software Foundation. All other marks mentioned |
| may be trademarks or registered trademarks of their |
| respective owners.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</script><script> |
| document.addEventListener('keyup', function(e) { |
| if (e.target !== document.body) { |
| return; |
| } |
| // keyCode for '/' (slash) |
| if (e.keyCode === 191) { |
| const search = document.getElementById('search_input_react'); |
| search && search.focus(); |
| } |
| }); |
| </script><script> |
| var search = docsearch({ |
| |
| apiKey: '45202133606c0b5fa6d21cddc4725dd8', |
| indexName: 'apache_singa', |
| inputSelector: '#search_input_react', |
| algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]} |
| }); |
| </script></body></html> |