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


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="pnezis" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/pnezis/120/34667_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  pnezis
                    <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">
								<blockquote>
<p>May I ask, how to you deal with configs for each of these parts and for the bigger chunks up to the root apps as well? To be able to test independently, for example?</p>
</blockquote>
<p>Hi <a class="mention" href="/u/heathen" rel="nofollow">@heathen</a>, in our case we have a couple of independent apps each of which has it’s own config.The other packages are treated as libraries, with no associated config. If your apps have common config you could always have some shared config at the root folder (or anywhere else you want) and import it in the apps configs.</p>
<p>Regarding tests, I prefer to test everything in isolation (so each package has it’s own unit tests with mocks where needed) and also have an extensive integration/e2e test suite that tests everything together. Given the dependencies graph it is guaranteed that any change on any package will trigger the tests on all affected parent packages.</p>
<p>Let me know how it goes and feel free to open an issue if you face any problem.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="332997" data-batch-url="/posts/batch_likers">
                        2
                      </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/workspace-a-set-of-tools-for-working-with-elixir-monorepos/63536/32">Post #31</a>
	                </div>
	            </div>
              <div id="likers-container-332997" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="332997"
                     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 #31"></div>
  </section>
</div>
    <div class="postbit" id="333001" data-post-id="333001">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="pnezis" data-post="32" data-topic="63536">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/pnezis/48/34667_2.png" class="avatar"> pnezis:</div>
<blockquote>
<p>Hi <a class="mention" href="/u/heathen" rel="nofollow">@heathen</a>, in our case we have a couple of independent apps each of which has it’s own config.The other packages are treated as libraries, with no associated config. If your apps have common config you could always have some shared config at the root folder (or anywhere else you want) and import it in the apps configs.</p>
</blockquote>
</aside>
<p>Thank you for the answer. I just wonder, sometimes application contexts require their own settings, so I’m thinking how it is better to deal with that: have the central config which will get all settings for all apps and their parts or keep context-specific configs in the respected package directories and collect (import) them from a root app config or from the central config.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="333001" 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/workspace-a-set-of-tools-for-working-with-elixir-monorepos/63536/33">Post #32</a>
	                </div>
	            </div>
              <div id="likers-container-333001" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="333001"
                     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 #32"></div>
  </section>
</div>
    <div class="postbit" id="333002" data-post-id="333002">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="pnezis" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/pnezis/120/34667_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  pnezis
                    <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">
								<aside class="quote no-group" data-username="heathen" data-post="33" data-topic="63536">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/heathen/48/2926_2.png" class="avatar"> heathen:</div>
<blockquote>
<p>I just wonder, sometimes application contexts require their own settings, so I’m thinking how it is better to deal with that: have the central config which will get all settings for all apps and their parts or keep context-specific configs in the respected package directories and collect (import) them from a root app config or from the central config.</p>
</blockquote>
</aside>
<p>This depends on your use case and what would work better for you. Personally I prefer some duplication than magically importing configs. If this does not scale I may consider some shared configs.</p>
<p>Another option (which we extensively use) is to have your configs as normal elixir modules in your packages, which we can then use in the apps runtime configs. This has the benefit that you make your configs reusable and you can also unit test them.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="333002" data-batch-url="/posts/batch_likers">
                        2
                      </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/workspace-a-set-of-tools-for-working-with-elixir-monorepos/63536/34">Post #33</a>
	                </div>
	            </div>
              <div id="likers-container-333002" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="333002"
                     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 #33"></div>
  </section>
</div>
    <div class="postbit" id="334069" data-post-id="334069">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Found interesting behavior regarding <code>apps</code> directory, which I’m not reporting as a bug because I don’t think it’s workspace’s issue; but noting here for people who are figuring out their own monorepo directory structure.</p>
<p>I was playing around with the directory structure where I created a blank workspace, then a “domains” path for domain bounded context applications.</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">mix workspace.new my_workspace
cd my_workspace
mix deps.get &amp;&amp; mix compile

mkdir domains
cd domains
mix new --sup mytestdomain1
mix phx.new mytestdomain2

cd ..
mkdir apps
cd domains

mix phx.new mytestdomain3
mix new --sup mytestdomain4
</code></pre>
<p>The workspace before <code>mkdir apps</code></p>
<pre data-code-wrap="elixir"><code class="lang-elixir">my_workspace % ls
README.md	_build		deps		domains		mix.exs		workspace.lock
</code></pre>
<p>The workspace after <code>apps</code> and mix creating the new phoenix project</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">my_workspace % ls
README.md	apps		deps		mix.exs		workspace.lock
_build		config		domains		mix.lock
</code></pre>
<p>Highlighting:</p>
<p>That the <code>mytestdomain2</code> project config is within the <code>mytestdomain2</code> path; but after just making the <code>apps</code> directory, <code>mytestdomain3</code> has config references (in its <code>mix.exs</code>) pointing to a top level config path.</p>
<p>Expansion of details:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">mytestdomain2 % ls
README.md	assets		deps		mix.exs		priv
_build		config		lib		mix.lock	test
mytestdomain2 % cat mix.exs 
defmodule Mytestdomain2.MixProject do
  use Mix.Project

  def project do
    [
      app: :mytestdomain2,
      version: "0.1.0",
      elixir: "~&gt; 1.14",
      elixirc_paths: elixirc_paths(Mix.env()),
      start_permanent: Mix.env() == :prod,
      aliases: aliases(),
      deps: deps()
    ]
  end

... OMITTED ...
</code></pre>
<p>and</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">mytestdomain3 % ls
README.md	assets		lib		mix.exs		priv		test
mytestdomain3 % cat mix.exs 
defmodule Mytestdomain3.MixProject do
  use Mix.Project

  def project do
    [
      app: :mytestdomain3,
      version: "0.1.0",
      build_path: "../../_build",
      config_path: "../../config/config.exs",
      deps_path: "../../deps",
      lockfile: "../../mix.lock",
      elixir: "~&gt; 1.14",
      elixirc_paths: elixirc_paths(Mix.env()),
      start_permanent: Mix.env() == :prod,
      aliases: aliases(),
      deps: deps()
    ]
  end

... OMITTED ...
</code></pre>
<p>Concluding:</p>
<p>The phoenix project generator switches logic to generate an <code>umbrella</code> based phoenix project if it detects the existence of a top-level (in monorepo) <code>apps</code> directory.</p>
<p>Which stands to reason is because the <code>apps</code> path is significant to elixir umbrella projects.</p>
<p>Regular <code>mix new</code> projects don’t have configs so they look as expected.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="334069" data-batch-url="/posts/batch_likers">
                        2
                      </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/workspace-a-set-of-tools-for-working-with-elixir-monorepos/63536/35">Post #34</a>
	                </div>
	            </div>
              <div id="likers-container-334069" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="334069"
                     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 #34"></div>
  </section>
</div>
    <div class="postbit" id="334072" data-post-id="334072">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="pnezis" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/pnezis/120/34667_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  pnezis
                    <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>You are right, I have noticed it as well but forgot to mention it in the docs. What I do as a workaround is to run <code>mix phx.new</code> outside of apps and then just <code>mv</code> it in it.</p>
<p>The <code>phx.new</code> task is only looking if there is a parent <code>apps</code> folder and if it exists it is treated as an umbrella project. Maybe a <code>--no-umbrella</code> option option would help.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="334072" data-batch-url="/posts/batch_likers">
                        3
                      </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/workspace-a-set-of-tools-for-working-with-elixir-monorepos/63536/36">Post #35</a>
	                </div>
	            </div>
              <div id="likers-container-334072" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="334072"
                     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 #35"></div>
  </section>
</div>
    <div class="postbit" id="341077" data-post-id="341077">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>This looks like a fantastic addition, thanks for making it available!</p>
<p><a class="mention" href="/u/pnezis" rel="nofollow">@pnezis</a> is there anything to add on monorepo vs. “Poncho projects”? In my understanding Poncho projects have always been an Elixir monorepo setup, do you have insights/observations on this terminology?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="341077" 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/workspace-a-set-of-tools-for-working-with-elixir-monorepos/63536/37">Post #36</a>
	                </div>
	            </div>
              <div id="likers-container-341077" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="341077"
                     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 #36"></div>
  </section>
</div>
    <div class="postbit" id="341203" data-post-id="341203">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="pnezis" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/pnezis/120/34667_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  pnezis
                    <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">
								<blockquote>
<p>is there anything to add on monorepo vs. “Poncho projects”? In my understanding Poncho projects have always been an Elixir monorepo setup, do you have insights/observations on this terminology?</p>
</blockquote>
<p>poncho projects are monorepos. <code>workspace</code> just offers a set of tools for working with (big) monorepos efficiently.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="341203" data-batch-url="/posts/batch_likers">
                        2
                      </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/workspace-a-set-of-tools-for-working-with-elixir-monorepos/63536/38">Post #37</a>
	                </div>
	            </div>
              <div id="likers-container-341203" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="341203"
                     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>