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 17400 pipeline #241

Merged
merged 32 commits into from
Dec 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
b84037b
Add github action for hab pkg and publish
sanghinitin Nov 28, 2024
b28202e
Added version check on new hab pkg
sanghinitin Dec 2, 2024
f8ec8a6
removed extra keyword for triggering pipeline
sanghinitin Dec 2, 2024
a6efdb6
pkg iden added using vars
sanghinitin Dec 2, 2024
79a9682
list all pkg to verify pkg installed
sanghinitin Dec 2, 2024
1e23969
Installing hab build using hart file
sanghinitin Dec 2, 2024
837c975
Installing hab build using hart file
sanghinitin Dec 2, 2024
f0c4fd4
Installing hab build using hart file
sanghinitin Dec 2, 2024
77a5436
pipeline test commit
sanghinitin Dec 2, 2024
f31c624
pipeline test commit
sanghinitin Dec 2, 2024
ed2cc27
pipeline test commit
sanghinitin Dec 2, 2024
831f647
pipeline test commit
sanghinitin Dec 2, 2024
e5133b3
pipeline test commit
sanghinitin Dec 2, 2024
8164c5a
sudo for installing hab pkg
sanghinitin Dec 2, 2024
f015165
sudo for installing hab pkg
sanghinitin Dec 2, 2024
2677bea
sudo for installing hab pkg
sanghinitin Dec 2, 2024
409d9e7
sudo for installing hab pkg
sanghinitin Dec 2, 2024
a571355
hart file version change
sanghinitin Dec 2, 2024
440380d
Change pkg_indent
sanghinitin Dec 2, 2024
8982668
Change pkg_indent
sanghinitin Dec 2, 2024
b9c9f6e
version regex changed
sanghinitin Dec 2, 2024
43350d4
windows pipeline change
sanghinitin Dec 2, 2024
ca7fce0
windows pipeline change
sanghinitin Dec 2, 2024
7c25c1a
windows pipeline change
sanghinitin Dec 2, 2024
cb338d5
windows pipeline change
sanghinitin Dec 2, 2024
0bc1054
Windows chef-cli hab version check
sanghinitin Dec 2, 2024
10689fa
Windows chef-cli hab version check
sanghinitin Dec 2, 2024
4c028bb
Windows chef-cli hab version check
sanghinitin Dec 2, 2024
0924d5d
Change the message in test phase and throw error
sanghinitin Dec 2, 2024
9e3e651
Change the message in test phase and throw error
sanghinitin Dec 2, 2024
2befa02
Hab pipeline using buildkite
sanghinitin Dec 5, 2024
12a3bf5
hab build yml file added
sanghinitin Dec 5, 2024
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
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: chef

expeditor:
defaults:
buildkite:
retry:
automatic:
limit: 1
86 changes: 86 additions & 0 deletions .expeditor/buildkite/artifact.habitat.test.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
#!/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 = 'chef-cli'

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
}
}

# Installing Habitat
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..."
/habitat/tests/test.ps1 $pkg_ident
}
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='chef-cli'
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/chef-cli)/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'
35 changes: 34 additions & 1 deletion .expeditor/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ slack:
rubygems:
- chef-cli

release_branches:
- workstation-LTS:
version_constraint: 5.*
github:
# This deletes the GitHub PR branch after successfully merged into the release branch
delete_branch_on_merge: true
Expand All @@ -28,6 +31,19 @@ pipelines:
- verify:
description: Pull Request validation tests
public: true
- 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
env:
- HAB_NONINTERACTIVE: "true"
- HAB_NOCOLORING: "true"
- HAB_STUDIO_SECRET_HAB_NONINTERACTIVE: "true"
trigger: pull_request

subscriptions:
# These actions are taken, in order they are specified, anytime a Pull Request is merged.
Expand All @@ -45,7 +61,24 @@ subscriptions:
- "Expeditor: Skip All"
- built_in:build_gem:
only_if: built_in:bump_version
- 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"

- workload: project_promoted:{{agent_id}}:*
actions:
- built_in:rollover_changelog
- built_in:publish_rubygems
- built_in:publish_rubygems
# 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

35 changes: 35 additions & 0 deletions .expeditor/habitat-test.pipeline.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
---
expeditor:
defaults:
buildkite:
timeout_in_minutes: 30
retry:
automatic:
limit: 1

steps:

- label: ":linux: Validate Habitat Builds of Chef-cli"
commands:
- habitat/tests/test.sh
expeditor:
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
- CHEF_LICENSE_SERVER=http://hosted-license-service-lb-8000-606952349.us-west-2.elb.amazonaws.com:8000/
21 changes: 21 additions & 0 deletions habitat/tests/test.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
param (
[Parameter()]
[string]$PackageIdentifier = $(throw "Usage: test.ps1 [test_pkg_ident] e.g. test.ps1 ci/user-windows/1.0.0/20190812103929")
)


Write-Host "--- :fire: Smokish test"
# Pester the Package
$version=hab pkg exec "${pkg_ident}" chef-cli -v
$actual_version=[Regex]::Match($version,"([0-9]+.[0-9]+.[0-9]+)").Value
$package_version=$PackageIdentifier.split("/",4)[2]

Write-Host "package_version $package_version actual version $actual_version"
if ($package_version -eq $actual_version)
{
Write "Chef-cli working fine"
}
else {
Write-Error "chef-cli version not met expected $package_version actual version $actual_version "
throw "Chef cli windows pipeline not working for hab pkg"
}
26 changes: 26 additions & 0 deletions habitat/tests/test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@

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 version is not the expected version. Expected '$package_version', got '$actual_version'"


Loading