CINXE.COM
Yahoo Developer Network
<!DOCTYPE html> <html lang=> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="google-site-verification" content="MOnPMZKo_gmKqZgcnzortlWhXu0qUWvmbNAeWx84v9I" /> <link rel="apple-touch-icon-precomposed" href="../static/images/apple-touch-icon-precomposed.png"> <title>Yahoo Developer Network</title> <meta name="description" content="Measure, monetize, advertise and improve your apps with Yahoo tools. Join the 200,000 developers using Yahoo tools to build their app businesses."> <meta property="og:title" content="Yahoo Developer Network" /> <meta property="og:type" content='website' /> <meta property="og:url" content="https://developer.yahoo.com/" /> <meta property="og:description" content="Measure, monetize, advertise and improve your apps with Yahoo tools. Join the 200,000 developers using Yahoo tools to build their app businesses."/> <meta property="og:image" content="https://s.yimg.com/oo/cms/products/site/assets/ydn200.png"/> <meta property="og:site_name" content="Yahoo Developer Network" /> <link rel="shortcut icon" href="https://s.yimg.com/rz/l/favicon.ico"/> <link rel="stylesheet" href="/static/css/font-awesome.min.css"> <link rel="stylesheet" href="/static/css/denali-icons-v0.4.1.css"> <link rel="stylesheet" href="/static/css/hoverbox.css"> <link rel="stylesheet" href="/static/css/rebranding_footer.css"> <!--[if lte IE 8]> <link rel="stylesheet" href="/static/css/codemirror.css"> <link rel="stylesheet" href="/static/css/pure.css"> <link rel="stylesheet" href="/static/css/main.css"> <link rel="stylesheet" href="/static/css/side-menu.css"> <link rel="stylesheet" href="/static/css/featherlight.min.css"> <link rel="stylesheet" href="/static/css/denali-style.css"> <link rel="stylesheet" href="/static/css/less-styles.css"> <![endif]--> <!--[if gt IE 8]><!--> <link rel="stylesheet" href="https://s.yimg.com/zz/combo?oo/fe/css/codemirror-min_681d3e3e0.css&oo/fe/css/pure-min_5ef171c51.css&oo/fe/css/main-min_248761b64.css&oo/fe/css/side-menu-min_d1ff8ca9b.css&oo/fe/css/featherlight.min_2802ef65c.css&oo/fe/css/denali-style-min_e0ef5615c.css&oo/fe/css/less-styles-min_1527735e8.css"> <!--<![endif]--> <script nonce="AmqservOgxJUKLbhF9TkBQ==" src="https://s.yimg.com/zz/combo?oo/fe/js/vendor/jquery331_min-min_fb71483ea.js&oo/fe/js/vendor/jquery-easytabs_min-min_5ed1e3e24.js&oo/fe/js/vendor/jquery-hashchange-min_acc519bb2.js&oo/fe/js/vendor/js-cookie-min_bff73c132.js"></script> <script nonce="AmqservOgxJUKLbhF9TkBQ==" src="/static/js/vendor/jquery.cookie.js"></script> <script nonce="AmqservOgxJUKLbhF9TkBQ==" src="https://s.yimg.com/zz/combo?oo/fe/js/vendor/featherlight_min-min_8697a441b.js&oo/fe/js/vendor/slick_min-min_0d13b88ac.js&oo/fe/js/vendor/scrollReveal_min-min_118b7ecf1.js&oo/fe/js/vendor/codemirror-compressed-min_3217a68df.js"></script> <script nonce="AmqservOgxJUKLbhF9TkBQ==" src="/static/js/vendor/bootstrap.bundle.min.js"></script> <!-- Google tag (gtag.js) --> <script nonce="AmqservOgxJUKLbhF9TkBQ==" async src="https://www.googletagmanager.com/gtag/js?id=G-BFY40XXE01"></script> <script nonce="AmqservOgxJUKLbhF9TkBQ=="> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-BFY40XXE01'); </script> </head> <body class=" "> <!-- Check if there is custom header data --> <div class="header-container"> <div class="page-head-search container"> <a href="/" aria-label="YDN Logo"><div class="logo-container"></div><div class="devtxt">developer</div></a> <div class="header-links"> <ul> <li> <a id="nav-opensource" href="/opensource/"><span>Open Source</span></a> </li> <li> <a id="nav-api" href="/api/"><span>APIs</span></a> </li> <li> <a id="nav-advertising" href="/advertising/" target="_blank" rel="noopener"><span>Advertising</span> <span><i class="d-icon d-external is-small" aria-hidden="true"></i></span></a> </li> <li> <a id="nav-blogs" href="/blogs/"><span>Blogs</span></a> </li> <li> <a id="nav-events" href="/events/"><span>Events</span></a> </li> <li> <a id="nav-podcasts" href="/podcasts/"><span>Podcasts</span></a> </li> <li> <a id="nav-apps" href="/apps/"><span>Apps</span></a> </li> </ul> </div> <div class="head-controls hidden"> <form id="search-form" action="/find/" method="GET" autocomplete="off"> <label for="search-input" class="sr-only">Input to search</label> <input title="" id="search-input" name="q" placeholder=""> <button type="submit" class="pure-button search-ydn" aria-label="search button"><i class="d-icon d-search is-smal" aria-hidden="true"></i></button> </form> </div> <div class="head-right-controls"> <div class="header-search-container" id="search-nav-bar"> <form action="/find/" method="GET" autocomplete="off" class="search-form"> <input title="search" aria-label="search scope" id="scope-search" name="q" placeholder="Search" > <button type="submit" class="search-ydn" aria-label="search button"><i class="d-icon d-search is-small" aria-hidden="true"></i></button> </form> </div> <!-- <a id="myapps-dropdown" class="hidden"> <img src="/assets/images/app-icon.png" alt="App Icons" class="header-icon"> </a> --> <a id="language-dropdown" aria-label="Language Dropdown"><span class="flag-icon flag-icon-us" aria-hidden="true"></span> <span class="caret" aria-hidden="true"></span></a> <div class="user-account"> <!-- <img class="pic-id my-id hidden" src="https://s.yimg.com/dh/ap/social/profile/profile_b64.png"> --> <a href="https://login.yahoo.com?done=https://developer.yahoo.com/blogs/713067803453816832/&src=devnet&specId=usernameReg">Sign In</a> <!-- <a href="https://login.yahoo.com/config/login?.done=https://developer.yahoo.com/blogs/713067803453816832/" class="login"><i class="d-icon d-user-profile-circle is-medium pic-id my-id hover"></i></a> --> </div> </div> <div id="language-overlay" class="overlay" sign-in "> <div class="pointer"></div> <ul> <li><a class='rapidnofollow' data-lang="en-US" href="#" aria-label="Translate to English"><span class="flag-icon flag-icon-us" aria-hidden="true"></span> English (U.S.)</a></li> <li><a class='rapidnofollow' data-lang="zh-Hant-HK" href="#" aria-label="Translate to Chinese (Hong Kong)"><span class="flag-icon flag-icon-hk" aria-hidden="true"></span> 中文(香港)</a></li> <li><a class='rapidnofollow' data-lang="zh-Hant-TW" href="#" aria-label="Translate to Chinese (Taiwan)"><span class="flag-icon flag-icon-tw" aria-hidden="true"></span> 中文(台灣)</a></li> </ul> </div> <div id="apps-overlay" class="overlay"> <div class="pointer"></div> <div> </div> <ul> <li><a href="/apps">YDN Apps</a></li> <li><a href="https://dev.flurry.com">Flurry Apps</a></li> <li><a href="/search-sdk/apps">Search SDK Apps</a></li> </ul> </div> </div> <div class="mobile-header"> <a href="#menu" id="menuLink" class="menu-link" aria-label="Menu Link"> <!-- Hamburger icon --> <span aria-hidden="true"></span> </a> <a href="/" class="yahoo-phone" role="presentation" aria-label="Logo"><div class="logo-container" style="position:static"></div><div class="devtxt">developer</div></a> <a href="/find/" class="mobile-search-icon" role="presentation" aria-label="Search Logo"></a> </div> </div> <script nonce="AmqservOgxJUKLbhF9TkBQ=="> var BACKSPACE_KEY = 8; var DELETE_KEY = 46; var searchForm = document.querySelector('#search-form'); var searchScopeName = document.querySelector('#search-scope-name'); var searchScopeUrl = document.querySelector('#search-scope-url'); var searchInput = document.querySelector('#search-input'); var searchScope = document.querySelector('.search-scope'); if (searchScope) { var paddingOffset = searchScope.offsetWidth + 40; searchInput.style.paddingLeft = paddingOffset + 'px'; } searchInput.addEventListener('keydown', handleSearchKeyDown); searchInput.addEventListener('blur', handleSearchLoseFocus); searchInput.addEventListener('focus', handleSearchFocus); searchInput.addEventListener('blur', handleLoseFocus); var pageName = window.location.pathname.split("/")[1]; var navElement = document.getElementById("nav-"+pageName); if(navElement){ navElement.classList.add("selected"); } function handleSearchFocus(event) { searchForm.style.width = "375px"; } function handleLoseFocus(event) { searchForm.style.width = "250px"; } window.addEventListener('resize', function(event){ searchForm.style.width = "250px"; }); function handleSearchKeyDown(event) { var searchText = document.querySelector('#search-input').value; searchScope = document.querySelector('.search-scope'); // When search bar is empty and Backspace or Delete keys are pressed, then // remove contextual scope from the search bar. // Note: Brightroll DSP is locked into contextual search. // Note: A.I. Studio is locked into contextual search. if (!searchText.length && searchScopeName.value !== 'DSP' && searchScopeName.value !== 'A.I. Studio' && (event.keyCode === BACKSPACE_KEY || event.keyCode === DELETE_KEY)) { searchScope.style.display = 'none'; searchInput.style.paddingLeft = 10 + 'px'; searchScopeName.disabled = true; searchScopeUrl.disabled = true; } } // Reset contextual search when the search bar loses focus and it's empty. function handleSearchLoseFocus(event) { var searchText = document.querySelector('#search-input').value; // Restore contextual label if it has been removed via the backspace key // but the text field is still empty. if (searchScope && !searchText.length) { searchScope.style.display = 'block'; searchInput.style.paddingLeft = paddingOffset + 'px'; searchScopeName.disabled = false; searchScopeUrl.disabled = false; } } // Update locale setting from language dropdown $('a[data-lang]').click(function(e) { e.preventDefault(); // Load PH cookie and convert it to object. // If PH cookie is not available, create an empty object. var locale = $(this).data('lang'); var phCookie = $.cookie('PH'); var phCookieObject = phCookie ? queryStringToObject(phCookie) : {}; // Update locale. phCookieObject.l = locale; // Set new PH cookie. $.cookie.raw = true; $.cookie('PH', $.param(phCookieObject), { path: '/', domain: 'yahoo.com' }); location.reload(); }); function queryStringToObject(query) { var qs = {}; var vars = query.split('&'); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split('='); pair[0] = decodeURIComponent(pair[0]); pair[1] = decodeURIComponent(pair[1]); if (typeof qs[pair[0]] === 'undefined') { qs[pair[0]] = pair[1]; } else if (typeof qs[pair[0]] === 'string') { qs[pair[0]] = [qs[pair[0]], pair[1]]; } else { qs[pair[0]].push(pair[1]); } } return qs; } </script> <div> <div id="layout" class=" " > <div id="menu"> </div> <div id="main"> <link rel="stylesheet" href="/static/css/common-module.css"> <style nonce="AmqservOgxJUKLbhF9TkBQ=="> .blogBody a, .blogBody a:visited { color: #000000; text-decoration: underline; -webkit-transition: all 0.25s; -moz-transition: all 0.25s; -ms-transition: all 0.25s; -o-transition: all 0.25s; transition: all 0.25s; } .blogBody a:hover { color: #6E329D; text-decoration: underline; } figure { text-align: center; } article blockquote { border-left: 4px solid #f6f6f6; padding-left: 1em; margin-left: 1em; } code { background-color: #e5e5e5; font-style: italic; padding: 0.25em 0.5em; line-height: 1.25em; } pre code { background-color: transparent; line-height: 2.5em; font-style: normal; padding: 1em; } .homepage { height: 120px; background: #4F62FE; padding: 0 16px; margin-top: 50px; } .homepage .row { padding: 0 2em !important; } .homepage .is-visible-touch a { width: 100%; } .homepage .is-hidden-touch a h3 { margin-top: 2.5em; } .homepage .is-visible-touch a h2 { font-weight: 700; position: relative; left: 45%; transform: translateX(-50%); margin-top: 1.25em; } .homepage i { margin-top: -0.25em; } .homepage .container a * { display: inline-block; color: #fff; } .blog-info i { color: #9B9B9B; margin-right: 0.5em; } .blog-info > div { display: inline-block; position: relative; width: 15em; } .blog-info span { vertical-align: middle; } .blog-social .social-tooltip { visibility: hidden; width: 4em; background: #FFFFFF; border: 2px solid rgba(48,48,48,0.10); box-shadow: 0 4px 8px 0 rgba(0,0,0,0.35); border-radius: 2px; text-align: center; position: absolute; z-index: 1; top: 100%; left: -15%; opacity: 0; -webkit-transition: opacity 0.5s; -moz-transition: opacity 0.5s; -ms-transition: opacity 0.5s; -o-transition: opacity 0.5s; transition: opacity 0.5s; } .blog-social .social-share { list-style: none; padding: 0.25em 0.5em !important; } .blog-social .social-share li { display: inline; } .blog-social .social-share li i { margin: 0 0.25em; font-size: 1.2em; } .categories{ line-height: 3em; margin-top: 2em; } .category{ background: #EAEFFA; border-radius: 15px; height: 2em; padding: 0.5em 1em; margin-right: 1em; font-size: 0.9em; -webkit-transition: background 0.5s; -moz-transition: background 0.5s; -ms-transition: background 0.5s; -o-transition: background 0.5s; transition: background 0.5s; } .category a { text-decoration: none; color: #000000 !important; } .category:hover{ text-decoration: none; background: #B7BCC7; } @media (max-width: 1160px) { .row { padding: 2em; } .blog-social:hover .social-tooltip { visibility: visible; opacity: 1; } .blog-info > div { width: 10em; font-size: 0.9em; } .blog-social .social-share li { display: list-item; margin: 0.5em 0; } } @media (max-width: 767px) { .homepage i { margin-top: 0.5em; } .homepage .is-visible-touch h2 { display: none; } } </style> <div class="homepage"> <div class="row"> <div class="container is-hidden-touch"> <a href="/blogs/"> <i class="d-icon d-arrowhead-left"></i><h3>Latest Blogs</h3> </a> </div> <div class="container is-visible-touch"> <a href="/blogs/"> <i class="d-icon d-arrowhead-left is-large"></i><h2>Latest Blogs</h2> </a> </div> </div> </div> <section class="blog-body last-section"> <div class="row"> <div class="container"> <div class="pure-g-r"> <div class="pure-u-1-1 blog-info"> <div class="blog-date"><i class="d-icon d-calendar is-small"></i><span>March 28, 2023</span></div> <div class="blog-social"><i class="d-icon d-share is-small"></i>Share <ul class="social-share is-hidden-inline-touch"> <li><a class="d" title="Share on Facebook" href="https://www.facebook.com/sharer/sharer.php?u=https://blog.screwdriver.cd/post/713067803453816832" target="_blank" aria-label=”Share on Facebook”><i class="d-icon d-facebook" aria-hidden="true"></i></a></li> <li><a class="d" title="Share on Twitter" href="https://twitter.com/share?text=Latest updates - March 2023&url=https://blog.screwdriver.cd/post/713067803453816832" target="_blank" aria-label=”Share on Twitter"><i class="d-icon d-twitter" aria-hidden="true"></i></a></li> <li><a class="d" title="Share on Tumblr" href="https://www.tumblr.com/widgets/share/tool?url=https://blog.screwdriver.cd/post/713067803453816832" target="_blank" aria-label=”Share on Tumblr"><i class="d-icon d-tumblr" aria-hidden="true"></i></a></li> <li><a class="d" title="Share on Mail" href="mailto:?subject=Latest updates - March 2023&body=<p>Happy Spring! The Screwdriver team is pleased to announce our newest release which brings in new features and bug fixes across various components.</p><h2><b>New Features</b></h2><p><b>UI</b></p><p><b></b></p><ul><li>UI codebase has been upgraded to use <a href="https://github.com/screwdriver-cd/screwdriver/issues/2608">Ember.js 4.4</a></li><li>Build detail page to <a href="https://github.com/screwdriver-cd/screwdriver/issues/2822">display the Template</a> in use</li></ul><figure data-orig-width="3096" data-orig-height="394" class="tmblr-full"><img src="https://64.media.tumblr.com/210114d19670f7e61e88ce83c45929ba/11f868cfe6e9aebd-8f/s540x810/24b113d5bd0ab4d6493adacec21b9fef207a47ae.png" data-orig-width="3096" data-orig-height="394"/></figure><ul><li>Links in the event label are <a href="https://github.com/screwdriver-cd/screwdriver/issues/2833">now clickable</a></li><li><a href="https://github.com/screwdriver-cd/screwdriver/issues/2836">PR title</a> shows on PR build page</li><li>Job list to display a <a href="https://github.com/screwdriver-cd/screwdriver/issues/2774">build’s start &amp; end times</a> on hover</li></ul><figure data-orig-width="3086" data-orig-height="654" class="tmblr-full"><img src="https://64.media.tumblr.com/9bc706b16524ca11bf390d2848927694/11f868cfe6e9aebd-24/s540x810/7092ce4a62755add0ec5040111df8e4a6f02626e.png" data-orig-width="3086" data-orig-height="654"/></figure><h2><b><br/></b></h2><!-- more --><h2><b>Bug Fixes</b></h2><p><b>UI</b></p><ul><li>Job list view to <a href="https://github.com/screwdriver-cd/screwdriver/issues/2773">handle job display name</a> as expected</li><li>Artifacts with <a href="https://github.com/screwdriver-cd/screwdriver/issues/2839">&amp; in name</a> are now loaded properly<br/></li></ul><p><b>API</b></p><ul><li>Fixed data loss when adding <a href="https://github.com/screwdriver-cd/screwdriver/issues/2765">Templates from multiple browser tabs</a><br/></li><li>Add API endpoints to add or <a href="https://github.com/screwdriver-cd/screwdriver/pull/2797">remove one or more pipelines</a> in a collection</li></ul><h2><b>Internals</b></h2><ul><li>Fix for Launcher putting <a href="https://github.com/screwdriver-cd/screwdriver/issues/1398">invalid characters</a> on log lines</li></ul><h2><b>Compatibility List</b></h2><p>In order to have these improvements, you will need these minimum versions:</p><ul><li><a href="https://href.li/?https://hub.docker.com/repository/docker/screwdrivercd/screwdriver">API</a> - v6.0.9</li><li><a href="https://href.li/?https://hub.docker.com/repository/docker/screwdrivercd/ui">UI</a> - v1.0.790</li><li><a href="https://href.li/?https://hub.docker.com/repository/docker/screwdrivercd/store">Store</a> - v5.0.2</li><li><a href="https://href.li/?https://hub.docker.com/repository/docker/screwdrivercd/queue-service">Queue-Service</a> - v3.0.2</li><li><a href="https://href.li/?https://hub.docker.com/repository/docker/screwdrivercd/launcher">Launcher</a> - v6.0.180</li><li><a href="https://href.li/?https://hub.docker.com/repository/docker/screwdrivercd/buildcluster-queue-worker">Build Cluster Worker</a> - v3.0.3</li></ul><h2><b>Contributors</b></h2><p>Thanks to the following contributors for making these features possible:</p><ul><li><a href="https://href.li/?https://github.com/adong">Alan</a></li><li><a href="https://href.li/?https://github.com/banusha2">Anusha</a></li><li><a href="https://href.li/?https://github.com/itleigns">Haruka</a></li><li><a href="https://href.li/?https://github.com/ibu1224">Ibuki</a></li><li><a href="https://github.com/kumada626">Keisuke</a></li><li><a href="https://href.li/?https://github.com/pritamstyz4ever">Pritam</a></li><li><a href="https://href.li/?https://github.com/sagar1312">Sagar</a></li><li><a href="https://href.li/?https://github.com/y-oksaku">Yuki</a></li><li><a href="https://href.li/?https://github.com/yk634">Yuta</a></li></ul><h2><b>Questions and Suggestions</b></h2><p>We’d love to hear from you. If you have any questions, please feel free to reach out<a href="https://href.li/?https://docs.screwdriver.cd/about/support"> here</a>. You can also visit us on<a href="https://href.li/?https://github.com/screwdriver-cd"> Github</a> and<a href="https://href.li/?https://slack.screwdriver.cd/"> Slack</a>.</p><p><b>Author</b><br/><a href="https://t.umblr.com/redirect?z=https%3A%2F%2Fwww.linkedin.com%2Fin%2Fjithine%2F&amp;t=NzIyYTMyYTRjYjdiNGVkMzU1Y2UxNjMwMzMzYTVmN2U5YTU1OWFjNSxiZTRiMzRlY2U3MjA1MjFkMDYwNmEyYWUzYjJmMmMwZWYyMTRjMzVh&amp;ts=1672423789">Jithin Emmanuel</a>, Director Of Engineering, Yahoo</p>,https://blog.screwdriver.cd/post/713067803453816832" target="_blank" aria-label=”Share on Mail"><i class="d-icon d-mail" aria-hidden="true"></i></a></li> </ul> <div class="social-tooltip"> <ul class="social-share"> <li><a class="d" title="Share on Facebook" href="https://www.facebook.com/sharer/sharer.php?u=https://blog.screwdriver.cd/post/713067803453816832" target="_blank" aria-label=”Share on Facebook”><i class="d-icon d-facebook" aria-hidden="true"></i></a></li> <li><a class="d" title="Share on Twitter" href="https://twitter.com/share?text=Latest updates - March 2023&url=https://blog.screwdriver.cd/post/713067803453816832" target="_blank" aria-label=”Share on Twitter"><i class="d-icon d-twitter" aria-hidden="true"></i></a></li> <li><a class="d" title="Share on Tumblr" href="https://www.tumblr.com/widgets/share/tool?url=https://blog.screwdriver.cd/post/713067803453816832" target="_blank" aria-label=”Share on Tumblr"><i class="d-icon d-tumblr" aria-hidden="true"></i></a></li> <li><a class="d" title="Share on Mail" href="mailto:?subject=Latest updates - March 2023&body=<p>Happy Spring! The Screwdriver team is pleased to announce our newest release which brings in new features and bug fixes across various components.</p><h2><b>New Features</b></h2><p><b>UI</b></p><p><b></b></p><ul><li>UI codebase has been upgraded to use <a href="https://github.com/screwdriver-cd/screwdriver/issues/2608">Ember.js 4.4</a></li><li>Build detail page to <a href="https://github.com/screwdriver-cd/screwdriver/issues/2822">display the Template</a> in use</li></ul><figure data-orig-width="3096" data-orig-height="394" class="tmblr-full"><img src="https://64.media.tumblr.com/210114d19670f7e61e88ce83c45929ba/11f868cfe6e9aebd-8f/s540x810/24b113d5bd0ab4d6493adacec21b9fef207a47ae.png" data-orig-width="3096" data-orig-height="394"/></figure><ul><li>Links in the event label are <a href="https://github.com/screwdriver-cd/screwdriver/issues/2833">now clickable</a></li><li><a href="https://github.com/screwdriver-cd/screwdriver/issues/2836">PR title</a> shows on PR build page</li><li>Job list to display a <a href="https://github.com/screwdriver-cd/screwdriver/issues/2774">build’s start &amp; end times</a> on hover</li></ul><figure data-orig-width="3086" data-orig-height="654" class="tmblr-full"><img src="https://64.media.tumblr.com/9bc706b16524ca11bf390d2848927694/11f868cfe6e9aebd-24/s540x810/7092ce4a62755add0ec5040111df8e4a6f02626e.png" data-orig-width="3086" data-orig-height="654"/></figure><h2><b><br/></b></h2><!-- more --><h2><b>Bug Fixes</b></h2><p><b>UI</b></p><ul><li>Job list view to <a href="https://github.com/screwdriver-cd/screwdriver/issues/2773">handle job display name</a> as expected</li><li>Artifacts with <a href="https://github.com/screwdriver-cd/screwdriver/issues/2839">&amp; in name</a> are now loaded properly<br/></li></ul><p><b>API</b></p><ul><li>Fixed data loss when adding <a href="https://github.com/screwdriver-cd/screwdriver/issues/2765">Templates from multiple browser tabs</a><br/></li><li>Add API endpoints to add or <a href="https://github.com/screwdriver-cd/screwdriver/pull/2797">remove one or more pipelines</a> in a collection</li></ul><h2><b>Internals</b></h2><ul><li>Fix for Launcher putting <a href="https://github.com/screwdriver-cd/screwdriver/issues/1398">invalid characters</a> on log lines</li></ul><h2><b>Compatibility List</b></h2><p>In order to have these improvements, you will need these minimum versions:</p><ul><li><a href="https://href.li/?https://hub.docker.com/repository/docker/screwdrivercd/screwdriver">API</a> - v6.0.9</li><li><a href="https://href.li/?https://hub.docker.com/repository/docker/screwdrivercd/ui">UI</a> - v1.0.790</li><li><a href="https://href.li/?https://hub.docker.com/repository/docker/screwdrivercd/store">Store</a> - v5.0.2</li><li><a href="https://href.li/?https://hub.docker.com/repository/docker/screwdrivercd/queue-service">Queue-Service</a> - v3.0.2</li><li><a href="https://href.li/?https://hub.docker.com/repository/docker/screwdrivercd/launcher">Launcher</a> - v6.0.180</li><li><a href="https://href.li/?https://hub.docker.com/repository/docker/screwdrivercd/buildcluster-queue-worker">Build Cluster Worker</a> - v3.0.3</li></ul><h2><b>Contributors</b></h2><p>Thanks to the following contributors for making these features possible:</p><ul><li><a href="https://href.li/?https://github.com/adong">Alan</a></li><li><a href="https://href.li/?https://github.com/banusha2">Anusha</a></li><li><a href="https://href.li/?https://github.com/itleigns">Haruka</a></li><li><a href="https://href.li/?https://github.com/ibu1224">Ibuki</a></li><li><a href="https://github.com/kumada626">Keisuke</a></li><li><a href="https://href.li/?https://github.com/pritamstyz4ever">Pritam</a></li><li><a href="https://href.li/?https://github.com/sagar1312">Sagar</a></li><li><a href="https://href.li/?https://github.com/y-oksaku">Yuki</a></li><li><a href="https://href.li/?https://github.com/yk634">Yuta</a></li></ul><h2><b>Questions and Suggestions</b></h2><p>We’d love to hear from you. If you have any questions, please feel free to reach out<a href="https://href.li/?https://docs.screwdriver.cd/about/support"> here</a>. You can also visit us on<a href="https://href.li/?https://github.com/screwdriver-cd"> Github</a> and<a href="https://href.li/?https://slack.screwdriver.cd/"> Slack</a>.</p><p><b>Author</b><br/><a href="https://t.umblr.com/redirect?z=https%3A%2F%2Fwww.linkedin.com%2Fin%2Fjithine%2F&amp;t=NzIyYTMyYTRjYjdiNGVkMzU1Y2UxNjMwMzMzYTVmN2U5YTU1OWFjNSxiZTRiMzRlY2U3MjA1MjFkMDYwNmEyYWUzYjJmMmMwZWYyMTRjMzVh&amp;ts=1672423789">Jithin Emmanuel</a>, Director Of Engineering, Yahoo</p>,https://blog.screwdriver.cd/post/713067803453816832" target="_blank" aria-label=”Share on Mail"><i class="d-icon d-mail" aria-hidden="true"></i></a></li> </ul> </div> </div> </div> <div class="pure-u-1-1"> <h2 class="blog-title">Latest updates - March 2023</h2> </div> <div class="pure-u-1-1"> <article class="blogBody" style="display: none;"> <p>Happy Spring! The Screwdriver team is pleased to announce our newest release which brings in new features and bug fixes across various components.</p><h2><b>New Features</b></h2><p><b>UI</b></p><p><b></b></p><ul><li>UI codebase has been upgraded to use <a href="https://github.com/screwdriver-cd/screwdriver/issues/2608">Ember.js 4.4</a></li><li>Build detail page to <a href="https://github.com/screwdriver-cd/screwdriver/issues/2822">display the Template</a> in use</li></ul><figure data-orig-width="3096" data-orig-height="394" class="tmblr-full"><img src="https://64.media.tumblr.com/210114d19670f7e61e88ce83c45929ba/11f868cfe6e9aebd-8f/s540x810/24b113d5bd0ab4d6493adacec21b9fef207a47ae.png" data-orig-width="3096" data-orig-height="394"/></figure><ul><li>Links in the event label are <a href="https://github.com/screwdriver-cd/screwdriver/issues/2833">now clickable</a></li><li><a href="https://github.com/screwdriver-cd/screwdriver/issues/2836">PR title</a> shows on PR build page</li><li>Job list to display a <a href="https://github.com/screwdriver-cd/screwdriver/issues/2774">build’s start &amp; end times</a> on hover</li></ul><figure data-orig-width="3086" data-orig-height="654" class="tmblr-full"><img src="https://64.media.tumblr.com/9bc706b16524ca11bf390d2848927694/11f868cfe6e9aebd-24/s540x810/7092ce4a62755add0ec5040111df8e4a6f02626e.png" data-orig-width="3086" data-orig-height="654"/></figure><h2><b><br/></b></h2><!-- more --><h2><b>Bug Fixes</b></h2><p><b>UI</b></p><ul><li>Job list view to <a href="https://github.com/screwdriver-cd/screwdriver/issues/2773">handle job display name</a> as expected</li><li>Artifacts with <a href="https://github.com/screwdriver-cd/screwdriver/issues/2839">&amp; in name</a> are now loaded properly<br/></li></ul><p><b>API</b></p><ul><li>Fixed data loss when adding <a href="https://github.com/screwdriver-cd/screwdriver/issues/2765">Templates from multiple browser tabs</a><br/></li><li>Add API endpoints to add or <a href="https://github.com/screwdriver-cd/screwdriver/pull/2797">remove one or more pipelines</a> in a collection</li></ul><h2><b>Internals</b></h2><ul><li>Fix for Launcher putting <a href="https://github.com/screwdriver-cd/screwdriver/issues/1398">invalid characters</a> on log lines</li></ul><h2><b>Compatibility List</b></h2><p>In order to have these improvements, you will need these minimum versions:</p><ul><li><a href="https://href.li/?https://hub.docker.com/repository/docker/screwdrivercd/screwdriver">API</a> - v6.0.9</li><li><a href="https://href.li/?https://hub.docker.com/repository/docker/screwdrivercd/ui">UI</a> - v1.0.790</li><li><a href="https://href.li/?https://hub.docker.com/repository/docker/screwdrivercd/store">Store</a> - v5.0.2</li><li><a href="https://href.li/?https://hub.docker.com/repository/docker/screwdrivercd/queue-service">Queue-Service</a> - v3.0.2</li><li><a href="https://href.li/?https://hub.docker.com/repository/docker/screwdrivercd/launcher">Launcher</a> - v6.0.180</li><li><a href="https://href.li/?https://hub.docker.com/repository/docker/screwdrivercd/buildcluster-queue-worker">Build Cluster Worker</a> - v3.0.3</li></ul><h2><b>Contributors</b></h2><p>Thanks to the following contributors for making these features possible:</p><ul><li><a href="https://href.li/?https://github.com/adong">Alan</a></li><li><a href="https://href.li/?https://github.com/banusha2">Anusha</a></li><li><a href="https://href.li/?https://github.com/itleigns">Haruka</a></li><li><a href="https://href.li/?https://github.com/ibu1224">Ibuki</a></li><li><a href="https://github.com/kumada626">Keisuke</a></li><li><a href="https://href.li/?https://github.com/pritamstyz4ever">Pritam</a></li><li><a href="https://href.li/?https://github.com/sagar1312">Sagar</a></li><li><a href="https://href.li/?https://github.com/y-oksaku">Yuki</a></li><li><a href="https://href.li/?https://github.com/yk634">Yuta</a></li></ul><h2><b>Questions and Suggestions</b></h2><p>We’d love to hear from you. If you have any questions, please feel free to reach out<a href="https://href.li/?https://docs.screwdriver.cd/about/support"> here</a>. You can also visit us on<a href="https://href.li/?https://github.com/screwdriver-cd"> Github</a> and<a href="https://href.li/?https://slack.screwdriver.cd/"> Slack</a>.</p><p><b>Author</b><br/><a href="https://t.umblr.com/redirect?z=https%3A%2F%2Fwww.linkedin.com%2Fin%2Fjithine%2F&amp;t=NzIyYTMyYTRjYjdiNGVkMzU1Y2UxNjMwMzMzYTVmN2U5YTU1OWFjNSxiZTRiMzRlY2U3MjA1MjFkMDYwNmEyYWUzYjJmMmMwZWYyMTRjMzVh&amp;ts=1672423789">Jithin Emmanuel</a>, Director Of Engineering, Yahoo</p> </article> </div> <div class="pure-u-1-1"> <div class="categories is-hidden-touch"> <span class="category"> <a href='screwdrivercd' target="_blank">screwdrivercd</a></span> <span class="category"> <a href='cicd' target="_blank">cicd</a></span> <span class="category"> <a href='Ember.js' target="_blank">Ember.js</a></span> </div> </div> </div> </div> </div> </section> <script nonce="AmqservOgxJUKLbhF9TkBQ=="> var body = $(".blogBody"); var innerHTML = body.html() .replace(/&/g, "&") .replace(/</g, "<") .replace(/>/g, ">") .replace(/"/g, "\"") .replace(/'/g, "\'"); body.html(innerHTML); body.show(); </script> </div> </div> </div> <!-- FOOTER --> <footer class="footer yahoo" style="background-color: #f0f3f5;background-image: none;"> <section class="section"> <div class="container"> <div class="columns is-variable is-multiline is-5"> <div class="column foot-link-block"> <span class="featured-header is-block is-bold"> Support <i class="toggle-icon fa fa-angle-down" aria-hidden="true"></i> </span> <div class="clickDisplay hideClick"> <a href="https://guce.yahoo.com/terms?locale=en-US" target="_blank" rel="noopener">Terms</a> <a style="cursor: default; pointer-events: none"> and </a> <a href="https://guce.yahoo.com/privacy-policy?locale=en-US" target="_blank" rel="noopener">Privacy Policy</a> </div> <a class="is-block clickDisplay hideClick" href="https://guce.yahoo.com/privacy-dashboard?locale=en-US" target="_blank" rel="noopener">Privacy Dashboard</a> <a class="is-block clickDisplay hideClick" href="https://developer.yahoo.com/opensource/" target="_blank" rel="noopener">About Us</a> <a class="is-block clickDisplay hideClick" href="https://www.linkedin.com/company/yahoo/jobs/" target="_blank" rel="noopener">Jobs</a> <a class="is-block clickDisplay hideClick" href="https://legal.yahoo.com/us/en/yahoo/privacy/products/developer/index.html" target="_blank" rel="noopener">Developer Privacy</a> <a class="is-block clickDisplay hideClick" href="https://policies.yahoo.com/us/en/yahoo/terms/product-atos/apiforydn/index.htm" target="_blank" rel="noopener">Developer Terms</a> <a class="is-block clickDisplay hideClick" href="https://developer.yahoo.com/policies/" target="_blank" rel="noopener">Developer Policies</a> <a class="is-block clickDisplay hideClick" href="https://yahoo.uservoice.com/forums/182455-yahoo-developer-network" target="_blank" rel="noopener">Site Feedback</a> </div> <div class="column foot-link-block"> <span class="featured-header is-block is-bold">Brands <i class="toggle-icon fa fa-angle-down" aria-hidden="true"></i> </span> <a class="is-block clickDisplay hideClick" href="https://developer.yahoo.com" target="_blank" rel="noopener">Yahoo Developer</a> <a class="is-block clickDisplay hideClick" href="https://developer.edgecast.com/" target="_blank" rel="noopener">Yahoo Edgecast Developer</a> <a class="is-block clickDisplay hideClick" href="https://help.yahoo.com/kb/account" target="_blank" rel="noopener">Ad Platform Help Center</a> </div> <div class="column logo foot-link-block"> <div> <a class="nav-brand is-block" href="https://www.yahoo.com/" target="_blank" rel="noopener"> <img class="nav-brand is-block" src="/static/images/yahoo-logo-purple.svg" alt="Yahoo Logo"/> </a> <span id="copyright" class="is-block is-size-7 copy-right"></span> </div> </div> </div> </div> </section> </footer> <script nonce="AmqservOgxJUKLbhF9TkBQ=="> $('.featured-header').click(function(){ $(this).find("i").toggleClass('fa-angle-down fa-angle-up') $(this).nextAll('.clickDisplay').toggleClass('hideClick showClick') }); $('#copyright').html("© " + new Date().getFullYear() + " Yahoo. All rights reserved."); </script> <script nonce="AmqservOgxJUKLbhF9TkBQ==" src="https://s.yimg.com/zz/combo?oo/fe/js/polyfills/assign-min_6f975308e.js&oo/fe/js/navigation-min_3c753d938.js&oo/fe/js/utils-min_65ef3b583.js&oo/fe/js/admin-min_4f54d799e.js"></script> <script nonce="AmqservOgxJUKLbhF9TkBQ=="> var head = $('.nb_page-head-search'), url = document.URL, fragment = url.substring(url.indexOf('#')), pathAndFragment = '/' + url.split('/').splice(3).join('/'), // i.e., /gemini/guide/gsg.html#integrating-oauth path = (pathAndFragment.indexOf('#') > -1) ? pathAndFragment.substring(0, pathAndFragment.indexOf('#')) : pathAndFragment, // i.e., /gemini/guide/gsg.html // the menu li container that matches the scope of menu items on the current page menuPageRoot, languageLeaveWait, userLeaveWait, // a timeout for mouseleave from header's user id and pic elements menuIsExpanded = false, overMenu = false, // is cursor over the user id or pic userOverlay, // menu overlay that pops up from user id or pic appsOverlay, // menu overlay that pops up from My Apps link languageOverlay, // menu overlay that pops up from language dropdown link dialpadOverlay, searchOverlay, headToMenuArr = [], $headings, menuList = $('.pure-menu a'), menuLiList = $('.pure-menu li'), pageMenuList, // only the menu items that have heads on this page (used for scrolling highlight) isThrottled = false, throttleDuration = 100; // ms if ($('.feedback_close')) { $('.feedback_close').click(function (e) { $('.feedback').remove(); }); } // allows the menu to slide in/out on mobile size screens function slideMobileMenu() { $('#layout').toggleClass('active'); // the menu and page contents $('.pure-menu').toggleClass('active'); // the menu $('#menuLink').toggleClass('active'); // hamburger icon $('.nb_footer').toggleClass('active'); // footer needs to slide too $('.nb_mobile-header').toggleClass('active'); // top bar needs to slide too $('.mobile-header').toggleClass('active'); // top bar needs to slide too $('.footer').toggleClass('active'); // footer needs to slide too } $('#menuLink').click(function (e) { e.preventDefault(); // without this, the first menu item can get triggered on a mobile device when the hamburger icon is clicked setTimeout(function () { slideMobileMenu(); }, 200); }); // set/remove box-shadow on head if scrolled $(document).scroll(function () { if (window.scrollY > 5) { head.addClass('head-shadow'); } else { head.removeClass('head-shadow'); } }); // My Apps Overlay Dropdown appsOverlay = $('#apps-overlay'); appsOverlay.css('z-index', 10); // show the apps menu if mouse enters My Apps link $('.head-right-controls').delegate('#myapps-dropdown', 'mouseover', function (e) { languageOverlay.css('display','none'); var filterCheck = document.getElementById("filter-dropdown"); if(filterCheck){ searchOverlay.css('display','none'); } const left = $(".head-right-controls").position().left + $(".head-right-controls").width() - 280; appsOverlay.css({left: left + "px"}); appsOverlay.css('display','table'); }); // when over My Apps menu, clear the timer // that's waiting to remove the menu $('#apps-overlay').mouseover(function () { clearTimeout(languageLeaveWait); overMenu = true; }); // when cursor leaves My Apps, // if it doesn't move over the menu within 1sec, // hide the menu $('#myapps-dropdown').mouseleave(function (e) { languageLeaveWait = setTimeout(function () { if (overMenu === false) { removeAppsOverlay(e); } }, 1000); }); function removeAppsOverlay(e) { appsOverlay.css('display','none'); overMenu = false; } $('#apps-overlay').click(removeAppsOverlay); $('#apps-overlay').mouseleave(removeAppsOverlay); // Begin language overlay languageOverlay = $('#language-overlay'); languageOverlay.css('z-index', 10); $('.head-right-controls').delegate('#language-dropdown', 'mouseover', function (e) { appsOverlay.css('display','none'); dialpadOverlay.css('display','none'); var filterCheck = document.getElementById("filter-dropdown"); if(filterCheck){ searchOverlay.css('display','none'); const left = $(".head-right-controls").position().left + $(".head-right-controls").width() - 155; languageOverlay.css({left: left + "px"}); } else { const top = $(".head-right-controls").position().top + $(".head-right-controls").height() + 5; const left = $(".head-right-controls").position().left + $(".head-right-controls").width() - 275; languageOverlay.css({ top: top+"px", left: left + "px" }); } languageOverlay.css('display','table'); }); $('#language-overlay').mouseover(function () { clearTimeout(languageLeaveWait); overMenu = true; }); // when cursor leaves My Apps, // if it doesn't move over the menu within 1sec, // hide the menu $('#language-dropdown').mouseleave(function (e) { languageLeaveWait = setTimeout(function () { if (overMenu === false) { removeLanguageOverlay(e); } }, 1000); }); function removeLanguageOverlay() { languageOverlay.css('display','none'); overMenu = false; } $('#language-overlay').click(removeLanguageOverlay); $('#language-overlay').mouseleave(removeLanguageOverlay); // Begin dialpad overlay dialpadOverlay = $('#dialpad-overlay'); dialpadOverlay.css('z-index', 10); $('.head-right-controls').delegate('#dialpad-dropdown', 'mouseover', function (e) { let top; let left; left = $(".head-right-controls").position().left + $(".head-right-controls").width()-545; top = $(".head-right-controls").position().top + $(".head-right-controls").height() - 5; languageOverlay.css('display','none'); dialpadOverlay.css({ top: top+"px", left: left + "px" }); dialpadOverlay.css({ 'display':'block', 'background-color': '#fff', 'border-radius': '4px', 'box-shadow': '0 2px 8px 2px rgba(0, 0, 0, 0.36)', 'width': '410px', 'height': '265px', 'padding':'25px 25px 0px', 'min-width': '20rem'}); }); var overDialMenu = false; $('#dialpad-overlay').mouseover(function () { clearTimeout(dialpadLeaveWait); overDialMenu = true; }); // when cursor leaves My Apps, // if it doesn't move over the menu within 1sec, // hide the menu $('#dialpad-dropdown').mouseleave(function (e) { dialpadLeaveWait = setTimeout(function () { if (overDialMenu === false) { removeDialpadOverlay(e); } }, 1000); }); function removeDialpadOverlay() { dialpadOverlay.css('display','none'); overDialMenu = false; } $('#dialpad-overlay').click(removeDialpadOverlay); $('#dialpad-overlay').mouseleave(removeDialpadOverlay); $('#dialpad-dropdown').click(function(){ $('#dialpad-overlay').css('display','block'); }); function supportsSVG() { return !!document.createElementNS && !!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect; } if (!supportsSVG()) { var imgs = document.getElementsByTagName('img'); var dotSVG = /\.svg$/; for (var i = 0; i !== imgs.length; ++i) { if (imgs[i].src.match(dotSVG) && imgs[i].dataAlternate) { imgs[i].src = imgs[i].dataAlternate; } } } const tabholders = document.getElementsByClassName('tabview'); for (var x = 0, len = tabholders.length; x < len; x++) { $("#" + $(tabholders[x]).attr("id")).easytabs({animationSpeed:'fast'}); } $(".tabview-tab a").click(function () { for (var x = 0, len = tabholders.length; x < len; x++) { $("#" + $(tabholders[x]).attr("id")).easytabs({'select':$(this).attr('href')}); } }); </script> <script nonce="AmqservOgxJUKLbhF9TkBQ==" src="/static/js/right-nav.js"></script> <script nonce="AmqservOgxJUKLbhF9TkBQ==" src="https://s.yimg.com/ss/rapid-3.41.3.js"></script> <script nonce="AmqservOgxJUKLbhF9TkBQ=="> var rapid = new YAHOO.i13n.Rapid({webworker_file: 'http://l.yimg.com/oo/fe/js/vendor/rapidworker-1-min_b8fccc270.js' ,spaceid:1197800063, tracked_mods:['layout']}); </script> <script nonce="AmqservOgxJUKLbhF9TkBQ=="> $(document).ready(function() { $('.dropdown-trigger button').click(function(){ var element = $('.dropdown'); $('.dropdown').toggleClass('is-active'); $('.dropdown button').attr( 'aria-expanded', $(element).hasClass('is-active') ); event.stopPropagation(); }); $('body').click(function(){ var element = $('.dropdown'); var menuOpen = $(element).hasClass('is-active'); if (menuOpen) { $(element).removeClass('is-active'); $('.dropdown button').attr('aria-expanded', !menuOpen); } }); }); (function(){ var test = document.createElement('div'); test.innerHTML = ' '; test.className = 'adsbox'; document.body.appendChild(test); window.setTimeout(function() { if (test.offsetHeight === 0) { if ($(':header').length > 0 && $(':header').is(':visible') === false) { var callout = $('div.g-content'); callout.first().prepend("<div class='admonition important' style='margin-top: 20px'><p class='first admonition-title'>Ad Blocker Detected</p><p class='last'>We've detected the use of an ad blocker. For the best viewing experience, we recommend that you disable your ad blocker.</p>"); } } test.remove(); }, 100); })(); </script> <script nonce="AmqservOgxJUKLbhF9TkBQ=="> (function() { // Check if we're in gemini domain if (window.location.href.indexOf('gemini-publishers-synd/docs/') > -1) { console.log(window.location.href); var callout = $('div.g-content'); callout.first().prepend("<div class='admonition important' style='margin-top: 20px'><p class='first admonition-title'>Deprication Warning</p><p class='last'>These docs have been deprecated. Please use <a href='https://developer.yahoo.com/flurry/docs/publisher/web/'>the documentation here</a>.</p>"); } })(); $("div.section table").parent().css("overflow-x", "auto"); </script> <!-- renders each hoverbox--> <script nonce="AmqservOgxJUKLbhF9TkBQ=="> function enableTooltip(){ $('.reference.internal').each(function() { var reference = $(this).find('.std-term'); var definition = $(this.hash + ' + dd'); if (reference.length !== 0 && definition.length !== 0) { $(this).removeAttr("href"); // remove link to glossary page $(this).on("click", function(e) { // make it not clickable e.preventDefault(); return false; }); $(reference) // set tooltip .tooltip({ html: true, trigger: 'manual', placement: 'top', title: definition.html() }).on("mouseenter", function() { var _this = this; $('.reference.internal .std-term').tooltip('hide'); $(this).tooltip('show'); $('.tooltip').on('mouseleave', function() { $(_this).tooltip('hide'); }); }).on("mouseleave", function() { var _this = this; setTimeout(function() { if ($('.tooltip:hover').length === 0) { $(_this).tooltip('hide'); } }, 200); }); } }); } enableTooltip(); </script> <script nonce="AmqservOgxJUKLbhF9TkBQ==" type="text/javascript" src="/static/js/vmdn.js"></script> <script nonce="AmqservOgxJUKLbhF9TkBQ==" type="text/javascript" src="/static/js/rebranding_documentation.js"></script> </body> </html>