From b28202eea0ecef24b3a2c9ecc3ec6fc8f5e7d019 Mon Sep 17 00:00:00 2001 From: nitin sanghi Date: Mon, 2 Dec 2024 12:56:59 +0530 Subject: [PATCH] Added version check on new hab pkg Signed-off-by: nitin sanghi --- .github/workflows/habitat-build.yml | 5 ++++- habitat/tests/test.pester.ps1 | 33 +++++++++++++++++++++++++++++ habitat/tests/test.ps1 | 19 +++++++++++++++++ habitat/tests/test.sh | 29 +++++++++++++++++++++++++ 4 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 habitat/tests/test.pester.ps1 create mode 100644 habitat/tests/test.ps1 create mode 100755 habitat/tests/test.sh diff --git a/.github/workflows/habitat-build.yml b/.github/workflows/habitat-build.yml index d3683854..72b0f89b 100644 --- a/.github/workflows/habitat-build.yml +++ b/.github/workflows/habitat-build.yml @@ -82,6 +82,8 @@ jobs: hab origin key download --auth $HAB_AUTH_TOKEN --secret $HAB_ORIGIN echo "--- running linux hab build" hab pkg build . + chmod +x habitat/tests/test.sh + habitat/tests/test.sh - name: Install Habitat on Windows if: ${{ matrix.os == 'windows-latest' }} shell: pwsh @@ -100,4 +102,5 @@ jobs: hab origin key download ${{ env.HAB_ORIGIN }} hab origin key download --auth ${{ secrets.HAB_AUTH_TOKEN }} --secret ${{ env.HAB_ORIGIN }} write-output "--- running windows hab build" - hab pkg build . \ No newline at end of file + hab pkg build . + habitat/tests/test.ps1 \ No newline at end of file diff --git a/habitat/tests/test.pester.ps1 b/habitat/tests/test.pester.ps1 new file mode 100644 index 00000000..4ffdd762 --- /dev/null +++ b/habitat/tests/test.pester.ps1 @@ -0,0 +1,33 @@ +param( + [Parameter()] + [string]$PackageIdentifier = $(throw "Usage: test.ps1 [test_pkg_ident] e.g. test.ps1 ci/user-windows-default/1.0.0/20190812103929") +) + +$PackageVersion = $PackageIdentifier.split('/')[2] + +Describe "chef-cli" { + Context "chef-cli" { + It "is an executable" { + hab pkg exec $PackageIdentifier chef-cli.bat --version + $? | Should be $true + } + + <# + At some point hab's argument parsing changed and it started interpreting the trailing `--version` as being + an argument passed to hab instead of an argument to the command passed to `hab pkg exec`. + + Powershell 5.1 and 7 appear to differ in how they treat following arguments as well, such that these two + versions of the command fail in powershell 5.1 (which is currently what is running in the windows machines + in Buildkite) but pass in powershell 7 (which is currently what is running in a stock Windows 10 VM). + + $the_version = (hab pkg exec $PackageIdentifier chef-client.bat '--version' | Out-String).split(':')[1].Trim() + $the_version = (hab pkg exec $PackageIdentifier chef-client.bat --version | Out-String).split(':')[1].Trim() + + This version of the command passes in powershell 5.1 but fails in powershell 7. + #> + It "is the expected version" { + $the_version = (hab pkg exec $PackageIdentifier chef-cli.bat -- --version | Out-String).split(':')[1].Trim() + $the_version | Should be $PackageVersion + } + } +} diff --git a/habitat/tests/test.ps1 b/habitat/tests/test.ps1 new file mode 100644 index 00000000..70ce5a04 --- /dev/null +++ b/habitat/tests/test.ps1 @@ -0,0 +1,19 @@ +param ( + [Parameter()] + [string]$PackageIdentifier = $(throw "Usage: test.ps1 [test_pkg_ident] e.g. test.ps1 ci/user-windows/1.0.0/20190812103929") +) + +# ensure Pester is available for test use +if (-Not (Get-Module -ListAvailable -Name Pester)){ + hab pkg install core/pester + Import-Module "$(hab pkg path core/pester)\module\pester.psd1" +} + +Write-Host "--- :fire: Smokish Pestering" +# Pester the Package +$__dir=(Get-Item $PSScriptRoot) +$test_result = Invoke-Pester -Strict -PassThru -Script @{ + Path = "$__dir/test.pester.ps1"; + Parameters = @{PackageIdentifier=$PackageIdentifier} +} +if ($test_result.FailedCount -ne 0) { Exit $test_result.FailedCount } diff --git a/habitat/tests/test.sh b/habitat/tests/test.sh new file mode 100755 index 00000000..c9e19f5a --- /dev/null +++ b/habitat/tests/test.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +set -euo pipefail + + +project_root="$(git rev-parse --show-toplevel)" +pkg_ident="$1" + +# print error message followed by usage and exit +error () { + local message="$1" + + echo -e "\nERROR: ${message}\n" >&2 + + exit 1 +} + +[[ -n "$pkg_ident" ]] || error 'no hab package identity provided' + +package_version=$(awk -F / '{print $3}' <<<"$pkg_ident") + +cd "${project_root}" + +echo "--- :mag_right: Testing ${pkg_ident} executables" +actual_version=$(hab pkg exec "${pkg_ident}" chef-cli -- -v | sed -E 's/.*Version ([0-9]+\.[0-9]+\.[0-9]+).*/\1/') +[[ "$package_version" = "$actual_version" ]] || error "chef-cli is not the expected version. Expected '$package_version', got '$actual_version'" + +echo "--- :Running rake" +hab pkg exec "${pkg_ident}" rake unit \ No newline at end of file