mirror of
https://github.com/Lissy93/dashy.git
synced 2026-07-31 11:36:02 -04:00
359 lines
40 KiB
HTML
359 lines
40 KiB
HTML
<!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-workflow" data-has-hydrated="false">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="generator" content="Docusaurus v3.10.1">
|
||
<title data-rh="true">Releases and Workflows | Dashy</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><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="keywords" content="dashy, dashboard, homelab, self-hosted, docker, homepage"><meta data-rh="true" property="og:type" content="website"><meta data-rh="true" property="og:url" content="https://dashy.to"><meta data-rh="true" property="og:image" content="https://dashy.to/img/dashy.png"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" name="twitter:title" content="Dashy — The Ultimate Homepage for your Homelab"><meta data-rh="true" name="twitter:description" content="Dashy is a self-hosted dashboard app for your homelab. Manage all your services, with status checks, widgets, themes and more."><meta data-rh="true" name="twitter:image" content="https://dashy.to/img/dashy.png"><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="Releases and Workflows | Dashy"><meta data-rh="true" name="description" content="This document outlines our release schedule, workflows/automations, repository conventions and standards"><meta data-rh="true" property="og:description" content="This document outlines our release schedule, workflows/automations, repository conventions and standards"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://dashy.to/docs/release-workflow"><link data-rh="true" rel="alternate" href="https://dashy.to/docs/release-workflow" hreflang="en"><link data-rh="true" rel="alternate" href="https://dashy.to/docs/release-workflow" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Releases and Workflows","item":"https://dashy.to/docs/release-workflow"}]}</script><link rel="preconnect" href="https://pixelflare.cc">
|
||
<link rel="preconnect" href="https://cdn.as93.net">
|
||
<link rel="dns-prefetch" href="https://api.github.com">
|
||
<link rel="dns-prefetch" href="https://no-track.as93.net">
|
||
<script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","name":"Dashy","url":"https://dashy.to","description":"The Ultimate Homepage for your Homelab","publisher":{"@type":"Person","name":"Alicia Sykes","url":"https://aliciasykes.com"}}</script>
|
||
<link rel="manifest" href="/manifest.json">
|
||
<link rel="alternate" type="application/rss+xml" title="Dashy — Releases & Updates" href="/rss.xml">
|
||
<meta name="theme-color" content="#54bff7">
|
||
<script src="https://no-track.as93.net/js/script.js" defer="defer" data-domain="dashy.to"></script><link rel="stylesheet" href="/assets/css/styles.283a0681.css">
|
||
<script src="/assets/js/runtime~main.17c323d8.js" defer="defer"></script>
|
||
<script src="/assets/js/main.249792b4.js" defer="defer"></script>
|
||
</head>
|
||
<body>
|
||
<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||"dark"),document.documentElement.setAttribute("data-theme-choice",t||"dark")}(),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"><div class="banner_woPo"><a class="link_ecgS" title="View the changelog, to see what's new!" href="/updates">Dashy <!-- -->V4.3.15<!-- --> is now live 🚀</a><a class="link2_y3x6" title="View the changelog, to see what's new!" href="/updates">See what's new…</a><button class="closeBtn_fC0A" title="Dismiss update, and don't show again" aria-label="Dismiss update, and don't show again">×</button></div><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="/"><div class="navbar__logo"><img src="/img/dashy.png" alt="Dashy Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/img/dashy.png" alt="Dashy Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">Dashy</b></a><a href="https://github.com/lissy93/dashy" 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><a href="https://demo.dashy.to" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Live Demo<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><a class="navbar__item navbar__link" href="/docs/quick-start">Quick Start</a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs">Documentation</a><a class="navbar__item navbar__link" href="/api">API</a><a class="navbar__item navbar__link" href="/updates">Changelog</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><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 searchBarContainer_NW3z" dir="ltr"><input placeholder="Search" aria-label="Search" class="navbar__search-input searchInput_YFbd" value=""><div class="loadingRing_RJI3 searchBarLoadingRing_YnHq"><div></div><div></div><div></div><div></div></div></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-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/docs/quick-start"><span title="Running Dashy" class="categoryLinkLabel_W154">Running Dashy</span></a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/docs/icons"><span title="Feature Docs" class="categoryLinkLabel_W154">Feature Docs</span></a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/docs/showcase"><span title="Community" class="categoryLinkLabel_W154">Community</span></a></div></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="/docs/privacy"><span title="Misc" class="categoryLinkLabel_W154">Misc</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="/docs/privacy"><span title="Privacy & Security" class="linkLabel_WmDU">Privacy & Security</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="/docs/credits"><span title="Credits" class="linkLabel_WmDU">Credits</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="/docs/license"><span title="License" class="linkLabel_WmDU">License</span></a></li><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="/docs/release-workflow"><span title="Releases and Workflows" class="linkLabel_WmDU">Releases and Workflows</span></a></li></ul></li></ul></nav></div><div class="sidebar-ad"><script async="" src="//cdn.carbonads.com/carbon.js?serve=CWYIC53L&placement=dashyto" id="_carbonads_js"></script></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="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="/"><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">Misc</span></li><li class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link">Releases and Workflows</span></li></ul></nav><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>Releases and Workflows</h1></header>
|
||
<blockquote>
|
||
<p>This document outlines our release schedule, workflows/automations, repository conventions and standards</p>
|
||
</blockquote>
|
||
<ul>
|
||
<li class=""><a href="#versioning-and-releases" class="">Versioning and Releases</a>
|
||
<ul>
|
||
<li class=""><a href="#high-level-tag-process" class="">High-level tag process</a></li>
|
||
<li class=""><a href="#creating-a-release" class="">Creating a Release</a></li>
|
||
<li class=""><a href="#versioning" class="">Versioning</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class=""><a href="#workflows" class="">Workflows</a>
|
||
<ul>
|
||
<li class=""><a href="#ci" class="">CI</a></li>
|
||
<li class=""><a href="#docker" class="">Docker</a></li>
|
||
<li class=""><a href="#release" class="">Release</a></li>
|
||
<li class=""><a href="#tag" class="">Tag</a></li>
|
||
<li class=""><a href="#mirror" class="">Mirror</a></li>
|
||
<li class=""><a href="#docs" class="">Docs</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class=""><a href="#git-strategy" class="">Git Strategy</a>
|
||
<ul>
|
||
<li class=""><a href="#commits" class="">Commits</a></li>
|
||
<li class=""><a href="#branches" class="">Branches</a></li>
|
||
<li class=""><a href="#pull-requests" class="">Pull Requests</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<hr>
|
||
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="versioning-and-releases">Versioning and Releases<a href="#versioning-and-releases" class="hash-link" aria-label="Direct link to Versioning and Releases" title="Direct link to Versioning and Releases" translate="no"></a></h2>
|
||
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="high-level-tag-process">High-level tag process<a href="#high-level-tag-process" class="hash-link" aria-label="Direct link to High-level tag process" title="Direct link to High-level tag process" translate="no"></a></h3>
|
||
<ul>
|
||
<li class="">All new features, fixes and updates happen via pull request to <code>master</code></li>
|
||
<li class="">After a PR is merged, the <code>version</code> in the package.json will automatically be bumped by it's patch value (unless the PR already updated the version)</li>
|
||
<li class="">Whenever the <code>version</code> is updated, a new git tag and also Docker tag is created and pushed</li>
|
||
<li class="">If the major or minor version (not patch version) was bumped, then a release is also drafted</li>
|
||
</ul>
|
||
<p>The tagging process is managed via GitHub actions, using our <a href="https://github.com/lissy93/dashy/blob/master/.github/workflows/tag.yml" target="_blank" rel="noopener noreferrer" class=""><code>tag.yml</code></a> workflow.
|
||
This workflow can also be manually triggered by a maintainer to make and push a new tag (either specify tag version, or leave blank for auto-bump of patch version).</p>
|
||
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="creating-a-release">Creating a Release<a href="#creating-a-release" class="hash-link" aria-label="Direct link to Creating a Release" title="Direct link to Creating a Release" translate="no"></a></h3>
|
||
<p>Only repository maintainers can publish releases. The process typically happens automatically whenever the major or minor version is updated (via tag workflow). But a release can also be triggered manually via the <a href="https://github.com/lissy93/dashy/blob/master/.github/workflows/release.yml" target="_blank" rel="noopener noreferrer" class=""><code>release.yml</code></a> workflow's manual dispatch, by passing it an (already existing, not yet released) tag version. Note that the bot only creates a Draft Release, so you'll then need to head to the releases tab, review it looks correct, and hit Publish.</p>
|
||
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="versioning">Versioning<a href="#versioning" class="hash-link" aria-label="Direct link to Versioning" title="Direct link to Versioning" translate="no"></a></h3>
|
||
<p>Typically Dashy has multiple patch versions per week, bi-weekly minor releases, and quarterly major releases.</p>
|
||
<p>Dashy uses a form of semantic versioning (<a href="https://semver.org/" target="_blank" rel="noopener noreferrer" class="">semver</a>), whereby we push a:</p>
|
||
<ul>
|
||
<li class="">Patch (e.g. <code>4.6.9</code>) - New patch version published for every change</li>
|
||
<li class="">Minor (e.g. <code>4.7.0</code>) - New minor version published for groups of features</li>
|
||
<li class="">Major (e.g. <code>5.0.0</code>) - Large releases, possibly not backward compatible</li>
|
||
</ul>
|
||
<img decoding="async" loading="lazy" width="500" src="https://pixelflare.cc/alicia/images/semver.png" class="img_ev3q">
|
||
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changelog">Changelog<a href="#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no"></a></h3>
|
||
<p>You can view a list of recent changes at <a href="https://dashy.to/updates" target="_blank" rel="noopener noreferrer" class="">dashy.to/updates</a> or subscribe to the <a href="https://dashy.to/rss.xml" target="_blank" rel="noopener noreferrer" class=""><code>rss.xml</code></a> feed.
|
||
Likewise, on GitHub you can view all of our <a href="https://github.com/lissy93/dashy/tags" target="_blank" rel="noopener noreferrer" class="">Tags</a> and <a href="https://github.com/lissy93/dashy/releases" target="_blank" rel="noopener noreferrer" class="">Releases</a></p>
|
||
<hr>
|
||
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="workflows">Workflows<a href="#workflows" class="hash-link" aria-label="Direct link to Workflows" title="Direct link to Workflows" translate="no"></a></h2>
|
||
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="ci">CI<a href="#ci" class="hash-link" aria-label="Direct link to CI" title="Direct link to CI" translate="no"></a></h3>
|
||
<blockquote>
|
||
<p>Runs checks on pull request to catch obvious/critical issues</p>
|
||
</blockquote>
|
||
<p>This runs a series of checks against the PR. A path-filter step first works out what changed, so most checks only run when their relevant files were modified (the rest are skipped):</p>
|
||
<ul>
|
||
<li class=""><strong>Lint</strong> - Confirms the code is clean and consistent, with ESLint
|
||
<ul>
|
||
<li class=""><em>Runs when:</em> source or config changes</li>
|
||
</ul>
|
||
</li>
|
||
<li class=""><strong>Typecheck</strong> - Confirms TypeScript types are valid, with <code>vue-tsc</code>
|
||
<ul>
|
||
<li class=""><em>Runs when:</em> any code or config changes</li>
|
||
</ul>
|
||
</li>
|
||
<li class=""><strong>Test</strong> - Runs the unit test suite
|
||
<ul>
|
||
<li class=""><em>Runs when:</em> every PR</li>
|
||
</ul>
|
||
</li>
|
||
<li class=""><strong>Locale check</strong> - Validates the translation files are complete and well-formed
|
||
<ul>
|
||
<li class=""><em>Runs when:</em> any languages or locale content (<a href="https://github.com/lissy93/dashy/blob/master/src/assets/locales/" target="_blank" rel="noopener noreferrer" class=""><code>src/assets/locales</code></a>) is updated</li>
|
||
</ul>
|
||
</li>
|
||
<li class=""><strong>Spellcheck</strong> - Catches typos in the source strings (<a href="https://github.com/lissy93/dashy/blob/master/src/assets/locales/en.json" target="_blank" rel="noopener noreferrer" class=""><code>en.json</code></a>)
|
||
<ul>
|
||
<li class=""><em>Runs when:</em> English locale file is updated</li>
|
||
</ul>
|
||
</li>
|
||
<li class=""><strong>Build check</strong> - Builds Dashy and checks the <code>dist</code> output is all good
|
||
<ul>
|
||
<li class=""><em>Runs when:</em> every PR</li>
|
||
</ul>
|
||
</li>
|
||
<li class=""><strong>Docker smoke test</strong> - Builds the Docker image and checks it starts and serves correctly
|
||
<ul>
|
||
<li class=""><em>Runs when:</em> every PR</li>
|
||
</ul>
|
||
</li>
|
||
<li class=""><strong>Dependency audit</strong> - Scans dependency changes for known vulnerabilities (fails on moderate+)
|
||
<ul>
|
||
<li class=""><em>Runs when:</em> Package is added/updated in <a href="https://github.com/lissy93/dashy/blob/master/yarn.lock" target="_blank" rel="noopener noreferrer" class=""><code>yarn.lock</code></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class=""><strong>Secret scanning</strong> - Scans the PR diff for committed secrets/keys/credentials, with TruffleHog
|
||
<ul>
|
||
<li class=""><em>Runs when:</em> every PR</li>
|
||
</ul>
|
||
</li>
|
||
<li class=""><strong>Workflow audit</strong> - Lints and security-audits the GitHub Actions, with actionlint + zizmor
|
||
<ul>
|
||
<li class=""><em>Runs when:</em> a workflow file changes (<code>.github/workflows/**</code>)</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<table><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Workflow</strong></td><td><a href="https://github.com/lissy93/dashy/blob/master/.github/workflows/ci.yml" target="_blank" rel="noopener noreferrer" class=""><code>ci.yml</code></a></td></tr><tr><td><strong>Status</strong></td><td><a href="https://github.com/lissy93/dashy/actions/workflows/ci.yml" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" src="https://github.com/lissy93/dashy/actions/workflows/ci.yml/badge.svg" alt="🚦 PR Check" class="img_ev3q"></a></td></tr><tr><td><strong>Triggers</strong></td><td>Pull request (PR opened/updated on master)</td></tr><tr><td><strong>Inputs</strong></td><td><em>None</em></td></tr><tr><td><strong>Outputs</strong></td><td><em>None</em></td></tr></tbody></table>
|
||
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="docker">Docker<a href="#docker" class="hash-link" aria-label="Direct link to Docker" title="Direct link to Docker" translate="no"></a></h3>
|
||
<blockquote>
|
||
<p>The Docker workflow builds and publishes the Docker image.</p>
|
||
</blockquote>
|
||
<p>Uses our <a href="https://github.com/lissy93/dashy/blob/master/Dockerfile" target="_blank" rel="noopener noreferrer" class=""><code>Dockerfile</code></a>. This is a multi-arch (amd64, arm64, armv7) with each run as a matrix. The image is published to both GHCR (<a href="https://github.com/lissy93/dashy/pkgs/container/dashy" target="_blank" rel="noopener noreferrer" class=""><code>ghcr.io/lissy93/dashy</code></a>) and DockerHub (<a href="https://hub.docker.com/r/lissy93/dashy/" target="_blank" rel="noopener noreferrer" class=""><code>lissy93/dashy</code></a>). It also runs a trivy security scan, and if critical issues are present the scheduled job will fail, and results published under the Security tab. The job also attests both the build provenance and SBOM, which are published alongside the image. The Docker tags are computed from the values in the Dockerfile.</p>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<table><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Workflow</strong></td><td><a href="https://github.com/lissy93/dashy/blob/master/.github/workflows/docker.yml" target="_blank" rel="noopener noreferrer" class=""><code>docker.yml</code></a></td></tr><tr><td><strong>Status</strong></td><td><a href="https://github.com/lissy93/dashy/actions/workflows/docker.yml" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" src="https://github.com/lissy93/dashy/actions/workflows/docker.yml/badge.svg" alt="🐳 Docker" class="img_ev3q"></a></td></tr><tr><td><strong>Triggers</strong></td><td>Tag creation, schedule, manual dispatch</td></tr><tr><td><strong>Inputs</strong></td><td>Tag (optional, inferred from git tag)</td></tr><tr><td><strong>Outputs</strong></td><td>SHA, manifest, digest, SBOM, attestation</td></tr></tbody></table>
|
||
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="release">Release<a href="#release" class="hash-link" aria-label="Direct link to Release" title="Direct link to Release" translate="no"></a></h3>
|
||
<blockquote>
|
||
<p>Builds the app and drafts a GitHub release with the packaged tarball</p>
|
||
</blockquote>
|
||
<p>Triggered by a major/minor (<code>X.Y.0</code>) tag push, or by manual dispatch against an existing tag. It builds Dashy, packages a release tarball (the built <code>dist</code> plus the server files needed to run it), then generates a SHA256 checksum and an SLSA build-provenance attestation. Finally it drafts a GitHub release with auto-generated notes (diffed against the previous <code>X.Y.0</code> tag). The release is only a draft - a maintainer reviews it and hits Publish.</p>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<table><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Workflow</strong></td><td><a href="https://github.com/lissy93/dashy/blob/master/.github/workflows/release.yml" target="_blank" rel="noopener noreferrer" class=""><code>release.yml</code></a></td></tr><tr><td><strong>Status</strong></td><td><a href="https://github.com/lissy93/dashy/actions/workflows/release.yml" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" src="https://github.com/lissy93/dashy/actions/workflows/release.yml/badge.svg" alt="🚀 Release" class="img_ev3q"></a></td></tr><tr><td><strong>Triggers</strong></td><td>Major/minor tag push (<code>*.*.0</code>), manual dispatch</td></tr><tr><td><strong>Inputs</strong></td><td>Tag (required on manual dispatch, must already exist)</td></tr><tr><td><strong>Outputs</strong></td><td>Draft release, tarball, SHA256 checksum, provenance attestation</td></tr></tbody></table>
|
||
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="tag">Tag<a href="#tag" class="hash-link" aria-label="Direct link to Tag" title="Direct link to Tag" translate="no"></a></h3>
|
||
<blockquote>
|
||
<p>Bumps the version and pushes a new git tag</p>
|
||
</blockquote>
|
||
<p>When a PR with code changes is merged into master, this bumps the patch version in the package.json (unless the PR already bumped it), commits the change, then creates and pushes a git tag for the new version. That tag push is what kicks off the Docker and Release workflows downstream. It also labels and comments on any issues referenced in the PR, and pings the docs site to rebuild. It can also be triggered manually - either pass a specific version, or leave it blank to auto-bump the patch.</p>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<table><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Workflow</strong></td><td><a href="https://github.com/lissy93/dashy/blob/master/.github/workflows/tag.yml" target="_blank" rel="noopener noreferrer" class=""><code>tag.yml</code></a></td></tr><tr><td><strong>Status</strong></td><td><a href="https://github.com/lissy93/dashy/actions/workflows/tag.yml" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" src="https://github.com/lissy93/dashy/actions/workflows/tag.yml/badge.svg" alt="🔖 Tag" class="img_ev3q"></a></td></tr><tr><td><strong>Triggers</strong></td><td>PR merged to master, manual dispatch</td></tr><tr><td><strong>Inputs</strong></td><td>Version (optional, leave blank to auto-bump patch)</td></tr><tr><td><strong>Outputs</strong></td><td>Version-bump commit, git tag, issue labels/comments</td></tr></tbody></table>
|
||
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="mirror">Mirror<a href="#mirror" class="hash-link" aria-label="Direct link to Mirror" title="Direct link to Mirror" translate="no"></a></h3>
|
||
<blockquote>
|
||
<p>Mirrors the repo over to our Codeberg instance</p>
|
||
</blockquote>
|
||
<p>Pushes a full copy of the repo to our Codeberg mirror, over at <a href="https://codeberg.org/alicia/dashy" target="_blank" rel="noopener noreferrer" class="">codeberg.org/alicia/dashy</a>, so the project isn't solely hosted on GitHub. Runs weekly. Uses the <a href="https://github.com/Lissy93/repo-mirror-action" target="_blank" rel="noopener noreferrer" class=""><code>lissy93/repo-mirror-action</code></a> action for keeping mirrors in-sync.</p>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<table><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Workflow</strong></td><td><a href="https://github.com/lissy93/dashy/blob/master/.github/workflows/mirror.yml" target="_blank" rel="noopener noreferrer" class=""><code>mirror.yml</code></a></td></tr><tr><td><strong>Status</strong></td><td><a href="https://github.com/lissy93/dashy/actions/workflows/mirror.yml" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" src="https://github.com/lissy93/dashy/actions/workflows/mirror.yml/badge.svg" alt="🪞 Mirror" class="img_ev3q"></a></td></tr><tr><td><strong>Triggers</strong></td><td>Schedule (weekly, Sun 03:30 UTC), manual dispatch</td></tr><tr><td><strong>Inputs</strong></td><td><em>None</em></td></tr><tr><td><strong>Outputs</strong></td><td><em>None</em></td></tr></tbody></table>
|
||
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="docs">Docs<a href="#docs" class="hash-link" aria-label="Direct link to Docs" title="Direct link to Docs" translate="no"></a></h3>
|
||
<blockquote>
|
||
<p>Keeps the docs site and GitHub wiki in sync with the <code>/docs</code> directory</p>
|
||
</blockquote>
|
||
<p>Mirrors the markdown content from <a href="https://github.com/lissy93/dashy/tree/master/docs" target="_blank" rel="noopener noreferrer" class=""><code>/docs</code></a> to the <code>WEBSITE/docs-site-source</code>, where it's then formatted and the Docusaurus site is re-built and deployed to <a href="https://dashy.to/" target="_blank" rel="noopener noreferrer" class="">dashy.to</a>. Runs whenever docs are updated on master.</p>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<table><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Workflow</strong></td><td><a href="https://github.com/lissy93/dashy/blob/master/.github/workflows/update-docs-site.yml" target="_blank" rel="noopener noreferrer" class=""><code>update-docs-site.yml</code></a></td></tr><tr><td><strong>Status</strong></td><td><a href="https://github.com/lissy93/dashy/actions/workflows/update-docs-site.yml" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" src="https://github.com/lissy93/dashy/actions/workflows/update-docs-site.yml/badge.svg" alt="📝 Sync Docs" class="img_ev3q"></a></td></tr><tr><td><strong>Triggers</strong></td><td>Push to <code>docs/**</code> on master, schedule (weekly), manual dispatch</td></tr><tr><td><strong>Inputs</strong></td><td><em>None</em></td></tr><tr><td><strong>Outputs</strong></td><td>Updated docs on the <code>WEBSITE/docs-site-source</code> branch</td></tr></tbody></table>
|
||
<hr>
|
||
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="git-strategy">Git Strategy<a href="#git-strategy" class="hash-link" aria-label="Direct link to Git Strategy" title="Direct link to Git Strategy" translate="no"></a></h2>
|
||
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="commits">Commits<a href="#commits" class="hash-link" aria-label="Direct link to Commits" title="Direct link to Commits" translate="no"></a></h3>
|
||
<p>We use <a href="https://gitmoji.dev/" target="_blank" rel="noopener noreferrer" class="">gitmoji</a> for commits (because it's fun!).
|
||
Whereby each commit message starts with an emoji which indicates the change type.</p>
|
||
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="branches">Branches<a href="#branches" class="hash-link" aria-label="Direct link to Branches" title="Direct link to Branches" translate="no"></a></h3>
|
||
<p>Most branches are named with their type, followed by short description.
|
||
E.g. <code>feat/adds-awesome-feature</code>, <code>ref/language-deduplication</code>, <code>fix/resolves-missing-icons</code>.</p>
|
||
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="pull-requests">Pull Requests<a href="#pull-requests" class="hash-link" aria-label="Direct link to Pull Requests" title="Direct link to Pull Requests" translate="no"></a></h3>
|
||
<p>Like most Git repos, we are following the <a href="https://guides.github.com/introduction/flow" target="_blank" rel="noopener noreferrer" class="">Github Flow</a> standard.</p>
|
||
<ol>
|
||
<li class="">Create a branch (or fork if you don't have write access)</li>
|
||
<li class="">Code some awesome stuff, then add and commit your changes</li>
|
||
<li class="">Create a Pull Request, filling in the template</li>
|
||
<li class="">Follow up with any reviews on your code</li>
|
||
<li class="">Merge 🎉</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/Lissy93/dashy/edit/master/docs/docs/release-workflow.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="2026-07-04T17:12:29.000Z" itemprop="dateModified">Jul 4, 2026</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="/docs/license"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">License</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="#versioning-and-releases" class="table-of-contents__link toc-highlight">Versioning and Releases</a><ul><li><a href="#high-level-tag-process" class="table-of-contents__link toc-highlight">High-level tag process</a></li><li><a href="#creating-a-release" class="table-of-contents__link toc-highlight">Creating a Release</a></li><li><a href="#versioning" class="table-of-contents__link toc-highlight">Versioning</a></li><li><a href="#changelog" class="table-of-contents__link toc-highlight">Changelog</a></li></ul></li><li><a href="#workflows" class="table-of-contents__link toc-highlight">Workflows</a><ul><li><a href="#ci" class="table-of-contents__link toc-highlight">CI</a></li><li><a href="#docker" class="table-of-contents__link toc-highlight">Docker</a></li><li><a href="#release" class="table-of-contents__link toc-highlight">Release</a></li><li><a href="#tag" class="table-of-contents__link toc-highlight">Tag</a></li><li><a href="#mirror" class="table-of-contents__link toc-highlight">Mirror</a></li><li><a href="#docs" class="table-of-contents__link toc-highlight">Docs</a></li></ul></li><li><a href="#git-strategy" class="table-of-contents__link toc-highlight">Git Strategy</a><ul><li><a href="#commits" class="table-of-contents__link toc-highlight">Commits</a></li><li><a href="#branches" class="table-of-contents__link toc-highlight">Branches</a></li><li><a href="#pull-requests" class="table-of-contents__link toc-highlight">Pull Requests</a></li></ul></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">Intro</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://github.com/lissy93/dashy" 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://demo.dashy.to" target="_blank" rel="noopener noreferrer" class="footer__link-item">Live Demo<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="/docs/quick-start">Quick Start</a></li><li class="footer__item"><a class="footer__link-item" href="/docs">Documentation</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Setup Guide</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/deployment">Deploying</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/configuring">Configuring</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/management">Management</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/troubleshooting">Troubleshooting</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Feature Docs Pt 1</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/authentication">Authentication</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/alternate-views">Alternate Views</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/backup-restore">Backup & Restore</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/icons">Icons</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Feature Docs Pt 2</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/multi-language-support">Language Switching</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/status-indicators">Status Indicators</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/searching">Searching & Shortcuts</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/theming">Theming</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 class="footer__link-item" href="/docs/developing">Developing</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development-guides">Development Guides</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/contributing">Contributing</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/showcase">Showcase</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/credits">Credits</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Misc</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/privacy">Privacy & Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/license">License</a></li><li class="footer__item"><a href="https://github.com/Lissy93/dashy/blob/master/.github/LEGAL.md" target="_blank" rel="noopener noreferrer" class="footer__link-item">Legal<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/Lissy93/dashy/blob/master/.github/CODE_OF_CONDUCT.md" target="_blank" rel="noopener noreferrer" class="footer__link-item">Code of Conduct<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/Lissy93/dashy/blob/master/.github/CHANGELOG.md" target="_blank" rel="noopener noreferrer" class="footer__link-item">Changelog<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"><a href="https://dashy.to">Dashy</a> - The Self-Hosted Dashboard for your Homelab<br>License under <a href="https://github.com/Lissy93/dashy/blob/master/LICENSE">MIT</a>. Copyright © 2026 <a href="https://aliciasykes.com">Alicia Sykes</a></div></div></div></footer></div>
|
||
</body>
|
||
</html> |