|
104 | 104 | a launcher stub as well. A continuation that fails and rolls back on the way up |
105 | 105 | belongs to `restart_new_emulator`, which is not supported; see *Known |
106 | 106 | limitations*. |
107 | | -- `mix forecastle.relup` now takes an upgrade strategy, because whether a |
| 107 | +- `mix castle.relup` now takes an upgrade strategy, because whether a |
108 | 108 | transition can be hot is a property of the edge between two releases rather |
109 | 109 | than of either release. `--hot` requires a genuine hot upgrade and fails, |
110 | 110 | having written nothing, if the transition cannot be one - a missing appup |
|
329 | 329 |
|
330 | 330 | ### Changed |
331 | 331 |
|
| 332 | +- **Breaking:** `mix forecastle.relup` is now `mix castle.relup`. The task is |
| 333 | + still implemented in Forecastle and still ships with it; only the name has |
| 334 | + changed. Where build-time code lives is a packaging decision and what the task |
| 335 | + is called is a user-interface one, and making the two agree split the |
| 336 | + vocabulary in half: an operator ran `bin/castle install` while a developer ran |
| 337 | + `mix forecastle.relup`, against a package that is, by design, in nobody's |
| 338 | + `mix.exs`. Both READMEs say to depend on `Castle`, so `castle.*` is the name |
| 339 | + the user already thinks in. There is no compatibility alias — a shim for a |
| 340 | + package documented as not taken directly is code maintained forever for a user |
| 341 | + who does not exist — so rename the invocation in any build pipeline that calls |
| 342 | + it. `mix compile.appup` is unaffected: it is named by its `:compilers` entry |
| 343 | + rather than by a package. |
| 344 | + ([forecastle#24](https://github.com/ausimian/forecastle/issues/24)) |
332 | 345 | - **Breaking:** Forecastle no longer touches configuration. It used to set |
333 | 346 | `:runtime_config_path` to `false`, install a `Config.Reader` of its own, |
334 | 347 | initialise every config provider itself and stash the results, and rename the |
|
439 | 452 | - The Castle integration is installed by extending the release's `env.sh` |
440 | 453 | rather than by replacing the launcher. An `env.sh` supplied through |
441 | 454 | `rel/env.sh.eex` is preserved and runs first. |
442 | | -- `mix forecastle.relup` with no strategy switch is now `auto`, which changes what |
| 455 | +- `mix castle.relup` with no strategy switch is now `auto`, which changes what |
443 | 456 | an existing invocation does with some transitions. Case by case, against a task |
444 | 457 | that simply asked `systools` for the relup: |
445 | 458 |
|
|
476 | 489 | refuses an appup-supplied emulator restart that the old task packaged. What it |
477 | 490 | is good for is a pipeline that wants the generation to fail rather than degrade. |
478 | 491 | `--restart` is the way to get a relup out of the two changed cases. |
479 | | -- A `mix forecastle.relup` run that fails now writes nothing at all. It used to |
| 492 | +- A `mix castle.relup` run that fails now writes nothing at all. It used to |
480 | 493 | let `systools` write the relup and report afterwards, which was harmless while |
481 | 494 | every refusal came from `systools` itself; the strategies add refusals that can |
482 | 495 | only be made once a relup has been generated, so the file is now written by the |
|
493 | 506 | relup empty or half a plan even though the run failed. A reader now sees the |
494 | 507 | whole of one relup or the whole of the other, and a build that reads it while a |
495 | 508 | generation is running cannot read a partial one. |
496 | | -- `mix forecastle.relup` now requires at least one of `--fromto`, `--upfrom` or |
| 509 | +- `mix castle.relup` now requires at least one of `--fromto`, `--upfrom` or |
497 | 510 | `--downto`. It used to accept none and write a relup with no transitions in it, |
498 | 511 | which is not an upgrade plan and which `release_handler` can do nothing with. |
499 | 512 | - Raised the minimum Elixir requirement to 1.18. |
|
542 | 555 | Install's lost-connection check is isolated as a whole-line launcher |
543 | 556 | diagnostic, so ordinary error copy cannot trigger the restart-confirmation |
544 | 557 | path. |
545 | | -- `mix forecastle.relup` failed with `:systools is not available` in projects |
| 558 | +- `mix castle.relup` failed with `:systools is not available` in projects |
546 | 559 | that do not themselves depend on `:sasl`, because Elixir prunes unused OTP |
547 | 560 | applications from the build's code path. |
548 | | -- `mix forecastle.relup` exited 0 when it had generated nothing. |
| 561 | +- `mix castle.relup` exited 0 when it had generated nothing. |
549 | 562 | `:systools.make_relup/4` reports ordinary failure by returning `:error`, and |
550 | 563 | Mix does not turn what a task returns into an exit status, so a build |
551 | 564 | pipeline could not tell that generation had failed. Nothing removes a relup |
|
554 | 567 | says what `systools` could not do and fails. Warnings that `systools` used to |
555 | 568 | print for itself - an ERTS version change among them - are passed on rather |
556 | 569 | than swallowed. |
557 | | -- `mix forecastle.relup --outdir` was accepted and then ignored, so the relup |
| 570 | +- `mix castle.relup --outdir` was accepted and then ignored, so the relup |
558 | 571 | was written to the current directory regardless, overwriting any unrelated |
559 | 572 | relup already there. The switch now decides where the file goes, and the |
560 | 573 | directory has to exist. Post-assembly still copies the relup it finds in the |
|
573 | 586 | build that was silently packaging the wrong plan will now stop instead — |
574 | 587 | before assembly begins, so a rejected relup leaves no half-built release |
575 | 588 | behind for a later build to stumble over. |
576 | | -- `mix forecastle.relup` discarded arguments it did not recognise, so a |
| 589 | +- `mix castle.relup` discarded arguments it did not recognise, so a |
577 | 590 | mistyped switch, or a path given without one, generated a relup between |
578 | 591 | releases the caller had not named instead of reporting the mistake. Omitting |
579 | 592 | `--target` raised a `KeyError` from the middle of the task. Both are now |
|
0 commit comments