hass.tibber_prices/developer/release-management.html
github-actions[bot] e9aea64a2e deploy: 6898c126e3
2025-12-06 01:42:39 +00:00

172 lines
No EOL
71 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-release-management" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.9.2">
<title data-rh="true">Release Notes Generation | Tibber Prices - Developer Guide</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://jpawlowski.github.io/hass.tibber_prices/developer/img/social-card.png"><meta data-rh="true" name="twitter:image" content="https://jpawlowski.github.io/hass.tibber_prices/developer/img/social-card.png"><meta data-rh="true" property="og:url" content="https://jpawlowski.github.io/hass.tibber_prices/developer/release-management"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Release Notes Generation | Tibber Prices - Developer Guide"><meta data-rh="true" name="description" content="This project supports three ways to generate release notes from conventional commits, plus automatic version management."><meta data-rh="true" property="og:description" content="This project supports three ways to generate release notes from conventional commits, plus automatic version management."><link data-rh="true" rel="icon" href="/hass.tibber_prices/developer/img/logo.svg"><link data-rh="true" rel="canonical" href="https://jpawlowski.github.io/hass.tibber_prices/developer/release-management"><link data-rh="true" rel="alternate" href="https://jpawlowski.github.io/hass.tibber_prices/developer/release-management" hreflang="en"><link data-rh="true" rel="alternate" href="https://jpawlowski.github.io/hass.tibber_prices/developer/release-management" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Release Notes Generation","item":"https://jpawlowski.github.io/hass.tibber_prices/developer/release-management"}]}</script><link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&amp;family=Space+Grotesk:wght@500;600;700&amp;display=swap"><link rel="stylesheet" href="/hass.tibber_prices/developer/assets/css/styles.be4f3d68.css">
<script src="/hass.tibber_prices/developer/assets/js/runtime~main.09b7b31a.js" defer="defer"></script>
<script src="/hass.tibber_prices/developer/assets/js/main.5eb4cf38.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")),document.documentElement.setAttribute("data-theme-choice",t||"system")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><link rel="preload" as="image" href="/hass.tibber_prices/developer/img/logo.svg"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/hass.tibber_prices/developer/"><div class="navbar__logo"><img src="/hass.tibber_prices/developer/img/logo.svg" alt="Tibber Prices Integration Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/hass.tibber_prices/developer/img/logo.svg" alt="Tibber Prices Integration Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">Tibber Prices HA</b></a><a class="navbar__item navbar__link" href="/hass.tibber_prices/developer/intro">Developer Guide</a><a href="https://jpawlowski.github.io/hass.tibber_prices/user/" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">User Docs<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/hass.tibber_prices/developer/release-management">Next 🚧</a><a href="https://github.com/jpawlowski/hass.tibber_prices" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP systemToggleIcon_QzmC"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer_Bca1"><div class="navbar__search"><span aria-label="expand searchbar" role="button" class="search-icon" tabindex="0"></span><input id="search_input_react" type="search" placeholder="Loading..." aria-label="Search" class="navbar__search-input search-bar" disabled=""></div></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_z2l0"><div class="docsWrapper_hBAB"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docRoot_UBD9"><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class="sidebarViewport_aRkj"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/hass.tibber_prices/developer/intro"><span title="Developer Documentation" class="linkLabel_WmDU">Developer Documentation</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="true" href="/hass.tibber_prices/developer/architecture"><span title="🏗️ Architecture" class="categoryLinkLabel_W154">🏗️ Architecture</span></a></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/developer/architecture"><span title="Architecture" class="linkLabel_WmDU">Architecture</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/developer/timer-architecture"><span title="Timer Architecture" class="linkLabel_WmDU">Timer Architecture</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/developer/caching-strategy"><span title="Caching Strategy" class="linkLabel_WmDU">Caching Strategy</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/developer/api-reference"><span title="API Reference" class="linkLabel_WmDU">API Reference</span></a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="true" href="/hass.tibber_prices/developer/setup"><span title="💻 Development" class="categoryLinkLabel_W154">💻 Development</span></a></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/developer/setup"><span title="Development Setup" class="linkLabel_WmDU">Development Setup</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/developer/coding-guidelines"><span title="Coding Guidelines" class="linkLabel_WmDU">Coding Guidelines</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/developer/critical-patterns"><span title="Critical Behavior Patterns - Testing Guide" class="linkLabel_WmDU">Critical Behavior Patterns - Testing Guide</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/developer/debugging"><span title="Debugging Guide" class="linkLabel_WmDU">Debugging Guide</span></a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="true" href="/hass.tibber_prices/developer/period-calculation-theory"><span title="📐 Advanced Topics" class="categoryLinkLabel_W154">📐 Advanced Topics</span></a></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/developer/period-calculation-theory"><span title="Period Calculation Theory" class="linkLabel_WmDU">Period Calculation Theory</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/developer/refactoring-guide"><span title="Refactoring Guide" class="linkLabel_WmDU">Refactoring Guide</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/developer/performance"><span title="Performance Optimization" class="linkLabel_WmDU">Performance Optimization</span></a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="true" href="/hass.tibber_prices/developer/contributing"><span title="📝 Contributing" class="categoryLinkLabel_W154">📝 Contributing</span></a></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/developer/contributing"><span title="Contributing Guide" class="linkLabel_WmDU">Contributing Guide</span></a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" role="button" aria-expanded="true" href="/hass.tibber_prices/developer/release-management"><span title="🚀 Release" class="categoryLinkLabel_W154">🚀 Release</span></a></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/hass.tibber_prices/developer/release-management"><span title="Release Notes Generation" class="linkLabel_WmDU">Release Notes Generation</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/developer/testing"><span title="Testing" class="linkLabel_WmDU">Testing</span></a></li></ul></li></ul></nav><button type="button" title="Collapse sidebar" aria-label="Collapse sidebar" class="button button--secondary button--outline collapseSidebarButton_PEFL"><svg width="20" height="20" aria-hidden="true" class="collapseSidebarButtonIcon_kv0_"><g fill="#7a7a7a"><path d="M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"></path><path d="M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"></path></g></svg></button></div></div></aside><main class="docMainContainer_TBSr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="theme-doc-version-banner alert alert--warning margin-bottom--md" role="alert"><div>This is unreleased documentation for <!-- -->Tibber Prices - Developer Guide<!-- --> <b>Next 🚧</b> version.</div><div class="margin-top--md">For up-to-date documentation, see the <b><a href="/hass.tibber_prices/developer/release-management">latest version</a></b> (<!-- -->Next 🚧<!-- -->).</div></div><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/hass.tibber_prices/developer/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">🚀 Release</span></li><li class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link">Release Notes Generation</span></li></ul></nav><span class="theme-doc-version-badge badge badge--secondary">Version: Next 🚧</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Release Notes Generation</h1></header>
<p>This project supports <strong>three ways</strong> to generate release notes from conventional commits, plus <strong>automatic version management</strong>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-quick-start-preparing-a-release">🚀 Quick Start: Preparing a Release<a href="#-quick-start-preparing-a-release" class="hash-link" aria-label="Direct link to 🚀 Quick Start: Preparing a Release" title="Direct link to 🚀 Quick Start: Preparing a Release" translate="no"></a></h2>
<p><strong>Recommended workflow (automatic &amp; foolproof):</strong></p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># 1. Use the helper script to prepare release</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">./scripts/release/prepare </span><span class="token number" style="color:#36acaa">0.3</span><span class="token plain">.0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># This will:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># - Update manifest.json version to 0.3.0</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># - Create commit: &quot;chore(release): bump version to 0.3.0&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># - Create tag: v0.3.0</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># - Show you what will be pushed</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># 2. Review and push when ready</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> push origin main v0.3.0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># 3. CI/CD automatically:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># - Detects the new tag</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># - Generates release notes (excluding version bump commit)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># - Creates GitHub release</span><br></span></code></pre></div></div>
<p><strong>If you forget to bump manifest.json:</strong></p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Just edit manifest.json manually and commit</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">vim</span><span class="token plain"> custom_components/tibber_prices/manifest.json </span><span class="token comment" style="color:#999988;font-style:italic"># &quot;version&quot;: &quot;0.3.0&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> commit </span><span class="token parameter variable" style="color:#36acaa">-am</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;chore(release): bump version to 0.3.0&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> push</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Auto-Tag workflow detects manifest.json change and creates tag automatically!</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Then Release workflow kicks in and creates the GitHub release</span><br></span></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-release-options">📋 Release Options<a href="#-release-options" class="hash-link" aria-label="Direct link to 📋 Release Options" title="Direct link to 📋 Release Options" translate="no"></a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-github-ui-button-easiest">1. GitHub UI Button (Easiest)<a href="#1-github-ui-button-easiest" class="hash-link" aria-label="Direct link to 1. GitHub UI Button (Easiest)" title="Direct link to 1. GitHub UI Button (Easiest)" translate="no"></a></h3>
<p>Use GitHub&#x27;s built-in release notes generator:</p>
<ol>
<li class="">Go to <a href="https://github.com/jpawlowski/hass.tibber_prices/releases" target="_blank" rel="noopener noreferrer" class="">Releases</a></li>
<li class="">Click &quot;Draft a new release&quot;</li>
<li class="">Select your tag</li>
<li class="">Click &quot;Generate release notes&quot; button</li>
<li class="">Edit if needed and publish</li>
</ol>
<p><strong>Uses:</strong> <code>.github/release.yml</code> configuration
<strong>Best for:</strong> Quick releases, works with PRs that have labels
<strong>Note:</strong> Direct commits appear in &quot;Other Changes&quot; category</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-local-script-intelligent">2. Local Script (Intelligent)<a href="#2-local-script-intelligent" class="hash-link" aria-label="Direct link to 2. Local Script (Intelligent)" title="Direct link to 2. Local Script (Intelligent)" translate="no"></a></h3>
<p>Run <code>./scripts/release/generate-notes</code> to parse conventional commits locally.</p>
<p><strong>Automatic backend detection:</strong></p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Generate from latest tag to HEAD</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">./scripts/release/generate-notes</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Generate between specific tags</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">./scripts/release/generate-notes v1.0.0 v1.1.0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Generate from tag to HEAD</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">./scripts/release/generate-notes v1.0.0 HEAD</span><br></span></code></pre></div></div>
<p><strong>Force specific backend:</strong></p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Use AI (GitHub Copilot CLI)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">RELEASE_NOTES_BACKEND</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">copilot ./scripts/release/generate-notes</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Use git-cliff (template-based)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">RELEASE_NOTES_BACKEND</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">git-cliff ./scripts/release/generate-notes</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Use manual parsing (grep/awk fallback)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">RELEASE_NOTES_BACKEND</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">manual ./scripts/release/generate-notes</span><br></span></code></pre></div></div>
<p><strong>Disable AI</strong> (useful for CI/CD):</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token assign-left variable" style="color:#36acaa">USE_AI</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">false ./scripts/release/generate-notes</span><br></span></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="backend-priority">Backend Priority<a href="#backend-priority" class="hash-link" aria-label="Direct link to Backend Priority" title="Direct link to Backend Priority" translate="no"></a></h4>
<p>The script automatically selects the best available backend:</p>
<ol>
<li class=""><strong>GitHub Copilot CLI</strong> - AI-powered, context-aware (best quality)</li>
<li class=""><strong>git-cliff</strong> - Fast Rust tool with templates (reliable)</li>
<li class=""><strong>Manual</strong> - Simple grep/awk parsing (always works)</li>
</ol>
<p>In CI/CD (<code>$CI</code> or <code>$GITHUB_ACTIONS</code>), AI is automatically disabled.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="installing-optional-backends">Installing Optional Backends<a href="#installing-optional-backends" class="hash-link" aria-label="Direct link to Installing Optional Backends" title="Direct link to Installing Optional Backends" translate="no"></a></h4>
<p><strong>In DevContainer (automatic):</strong></p>
<p>git-cliff is automatically installed when the DevContainer is built:</p>
<ul>
<li class=""><strong>Rust toolchain</strong>: Installed via <code>ghcr.io/devcontainers/features/rust:1</code> (minimal profile)</li>
<li class=""><strong>git-cliff</strong>: Installed via cargo in <code>scripts/setup/setup</code></li>
</ul>
<p>Simply rebuild the container (VS Code: &quot;Dev Containers: Rebuild Container&quot;) and git-cliff will be available.</p>
<p><strong>Manual installation (outside DevContainer):</strong></p>
<p><strong>git-cliff</strong> (template-based):</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># See: https://git-cliff.org/docs/installation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># macOS</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">brew </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> git-cliff</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Cargo (all platforms)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">cargo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> git-cliff</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Manual binary download</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">wget</span><span class="token plain"> https://github.com/orhun/git-cliff/releases/latest/download/git-cliff-x86_64-unknown-linux-gnu.tar.gz</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">tar</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-xzf</span><span class="token plain"> git-cliff-*.tar.gz</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">mv</span><span class="token plain"> git-cliff-*/git-cliff /usr/local/bin/</span><br></span></code></pre></div></div>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-cicd-automation">3. CI/CD Automation<a href="#3-cicd-automation" class="hash-link" aria-label="Direct link to 3. CI/CD Automation" title="Direct link to 3. CI/CD Automation" translate="no"></a></h3>
<p>Automatic release notes on tag push.</p>
<p><strong>Workflow:</strong> <code>.github/workflows/release.yml</code></p>
<p><strong>Triggers:</strong> Version tags (<code>v1.0.0</code>, <code>v2.1.3</code>, etc.)</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Create and push a tag to trigger automatic release</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> tag v1.0.0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> push origin v1.0.0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># GitHub Actions will:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># 1. Detect the new tag</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># 2. Generate release notes using git-cliff</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># 3. Create a GitHub release automatically</span><br></span></code></pre></div></div>
<p><strong>Backend:</strong> Uses <code>git-cliff</code> (AI disabled in CI for reliability)</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-output-format">📝 Output Format<a href="#-output-format" class="hash-link" aria-label="Direct link to 📝 Output Format" title="Direct link to 📝 Output Format" translate="no"></a></h2>
<p>All methods produce GitHub-flavored Markdown with emoji categories:</p>
<div class="language-markdown codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-markdown codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token title important punctuation" style="color:#393A34">##</span><span class="token title important"> 🎉 New Features</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token list punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token bold punctuation" style="color:#393A34">**</span><span class="token bold content">scope</span><span class="token bold punctuation" style="color:#393A34">**</span><span class="token plain">: Description (</span><span class="token url" style="color:#36acaa">[</span><span class="token url content" style="color:#36acaa">abc1234</span><span class="token url" style="color:#36acaa">](</span><span class="token url" style="color:#36acaa">link-to-commit</span><span class="token url" style="color:#36acaa">)</span><span class="token plain">)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token title important punctuation" style="color:#393A34">##</span><span class="token title important"> 🐛 Bug Fixes</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token list punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token bold punctuation" style="color:#393A34">**</span><span class="token bold content">scope</span><span class="token bold punctuation" style="color:#393A34">**</span><span class="token plain">: Description (</span><span class="token url" style="color:#36acaa">[</span><span class="token url content" style="color:#36acaa">def5678</span><span class="token url" style="color:#36acaa">](</span><span class="token url" style="color:#36acaa">link-to-commit</span><span class="token url" style="color:#36acaa">)</span><span class="token plain">)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token title important punctuation" style="color:#393A34">##</span><span class="token title important"> 📚 Documentation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token list punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token bold punctuation" style="color:#393A34">**</span><span class="token bold content">scope</span><span class="token bold punctuation" style="color:#393A34">**</span><span class="token plain">: Description (</span><span class="token url" style="color:#36acaa">[</span><span class="token url content" style="color:#36acaa">ghi9012</span><span class="token url" style="color:#36acaa">](</span><span class="token url" style="color:#36acaa">link-to-commit</span><span class="token url" style="color:#36acaa">)</span><span class="token plain">)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token title important punctuation" style="color:#393A34">##</span><span class="token title important"> 🔧 Maintenance &amp; Refactoring</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token list punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token bold punctuation" style="color:#393A34">**</span><span class="token bold content">scope</span><span class="token bold punctuation" style="color:#393A34">**</span><span class="token plain">: Description (</span><span class="token url" style="color:#36acaa">[</span><span class="token url content" style="color:#36acaa">jkl3456</span><span class="token url" style="color:#36acaa">](</span><span class="token url" style="color:#36acaa">link-to-commit</span><span class="token url" style="color:#36acaa">)</span><span class="token plain">)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token title important punctuation" style="color:#393A34">##</span><span class="token title important"> 🧪 Testing</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token list punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token bold punctuation" style="color:#393A34">**</span><span class="token bold content">scope</span><span class="token bold punctuation" style="color:#393A34">**</span><span class="token plain">: Description (</span><span class="token url" style="color:#36acaa">[</span><span class="token url content" style="color:#36acaa">mno7890</span><span class="token url" style="color:#36acaa">](</span><span class="token url" style="color:#36acaa">link-to-commit</span><span class="token url" style="color:#36acaa">)</span><span class="token plain">)</span><br></span></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-when-to-use-which">🎯 When to Use Which<a href="#-when-to-use-which" class="hash-link" aria-label="Direct link to 🎯 When to Use Which" title="Direct link to 🎯 When to Use Which" translate="no"></a></h2>
<table><thead><tr><th>Method</th><th>Use Case</th><th>Pros</th><th>Cons</th></tr></thead><tbody><tr><td><strong>Helper Script</strong></td><td>Normal releases</td><td>Foolproof, automatic</td><td>Requires script</td></tr><tr><td><strong>Auto-Tag Workflow</strong></td><td>Forgot script</td><td>Safety net, automatic tagging</td><td>Still need manifest bump</td></tr><tr><td><strong>GitHub Button</strong></td><td>Manual quick release</td><td>Easy, no script</td><td>Limited categorization</td></tr><tr><td><strong>Local Script</strong></td><td>Testing release notes</td><td>Preview before release</td><td>Manual process</td></tr><tr><td><strong>CI/CD</strong></td><td>After tag push</td><td>Fully automatic</td><td>Needs tag first</td></tr></tbody></table>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-complete-release-workflows">🔄 Complete Release Workflows<a href="#-complete-release-workflows" class="hash-link" aria-label="Direct link to 🔄 Complete Release Workflows" title="Direct link to 🔄 Complete Release Workflows" translate="no"></a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="workflow-a-using-helper-script-recommended">Workflow A: Using Helper Script (Recommended)<a href="#workflow-a-using-helper-script-recommended" class="hash-link" aria-label="Direct link to Workflow A: Using Helper Script (Recommended)" title="Direct link to Workflow A: Using Helper Script (Recommended)" translate="no"></a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Step 1: Prepare release (all-in-one)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">./scripts/release/prepare </span><span class="token number" style="color:#36acaa">0.3</span><span class="token plain">.0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Step 2: Review changes</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> log </span><span class="token parameter variable" style="color:#36acaa">-1</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">--stat</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> show v0.3.0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Step 3: Push when ready</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> push origin main v0.3.0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Done! CI/CD creates the release automatically</span><br></span></code></pre></div></div>
<p><strong>What happens:</strong></p>
<ol>
<li class="">Script bumps manifest.json → commits → creates tag locally</li>
<li class="">You push commit + tag together</li>
<li class="">Release workflow sees tag → generates notes → creates release</li>
</ol>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="workflow-b-manual-with-auto-tag-safety-net">Workflow B: Manual (with Auto-Tag Safety Net)<a href="#workflow-b-manual-with-auto-tag-safety-net" class="hash-link" aria-label="Direct link to Workflow B: Manual (with Auto-Tag Safety Net)" title="Direct link to Workflow B: Manual (with Auto-Tag Safety Net)" translate="no"></a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Step 1: Bump version manually</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">vim</span><span class="token plain"> custom_components/tibber_prices/manifest.json</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Change: &quot;version&quot;: &quot;0.3.0&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Step 2: Commit</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> commit </span><span class="token parameter variable" style="color:#36acaa">-am</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;chore(release): bump version to 0.3.0&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> push</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Step 3: Wait for Auto-Tag workflow</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># GitHub Actions automatically creates v0.3.0 tag</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Then Release workflow creates the release</span><br></span></code></pre></div></div>
<p><strong>What happens:</strong></p>
<ol>
<li class="">You push manifest.json change</li>
<li class="">Auto-Tag workflow detects change → creates tag automatically</li>
<li class="">Release workflow sees new tag → creates release</li>
</ol>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="workflow-c-manual-tag-old-way">Workflow C: Manual Tag (Old Way)<a href="#workflow-c-manual-tag-old-way" class="hash-link" aria-label="Direct link to Workflow C: Manual Tag (Old Way)" title="Direct link to Workflow C: Manual Tag (Old Way)" translate="no"></a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Step 1: Bump version</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">vim</span><span class="token plain"> custom_components/tibber_prices/manifest.json</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> commit </span><span class="token parameter variable" style="color:#36acaa">-am</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;chore(release): bump version to 0.3.0&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Step 2: Create tag manually</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> tag v0.3.0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> push origin main v0.3.0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Release workflow creates release</span><br></span></code></pre></div></div>
<p><strong>What happens:</strong></p>
<ol>
<li class="">You create and push tag manually</li>
<li class="">Release workflow creates release</li>
<li class="">Auto-Tag workflow skips (tag already exists)</li>
</ol>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-configuration-files">⚙️ Configuration Files<a href="#-configuration-files" class="hash-link" aria-label="Direct link to ⚙️ Configuration Files" title="Direct link to ⚙️ Configuration Files" translate="no"></a></h2>
<ul>
<li class=""><code>scripts/release/prepare</code> - Helper script to bump version + create tag</li>
<li class=""><code>.github/workflows/auto-tag.yml</code> - Automatic tag creation on manifest.json change</li>
<li class=""><code>.github/workflows/release.yml</code> - Automatic release on tag push</li>
<li class=""><code>.github/release.yml</code> - GitHub UI button configuration</li>
<li class=""><code>cliff.toml</code> - git-cliff template (filters out version bumps)</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-safety-features">🛡️ Safety Features<a href="#-safety-features" class="hash-link" aria-label="Direct link to 🛡️ Safety Features" title="Direct link to 🛡️ Safety Features" translate="no"></a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-version-validation">1. <strong>Version Validation</strong><a href="#1-version-validation" class="hash-link" aria-label="Direct link to 1-version-validation" title="Direct link to 1-version-validation" translate="no"></a></h3>
<p>Both helper script and auto-tag workflow validate version format (X.Y.Z).</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-no-duplicate-tags">2. <strong>No Duplicate Tags</strong><a href="#2-no-duplicate-tags" class="hash-link" aria-label="Direct link to 2-no-duplicate-tags" title="Direct link to 2-no-duplicate-tags" translate="no"></a></h3>
<ul>
<li class="">Helper script checks if tag exists (local + remote)</li>
<li class="">Auto-tag workflow checks if tag exists before creating</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-atomic-operations">3. <strong>Atomic Operations</strong><a href="#3-atomic-operations" class="hash-link" aria-label="Direct link to 3-atomic-operations" title="Direct link to 3-atomic-operations" translate="no"></a></h3>
<p>Helper script creates commit + tag locally. You decide when to push.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-version-bumps-filtered">4. <strong>Version Bumps Filtered</strong><a href="#4-version-bumps-filtered" class="hash-link" aria-label="Direct link to 4-version-bumps-filtered" title="Direct link to 4-version-bumps-filtered" translate="no"></a></h3>
<p>Release notes automatically exclude <code>chore(release): bump version</code> commits.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-rollback-instructions">5. <strong>Rollback Instructions</strong><a href="#5-rollback-instructions" class="hash-link" aria-label="Direct link to 5-rollback-instructions" title="Direct link to 5-rollback-instructions" translate="no"></a></h3>
<p>Helper script shows how to undo if you change your mind.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-troubleshooting">🐛 Troubleshooting<a href="#-troubleshooting" class="hash-link" aria-label="Direct link to 🐛 Troubleshooting" title="Direct link to 🐛 Troubleshooting" translate="no"></a></h2>
<p><strong>&quot;Tag already exists&quot; error:</strong></p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Local tag</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> tag </span><span class="token parameter variable" style="color:#36acaa">-d</span><span class="token plain"> v0.3.0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Remote tag (only if you need to recreate)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> push origin :refs/tags/v0.3.0</span><br></span></code></pre></div></div>
<p><strong>Manifest version doesn&#x27;t match tag:</strong></p>
<p>This shouldn&#x27;t happen with the new workflows, but if it does:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># 1. Fix manifest.json</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">vim</span><span class="token plain"> custom_components/tibber_prices/manifest.json</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># 2. Amend the commit</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> commit </span><span class="token parameter variable" style="color:#36acaa">--amend</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-am</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;chore(release): bump version to 0.3.0&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># 3. Move the tag</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> tag </span><span class="token parameter variable" style="color:#36acaa">-f</span><span class="token plain"> v0.3.0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> push </span><span class="token parameter variable" style="color:#36acaa">-f</span><span class="token plain"> origin main v0.3.0</span><br></span></code></pre></div></div>
<p><strong>Auto-tag didn&#x27;t create tag:</strong></p>
<p>Check workflow runs in GitHub Actions. Common causes:</p>
<ul>
<li class="">Tag already exists remotely</li>
<li class="">Invalid version format in manifest.json</li>
<li class="">manifest.json not in the commit that was pushed</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-format-requirements">🔍 Format Requirements<a href="#-format-requirements" class="hash-link" aria-label="Direct link to 🔍 Format Requirements" title="Direct link to 🔍 Format Requirements" translate="no"></a></h2>
<p><strong>HACS:</strong> No specific format required, uses GitHub releases as-is
<strong>Home Assistant:</strong> No specific format required for custom integrations
<strong>Markdown:</strong> Standard GitHub-flavored Markdown supported
<strong>HTML:</strong> Can include <code>&lt;ha-alert&gt;</code> tags if needed</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-tips">💡 Tips<a href="#-tips" class="hash-link" aria-label="Direct link to 💡 Tips" title="Direct link to 💡 Tips" translate="no"></a></h2>
<ol>
<li class="">
<p><strong>Conventional Commits:</strong> Use proper commit format for best results:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">feat(scope): Add new feature</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Detailed description of what changed.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Impact: Users can now do X and Y.</span><br></span></code></pre></div></div>
</li>
<li class="">
<p><strong>Impact Section:</strong> Add <code>Impact:</code> in commit body for user-friendly descriptions</p>
</li>
<li class="">
<p><strong>Test Locally:</strong> Run <code>./scripts/release/generate-notes</code> before creating release</p>
</li>
<li class="">
<p><strong>AI vs Template:</strong> GitHub Copilot CLI provides better descriptions, git-cliff is faster and more reliable</p>
</li>
<li class="">
<p><strong>CI/CD:</strong> Tag push triggers automatic release - no manual intervention needed</p>
</li>
</ol></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_WFHX"><a href="https://github.com/jpawlowski/hass.tibber_prices/tree/main/docs/developer/docs/release-management.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_JAkA"><span class="theme-last-updated">Last updated<!-- --> on <b><time datetime="2025-12-06T01:37:06.000Z" itemprop="dateModified">Dec 6, 2025</time></b></span></div></div></footer></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/hass.tibber_prices/developer/contributing"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Contributing Guide</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/hass.tibber_prices/developer/testing"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Testing</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#-quick-start-preparing-a-release" class="table-of-contents__link toc-highlight">🚀 Quick Start: Preparing a Release</a></li><li><a href="#-release-options" class="table-of-contents__link toc-highlight">📋 Release Options</a><ul><li><a href="#1-github-ui-button-easiest" class="table-of-contents__link toc-highlight">1. GitHub UI Button (Easiest)</a></li><li><a href="#2-local-script-intelligent" class="table-of-contents__link toc-highlight">2. Local Script (Intelligent)</a></li><li><a href="#3-cicd-automation" class="table-of-contents__link toc-highlight">3. CI/CD Automation</a></li></ul></li><li><a href="#-output-format" class="table-of-contents__link toc-highlight">📝 Output Format</a></li><li><a href="#-when-to-use-which" class="table-of-contents__link toc-highlight">🎯 When to Use Which</a></li><li><a href="#-complete-release-workflows" class="table-of-contents__link toc-highlight">🔄 Complete Release Workflows</a><ul><li><a href="#workflow-a-using-helper-script-recommended" class="table-of-contents__link toc-highlight">Workflow A: Using Helper Script (Recommended)</a></li><li><a href="#workflow-b-manual-with-auto-tag-safety-net" class="table-of-contents__link toc-highlight">Workflow B: Manual (with Auto-Tag Safety Net)</a></li><li><a href="#workflow-c-manual-tag-old-way" class="table-of-contents__link toc-highlight">Workflow C: Manual Tag (Old Way)</a></li></ul></li><li><a href="#-configuration-files" class="table-of-contents__link toc-highlight">⚙️ Configuration Files</a></li><li><a href="#-safety-features" class="table-of-contents__link toc-highlight">🛡️ Safety Features</a><ul><li><a href="#1-version-validation" class="table-of-contents__link toc-highlight">1. <strong>Version Validation</strong></a></li><li><a href="#2-no-duplicate-tags" class="table-of-contents__link toc-highlight">2. <strong>No Duplicate Tags</strong></a></li><li><a href="#3-atomic-operations" class="table-of-contents__link toc-highlight">3. <strong>Atomic Operations</strong></a></li><li><a href="#4-version-bumps-filtered" class="table-of-contents__link toc-highlight">4. <strong>Version Bumps Filtered</strong></a></li><li><a href="#5-rollback-instructions" class="table-of-contents__link toc-highlight">5. <strong>Rollback Instructions</strong></a></li></ul></li><li><a href="#-troubleshooting" class="table-of-contents__link toc-highlight">🐛 Troubleshooting</a></li><li><a href="#-format-requirements" class="table-of-contents__link toc-highlight">🔍 Format Requirements</a></li><li><a href="#-tips" class="table-of-contents__link toc-highlight">💡 Tips</a></li></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://jpawlowski.github.io/hass.tibber_prices/user/" target="_blank" rel="noopener noreferrer" class="footer__link-item">User Guide<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/hass.tibber_prices/developer/intro">Developer Guide</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://github.com/jpawlowski/hass.tibber_prices/issues" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub Issues<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://community.home-assistant.io/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Home Assistant Community<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://github.com/jpawlowski/hass.tibber_prices" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/jpawlowski/hass.tibber_prices/releases" target="_blank" rel="noopener noreferrer" class="footer__link-item">Release Notes<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Not affiliated with Tibber AS. Community-maintained custom integration. Built with Docusaurus.</div></div></div></footer></div>
</body>
</html>