Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CHEF-16389-Adding the verify and build pipeline to Test Kitchen hab package #5

Merged
merged 9 commits into from
Oct 18, 2024
9 changes: 9 additions & 0 deletions .expeditor/build.habitat.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
origin: ngupta26

expeditor:
defaults:
buildkite:
retry:
automatic:
limit: 1
92 changes: 92 additions & 0 deletions .expeditor/buildkite/artifact.habitat.test.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
#!/usr/bin/env powershell

#Requires -Version 5
# https://stackoverflow.com/questions/9948517
# TODO: Set-StrictMode -Version Latest
$PSDefaultParameterValues['*:ErrorAction']='Stop'
$ErrorActionPreference = 'Stop'
$env:HAB_BLDR_CHANNEL = "LTS-2024"
$env:HAB_ORIGIN = 'ci'
$env:CHEF_LICENSE = 'accept-no-persist'
$env:HAB_LICENSE = 'accept-no-persist'
$Plan = 'test-kitchen'

Write-Host "--- system details"
$Properties = 'Caption', 'CSName', 'Version', 'BuildType', 'OSArchitecture'
Get-CimInstance Win32_OperatingSystem | Select-Object $Properties | Format-Table -AutoSize

Write-Host "--- Installing the version of Habitat required"

function Stop-HabProcess {
$habProcess = Get-Process hab -ErrorAction SilentlyContinue
if ($habProcess) {
Write-Host "Stopping hab process..."
Stop-Process -Name hab -Force
}
}

function Install-Habitat {
Write-Host "Downloading and installing Habitat..."
Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/habitat-sh/habitat/main/components/hab/install.ps1'))
}

try {
hab --version
}
catch {
Set-ExecutionPolicy Bypass -Scope Process -Force

Stop-HabProcess

# Remove the existing hab.exe if it exists and if you have permissions
$habPath = "C:\ProgramData\Habitat\hab.exe"
if (Test-Path $habPath) {
Write-Host "Attempting to remove existing hab.exe..."
Remove-Item $habPath -Force -ErrorAction SilentlyContinue
if (Test-Path $habPath) {
Write-Host "Failed to remove hab.exe, re-running script with elevated permissions."
Start-Process powershell -Verb runAs -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`""
exit
}
}

Install-Habitat
}
finally {
Write-Host ":habicat: I think I have the version I need to build."
}


Write-Host "--- Generating fake origin key"
hab origin key generate $env:HAB_ORIGIN

Write-Host "--- Building $Plan"
$project_root = "$(git rev-parse --show-toplevel)"
Set-Location $project_root

$env:DO_CHECK=$true; hab pkg build .

. $project_root/results/last_build.ps1

Write-Host "--- Installing $pkg_ident/$pkg_artifact"
hab pkg install -b $project_root/results/$pkg_artifact

Write-Host "+++ Testing $Plan"

Push-Location $project_root

try {
Write-Host "Running unit tests..."
hab pkg exec "${pkg_ident}" rake unit

If ($lastexitcode -ne 0) {
Write-Host "Rake unit tests failed!" -ForegroundColor Red
Exit $lastexitcode
} else {
Write-Host "Rake unit tests passed!" -ForegroundColor Green
}
}
finally {
# Ensure we always return to the original directory
Pop-Location
}
71 changes: 71 additions & 0 deletions .expeditor/buildkite/artifact.habitat.test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
#!/usr/bin/env bash

set -eo pipefail

export HAB_ORIGIN='ci'
export PLAN='test-kitchen'
export CHEF_LICENSE="accept-no-persist"
export HAB_LICENSE="accept-no-persist"
export HAB_BLDR_CHANNEL="LTS-2024"

echo "--- checking if git is installed"
if ! command -v git &> /dev/null; then
echo "Git is not installed. Installing Git..."
sudo yum install -y git
else
echo "Git is already installed."
git --version
fi

echo "--- add an exception for this directory since detected dubious ownership in repository at /workdir"
git config --global --add safe.directory /workdir

echo "--- git status for this workdir"
git status

echo "--- ruby version"
ruby -v

export project_root="$(git rev-parse --show-toplevel)"
echo "The value for project_root is: $project_root"

export HAB_NONINTERACTIVE=true
export HAB_NOCOLORING=true
export HAB_STUDIO_SECRET_HAB_NONINTERACTIVE=true

echo "--- system details"
uname -a

echo "--- Installing Habitat"
id -a
curl https://raw.githubusercontent.com/habitat-sh/habitat/main/components/hab/install.sh | bash

echo "--- :key: Generating fake origin key"
hab origin key generate "$HAB_ORIGIN"


echo "--- Building $PLAN"
cd "$project_root"
DO_CHECK=true hab pkg build .

echo "--- Sourcing 'results/last_build.sh'"
if [ -f ./results/last_build.env ]; then
cat ./results/last_build.env
. ./results/last_build.env
export pkg_artifact
fi

echo "+++ Installing ${pkg_ident:?is undefined}"
echo "++++"
echo $project_root
echo "+++"
hab pkg install -b "${project_root:?is undefined}/results/${pkg_artifact:?is undefined}"

echo "+++ Testing $PLAN"

PATH="$(hab pkg path ci/test-kitchen)/bin:$PATH"
export PATH
echo "PATH is $PATH"

echo "--- :mag_right: Testing $PLAN"
${project_root}/habitat/tests/test.sh "$pkg_ident" || error 'failures during test of executables'
27 changes: 21 additions & 6 deletions .expeditor/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,22 @@ subscriptions:
ignore_labels:
- "Expeditor: Skip Changelog"
- "Expeditor: Skip All"
- trigger_pipeline:habitat/test:
only_if: built_in:bump_version
ignore_labels:
- "Expeditor: Skip Habitat"
- "Expeditor: Skip All"
- trigger_pipeline:habitat/build:
only_if: built_in:bump_version
ignore_labels:
- "Expeditor: Skip Habitat"
- "Expeditor: Skip All"

# the habitat chain
- workload: buildkite_hab_build_group_published:{{agent_id}}:*
actions:
# when all of the hab package publish to the unstable channel, test and promote them
- trigger_pipeline:habitat/test

- workload: project_promoted:{{agent_id}}:*
actions:
Expand All @@ -42,12 +58,11 @@ pipelines:
- verify:
description: Pull Request validation tests
public: true
# - habitat/build:
# env:
# - HAB_NONINTERACTIVE: "true"
# - HAB_NOCOLORING: "true"
# - HAB_STUDIO_SECRET_HAB_NONINTERACTIVE: "true"
# - docker/build
- habitat/build:
env:
- HAB_NONINTERACTIVE: "true"
- HAB_NOCOLORING: "true"
- HAB_STUDIO_SECRET_HAB_NONINTERACTIVE: "true"
- habitat/test:
description: Execute tests against the habitat artifact
definition: .expeditor/habitat-test.pipeline.yml
Expand Down
27 changes: 21 additions & 6 deletions .expeditor/habitat-test.pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,26 @@ expeditor:

steps:

- label: ":linux: Validate Habitat Builds of test-kitchen"
- label: ":linux: Validate Habitat Builds of Test Kitchen"
commands:
- sleep 60
- .expeditor/buildkite/artifact.habitat.test.sh
expeditor:
executor:
docker:
image: ruby:3.1
privileged: true
executor:
docker:
image: ruby:3.1
privileged: true

- label: ":windows: Validate Habitat Builds of Test Kitchen"
commands:
- .expeditor/buildkite/artifact.habitat.test.ps1
expeditor:
executor:
docker:
host_os: windows
shell: ["powershell", "-Command"]
image: rubydistros/windows-2019:3.1
user: 'NT AUTHORITY\SYSTEM'
environment:
- FORCE_FFI_YAJL=ext
- EXPIRE_CACHE=true
- CHEF_LICENSE=accept-no-persist
Empty file modified .expeditor/run_linux_tests.sh
100644 → 100755
Empty file.
10 changes: 10 additions & 0 deletions .expeditor/verify.pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,11 @@ steps:
host_os: windows
shell: ["powershell", "-Command"]
image: rubydistros/windows-2019:3.1
user: 'NT AUTHORITY\SYSTEM'
environment:
- FORCE_FFI_YAJL=ext
- EXPIRE_CACHE=true
- CHEF_LICENSE=accept-no-persist

- label: run-specs-windows-ruby-3.3
command:
Expand All @@ -45,3 +50,8 @@ steps:
host_os: windows
shell: ["powershell", "-Command"]
image: rubydistros/windows-2019:3.3
user: 'NT AUTHORITY\SYSTEM'
environment:
- FORCE_FFI_YAJL=ext
- EXPIRE_CACHE=true
- CHEF_LICENSE=accept-no-persist
3 changes: 2 additions & 1 deletion habitat/plan.ps1
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
$ErrorActionPreference = "Stop"
$PSDefaultParameterValues['*:ErrorAction']='Stop'

$env:HAB_BLDR_CHANNEL = "LTS-2024"
$pkg_name="test-kitchen"
$pkg_origin="chef"
$pkg_origin="ngupta26"
$pkg_version=$(Get-Content "$PLAN_CONTEXT/../VERSION")
$pkg_maintainer="The Chef Maintainers <[email protected]>"

Expand Down
6 changes: 4 additions & 2 deletions habitat/plan.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
_chef_client_ruby="core/ruby31"
export HAB_BLDR_CHANNEL="LTS-2024"
_chef_client_ruby="core/ruby3_1"
pkg_name="test-kitchen"
pkg_origin="chef"
pkg_origin="ngupta26"
pkg_maintainer="The Chef Maintainers <[email protected]>"
pkg_description="The Chef Test Kitchen"
pkg_license=('Apache-2.0')
Expand Down Expand Up @@ -32,6 +33,7 @@ do_before() {

do_download() {
build_line "Locally creating archive of latest repository commit at ${HAB_CACHE_SRC_PATH}/${pkg_filename}"
git config --global --add safe.directory /src
# source is in this repo, so we're going to create an archive from the
# appropriate path within the repo and place the generated tarball in the
# location expected by do_unpack
Expand Down
33 changes: 33 additions & 0 deletions habitat/tests/test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/usr/bin/env bash

set -euo pipefail

export CHEF_LICENSE="accept-no-persist"
export HAB_LICENSE="accept-no-persist"
export HAB_NONINTERACTIVE="true"
export HAB_BLDR_CHANNEL="LTS-2024"

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}" kitchen -- -v | sed -E 's/.*version ([0-9]+\.[0-9]+\.[0-9]+).*/\1/')
[[ "$package_version" = "$actual_version" ]] || error "test-kitchen is not the expected version. Expected '$package_version', got '$actual_version'"

echo "--- :Running rake"
hab pkg exec "${pkg_ident}" rake unit
10 changes: 5 additions & 5 deletions spec/kitchen/verifier/shell_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
let(:state) { {} }

let(:config) do
{ test_base_path: "/basist", kitchen_root: "/rooty" }
{ test_base_path: "/basist", kitchen_root: "/rooty", command: "echo 'Command executed successfully'" }
end

let(:transport) do
Expand Down Expand Up @@ -69,8 +69,8 @@
_(verifier[:sleep]).must_equal 0
end

it "sets :command to 'true' by default" do
_(verifier[:command]).must_equal "true"
it "sets :command to 'echo Command executed successfully' by default" do
_(verifier[:command]).must_equal "echo 'Command executed successfully'"
end

it "sets :live_stream to stdout by default" do
Expand Down Expand Up @@ -160,13 +160,13 @@
end

describe "#run_command" do
it "execute localy and returns nil" do
it "execute locally and returns nil" do
verifier.run_command
end

it "returns string when remote_exec" do
config[:remote_exec] = true
_(verifier.run_command).must_equal "true"
_(verifier.run_command).must_equal "echo 'Command executed successfully'"
end
end
end
Loading