From e940dcc739fc8d723afc95a4b5363ea9a9018dd9 Mon Sep 17 00:00:00 2001 From: Sachin Date: Wed, 4 Dec 2024 12:21:36 +0530 Subject: [PATCH 1/7] add pipleline for build, publish Signed-off-by: Sachin --- .github/workflows/habitat-build.yml | 116 ++++++++++++++++++++++++++ .github/workflows/habitat-publish.yml | 113 +++++++++++++++++++++++++ habitat/tests/test.ps1 | 20 +++++ habitat/tests/test.sh | 23 +++++ 4 files changed, 272 insertions(+) create mode 100644 .github/workflows/habitat-build.yml create mode 100644 .github/workflows/habitat-publish.yml 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 new file mode 100644 index 00000000..27f3556f --- /dev/null +++ b/.github/workflows/habitat-build.yml @@ -0,0 +1,116 @@ +name: Build Habitat packages + +on: + push: + branches: + - workstation-LTS + pull_request: + branches: + - workstation-LTS + +env: + # BLDR URL Defined as: 'https://bldr.habitat.sh/' but as an env var in workspace settings. + BLDR_URL: ${{vars.BLDR_URL}} + # HAB_ORIGIN Defined as: 'chef' defined in workspace settings. + HAB_ORIGIN: ${{vars.HAB_ORIGIN}} + # BLDR_CHANNEL defaulted to unstable, but can be switched to stable, it is defined via the environment setting https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#using-an-environment + BLDR_CHANNEL: ${{ vars.BLDR_CHANNEL }} + # HABITAT_VERSION_SET this is the version of habitat CLI you are using, defaults to latest. + HABITAT_VERSION_SET: ${{vars.HABITAT_VERSION_SET}} + # HAB_AUTH_TOKEN your orgs/projects auth token value + HAB_AUTH_TOKEN: ${{ secrets.HAB_AUTH_TOKEN }} + # HABITAT_TARGET this is the CPU arch for the linux CLI tool, its defaulted to x86_64 + #HABITAT_TARGET: $#{{vars.HABITAT_TARGET}} + HAB_FALLBACK_CHANNEL: ${{vars.HAB_FALLBACK_CHANNEL}} + +permissions: + contents: write + +jobs: + pre-build: + name: Setup before building packages + runs-on: ubuntu-latest + outputs: + app_version: ${{ steps.app_version.outputs.APP_VERSION }} + steps: + - name: Get branch name + id: get_branch_name + run: | + echo "BRANCH_NAME=${GITHUB_REF_NAME//\//-}" >> "$GITHUB_OUTPUT" + - name: Get version from tag + id: app_version + run: | + echo "APP_VERSION=${{ github.ref_type == 'tag' && github.ref_name || format('{0}-{1}', steps.get_branch_name.outputs.BRANCH_NAME, github.sha) }}" >> "$GITHUB_OUTPUT" + agent-matrix: + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest] + # matrix strategy is described at https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs + + runs-on: ${{ matrix.os }} + # free runner types are https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners + # from macos-latest, windows-latest, ubuntu-latest, ubuntu-20.04, ubuntu-18.04, ubuntu-16.04, windows-2019, windows-2016 + # included software packages on runners are at https://github.com/actions/runner-images#available-images + # defaulted to unstable, but can be switched to stable, it is defined via the environment setting https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#using-an-environment + # environment: unstable + steps: + - name: print OS + run: echo "--- ${{ matrix.os }}" + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + + - name: install habitat on Linux + if: ${{ matrix.os == 'ubuntu-latest' }} + shell: bash + run: | + echo "--- STARTING HAB INSTALL ON ${{ matrix.os }} UBUNTU with habitat version:${{vars.HABITAT_VERSION_SET}}" + export HABITAT_VERSION="${{vars.HABITAT_VERSION_SET}}" + export HAB_FALLBACK_CHANNEL="${{vars.HAB_FALLBACK_CHANNEL}}" + HABITAT_VERSION="${HABITAT_VERSION:?HABITAT_VERSION must be set}" + HABITAT_TARGET="${HABITAT_TARGET:-x86_64-linux}" + curl https://raw.githubusercontent.com/habitat-sh/habitat/master/components/hab/install.sh | sudo bash -s -- -v "$HABITAT_VERSION" -t "$HABITAT_TARGET" + - name: run Habitat packaging (linux) + if: ${{ matrix.os == 'ubuntu-latest' }} + shell: bash + run: | + hab license accept + hab origin key download $HAB_ORIGIN + hab origin key download --auth $HAB_AUTH_TOKEN --secret $HAB_ORIGIN + echo "--- running linux hab build" + hab pkg build . + hartfile=$(ls ./results | grep "fauxhai" | tail -n 1) + sudo hab license accept + export CHEF_LICENSE="accept-no-persist" + export HAB_LICENSE="accept-no-persist" + export HAB_NONINTERACTIVE="true" + sudo hab pkg install ./results/$hartfile + . ./results/last_build.env + export pkg_ident + chmod +x habitat/tests/test.sh + habitat/tests/test.sh + - name: Install Habitat on Windows + if: ${{ matrix.os == 'windows-latest' }} + shell: pwsh + run: | + write-output "--- STARTING HAB INSTALL ON ${{ matrix.os }} WINDOWS with habitat version:${{vars.HABITAT_VERSION_SET}}" + $env:HAB_LICENSE = "accept-no-persist" + $env:HAB_FALLBACK_CHANNEL= "${{vars.HAB_FALLBACK_CHANNEL}}" + Invoke-Expression "& { $(Invoke-RestMethod https://raw.githubusercontent.com/habitat-sh/habitat/main/components/hab/install.ps1) } -Version ${{vars.HABITAT_VERSION_SET}}" + - name: run habitat packaging windows + if: ${{ matrix.os == 'windows-latest' }} + shell: pwsh + run: | + $env:Path += ";C:\ProgramData\Habitat" + hab license accept + 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 . + $hartfile=(ls ./results -Name | findstr "fauxhai") + hab pkg install ./results/$hartfile + . ./results/last_build.ps1 + habitat/tests/test.ps1 $pkg_ident diff --git a/.github/workflows/habitat-publish.yml b/.github/workflows/habitat-publish.yml new file mode 100644 index 00000000..9cea6212 --- /dev/null +++ b/.github/workflows/habitat-publish.yml @@ -0,0 +1,113 @@ +name: Publish Habitat packages + +on: + push: + branches: + - workstation-LTS + release: + types: + - created + +env: + # BLDR URL Defined as: 'https://bldr.habitat.sh/' but as an env var in workspace settings. + BLDR_URL: ${{vars.BLDR_URL}} + # HAB_ORIGIN Defined as: 'chef' defined in workspace settings. + HAB_ORIGIN: ${{vars.HAB_ORIGIN}} + # BLDR_CHANNEL defaulted to unstable, but can be switched to stable, it is defined via the environment setting https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#using-an-environment + BLDR_CHANNEL: ${{ vars.BLDR_CHANNEL }} + # HABITAT_VERSION_SET this is the version of habitat CLI you are using, defaults to latest. + HABITAT_VERSION_SET: ${{vars.HABITAT_VERSION_SET}} + # HAB_PACKAGE is the name of the project you are on, IE: node-management-agent + HAB_PACKAGE: ${{vars.HAB_PACKAGE}} + # HAB_AUTH_TOKEN your orgs/projects auth token value + HAB_AUTH_TOKEN: ${{ secrets.HAB_AUTH_TOKEN }} + HAB_FALLBACK_CHANNEL: ${{vars.HAB_FALLBACK_CHANNEL}} + # HABITAT_TARGET this is the CPU arch for the linux CLI tool, its defaulted to x86_64 + #HABITAT_TARGET: $#{{vars.HABITAT_TARGET}} + # org-wide access token on https://github.com/organizations/progress-platform-services/settings/secrets/actions + +permissions: + contents: write + +jobs: + pre-build: + name: Setup before building packages + runs-on: ubuntu-latest + outputs: + app_version: ${{ steps.app_version.outputs.APP_VERSION }} + steps: + - name: Get branch name + id: get_branch_name + run: | + echo "BRANCH_NAME=${GITHUB_REF_NAME//\//-}" >> "$GITHUB_OUTPUT" + - name: Get version from tag + id: app_version + run: | + echo "APP_VERSION=${{ github.ref_type == 'tag' && github.ref_name || format('{0}-{1}', steps.get_branch_name.outputs.BRANCH_NAME, github.sha) }}" >> "$GITHUB_OUTPUT" + agent-matrix: + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest] + # matrix strategy is described at https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs + + runs-on: ${{ matrix.os }} + # free runner types are https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners + # from macos-latest, windows-latest, ubuntu-latest, ubuntu-20.04, ubuntu-18.04, ubuntu-16.04, windows-2019, windows-2016 + # included software packages on runners are at https://github.com/actions/runner-images#available-images + # environment: unstable + steps: + - name: print OS + run: echo "--- ${{ matrix.os }}" + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + + - name: install habitat on Linux + if: ${{ matrix.os == 'ubuntu-latest' }} + shell: bash + run: | + echo "--- STARTING HAB INSTALL ON ${{ matrix.os }} UBUNTU with habitat version:${{vars.HABITAT_VERSION_SET}}" + export HABITAT_VERSION="${{vars.HABITAT_VERSION_SET}}" + HABITAT_VERSION="${HABITAT_VERSION:?HABITAT_VERSION must be set}" + HABITAT_TARGET="${HABITAT_TARGET:-x86_64-linux}" + export HAB_FALLBACK_CHANNEL="${{vars.HAB_FALLBACK_CHANNEL}}" + curl https://raw.githubusercontent.com/habitat-sh/habitat/master/components/hab/install.sh | sudo bash -s -- -v "$HABITAT_VERSION" -t "$HABITAT_TARGET" + - name: run Habitat packaging (linux) + if: ${{ matrix.os == 'ubuntu-latest' }} + shell: bash + run: | + hab license accept + hab origin key download $HAB_ORIGIN + hab origin key download --auth $HAB_AUTH_TOKEN --secret $HAB_ORIGIN + echo "--- running linux hab build" + hab pkg build . + echo "--- pushing to ${{ env.BLDR_URL }}/#/${{ env.HAB_ORIGIN }}/${{ env.HAB_PACKAGE }}..." + source results/last_build.env + hab pkg upload --auth $HAB_AUTH_TOKEN results/$pkg_artifact + echo "--- push complete!!" + - name: Install Habitat on Windows + if: ${{ matrix.os == 'windows-latest' }} + shell: pwsh + run: | + write-output "--- STARTING HAB INSTALL ON ${{ matrix.os }} WINDOWS with habitat version:${{vars.HABITAT_VERSION_SET}}" + $env:HAB_LICENSE = "accept-no-persist" + $env:HAB_FALLBACK_CHANNEL= "${{vars.HAB_FALLBACK_CHANNEL}}" + Invoke-Expression "& { $(Invoke-RestMethod https://raw.githubusercontent.com/habitat-sh/habitat/main/components/hab/install.ps1) } -Version ${{vars.HABITAT_VERSION_SET}}" + - name: run habitat packaging windows + if: ${{ matrix.os == 'windows-latest' }} + shell: pwsh + run: | + $env:Path += ";C:\ProgramData\Habitat" + hab license accept + 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 . + write-output "--- pushing hab to unstable channel" + . results\last_build.ps1 + hab pkg upload results\$pkg_artifact --auth ${{ secrets.HAB_AUTH_TOKEN }} + write-output "--- push complete!!" + outreach diff --git a/habitat/tests/test.ps1 b/habitat/tests/test.ps1 new file mode 100644 index 00000000..618a658f --- /dev/null +++ b/habitat/tests/test.ps1 @@ -0,0 +1,20 @@ +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" +$version=hab pkg exec "${pkg_ident}" fauxhai -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 "Fauxhai working fine" +} +else { + Write-Error "Fauxhai version not met expected $package_version actual version $actual_version " + throw "fauxhai windows pipeline not working for hab pkg" +} diff --git a/habitat/tests/test.sh b/habitat/tests/test.sh new file mode 100755 index 00000000..0e0f3dde --- /dev/null +++ b/habitat/tests/test.sh @@ -0,0 +1,23 @@ +set -euo pipefail + + +project_root="$(git rev-parse --show-toplevel)" + +# 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 "--- :msg_right: Testing ${pkg_ident} executables" +actual_version=$(hab pkg exec "${pkg_ident}" fauxhai -v | sed -E 's/.*: ([0-9]+\.[0-9]+\.[0-9]+).*/\1/') +[[ "$package_version" = "$actual_version" ]] || error "Fauxhai version is not the expected version. Expected '$package_version', got '$actual_version'" From b8a410cb09a263e3b9c66a027750512103f93d47 Mon Sep 17 00:00:00 2001 From: Sachin Date: Wed, 4 Dec 2024 12:29:18 +0530 Subject: [PATCH 2/7] fix habitat build for linux Signed-off-by: Sachin --- habitat/plan.sh | 96 ++++++++++++++++++++++--------------------------- 1 file changed, 43 insertions(+), 53 deletions(-) diff --git a/habitat/plan.sh b/habitat/plan.sh index e96dbc64..c77729cf 100644 --- a/habitat/plan.sh +++ b/habitat/plan.sh @@ -1,84 +1,74 @@ +export HAB_BLDR_CHANNEL="LTS-2024" pkg_name=fauxhai -pkg_origin=core +pkg_origin=chef +ruby_pkg="core/ruby3_1" pkg_description="Easily mock full ohai data" -pkg_license=('Apache-2.0') -pkg_deps=( - core/ruby31 - core/bash -) +pkg_deps=(${ruby_pkg} core/coreutils) pkg_build_deps=( - core/gcc - core/make -) + core/make + core/sed + core/gcc + core/libarchive + ) pkg_bin_dirs=(bin) +do_setup_environment() { + build_line 'Setting GEM_HOME="$pkg_prefix/vendor"' + export GEM_HOME="$pkg_prefix/vendor" + + build_line "Setting GEM_PATH=$GEM_HOME" + export GEM_PATH="$GEM_HOME" +} pkg_version() { cat "$SRC_PATH/VERSION" } - do_before() { update_pkg_version } - -# Setup environment variables for Ruby Gems -do_setup_environment() { - build_line "Setting up GEM_HOME and GEM_PATH" - export GEM_HOME="$pkg_prefix/lib" - export GEM_PATH="$GEM_HOME" -} - -# Unpack the source files into the cache directory do_unpack() { - local unpack_dir="$HAB_CACHE_SRC_PATH/$pkg_dirname" - build_line "Creating unpack directory: $unpack_dir" - mkdir -pv "$unpack_dir" - cp -RT "$PLAN_CONTEXT"/.. "$unpack_dir/" + mkdir -pv "$HAB_CACHE_SRC_PATH/$pkg_dirname" + cp -RT "$PLAN_CONTEXT"/.. "$HAB_CACHE_SRC_PATH/$pkg_dirname/" } - -# Build the gem from the gemspec file do_build() { - build_line "Building the gem from the gemspec file" - pushd "$HAB_CACHE_SRC_PATH/$pkg_dirname" > /dev/null - gem build fauxhai-chef.gemspec - popd > /dev/null -} -# Install the built gem into the package directory -do_install() { - build_line "Installing the gem" - pushd "$HAB_CACHE_SRC_PATH/$pkg_dirname" > /dev/null - gem install fauxhai-*.gem --no-document - popd > /dev/null + export GEM_HOME="$pkg_prefix/vendor" - wrap_fauxhai_bin + build_line "Setting GEM_PATH=$GEM_HOME" + export GEM_PATH="$GEM_HOME" + bundle config --local without integration deploy maintenance + bundle config --local jobs 4 + bundle config --local retry 5 + bundle config --local silence_root_warning 1 + bundle install + gem build fauxhai-chef.gemspec } +do_install() { + export GEM_HOME="$pkg_prefix/vendor" -# Create a wrapper script to properly set paths and execute the fauxhai command -wrap_fauxhai_bin() { + build_line "Setting GEM_PATH=$GEM_HOME" + export GEM_PATH="$GEM_HOME" + gem install fauxhai-*.gem --no-document + set_runtime_env "GEM_PATH" "${pkg_prefix}/vendor" + wrap_ruby_bin +} +wrap_ruby_bin() { local bin="$pkg_prefix/bin/$pkg_name" local real_bin="$GEM_HOME/gems/fauxhai-chef-${pkg_version}/bin/fauxhai" - - build_line "Creating wrapper script: $bin" + build_line "Adding wrapper $bin to $real_bin" cat < "$bin" #!$(pkg_path_for core/bash)/bin/bash set -e - -# Set the PATH for Fauxhai to include necessary binaries +# Set binary path that allows InSpec to use non-Hab pkg binaries export PATH="/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:\$PATH" - # Set Ruby paths defined from 'do_setup_environment()' -export GEM_HOME="$GEM_HOME" -export GEM_PATH="$GEM_PATH" - -# Execute the Fauxhai binary -exec $(pkg_path_for core/ruby31)/bin/ruby $real_bin "\$@" + export GEM_HOME="$pkg_prefix/vendor" + export GEM_PATH="$GEM_PATH" +exec $(pkg_path_for ${ruby_pkg})/bin/ruby $real_bin \$@ EOF - - # Ensure the wrapper script is executable chmod -v 755 "$bin" } -# No additional stripping needed + do_strip() { return 0 -} +} \ No newline at end of file From 36b3cc6b33b031d328e6ac45b15b23be59fe81f7 Mon Sep 17 00:00:00 2001 From: nitin sanghi Date: Fri, 6 Dec 2024 17:13:22 +0530 Subject: [PATCH 3/7] Change pipeline to expeditor Signed-off-by: nitin sanghi --- .expeditor/build.habitat.yml | 9 ++ .../buildkite/artifact.habitat.test.ps1 | 86 +++++++++++++ .expeditor/buildkite/artifact.habitat.test.sh | 70 +++++++++++ .expeditor/config.yml | 36 +++++- .expeditor/habitat-test.pipeline.yml | 36 ++++++ .github/workflows/habitat-build.yml | 116 ------------------ .github/workflows/habitat-publish.yml | 113 ----------------- 7 files changed, 235 insertions(+), 231 deletions(-) create mode 100644 .expeditor/build.habitat.yml create mode 100755 .expeditor/buildkite/artifact.habitat.test.ps1 create mode 100755 .expeditor/buildkite/artifact.habitat.test.sh create mode 100644 .expeditor/habitat-test.pipeline.yml delete mode 100644 .github/workflows/habitat-build.yml delete mode 100644 .github/workflows/habitat-publish.yml diff --git a/.expeditor/build.habitat.yml b/.expeditor/build.habitat.yml new file mode 100644 index 00000000..72ea2567 --- /dev/null +++ b/.expeditor/build.habitat.yml @@ -0,0 +1,9 @@ +--- +origin: chef + +expeditor: + defaults: + buildkite: + retry: + automatic: + limit: 1 diff --git a/.expeditor/buildkite/artifact.habitat.test.ps1 b/.expeditor/buildkite/artifact.habitat.test.ps1 new file mode 100755 index 00000000..839c450d --- /dev/null +++ b/.expeditor/buildkite/artifact.habitat.test.ps1 @@ -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 = 'fauxhai' + +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 +} \ No newline at end of file diff --git a/.expeditor/buildkite/artifact.habitat.test.sh b/.expeditor/buildkite/artifact.habitat.test.sh new file mode 100755 index 00000000..e4f1afc8 --- /dev/null +++ b/.expeditor/buildkite/artifact.habitat.test.sh @@ -0,0 +1,70 @@ +#!/usr/bin/env bash + +set -eo pipefail + +export HAB_ORIGIN='ci' +export PLAN='fauxhai' +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/fauxhai)/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' \ No newline at end of file diff --git a/.expeditor/config.yml b/.expeditor/config.yml index 023c553d..742cb41c 100644 --- a/.expeditor/config.yml +++ b/.expeditor/config.yml @@ -8,7 +8,12 @@ slack: # This publish is triggered by the `built_in:publish_rubygems` artifact_action. rubygems: - fauxhai-chef - + +release_branches: + - workstation-LTS: + version_constraint: 9.* + - main: + version_constraint: 9.* github: # This deletes the GitHub PR branch after successfully merged into the release branch delete_branch_on_merge: true @@ -40,12 +45,39 @@ subscriptions: - "Expeditor: Skip All" - built_in:build_gem: only_if: built_in:bump_version + - trigger_pipeline:habitat/publish: + 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 + - 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/build pipelines: - verify: description: Pull Request validation tests - public: true \ No newline at end of file + public: true + - habitat/publish: + 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 \ No newline at end of file diff --git a/.expeditor/habitat-test.pipeline.yml b/.expeditor/habitat-test.pipeline.yml new file mode 100644 index 00000000..86df807d --- /dev/null +++ b/.expeditor/habitat-test.pipeline.yml @@ -0,0 +1,36 @@ +--- +expeditor: + defaults: + buildkite: + timeout_in_minutes: 30 + retry: + automatic: + limit: 1 + + +steps: + + - label: ":linux: Validate Habitat Builds of fauxhai" + commands: + - .expeditor/buildkite/artifact.habitat.test.sh + expeditor: + executor: + docker: + image: ruby:3.1 + privileged: true + + - label: ":windows: Validate Habitat Builds of fauxhai" + 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/ diff --git a/.github/workflows/habitat-build.yml b/.github/workflows/habitat-build.yml deleted file mode 100644 index 27f3556f..00000000 --- a/.github/workflows/habitat-build.yml +++ /dev/null @@ -1,116 +0,0 @@ -name: Build Habitat packages - -on: - push: - branches: - - workstation-LTS - pull_request: - branches: - - workstation-LTS - -env: - # BLDR URL Defined as: 'https://bldr.habitat.sh/' but as an env var in workspace settings. - BLDR_URL: ${{vars.BLDR_URL}} - # HAB_ORIGIN Defined as: 'chef' defined in workspace settings. - HAB_ORIGIN: ${{vars.HAB_ORIGIN}} - # BLDR_CHANNEL defaulted to unstable, but can be switched to stable, it is defined via the environment setting https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#using-an-environment - BLDR_CHANNEL: ${{ vars.BLDR_CHANNEL }} - # HABITAT_VERSION_SET this is the version of habitat CLI you are using, defaults to latest. - HABITAT_VERSION_SET: ${{vars.HABITAT_VERSION_SET}} - # HAB_AUTH_TOKEN your orgs/projects auth token value - HAB_AUTH_TOKEN: ${{ secrets.HAB_AUTH_TOKEN }} - # HABITAT_TARGET this is the CPU arch for the linux CLI tool, its defaulted to x86_64 - #HABITAT_TARGET: $#{{vars.HABITAT_TARGET}} - HAB_FALLBACK_CHANNEL: ${{vars.HAB_FALLBACK_CHANNEL}} - -permissions: - contents: write - -jobs: - pre-build: - name: Setup before building packages - runs-on: ubuntu-latest - outputs: - app_version: ${{ steps.app_version.outputs.APP_VERSION }} - steps: - - name: Get branch name - id: get_branch_name - run: | - echo "BRANCH_NAME=${GITHUB_REF_NAME//\//-}" >> "$GITHUB_OUTPUT" - - name: Get version from tag - id: app_version - run: | - echo "APP_VERSION=${{ github.ref_type == 'tag' && github.ref_name || format('{0}-{1}', steps.get_branch_name.outputs.BRANCH_NAME, github.sha) }}" >> "$GITHUB_OUTPUT" - agent-matrix: - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, windows-latest] - # matrix strategy is described at https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs - - runs-on: ${{ matrix.os }} - # free runner types are https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners - # from macos-latest, windows-latest, ubuntu-latest, ubuntu-20.04, ubuntu-18.04, ubuntu-16.04, windows-2019, windows-2016 - # included software packages on runners are at https://github.com/actions/runner-images#available-images - # defaulted to unstable, but can be switched to stable, it is defined via the environment setting https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#using-an-environment - # environment: unstable - steps: - - name: print OS - run: echo "--- ${{ matrix.os }}" - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - - name: install habitat on Linux - if: ${{ matrix.os == 'ubuntu-latest' }} - shell: bash - run: | - echo "--- STARTING HAB INSTALL ON ${{ matrix.os }} UBUNTU with habitat version:${{vars.HABITAT_VERSION_SET}}" - export HABITAT_VERSION="${{vars.HABITAT_VERSION_SET}}" - export HAB_FALLBACK_CHANNEL="${{vars.HAB_FALLBACK_CHANNEL}}" - HABITAT_VERSION="${HABITAT_VERSION:?HABITAT_VERSION must be set}" - HABITAT_TARGET="${HABITAT_TARGET:-x86_64-linux}" - curl https://raw.githubusercontent.com/habitat-sh/habitat/master/components/hab/install.sh | sudo bash -s -- -v "$HABITAT_VERSION" -t "$HABITAT_TARGET" - - name: run Habitat packaging (linux) - if: ${{ matrix.os == 'ubuntu-latest' }} - shell: bash - run: | - hab license accept - hab origin key download $HAB_ORIGIN - hab origin key download --auth $HAB_AUTH_TOKEN --secret $HAB_ORIGIN - echo "--- running linux hab build" - hab pkg build . - hartfile=$(ls ./results | grep "fauxhai" | tail -n 1) - sudo hab license accept - export CHEF_LICENSE="accept-no-persist" - export HAB_LICENSE="accept-no-persist" - export HAB_NONINTERACTIVE="true" - sudo hab pkg install ./results/$hartfile - . ./results/last_build.env - export pkg_ident - chmod +x habitat/tests/test.sh - habitat/tests/test.sh - - name: Install Habitat on Windows - if: ${{ matrix.os == 'windows-latest' }} - shell: pwsh - run: | - write-output "--- STARTING HAB INSTALL ON ${{ matrix.os }} WINDOWS with habitat version:${{vars.HABITAT_VERSION_SET}}" - $env:HAB_LICENSE = "accept-no-persist" - $env:HAB_FALLBACK_CHANNEL= "${{vars.HAB_FALLBACK_CHANNEL}}" - Invoke-Expression "& { $(Invoke-RestMethod https://raw.githubusercontent.com/habitat-sh/habitat/main/components/hab/install.ps1) } -Version ${{vars.HABITAT_VERSION_SET}}" - - name: run habitat packaging windows - if: ${{ matrix.os == 'windows-latest' }} - shell: pwsh - run: | - $env:Path += ";C:\ProgramData\Habitat" - hab license accept - 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 . - $hartfile=(ls ./results -Name | findstr "fauxhai") - hab pkg install ./results/$hartfile - . ./results/last_build.ps1 - habitat/tests/test.ps1 $pkg_ident diff --git a/.github/workflows/habitat-publish.yml b/.github/workflows/habitat-publish.yml deleted file mode 100644 index 9cea6212..00000000 --- a/.github/workflows/habitat-publish.yml +++ /dev/null @@ -1,113 +0,0 @@ -name: Publish Habitat packages - -on: - push: - branches: - - workstation-LTS - release: - types: - - created - -env: - # BLDR URL Defined as: 'https://bldr.habitat.sh/' but as an env var in workspace settings. - BLDR_URL: ${{vars.BLDR_URL}} - # HAB_ORIGIN Defined as: 'chef' defined in workspace settings. - HAB_ORIGIN: ${{vars.HAB_ORIGIN}} - # BLDR_CHANNEL defaulted to unstable, but can be switched to stable, it is defined via the environment setting https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#using-an-environment - BLDR_CHANNEL: ${{ vars.BLDR_CHANNEL }} - # HABITAT_VERSION_SET this is the version of habitat CLI you are using, defaults to latest. - HABITAT_VERSION_SET: ${{vars.HABITAT_VERSION_SET}} - # HAB_PACKAGE is the name of the project you are on, IE: node-management-agent - HAB_PACKAGE: ${{vars.HAB_PACKAGE}} - # HAB_AUTH_TOKEN your orgs/projects auth token value - HAB_AUTH_TOKEN: ${{ secrets.HAB_AUTH_TOKEN }} - HAB_FALLBACK_CHANNEL: ${{vars.HAB_FALLBACK_CHANNEL}} - # HABITAT_TARGET this is the CPU arch for the linux CLI tool, its defaulted to x86_64 - #HABITAT_TARGET: $#{{vars.HABITAT_TARGET}} - # org-wide access token on https://github.com/organizations/progress-platform-services/settings/secrets/actions - -permissions: - contents: write - -jobs: - pre-build: - name: Setup before building packages - runs-on: ubuntu-latest - outputs: - app_version: ${{ steps.app_version.outputs.APP_VERSION }} - steps: - - name: Get branch name - id: get_branch_name - run: | - echo "BRANCH_NAME=${GITHUB_REF_NAME//\//-}" >> "$GITHUB_OUTPUT" - - name: Get version from tag - id: app_version - run: | - echo "APP_VERSION=${{ github.ref_type == 'tag' && github.ref_name || format('{0}-{1}', steps.get_branch_name.outputs.BRANCH_NAME, github.sha) }}" >> "$GITHUB_OUTPUT" - agent-matrix: - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, windows-latest] - # matrix strategy is described at https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs - - runs-on: ${{ matrix.os }} - # free runner types are https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners - # from macos-latest, windows-latest, ubuntu-latest, ubuntu-20.04, ubuntu-18.04, ubuntu-16.04, windows-2019, windows-2016 - # included software packages on runners are at https://github.com/actions/runner-images#available-images - # environment: unstable - steps: - - name: print OS - run: echo "--- ${{ matrix.os }}" - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - - name: install habitat on Linux - if: ${{ matrix.os == 'ubuntu-latest' }} - shell: bash - run: | - echo "--- STARTING HAB INSTALL ON ${{ matrix.os }} UBUNTU with habitat version:${{vars.HABITAT_VERSION_SET}}" - export HABITAT_VERSION="${{vars.HABITAT_VERSION_SET}}" - HABITAT_VERSION="${HABITAT_VERSION:?HABITAT_VERSION must be set}" - HABITAT_TARGET="${HABITAT_TARGET:-x86_64-linux}" - export HAB_FALLBACK_CHANNEL="${{vars.HAB_FALLBACK_CHANNEL}}" - curl https://raw.githubusercontent.com/habitat-sh/habitat/master/components/hab/install.sh | sudo bash -s -- -v "$HABITAT_VERSION" -t "$HABITAT_TARGET" - - name: run Habitat packaging (linux) - if: ${{ matrix.os == 'ubuntu-latest' }} - shell: bash - run: | - hab license accept - hab origin key download $HAB_ORIGIN - hab origin key download --auth $HAB_AUTH_TOKEN --secret $HAB_ORIGIN - echo "--- running linux hab build" - hab pkg build . - echo "--- pushing to ${{ env.BLDR_URL }}/#/${{ env.HAB_ORIGIN }}/${{ env.HAB_PACKAGE }}..." - source results/last_build.env - hab pkg upload --auth $HAB_AUTH_TOKEN results/$pkg_artifact - echo "--- push complete!!" - - name: Install Habitat on Windows - if: ${{ matrix.os == 'windows-latest' }} - shell: pwsh - run: | - write-output "--- STARTING HAB INSTALL ON ${{ matrix.os }} WINDOWS with habitat version:${{vars.HABITAT_VERSION_SET}}" - $env:HAB_LICENSE = "accept-no-persist" - $env:HAB_FALLBACK_CHANNEL= "${{vars.HAB_FALLBACK_CHANNEL}}" - Invoke-Expression "& { $(Invoke-RestMethod https://raw.githubusercontent.com/habitat-sh/habitat/main/components/hab/install.ps1) } -Version ${{vars.HABITAT_VERSION_SET}}" - - name: run habitat packaging windows - if: ${{ matrix.os == 'windows-latest' }} - shell: pwsh - run: | - $env:Path += ";C:\ProgramData\Habitat" - hab license accept - 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 . - write-output "--- pushing hab to unstable channel" - . results\last_build.ps1 - hab pkg upload results\$pkg_artifact --auth ${{ secrets.HAB_AUTH_TOKEN }} - write-output "--- push complete!!" - outreach From 6b1b90a8cbb53524d60b22d8fd77a81329f1dfb3 Mon Sep 17 00:00:00 2001 From: nitin sanghi Date: Fri, 6 Dec 2024 17:18:30 +0530 Subject: [PATCH 4/7] Fix pipeline name Signed-off-by: nitin sanghi --- .expeditor/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.expeditor/config.yml b/.expeditor/config.yml index 742cb41c..7f0ad6f2 100644 --- a/.expeditor/config.yml +++ b/.expeditor/config.yml @@ -50,7 +50,7 @@ subscriptions: ignore_labels: - "Expeditor: Skip Habitat" - "Expeditor: Skip All" - - trigger_pipeline:habitat/build: + - trigger_pipeline:habitat/test: only_if: built_in:bump_version ignore_labels: - "Expeditor: Skip Habitat" From 36a3a12ad71f3df86be1959c42250901f22bb9db Mon Sep 17 00:00:00 2001 From: nitin sanghi Date: Fri, 6 Dec 2024 17:19:15 +0530 Subject: [PATCH 5/7] Change pipeline to expeditor Signed-off-by: nitin sanghi --- .expeditor/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.expeditor/config.yml b/.expeditor/config.yml index 7f0ad6f2..07c0aef7 100644 --- a/.expeditor/config.yml +++ b/.expeditor/config.yml @@ -62,7 +62,7 @@ subscriptions: - 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/build + - trigger_pipeline:habitat/test pipelines: - verify: From 0a29508325d44750803f0a552b8c134b086afde7 Mon Sep 17 00:00:00 2001 From: nitin sanghi Date: Fri, 6 Dec 2024 17:25:57 +0530 Subject: [PATCH 6/7] remove pipeline create config Signed-off-by: nitin sanghi --- .expeditor/config.yml | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/.expeditor/config.yml b/.expeditor/config.yml index 07c0aef7..d38825ae 100644 --- a/.expeditor/config.yml +++ b/.expeditor/config.yml @@ -67,17 +67,4 @@ subscriptions: pipelines: - verify: description: Pull Request validation tests - public: true - - habitat/publish: - 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 \ No newline at end of file + public: true \ No newline at end of file From d798e4eccb9ddf5f693a5596eca1fba6ce6565b1 Mon Sep 17 00:00:00 2001 From: nitin sanghi Date: Fri, 6 Dec 2024 17:49:48 +0530 Subject: [PATCH 7/7] pkg indent fix Signed-off-by: nitin sanghi --- habitat/tests/test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/habitat/tests/test.sh b/habitat/tests/test.sh index 0e0f3dde..50195d51 100755 --- a/habitat/tests/test.sh +++ b/habitat/tests/test.sh @@ -2,7 +2,7 @@ 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"