@ferrflow/linux-arm64 7.9.0 → 7.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -109,6 +109,11 @@ ferrflow release --exclude web --exclude docs
109
109
  # Pre-release
110
110
  ferrflow release --channel beta
111
111
 
112
+ # Undo a release that failed partway
113
+ ferrflow rollback # prints the plan, changes nothing
114
+ ferrflow rollback --yes # applies it
115
+ ferrflow rollback --yes api web # only these packages
116
+
112
117
  # Scaffold a config file
113
118
  ferrflow init
114
119
 
@@ -499,6 +504,39 @@ cannot cascade into a further bump. Squash merges and merge commits both work.
499
504
  A package declared without `versionedFiles` has no version to read, so it is not finalised this way.
500
505
  Use `commit` mode for tag-only packages.
501
506
 
507
+ ## Rollback
508
+
509
+ A release that fails partway leaves tags pushed, forge releases created and a release commit on the
510
+ branch. `ferrflow rollback` undoes exactly what that run did, reading the checkpoint it left behind
511
+ rather than guessing from the log.
512
+
513
+ ```bash
514
+ ferrflow rollback
515
+ ```
516
+
517
+ It prints the plan and changes nothing. Add `--yes` to apply it. Name packages to narrow it to a
518
+ subset; with none, it rolls back everything the run touched.
519
+
520
+ Three things it deliberately refuses to do.
521
+
522
+ It never deletes a tag that has moved. Each tag is recorded with the commit it pointed at, and the
523
+ remote is queried at rollback time to check it still points there. One that no longer matches, or
524
+ that this checkout cannot resolve on the remote at all, is reported and skipped: a tag someone else
525
+ recreated in the meantime is not this run's to remove.
526
+
527
+ It stops on a package already published to a registry that cannot be unpublished. crates.io and PyPI
528
+ keep every version forever, and npm refuses to republish an unpublished one, so deleting the tag
529
+ would leave a version anyone can install with nothing pointing at it. The right answer there is a new
530
+ patch version, and rollback says so instead of doing half the job. Docker tags, Helm charts, release
531
+ assets and webhooks are replaceable, so they do not block anything.
532
+
533
+ It reverts the release commit only on a whole-run rollback with nothing blocked. That commit carries
534
+ every package's version bump, so reverting it while one package stays released would silently undo
535
+ that package's version too.
536
+
537
+ The revert is left uncommitted to the remote on purpose. Rollback has just deleted remote refs, and
538
+ forcing a branch update on top of that is a decision worth taking with the branch in front of you.
539
+
502
540
  ## Floating Tags
503
541
 
504
542
  Move abbreviated tags (e.g. `v1`, `v1.2`) to always point at the latest matching release:
package/bin/ferrflow CHANGED
Binary file
package/package.json CHANGED
@@ -12,5 +12,5 @@
12
12
  "type": "git",
13
13
  "url": "git+https://github.com/FerrLabs/FerrFlow.git"
14
14
  },
15
- "version": "7.9.0"
15
+ "version": "7.10.0"
16
16
  }