Skip to content

feat: migrate forc-wallet repository to forc monorepo#1

Merged
JoshuaBatty merged 149 commits intomainfrom
josh/forc-wallet
Nov 21, 2025
Merged

feat: migrate forc-wallet repository to forc monorepo#1
JoshuaBatty merged 149 commits intomainfrom
josh/forc-wallet

Conversation

@JoshuaBatty
Copy link
Copy Markdown
Member

@JoshuaBatty JoshuaBatty commented Nov 12, 2025

Summary

This PR migrates the entire forc-wallet repository into the forc monorepo as part of the Fuel toolchain consolidation effort outlined in sway-rfcs#49.

  • Merged complete commit history from FuelLabs/forc-wallet (279+ commits)
  • Migrated all 34 version tags with new naming convention: v0.15.2forc-wallet-0.15.2
  • Adopted Tokio-style tagging strategy for monorepo tool versioning
  • Preserved all source code, dependencies, and project structure
  • Configured generic monorepo release pipeline for independent crate releases

Changes

Repository Structure

  • Complete git history merge with --allow-unrelated-histories
  • Tag renaming following monorepo convention (forc-wallet-0.1.0 through forc-wallet-0.15.2)
  • Workspace setup with forc-wallet as the first member
  • rust-toolchain.toml at repository root (Rust 1.90.0)

Release Pipeline (Tokio-style)

  • Generic CI workflow that automatically detects which crate to release from the tag name
  • Tag format: {crate-name}-{version} (e.g., forc-wallet-0.16.0)
  • Dual publishing:
    • Publishes to crates.io via FuelLabs/publish-crates action
    • Builds cross-platform binaries (Linux x86_64/ARM64, macOS Intel/Apple Silicon)
  • Tag verification ensures Cargo.toml version matches the release tag
  • Documentation in RELEASING.md with complete release process

Key Features

  • Future-proof: Adding new workspace members (e.g., forc-plugin) requires zero CI changes
  • Automatic detection: CI parses the tag to determine which crate to build/publish
  • Platform support: 4 target platforms with stripped, optimized binaries
  • Artifact naming: {crate-name}-{version}-{platform}.tar.gz

Post-merge Tasks

  • Migrate 44 open issues from forc-wallet repository
  • Migrate 60 closed issues from forc-wallet repository
  • Migrate all labels
  • Set up monorepo release pipeline
  • Cut first release (forc-wallet-0.16.0) to verify pipeline
  • Add deprecation notice to original forc-wallet repository
  • Update documentation and links pointing to old repository
  • Update fuel.nix, sway-nightly-binaries, and fuelup to use this repo instead of forc-wallet

Release Instructions

After merge, create the first release:

  1. Go to Releases → Draft a new release
  2. Enter tag: forc-wallet-0.16.0
  3. Add release notes from forc-wallet/CHANGELOG.md
  4. Publish release

The CI will automatically:

  • Publish forc-wallet 0.16.0 to crates.io
  • Build and upload binaries for all platforms

See RELEASING.md for detailed instructions.

Related


Note

Moves forc-wallet into the forc monorepo, adds a workspace and generic tag-based CI/release pipeline with cross-platform binaries and supporting tooling/docs.

  • Monorepo & Workspace:
    • Add Rust workspace in Cargo.toml with member forc-wallet.
    • Pin toolchain via rust-toolchain.toml (Rust 1.90.0).
  • Code Import:
    • Add full forc-wallet crate (forc-wallet/**) including CLI (src/main.rs), library modules, tests, Cargo.toml (v0.16.0), README.md, and CHANGELOG.md.
  • CI/CD:
    • Introduce .github/workflows/ci.yml with fmt/clippy/check/test matrix, coverage (cargo-llvm-cov), Slack notifications, and release jobs (publish to crates.io, build/strip/upload binaries for Linux x86_64/aarch64 and macOS x86_64/aarch64).
    • Add nightly cargo-audit and markdown-lint workflows.
    • Add scripts/verify_tag.sh to validate {crate}-{version} tags against Cargo.toml.
  • Releasing & Docs:
    • Add RELEASING.md describing Tokio-style tag format {crate-name}-{version} and release steps.
    • Update root README.md and repository configs (.gitignore, .markdownlint.yaml).

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

Voxelot and others added 30 commits May 6, 2022 19:46
Co-authored-by: John Adler <adlerjohn@users.noreply.github.com>
* Use the SDK API to enable basic features
* refactor: Do not require password for listing accounts

* docs: better doc comments
… index (#25)

feat: added account command to show address of an account given its index
* Update readme with installation and basic usage

* Update README.md

Co-authored-by: mitchmindtree <mail@mitchellnordine.com>

Co-authored-by: mitchmindtree <mail@mitchellnordine.com>
…ter (#36)

* feat: Phrase is imported using a password field

* Update reaedme with --import
Add a CI check to ensure the lock file is always up to date

Version 0.1.0 was published with an out-of-date lock file. This updates
CI to ensure it's always at least up to date with the `Cargo.toml`
requirements.
Co-authored-by: Ahmed Sagdati <37515857+segfault-magnet@users.noreply.github.com>
@fuel-cla-bot
Copy link
Copy Markdown

fuel-cla-bot bot commented Nov 12, 2025

Thanks for the contribution! Before we can merge this, we need @digorithm @iqdecay to sign the Fuel Labs Contributor License Agreement.

@fuel-cla-bot
Copy link
Copy Markdown

fuel-cla-bot bot commented Nov 12, 2025

Thanks for the contribution! It looks like @mitchmindtree is an internal user so signing the CLA is not required. However, they are not a member of this GitHub org so we can't confirm this.

@JoshuaBatty JoshuaBatty self-assigned this Nov 12, 2025
@JoshuaBatty JoshuaBatty changed the title feat: migrate forc-wallet repository to forc monorepo feat: migrate forc-wallet repository to forc monorepo Nov 12, 2025
Copy link
Copy Markdown

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

This PR is being reviewed by Cursor Bugbot

Details

Your team is on the Bugbot Free tier. On this plan, Bugbot will review limited PRs each billing cycle for each member of your team.

To receive Bugbot reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Nov 12, 2025

LCOV of commit 6d0715c during CI #8

Summary coverage rate:
  lines......: 32.6% (361 of 1108 lines)
  functions..: 32.5% (53 of 163 functions)
  branches...: 26.4% (19 of 72 branches)

Files changed coverage rate: n/a

knagy2 and others added 5 commits November 13, 2025 12:24
Fix "seperator" typo throughout codebase

  **Changes:**
- `src/format.rs`: Enum variant `Value::Separator`, method
`add_separator()`, and all references
  - `src/balance.rs`: Two call sites updated to match new method name

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Standardizes typo by renaming `Seperator` to `Separator` in `List` and
updates call sites in balance printing.
> 
> - **Formatting (`src/format.rs`)**:
>   - Rename enum variant `Value::Seperator` -> `Value::Separator`.
> - Rename method `add_seperator()` -> `add_separator()` and update
internal uses.
>   - Rename local `seperator` -> `separator` in `Display` impl.
>   - Fix doc comment typo: “alligned” -> “aligned”.
> - **Balance (`src/balance.rs`)**:
> - Update calls to `List::add_seperator()` -> `List::add_separator()`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
ef1c9dc3650cce409f96fd87c599c10ae3d5d032. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
---



**Description:**  
This pull request corrects a typo in the inline documentation for the
wallet accounts directory path, changing accoutns to accounts for
improved clarity and accuracy.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Corrects doc comment path from `~/.fuel/wallets/accoutns` to
`~/.fuel/wallets/accounts` in `src/main.rs`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
730bb51be53291c339fafe1ad99ec6296e4f06ad. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Co-authored-by: Joshua Batty <joshpbatty@gmail.com>
Bumps [tracing-subscriber](https://github.com/tokio-rs/tracing) from
0.3.19 to 0.3.20.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tokio-rs/tracing/releases">tracing-subscriber's
releases</a>.</em></p>
<blockquote>
<h2>tracing-subscriber 0.3.20</h2>
<p><strong>Security Fix</strong>: ANSI Escape Sequence Injection
(CVE-TBD)</p>
<h2>Impact</h2>
<p>Previous versions of tracing-subscriber were vulnerable to ANSI
escape sequence injection attacks. Untrusted user input containing ANSI
escape sequences could be injected into terminal output when logged,
potentially allowing attackers to:</p>
<ul>
<li>Manipulate terminal title bars</li>
<li>Clear screens or modify terminal display</li>
<li>Potentially mislead users through terminal manipulation</li>
</ul>
<p>In isolation, impact is minimal, however security issues have been
found in terminal emulators that enabled an attacker to use ANSI escape
sequences via logs to exploit vulnerabilities in the terminal
emulator.</p>
<h2>Solution</h2>
<p>Version 0.3.20 fixes this vulnerability by escaping ANSI control
characters in when writing events to destinations that may be printed to
the terminal.</p>
<h2>Affected Versions</h2>
<p>All versions of tracing-subscriber prior to 0.3.20 are affected by
this vulnerability.</p>
<h2>Recommendations</h2>
<p>Immediate Action Required: We recommend upgrading to
tracing-subscriber 0.3.20 immediately, especially if your
application:</p>
<ul>
<li>Logs user-provided input (form data, HTTP headers, query parameters,
etc.)</li>
<li>Runs in environments where terminal output is displayed to
users</li>
</ul>
<h2>Migration</h2>
<p>This is a patch release with no breaking API changes. Simply update
your Cargo.toml:</p>
<pre lang="toml"><code>[dependencies]
tracing-subscriber = &quot;0.3.20&quot;
</code></pre>
<h2>Acknowledgments</h2>
<p>We would like to thank <a href="http://github.com/zefr0x">zefr0x</a>
who responsibly reported the issue at
<code>security@tokio.rs</code>.</p>
<p>If you believe you have found a security vulnerability in any
tokio-rs project, please email us at <code>security@tokio.rs</code>.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/tokio-rs/tracing/commit/4c52ca5266a3920fc5dfeebda2accf15ee7fb278"><code>4c52ca5</code></a>
fmt: fix ANSI escape sequence injection vulnerability (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3368">#3368</a>)</li>
<li><a
href="https://github.com/tokio-rs/tracing/commit/f71cebe41e4c12735b1d19ca804428d4ff7d905d"><code>f71cebe</code></a>
subscriber: impl Clone for EnvFilter (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3360">#3360</a>)</li>
<li><a
href="https://github.com/tokio-rs/tracing/commit/3a1f571102b38bcdca13d59f3c454989d179055d"><code>3a1f571</code></a>
Fix CI (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3361">#3361</a>)</li>
<li><a
href="https://github.com/tokio-rs/tracing/commit/e63ef57f3d686abe3727ddd586eb9af73d6715b7"><code>e63ef57</code></a>
chore: prepare tracing-attributes 0.1.30 (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3316">#3316</a>)</li>
<li><a
href="https://github.com/tokio-rs/tracing/commit/6e59a13b1a7bcdd78b8b5a7cbcf70a0b2cdd76f0"><code>6e59a13</code></a>
attributes: fix tracing::instrument regression around shadowing (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3311">#3311</a>)</li>
<li><a
href="https://github.com/tokio-rs/tracing/commit/e4df76127538aa8370d7dee32a6f84bbec6bbf10"><code>e4df761</code></a>
tracing: update core to 0.1.34 and attributes to 0.1.29 (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3305">#3305</a>)</li>
<li><a
href="https://github.com/tokio-rs/tracing/commit/643f392ebb73c4fb856f56a78c066c82582dd22c"><code>643f392</code></a>
chore: prepare tracing-attributes 0.1.29 (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3304">#3304</a>)</li>
<li><a
href="https://github.com/tokio-rs/tracing/commit/d08e7a6eea1833810ea527e18ea03b08cd402c9d"><code>d08e7a6</code></a>
chore: prepare tracing-core 0.1.34 (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3302">#3302</a>)</li>
<li><a
href="https://github.com/tokio-rs/tracing/commit/6e70c571d319a033d5f37c885ccf99aa675a9eac"><code>6e70c57</code></a>
tracing-subscriber: count numbers of enters in <code>Timings</code> (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/2944">#2944</a>)</li>
<li><a
href="https://github.com/tokio-rs/tracing/commit/c01d4fd9def2fb061669a310598095c789ca0a32"><code>c01d4fd</code></a>
fix docs and enable CI on <code>main</code> branch (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3295">#3295</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/tokio-rs/tracing/compare/tracing-subscriber-0.3.19...tracing-subscriber-0.3.20">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=tracing-subscriber&package-manager=cargo&previous-version=0.3.19&new-version=0.3.20)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/FuelLabs/forc-wallet/network/alerts).

</details>

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> <sup>[Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) is
generating a summary for commit
8d33ac146769ff325d437398139e3a94e22b6136. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Joshua Batty <joshpbatty@gmail.com>
…tions-upload-release-asset (#224)

GitHub's actions/upload-release-assets is no longer maintained and seems
to repeatedly break (e.g. SSLV3_ALERT_BAD_RECORD_MAC), so I suggest
moving to a highly active and up to date runner.


edit:

Replace the deprecated actions/upload-release-asset@v1 with
softprops/action-gh-release@v2
to fix reliability issues with release asset uploads.

Changes:
- Use softprops/action-gh-release@v2 instead of
actions/upload-release-asset@v1
- Add conditional check for tag releases
- Simplify configuration by using files parameter
- Remove unnecessary environment variables and asset content type

This resolves the issue where the old action was no longer maintained
and
repeatedly breaking the release process.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Switch release asset uploads to softprops/action-gh-release@v2 with
tag-only gating and simplified inputs.
> 
> - **CI Workflow (`.github/workflows/ci.yml`)**:
>   - **Release asset upload (build-release job)**:
> - Replace `actions/upload-release-asset@v1` with
`softprops/action-gh-release@v2`.
> - Add condition `if: github.ref_type == 'tag'` to gate uploads on
tags.
> - Simplify inputs: use `with.files: ${{ env.ZIP_FILE_NAME }}`; remove
`upload_url`, `asset_*` fields, extra `env` token, and content type.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
8dceff6ca44184221efb3aabf965996b568077a9. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Co-authored-by: JoshuaBatty <joshpbatty@gmail.com>
Update CI workflow to support Tokio-style monorepo releases where each
workspace member can be released independently using {crate-name}-{version}
tags.

Changes:
- Update verify_tag.sh to parse crate name from tag format
- Remove hardcoded Cargo.toml path from CI workflow
- Add RELEASING.md with release process documentation
Make the build-release job fully generic to support multiple workspace
members without hardcoded crate names. The CI now extracts the crate
name from the tag and uses it throughout the build process.

Changes:
- Extract crate name from tag in build-release job
- Replace all hardcoded 'forc-wallet' references with dynamic variable
- Remove v prefix handling (following Tokio convention)
- Update artifact naming to use full tag name
- Enhance RELEASING.md with detailed CI workflow explanation
- Disable changelog-incompatible rules in .markdownlint.yaml
- Add trailing newline to README.md
- Add blank lines around lists in RELEASING.md
@JoshuaBatty JoshuaBatty merged commit d8f4b56 into main Nov 21, 2025
12 of 14 checks passed
@JoshuaBatty JoshuaBatty deleted the josh/forc-wallet branch November 21, 2025 01:31
JoshuaBatty added a commit that referenced this pull request Dec 8, 2025
Migrates forc-tracing and forc-crypto from the sway repository into the forc monorepo, continuing the toolchain consolidation effort from sway-rfcs#49.

Changes
New Workspace Members
forc-tracing - Tracing utility crate (library-only, no binary)
forc-crypto - Cryptographic utilities CLI tool
Uses path dependency for forc-tracing (within monorepo)
Uses crates.io forc-util for cli_examples! macro
CI Updates
Added binary detection to skip build/strip/upload steps for library-only crates
Library crates still publish to crates.io but don't produce release binaries
Test Fixes
Added serial_test to prevent race conditions in forc-tracing tests
Tests share global JSON_MODE_ACTIVE state requiring serial execution
Post-merge Tasks
 Cut releases: forc-tracing-0.71.0, forc-crypto-0.71.0
 Update fuelup to fetch forc-crypto from this repo
 Update fuel.nix with version routing for forc-crypto
 Update sway-nightly-binaries to build forc-crypto from here
 Remove forc-tracing and forc-crypto from sway repo
Related
RFC: Tooling Monorepo sway-rfcs#49
forc-wallet migration (pattern reference): feat: migrate forc-wallet repository to forc monorepo #1
fuelup forc-wallet support: feat: enable forc-wallet migration from standalone repo to forc monorepo fuelup#807
fuel.nix forc-wallet support: feat: enable forc-wallet migration from standalone repo to forc monorepo fuel.nix#204
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.