Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .claude/rules/project/terminology.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ One name per thing, in every kind of prose: documentation, chat, commit messages
| The CLI tool | `bv` | the tool, Buildvana CLI tool, the Buildvana tool |
| The shared library package | `Buildvana.Runtime` | the runtime |
| The directory Buildvana works from | home directory | repository root, solution directory |
| Where `bv` runs, as `CIPlatform` detects it: GitHub Actions, GitLab CI, Generic CI, or Local | CI platform | build platform, cloud build, CI provider |
Comment thread
rdeago marked this conversation as resolved.
| The service that hosts the repository `repository.url` names, such as GitHub | Git host | server, Git server |
| The remote of the clone whose URL names the repository `repository.url` names | release remote | upstream remote, `origin` |
| The configuration file, in either spelling | `buildvana.jsonc` | `buildvana.json`, the configuration file |
| A `.buildvana/hooks/<context>/<event>.cs` file | hook | |
| A program the .NET CLI runs from a single `.cs` file, a hook included | file-based app | file-based program, single-file app |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 'true'
DOTNET_CLI_UI_LANGUAGE: 'en-US'
FEEDZ_IO_PRIVATE_TOKEN: ${{ secrets.FEEDZ_IO_PRIVATE_TOKEN }}
# bv reads its GitHub token from the environment variable named by github.tokenEnv in buildvana.jsonc.
# bv reads its GitHub token from the environment variable named by hosts.github.tokenEnv in buildvana.jsonc.
# The automatic token is enough here: no release operation is performed.
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 'true'
DOTNET_CLI_UI_LANGUAGE: 'en-US'
# Secrets consumed by bv. Which environment variable carries each one is named in buildvana.jsonc:
# - github.tokenEnv (implicitly GITHUB_TOKEN) holds the token used for release operations and Git pushes;
# - hosts.github.tokenEnv (implicitly GITHUB_TOKEN) holds the token used for release operations and Git pushes;
# here it is the release PAT, which - unlike the automatic token - can push to a protected branch.
# - nuget.feeds.prerelease.apiKeyEnv is FEEDZ_IO_PRIVATE_TOKEN (public Feedz.io preview feed);
# - nuget.feeds.release.apiKeyEnv is NUGET_DEPLOYMENT_KEY (nuget.org).
Expand Down
17 changes: 14 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ The patch number restarted from 1, below the 2.0.x versions already published.
- `release.checkPublicApi` and `release.dogfood` set the defaults of [`--check-public-api` and `--dogfood`](docs/tool-commands/release.md#options).
- A setting with an option [resolves](docs/configuration-file.md#resolution) as the option, then `buildvana.jsonc`, then the built-in default, and a blank string counts as not stated.
- `nuget.feeds.release` and `nuget.feeds.prerelease` name the [push feeds of `bv release`](docs/tool-commands/release.md#publishing), each with a `source` and an `apiKeyEnv`.
- `github.tokenEnv` names the [environment variable holding the GitHub token](docs/environment-variables.md#secret-carrying-variables-named-by-the-configuration-file), `GITHUB_TOKEN` by default, and `buildvana.jsonc` holds no secret.
- `hosts.github.tokenEnv` names the [environment variable holding the GitHub token](docs/environment-variables.md#secret-carrying-variables-named-by-the-configuration-file), `GITHUB_TOKEN` by default, and `buildvana.jsonc` holds no secret.
- `git.identity` names the [author of the commits of `bv release`](docs/tool-commands/release.md#preconditions), with `name` and `email` both required.
- `buildvana.jsonc` accepts a [`dependencies` section](docs/tool-commands/dependencies.md#update-policies), which sets the update policy of each dependency and names the files that hold additional package pins.
- The [`ThisAssemblyClass` module](docs/sdk-modules/this-assembly-class.md) generates a `ThisAssembly` class in a C# project that sets `GenerateThisAssemblyClass` to `true`.
Expand All @@ -48,9 +48,16 @@ The patch number restarted from 1, below the 2.0.x versions already published.
- Buildvana SDK [contributes two things to `bv dependencies`](docs/tool-commands/dependencies.md#what-buildvana-sdk-contributes): the target that dumps the package items of a project, and the import of the transitive override files.
- The `StandardAnalyzers` module passes the [internal API files](docs/sdk-modules/standard-analyzers.md#internal-api-files) to the compilation, one pair per target framework when `UseTfmSpecificInternalApiFiles` is `true`.
- On a stable version, `bv release` [moves the unshipped internal API](docs/tool-commands/release.md#the-steps) into the shipped one, as it does for the public API.
- `bv` recognizes a CI runner [as the .NET CLI does](docs/environment-variables.md#variables-that-mark-a-ci-runner), and passes `ContinuousIntegrationBuild=true` to the build pipeline on every one.
- `bv release` runs [on any machine](docs/tool-commands/release.md#preconditions), with `repository.url` naming the repository the release goes to.
- `bv release` fetches the tags of the [release remote](docs/tool-commands/release.md#the-release-remote) before it checks the versions.
- `release.allowUnknownHost` lets `bv release` [tag and push without a release page](docs/tool-commands/release.md#publishing) on a Git host `bv` does not know.
- [`bv info`](docs/tool-commands/info.md) prints the CI platform, the Git host, the release remote, and the identity a release would use.

### Changes to existing features

- **BREAKING CHANGE**: `bv release` no longer runs without [`repository.url`](docs/configuration-file.md#settings) in `buildvana.jsonc`.
- **BREAKING CHANGE**: `bv release` no longer leaves the release tag to the host, and [creates and pushes it](docs/tool-commands/release.md#the-release-tag) before it publishes the release.
- **BREAKING CHANGE**: `BV_MinRoslynVersion` moves from 5.3 to 5.9, so Buildvana SDK raises BVSDK1101 on [Roslyn older than 5.9](docs/sdk-diagnostics.md#source-generators-1100-1199).
- **BREAKING CHANGE**: `BV_MinMSBuildVersion` moves from 17.4 to 18.9, so Buildvana SDK raises BVSDK1004 on [MSBuild older than 18.9](docs/introduction.md#toolchain).
- **BREAKING CHANGE**: The `AlternatePack` module no longer adds `Tools.InnoDownloadPlugin` to an Inno Setup project, and the built-in [`download` and `issigverify` flags](https://jrsoftware.org/ishelp/topic_filessection.htm) replace it.
Expand Down Expand Up @@ -94,6 +101,7 @@ The patch number restarted from 1, below the 2.0.x versions already published.
- `bv clean` no longer deletes the `TestResults` directory of each test project.
- `bv release` moves the self-reference rewrites out of the release commit into a [post-release commit](docs/tool-commands/release.md#the-post-release-commit), so the release tag names the source state that was built.
- `bv release` takes the [identity of its commits](docs/tool-commands/release.md#preconditions) from `git.identity`, then from the CI bot identity, then from the Git configuration.
- `bv release` no longer writes `user.name` and `user.email` to the Git configuration of the repository, and keeps [its committer identity](docs/tool-commands/release.md#preconditions) in memory.
- `bv` renders a message as a [level label and a colored line](docs/command-line.md#verbosity), where it used to prefix a log level and a class-name category.
- `bv` streams the [output of `dotnet`](docs/command-line.md#output-streams) through as it arrives, where it used to hide the output unless the build failed.
- The build pipeline commands and `bv release` [observe cancellation](docs/command-line.md#cancellation), terminate the running `dotnet` process, and exit with code 130.
Expand All @@ -103,6 +111,7 @@ The patch number restarted from 1, below the 2.0.x versions already published.
- [The pages under `docs/`](docs/README.md) moved to kebab-case names, `docs/modules/` to `docs/sdk-modules/`, and `docs/DependencyManagement.md` to `docs/tool-commands/dependencies.md`, so a link to an old name breaks.
- The `StandardAnalyzers` module adds [`StyleCop.Analyzers` 1.3.133-beta](docs/sdk-modules/standard-analyzers.md#package-references), which supports C# 8 to 15 and adds several new rules.
- `bv release` reaches the [GitHub API of the host of the repository](docs/tool-commands/release.md#publishing), `api.github.com` or `<host>/api/v3`, where it reached `api.github.com` alone.
- `bv release` passes `ContinuousIntegrationBuild=true` to [its pipeline run](docs/tool-commands/release.md#the-steps) on every platform.

### Bugs fixed in this release

Expand All @@ -117,7 +126,7 @@ The patch number restarted from 1, below the 2.0.x versions already published.
- `bv` reports a failed or denied file access as one error line naming the operation, the path, and the reason, not as an unhandled exception.
- The release date `bv release` writes in a changelog section title uses the Gregorian calendar and the invariant format, whatever the culture of the machine.
- The `Wine` module [sets `UseWine`](docs/sdk-modules/wine.md#usewine-property) and raises BVSDK2200 on macOS, where `UseWine` stayed off.
- Outside GitHub Actions, `bv restore`, `bv build`, `bv test`, and `bv pack` no longer fail when the [home directory](docs/command-line.md#home-directory) has no `origin` remote.
- `bv restore`, `bv build`, `bv test`, and `bv pack` no longer fail when the [home directory](docs/command-line.md#home-directory) has no `origin` remote.
- The [`NuGetPack` module](docs/sdk-modules/nuget-pack.md#readme) finds the README file that `PackageReadmeFile` names, where it used to look up the name that `PackageLicenseFile` holds and raise [BVSDK1510](docs/sdk-diagnostics.md#nugetpack-module-1500-1599).
- The [`AssemblySigning` module](docs/sdk-modules/assembly-signing.md) reads the RSA private key of a `.pfx` file from any key provider, where [BVSDK1202](docs/sdk-diagnostics.md#assemblysigning-module-1200-1299) fired on most keys.
- The [`AssemblySigning` module](docs/sdk-modules/assembly-signing.md) converts the `.pfx` file before `ResolveKeySource` reads `AssemblyOriginatorKeyFile`, where `dotnet build` failed with `PFX signing not supported on .NET Core`.
Expand All @@ -132,11 +141,13 @@ The patch number restarted from 1, below the 2.0.x versions already published.
- The [`AdditionalAssemblyInfo` module](docs/sdk-modules/additional-assembly-info.md#clscompliant-property) generates `CLSCompliant(true)` and `ComVisible(true)` for any value MSBuild reads as true, such as `yes`, where it generated `false`.
- [`bv test`](docs/tool-commands/build-pipeline.md#bv-test) runs the tests of a project that sets `IsTestingPlatformApplication` to a value MSBuild reads as true, such as `yes`, where it skipped the project.
- The [`ConvertToWinePaths` task](docs/sdk-modules/wine.md#converttowinepaths-task) converts an item when MSBuild reads the metadata named by `OnlyIfMetadata` as true, such as `yes`, where it skipped the item.
- `bv release` fails when the remote rejects the [push of its commits](docs/tool-commands/release.md#the-release-tag), where it used to go on as if the push had succeeded.
- `bv release` reports a failed fetch or [push](docs/tool-commands/release.md#the-release-tag) as one error line naming the release remote, not as an unhandled exception.
- When a `PackageVersion` item versions a package Buildvana SDK injects, the reference [is an ordinary `PackageReference`](docs/sdk-modules/standard-analyzers.md#package-references), where NuGet rejected the item with NU1009.

### Known problems introduced by this release

- When no file changes before the build, [the release commit](docs/tool-commands/release.md#the-release-commit) is empty, which a `pre-receive` hook of a self-hosted Git server may reject.
- When no file changes before the build, [the release commit](docs/tool-commands/release.md#the-release-commit) is empty, which a `pre-receive` hook of a self-hosted Git host may reject.

## [1.1.10](https://github.com/Tenacom/Buildvana/releases/tag/1.1.10) (2026-04-27)

Expand Down
24 changes: 20 additions & 4 deletions buildvana.example.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,15 @@
// URI of the JSON schema describing this file. Pin the bv version you use.
"$schema": "https://raw.githubusercontent.com/Tenacom/Buildvana/main/schemas/buildvana.schema.json",

// The repository that releases go to.
"repository": {
// URL of the repository that releases go to. Required by bv release.
"url": "https://github.com/Tenacom/Buildvana",

// Kind of Git host of the repository.
"host": "auto",
},

// Configuration for the bv release workflow.
"release": {
// Anchored regular expressions matching public-release branches.
Expand All @@ -31,6 +40,10 @@

// Whether self-references are updated (dogfooding) during a release.
"dogfood": true,

// Whether a release tags and pushes on an unknown Git host, without a
// release page.
"allowUnknownHost": false,
},

// Configuration for version computation.
Expand Down Expand Up @@ -126,10 +139,13 @@
},
},

// Configuration for GitHub integration.
"github": {
// Name of the environment variable that holds the GitHub access token.
"tokenEnv": "GITHUB_TOKEN",
// Configuration for each kind of Git host.
"hosts": {
// Configuration for the GitHub host.
"github": {
// Name of the environment variable that holds the GitHub access token.
"tokenEnv": "GITHUB_TOKEN",
},
},

// Configuration for Git-related behavior.
Expand Down
10 changes: 1 addition & 9 deletions buildvana.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -73,15 +73,7 @@
},
},

"github": {
// Also the default. The release workflow points it at a PAT that can push
// to a protected branch; the build workflow leaves it at the automatic
// token, which pull requests from forks also get.
"tokenEnv": "GITHUB_TOKEN",
},

// No "git": automated commits use the CI bot identity supplied by the
// server adapter.
// No "git": automated commits use the bot identity of the CI platform.

"dependencies": {
// No "scopes": the built-in defaults are the ones this repository wants.
Expand Down
21 changes: 14 additions & 7 deletions buildvana.next.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@
// buildvana.next.jsonc, main: the version it describes does not exist yet.
"$schema": "https://raw.githubusercontent.com/Tenacom/Buildvana/main/schemas/buildvana.schema.json",

"repository": {
"url": "https://github.com/Tenacom/Buildvana",

// No "host": the default, "auto", recognizes github.com.
},

"release": {
"branches": ["^main$", "^v\\d+\\.\\d+$"],

Expand Down Expand Up @@ -73,15 +79,16 @@
},
},

"github": {
// Also the default. The release workflow points it at a PAT that can push
// to a protected branch; the build workflow leaves it at the automatic
// token, which pull requests from forks also get.
"tokenEnv": "GITHUB_TOKEN",
"hosts": {
"github": {
// Also the default. The release workflow points it at a PAT that can
// push to a protected branch; the build workflow leaves it at the
// automatic token, which pull requests from forks also get.
"tokenEnv": "GITHUB_TOKEN",
},
},

// No "git": automated commits use the CI bot identity supplied by the
// server adapter.
// No "git": automated commits use the bot identity of the CI platform.

"dependencies": {
// No "scopes": the built-in defaults are the ones this repository wants.
Expand Down
1 change: 1 addition & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ Every page of the Buildvana user documentation is listed here, in one group per

- [Build pipeline](tool-commands/build-pipeline.md): `bv clean`, `bv restore`, `bv build`, `bv test`, and `bv pack`, the arguments all but `bv clean` forward to `dotnet`, and the build configuration.
- [Dependency management](tool-commands/dependencies.md): `bv dependencies`, its subcommands, its update policies, and the transitive overrides it writes.
- [Info](tool-commands/info.md): the report of `bv info`, from the CI platform to the identity `bv release` would commit with.
- [Release](tool-commands/release.md): what `bv release` checks, what it does step by step, and what it undoes when a step fails.
- [Self-update](tool-commands/self-update.md): the version `bv self-update` picks, the pins it moves, the summary it prints, and when it refuses to run.
- [Version](tool-commands/version.md): the report of `bv version show`, and the version spec change `bv version advance` applies.
3 changes: 2 additions & 1 deletion docs/command-line.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ A command line holds a command, the arguments and options of the command, and th
| `dependencies show` | `dependencies`, `deps show`, `deps` | yes | [Dependency management](tool-commands/dependencies.md) |
| `dependencies update` | `deps update` | yes | [Dependency management](tool-commands/dependencies.md) |
| `dependencies prune` | `deps prune` | yes | [Dependency management](tool-commands/dependencies.md) |
| `info` | | no | [Info](tool-commands/info.md) |
| `release` | | yes | [Release](tool-commands/release.md) |
| `self-update` | | no | [Self-update](tool-commands/self-update.md) |
| `version show` | `version` | no | [Version](tool-commands/version.md) |
Expand Down Expand Up @@ -158,7 +159,7 @@ A message logged by a task and one printed by `bv` therefore appear together.

`bv` writes its narration to standard error, and keeps standard output for the result of a command.
The narration is the leveled lines, the activity lines, and the startup logo.
The result is the report of `bv version show`, the report of `bv dependencies`, or the summary of `bv self-update`.
The result is the report of `bv version show`, `bv info`, or `bv dependencies`, or the summary of `bv self-update`.
A child `dotnet` process is streamed live, each of its streams to the same stream of `bv`.
The output of `dotnet` is the result of a build pipeline command.

Expand Down
Loading
Loading