Weld belongs in the root project that owns packaging and release work for a
multi-project Elixir repo.
1. Add The Dependency
def deps do
[
{:weld, "~> 0.7.1", runtime: false}
]
end2. Add A Repo-Local Manifest
Create a manifest such as packaging/weld/my_bundle.exs:
[
workspace: [
root: "../..",
project_globs: ["core/*", "runtime/*"]
],
dependencies: [
external_lib: [
requirement: "~> 1.2",
opts: []
]
],
artifacts: [
my_bundle: [
roots: ["runtime/local"],
package: [
name: "my_bundle",
otp_app: :my_bundle,
version: "0.1.0"
],
output: [
docs: ["README.md", "guides/architecture.md"]
],
verify: [
artifact_tests: ["packaging/weld/my_bundle/test"],
hex_build: true,
hex_publish: true
]
]
]
]workspace.root is resolved relative to the manifest file. In
packaging/weld/..., "../.." points back to the repo root.
Use dependencies when a selected workspace project depends on an external
package through a local :path, :git, or :github declaration that cannot
ship in the welded artifact as-is. weld will rewrite that dependency to the
canonical requirement you declare here.
3. Inspect Before You Project
mix weld.inspect
mix weld.graph --format dot
Use these commands to confirm project discovery, classifications, and graph shape before generating output.
If the repo uses one of Weld's standard manifest locations, you can omit the manifest path entirely. Explicit paths are still useful when a repo carries more than one manifest.
4. Generate The Welded Package
mix weld.project
Package-projection mode (the default, mode: :package_projection) creates a
standalone Mix project under dist/hex/<package>/ with a component-preserving
layout.
Monolith mode (mode: :monolith) creates a merged flat project under
dist/monolith/<package>/, combining sources, tests, config, migrations, and
priv from all selected packages into a single project tree.
If selected projects publish OTP application modules, the generated package also
gets a merged lib/<otp_app>/application.ex. In monolith mode this module also
bootstraps per-package config at startup via Config.Reader.
If monolith tests need source-only support from non-selected workspace
projects, keep that policy explicit with
monolith_opts[:test_support_projects].
5. Verify The Welded Package
mix weld.verify
Package-projection mode runs:
mix deps.compilemix compile --warnings-as-errors --no-compile-depsmix testmix docs --warnings-as-errorsmix hex.buildmix hex.publish --dry-run --yes- optional smoke verification when configured
Set verify: [hex_build: false] for internal artifacts that intentionally
depend on non-Hex git dependencies, and verify: [hex_publish: false] when
you want package verification without the dry-run publish step.
Monolith mode runs:
- per-package test baseline (each selected package's own test suite)
mix deps.getmix compile --warnings-as-errorsmix test(asserts test count is not lower than the baseline sum)mix docs --warnings-as-errorsmix hex.build
Monolith artifacts can also disable hex.build with
verify: [hex_build: false] when they are intentionally not Hex-packagable.
6. Prepare, Track, And Archive Releases
mix release.prepare
mix release.track
mix hex.publish --yes
mix release.archive
The prepared bundle always contains the projected project tree, lockfile, and
release metadata. It also contains the tarball when verify.hex_build is
enabled. That means internal-only artifacts can still use prepare, track, and
archive without pretending they are Hex-buildable.
mix release.track updates projection/<package_name> from the prepared
bundle and creates the first projection branch as an orphan by default.