<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="308656" data-post-id="308656">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sheerlox" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sheerlox/120/36437_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sheerlox
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thank you so much for your kind words, George!</p>
<p>I also noticed the Elixir libraries are almost all released manually, but (maybe incorrectly) attributed that to the missing tooling for reliable release automation.</p>
<p>I’m a tremendous advocate for automating this workflow, as I truly believe it is an excellent enabler of good practices (always having the main branch deployable, providing bug fixes to maintenance versions, consistent versioning, maintaining a changelog, etc…).</p>
<p>My objective is to enable project maintainers to automate their release workflows if they ever want to, and I’d be delighted if my efforts bring value to even just one project!</p>
<p>I’m thrilled to know you’d be a <code>semantic-release-hex</code> user if you’d have to maintain an Elixir lib, thanks again for your message!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="308656" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/semanticreleasehex-fully-automated-version-management-and-release-processes/59837/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-308656" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="308656"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #11"></div>
  </section>
</div>
    <div class="postbit" id="331564" data-post-id="331564">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sheerlox" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sheerlox/120/36437_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sheerlox
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hey there, it’s been a while <img src="https://forum.elixirforum.com/images/emoji/apple/sweat_smile.png?v=15" title=":sweat_smile:" class="emoji" alt=":sweat_smile:" loading="lazy" width="20" height="20"> I come with great news!</p>
<p>I made good progress on this project a while ago now but didn’t take the time to update this thread. That gave me the time to extensively test the library (for 6 months now), mainly on <a href="https://github.com/talent-ideal/" rel="noopener nofollow ugc">Talent Ideal</a>, my first company, which uses Elixir/Phoenix.</p>
<p>To address <a class="mention" href="/u/d4no0" rel="nofollow">@D4no0</a>’s concerns about having to manage Node.js installation, and <a class="mention" href="/u/eiji" rel="nofollow">@Eiji</a>’s concerns about not having the documentation hosted on HexDocs, I have developed and released the <a href="https://hex.pm/packages/semantic_release" rel="nofollow"><code>semantic_release</code> package</a> on Hex.pm, based on the awesome <code>tailwindcss</code> package made by Chris McCord!</p>
<p>Here’s what it does:</p>
<ul>
<li>downloads and extracts the Node.js binary for the right platform to the <code>_build</code> directory (using the <a href="https://hex.pm/packages/nodelix" rel="nofollow"><code>nodelix</code> package</a> I’ve developed for the occasion, cc <a class="mention" href="/u/ryanwinchester" rel="nofollow">@ryanwinchester</a> <img src="https://forum.elixirforum.com/images/emoji/apple/eyes.png?v=15" title=":eyes:" class="emoji" alt=":eyes:" loading="lazy" width="20" height="20">)</li>
<li>installs the Semantic Release packages from <code>npm</code> in that same directory</li>
<li>provides a way to manage versions and add plugins <em>without</em> managing a <code>package.json</code> file</li>
<li>expose running Semantic Release through a Mix task (<code>mix semantic_release</code>)</li>
</ul>
<p>All in all, this greatly reduces the overhead for using Semantic Release in an Elixir project:</p>
<ol>
<li>add the Hex package to <code>mix.exs</code></li>
<li>configure the dependencies with <code>config.exs</code></li>
<li>configure the release workflow with <code>.releaserc</code> (will explore a way to move that to <code>config.exs</code> as well in the future)</li>
<li>add the Mix task to a CI release workflow (which ideally depends on a test workflow)</li>
</ol>
<p>I will update my demo project in the next coming days, as well as the main post of this thread, but if anyone wants to get a sneak peek before then, here are a few links to get you on the right path (numbered based on the steps above):</p>
<ol>
<li><a href="https://hexdocs.pm/semantic_release/readme.html" class="inline-onebox" rel="noopener nofollow ugc">Semantic Release for Elixir — semantic_release v1.0.0-alpha.9</a></li>
<li><a href="https://github.com/talent-ideal/semantic_release/blob/dev/config/config.exs" class="inline-onebox" rel="noopener nofollow ugc">semantic_release/config/config.exs at dev · sheerlox/semantic_release · GitHub</a></li>
<li><a href="https://github.com/talent-ideal/semantic_release/blob/dev/.releaserc" class="inline-onebox" rel="noopener nofollow ugc">semantic_release/.releaserc at dev · sheerlox/semantic_release · GitHub</a></li>
<li><a href="https://github.com/talent-ideal/semantic_release/blob/dev/.github/workflows/release.yml" class="inline-onebox" rel="noopener nofollow ugc">semantic_release/.github/workflows/release.yml at dev · sheerlox/semantic_release · GitHub</a></li>
</ol>
<p>There’s still a lot of room for improvement, but it’s already working great and I hope this work can be useful to the community in the long run <img src="https://forum.elixirforum.com/images/emoji/apple/heart.png?v=15" title=":heart:" class="emoji" alt=":heart:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="331564" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/semanticreleasehex-fully-automated-version-management-and-release-processes/59837/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-331564" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="331564"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="331602" data-post-id="331602">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Eiji" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Eiji/120/36743_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Eiji
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a href="https://github.com/talent-ideal/semantic_release/blob/dev/lib/semantic_release.ex" class="onebox" target="_blank" rel="noopener nofollow ugc">https://github.com/talent-ideal/semantic_release/blob/dev/lib/semantic_release.ex</a></p>
<p>How about making <code>install_path</code> configurable? I would think twice before I would touch <code>_build</code> from my code as there is no guarantee how <code>Elixir</code> would behave in next releases … That’s said maybe I’m just overthinking it. <img src="https://forum.elixirforum.com/images/emoji/apple/sweat_smile.png?v=15" title=":sweat_smile:" class="emoji" alt=":sweat_smile:" loading="lazy" width="20" height="20"></p>
<p>Anyway, currently <code>Phoenix</code>-based backends using <code>Node</code> dependencies were using <code>assets/node_modules</code>, so there is no need to hide this directory in <code>_build</code>. It should not be a problem to create/edit <code>package.json</code> by adding dependencies, so the developer would simply call <code>npm install</code> as they do in their projects. <img src="https://forum.elixirforum.com/images/emoji/apple/bulb.png?v=15" title=":bulb:" class="emoji" alt=":bulb:" loading="lazy" width="20" height="20"></p>
<p>What do you think about it? <img src="https://forum.elixirforum.com/images/emoji/apple/thinking.png?v=15" title=":thinking:" class="emoji" alt=":thinking:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="331602" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/semanticreleasehex-fully-automated-version-management-and-release-processes/59837/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-331602" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="331602"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="331617" data-post-id="331617">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sheerlox" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sheerlox/120/36437_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sheerlox
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hey Eiji, thanks for the feedback!</p>
<aside class="quote no-group" data-username="Eiji" data-post="14" data-topic="59837">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/eiji/48/36743_2.png" class="avatar"> Eiji:</div>
<blockquote>
<p>How about making <code>install_path</code> configurable? I would think twice before I would touch <code>_build</code> from my code as there is no guarantee how <code>Elixir</code> would behave in next releases … That’s said maybe I’m just overthinking it. <img src="https://forum.elixirforum.com/images/emoji/apple/sweat_smile.png?v=15" title=":sweat_smile:" class="emoji" alt=":sweat_smile:" loading="lazy" width="20" height="20"></p>
</blockquote>
</aside>
<p>The <code>_build</code> directory seemed the most obvious place to put binaries given the citation below, and it’s also <a href="https://github.com/phoenixframework/tailwind/blob/3295cf81eede615e31a4858f6a00a4c39a7d5101/lib/tailwind.ex#L137-L146" rel="noopener nofollow ugc">where <code>tailwind</code> stores its executable</a>.</p>
<p>Excerpt from Phoenix’s “Directory structure” guide, which supports this decision imo:</p>
<blockquote>
<ul>
<li><code>_build</code> - a directory created by the <code>mix</code> command line tool that ships as part of Elixir that holds all compilation artifacts. […] This directory must not be checked into version control and it can be removed at any time. Removing it will force Mix to rebuild your application from scratch.</li>
</ul>
</blockquote>
<p>That being said it could be made configurable, which would for example enable sharing the same Node.js binaries between projects.</p>
<aside class="quote no-group" data-username="Eiji" data-post="14" data-topic="59837">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/eiji/48/36743_2.png" class="avatar"> Eiji:</div>
<blockquote>
<p>Anyway, currently <code>Phoenix</code>-based backends using <code>Node</code> dependencies were using <code>assets/node_modules</code>, so there is no need to hide this directory in <code>_build</code>.</p>
</blockquote>
</aside>
<p>The decision for Phoenix to store <code>node_modules</code> in the <code>assets</code> directory makes sense, as it actually contains <em>assets</em> used during the front-end bundling process.</p>
<p>Regarding <code>semantic_release</code>, I believe the decision to hide its <code>node_modules</code> behind <code>_build</code> makes sense, because it should only be used by itself.</p>
<p>Moreover, if multiple projects using <code>nodelix</code> install specific package versions in a shared <code>node_modules</code> in the root directory, that would lead to potential conflicts and unexpected behavior (without relying on a shared root <code>package.json</code>, which I discuss below).</p>
<aside class="quote no-group" data-username="Eiji" data-post="14" data-topic="59837">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/eiji/48/36743_2.png" class="avatar"> Eiji:</div>
<blockquote>
<p>It should not be a problem to create/edit <code>package.json</code> by adding dependencies, so the developer would simply call <code>npm install</code> as they do in their projects. <img src="https://forum.elixirforum.com/images/emoji/apple/bulb.png?v=15" title=":bulb:" class="emoji" alt=":bulb:" loading="lazy" width="20" height="20"></p>
</blockquote>
</aside>
<p>Currently, the idea behind <code>semantic_release</code> is to abstract as much as possible the fact it’s using Node.js under the hood (thanks to <code>nodelix</code>). Having to maintain a <code>package.json</code> or run <code>npm install</code> in an Elixir project might be seen as an unwelcome overhead for many project maintainers.</p>
<p>The goal is that by simply installing <code>semantic_release</code> and running the Mix task without any configuration, you get the default Semantic Release experience. Then if you want a different release workflow than the default (which most likely will be the case), you can configure that through <code>config.exs</code> (to specify plugins to be installed) and <code>.releaserc</code> (to configure the workflow).</p>
<p>Additionally, I believe letting the end user manage the versions himself in a root <code>package.json</code> would limit the library’s ability to handle compatibility with the various Semantic Release major versions.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="331617" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/semanticreleasehex-fully-automated-version-management-and-release-processes/59837/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-331617" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="331617"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="331624" data-post-id="331624">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Eiji" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Eiji/120/36743_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Eiji
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="sheerlox" data-post="15" data-topic="59837">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sheerlox/48/36437_2.png" class="avatar"> sheerlox:</div>
<blockquote>
<p>The <code>_build</code> directory seemed the most obvious place to put binaries given the citation below, and it’s also <a href="https://github.com/phoenixframework/tailwind/blob/3295cf81eede615e31a4858f6a00a4c39a7d5101/lib/tailwind.ex#L137-L146" rel="noopener nofollow ugc">where <code>tailwind</code> stores its executable</a>.</p>
</blockquote>
</aside>
<p>Oh, right. Yeah, that part completely makes sense. I completely forgot about binaries. Look that <code>hex</code> packages and their documentation are saved globally in <code>$HOME/.hex</code> directory, so it could be a bit confusing for me. <img src="https://forum.elixirforum.com/images/emoji/apple/sweat_smile.png?v=15" title=":sweat_smile:" class="emoji" alt=":sweat_smile:" loading="lazy" width="20" height="20"></p>
<aside class="quote no-group quote-modified" data-username="sheerlox" data-post="15" data-topic="59837">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sheerlox/48/36437_2.png" class="avatar"> sheerlox:</div>
<blockquote>
<p>That being said it could be made configurable, which would for example enable sharing the same Node.js binaries between projects.</p>
<p>(…)</p>
<p>The decision for Phoenix to store <code>node_modules</code> in the <code>assets</code> directory makes sense, as it actually contains <em>assets</em> used during the front-end bundling process.</p>
</blockquote>
</aside>
<p>Then I would say follow <code>phoenix</code> way i.e. generate <code>package.json</code> as described already, but also install binaries into <code>_build</code> directory. <img src="https://forum.elixirforum.com/images/emoji/apple/+1.png?v=15" title=":+1:" class="emoji" alt=":+1:" loading="lazy" width="20" height="20"></p>
<aside class="quote no-group" data-username="sheerlox" data-post="15" data-topic="59837">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sheerlox/48/36437_2.png" class="avatar"> sheerlox:</div>
<blockquote>
<p>Regarding <code>semantic_release</code>, I believe the decision to hide its <code>node_modules</code> behind <code>_build</code> makes sense, because it should only be used by itself.</p>
<p>Moreover, if multiple projects using <code>nodelix</code> install specific package versions in a shared <code>node_modules</code> in the root directory, that would lead to potential conflicts and unexpected behavior (without relying on a shared root <code>package.json</code>, which I discuss below).</p>
</blockquote>
</aside>
<p>Hmm … Now I see the point. Still prefer <code>assets</code> way, but maybe with some changes … <code>assets/semantic_release</code>? <img src="https://forum.elixirforum.com/uploads/default/original/2X/0/0de524bd7fb55f0f1712410070344b3d601ee4cd.gif?v=15" title=":icon_confused:" class="emoji emoji-custom" alt=":icon_confused:" loading="lazy" width="20" height="20"></p>
<aside class="quote no-group" data-username="sheerlox" data-post="15" data-topic="59837">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sheerlox/48/36437_2.png" class="avatar"> sheerlox:</div>
<blockquote>
<p>Currently, the idea behind <code>semantic_release</code> is to abstract as much as possible the fact it’s using Node.js under the hood (thanks to <code>nodelix</code>). Having to maintain a <code>package.json</code> or run <code>npm install</code> in an Elixir project might be seen as an unwelcome overhead for many project maintainers.</p>
</blockquote>
</aside>
<p>Originally I was thinking (assuming same <code>node_modules</code>) that developers are familiar with basic <code>npm</code> stuff, because as said above it’s not really something new to add <code>Node</code> dependencies into <code>Phoenix</code> projects. That’s said it may not be best for new projects … If we would follow similar things then I would look for <code>phoenix</code> generators which instructs developers to add routing. Here instead of routes there could be adding or modifying existing alias i.e. <code>assets.setup</code>. It’'s just a copy-paste and <code>assets.setup</code> is part of most <code>Phoenix</code> projects. I guess every <code>Elixir</code> developer which does not started learning recently would get it easily. <img src="https://forum.elixirforum.com/images/emoji/apple/+1.png?v=15" title=":+1:" class="emoji" alt=":+1:" loading="lazy" width="20" height="20"></p>
<aside class="quote no-group" data-username="sheerlox" data-post="15" data-topic="59837">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sheerlox/48/36437_2.png" class="avatar"> sheerlox:</div>
<blockquote>
<p>Additionally, I believe letting the end user manage the versions himself in a root <code>package.json</code> would limit the library’s ability to handle compatibility with the various Semantic Release major versions.</p>
</blockquote>
</aside>
<p>Is that so? Not remember now how <code>tailwind</code> is doing that, but by default it fetches <code>latest</code> stable build, right? Modifying <code>json</code> files today is a piece of cake, so in worst case there should not be a problem with updating <code>package.json</code> file or maybe I have missed something again. <img src="https://forum.elixirforum.com/uploads/default/original/2X/0/0de524bd7fb55f0f1712410070344b3d601ee4cd.gif?v=15" title=":icon_confused:" class="emoji emoji-custom" alt=":icon_confused:" loading="lazy" width="20" height="20"></p>
<p>Also you worry about best case (actively maintained package). What about worst case (no support)? How would developers deal with possible updates? Look what have changed over years … Previously every <code>Phoenix</code> project was based on <code>Webpack</code> and now we have a completely new way i.e. <code>esbuild</code>. <img src="https://forum.elixirforum.com/images/emoji/apple/hourglass.png?v=15" title=":hourglass:" class="emoji" alt=":hourglass:" loading="lazy" width="20" height="20"></p>
<hr>
<p>Summary:</p>
<ol start="0">
<li><code>_build</code> sounds really well for binaries especially if <code>phoenix</code> does the same thing (previously I was focused more on <code>assets</code> stuff)</li>
<li>Does something like <code>assets/semantic_release</code>, <code>semantic_release</code> or similar makes any sense?</li>
<li><code>package.json</code> (regardless if creating in extra directory or shared with root project) is more intuitive for developers. Especially those who are new in <code>Elixir</code>. It’s simpler to understand well documented <code>mix</code> aliases than a source code of <code>mix</code> task in one of possibly many project dependencies.</li>
</ol>
<p>Well … all above is not some kind of advice, but just some loose thoughts, so no need to consider everything. After what you wrote I’m no longer convinced with both <code>node_modules</code> in <code>_build</code>, in <code>assets</code> (shared with <code>root</code> project) as same as separate directory. My intuition tells me it’s something similar, but I have no idea what it might be exactly. <img src="https://forum.elixirforum.com/images/emoji/apple/see_no_evil.png?v=15" title=":see_no_evil:" class="emoji" alt=":see_no_evil:" loading="lazy" width="20" height="20"></p>
<p>Right before posting I got a weird idea … <code>apps/my_app_semantic_release/assets/node_modules</code> or something like that, but it looks like I’m overthinking it a bit. <img src="https://forum.elixirforum.com/images/emoji/apple/sweat_smile.png?v=15" title=":sweat_smile:" class="emoji" alt=":sweat_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="331624" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/semanticreleasehex-fully-automated-version-management-and-release-processes/59837/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-331624" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="331624"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-last-post cat-last-post" title="Last post!"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <span class="all-loaded">— All posts loaded —</span>
</div></template></turbo-stream>