Skip to content

Commit

Permalink
add pipleline for build, publish, test cases
Browse files Browse the repository at this point in the history
Signed-off-by: Sachin <[email protected]>
  • Loading branch information
Sachin committed Dec 3, 2024
1 parent 4e98b8c commit 8b91d89
Show file tree
Hide file tree
Showing 5 changed files with 318 additions and 0 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 "berkshelf" | 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 "berkshelf")
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
45 changes: 45 additions & 0 deletions .github/workflows/verify-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Run Rake Tests

on:
push:
branches:
- workstation-LTS
pull_request:
branches:
- workstation-LTS

jobs:
unit-tests:
name: Execute Tests cases
runs-on: ubuntu-latest

steps:
# Step 1: Checkout the code
- name: Checkout Code
uses: actions/checkout@v4

# Step 2: Set up Ruby
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: 3.1 # Use Ruby 3.1 as specified

# Step 3: Install system dependencies
- name: Install Dependencies
run: |
sudo apt-get update -y
sudo apt-get install -y graphviz
# Step 4: Install project dependencies
- name: Install Bundler and Dependencies
run: |
rm -f .bundle/config
gem install bundler
bundle config set --local path 'vendor/bundle'
bundle install --jobs=3 --retry=3
# Step 5: Run the Rake tests
- name: Run Rake Tests
run: |
bundle exec rake
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"


$version=hab pkg exec "${pkg_ident}" berks -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 "Berkshelf working fine"
}
else {
Write-Error "Berkshelf version not met expected $package_version actual version $actual_version "
throw "Berkshelf windows pipeline not working for hab pkg"
}
23 changes: 23 additions & 0 deletions habitat/tests/test.sh
Original file line number Diff line number Diff line change
@@ -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}" berks -v | sed -E 's/.*: ([0-9]+\.[0-9]+\.[0-9]+).*/\1/')
[[ "$package_version" = "$actual_version" ]] || error "Berkshelf version is not the expected version. Expected '$package_version', got '$actual_version'"

0 comments on commit 8b91d89

Please sign in to comment.