Skip to content

Tooling Monorepo#49

Open
JoshuaBatty wants to merge 6 commits intomasterfrom
josh/tooling
Open

Tooling Monorepo#49
JoshuaBatty wants to merge 6 commits intomasterfrom
josh/tooling

Conversation

@JoshuaBatty
Copy link
Copy Markdown
Member

@JoshuaBatty JoshuaBatty commented Oct 29, 2025

Rendered


Note

Adds an RFC proposing a new forc-tooling monorepo for operational tooling and CLI wrappers, keeping AST-aware binaries in Sway, with defined migration, distribution, CI, and release processes.

  • RFC Added: rfcs/0017-tooling-monorepo.md introducing a split into a new forc-tooling monorepo.
    • Scope:
      • Move CLI wrappers (forc-fmt, forc-lsp, forc-doc, forc-migrate) and operational tools (forc-node, forc-client, forc-crypto, forc-wallet) to forc-tooling.
      • Keep AST-aware implementations (swayfmt, sway-lsp, sway-doc, sway-migrate) in sway.
    • Distribution: Update sway-nightly-binaries, fuelup, and fuel.nix to source binaries from both repos.
    • CI & Compatibility: Separate CI pipelines; track cross-repo compatibility via compatibility.toml.
    • Release Pipeline: Independent crate releases from forc-tooling; atomic installs via dual manifests.
    • Implementation Plan: Bootstrap repo, migrate tools, introduce wrapper crates, update distribution, rollout/monitor.
    • Release Tooling Options: Consider release-plz, cargo-smart-release, cargo-unleash.
    • Notes: Drawbacks, alternatives, prior art, and unresolved questions documented.

Written by Cursor Bugbot for commit 9f0d425. This will update automatically on new commits. Configure here.

cursor[bot]

This comment was marked as outdated.

@JoshuaBatty JoshuaBatty changed the title [WIP] Tooling Monorepo Tooling Monorepo Nov 6, 2025
Copy link
Copy Markdown

@kayagokalp kayagokalp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks great to me! Only thing we might want to clarify/discuss is versioning as the binary that invoking compiler capabilities now will be decoupled from the sway repo.

As RFC discusses with the ability to version different packages independently, we should be able to continue following those version sets (like forc-fmt is actually at the same level as the compiler releases) while keeping rest of the tools like forc-client independent from these bumps.

I think we can also revive a simplified version of "releasy" which is going to actually just watch for releases in sway repo and open bump PRs on the tooling monorepo (like sway-core bumped on sway side etc). This can be useful for situations like getting latest language features released into forc-fmt semi-automatically, as there will be a PR already.

I am curios whether we consider forc as a tooling monorepo thing or sway monorepo thing? I feel like it should be tooling monorepo while its sway repo dependency is forc-pkg but without an automatic process described as above, language releases will require an additional PR merged. It is not the end of the world but something to consider

@JoshuaBatty JoshuaBatty requested review from a team, Voxelot, mchristopher and zees-dev November 7, 2025 00:28
| **Sway** | Compiler, language services, AST-aware binaries | Publishes `swayfmt`, `sway-lsp`, `sway-doc`, `sway-migrate` , and related libraries consumed by tooling wrappers |
| **Forc-tooling** | CLI wrappers and operational tools | Hosts `forc-fmt`, `forc-lsp`, `forc-doc`, `forc-node`, `forc-client`, `forc-crypto`, `forc-wallet`, and tracing/deploy utilities |

Both repos maintain independent CI pipelines:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be interesting to allow sway CI to trigger some upstream tests. The new tooling repo is one of them.

In this way, we would know that something is breaking. This CI task would not block merge, but would signal to someone else that changes are coming.

@cursor
Copy link
Copy Markdown

cursor bot commented Dec 2, 2025

PR Summary

Adds an RFC proposing a separate forc-tooling monorepo, keeping AST-aware binaries in sway, with defined CI, release, and compatibility tracking.

  • RFC Added: rfcs/0017-tooling-monorepo.md
    • Proposes creating a dedicated forc-tooling monorepo for CLI wrappers and operational tools while keeping swayfmt, sway-lsp, sway-doc, sway-migrate in sway.
    • Repository boundaries:
      • sway: compiler, language services, AST-aware binaries
      • forc-tooling: forc-fmt, forc-lsp, forc-doc, forc-migrate (wrappers), forc-node, forc-client, forc-crypto, forc-wallet, tracing/deploy tools
    • Distribution: update fuelup, fuel.nix, and nightly pipelines to source tooling from the new repo.
    • CI/Release: independent pipelines; tooling publishes separately; atomic installs supported.
    • Compatibility tracking: auto-generate releases.toml from Cargo.lock per release.
    • Implementation plan: bootstrap repo, migrate operational tools, introduce wrappers, adapt distribution, and monitor rollout.
    • Tooling options: outlines multi-crate release tools (release-plz, cargo-smart-release, cargo-unleash).
    • Notes drawbacks, rationale/alternatives, prior art, and unresolved questions.

Written by Cursor Bugbot for commit 60dfcb3. This will update automatically on new commits. Configure here.

…onorepo with improved dependency management in Cargo.toml files.
JoshuaBatty added a commit to FuelLabs/fuelup that referenced this pull request Dec 9, 2025
Update all channel TOML files to use the new simplified target naming
convention for forc-wallet:

- aarch64-unknown-linux-gnu → linux_arm64
- x86_64-unknown-linux-gnu → linux_amd64
- aarch64-apple-darwin → darwin_arm64
- x86_64-apple-darwin → darwin_amd64

This aligns with the forc-wallet release asset renaming and the
simplified naming convention adopted by the forc monorepo.

Note: fuel-core and fuel-core-keygen entries are intentionally
unchanged as their release assets have not been renamed.

Closes #809
Related: #808
RFC: FuelLabs/sway-rfcs#49
JoshuaBatty added a commit to FuelLabs/sway that referenced this pull request Dec 9, 2025
## Summary

This PR completes the sway-side of migrating `forc-tracing` and
`forc-crypto` to the new [forc
monorepo](https://github.com/FuelLabs/forc), as outlined in [RFC
#49](FuelLabs/sway-rfcs#49).

The corresponding forc repo PR:
FuelLabs/forc#119

### Changes

- Remove `forc-tracing` crate from workspace (now uses crates.io
`0.71.1`)
- Remove `forc-crypto` crate from workspace
- Update CI to no longer build/package `forc-crypto` binary (it's now
built from forc repo)
- Update gh-pages workflow to install `forc-crypto` from forc repo for
documentation generation

### Distribution

Going forward, `forc-crypto` will be built and distributed from the forc
repo by:
- sway-nightly-binaries
- fuelup  
- fuel.nix

### Documentation

For now, documentation for all tooling will continue to live in this
repo. The `gh-pages` workflow now pulls `forc-crypto` from the forc repo
rather than building it locally, so docs generation continues to work as
before.
JoshuaBatty added a commit to FuelLabs/fuelup that referenced this pull request Dec 10, 2025
Update all channel TOML files to use the new simplified target naming
convention for forc-wallet:

- aarch64-unknown-linux-gnu → linux_arm64
- x86_64-unknown-linux-gnu → linux_amd64
- aarch64-apple-darwin → darwin_arm64
- x86_64-apple-darwin → darwin_amd64

This aligns with the forc-wallet release asset renaming and the
simplified naming convention adopted by the forc monorepo.

Note: fuel-core and fuel-core-keygen entries are intentionally
unchanged as their release assets have not been renamed.

Closes #809
Related: #808
RFC: FuelLabs/sway-rfcs#49
JoshuaBatty added a commit to FuelLabs/fuelup that referenced this pull request Dec 11, 2025
Update all channel TOML files to use the new simplified target naming
convention for forc-wallet:

- aarch64-unknown-linux-gnu → linux_arm64
- x86_64-unknown-linux-gnu → linux_amd64
- aarch64-apple-darwin → darwin_arm64
- x86_64-apple-darwin → darwin_amd64

This aligns with the forc-wallet release asset renaming and the
simplified naming convention adopted by the forc monorepo.

Note: fuel-core and fuel-core-keygen entries are intentionally
unchanged as their release assets have not been renamed.

Closes #809
Related: #808
RFC: FuelLabs/sway-rfcs#49
JoshuaBatty added a commit to FuelLabs/fuelup that referenced this pull request Dec 11, 2025
…#811)

Update all channel TOML files to use the new simplified target naming
convention for forc-wallet:

- aarch64-unknown-linux-gnu → linux_arm64
- x86_64-unknown-linux-gnu → linux_amd64
- aarch64-apple-darwin → darwin_arm64
- x86_64-apple-darwin → darwin_amd64

This aligns with the forc-wallet release asset renaming and the
simplified naming convention adopted by the forc monorepo.

Note: fuel-core and fuel-core-keygen entries are intentionally
unchanged as their release assets have not been renamed.

Closes #809
Related: #808
RFC: FuelLabs/sway-rfcs#49
JoshuaBatty added a commit to FuelLabs/fuel.nix that referenced this pull request Jan 15, 2026
## Summary

Migrates `forc-node` package support from the `sway` repository to the
`forc` monorepo, effective from version 0.71.0 onwards.

This follows the same pattern established in #205 for `forc-crypto`.

## Changes

- **refresh-manifests.sh**: Added `pkg_forc_node` with legacy repo
routing (sway < 0.71.0, forc >= 0.71.0)
- **patches.nix**: 
  - Added `forc-node` to `forc-plugins` list for openssl dependencies
  - Added `buildAndTestSubdir` patch for forc monorepo builds
  - Added clang/rocksdb dependencies required for fuel-core bindings
- **packages.md**: Added forc-node to documentation

## Related PRs

- forc: [FuelLabs/forc#130](FuelLabs/forc#130) -
Migrate forc-node from sway repo
- fuelup:
[FuelLabs/fuelup#819](FuelLabs/fuelup#819) -
Migrate forc-node from sway to forc monorepo
- sway-nightly-binaries:
[FuelLabs/sway-nightly-binaries#81](FuelLabs/sway-nightly-binaries#81)
- Migrate forc-node nightly builds

## RFC

[FuelLabs/sway-rfcs#49](FuelLabs/sway-rfcs#49) -
Tooling Monorepo RFC

---------

Co-authored-by: GitHub Action <action@github.com>
ironcev added a commit to FuelLabs/sway that referenced this pull request Jan 16, 2026
## Summary

This PR completes the sway-side of migrating `forc-node` to the [forc
monorepo](https://github.com/FuelLabs/forc), as outlined in [RFC
#49](FuelLabs/sway-rfcs#49).

The corresponding forc repo PR:
FuelLabs/forc#130

`forc-node` has already been released from the forc repo (v0.71.2).

### Changes

- Remove `forc-node` crate from workspace
- Update CI to no longer build/test/package `forc-node` binary (it's now
built from forc repo)
- Update gh-pages workflow to install `forc-node` from forc repo for
documentation generation
- Remove unused workspace dependencies (`fuel-core`,
`fuel-core-chain-config`, `libp2p-identity`, `sha1`, `termion`)

### Distribution

Going forward, `forc-node` will be built and distributed from the forc
repo by:
- sway-nightly-binaries
- fuelup
- fuel.nix

### Documentation

Documentation for all tooling will continue to live in this repo. The
`gh-pages` workflow now pulls `forc-node` from the forc repo rather than
building it locally, so docs generation continues to work as before.

Co-authored-by: Igor Rončević <ironcev@hotmail.com>
JoshuaBatty added a commit to FuelLabs/sway-nightly-binaries that referenced this pull request Feb 4, 2026
`forc-client` moved from `FuelLabs/sway` to `FuelLabs/forc` as of v0.71.0
(see FuelLabs/forc#143). This PR updates nightly
builds to source it from the new location.

Changes:
- Add `forc-client` to the forc monorepo workflow
- Handle multi-binary crates by extracting names from [[bin]] sections
- Remove `forc-deploy`, `forc-run`, `forc-submit`, `forc-call` from sway workflow
- Update README to document the new source

Part of the tooling monorepo migration: FuelLabs/sway-rfcs#49
JoshuaBatty added a commit to FuelLabs/sway-nightly-binaries that referenced this pull request Feb 4, 2026
`forc-client` moved from `FuelLabs/sway` to `FuelLabs/forc` as of v0.71.0
(see FuelLabs/forc#143). This PR updates nightly
builds to source it from the new location.

Changes:
- Add `forc-client` to the forc monorepo workflow
- Handle multi-binary crates by extracting names from [[bin]] sections
- Remove `forc-deploy`, `forc-run`, `forc-submit`, `forc-call` from sway workflow
- Update README to document the new source

Part of the tooling monorepo migration: FuelLabs/sway-rfcs#49
JoshuaBatty added a commit to FuelLabs/sway-nightly-binaries that referenced this pull request Feb 4, 2026
`forc-client` moved from `FuelLabs/sway` to `FuelLabs/forc` as of v0.71.0
(see FuelLabs/forc#143). This PR updates nightly
builds to source it from the new location.

Changes:
- Add `forc-client` to the forc monorepo workflow
- Handle multi-binary crates by extracting names from [[bin]] sections
- Remove `forc-deploy`, `forc-run`, `forc-submit`, `forc-call` from sway workflow
- Update README to document the new source

Part of the tooling monorepo migration: FuelLabs/sway-rfcs#49
JoshuaBatty added a commit to FuelLabs/sway-nightly-binaries that referenced this pull request Feb 4, 2026
`forc-client` moved from `FuelLabs/sway` to `FuelLabs/forc` as of v0.71.0
(see FuelLabs/forc#143). This PR updates nightly
builds to source it from the new location.

Changes:
- Add `forc-client` to the forc monorepo workflow
- Handle multi-binary crates by extracting names from [[bin]] sections
- Remove `forc-deploy`, `forc-run`, `forc-submit`, `forc-call` from sway workflow
- Update README to document the new source

Part of the tooling monorepo migration: FuelLabs/sway-rfcs#49
JoshuaBatty added a commit to FuelLabs/sway-nightly-binaries that referenced this pull request Feb 4, 2026
`forc-client` moved from `FuelLabs/sway` to `FuelLabs/forc` as of v0.71.0
(see FuelLabs/forc#143). This PR updates nightly
builds to source it from the new location.

Changes:
- Add `forc-client` to the forc monorepo workflow
- Handle multi-binary crates by extracting names from [[bin]] sections
- Remove `forc-deploy`, `forc-run`, `forc-submit`, `forc-call` from sway workflow
- Update README to document the new source

Part of the tooling monorepo migration: FuelLabs/sway-rfcs#49
JoshuaBatty added a commit to FuelLabs/fuelup that referenced this pull request Feb 4, 2026
This PR enables fuelup to source `forc-client` from the `FuelLabs/forc`
monorepo starting with version 0.71.0, following the ongoing migration
of Fuel tooling as outlined in the RFC.

Changes:
- Update `components.toml` with forc-client migration config
- Update `tag_for_version()` to handle `forc-client` tags in forc monorepo
- Update `proxy_cli.rs` to handle forc-client executables for toolchain overrides
- Remove forc-client executables from forc component (now separate)
- Add tests for forc-client version routing

Version Routing:
| Version   | Repository | Tarball                              | Tag Format           |
|-----------|------------|--------------------------------------|----------------------|
| < 0.71.0  | sway       | forc-binaries-{target}.tar.gz        | v{version}           |
| >= 0.71.0 | forc       | forc-client-{version}-{target}.tar.gz| forc-client-{version}|

Related PRs:
- RFC: FuelLabs/sway-rfcs#49
- forc-client migration: FuelLabs/forc#143
- sway-nightly-binaries: FuelLabs/sway-nightly-binaries#83
JoshuaBatty added a commit to FuelLabs/fuel.nix that referenced this pull request Feb 5, 2026
## Summary

`forc-client` moved from `FuelLabs/sway` to `FuelLabs/forc` as of
v0.71.0 (see FuelLabs/forc#143). This PR updates
fuel.nix to source it from the new location.

Part of the tooling monorepo migration:
FuelLabs/sway-rfcs#49

## Changes

- **`script/refresh-manifests.sh`**: Add `legacy_repo` and
`legacy_before` routing for forc-client (versions >= 0.71.0 from forc
monorepo, older from sway)
- **`patches.nix`**: Add `buildAndTestSubdir` override for forc-client
from forc monorepo
- **`book/src/packages.md`**: Update forc-client and forc-call to
reference forc-repo
- **`book/src/contributing/adding-packages.md`**: Update example to show
legacy_repo pattern
- **New manifests**: forc-client 0.71.0, 0.71.1, and nightlies from forc
monorepo

## Related PRs

- forc-client migration to forc monorepo:
FuelLabs/forc#143
- forc-client nightly builds migration:
FuelLabs/sway-nightly-binaries#83

<!-- BUGBOT_STATUS --><sup><a
href="https://cursor.com/dashboard?tab=bugbot">Cursor Bugbot</a>
reviewed your changes and found no issues for commit
<u>428825c</u></sup><!-- /BUGBOT_STATUS -->

---------

Co-authored-by: GitHub Action <action@github.com>
JoshuaBatty added a commit to FuelLabs/fuelup that referenced this pull request Feb 5, 2026
* feat: migrate `forc-client` from sway to forc monorepo

This PR enables fuelup to source `forc-client` from the `FuelLabs/forc`
monorepo starting with version 0.71.0, following the ongoing migration
of Fuel tooling as outlined in the RFC.

Changes:
- Update `components.toml` with forc-client migration config
- Update `tag_for_version()` to handle `forc-client` tags in forc monorepo
- Update `proxy_cli.rs` to handle forc-client executables for toolchain overrides
- Remove forc-client executables from forc component (now separate)
- Add tests for forc-client version routing

Version Routing:
| Version   | Repository | Tarball                              | Tag Format           |
|-----------|------------|--------------------------------------|----------------------|
| < 0.71.0  | sway       | forc-binaries-{target}.tar.gz        | v{version}           |
| >= 0.71.0 | forc       | forc-client-{version}-{target}.tar.gz| forc-client-{version}|

Related PRs:
- RFC: FuelLabs/sway-rfcs#49
- forc-client migration: FuelLabs/forc#143
- sway-nightly-binaries: FuelLabs/sway-nightly-binaries#83

* fix: handle forc-client executables in component add

- Add `parent_component_for_executable()` to properly detect bundled
  executables and their parent component
- Users running `fuelup component add forc-run` now get the correct
  message to add `forc-client` instead of `forc`
- Users can now directly add `forc-client` as a standalone component

* chore: remove unused is_default_forc_plugin function
ironcev added a commit to FuelLabs/sway that referenced this pull request Feb 12, 2026
## Summary

This PR completes the sway-side of migrating `forc-client` to the [forc
monorepo](https://github.com/FuelLabs/forc), as outlined in [RFC
#49](FuelLabs/sway-rfcs#49).

The corresponding forc repo PR:
FuelLabs/forc#143

`forc-client` has already been released from the forc repo (v0.71.1).

### Changes

- Remove `forc-client` crate from workspace
- Update CI to no longer build/test/package `forc-client` binaries
(forc-deploy, forc-run, forc-submit, forc-call)
- Update gh-pages workflow to install `forc-client` from forc repo for
documentation generation
- Remove unused workspace dependencies (`aws-config`, `aws-sdk-kms`,
`k256`)
- Refactor test harness to use subprocess calls instead of forc-client
library
- Update forc-mcp to use forc-client's re-exported types

### Distribution

Going forward, `forc-client` will be built and distributed from the forc
repo by:
- sway-nightly-binaries
- fuelup
- fuel.nix

### Documentation

Documentation for all tooling will continue to live in this repo. The
`gh-pages` workflow now pulls `forc-client` from the forc repo rather
than building it locally, so docs generation continues to work as
before.

Co-authored-by: Igor Rončević <ironcev@hotmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants