Thank you so much! Looks like it's exactly what we're after. On Monday, October 10, 2022 at 1:27:40 PM UTC+2 José Valim wrote:
> Yes, you are right, I forgot to export MIX_ENV=local. :) > > I believe the only way is to have a configuration to specify the actual > default_env. I started adding support for such but I decided to revamp the > whole CLI configuration. Please see the following PR: > https://github.com/elixir-lang/elixir/pull/12183 > > On Mon, Oct 10, 2022 at 9:37 AM Kevin Hovsäter <ke...@hovsater.com> wrote: > >> Thanks for the reply, José. Appreciate it! >> >> > Right, that's because the alias still reads the environment from the >> task, since you are using "mix test" as the entry point. You could do this: >> > >> > preferred_cli_env: [test: :ci] >> >> I don't think that will work as MIX_ENV is set to "local" by default. >> E.g., if I run "echo $MIX_ENV" in the shell it will print "local". Since >> MIX_ENV is persistently set, it takes precedence over the preferred_cli_env >> setting leaving us no other choice than explicitly setting MIX_ENV before >> running a task expecting a different environment. And, if I'm not mistaken, >> the configuration is being loaded before the Mix tasks run, so the "local" >> configuration file will be loaded (incorrectly) when invoking mix test. >> >> > But my suggestion would be to use a "mix ci" task instead (that matches >> your environment). "mix test" will still be around but running it will fail >> anyway if the env is missing. >> >> I like this idea! However, I still need to run the tests, and at that >> point I'll face the same issues I've described above. Right? >> >> I think there's a couple of problems here. Since you can't override the >> default environment you must set MIX_ENV. If MIX_ENV is persistently set, >> it will interfere with Mix tasks as it always load the configuration >> associated with the value of MIX_ENV. Furthermore, since MIX_ENV is set, it >> will make preferred_cli_env mute as it takes precedence. This leaves us >> with the following options: >> >> 1. Don't persistently set MIX_ENV and always specify it before running a >> mix task. This is cumbersome and error-prone. >> 2. Persistently set MIX_ENV to the default environment and then >> explicitly set it to something else when invoking specific tasks. Less >> cumbersome but still somewhat error-prone. >> 3. Leave MIX_ENV unset and explicitly set preferred_cli_env for every >> single mix task. >> >> I'm still somewhat new to Elixir, so maybe I'm missing some key thing >> here. If so, feel free to point it out. :) >> On Friday, October 7, 2022 at 10:43:48 AM UTC+2 José Valim wrote: >> >>> > What's evident by the sample app above is that the config_env is still >>> set to whatever MIX_ENV is set to, >>> >>> Right, that's because the alias still reads the environment from the >>> task, since you are using "mix test" as the entry point. You could do this: >>> >>> preferred_cli_env: [test: :ci] >>> >>> And then also set System.put_env/2 in your test.custom task. But my >>> suggestion would be to use a "mix ci" task instead (that matches your >>> environment). "mix test" will still be around but running it will fail >>> anyway if the env is missing. >>> >>> On Sat, Oct 1, 2022 at 1:18 PM Kevin Hovsäter <ke...@hovsater.com> >>> wrote: >>> >>>> What's evident by the sample app above is that the config_env is still >>>> set to whatever MIX_ENV is set to, even though the test task itself is >>>> running in the appropriate environment. As I mentioned earlier, this could >>>> be solved by just running MIX_ENV=ci mix test. It would however be nice to >>>> configure a Mix application in such a way that you could specify what the >>>> default environments for dev and test should be, so you would not need to >>>> explicitly set MIX_ENV correctly whenever you interact with mix itself. >>>> On Saturday, October 1, 2022 at 12:50:18 PM UTC+2 Kevin Hovsäter wrote: >>>> >>>>> Sure thing. Here you go. https://github.com/hovsater/custom_envs >>>>> >>>>> Feel free to reach out if anything is unclear. What we're trying to >>>>> achieve is basically change the default environment from `dev` to >>>>> `local`. >>>>> And the default test environment from `test` to `ci`. >>>>> >>>>> Thanks, >>>>> Kevin >>>>> >>>>> On Saturday, October 1, 2022 at 11:37:41 AM UTC+2 José Valim wrote: >>>>> >>>>>> Can you upload a very small mix new repo to GitHub with what you >>>>>> tried pls? :) >>>>>> >>>>>> On Sat, Oct 1, 2022 at 11:08 AM Kevin Hovsäter <ke...@hovsater.com> >>>>>> wrote: >>>>>> >>>>>>> Got it! I just tried making an alias called "test" that points to " >>>>>>> test.ci" and then I defined as task within lib/mix/tasks/test.ci.ex >>>>>>> containing the following code: >>>>>>> >>>>>>> defmodule Mix.Tasks.Test.Ci do >>>>>>> use Mix.Task >>>>>>> >>>>>>> @preferred_cli_env :ci >>>>>>> >>>>>>> @impl Mix.Task >>>>>>> def run(_args) do >>>>>>> if Mix.env != @preferred_cli_env, do: Mix.env(@preferred_cli_env) >>>>>>> Mix.Task.run("ecto.create", ["--quiet"]) >>>>>>> Mix.Task.run("ecto.migrate", ["--quiet"]) >>>>>>> Mix.Task.run("test") >>>>>>> end >>>>>>> end >>>>>>> >>>>>>> Unfortunately, that didn't seem to help. The Mix.env() is correct >>>>>>> from within the Test.Ci task, but I assume it's not propagated to the >>>>>>> tasks >>>>>>> I run. How would I go about solving that? I realize this have become >>>>>>> more >>>>>>> of an support issue than actual proposal so I'm fine with taking this >>>>>>> somewhere else. :) >>>>>>> On Saturday, October 1, 2022 at 11:03:37 AM UTC+2 José Valim wrote: >>>>>>> >>>>>>>> > Right, I think that would be a possibility. So I would have >>>>>>>> MIX_ENV set to "local" by default, and then explicitly set MIX_ENV to >>>>>>>> "ci" >>>>>>>> when invoking the test task? I assume that would be done through an >>>>>>>> alias? >>>>>>>> >>>>>>>> Right. Either an alias or a custom task! >>>>>>>> >>>>>>>> On Sat, Oct 1, 2022 at 10:45 AM Kevin Hovsäter <ke...@hovsater.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Thanks for the quick reply. >>>>>>>>> >>>>>>>>> Right, I think that would be a possibility. So I would have >>>>>>>>> MIX_ENV set to "local" by default, and then explicitly set MIX_ENV to >>>>>>>>> "ci" >>>>>>>>> when invoking the test task? I assume that would be done through an >>>>>>>>> alias? >>>>>>>>> >>>>>>>>> > Another option is to relax the check we have inside "mix test" >>>>>>>>> and only raise if you are accidentally trying to run tests inside the >>>>>>>>> "dev" >>>>>>>>> environment. Then you could change the preferred_cli_env env for the >>>>>>>>> test >>>>>>>>> task directly in your mix.exs. >>>>>>>>> >>>>>>>>> I'm not sure that would help as we still need to set MIX_ENV to >>>>>>>>> "local" to not accidentally invoke "dev" (dev means something >>>>>>>>> different in >>>>>>>>> our case). And since MIX_ENV is set, preferred_cli_env isn't >>>>>>>>> respected when >>>>>>>>> invoking mix test. >>>>>>>>> >>>>>>>>> On Saturday, October 1, 2022 at 10:29:34 AM UTC+2 José Valim wrote: >>>>>>>>> >>>>>>>>>> Perhaps a simpler fix is to add a "ci" Mix task to your projects >>>>>>>>>> that: >>>>>>>>>> >>>>>>>>>> 1. sets MIX_ENV to "ci" if not set >>>>>>>>>> 2. invokes "mix test" >>>>>>>>>> >>>>>>>>>> Another option is to relax the check we have inside "mix test" >>>>>>>>>> and only raise if you are accidentally trying to run tests inside >>>>>>>>>> the "dev" >>>>>>>>>> environment. Then you could change the preferred_cli_env env for the >>>>>>>>>> test >>>>>>>>>> task directly in your mix.exs. >>>>>>>>>> >>>>>>>>>> On Sat, Oct 1, 2022 at 10:05 AM Kevin Sjöberg < >>>>>>>>>> ma...@kevinsjoberg.com> wrote: >>>>>>>>>> >>>>>>>>>>> I'm currently working with a client that have hard requirements >>>>>>>>>>> on what the default environments should be across all their >>>>>>>>>>> products. For >>>>>>>>>>> instance, `local` is the default environment. `ci` is the default >>>>>>>>>>> environment for running tests and `dev` is used as a development >>>>>>>>>>> staging >>>>>>>>>>> environment. >>>>>>>>>>> >>>>>>>>>>> Mix supports the `preferred_cli_env` option, which I can declare >>>>>>>>>>> on a project level. This is nice because it allows me to specify >>>>>>>>>>> the >>>>>>>>>>> preferred environment for the test task. Unfortunately, there's no >>>>>>>>>>> way of >>>>>>>>>>> specifying the default environment. It's currently hard-coded to >>>>>>>>>>> `dev` >>>>>>>>>>> unless `MIX_ENV` is set. The problem with having `MIX_ENV` set is >>>>>>>>>>> that it >>>>>>>>>>> simply makes `preferred_cli_env` void as the environment variable >>>>>>>>>>> always >>>>>>>>>>> takes precedence, so I'm left with having to specify `MIX_ENV` >>>>>>>>>>> explicitly >>>>>>>>>>> when running tests anyway. >>>>>>>>>>> >>>>>>>>>>> I propose adding a new option, `default_env`, to the Mix project >>>>>>>>>>> configuration. If set, it will be reported by `Mix.env` unless >>>>>>>>>>> `MIX_ENV` is >>>>>>>>>>> also present. >>>>>>>>>>> >>>>>>>>>>> I'd love to hear some thoughts before I pursue this any further. >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> You received this message because you are subscribed to the >>>>>>>>>>> Google Groups "elixir-lang-core" group. >>>>>>>>>>> To unsubscribe from this group and stop receiving emails from >>>>>>>>>>> it, send an email to elixir-lang-co...@googlegroups.com. >>>>>>>>>>> To view this discussion on the web visit >>>>>>>>>>> https://groups.google.com/d/msgid/elixir-lang-core/9029fb90-362d-4a1f-be30-6a8b3bd5f074n%40googlegroups.com >>>>>>>>>>> >>>>>>>>>>> <https://groups.google.com/d/msgid/elixir-lang-core/9029fb90-362d-4a1f-be30-6a8b3bd5f074n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>>>>> . >>>>>>>>>>> >>>>>>>>>> -- >>>>>>>>> You received this message because you are subscribed to the Google >>>>>>>>> Groups "elixir-lang-core" group. >>>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>>> send an email to elixir-lang-co...@googlegroups.com. >>>>>>>>> >>>>>>>> To view this discussion on the web visit >>>>>>>>> https://groups.google.com/d/msgid/elixir-lang-core/7b49f422-aae2-4c75-9224-b7b88c7479b1n%40googlegroups.com >>>>>>>>> >>>>>>>>> <https://groups.google.com/d/msgid/elixir-lang-core/7b49f422-aae2-4c75-9224-b7b88c7479b1n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>>> . >>>>>>>>> >>>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "elixir-lang-core" group. >>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>> send an email to elixir-lang-co...@googlegroups.com. >>>>>>> >>>>>> To view this discussion on the web visit >>>>>>> https://groups.google.com/d/msgid/elixir-lang-core/9cfa0ec0-8dd3-4564-a37e-ce2245966983n%40googlegroups.com >>>>>>> >>>>>>> <https://groups.google.com/d/msgid/elixir-lang-core/9cfa0ec0-8dd3-4564-a37e-ce2245966983n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>> . >>>>>>> >>>>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "elixir-lang-core" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to elixir-lang-co...@googlegroups.com. >>>> >>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/elixir-lang-core/8c7e5f24-c119-45ea-88f5-cae3045f98bbn%40googlegroups.com >>>> >>>> <https://groups.google.com/d/msgid/elixir-lang-core/8c7e5f24-c119-45ea-88f5-cae3045f98bbn%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- >> You received this message because you are subscribed to the Google Groups >> "elixir-lang-core" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to elixir-lang-co...@googlegroups.com. >> > To view this discussion on the web visit >> https://groups.google.com/d/msgid/elixir-lang-core/66bdbfb1-652b-43fd-851b-baa42b3ca11fn%40googlegroups.com >> >> <https://groups.google.com/d/msgid/elixir-lang-core/66bdbfb1-652b-43fd-851b-baa42b3ca11fn%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to elixir-lang-core+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/22c8a8bf-02cd-4737-9da5-b7d866c53bd1n%40googlegroups.com.