> 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-core+unsubscr...@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-core+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4KALWKpoR%2BWTm41zF%3Dbv6zVeBz%2BrBssCJ%3D-FMg-Qo8Z8g%40mail.gmail.com.