blendercam/workflows.html

603 wiersze
32 KiB
HTML

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!DOCTYPE html>
<html lang="en" data-content_root="./" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Workflows &amp; Actions &#8212; Fabex 1.0.65 documentation</title>
<script data-cfasync="false">
document.documentElement.dataset.mode = localStorage.getItem("mode") || "";
document.documentElement.dataset.theme = localStorage.getItem("theme") || "";
</script>
<!-- Loaded before other Sphinx assets -->
<link href="_static/styles/theme.css?digest=dfe6caa3a7d634c4db9b" rel="stylesheet" />
<link href="_static/styles/bootstrap.css?digest=dfe6caa3a7d634c4db9b" rel="stylesheet" />
<link href="_static/styles/pydata-sphinx-theme.css?digest=dfe6caa3a7d634c4db9b" rel="stylesheet" />
<link href="_static/vendor/fontawesome/6.5.2/css/all.min.css?digest=dfe6caa3a7d634c4db9b" rel="stylesheet" />
<link rel="preload" as="font" type="font/woff2" crossorigin href="_static/vendor/fontawesome/6.5.2/webfonts/fa-solid-900.woff2" />
<link rel="preload" as="font" type="font/woff2" crossorigin href="_static/vendor/fontawesome/6.5.2/webfonts/fa-brands-400.woff2" />
<link rel="preload" as="font" type="font/woff2" crossorigin href="_static/vendor/fontawesome/6.5.2/webfonts/fa-regular-400.woff2" />
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=8f2a1f02" />
<link rel="stylesheet" type="text/css" href="_static/styles/sphinx-book-theme.css?v=eba8b062" />
<link rel="stylesheet" type="text/css" href="_static/graphviz.css?v=4ae1632d" />
<!-- Pre-loaded scripts that we'll load fully later -->
<link rel="preload" as="script" href="_static/scripts/bootstrap.js?digest=dfe6caa3a7d634c4db9b" />
<link rel="preload" as="script" href="_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b" />
<script src="_static/vendor/fontawesome/6.5.2/js/all.min.js?digest=dfe6caa3a7d634c4db9b"></script>
<script src="_static/documentation_options.js?v=38568b08"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/scripts/sphinx-book-theme.js?v=887ef09a"></script>
<script>DOCUMENTATION_OPTIONS.pagename = 'workflows';</script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="API Reference" href="autoapi/index.html" />
<link rel="prev" title="Test Suite" href="testing.html" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="docsearch:language" content="en"/>
</head>
<body data-bs-spy="scroll" data-bs-target=".bd-toc-nav" data-offset="180" data-bs-root-margin="0px 0px -60%" data-default-mode="">
<div id="pst-skip-link" class="skip-link d-print-none"><a href="#main-content">Skip to main content</a></div>
<div id="pst-scroll-pixel-helper"></div>
<button type="button" class="btn rounded-pill" id="pst-back-to-top">
<i class="fa-solid fa-arrow-up"></i>Back to top</button>
<input type="checkbox"
class="sidebar-toggle"
id="pst-primary-sidebar-checkbox"/>
<label class="overlay overlay-primary" for="pst-primary-sidebar-checkbox"></label>
<input type="checkbox"
class="sidebar-toggle"
id="pst-secondary-sidebar-checkbox"/>
<label class="overlay overlay-secondary" for="pst-secondary-sidebar-checkbox"></label>
<div class="search-button__wrapper">
<div class="search-button__overlay"></div>
<div class="search-button__search-container">
<form class="bd-search d-flex align-items-center"
action="search.html"
method="get">
<i class="fa-solid fa-magnifying-glass"></i>
<input type="search"
class="form-control"
name="q"
id="search-input"
placeholder="Search..."
aria-label="Search..."
autocomplete="off"
autocorrect="off"
autocapitalize="off"
spellcheck="false"/>
<span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd>K</kbd></span>
</form></div>
</div>
<div class="pst-async-banner-revealer d-none">
<aside id="bd-header-version-warning" class="d-none d-print-none" aria-label="Version warning"></aside>
</div>
<header class="bd-header navbar navbar-expand-lg bd-navbar d-print-none">
</header>
<div class="bd-container">
<div class="bd-container__inner bd-page-width">
<div class="bd-sidebar-primary bd-sidebar">
<div class="sidebar-header-items sidebar-primary__section">
</div>
<div class="sidebar-primary-items__start sidebar-primary__section">
<div class="sidebar-primary-item">
<a class="navbar-brand logo" href="index.html">
<img src="_static/Fabex_logo_square.png" class="logo__image only-light" alt="Fabex 1.0.65 documentation - Home"/>
<script>document.write(`<img src="_static/Fabex_logo_square.png" class="logo__image only-dark" alt="Fabex 1.0.65 documentation - Home"/>`);</script>
</a></div>
<div class="sidebar-primary-item"><ul class="navbar-icon-links"
aria-label="Icon Links">
<li class="nav-item">
<a href="https://github.com/pppalain/blendercam" title="GitHub" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-brands fa-square-github fa-lg" aria-hidden="true"></i>
<span class="sr-only">GitHub</span></a>
</li>
<li class="nav-item">
<a href="https://riot.im/app/#/room/#blendercam:matrix.org" title="Matrix" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-solid fa-comments fa-lg" aria-hidden="true"></i>
<span class="sr-only">Matrix</span></a>
</li>
</ul></div>
<div class="sidebar-primary-item">
<script>
document.write(`
<button class="btn search-button-field search-button__button" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="fa-solid fa-magnifying-glass"></i>
<span class="search-button__default-text">Search</span>
<span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span>
</button>
`);
</script></div>
<div class="sidebar-primary-item"><nav class="bd-links bd-docs-nav" aria-label="Main">
<div class="bd-toc-item navbar-nav active">
<ul class="current nav bd-sidenav">
<li class="toctree-l1 has-children"><a class="reference internal" href="users.html">User Guide</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="install.html">Installation</a></li>
<li class="toctree-l2"><a class="reference internal" href="starting.html">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="interface.html">User Interface</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="strategies.html">Strategies</a></li>
<li class="toctree-l2"><a class="reference internal" href="examplechain.html">Example Chain Workflow</a></li>
<li class="toctree-l2"><a class="reference internal" href="faq.html">FAQ</a></li>
<li class="toctree-l2"><a class="reference internal" href="glossary.html">Glossary</a></li>
</ul>
</details></li>
<li class="toctree-l1 current active has-children"><a class="reference internal" href="developers.html">Developer Guide</a><details open="open"><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="overview.html">Code Overview</a></li>
<li class="toctree-l2"><a class="reference internal" href="style.html">Style Guide</a></li>
<li class="toctree-l2"><a class="reference internal" href="testing.html">Test Suite</a></li>
<li class="toctree-l2 current active"><a class="current reference internal" href="#">Workflows &amp; Actions</a></li>
</ul>
</details></li>
<li class="toctree-l1 has-children"><a class="reference internal" href="autoapi/index.html">API Reference</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2 has-children"><a class="reference internal" href="autoapi/fabex/index.html">fabex</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l3"><a class="reference internal" href="autoapi/fabex/bas_relief/index.html">fabex.bas_relief</a></li>
<li class="toctree-l3"><a class="reference internal" href="autoapi/fabex/bridges/index.html">fabex.bridges</a></li>
<li class="toctree-l3"><a class="reference internal" href="autoapi/fabex/cam_chunk/index.html">fabex.cam_chunk</a></li>
<li class="toctree-l3"><a class="reference internal" href="autoapi/fabex/collision/index.html">fabex.collision</a></li>
<li class="toctree-l3"><a class="reference internal" href="autoapi/fabex/constants/index.html">fabex.constants</a></li>
<li class="toctree-l3"><a class="reference internal" href="autoapi/fabex/engine/index.html">fabex.engine</a></li>
<li class="toctree-l3"><a class="reference internal" href="autoapi/fabex/exception/index.html">fabex.exception</a></li>
<li class="toctree-l3"><a class="reference internal" href="autoapi/fabex/gcode_import_parser/index.html">fabex.gcode_import_parser</a></li>
<li class="toctree-l3"><a class="reference internal" href="autoapi/fabex/gcode_path/index.html">fabex.gcode_path</a></li>
<li class="toctree-l3"><a class="reference internal" href="autoapi/fabex/involute_gear/index.html">fabex.involute_gear</a></li>
<li class="toctree-l3"><a class="reference internal" href="autoapi/fabex/joinery/index.html">fabex.joinery</a></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="autoapi/fabex/operators/index.html">fabex.operators</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/operators/async_op/index.html">fabex.operators.async_op</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/operators/bas_relief_ops/index.html">fabex.operators.bas_relief_ops</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/operators/bridges_op/index.html">fabex.operators.bridges_op</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/operators/chain_ops/index.html">fabex.operators.chain_ops</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/operators/curve_create_ops/index.html">fabex.operators.curve_create_ops</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/operators/curve_equation_ops/index.html">fabex.operators.curve_equation_ops</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/operators/curve_tools_ops/index.html">fabex.operators.curve_tools_ops</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/operators/gcode_import_op/index.html">fabex.operators.gcode_import_op</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/operators/operation_ops/index.html">fabex.operators.operation_ops</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/operators/orient_op/index.html">fabex.operators.orient_op</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/operators/pack_op/index.html">fabex.operators.pack_op</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/operators/path_ops/index.html">fabex.operators.path_ops</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/operators/position_op/index.html">fabex.operators.position_op</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/operators/preset_ops/index.html">fabex.operators.preset_ops</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/operators/simulation_ops/index.html">fabex.operators.simulation_ops</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/operators/slice_op/index.html">fabex.operators.slice_op</a></li>
</ul>
</details></li>
<li class="toctree-l3"><a class="reference internal" href="autoapi/fabex/pack/index.html">fabex.pack</a></li>
<li class="toctree-l3"><a class="reference internal" href="autoapi/fabex/parametric/index.html">fabex.parametric</a></li>
<li class="toctree-l3"><a class="reference internal" href="autoapi/fabex/pattern/index.html">fabex.pattern</a></li>
<li class="toctree-l3"><a class="reference internal" href="autoapi/fabex/preferences/index.html">fabex.preferences</a></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="autoapi/fabex/properties/index.html">fabex.properties</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/properties/chain_props/index.html">fabex.properties.chain_props</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/properties/info_props/index.html">fabex.properties.info_props</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/properties/interface_props/index.html">fabex.properties.interface_props</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/properties/machine_props/index.html">fabex.properties.machine_props</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/properties/material_props/index.html">fabex.properties.material_props</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/properties/movement_props/index.html">fabex.properties.movement_props</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/properties/operation_props/index.html">fabex.properties.operation_props</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/properties/optimisation_props/index.html">fabex.properties.optimisation_props</a></li>
</ul>
</details></li>
<li class="toctree-l3"><a class="reference internal" href="autoapi/fabex/puzzle_joinery/index.html">fabex.puzzle_joinery</a></li>
<li class="toctree-l3"><a class="reference internal" href="autoapi/fabex/simulation/index.html">fabex.simulation</a></li>
<li class="toctree-l3"><a class="reference internal" href="autoapi/fabex/slice/index.html">fabex.slice</a></li>
<li class="toctree-l3"><a class="reference internal" href="autoapi/fabex/strategy/index.html">fabex.strategy</a></li>
<li class="toctree-l3"><a class="reference internal" href="autoapi/fabex/testing/index.html">fabex.testing</a></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="autoapi/fabex/utilities/index.html">fabex.utilities</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/utilities/addon_utils/index.html">fabex.utilities.addon_utils</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/utilities/async_utils/index.html">fabex.utilities.async_utils</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/utilities/bounds_utils/index.html">fabex.utilities.bounds_utils</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/utilities/chunk_utils/index.html">fabex.utilities.chunk_utils</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/utilities/compare_utils/index.html">fabex.utilities.compare_utils</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/utilities/dict_utils/index.html">fabex.utilities.dict_utils</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/utilities/geom_utils/index.html">fabex.utilities.geom_utils</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/utilities/image_utils/index.html">fabex.utilities.image_utils</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/utilities/index_utils/index.html">fabex.utilities.index_utils</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/utilities/loop_utils/index.html">fabex.utilities.loop_utils</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/utilities/machine_utils/index.html">fabex.utilities.machine_utils</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/utilities/material_utils/index.html">fabex.utilities.material_utils</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/utilities/numba_utils/index.html">fabex.utilities.numba_utils</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/utilities/ocl_utils/index.html">fabex.utilities.ocl_utils</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/utilities/operation_utils/index.html">fabex.utilities.operation_utils</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/utilities/orient_utils/index.html">fabex.utilities.orient_utils</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/utilities/shapely_utils/index.html">fabex.utilities.shapely_utils</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/utilities/simple_utils/index.html">fabex.utilities.simple_utils</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/utilities/strategy_utils/index.html">fabex.utilities.strategy_utils</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/utilities/thread_utils/index.html">fabex.utilities.thread_utils</a></li>
<li class="toctree-l4"><a class="reference internal" href="autoapi/fabex/utilities/version_utils/index.html">fabex.utilities.version_utils</a></li>
</ul>
</details></li>
<li class="toctree-l3"><a class="reference internal" href="autoapi/fabex/version/index.html">fabex.version</a></li>
<li class="toctree-l3"><a class="reference internal" href="autoapi/fabex/voronoi/index.html">fabex.voronoi</a></li>
</ul>
</details></li>
</ul>
</details></li>
</ul>
</div>
</nav></div>
</div>
<div class="sidebar-primary-items__end sidebar-primary__section">
</div>
<div id="rtd-footer-container"></div>
</div>
<main id="main-content" class="bd-main" role="main">
<div class="sbt-scroll-pixel-helper"></div>
<div class="bd-content">
<div class="bd-article-container">
<div class="bd-header-article d-print-none">
<div class="header-article-items header-article__inner">
<div class="header-article-items__start">
<div class="header-article-item"><button class="sidebar-toggle primary-toggle btn btn-sm" title="Toggle primary sidebar" data-bs-placement="bottom" data-bs-toggle="tooltip">
<span class="fa-solid fa-bars"></span>
</button></div>
</div>
<div class="header-article-items__end">
<div class="header-article-item">
<div class="article-header-buttons">
<div class="dropdown dropdown-download-buttons">
<button class="btn dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false" aria-label="Download this page">
<i class="fas fa-download"></i>
</button>
<ul class="dropdown-menu">
<li><a href="_sources/workflows.md" target="_blank"
class="btn btn-sm btn-download-source-button dropdown-item"
title="Download source file"
data-bs-placement="left" data-bs-toggle="tooltip"
>
<span class="btn__icon-container">
<i class="fas fa-file"></i>
</span>
<span class="btn__text-container">.md</span>
</a>
</li>
<li>
<button onclick="window.print()"
class="btn btn-sm btn-download-pdf-button dropdown-item"
title="Print to PDF"
data-bs-placement="left" data-bs-toggle="tooltip"
>
<span class="btn__icon-container">
<i class="fas fa-file-pdf"></i>
</span>
<span class="btn__text-container">.pdf</span>
</button>
</li>
</ul>
</div>
<button onclick="toggleFullScreen()"
class="btn btn-sm btn-fullscreen-button"
title="Fullscreen mode"
data-bs-placement="bottom" data-bs-toggle="tooltip"
>
<span class="btn__icon-container">
<i class="fas fa-expand"></i>
</span>
</button>
<script>
document.write(`
<button class="btn btn-sm nav-link pst-navbar-icon theme-switch-button" title="light/dark" aria-label="light/dark" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="theme-switch fa-solid fa-sun fa-lg" data-mode="light"></i>
<i class="theme-switch fa-solid fa-moon fa-lg" data-mode="dark"></i>
<i class="theme-switch fa-solid fa-circle-half-stroke fa-lg" data-mode="auto"></i>
</button>
`);
</script>
<script>
document.write(`
<button class="btn btn-sm pst-navbar-icon search-button search-button__button" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="fa-solid fa-magnifying-glass fa-lg"></i>
</button>
`);
</script>
<button class="sidebar-toggle secondary-toggle btn btn-sm" title="Toggle secondary sidebar" data-bs-placement="bottom" data-bs-toggle="tooltip">
<span class="fa-solid fa-list"></span>
</button>
</div></div>
</div>
</div>
</div>
<div id="jb-print-docs-body" class="onlyprint">
<h1>Workflows & Actions</h1>
<!-- Table of contents -->
<div id="print-main-content">
<div id="jb-print-toc">
<div>
<h2> Contents </h2>
</div>
<nav aria-label="Page">
<ul class="visible nav section-nav flex-column">
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#build-and-test">Build and Test</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#create-new-release">Create New Release</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#black-formatter">Black Formatter</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#docs-pages">Docs Pages</a></li>
</ul>
</nav>
</div>
</div>
</div>
<div id="searchbox"></div>
<article class="bd-article">
<section id="workflows-actions">
<h1>Workflows &amp; Actions<a class="headerlink" href="#workflows-actions" title="Link to this heading">#</a></h1>
<p>Fabex uses a system called Github Actions to automatically perform a series of tasks:</p>
<ul class="simple">
<li><p>Building and Testing the latest code changes</p></li>
<li><p>Creating New Releases with updated version numbers</p></li>
<li><p>Building a Documentation website based on docstrings in the code</p></li>
<li><p>Formatting code submissions with the Black formatter</p></li>
</ul>
<p>In the root folder of the repository, there is a folder called <code class="docutils literal notranslate"><span class="pre">.github</span></code>, and inside that is a folder called <code class="docutils literal notranslate"><span class="pre">workflows</span></code>.</p>
<p>This folder contains a series of <code class="docutils literal notranslate"><span class="pre">.yaml</span></code> or <code class="docutils literal notranslate"><span class="pre">.yml</span></code> (either will work) files that describe what will trigger the workflow to start (e.g.: push, pull request etc), and which workflow file to run (e.g.: <code class="docutils literal notranslate"><span class="pre">build_and_test.yaml</span></code>)</p>
<section id="build-and-test">
<h2>Build and Test<a class="headerlink" href="#build-and-test" title="Link to this heading">#</a></h2>
<p><code class="docutils literal notranslate"><span class="pre">build_and_test.yaml</span></code> allows you to specify which version of Blender to build and test against, along with various other options.</p>
<p>It will be triggered by a push or pull request and it will then:</p>
<ul class="simple">
<li><p>checkout the repository and create the addon file</p></li>
<li><p>either download a new version of Blender, or restore the version downloaded from the previous workflow run</p></li>
<li><p>install the addon and run the Test Suite</p></li>
<li><p>upload the addon file that it created along with a log of the test results</p></li>
</ul>
</section>
<section id="create-new-release">
<h2>Create New Release<a class="headerlink" href="#create-new-release" title="Link to this heading">#</a></h2>
<p><code class="docutils literal notranslate"><span class="pre">create_release.yaml</span></code> allows you to specify the addon version that you want to create.</p>
<p>The maintainer can decide whether the changes constitute a MAJOR, MINOR or PATCH release (e.g.: <code class="docutils literal notranslate"><span class="pre">v1.5.12</span></code>):</p>
<ul class="simple">
<li><p>MAJOR - usually means many breaking changes - the <strong><code class="docutils literal notranslate"><span class="pre">1</span></code></strong> in <code class="docutils literal notranslate"><span class="pre">1.5.12</span></code></p></li>
<li><p>MINOR - a new feature, or changes that wont break compatibility with previous version - the <strong><code class="docutils literal notranslate"><span class="pre">.5</span></code></strong> in <code class="docutils literal notranslate"><span class="pre">1.5.12</span></code></p></li>
<li><p>PATCH - a typo, or bugfix - the <strong><code class="docutils literal notranslate"><span class="pre">.12</span></code></strong> in <code class="docutils literal notranslate"><span class="pre">1.5.12</span></code></p></li>
</ul>
</section>
<section id="black-formatter">
<h2>Black Formatter<a class="headerlink" href="#black-formatter" title="Link to this heading">#</a></h2>
<p><code class="docutils literal notranslate"><span class="pre">black.yml</span></code> will format code submissions on pull request using the <a class="reference external" href="https://black.readthedocs.io/en/stable/index.html">Black Formatter</a> with the configuration found in the <code class="docutils literal notranslate"><span class="pre">pyproject.toml</span></code> file.</p>
<p>Other than extending the line length to 100 characters, the default Black config is unchanged.</p>
</section>
<section id="docs-pages">
<h2>Docs Pages<a class="headerlink" href="#docs-pages" title="Link to this heading">#</a></h2>
<p><code class="docutils literal notranslate"><span class="pre">docs_pages.yml</span></code> will build a complete documentation website based on the files in the <code class="docutils literal notranslate"><span class="pre">docs</span></code> folder by first building documentation from docstring comments in the code, then building a Github Pages site using the generated docs and any other files you wish to include.</p>
<p>Using the Sphinx/Google docstring format allows this action to create a searchable reference, just like the <a class="reference external" href="https://docs.blender.org/api/current/index.html"><strong>Blender</strong></a> or <a class="reference external" href="https://shapely.readthedocs.io/en/stable/index.html"><strong>Shapely</strong></a> API docs.</p>
<p>This also helps ensure that any changes made to the code are also made to the documentation, to avoid situations where a programmer has renamed a function or Class in the code, but forgotten to update the docs.</p>
<p>In order for this system to work, docstrings have to follow a specific format: <a class="reference external" href="https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html">Google Style Python Docstrings</a></p>
<p>Docs can be written in <a class="reference external" href="https://www.markdownguide.org/"><strong>Markdown</strong></a> thanks to <a class="reference external" href="https://myst-parser.readthedocs.io/en/latest/">MyST Parser</a>, or the original <a class="reference external" href="https://docutils.sourceforge.io/rst.html">reStructured Text</a>.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Although the addon uses Sphinx to build the docs, it was decided that Google-style strings would be used in the code for readability, that would then be converted automatically to Sphinx format using the Napoleon extension.</p>
</div>
</section>
</section>
</article>
<footer class="prev-next-footer d-print-none">
<div class="prev-next-area">
<a class="left-prev"
href="testing.html"
title="previous page">
<i class="fa-solid fa-angle-left"></i>
<div class="prev-next-info">
<p class="prev-next-subtitle">previous</p>
<p class="prev-next-title">Test Suite</p>
</div>
</a>
<a class="right-next"
href="autoapi/index.html"
title="next page">
<div class="prev-next-info">
<p class="prev-next-subtitle">next</p>
<p class="prev-next-title">API Reference</p>
</div>
<i class="fa-solid fa-angle-right"></i>
</a>
</div>
</footer>
</div>
<div class="bd-sidebar-secondary bd-toc"><div class="sidebar-secondary-items sidebar-secondary__inner">
<div class="sidebar-secondary-item">
<div class="page-toc tocsection onthispage">
<i class="fa-solid fa-list"></i> Contents
</div>
<nav class="bd-toc-nav page-toc">
<ul class="visible nav section-nav flex-column">
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#build-and-test">Build and Test</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#create-new-release">Create New Release</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#black-formatter">Black Formatter</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#docs-pages">Docs Pages</a></li>
</ul>
</nav></div>
</div></div>
</div>
<footer class="bd-footer-content">
<div class="bd-footer-content__inner container">
<div class="footer-item">
<p class="component-author">
By Vilem Novak, Alain Pelletier & Contributors
</p>
</div>
<div class="footer-item">
<p class="copyright">
© Copyright 2025.
<br/>
</p>
</div>
<div class="footer-item">
</div>
<div class="footer-item">
</div>
</div>
</footer>
</main>
</div>
</div>
<!-- Scripts loaded after <body> so the DOM is not blocked -->
<script src="_static/scripts/bootstrap.js?digest=dfe6caa3a7d634c4db9b"></script>
<script src="_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b"></script>
<footer class="bd-footer">
</footer>
</body>
</html>