sway/forc-plugins/forc-publish
kaya 8963312ba8
Some checks are pending
CI / forc-fmt-check-sway-lib-std (push) Waiting to run
Codspeed Benchmarks / benchmarks (push) Waiting to run
CI / check-dependency-version-formats (push) Waiting to run
CI / forc-fmt-check-sway-examples (push) Waiting to run
CI / forc-fmt-check-panic (push) Waiting to run
CI / cargo-unused-deps-check (push) Waiting to run
CI / cargo-fmt-check (push) Waiting to run
CI / cargo-run-e2e-test (push) Blocked by required conditions
CI / cargo-test-workspace (push) Waiting to run
CI / build-sway-examples (push) Waiting to run
CI / build-reference-examples (push) Waiting to run
CI / verifications-complete (push) Blocked by required conditions
CI / get-fuel-core-version (push) Waiting to run
CI / build-sway-lib-std (push) Waiting to run
CI / publish (push) Blocked by required conditions
CI / publish-sway-lib-std (push) Blocked by required conditions
CI / Build and upload forc binaries to release (push) Blocked by required conditions
CI / check-forc-manifest-version (push) Waiting to run
CI / check-sdk-harness-test-suite-compatibility (push) Waiting to run
CI / build-mdbook (push) Waiting to run
CI / build-forc-doc-sway-lib-std (push) Waiting to run
CI / build-forc-test-project (push) Waiting to run
CI / cargo-build-workspace (push) Waiting to run
CI / cargo-clippy (push) Waiting to run
CI / cargo-toml-fmt-check (push) Waiting to run
CI / cargo-run-e2e-test-release (push) Blocked by required conditions
CI / cargo-run-e2e-test-evm (push) Waiting to run
CI / cargo-test-lib-std (push) Waiting to run
CI / forc-run-benchmarks (push) Waiting to run
CI / forc-unit-tests (push) Waiting to run
CI / forc-pkg-fuels-deps-check (push) Waiting to run
CI / cargo-test-forc-debug (push) Blocked by required conditions
CI / cargo-test-forc-client (push) Blocked by required conditions
CI / cargo-test-forc-node (push) Blocked by required conditions
CI / cargo-test-sway-lsp (push) Waiting to run
CI / cargo-test-forc (push) Waiting to run
CI / notify-slack-on-failure (push) Blocked by required conditions
CI / pre-publish-check (push) Waiting to run
github pages / deploy (push) Waiting to run
feat: add preliminary local checks for forc-publish (#7253)
## Description
closes #7252.

This pull request introduces enhancements to the `forc-publish` plugin,
focusing on validating project configurations and improving error
handling. Key changes include the addition of a `validate` module for
preemptive checks, updates to error definitions, and modifications to
the tarball creation logic to incorporate validation. New test cases and
sample data directories have also been added to ensure robust validation
functionality.

### Validation Enhancements:
* Added a new `validate` module in `forc-publish/src/validate.rs` to
check for missing `Forc.toml`, missing version fields, and unsupported
dependency types.
* Updated the `Error` enum in `forc-publish/src/error.rs` to include new
error variants for validation failures like `InvalidForcToml`,
`MissingVersionField`, and `DependencyMissingVersion`.

### Tarball Creation Updates:
* Refactored `create_tarball_from_current_dir` in
`forc-publish/src/tarball.rs` to use the new `validate_dir` function for
preemptive validation. Removed redundant checks for `Forc.toml`
existence.
* Adjusted test cases in `forc-publish/src/tarball.rs` to use sample
directories with predefined configurations for validation testing.
[[1]](diffhunk://#diff-e3f20cadab3a1cf99fc967e0adc12e908f435a185e1529df9b152388927adf45L79-R85)
[[2]](diffhunk://#diff-e3f20cadab3a1cf99fc967e0adc12e908f435a185e1529df9b152388927adf45L140-R135)

### Test Data Additions:
* Added sample directories under `tests/data` for various validation
scenarios, including projects with missing versions, dependencies
without versions, and valid configurations.
[[1]](diffhunk://#diff-b171d6da23a1fe36735cd962cfcf506831115c3714654236b31dd999c2853823R1-R11)
[[2]](diffhunk://#diff-016348eaea4a95d041537b29d370619ab0d5ca99cc84f9b30d8ad561aa757a1eR1-R9)
[[3]](diffhunk://#diff-0495f782769450a8c200fdcc1f29805f4811a26f4849720fa34d5b37ba45e471R1-R8)
* Included `.gitignore` files in test data directories to exclude `out`
and `target` folders.
2025-07-22 02:03:58 +00:00
..
src feat: add preliminary local checks for forc-publish (#7253) 2025-07-22 02:03:58 +00:00
tests/data feat: add preliminary local checks for forc-publish (#7253) 2025-07-22 02:03:58 +00:00
Cargo.toml feat: add preliminary local checks for forc-publish (#7253) 2025-07-22 02:03:58 +00:00
README.md ci: publish lib-std on release (#7165) 2025-05-12 12:55:33 +04:00

forc-publish

Forc subcommand for uploading a package to the registry.

Authentication

Requires either the --token argument to be passed, the environment variable FORC_PUB_TOKEN, or a ~/.forc/credentials.toml file like this:

[registry]
token = "YOUR_TOKEN"

This credential file can be created automatically by running the CLI without the --token argument.

Local development

For local development, run forc.pub, create an API token and then forc publish --registry-url http://localhost:8080