Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
3b37da6
Move the HTTP request handling of GitHubApiClient into HostApiClient
rdeago Oct 23, 2026
9f2d8ba
Wrap the arguments of GitHubApiClient.GetRepositoryAsync
rdeago Oct 23, 2026
7495753
Stop adding the credentials of a HostApiClient to every request
rdeago Oct 23, 2026
258e89a
Add GitLabApiClient for the releases and generic packages of GitLab
rdeago Oct 23, 2026
b0a70d6
Add hosts.gitlab.tokenEnv and the gitlab value of repository.host
rdeago Oct 23, 2026
868c87c
Add GitLabApiClient.GetCurrentUserAsync and GetProjectMemberAsync
rdeago Oct 23, 2026
b8b9f45
Move the path check of GitHubRepositoryUrls.File to RepositoryFilePath
rdeago Oct 24, 2026
dc8af13
Publish releases on GitLab through GitLabHost and GitLabReleasePublisher
rdeago Oct 24, 2026
8fb7ca2
Check release assets before the push, not after the NuGet push
rdeago Oct 24, 2026
c0565b1
Document GitLab releases in release.md and the changelog
rdeago Oct 24, 2026
f7d6b7e
Refuse two GitHub release assets with the same file name before the push
rdeago Oct 24, 2026
3f798e7
Rename "Git server" to "Git host" in documentation
rdeago Oct 24, 2026
30c02a0
Document the SourceLinkGitHubHost item GitHub Enterprise Server needs
rdeago Oct 24, 2026
37457ab
Stop taking a .ghe.com host for a GitHub Enterprise Server
rdeago Oct 24, 2026
6dfbffc
Stop documenting every host but github.com as a GitHub Enterprise Server
rdeago Oct 25, 2026
a130a54
Split the Untested status of introduction.md into supported and unknown
rdeago Oct 25, 2026
f42fc4a
Use a local for harness.ArtifactsPath in `bv release` tests
rdeago Oct 25, 2026
8063164
Stop leaving the generic package behind when a release deletion fails
rdeago Oct 25, 2026
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
7 changes: 5 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,9 @@ The patch number restarted from 1, below the 2.0.x versions already published.
- `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.
- `release.allowUnknownHost` lets `bv release` [tag and push without a release page](docs/tool-commands/release.md#publishing-on-an-unknown-host) on a Git host `bv` does not know.
- `bv release` [publishes on GitLab](docs/tool-commands/release.md#publishing-on-gitlab), with the assets in the generic package registry of the project, and `hosts.gitlab.tokenEnv` names the token variable.
- `bv release` takes a host whose name ends in `.ghe.com` for [GitHub Enterprise Cloud with data residency](docs/tool-commands/release.md#publishing-on-github), whose API is at `https://api.<host>`.
- [`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
Expand Down Expand Up @@ -95,6 +97,7 @@ The patch number restarted from 1, below the 2.0.x versions already published.
- **BREAKING CHANGE**: A file-based app is a [project type of its own](docs/internal-use-properties.md#project-type), `BV_IsFileBasedAppProject`, so `BV_IsExeProject` is `false` for it.
- **BREAKING CHANGE**: `bv` no longer reads `.config/dotnet-tools.json`, and stops with an error that [names the move](docs/directory-structure.md#migration-from-configdotnet-toolsjson) when the home directory holds one.
- The [`ReleaseAssetList` module](docs/sdk-modules/release-asset-list.md#generatereleaseassetlist-property) writes no release asset list for a file-based app.
- On GitHub, `bv release` refuses [two assets with the same file name](docs/tool-commands/release.md#publishing-on-github) before it pushes the commits.
- A [`notice:` level](docs/command-line.md#verbosity), shown from `minimal` verbosity up, sits between `warning:` and `info:`.
- The tasks of Buildvana SDK show each [message level](docs/command-line.md#verbosity) from the same verbosity as `bv`.
- `bv` runs from any directory under the [home directory](docs/command-line.md#home-directory), which it finds as Buildvana SDK does and makes the current directory.
Expand All @@ -110,7 +113,7 @@ The patch number restarted from 1, below the 2.0.x versions already published.
- `bv release` runs the [build pipeline](docs/tool-commands/release.md#the-steps) once, from `clean` through `pack`, after the release commit, and no longer runs `clean` through `test` before it.
- [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` reaches the [GitHub API of the host of the repository](docs/tool-commands/release.md#publishing-on-github), `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 Down
6 changes: 6 additions & 0 deletions buildvana.example.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,12 @@
// Name of the environment variable that holds the GitHub access token.
"tokenEnv": "GITHUB_TOKEN",
},

// Configuration for the GitLab host.
"gitlab": {
// Name of the environment variable that holds the GitLab access token.
"tokenEnv": "GITLAB_TOKEN",
},
},

// Configuration for Git-related behavior.
Expand Down
3 changes: 2 additions & 1 deletion docs/configuration-file.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ A setting whose member names are data, such as `dependencies.policies` and `dotn
| ------------------------------------- | ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `$schema` | none | The URL of the JSON schema, whose version segment [`bv self-update`](tool-commands/self-update.md#what-the-command-updates) moves with the other pins. |
| `repository.url` | none | The URL of the repository that [`bv release`](tool-commands/release.md#preconditions) publishes to, and without it `bv release` fails. |
| `repository.host` | `auto` | The [kind of Git host](tool-commands/release.md#preconditions) of the repository: `auto` or `github`. |
| `repository.host` | `auto` | The [kind of Git host](tool-commands/release.md#preconditions) of the repository: `auto`, `github`, or `gitlab`. |
| `release.branches` | none | The regular expressions of the branches that produce [public releases](sdk-modules/versioning.md#releasebranches-setting), and by default no branch does. |
| `release.configuration` | `dotnet.configuration` | The [build configuration of `bv release`](tool-commands/release.md#the-build-configuration). |
| `release.checkPublicApi` | `true` | Whether the public API files take part in [the version spec change](tool-commands/release.md#the-version-spec-change) of `bv release`. |
Expand Down Expand Up @@ -114,6 +114,7 @@ A setting whose member names are data, such as `dependencies.policies` and `dotn
| `nuget.feeds.release.source` | none | The URL of the feed that [stable versions](tool-commands/release.md#publishing) are pushed to. |
| `nuget.feeds.release.apiKeyEnv` | none | The environment variable holding the [API key](environment-variables.md#secret-carrying-variables-named-by-the-configuration-file) of the release feed. |
| `hosts.github.tokenEnv` | `GITHUB_TOKEN` | The environment variable holding the [GitHub token](environment-variables.md#secret-carrying-variables-named-by-the-configuration-file) of the release operations. |
| `hosts.gitlab.tokenEnv` | `GITLAB_TOKEN` | The environment variable holding the [GitLab token](environment-variables.md#secret-carrying-variables-named-by-the-configuration-file) of the release operations. |
| `git.identity.name` | none | The name of the [author of the commits of `bv release`](tool-commands/release.md#preconditions). |
| `git.identity.email` | none | The email address of the [author of the commits of `bv release`](tool-commands/release.md#preconditions). |
| `dependencies.scopes.netsdk` | `major` | The [update policy](tool-commands/dependencies.md#update-policies) of the `netsdk` scope, the .NET SDK version in `global.json`. |
Expand Down
11 changes: 8 additions & 3 deletions docs/environment-variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,10 @@ The variable matters only together with `GITLAB_CI`, which is what selects the G

### `CI_SERVER_URL`

GitLab CI sets it to the URL of the GitLab instance that runs the job.
`bv` reads it as the server of the GitLab CI platform.
`bv` knows no GitLab host, so the variable has no effect on a release.
GitLab CI sets it to the URL of the GitLab instance that runs the job, such as `https://gitlab.com`.
When `repository.url` names a repository on the host of that URL, `bv release` takes the host for GitLab.
A self-managed GitLab instance is recognized this way on its own runners.
The variable matters only together with `GITLAB_CI`.

### `DOTNET_CLI_CONSOLE_USE_DEFAULT_ENCODING`

Expand Down Expand Up @@ -163,6 +164,10 @@ The [configuration file](configuration-file.md) names the environment variable t
- `hosts.github.tokenEnv` names the variable holding the GitHub token of the release operations.
The token is also the password of the fetch and the push of `bv release`.
The default name is `GITHUB_TOKEN`.
- `hosts.gitlab.tokenEnv` names the variable holding the GitLab token of the release operations.
The token is also the password of the fetch and the push of `bv release`.
The default name is `GITLAB_TOKEN`.
The name `CI_JOB_TOKEN` selects the job token of GitLab CI, as [Publishing on GitLab](tool-commands/release.md#publishing-on-gitlab) says.
- `nuget.feeds.release.apiKeyEnv` and `nuget.feeds.prerelease.apiKeyEnv` name the variables holding the API keys of the NuGet push feeds.

---
Expand Down
2 changes: 1 addition & 1 deletion docs/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ Every command below runs in the directory you clone into, which becomes the [hom

## Create the repository

Create an empty repository on your Git server, clone it, and enter the directory:
Create an empty repository on your Git host, clone it, and enter the directory:

```shell
git clone <url> MyProduct
Expand Down
68 changes: 36 additions & 32 deletions docs/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ This page says what Buildvana is made of, what it does for a project, and what i
- [Operating systems](#operating-systems)
- [Project types](#project-types)
- [Programming languages](#programming-languages)
- [Git servers](#git-servers)
- [Git hosts](#git-hosts)
- [CI platforms](#ci-platforms)
- [Toolchain](#toolchain)

Expand Down Expand Up @@ -54,29 +54,29 @@ Each table below states a status for every item.

### Operating systems

| Operating system | Status |
| ---------------- | --------- |
| Windows | Supported |
| Linux | Supported |
| macOS | Untested |
| Operating system | Status |
| ---------------- | -------------- |
| Windows | Supported |
| Linux | Supported |
| macOS | ??? (untested) |

### Project types

| Project type | Status |
| -------------------------------------------------------- | ----------- |
| Multi-platform and cross-platform projects | Supported |
| Libraries | Supported |
| Console apps | Supported |
| File-based apps | Supported |
| Windows Forms | Supported |
| ASP.NET | Supported |
| Projects using the `Microsoft.Build.NoTargets` SDK | Supported |
| [Avalonia UI](https://avaloniaui.net) | Supported |
| WPF | Untested |
| [UNO Platform](https://platform.uno) | Untested |
| .NET MAUI | Untested |
| Legacy projects, with no `Sdk` attribute | Unsupported |
| Projects whose SDK does not layer on `Microsoft.NET.Sdk` | Unsupported |
| Project type | Status |
| -------------------------------------------------------- | -------------- |
| Multi-platform and cross-platform projects | Supported |
| Libraries | Supported |
| Console apps | Supported |
| File-based apps | Supported |
| Windows Forms | Supported |
| ASP.NET | Supported |
| Projects using the `Microsoft.Build.NoTargets` SDK | Supported |
| [Avalonia UI](https://avaloniaui.net) | Supported |
| WPF | ??? (untested) |
| [UNO Platform](https://platform.uno) | ??? (untested) |
| .NET MAUI | ??? (untested) |
| Legacy projects, with no `Sdk` attribute | Unsupported |
| Projects whose SDK does not layer on `Microsoft.NET.Sdk` | Unsupported |

### Programming languages

Expand All @@ -87,12 +87,16 @@ Each table below states a status for every item.
| F# | Unsupported |
| Other languages | Unsupported |

### Git servers
### Git hosts

| Server | Status | Limits |
| ---------------------------- | --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| GitHub and GitHub Enterprise | Supported | |
| Other servers | Supported with limits | Buildvana SDK does not configure SourceLink.<br>`bv release` creates no release page, and runs only with [`release.allowUnknownHost`](tool-commands/release.md#publishing). |
| Git host | Status | Limits |
| ------------------------------------------- | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| GitHub | Supported | |
| GitHub Enterprise Server | Supported (untested) | [SourceLink](https://github.com/dotnet/sourcelink) needs a `SourceLinkGitHubHost` item. |
| GitHub Enterprise Cloud with data residency | Supported (untested) | SourceLink needs a `SourceLinkGitHubHost` item, with `ContentUrl` set to `https://raw.<host>`. |
| GitLab | Supported (untested) | |
| Self-managed GitLab | Supported (untested) | SourceLink needs a `SourceLinkGitLabHost` item. |
| Other Git hosts | Supported with limits | Buildvana SDK does not configure SourceLink.<br>`bv release` creates no release page, and runs only with [`release.allowUnknownHost`](tool-commands/release.md#publishing-on-an-unknown-host). |

### CI platforms

Expand All @@ -101,12 +105,12 @@ Generic CI is any other runner that the .NET CLI recognizes as one.
Local is a machine where `bv` recognizes no CI runner, such as a developer machine.
Every CI platform runs every command, `bv release` included.

| CI platform | Status |
| ---------------------------------------------------------------------- | --------- |
| GitHub Actions | Supported |
| GitLab CI | Supported |
| [Generic CI](environment-variables.md#variables-that-mark-a-ci-runner) | Supported |
| Local | Supported |
| CI platform | Status |
| ---------------------------------------------------------------------- | -------------------- |
| GitHub Actions | Supported |
| GitLab CI | Supported (untested) |
| [Generic CI](environment-variables.md#variables-that-mark-a-ci-runner) | Supported (untested) |
| Local | Supported (untested) |

### Toolchain

Expand Down
Loading
Loading