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 17475 pipeline #1842

Merged
merged 7 commits into from
Dec 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
}
70 changes: 70 additions & 0 deletions .expeditor/buildkite/artifact.habitat.test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
#!/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'
31 changes: 30 additions & 1 deletion .expeditor/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ github:
release_branches:
- main:
version_constraint: 19.*
- workstation-LTS:
version_constraint: 19.*
- 18-stable:
version_constraint: 18.*
- 17-stable:
Expand All @@ -36,7 +38,22 @@ release_branches:

changelog:
rollup_header: Changes not yet released to rubygems.org

pipelines:
- habitat/publish:
description: Create artiface and publish on BLDR
definition: .expeditor/build.habitat.yml
env:
- HAB_NONINTERACTIVE: "true"
- HAB_NOCOLORING: "true"
- HAB_STUDIO_SECRET_HAB_NONINTERACTIVE: "true"
- habitat/build-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.
- workload: pull_request_merged:{{github_repo}}:{{release_branch}}:*
Expand All @@ -53,8 +70,20 @@ subscriptions:
- "Expeditor: Skip All"
- built_in:build_gem:
only_if: built_in:bump_version
- trigger_pipeline:habitat/publish:
ignore_labels:
- "Expeditor: Skip Habitat"
- "Expeditor: Skip All"
- trigger_pipeline:habitat/build-test:
ignore_labels:
- "Expeditor: Skip Habitat"
- "Expeditor: Skip All"

- workload: project_promoted:{{agent_id}}:*
actions:
- built_in:rollover_changelog
- built_in:publish_rubygems
- 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/publish
36 changes: 36 additions & 0 deletions .expeditor/habitat-test.pipeline.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
expeditor:
defaults:
buildkite:
timeout_in_minutes: 30
retry:
automatic:
limit: 1


steps:

- label: ":linux: Validate Habitat Builds of Chef-cli"
commands:
- .expeditor/buildkite/artifact.habitat.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/
5 changes: 3 additions & 2 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
# frozen_string_literal: true

source "https://rubygems.org"

gemspec

# pull these gems from main of chef/chef so that we're testing against what we will release
# pull these gems from main of chef/chef so that we"re testing against what we will release
gem "appbundler"
gem "chef-config", git: "https://github.com/chef/chef", branch: "main", glob: "chef-config/chef-config.gemspec"
gem "chef-utils", git: "https://github.com/chef/chef", branch: "main", glob: "chef-utils/chef-utils.gemspec"

# NOTE: do not submit PRs to add pry as a dep, add to your Gemfile.local
group :development do
gem "cookstyle", ">= 7.32.8"
Expand Down
92 changes: 92 additions & 0 deletions habitat/plan.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
$ErrorActionPreference = "Stop"
$PSDefaultParameterValues['*:ErrorAction']='Stop'

$pkg_name="ohai"
$pkg_origin="chef"
$pkg_version=$(Get-Content "$PLAN_CONTEXT/../VERSION")
$pkg_maintainer="The Chef Maintainers <[email protected]>"

$pkg_deps=@(
"chef/ruby31-plus-devkit"
"core/git"
)
$pkg_bin_dirs=@("bin"
"vendor/bin")
$project_root= (Resolve-Path "$PLAN_CONTEXT/../").Path

function pkg_version {
Get-Content "$SRC_PATH/VERSION"
}

function Invoke-Before {
Set-PkgVersion
}
function Invoke-SetupEnvironment {
Push-RuntimeEnv -IsPath GEM_PATH "$pkg_prefix/vendor"

Set-RuntimeEnv APPBUNDLER_ALLOW_RVM "true" # prevent appbundler from clearing out the carefully constructed runtime GEM_PATH
Set-RuntimeEnv FORCE_FFI_YAJL "ext"
Set-RuntimeEnv LANG "en_US.UTF-8"
Set-RuntimeEnv LC_CTYPE "en_US.UTF-8"
}

function Invoke-Build {
try {
$env:Path += ";c:\\Program Files\\Git\\bin"
Push-Location $project_root
$env:GEM_HOME = "$HAB_CACHE_SRC_PATH/$pkg_dirname/vendor"

Write-BuildLine " ** Configuring bundler for this build environment"
bundle config --local without integration deploy maintenance
bundle config --local jobs 4
bundle config --local retry 5
bundle config --local silence_root_warning 1
Write-BuildLine " ** Using bundler to retrieve the Ruby dependencies"
bundle install

gem build ohai.gemspec
Write-BuildLine " ** Using gem to install"
gem install ohai-*.gem --no-document


If ($lastexitcode -ne 0) { Exit $lastexitcode }
} finally {
Pop-Location
}
}

function Invoke-Install {
Write-BuildLine "** Copy built & cached gems to install directory"
Copy-Item -Path "$HAB_CACHE_SRC_PATH/$pkg_dirname/*" -Destination $pkg_prefix -Recurse -Force -Exclude @("gem_make.out", "mkmf.log", "Makefile",
"*/latest", "latest",
"*/JSON-Schema-Test-Suite", "JSON-Schema-Test-Suite")

try {
Push-Location $pkg_prefix
bundle config --local gemfile $project_root/Gemfile
Write-BuildLine "** generating binstubs for ohai with precise version pins"
Write-BuildLine "** generating binstubs for ohai with precise version pins $project_root $pkg_prefix/bin "
Invoke-Expression -Command "appbundler.bat $project_root $pkg_prefix/bin ohai"
If ($lastexitcode -ne 0) { Exit $lastexitcode }
Write-BuildLine " ** Running the ohai project's 'rake install' to install the path-based gems so they look like any other installed gem."

If ($lastexitcode -ne 0) { Exit $lastexitcode }
} finally {
Pop-Location
}
}

function Invoke-After {
# We don't need the cache of downloaded .gem files ...
Remove-Item $pkg_prefix/vendor/cache -Recurse -Force
# We don't need the gem docs.
Remove-Item $pkg_prefix/vendor/doc -Recurse -Force
# We don't need to ship the test suites for every gem dependency,
# only inspec's for package verification.
Get-ChildItem $pkg_prefix/vendor/gems -Filter "spec" -Directory -Recurse -Depth 1 `
| Where-Object -FilterScript { $_.FullName -notlike "*ohai*" } `
| Remove-Item -Recurse -Force
# Remove the byproducts of compiling gems with extensions
Get-ChildItem $pkg_prefix/vendor/gems -Include @("gem_make.out", "mkmf.log", "Makefile") -File -Recurse `
| Remove-Item -Force
}
Loading
Loading