Skip to content

tetragon: factor args processing #403

tetragon: factor args processing

tetragon: factor args processing #403

name: Windows Build and Smoke
on:
pull_request:
paths-ignore:
- docs/**
push:
branches:
- main
- v*
paths-ignore:
- docs/**
jobs:
windows-ebpf-prog-build:
name: Build Windows process ebpf program
runs-on: windows-2022
timeout-minutes: 15
env:
GOCACHE: D:\gocache
GOMODCACHE: D:\gomodcache
TEMP: D:\temp
CI_EFW_VERSION: 0.20.0
BUILD_CONFIGURATION: Release
BUILD_PLATFORM: x64
steps:
- name: Create Temp Directory
run: mkdir D:\temp
shell: pwsh
- name: Checkout Tetragon Repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
path: go/src/github.com/cilium/tetragon/
- name: Set MSVC Environment Variables
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
powershell.exe "echo 'msvc_tools_path=%VCToolsInstallDir%' | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append"
powershell.exe "echo 'msvc_tools_version=%VCToolsVersion%' | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append"
powershell.exe "echo 'ASAN_WIN_CONTINUE_ON_INTERCEPTION_FAILURE=true' | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append"
powershell.exe "echo 'VCINSTALLDIR=%VCINSTALLDIR%' | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append"
- name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@767f00a3f09872d96a0cb9fcd5e6a4ff33311330
with:
msbuild-architecture: x64
- name: Add Visual Studio LLVM to path
run: |
echo "$env:VCINSTALLDIR\tools\llvm\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
- name: Check for Clang version (MSVC)
run:
clang.exe --version
- name: Check clang version (LLVM)
shell: cmd
run:
'"c:\Program Files\llvm\bin\clang.exe" --version'
- name: Download ntosebpfext
id: download-ntosebpfet
shell: powershell
working-directory: ${{ env.TEMP }}
run: |
git clone --recursive https://github.com/microsoft/ntosebpfext.git
cd ${{ env.TEMP }}\ntosebpfext
git checkout e7dc209a8be0da2ff5d75f5772a0ee0bf4a10383
- name: Copy Process_monitor.c file
run: |
$sourcePath = "${{ github.workspace }}\go\src\github.com\cilium\tetragon\bpf\windows\process_monitor.c"
$destinationPath = "${{ env.TEMP }}\ntosebpfext\tools\process_monitor_bpf\process_monitor.c"
Copy-Item -Path $sourcePath -Destination $destinationPath -Force
shell: powershell
- name: Configuring repo for first build
if: steps.skip_check.outputs.should_skip != 'true'
working-directory: ${{ env.TEMP }}\ntosebpfext
env:
CXXFLAGS: /ZH:SHA_256 ${{ env.CXX_FLAGS }}
LDFLAGS: ${{ env.LD_FLAGS }}
run: |
.\scripts\initialize_repo.ps1
- name: Build
working-directory: ${{ env.TEMP }}\ntosebpfext
run: msbuild -target:Tools\process_monitor_bpf:Rebuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} /p:Platform=${{env.BUILD_PLATFORM}} /bl:${{env.BUILD_PLATFORM}}_${{env.BUILD_CONFIGURATION}}\build_logs\build.binlog ${{env.BUILD_OPTIONS}} ${{env.SOLUTION_FILE_PATH}}
- name: Zip Build Output
working-directory: ${{ env.TEMP }}\ntosebpfext
run: |
Compress-Archive -Path ${{env.BUILD_PLATFORM}}\${{env.BUILD_CONFIGURATION}} -DestinationPath .\build-${{env.BUILD_PLATFORM}}.${{env.BUILD_CONFIGURATION}}.zip
- name: Upload Build Output
uses: actions/upload-artifact@6027e3dd177782cd8ab9af838c04fd81a07f1d47
with:
working-directory: ${{ env.TEMP }}\ntosebpfext
name: ntosebpfext-build-output
path: ${{ env.TEMP }}\ntosebpfext\build-${{env.BUILD_PLATFORM}}.${{env.BUILD_CONFIGURATION}}.zip
retention-days: 5
windows-tetragon-build:
name: Build and Uplod Windows Tetragon and Tetra Binaries
runs-on: windows-2022
timeout-minutes: 15
env:
TEMP: D:\temp
steps:
- name: Create Temp Directory
run: mkdir D:\temp
shell: pwsh
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: '1.24.2'
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
path: go/src/github.com/cilium/tetragon/
- name: Build and Zip tetragon Windows binaries
working-directory: ${{ github.workspace }}\go\src\github.com\cilium\tetragon
shell: powershell
run: |
go build -o .\Tetra.exe .\cmd\tetra\
go build -o .\Tetragon.exe .\cmd\tetragon\
Get-ChildItem
New-Item -ItemType Directory -Path ${{ env.TEMP }}\Tetragon-Windows
Copy-Item *.exe -Destination ${{ env.TEMP }}\Tetragon-Windows
Compress-Archive -Path ${{ env.TEMP }}\Tetragon-Windows\* -DestinationPath ${{ env.TEMP }}\Tetragon-Windows.zip
Get-ChildItem -Recurse ${{ env.TEMP }}
- name: Upload Tetragon Windows binaries
uses: actions/upload-artifact@6027e3dd177782cd8ab9af838c04fd81a07f1d47
with:
name: tetragon-windows-build-output
path: ${{ env.TEMP }}\Tetragon-Windows.zip
retention-days: 5
windows-smoke-test:
name: Deploy and Test tetragon for Windows
runs-on: windows-2022
needs:
- windows-tetragon-build
- windows-ebpf-prog-build
timeout-minutes: 15
strategy:
matrix:
version:
- main
env:
TEMP: D:\temp
steps:
- name: Create Temp Directory
run: mkdir D:\temp
shell: powershell
- name: Create Temp Staging Directory
run: mkdir D:\temp\test
shell: powershell
- name: Download and Install eBPF for Windows
shell: powershell
run: |
Invoke-WebRequest -Uri "https://github.com/microsoft/ebpf-for-windows/releases/download/Release-v0.21.0/Build-native-only.NativeOnlyRelease.x64.zip" -OutFile "$env:TEMP\efw.zip"
Expand-Archive -Path "$env:TEMP\efw.zip" -DestinationPath "$env:TEMP"
Rename-Item -Path "$env:TEMP\Build-native-only NativeOnlyRelease x64" -NewName "$env:TEMP\ebpf"
$setupScript = Get-ChildItem -Path "$env:TEMP\ebpf" -Filter "setup-ebpf.ps1" -Recurse | Select-Object -First 1
if ($setupScript) {
Write-Host "Found setup script: $($setupScript.FullName)"
Set-Location -Path $setupScript.DirectoryName
Write-Host "Changed directory to: $(Get-Location)"
& $setupScript.FullName
} else {
Write-Error "Setup script not found in the extracted package"
exit 1
}
- name: Add eBPF for Windows to PATH
shell: pwsh
run: echo "C:\Program Files\ebpf-for-windows\" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
- name: Download tetragon-windows-build-output
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
path: ${{ env.TEMP }}\test
name: tetragon-windows-build-output
- name: Download ntosebpfext-build-output
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
path: ${{ env.TEMP }}\test
name: ntosebpfext-build-output
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
path: go/src/github.com/cilium/tetragon/
- name: Setup Tetragon for Windows
working-directory: ${{ github.workspace }}\go\src\github.com\cilium\tetragon
shell: powershell
run: ${{ github.workspace }}\go\src\github.com\cilium\tetragon\install\windows\setup-windows.ps1 ${{ env.TEMP }}\test\Tetragon-Windows.zip ${{ env.TEMP }}\test\build-x64.Release.zip
- name: Run Smoke test Windows
env:
TEMP: D:\temp
PATH: ${{ env.TEMP }};"C:\Program Files\ebpf-for-windows"
working-directory: C:\Program Files\Tetragon\cmd
shell: powershell
run: |
# Define the path to the JSON file
$jsonFilePath = "C:\Program Files\Tetragon\events.json"
# Define the path to the executable
$tetragonProcess = "C:\Program Files\Tetragon\cmd\tetragon.exe"
# Start the process in the background and capture its PID
$tetragonBackgroundProcess = Start-Process -FilePath "$tetragonProcess" -ArgumentList "--export-filename ""$jsonFilePath""" -RedirectStandardOutput "C:\Program Files\Tetragon\tetragon.log" -NoNewWindow -PassThru
Start-Sleep -Seconds 5
if(Get-Process -id $tetragonBackgroundProcess.Id) {
Write-Host "Tetragon Running "
}
else {
throw "Tetragon is Not Running"
}
$notepad = Start-Process -FilePath "C:\Windows\System32\notepad.exe" -PassThru
$notepadPID = $notepad.Id
Write-Host "Process launched with PID: $notepadPID"
$searchString = "\{\""process_exec\""\:\{\""process\""\:\{\""exec_id\""\:\"".{16,30}\""\,.{0,1}\""pid\""\:$notepadPID\,.{0,1}\""uid\""\:[0-9]{0,9}\,.{0,1}\""binary\""\:\""C:\\\\Windows\\\\system32\\\\notepad.exe\"""
Write-Host "Looking for regex: $searchString"
# Load the JSON content
$jsonContent = Get-Content -Path $jsonFilePath
# Search for the PID in the JSON file
if ($jsonContent -match $searchString) {
Write-Host "Found PID $notepadPID in JSON file: $searchString"
} else {
Write-Host "PID $notepadPID not found in event file: $jsonContent "
throw "PID not found in event JSON file."
}