diff --git a/Icod.TermInfo-Post-1.0-Development-Roadmap.md b/Icod.TermInfo-Post-1.0-Development-Roadmap.md index dc6e0f9..e7a1648 100644 --- a/Icod.TermInfo-Post-1.0-Development-Roadmap.md +++ b/Icod.TermInfo-Post-1.0-Development-Roadmap.md @@ -7,11 +7,11 @@ **Language:** C# 13 **Target frameworks:** `net8.0`; `net9.0`; `net10.0` **Frozen runtime contract:** `1.0.0` -**Current release version:** `1.1.1` -**Current development version:** `1.2.0-Alpha-7` -**Next development line:** `1.2.0` -**Status:** C07 implementation candidate — build/test/package validation required -**Current tranche:** C07 — Round-trip and differential validation +**Current release version:** `1.2.0` +**Current development version:** `1.2.0` +**Next development line:** `1.3.0` +**Status:** 1.2.0 release closure +**Current tranche:** Final 1.2.0 release closure **Primary objective:** Extend the terminfo ecosystem beyond runtime capability acquisition without destabilizing the frozen 1.0 runtime contract. --- @@ -781,8 +781,13 @@ Release closure SHALL: - pack and structurally validate all three NuGet and symbol packages; - execute fresh runtime, Source, and Compiler package consumers on all three targets; - verify the one-way dependency graph; -- publish the exact validated artifacts to NuGet.org and GitHub Packages; -- tag the exact validated/published commit as `v1.2.0`. +- pass the non-publishing Release validation workflow on the exact `main` commit; +- create and push immutable tag `v1.2.0` for that validated commit; +- require the tag workflow to repeat the complete Release gate on the tagged + commit before publishing the validated artifacts to NuGet.org and GitHub + Packages and creating the GitHub Release. + +**Release audit:** [`docs/1.2.0-RELEASE-AUDIT.md`](docs/1.2.0-RELEASE-AUDIT.md) --- diff --git a/Icod.TermInfo.Compiler/Icod.TermInfo.Compiler.csproj b/Icod.TermInfo.Compiler/Icod.TermInfo.Compiler.csproj index d862108..9ad0713 100644 --- a/Icod.TermInfo.Compiler/Icod.TermInfo.Compiler.csproj +++ b/Icod.TermInfo.Compiler/Icod.TermInfo.Compiler.csproj @@ -12,17 +12,17 @@ Icod.TermInfo.Compiler Icod.TermInfo.Compiler Debug;Release;Staging - 1.2.0-Alpha-7 + 1.2.0 1.0.0.0 - 1.2.0-Alpha-7 + 1.2.0 Icod.TermInfo.Compiler Icod.TermInfo.Compiler Timothy J. Bruce Managed deterministic terminfo compiler for Icod.TermInfo. The 1.2 line compiles .ti source or immutable TerminalDescription values and can publish explicit conventional terminfo directory layouts without native ncurses dependencies. - 1.2.0-Alpha-7 implements C07: deterministic round-trip and differential validation against the checked-in T29 ncurses/tic corpus, including source compilation, binary parsing, and database-provider consumption. + 1.2.0 completes C01-C07: deterministic legacy/wide and extended compiled-entry writing, Source compilation, conventional database-layout publication, and round-trip/differential validation against the checked-in ncurses/tic corpus. README.md icon.png https://github.com/uniblab/Icod.TermInfo diff --git a/Icod.TermInfo.Compiler/README.md b/Icod.TermInfo.Compiler/README.md index 26e93ec..85d8ca9 100644 --- a/Icod.TermInfo.Compiler/README.md +++ b/Icod.TermInfo.Compiler/README.md @@ -13,10 +13,10 @@ ncurses/`tic` differential validation. ## Install -For the C07 development package: +For the 1.2.0 release: ```text -dotnet add package Icod.TermInfo.Compiler --version 1.2.0-Alpha-7 +dotnet add package Icod.TermInfo.Compiler --version 1.2.0 ``` The package targets `net8.0`, `net9.0`, and `net10.0` and depends on the matching diff --git a/Icod.TermInfo.Source/Icod.TermInfo.Source.csproj b/Icod.TermInfo.Source/Icod.TermInfo.Source.csproj index ef99714..e98b890 100644 --- a/Icod.TermInfo.Source/Icod.TermInfo.Source.csproj +++ b/Icod.TermInfo.Source/Icod.TermInfo.Source.csproj @@ -12,17 +12,17 @@ Icod.TermInfo.Source Icod.TermInfo.Source Debug;Release;Staging - 1.2.0-Alpha-7 + 1.2.0 1.0.0.0 - 1.2.0-Alpha-7 + 1.2.0 Icod.TermInfo.Source Icod.TermInfo.Source Timothy J. Bruce Managed terminfo source-language support for Icod.TermInfo. The 1.1 line parses and resolves .ti source into the stable TerminalDescription model without enlarging the runtime Icod.TermInfo package. - 1.2.0-Alpha-7 coordinates Icod.TermInfo.Source with C07 while preserving the frozen 1.1 source-language public API, semantics, and 1.0.0.0 assembly identity. + 1.2.0 coordinates Icod.TermInfo.Source with the completed 1.2 compiler release while preserving the frozen 1.1 source-language public API, semantics, and 1.0.0.0 assembly identity. README.md icon.png https://github.com/uniblab/Icod.TermInfo diff --git a/Icod.TermInfo.Source/README.md b/Icod.TermInfo.Source/README.md index 6eb0685..e45ed3b 100644 --- a/Icod.TermInfo.Source/README.md +++ b/Icod.TermInfo.Source/README.md @@ -9,16 +9,16 @@ values continue to reference `Icod.TermInfo` alone. ## Install -For the 1.1.1 release: +For the 1.2.0 release: ```text -dotnet add package Icod.TermInfo.Source --version 1.1.1 +dotnet add package Icod.TermInfo.Source --version 1.2.0 ``` The package depends on the matching `Icod.TermInfo` version and targets `net8.0`, `net9.0`, and `net10.0`. -Version 1.1.1 is a maintenance release and does not change the 1.1 source-language public API or semantics. +Version 1.2.0 coordinates Source with the 1.2 compiler release and does not change the frozen 1.1 source-language public API or semantics. ## What the 1.1 line provides diff --git a/Icod.TermInfo.csproj b/Icod.TermInfo.csproj index 03d0ef7..4af5060 100644 --- a/Icod.TermInfo.csproj +++ b/Icod.TermInfo.csproj @@ -12,16 +12,16 @@ Icod.TermInfo Icod.TermInfo Debug;Release;Staging - 1.2.0-Alpha-7 + 1.2.0 1.0.0.0 - 1.2.0-Alpha-7 + 1.2.0 Icod.TermInfo Icod.TermInfo Timothy J. Bruce Managed, dependency-free .NET terminfo library for terminal capability metadata, compiled terminfo parsing and database discovery, ANSI/DEC/xterm and Windows profiles, parameter expansion, color semantics, and padding-aware output. - 1.2.0-Alpha-7 advances the coordinated 1.2 compiler line to C07 while preserving the frozen Icod.TermInfo runtime public contract, dependency-free runtime package, and 1.0.0.0 assembly identity. + 1.2.0 coordinates the completed 1.2 Source and Compiler package family while preserving the frozen Icod.TermInfo runtime public contract, dependency-free runtime package, and 1.0.0.0 assembly identity. README.md icon.png https://github.com/uniblab/Icod.TermInfo diff --git a/README.md b/README.md index e113d8a..5538bc8 100644 --- a/README.md +++ b/README.md @@ -2,30 +2,43 @@ `Icod.TermInfo` is a managed, dependency-free .NET implementation of the low-level terminal-capability model traditionally supplied by `libtinfo`. -Version 1.1.1 is the current maintenance release of the 1.1 line. It preserves the frozen 1.0 runtime contract and the 1.1 source-language feature set provided by the optional `Icod.TermInfo.Source` package. +Version 1.2.0 is the current coordinated release. It preserves the frozen 1.0 +runtime contract and frozen 1.1 Source contract while adding the optional +`Icod.TermInfo.Compiler` package. -The published 1.1.1 packages target `net8.0` and `net10.0`. Beginning with the 1.2 -development line, the supported consumer matrix expands to `net8.0`, `net9.0`, -and `net10.0`; the packages use C# 13, contain no native ncurses/terminfo -payload, and are intended to run on Windows, Linux, and macOS. +The published 1.2.0 package family targets `net8.0`, `net9.0`, and `net10.0`; +the packages use C# 13, contain no native ncurses/terminfo payload, and are +intended to run on Windows, Linux, and macOS. ## Install -For the 1.1.1 release, runtime-only consumers use: +For the 1.2.0 release, runtime-only consumers use: ```text -dotnet add package Icod.TermInfo --version 1.1.1 +dotnet add package Icod.TermInfo --version 1.2.0 ``` Applications which need terminfo source-language support use: ```text -dotnet add package Icod.TermInfo.Source --version 1.1.1 +dotnet add package Icod.TermInfo.Source --version 1.2.0 ``` -`Icod.TermInfo.Source` depends on the matching `Icod.TermInfo` package. Applications which only load compiled terminfo or consume `TerminalDescription` values continue to reference `Icod.TermInfo` alone. +Applications which compile terminfo source or write conventional compiled +terminfo databases use: -The same validated package artifacts are intended for NuGet.org and GitHub Packages. Repository development can reference the corresponding project directly. +```text +dotnet add package Icod.TermInfo.Compiler --version 1.2.0 +``` + +`Icod.TermInfo.Source` depends on the matching `Icod.TermInfo` package. +`Icod.TermInfo.Compiler` depends on the matching Runtime and Source packages. +Applications which only load compiled terminfo or consume `TerminalDescription` +values continue to reference `Icod.TermInfo` alone. + +The same validated package artifacts are published to NuGet.org and GitHub +Packages. Release closure and tag-publication requirements are recorded in +`docs/1.2.0-RELEASE-AUDIT.md`. ## 1.x stability contract @@ -80,6 +93,26 @@ The optional `Icod.TermInfo.Source` package adds the source-language path withou The source package is optional. Compiled-database users and higher-level terminal consumers do not acquire it transitively through `Icod.TermInfo`. +## What 1.2 adds + +The optional `Icod.TermInfo.Compiler` package completes the managed inverse of +the existing compiled-term acquisition path: + +- deterministic legacy `0432` and wide `01036` compiled-entry writing; +- standard and ncurses extended-capability emission; +- automatic or explicit format selection with strict representation validation; +- direct compilation from resolved `TerminalDescription` values; +- `.ti` source compilation through the existing Source parser and inheritance + resolver, preserving Source diagnostics; +- controlled publication into explicit conventional terminfo directory layouts; +- safe path derivation, overwrite policy, and failure-resistant database writes; +- semantic source → resolve → write → parse round-trip validation; +- byte-for-byte determinism checks and pinned ncurses/`tic` differential corpus + coverage. + +Compiler remains opt-in. The Runtime package remains dependency-free, Source +depends only on Runtime, and Compiler depends on Runtime and Source. + ## Getting started Terminal resolution remains explicit and conservative. A normal application can diff --git a/docs/1.2.0-RELEASE-AUDIT.md b/docs/1.2.0-RELEASE-AUDIT.md new file mode 100644 index 0000000..1b6b176 --- /dev/null +++ b/docs/1.2.0-RELEASE-AUDIT.md @@ -0,0 +1,195 @@ +# Icod.TermInfo 1.2.0 Release Audit + +**Release version:** `1.2.0` +**Runtime assembly version:** `1.0.0.0` +**Source assembly version:** `1.0.0.0` +**Compiler assembly version:** `1.0.0.0` +**Status:** Final release candidate — tag publication is the remaining sign-off + +## Purpose + +This document is the final release gate for the coordinated `Icod.TermInfo` +1.2.0 package family. C01-C07 are complete; release closure is not another +compiler feature tranche. It freezes the final package/API/documentation +contract and records the checks which must pass before tag `v1.2.0` publishes +the release. + +The publication boundary is the immutable release tag. Ordinary pushes to +`main` validate release candidates but do not publish packages. + +## Release scope + +The runtime package remains the stable, dependency-free terminfo implementation +established in 1.0. Its public contract is not enlarged by the compiler work. + +`Icod.TermInfo.Source` remains the optional 1.1 source-language layer and keeps +its frozen 1.1 public API. + +`Icod.TermInfo.Compiler` completes the managed compilation path: + +```text +.ti source + | + v +Icod.TermInfo.Source parser / resolver + | + v +TerminalDescription + | + v +Icod.TermInfo.Compiler + | + +--> deterministic compiled entry bytes + | + +--> explicit conventional terminfo database layout +``` + +The 1.2 implementation includes: + +- deterministic legacy `0432` compiled-entry writing; +- wide `01036` numeric emission; +- standard and ncurses extended-capability emission; +- automatic and explicit format selection; +- strict Latin-1, sentinel, offset, count, and overflow validation; +- source compilation through the existing Source parser and resolver; +- preservation of Source diagnostics and source locations; +- explicit conventional database-layout publication; +- traversal-resistant destination derivation and explicit overwrite policy; +- failure-resistant temporary-file publication; +- semantic source → resolve → write → parse round-trip validation; +- byte-for-byte determinism checks; +- pinned ncurses/`tic` differential corpus coverage. + +Command-line `tic`, `infocmp`, and `toe` projects remain later work. + +## API and assembly contract + +The final release SHALL preserve all of these conditions: + +- `docs/1.0.0-PUBLIC-API-BASELINE.txt` remains the exact Runtime public API + contract; +- `docs/1.1.0-SOURCE-PUBLIC-API-BASELINE.txt` remains the exact Source public + API contract; +- `docs/1.2.0-COMPILER-PUBLIC-API-BASELINE.txt` remains the reviewed Compiler + public API contract; +- Runtime, Source, and Compiler public API manifests remain identical across + `net8.0`, `net9.0`, and `net10.0`; +- all three assemblies remain unsigned; +- all three assemblies retain assembly version `1.0.0.0`. + +The package version advances to `1.2.0`; the assembly versions do not. This is +intentional and preserves the stable 1.x assembly-identity policy. + +No API baseline may be regenerated merely to silence a release check. + +## Package contract + +All three package projects SHALL publish version `1.2.0`. + +`Icod.TermInfo` SHALL: + +- remain dependency-free at the NuGet runtime level; +- contain managed and XML documentation assets for all three supported TFMs; +- retain portable symbols, Source Link, README, icon, license, and repository + metadata. + +`Icod.TermInfo.Source` SHALL: + +- depend one-way on matching `Icod.TermInfo` version `1.2.0`; +- preserve the frozen Source 1.1 public API and semantics; +- contain managed/XML assets and portable symbols for all three supported TFMs. + +`Icod.TermInfo.Compiler` SHALL: + +- depend on matching Runtime and Source version `1.2.0`; +- preserve the reviewed Compiler API baseline; +- contain managed/XML assets and portable symbols for all three supported TFMs. + +The dependency graph remains: + +```text +Compiler -> Source -> Runtime +Compiler ------------> Runtime +``` + +No dependency may point from Runtime to Source/Compiler or from Source to +Compiler. + +## Required final validation + +Before tag creation, the release-finalization commit SHALL pass the complete +`main` validation workflow on Windows, Linux, and macOS. + +Equivalent local validation is: + +```text +dotnet restore Icod.TermInfo.sln +dotnet build Icod.TermInfo.sln -c Release +dotnet test Icod.TermInfo.sln -c Release +dotnet pack Icod.TermInfo.csproj -c Release --output artifacts +dotnet pack Icod.TermInfo.Source/Icod.TermInfo.Source.csproj -c Release --output artifacts +dotnet pack Icod.TermInfo.Compiler/Icod.TermInfo.Compiler.csproj -c Release --output artifacts +``` + +Then run the coordinated verifier with the same Release outputs: + +```text +.github\scripts\verify-release-package.cmd artifacts Release +bash .github/scripts/verify-release-package.sh artifacts Release +``` + +The verifier SHALL continue to cover: + +- generated capability metadata; +- Runtime, Source, and Compiler public API baselines; +- cross-target API equivalence for all three assemblies; +- Runtime and Compiler package structure and metadata; +- coordinated package versions and dependency closure; +- Runtime, Source, and Compiler package-reference-only smoke consumers; +- the repository's deterministic non-interactive sample path. + +Normal CI remains independent of a host ncurses installation. + +## Tag-based publication sign-off + +`.github/workflows/release.yaml` is the sole automated publication workflow. + +Tag `v1.2.0` SHALL: + +1. identify the exact release-finalization commit which already passed `main` + validation; +2. identify a commit contained in `main`; +3. match all three projects' `Version` and `PackageVersion` values exactly; +4. trigger a fresh Windows/Linux/macOS Release validation matrix; +5. publish only the canonical package artifacts produced by that successful tag + validation; +6. publish all three `.nupkg` files to NuGet.org through trusted publishing; +7. publish the same three `.nupkg` files to GitHub Packages; +8. create a GitHub Release containing all three `.nupkg` files, all three + `.snupkg` files, and `SHA256SUMS.txt`. + +Before pushing the tag: + +- NuGet.org trusted publishing must authorize repository + `uniblab/Icod.TermInfo`, workflow `release.yaml`, environment `Release`, and + package IDs `Icod.TermInfo`, `Icod.TermInfo.Source`, and + `Icod.TermInfo.Compiler`; +- repository secret `NUGET_USER` must identify the intended NuGet.org account; +- the `Release` environment must permit the intended `v*` tag; +- GitHub Packages publication must retain `packages: write`. + +## Final sign-off + +The release is complete only when: + +- the tag workflow succeeds; +- all three version `1.2.0` packages are visible on NuGet.org; +- all three version `1.2.0` packages are visible in GitHub Packages; +- the GitHub Release for `v1.2.0` exists with six package artifacts and + `SHA256SUMS.txt`; +- fresh Runtime, Source, and Compiler consumers can restore the final version; +- `v1.2.0` still identifies the exact validated release commit. + +Do not move or recreate a published release tag. Any source, documentation, +metadata, API-baseline, or package-content change after release requires a new +version, a new validated commit, and a new tag. diff --git a/docs/RELEASING.md b/docs/RELEASING.md index 323dff9..b57a5db 100644 --- a/docs/RELEASING.md +++ b/docs/RELEASING.md @@ -12,9 +12,11 @@ This document describes the current validation and publication procedure for the - Runtime, Source, and Compiler retain 1.x assembly version `1.0.0.0` and remain unsigned. - Supported consumer targets for the 1.2 line are `net8.0`, `net9.0`, and `net10.0`. -- A final release tag must be exactly `v`. -- Release validation must pass on Windows, Linux, and macOS before a final tag is - created. +- A release tag must be exactly `v` and is the only repository + event which may publish packages. +- Release validation must pass on Windows, Linux, and macOS on `main` before a + release tag is created. The tag workflow repeats the Release gate on the exact + tagged commit before publication. - Release validation must pass the frozen runtime API baseline, the reviewed Source and Compiler API baselines, and net8/net9/net10 API-equivalence gates. - Release builds treat missing public XML documentation as an error. @@ -27,8 +29,9 @@ This document describes the current validation and publication procedure for the - The six `.nupkg` / `.snupkg` artifacts produced for a version are immutable release artifacts. If package contents change, increment the version rather than replacing a published package. -- Publication is downstream of build/test/package validation. No package may be - pushed if any validation stage fails. +- Publication is downstream of tag/version validation and the complete + build/test/package gate. Pull requests and ordinary pushes to `main` must not + authenticate to or push to package registries. ## Repository CI @@ -82,21 +85,26 @@ the Release build/test matrix on: - `ubuntu-latest`; - `macos-latest`. -The Ubuntu matrix leg continues after the shared Release build/test steps and: +Each matrix leg packs all three package projects and runs the platform-appropriate +Release verifier. The Windows leg uploads the canonical six `.nupkg` / `.snupkg` +artifacts for seven days. -1. packs all three package projects into `artifacts`; -2. runs `.github/scripts/verify-release-package.sh artifacts Release`; -3. uploads the exact `.nupkg` and `.snupkg` files as workflow artifacts. +The main-branch workflow stops after validation and artifact upload. It has only +`contents: read` permission and never authenticates to or pushes to a package +registry. -There is no second checkout/restore/build/test package-validation job. The -deployment job waits for the complete three-OS matrix and then downloads the -artifact produced and verified by the Ubuntu leg. +### Release tags -After package validation succeeds, the `Release` deployment job downloads those -exact artifacts and publishes all three `.nupkg` files to NuGet.org and GitHub -Packages. The NuGet.org push uses trusted publishing/OIDC through `NuGet/login`; -GitHub Packages uses the repository `GITHUB_TOKEN`. Both pushes use -`--skip-duplicate`. +`.github/workflows/release.yaml` runs for pushed tags matching `v*`. Before the +release build, it requires the tagged commit to be contained in `main`, requires +Runtime, Source, and Compiler `Version` / `PackageVersion` values to match, and +requires the tag version to match that coordinated package version exactly. + +The tag workflow reruns the complete Release matrix on Windows, Linux, and macOS. +After all three legs pass, the canonical validated packages are published to +NuGet.org and GitHub Packages. Finally, the workflow creates a GitHub Release +containing all three package files, all three symbol packages, and a SHA-256 +checksum manifest. Prerelease package versions create GitHub prereleases. ## What the release verifier checks @@ -187,11 +195,16 @@ configuration names. They otherwise provide the same validation contract. ## Automated publication -The current `push-main.yaml` workflow watches only `main` and publishes only -after the complete Release matrix succeeds, including the Ubuntu-only -pack/verify/upload steps. Pull-request and development-branch pushes do not -publish packages. The deploy job consumes that validated matrix artifact rather -than repacking the repository. +`push-main.yaml` validates release candidates but never publishes them. +`release.yaml` is the sole automated publication workflow. A pushed `v*` tag +must identify a commit contained in `main`, and its version must exactly match +the coordinated Runtime, Source, and Compiler `Version` / `PackageVersion` +values. + +The tag workflow rebuilds, retests, repacks, and reverifies the tagged commit. +NuGet.org publication, GitHub Packages publication, and GitHub Release creation +all consume the canonical validated Actions artifact rather than repacking the +repository. Before merging or pushing a release-ready commit to `main`: @@ -199,7 +212,7 @@ Before merging or pushing a release-ready commit to `main`: all three package projects and that all six values match; 2. confirm all three assemblies still declare `AssemblyVersion` `1.0.0.0`; 3. ensure the NuGet.org trusted-publishing policy authorizes this repository, - `push-main.yaml`, the `Release` environment, and all three package IDs: + `release.yaml`, the `Release` environment, and all three package IDs: `Icod.TermInfo`, `Icod.TermInfo.Source`, and `Icod.TermInfo.Compiler`; 4. ensure the `NUGET_USER` repository secret identifies the intended NuGet.org account; @@ -207,8 +220,12 @@ Before merging or pushing a release-ready commit to `main`: 6. remember that a source/package change after validation creates a new release candidate and requires validation again. -For a final release, create tag `v` only for the exact commit -whose release validation and publication succeeded. +After the release-ready commit has passed the `main` Release workflow, create +and push tag `v` for that exact commit. Pushing the tag starts +publication; do not publish the packages manually first. + +If the `Release` environment restricts deployment branches or tags, configure +it to permit the intended `v*` release tags before the first tag-driven release. ## NuGet.org authentication @@ -236,7 +253,9 @@ After a final version is published: Packages; - confirm fresh Runtime, Source, and Compiler consumers can restore the final version; -- create/verify the exact final tag; +- verify the published version came from the expected immutable release tag; +- confirm the GitHub Release contains all six package artifacts plus + `SHA256SUMS.txt`; - treat subsequent public API or package-content changes as changes for the next version. diff --git a/tests/Icod.TermInfo.Compiler.Tests/src/C01ContractTests.cs b/tests/Icod.TermInfo.Compiler.Tests/src/C01ContractTests.cs index e7fad3e..ce10012 100644 --- a/tests/Icod.TermInfo.Compiler.Tests/src/C01ContractTests.cs +++ b/tests/Icod.TermInfo.Compiler.Tests/src/C01ContractTests.cs @@ -6,7 +6,7 @@ namespace Icod.TermInfo.Compiler.Tests; public sealed class C01ContractTests { - private const string DevelopmentVersion = "1.2.0-Alpha-7"; + private const string DevelopmentVersion = "1.2.0"; private const string StableAssemblyVersion = "1.0.0.0"; [Fact] diff --git a/tests/Icod.TermInfo.Source.Tests/src/S01ContractTests.cs b/tests/Icod.TermInfo.Source.Tests/src/S01ContractTests.cs index 98c1cc1..5e8070f 100644 --- a/tests/Icod.TermInfo.Source.Tests/src/S01ContractTests.cs +++ b/tests/Icod.TermInfo.Source.Tests/src/S01ContractTests.cs @@ -4,7 +4,7 @@ namespace Icod.TermInfo.Source.Tests; public sealed class S01ContractTests { - private const string DevelopmentVersion = "1.2.0-Alpha-7"; + private const string DevelopmentVersion = "1.2.0"; private const string StableAssemblyVersion = "1.0.0.0"; [Fact] diff --git a/tests/Icod.TermInfo.Source.Tests/src/S02ContractTests.cs b/tests/Icod.TermInfo.Source.Tests/src/S02ContractTests.cs index f862631..e9aeb69 100644 --- a/tests/Icod.TermInfo.Source.Tests/src/S02ContractTests.cs +++ b/tests/Icod.TermInfo.Source.Tests/src/S02ContractTests.cs @@ -7,7 +7,7 @@ namespace Icod.TermInfo.Source.Tests; public sealed class S02ContractTests { - private const string DevelopmentVersion = "1.2.0-Alpha-7"; + private const string DevelopmentVersion = "1.2.0"; private const string StableAssemblyVersion = "1.0.0.0"; [Fact] diff --git a/tests/Icod.TermInfo.Source.Tests/src/S03ContractTests.cs b/tests/Icod.TermInfo.Source.Tests/src/S03ContractTests.cs index 0e7b43e..78df17a 100644 --- a/tests/Icod.TermInfo.Source.Tests/src/S03ContractTests.cs +++ b/tests/Icod.TermInfo.Source.Tests/src/S03ContractTests.cs @@ -7,7 +7,7 @@ namespace Icod.TermInfo.Source.Tests; public sealed class S03ContractTests { - private const string DevelopmentVersion = "1.2.0-Alpha-7"; + private const string DevelopmentVersion = "1.2.0"; private const string StableAssemblyVersion = "1.0.0.0"; [Fact] diff --git a/tests/Icod.TermInfo.Source.Tests/src/S04ContractTests.cs b/tests/Icod.TermInfo.Source.Tests/src/S04ContractTests.cs index cd6741f..6df338b 100644 --- a/tests/Icod.TermInfo.Source.Tests/src/S04ContractTests.cs +++ b/tests/Icod.TermInfo.Source.Tests/src/S04ContractTests.cs @@ -7,7 +7,7 @@ namespace Icod.TermInfo.Source.Tests; public sealed class S04ContractTests { - private const string DevelopmentVersion = "1.2.0-Alpha-7"; + private const string DevelopmentVersion = "1.2.0"; private const string StableAssemblyVersion = "1.0.0.0"; [Fact] public void SourceAndRuntimePackagesAdvanceTogetherWithoutChangingAssemblyIdentity() { diff --git a/tests/Icod.TermInfo.Source.Tests/src/S05ContractTests.cs b/tests/Icod.TermInfo.Source.Tests/src/S05ContractTests.cs index 8c7383e..6331b6c 100644 --- a/tests/Icod.TermInfo.Source.Tests/src/S05ContractTests.cs +++ b/tests/Icod.TermInfo.Source.Tests/src/S05ContractTests.cs @@ -7,7 +7,7 @@ namespace Icod.TermInfo.Source.Tests; public sealed class S05ContractTests { - private const string DevelopmentVersion = "1.2.0-Alpha-7"; + private const string DevelopmentVersion = "1.2.0"; private const string StableAssemblyVersion = "1.0.0.0"; [Fact] public void SourceAndRuntimePackagesAdvanceTogetherWithoutChangingAssemblyIdentity() diff --git a/tests/Icod.TermInfo.Source.Tests/src/S06ContractTests.cs b/tests/Icod.TermInfo.Source.Tests/src/S06ContractTests.cs index dc27c44..843644c 100644 --- a/tests/Icod.TermInfo.Source.Tests/src/S06ContractTests.cs +++ b/tests/Icod.TermInfo.Source.Tests/src/S06ContractTests.cs @@ -7,7 +7,7 @@ namespace Icod.TermInfo.Source.Tests; public sealed class S06ContractTests { - private const string DevelopmentVersion = "1.2.0-Alpha-7"; + private const string DevelopmentVersion = "1.2.0"; private const string StableAssemblyVersion = "1.0.0.0"; [Fact] public void SourceAndRuntimePackagesAdvanceTogetherWithoutChangingAssemblyIdentity() { diff --git a/tests/Icod.TermInfo.Source.Tests/src/S07ContractTests.cs b/tests/Icod.TermInfo.Source.Tests/src/S07ContractTests.cs index e2c6854..8e4ede2 100644 --- a/tests/Icod.TermInfo.Source.Tests/src/S07ContractTests.cs +++ b/tests/Icod.TermInfo.Source.Tests/src/S07ContractTests.cs @@ -7,7 +7,7 @@ namespace Icod.TermInfo.Source.Tests; public sealed class S07ContractTests { - private const string DevelopmentVersion = "1.2.0-Alpha-7"; + private const string DevelopmentVersion = "1.2.0"; private const string StableAssemblyVersion = "1.0.0.0"; [Fact] public void SourceAndRuntimePackagesAdvanceTogetherWithoutChangingAssemblyIdentity() diff --git a/tests/Icod.TermInfo.Source.Tests/src/S08ContractTests.cs b/tests/Icod.TermInfo.Source.Tests/src/S08ContractTests.cs index 116854f..78df1b1 100644 --- a/tests/Icod.TermInfo.Source.Tests/src/S08ContractTests.cs +++ b/tests/Icod.TermInfo.Source.Tests/src/S08ContractTests.cs @@ -7,7 +7,7 @@ namespace Icod.TermInfo.Source.Tests; public sealed class S08ContractTests { - private const string DevelopmentVersion = "1.2.0-Alpha-7"; + private const string DevelopmentVersion = "1.2.0"; private const string StableAssemblyVersion = "1.0.0.0"; [Fact] public void SourceAndRuntimePackagesAdvanceTogetherWithoutChangingAssemblyIdentity() { diff --git a/tests/Icod.TermInfo.Source.Tests/src/S09ContractTests.cs b/tests/Icod.TermInfo.Source.Tests/src/S09ContractTests.cs index 5b5148a..8774b8d 100644 --- a/tests/Icod.TermInfo.Source.Tests/src/S09ContractTests.cs +++ b/tests/Icod.TermInfo.Source.Tests/src/S09ContractTests.cs @@ -5,7 +5,7 @@ namespace Icod.TermInfo.Source.Tests; public sealed class S09ContractTests { - private const string DevelopmentVersion = "1.2.0-Alpha-7"; + private const string DevelopmentVersion = "1.2.0"; private const string StableAssemblyVersion = "1.0.0.0"; [Fact] public void SourceAndRuntimePackagesAdvanceTogetherWithoutChangingAssemblyIdentity() { diff --git a/tests/Icod.TermInfo.Tests/src/T45CompletionGateTests.cs b/tests/Icod.TermInfo.Tests/src/T45CompletionGateTests.cs index fab2b05..53fc4f4 100644 --- a/tests/Icod.TermInfo.Tests/src/T45CompletionGateTests.cs +++ b/tests/Icod.TermInfo.Tests/src/T45CompletionGateTests.cs @@ -7,7 +7,7 @@ namespace Icod.TermInfo.Tests; public sealed class T45CompletionGateTests { [Fact] - public void AssemblyRetainsStableIdentityForOneTwoDevelopment() { + public void AssemblyRetainsStableIdentityForOneTwoRelease() { Assembly assembly = typeof( TerminalDescription ).Assembly; AssemblyName assemblyName = @@ -30,12 +30,12 @@ public void AssemblyRetainsStableIdentityForOneTwoDevelopment() { 2 )[ 0 ]; Assert.Equal( - "1.2.0-Alpha-7", + "1.2.0", semanticVersion ); } [Fact] - public void ProjectMetadataIdentifiesOneTwoDevelopmentAndStableAssembly() { + public void ProjectMetadataIdentifiesOneTwoReleaseAndStableAssembly() { string root = FindRepositoryRoot(); XDocument project = @@ -46,12 +46,12 @@ public void ProjectMetadataIdentifiesOneTwoDevelopmentAndStableAssembly() { LoadOptions.None ); Assert.Equal( - "1.2.0-Alpha-7", + "1.2.0", ReadRequiredProperty( project, "Version" ) ); Assert.Equal( - "1.2.0-Alpha-7", + "1.2.0", ReadRequiredProperty( project, "PackageVersion" ) ); @@ -78,13 +78,16 @@ public void FinalReadmeUsesStablePackageVersionAndPolicies() { "README.md" ) ); Assert.Contains( - "dotnet add package Icod.TermInfo --version 1.1.1", + "dotnet add package Icod.TermInfo --version 1.2.0", readme ); Assert.Contains( - "dotnet add package Icod.TermInfo.Source --version 1.1.1", + "dotnet add package Icod.TermInfo.Source --version 1.2.0", + readme ); + Assert.Contains( + "dotnet add package Icod.TermInfo.Compiler --version 1.2.0", readme ); Assert.DoesNotContain( - "1.1.0-Alpha-9", + "1.2.0-Alpha-7", readme ); Assert.Contains( "docs/VERSIONING.md", @@ -93,7 +96,7 @@ public void FinalReadmeUsesStablePackageVersionAndPolicies() { "docs/COMPATIBILITY.md", readme ); Assert.Contains( - "docs/1.1.0-RELEASE-AUDIT.md", + "docs/1.2.0-RELEASE-AUDIT.md", readme ); } @@ -139,6 +142,9 @@ in new[] Assert.Contains( "1.1.0-SOURCE-PUBLIC-API-BASELINE.txt", verifier ); + Assert.Contains( + "1.2.0-COMPILER-PUBLIC-API-BASELINE.txt", + verifier ); Assert.True( verifier.Contains( "package-smoke", @@ -147,11 +153,15 @@ in new[] verifier.Contains( "source-package-smoke", StringComparison.OrdinalIgnoreCase ) ); + Assert.True( + verifier.Contains( + "compiler-package-smoke", + StringComparison.OrdinalIgnoreCase ) ); } } [Fact] - public void OneOneReleaseAuditDefinesReleaseSignOffWithoutClaimingIt() { + public void OneTwoReleaseAuditDefinesTagBasedReleaseSignOff() { string root = FindRepositoryRoot(); string audit = @@ -159,10 +169,10 @@ public void OneOneReleaseAuditDefinesReleaseSignOffWithoutClaimingIt() { Path.Combine( root, "docs", - "1.1.0-RELEASE-AUDIT.md" ) ); + "1.2.0-RELEASE-AUDIT.md" ) ); Assert.Contains( - "Release sign-off pending", + "Final release candidate", audit ); Assert.Contains( "docs/1.0.0-PUBLIC-API-BASELINE.txt", @@ -171,13 +181,16 @@ public void OneOneReleaseAuditDefinesReleaseSignOffWithoutClaimingIt() { "docs/1.1.0-SOURCE-PUBLIC-API-BASELINE.txt", audit ); Assert.Contains( - "public-api-snapshot --check", + "docs/1.2.0-COMPILER-PUBLIC-API-BASELINE.txt", audit ); Assert.Contains( "verify-release-package", audit ); Assert.Contains( - "v1.1.0", + "release.yaml", + audit ); + Assert.Contains( + "v1.2.0", audit ); }