electric-sql / electric-sql/phoenix_sync

`mix igniter.install phoenix_sync --sync-mode embedded` fails on first run but succeeds on second run

Open
#126 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Elixir
Stars
290
Forks
17
PR merge metrics
No merged PRs in 30d

Description

### Environment

- Elixir: `1.20.0-rc.4-otp-28`, `1.19.5-otp-28`, `1.18.4-otp-28`
- Phoenix: `1.7.x`
- Phoenix.Sync: `0.6.1`
- igniter: `0.7.7`

### What I did

1. Created a new project:

```bash
mix phx.new hello
````

2. Added `igniter` to `mix.exs`:

```elixir
{:igniter, "~> 0.6", only: [:dev, :test]}
```

3. Then ran:

```bash
mix igniter.install phoenix_sync --sync-mode embedded
```

### First run result (FAILS)

Igniter adds `phoenix_sync` to `mix.exs` and compiles it, but then crashes with:

```text
** (UndefinedFunctionError) function Phoenix.Sync.MixProject.project/0 is undefined (module Phoenix.Sync.MixProject is not available)
Phoenix.Sync.MixProject.project()
(phoenix_sync 0.6.1) lib/mix/tasks/phoenix_sync.install.ex:301: Mix.Tasks.PhoenixSync.Install.required_electric_version/0
(phoenix_sync 0.6.1) lib/mix/tasks/phoenix_sync.install.ex:123: Mix.Tasks.PhoenixSync.Install.add_dependencies/2
(igniter 0.7.7) lib/igniter/util/install.ex:187: anonymous fn/3 in Igniter.Util.Install.run_installers/5
(elixir 1.20.0-rc.4) lib/enum.ex:2617: Enum."-reduce/3-lists^foldl/2-0-"/3
(igniter 0.7.7) lib/igniter/util/install.ex:176: Igniter.Util.Install.run_installers/5
(mix 1.20.0-rc.4) lib/mix/task.ex:502: anonymous fn/3 in Mix.Task.run_task/5
(mix 1.20.0-rc.4) lib/mix/cli.ex:129: Mix.CLI.run_task/2
```

At this point:

* `phoenix_sync` **has already been added to deps**
* but the installer crashes before finishing

### Second run (WORKS)

Without changing anything else, I run:

```bash
mix igniter.install phoenix_sync --sync-mode embedded
```

Now it succeeds:

* Detects `phoenix_sync` already installed
* Adds `:electric`
* Runs `phoenix_sync.install`
* Updates config and application files correctly

### Observed behavior

* First run fails because `Phoenix.Sync.MixProject` is not available
https://github.com/electric-sql/phoenix_sync/blob/aaeaef7842a40e937c616504e61fb568fd28efc4/lib/mix/tasks/phoenix_sync.install.ex#L301
* Second run succeeds once the dependency is already compiled

### What I expected

* `mix igniter.install phoenix_sync --sync-mode embedded` to succeed on the first run

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.