As only formulaic changes to this repo are anticipated in the near to medium future, it is reasonable to offload the generation of those changes to robotic code assistants. This file explains the workflows that need generative input.
-
General information is available in the file
README.md. -
Prefer using
git rebasetogit mergewhen taking in new changes. This keeps the commit history simple for analysis.
-
Use "Conventional Commits 1.0.0" to formulate the commit messages for each git commit.
-
Every commit and PR created by Gemini must end with the following note:
This commit was created by an automated coding assistant, with human supervision.
-
In case of any errors, remove all commits you have created in this process.
-
Ensure you have a valid access token for submitting to crates.io.
-
Ensure that the repository is in a clean state. Update all git tags from the remote repo
origin. -
Read the last released semver version from the file
LAST_RELEASED_VERSION. Ensure that there is a git tag in this repo that is equal to the last released semver version. -
Ensure that the contents of the file
NEXT_VERSIONis equal to the last released semver but with minor version number incremented by one. -
Run
make uprevto ensure that all references to the last released version in all TOML files are updated to refer to the next release version. -
If the repository state is dirty, create a commit with all the currently outstanding changes. Put into the commit message a summary of all changes from the previous release to this release, while upholding the commit rules from the section "Commit rules" above.
-
Add a git tag to the current commit equal to the content of the file
NEXT_VERSION. -
Run
make publishto publish all crates tocrates.io. Do not usecargoas we have a custom publication process. -
Run
make covto update the function coverage report. -
If the previous step was a success, copy the contents of the file
NEXT_VERSIONinto the fileLAST_RELEASED_VERSION. After that, increment the semver inNEXT_VERSIONby one minor version number. -
If the repository is dirty, create a commit with all currently outstanding changes, upholding the "Commit rules" section above.
A new buildenv must be published if the buildenv itself is updated, or upon a new ICU release.
-
Buildenv git tags use a format
buildenv-X.Y.Z, whereX.Y.Zis the semver version of a buildenv. Use this when looking for git tags. -
ICU versions are usually just an integer. For example ICU 77 is version 77.
-
When publishing a new buildenv, ask the user which ICU version we are adding.
-
In case of any errors, remove all commits you have created in this process.
-
In
build/Makefile:-
add the following deps into
.PRECIOUSsection, for ICU versionN:push-maint-N.stamp,push-testenv-N.stamp,build-testenv-N.stamp,tag-testenv-N.stampin that order, whereNis replaced by the respective ICU version. Follow the style of the.PRECIOUStarget.
-
Modify the target label in the
test:target in the filebuild/Makefileto match the latest ICU version.-
Tag the current HEAD with
buildenv-X.Y.Z, whereX.Y.Zis the "next" version of buildenv, based on the previous version and an increment which follows the rules of "Semantic Versioning", based on conventional commits.-
E.g. if only "fix:" and other tags are present in git commits made since the last buildenv tag, increment only the patch version number.
-
If at least one "feat:" is present, increment the minor version, reset minor version to zero.
-
If text "BREAKING CHANGE" is present in any commits since last, increment major version, reset minor and patch to zero.
-
-
-
-
In file
Makefileat the top level dir do as follows:-
Add to target
static-bindgena dependencystatic-bindgen-N.stamp, whereNis the ICU version. -
Add to target
static-bindgen-speciala dependencystatic-bindgen-special-N.stamp, whereNis the ICU version.
-
-
Once all changes are ready, create a git commit detailing the change in the description.
-
Make a new buildenv release as:
make buildenv -
Then, send a PR for this change.
-
Now, create a new commit:
-
In file
Makefileat the top level dir do as follows:-
Replace the value of
USED_BUILDENV_VERSIONwith the just generatedlatest buildenv version. For
buildenv-X.Y.Zit will be justX.Y.Z.
-
-
Run
make static-bindgen -
Run
make static-bindgen-special -
Create a commit for changes so far.
-
Create a PR for this change.
-