From 4f8fb510ba03f195a49f6353b97fabf5bb20d450 Mon Sep 17 00:00:00 2001 From: ras0219 <533828+ras0219@users.noreply.github.com> Date: Fri, 15 Jan 2021 12:35:48 -0800 Subject: [vcpkg] Add initial versioning documentation (#15565) * [vcpkg] Improve efficiency and tests of versioning * [vcpkg] Add initial versioning documentation and rename x-default-baseline to builtin-baseline * [vcpkg] Enable metrics for builtin-baseline & overrides * [vcpkg] Address PR comments * [vcpkg] Add support for syntax in version>= * [vcpkg] Remove port-version from dependency syntax * [vcpkg] Address CR comment * [vcpkg] Minor docs fixup --- .../end-to-end-tests-dir/registries.ps1 | 37 +++--------------- .../end-to-end-tests-dir/versions.ps1 | 45 ++++++++++++++++------ .../azure-pipelines/end-to-end-tests-prelude.ps1 | 4 ++ scripts/generatePortVersionsDb.py | 2 +- .../version-files/default-baseline-1/vcpkg.json | 2 +- .../version-files/default-baseline-2/vcpkg.json | 4 +- .../port_versions/z-/zlib.json | 14 +++++++ .../without-default-baseline-2/vcpkg.json | 7 ++++ scripts/vcpkg.schema.json | 13 ++++--- 9 files changed, 76 insertions(+), 52 deletions(-) create mode 100644 scripts/testing/version-files/without-default-baseline-2/port_versions/z-/zlib.json create mode 100644 scripts/testing/version-files/without-default-baseline-2/vcpkg.json (limited to 'scripts') diff --git a/scripts/azure-pipelines/end-to-end-tests-dir/registries.ps1 b/scripts/azure-pipelines/end-to-end-tests-dir/registries.ps1 index 777c0901f..ef7023c85 100644 --- a/scripts/azure-pipelines/end-to-end-tests-dir/registries.ps1 +++ b/scripts/azure-pipelines/end-to-end-tests-dir/registries.ps1 @@ -14,12 +14,13 @@ Throw-IfNotFailed Run-Vcpkg install @builtinRegistryArgs --feature-flags=registries 'zlib' Throw-IfFailed -# Test git and filesystem registries +Write-Trace "Test git and filesystem registries" Refresh-TestRoot $filesystemRegistry = "$TestingRoot/filesystem-registry" $gitRegistryUpstream = "$TestingRoot/git-registry-upstream" # build a filesystem registry +Write-Trace "build a filesystem registry" New-Item -Path $filesystemRegistry -ItemType Directory $filesystemRegistry = (Get-Item $filesystemRegistry).FullName @@ -51,6 +52,7 @@ New-Item ` # build a git registry +Write-Trace "build a git registry" New-Item -Path $gitRegistryUpstream -ItemType Directory $gitRegistryUpstream = (Get-Item $gitRegistryUpstream).FullName @@ -82,6 +84,7 @@ finally } # actually test the registries +Write-Trace "actually test the registries" $vcpkgJson = @{ "name" = "manifest-test"; "version-string" = "1.0.0"; @@ -90,37 +93,8 @@ $vcpkgJson = @{ ) } -$manifestDir = "$TestingRoot/builtin-registry-test-manifest-dir" - -New-Item -Path $manifestDir -ItemType Directory -$manifestDir = (Get-Item $manifestDir).FullName - -Push-Location $manifestDir - -try -{ - $vcpkgJsonWithBaseline = $vcpkgJson.Clone() - $vcpkgJsonWithBaseline['$x-default-baseline'] = 'default' - - New-Item -Path 'vcpkg.json' -ItemType File ` - -Value (ConvertTo-Json -Depth 5 -InputObject $vcpkgJson) - - Run-Vcpkg install @builtinRegistryArgs '--feature-flags=registries,manifests' - Throw-IfNotFailed - - New-Item -Path 'vcpkg.json' -ItemType File -Force ` - -Value (ConvertTo-Json -Depth 5 -InputObject $vcpkgJsonWithBaseline) - - Run-Vcpkg install @builtinRegistryArgs '--feature-flags=registries,manifests' - Throw-IfFailed -} -finally -{ - Pop-Location -} - - # test the filesystem registry +Write-Trace "test the filesystem registry" $manifestDir = "$TestingRoot/filesystem-registry-test-manifest-dir" New-Item -Path $manifestDir -ItemType Directory @@ -154,6 +128,7 @@ finally } # test the git registry +Write-Trace "test the git registry" $manifestDir = "$TestingRoot/git-registry-test-manifest-dir" New-Item -Path $manifestDir -ItemType Directory diff --git a/scripts/azure-pipelines/end-to-end-tests-dir/versions.ps1 b/scripts/azure-pipelines/end-to-end-tests-dir/versions.ps1 index f5f9de20b..11550d7bd 100644 --- a/scripts/azure-pipelines/end-to-end-tests-dir/versions.ps1 +++ b/scripts/azure-pipelines/end-to-end-tests-dir/versions.ps1 @@ -59,17 +59,40 @@ Throw-IfFailed Throw-IfFailed $CurrentTest = "default baseline" -$out = ./vcpkg $commonArgs "--feature-flags=versions" install --x-manifest-root=scripts/testing/version-files/default-baseline-1 +$out = ./vcpkg $commonArgs "--feature-flags=versions" install --x-manifest-root=scripts/testing/version-files/default-baseline-1 2>&1 | Out-String Throw-IfNotFailed -# if ($out -notmatch "Error: while checking out baseline" -or $out -notmatch " does not exist in ") -# { -# $out -# throw "Expected to fail due to missing baseline" -# } +if ($out -notmatch ".*Error: while checking out baseline.*") +{ + $out + throw "Expected to fail due to missing baseline" +} git fetch https://github.com/vicroms/test-registries -$CurrentTest = "default baseline" -./vcpkg $commonArgs --debug "--feature-flags=versions" install ` - "--x-manifest-root=scripts/testing/version-files/default-baseline-2" ` - "--x-builtin-port-versions-dir=scripts/testing/version-files/default-baseline-2/port_versions" -Throw-IfFailed +foreach ($opt_registries in @("",",registries")) +{ + Write-Trace "testing baselines: $opt_registries" + Refresh-TestRoot + $CurrentTest = "without default baseline 2 -- enabling versions should not change behavior" + Remove-Item -Recurse $buildtreesRoot/versioning -ErrorAction SilentlyContinue + ./vcpkg $commonArgs "--feature-flags=versions$opt_registries" install ` + "--dry-run" ` + "--x-manifest-root=scripts/testing/version-files/without-default-baseline-2" ` + "--x-builtin-port-versions-dir=scripts/testing/version-files/default-baseline-2/port_versions" + Throw-IfFailed + Require-FileNotExists $buildtreesRoot/versioning + + $CurrentTest = "default baseline 2" + ./vcpkg $commonArgs "--feature-flags=versions$opt_registries" install ` + "--dry-run" ` + "--x-manifest-root=scripts/testing/version-files/default-baseline-2" ` + "--x-builtin-port-versions-dir=scripts/testing/version-files/default-baseline-2/port_versions" + Throw-IfFailed + Require-FileExists $buildtreesRoot/versioning + + $CurrentTest = "using version features fails without flag" + ./vcpkg $commonArgs "--feature-flags=-versions$opt_registries" install ` + "--dry-run" ` + "--x-manifest-root=scripts/testing/version-files/default-baseline-2" ` + "--x-builtin-port-versions-dir=scripts/testing/version-files/default-baseline-2/port_versions" + Throw-IfNotFailed +} \ No newline at end of file diff --git a/scripts/azure-pipelines/end-to-end-tests-prelude.ps1 b/scripts/azure-pipelines/end-to-end-tests-prelude.ps1 index deadb210c..29718bf76 100644 --- a/scripts/azure-pipelines/end-to-end-tests-prelude.ps1 +++ b/scripts/azure-pipelines/end-to-end-tests-prelude.ps1 @@ -63,6 +63,10 @@ function Throw-IfNotFailed { } } +function Write-Trace ([string]$text) { + Write-Host (@($MyInvocation.ScriptName, ":", $MyInvocation.ScriptLineNumber, ": ", $text) -join "") +} + function Run-Vcpkg { Param( [Parameter(ValueFromRemainingArguments)] diff --git a/scripts/generatePortVersionsDb.py b/scripts/generatePortVersionsDb.py index 3b7de6942..3be4a939e 100644 --- a/scripts/generatePortVersionsDb.py +++ b/scripts/generatePortVersionsDb.py @@ -35,7 +35,7 @@ def generate_port_versions_file(port_name): env = os.environ.copy() env['GIT_OPTIONAL_LOCKS'] = '0' output = subprocess.run( - [os.path.join(SCRIPT_DIRECTORY, '../vcpkg.exe'), + [os.path.join(SCRIPT_DIRECTORY, '../vcpkg'), 'x-history', port_name, '--x-json', f'--output={output_file_path}'], capture_output=True, encoding='utf-8', env=env) if output.returncode != 0: diff --git a/scripts/testing/version-files/default-baseline-1/vcpkg.json b/scripts/testing/version-files/default-baseline-1/vcpkg.json index f6d902393..51e65c82c 100644 --- a/scripts/testing/version-files/default-baseline-1/vcpkg.json +++ b/scripts/testing/version-files/default-baseline-1/vcpkg.json @@ -1,7 +1,7 @@ { "name": "default-baseline-test", "version-string": "0", - "$x-default-baseline": "fca18ba3572f8aebe3b8158c359db62a7e26134e", + "builtin-baseline": "fca18ba3572f8aebe3b8158c359db62a7e26134e", "dependencies": [ "zlib" ] diff --git a/scripts/testing/version-files/default-baseline-2/vcpkg.json b/scripts/testing/version-files/default-baseline-2/vcpkg.json index af353c09d..f540ccba0 100644 --- a/scripts/testing/version-files/default-baseline-2/vcpkg.json +++ b/scripts/testing/version-files/default-baseline-2/vcpkg.json @@ -1,7 +1,7 @@ { - "name": "default-baseline-test", + "name": "default-baseline-test-2", "version-string": "0", - "$x-default-baseline": "16002d9c2318dec4c69e02d9af8c0e11dca0d4c6", + "builtin-baseline": "16002d9c2318dec4c69e02d9af8c0e11dca0d4c6", "dependencies": [ "zlib" ] diff --git a/scripts/testing/version-files/without-default-baseline-2/port_versions/z-/zlib.json b/scripts/testing/version-files/without-default-baseline-2/port_versions/z-/zlib.json new file mode 100644 index 000000000..f5ee7cb9d --- /dev/null +++ b/scripts/testing/version-files/without-default-baseline-2/port_versions/z-/zlib.json @@ -0,0 +1,14 @@ +{ + "versions": [ + { + "git-tree": "7bb2b2f3783303a4dd41163553fe4cc103dc9262", + "version-string": "1.2.11", + "port-version": 9 + }, + { + "git-tree": "4927735fa9baca564ebddf6e6880de344b20d7a8", + "version-string": "1.2.11", + "port-version": 8 + } + ] +} \ No newline at end of file diff --git a/scripts/testing/version-files/without-default-baseline-2/vcpkg.json b/scripts/testing/version-files/without-default-baseline-2/vcpkg.json new file mode 100644 index 000000000..839418fb7 --- /dev/null +++ b/scripts/testing/version-files/without-default-baseline-2/vcpkg.json @@ -0,0 +1,7 @@ +{ + "name": "without-default-baseline-test-2", + "version-string": "0", + "dependencies": [ + "zlib" + ] +} \ No newline at end of file diff --git a/scripts/vcpkg.schema.json b/scripts/vcpkg.schema.json index 9df362086..c485aa415 100644 --- a/scripts/vcpkg.schema.json +++ b/scripts/vcpkg.schema.json @@ -136,12 +136,9 @@ "$ref": "#/definitions/platform-expression" }, "version>=": { - "description": "Minimum required port version", - "$ref": "#/definitions/version-text" - }, - "port-version": { - "description": "Minimum port revision (defaults to 0)", - "$ref": "#/definitions/port-version" + "description": "Minimum required version", + "type": "string", + "pattern": "^[^#]+(#\\d+)?$" } }, "patternProperties": { @@ -256,6 +253,10 @@ "description": "An SPDX license expression at version 3.9.", "type": "string" }, + "builtin-baseline": { + "description": "A vcpkg repository commit for version control.", + "type": "string" + }, "dependencies": { "description": "Dependencies that are always required.", "type": "array", -- cgit v1.2.3