mirror of
https://git.proxmox.com/git/proxmox
synced 2025-04-30 08:50:26 +00:00
README: describe [patch.crates-io] and sysext workflow
For how to work on the crates in this workspace while actually working on a separate project without having to constantly reinstall `.deb` files. Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
This commit is contained in:
parent
2f25debee6
commit
072ca695f5
56
README.md
56
README.md
@ -95,3 +95,59 @@ Some restrictions apply:
|
|||||||
- workspace dependency specifications cannot include `optional`
|
- workspace dependency specifications cannot include `optional`
|
||||||
- if needed, the `optional` flag needs to be set at the member level when
|
- if needed, the `optional` flag needs to be set at the member level when
|
||||||
using a workspace dependency
|
using a workspace dependency
|
||||||
|
|
||||||
|
# Working with *other* projects while changing to *single crates here*
|
||||||
|
|
||||||
|
When crates from this workspace need changes caused by requirements in projects
|
||||||
|
*outside* of this repository, it can often be annoying to keep building and
|
||||||
|
installing `.deb` files.
|
||||||
|
|
||||||
|
Additionally, doing so often requires complete rebuilds as cargo will not pick
|
||||||
|
up *file* changes of external dependencies.
|
||||||
|
|
||||||
|
One way to fix this is by actually changing the version. Since we cut away
|
||||||
|
anything starting at the first hyphen in the version, we need to use a `+`
|
||||||
|
(build metadata) version suffix.
|
||||||
|
|
||||||
|
Eg. turn `5.0.0` into `5.0.0+test8`.
|
||||||
|
|
||||||
|
There are 2 faster ways:
|
||||||
|
|
||||||
|
## Adding a `#[patch.crates-io]` section to the other project.
|
||||||
|
|
||||||
|
Note, however, that this requires *ALL* crates from this workspace to be listed,
|
||||||
|
otherwise multiple conflicting versions of the same crate AND even the same
|
||||||
|
numerical *version* might be built, causing *weird* errors.
|
||||||
|
|
||||||
|
The advantage, however, is that `cargo` will pick up on file changes and rebuild
|
||||||
|
the crate on changes.
|
||||||
|
|
||||||
|
## An in-between: system extensions
|
||||||
|
|
||||||
|
An easy way to quickly get the new package "installed" *temporarily*, such that
|
||||||
|
real apt package upgrades are unaffected is as a system-extension.
|
||||||
|
|
||||||
|
The easiest way — if no other extensions are used — is to just symlink the
|
||||||
|
`extensions/` directory to `/run` as root via:
|
||||||
|
|
||||||
|
```
|
||||||
|
# ln -s ${THIS_DIR}/extensions /run/extensions
|
||||||
|
```
|
||||||
|
|
||||||
|
This does not persist across reboots.
|
||||||
|
(Note: that the `extensions/` directory does not need to exist for the above to
|
||||||
|
work.)
|
||||||
|
|
||||||
|
Once this is done, trying a new version of a crate works by:
|
||||||
|
|
||||||
|
1. Bump the version: eg. `5.0.0+test8` -> `5.0.0+test9`
|
||||||
|
While this is technically optional (the sysext would then *replace*
|
||||||
|
(temporarily) the installed version as long as the sysext is active), just
|
||||||
|
like with `.deb` files, not doing this causes `cargo` to consider the crate
|
||||||
|
to be unchanged and it will not rebuild its code.
|
||||||
|
2. here: `$ make ${crate}-sysext` (rebuilds `extensions/${crate}.raw`)
|
||||||
|
3. as root: `# systemd-sysext refresh` (activates current extensions images)
|
||||||
|
4. in the other project: `$ cargo update && cargo build`
|
||||||
|
|
||||||
|
In the last step, cargo sees that there's a newer version of the crate available
|
||||||
|
and use that.
|
||||||
|
Loading…
Reference in New Issue
Block a user