Skip to content

Commit

Permalink
add pipleline for build, publish
Browse files Browse the repository at this point in the history
  • Loading branch information
Sachin committed Dec 3, 2024
1 parent e339b06 commit f039418
Show file tree
Hide file tree
Showing 5 changed files with 315 additions and 51 deletions.
116 changes: 116 additions & 0 deletions .github/workflows/habitat-build.yml
Original file line number Diff line number Diff line change
@@ -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
113 changes: 113 additions & 0 deletions .github/workflows/habitat-publish.yml
Original file line number Diff line number Diff line change
@@ -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
94 changes: 43 additions & 51 deletions habitat/plan.sh
Original file line number Diff line number Diff line change
@@ -1,84 +1,76 @@
export HAB_BLDR_CHANNEL="LTS-2024"
pkg_name=fauxhai
pkg_origin=core
pkg_description="Easily mock full ohai data"
pkg_license=('Apache-2.0')
pkg_deps=(
core/ruby31
core/bash
)
pkg_origin=chef
ruby_pkg="core/ruby3_1"
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 <<EOF > "$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"
export GEM_HOME="$pkg_prefix/vendor"
export GEM_PATH="$GEM_PATH"
# Execute the Fauxhai binary
exec $(pkg_path_for core/ruby31)/bin/ruby $real_bin "\$@"
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
}
}
20 changes: 20 additions & 0 deletions habitat/tests/test.ps1
Original file line number Diff line number Diff line change
@@ -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"
}
Loading

0 comments on commit f039418

Please sign in to comment.