Skip to content

Commit

Permalink
feat: init/get/update
Browse files Browse the repository at this point in the history
  • Loading branch information
grzuy committed Jan 31, 2024
1 parent 2f94533 commit 702c8e7
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 6 deletions.
32 changes: 29 additions & 3 deletions lib/juggler.ex
Original file line number Diff line number Diff line change
@@ -1,11 +1,37 @@
defmodule Juggler do
require Logger

@juggler_dir "juggler"
@juggles_file_path "juggles.exs"
@juggles_template """
# Example for testing against 1.x and 2.x of some dependency
# %{
# "dep-name-1-0": [{:dep_name, "~> 1.0"}],
# "dep-name-2-0": [{:dep_name, "~> 2.0"}],
# }
"""

def init do
case File.read(@juggles_file_path) do
{:ok, _} ->
Logger.info("#{@juggles_file_path} file already exists, doing nothing")
{:error, :enoent} ->
File.write(@juggles_file_path, @juggles_template)
Logger.info("Successfully created #{@juggles_file_path} file")
end
end

def juggles do
with {:ok, contents} <- File.read(@juggles_file_path),
{%{} = contents, _} <- Code.eval_string(contents) do
contents
case File.read(@juggles_file_path) do
{:ok, contents} ->
case Code.eval_string(contents) do
{%{} = map, _} ->
map
_ ->
raise "Couldn't find a map defining your juggles in #{@juggles_file_path} file"
end
{:error, :enoent} ->
raise "Couldn't find a #{@juggles_file_path} file"
end
end

Expand Down
17 changes: 17 additions & 0 deletions lib/mix/tasks/juggler/exec.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
defmodule Mix.Tasks.Juggler.Exec do
use Mix.Task

@shortdoc "Executes task within a lockfile context"
# @preferred_cli_env :test

@impl true
def run([juggle_id | [task | args]]) do
Juggler.within(
String.to_atom(juggle_id),
fn ->
# System.put_env("MIX_ENV", "test")
Mix.Task.run(task, args)
end
)
end
end
6 changes: 3 additions & 3 deletions lib/mix/tasks/juggler/gen.ex → lib/mix/tasks/juggler/get.ex
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
defmodule Mix.Tasks.Juggler.Gen do
defmodule Mix.Tasks.Juggler.Get do
use Mix.Task

@shortdoc "Generates lockfiles from juggles.exs"

@impl true
def run(_args) do
def run(args) do
Juggler.juggles()
|> Enum.map(fn {juggle_id, _deps} ->
Juggler.within(
juggle_id,
fn ->
Mix.Task.rerun("deps.get")
Mix.Task.rerun("deps.get", args)
end
)
end)
Expand Down
10 changes: 10 additions & 0 deletions lib/mix/tasks/juggler/init.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
defmodule Mix.Tasks.Juggler.Init do
use Mix.Task

@shortdoc "Initializes an empty juggles.exs file"

@impl true
def run(_args) do
Juggler.init()
end
end
18 changes: 18 additions & 0 deletions lib/mix/tasks/juggler/update.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
defmodule Mix.Tasks.Juggler.Update do
use Mix.Task

@shortdoc "Updates lockfiles from juggles.exs"

@impl true
def run(args) do
Juggler.juggles()
|> Enum.map(fn {juggle_id, _deps} ->
Juggler.within(
juggle_id,
fn ->
Mix.Task.rerun("deps.update", args)
end
)
end)
end
end

0 comments on commit 702c8e7

Please sign in to comment.