From 7d59c31aadab6edc73555950d5ccbd0d93c457fa Mon Sep 17 00:00:00 2001 From: Ashique Saidalavi Date: Wed, 4 Dec 2024 13:55:21 +0530 Subject: [PATCH 1/6] Tests for the linux platform Signed-off-by: Ashique Saidalavi --- .github/workflows/habitat-build.yml | 116 ++++++++++++++++++++++++++++ habitat/tests/test.sh | 25 ++++++ 2 files changed, 141 insertions(+) create mode 100644 .github/workflows/habitat-build.yml create mode 100644 habitat/tests/test.sh diff --git a/.github/workflows/habitat-build.yml b/.github/workflows/habitat-build.yml new file mode 100644 index 0000000..c5b556d --- /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 "chef-vault" | 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_NONINTERACTIVE = "true" +# $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 "chef-vault") +# hab pkg install ./results/$hartfile +# . ./results/last_build.ps1 +# habitat/tests/test.ps1 $pkg_ident \ No newline at end of file diff --git a/habitat/tests/test.sh b/habitat/tests/test.sh new file mode 100644 index 0000000..bb5f881 --- /dev/null +++ b/habitat/tests/test.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +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 "--- :mag_right: Testing ${pkg_ident} executables" +help_message=$(hab pkg exec "${pkg_ident}" -- chef-vault -h) +original_help="Usage: chef-vault" +[[ $help_message =~ $original_help ]] || error "chef-vault help command is not as expected" From 9f9d281401bb37930758173af9e796e91bfd90f3 Mon Sep 17 00:00:00 2001 From: Ashique Saidalavi Date: Wed, 4 Dec 2024 16:08:39 +0530 Subject: [PATCH 2/6] Added the windows pipelines Signed-off-by: Ashique Saidalavi --- .github/workflows/habitat-build.yml | 46 ++++++++++++++--------------- habitat/tests/test.ps1 | 21 +++++++++++++ 2 files changed, 44 insertions(+), 23 deletions(-) create mode 100644 habitat/tests/test.ps1 diff --git a/.github/workflows/habitat-build.yml b/.github/workflows/habitat-build.yml index c5b556d..9f89556 100644 --- a/.github/workflows/habitat-build.yml +++ b/.github/workflows/habitat-build.yml @@ -91,26 +91,26 @@ jobs: 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_NONINTERACTIVE = "true" -# $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 "chef-vault") -# hab pkg install ./results/$hartfile -# . ./results/last_build.ps1 -# habitat/tests/test.ps1 $pkg_ident \ No newline at end of file + - 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_NONINTERACTIVE = "true" + $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 "chef-vault") + hab pkg install ./results/$hartfile + . ./results/last_build.ps1 + habitat/tests/test.ps1 $pkg_ident \ No newline at end of file diff --git a/habitat/tests/test.ps1 b/habitat/tests/test.ps1 new file mode 100644 index 0000000..18b23be --- /dev/null +++ b/habitat/tests/test.ps1 @@ -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-vault -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" +} From d799eb2dec3a176bffb02e0cc61c8407641ee3f9 Mon Sep 17 00:00:00 2001 From: Ashique Saidalavi Date: Wed, 4 Dec 2024 17:44:25 +0530 Subject: [PATCH 3/6] Fixed the windows pipelines Signed-off-by: Ashique Saidalavi --- habitat/tests/test.ps1 | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/habitat/tests/test.ps1 b/habitat/tests/test.ps1 index 18b23be..2c66943 100644 --- a/habitat/tests/test.ps1 +++ b/habitat/tests/test.ps1 @@ -6,16 +6,15 @@ param ( Write-Host "--- :fire: Smokish test" # Pester the Package -$version=hab pkg exec "${pkg_ident}" chef-vault -v -$actual_version=[Regex]::Match($version,"([0-9]+.[0-9]+.[0-9]+)").Value -$package_version=$PackageIdentifier.split("/",4)[2] +$help_message=hab pkg exec "${pkg_ident}" -- chef-vault -h +$original_message="Usage: chef-vault" -Write-Host "package_version $package_version actual version $actual_version" -if ($package_version -eq $actual_version) +Write-Host "Checking the help message of the package" +if ($help_message -like $original_message) { - Write "Chef-cli working fine" + Write "Chef-vault is 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" + Write-Error "chef-vault binary doesn't return the correct usage message " + throw "Chef-vault windows pipeline not working for hab pkg" } From e2a0e770824398f064f9122492134ee349dabd66 Mon Sep 17 00:00:00 2001 From: Ashique Saidalavi Date: Wed, 4 Dec 2024 17:46:01 +0530 Subject: [PATCH 4/6] Publish pipeline Signed-off-by: Ashique Saidalavi --- .github/workflows/habitat-publish.yml | 111 ++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 .github/workflows/habitat-publish.yml diff --git a/.github/workflows/habitat-publish.yml b/.github/workflows/habitat-publish.yml new file mode 100644 index 0000000..d9b7df2 --- /dev/null +++ b/.github/workflows/habitat-publish.yml @@ -0,0 +1,111 @@ +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!!" From 91e47a56f3a97468bbd55c8c54a19341c5d74828 Mon Sep 17 00:00:00 2001 From: Ashique Saidalavi Date: Wed, 4 Dec 2024 19:02:28 +0530 Subject: [PATCH 5/6] logs for the testing Signed-off-by: Ashique Saidalavi --- habitat/tests/test.ps1 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/habitat/tests/test.ps1 b/habitat/tests/test.ps1 index 2c66943..157be7b 100644 --- a/habitat/tests/test.ps1 +++ b/habitat/tests/test.ps1 @@ -10,6 +10,8 @@ $help_message=hab pkg exec "${pkg_ident}" -- chef-vault -h $original_message="Usage: chef-vault" Write-Host "Checking the help message of the package" +Write-Host "Expected: $original_message" +Write-Host "Actual: $help_message" if ($help_message -like $original_message) { Write "Chef-vault is working fine" From 28b9f1a2b5c11b29b30266e573aa3b6f52d3dcd0 Mon Sep 17 00:00:00 2001 From: Ashique Saidalavi Date: Wed, 4 Dec 2024 19:56:13 +0530 Subject: [PATCH 6/6] Updated the includes method Signed-off-by: Ashique Saidalavi --- habitat/tests/test.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/habitat/tests/test.ps1 b/habitat/tests/test.ps1 index 157be7b..ec127ee 100644 --- a/habitat/tests/test.ps1 +++ b/habitat/tests/test.ps1 @@ -12,7 +12,7 @@ $original_message="Usage: chef-vault" Write-Host "Checking the help message of the package" Write-Host "Expected: $original_message" Write-Host "Actual: $help_message" -if ($help_message -like $original_message) +if ($help_message.Contains($original_message)) { Write "Chef-vault is working fine" }