]> git.proxmox.com Git - proxmox.git/blobdiff - README.rst
ldap: add method for retrieving root DSE attributes
[proxmox.git] / README.rst
index 2af4eed3a7b932427efcb8d83bcdb9a80b28fd80..2288f797a9cff260a04a909f1f249717520fe55c 100644 (file)
@@ -1,36 +1,80 @@
-Versioning
-==========
+Local cargo config
+==================
 
-Note that the following applies *per crate*, since each crate is its own debian package:
+This repository ships with a ``.cargo/config`` that replaces the crates.io
+registry with packaged crates located in ``/usr/share/cargo/registry``.
 
-The first commit after a release should bump the version to the next patch level with a ``-dev.1``
-suffix for the crate *and for the proxmox crate*, as well as all crates depending on it. For
-instance, ``proxmox-api`` depends on ``proxmox-tools``, so bumpgin ``proxmox-tools`` to a new `dev`
-version also requires bumping ``proxmox-api`` to a new dev version, since cargo requires
-pre-release versions to be selected explicitly:
+A similar config is also applied building with dh_cargo. Cargo.lock needs to be
+deleted when switching between packaged crates and crates.io, since the
+checksums are not compatible.
+
+To reference new dependencies (or updated versions) that are not yet packaged,
+the dependency needs to point directly to a path or git source.
+
+Steps for Releases
+==================
 
-    First commit after release: 0.1.0 -> 0.1.1-dev.1
-    Version bump commit: 0.1.1-dev.1 -> 0.1.1
+- Run ./bump.sh <CRATE> [patch|minor|major|<VERSION>]
+-- Fill out changelog
+-- Confirm bump commit
+- Build packages with `make deb`.
+-- Don't forget to commit updated d/control!
 
-It is unlikely that we'll need more than one .dev version, but it may be useful at some point, so
-we'll include teh ``.1``.
+Adding Crates
+=============
 
-When releasing a crate, the final commit should be the one stripping the ``-dev`` version and
-updating the ``debian/changelog``.
+1) At the top level:
+  - Generate the crate: ``cargo new --lib the-name``
+  - Sort the crate into ``Cargo.toml``'s ``workspace.members``
 
-Local (packaged) crates
+2) In the new crate's ``Cargo.toml``:
+  - In ``[package]`` set:
+      authors.workspace = true
+      license.workspace = true
+      edition.workspace = true
+      exclude.workspace = true
+      repository.workspace = true
+  - Add a meaningful ``description``
+  - Copy ``debian/copyright`` and ``debian/debcargo.toml`` from another subcrate.
+
+Adding a new Dependency
 =======================
 
-To use locally installed, packaged crates instead of crates.io put the
-following into ./.cargo/config (or point CARGO_HOME to a directory containing
-such a config file)::
+1) At the top level:
+  - Add it to ``[workspace.dependencies]`` specifying the version and any
+    features that should be enabled throughout the workspace
 
-   [source]
-   [source.debian-packages]
-   directory = "/usr/share/cargo/registry"
-   [source.crates-io]
-   replace-with = "debian-packages"
+2) In each member's ``Cargo.toml``:
+  - Add it to the desired dependencies section with ``workspace = true`` and no
+    version specified.
+  - If this member requires additional features, add only the extra features to
+    the member dependency.
 
-This is akin to what happens when building with dh_cargo. Cargo.lock needs to
-be deleted when switching between packaged crates and crates.io, since the
-checksums are not compatible.
+Updating a Dependency's Version
+===============================
+
+1) At the top level:
+  - Bump the version in ``[workspace.dependencies]`` as desired.
+  - Check for deprecations or breakage throughout the workspace.
+
+Notes on Workspace Inheritance
+==============================
+
+Common metadata (like authors, license, ..) are inherited throughout the
+workspace. If new fields are added that are identical for all crates, they
+should be defined in the top-level ``Cargo.toml`` file's
+``[workspace.package]`` section, and inherited in all members explicitly by
+setting ``FIELD.workspace = true`` in the member's ``[package]`` section.
+
+Dependency information is also inherited throughout the workspace, allowing a
+single dependency specification in the top-level Cargo.toml file to be used by
+all members.
+
+Some restrictions apply:
+- features can only be added in members, never removed (this includes
+  ``default_features = false``!)
+ - the base feature set at the workspace level should be the minimum (possibly
+   empty!) set required by all members
+- workspace dependency specifications cannot include ``optional``
+ - if needed, the ``optional`` flag needs to be set at the member level when
+   using a workspace dependency