mirror of
https://github.com/dromara/hertzbeat.git
synced 2026-09-17 09:40:58 +00:00
141 lines
5.6 KiB
YAML
141 lines
5.6 KiB
YAML
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
name: Collector Native Release
|
|
|
|
run-name: Native collector release build (${{ github.ref_name }})
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
build-native-collector:
|
|
name: Native collector (${{ matrix.platform }})
|
|
permissions:
|
|
contents: read
|
|
timeout-minutes: 120
|
|
runs-on: ${{ matrix.runner }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- platform: linux-amd64
|
|
runner: ubuntu-24.04
|
|
archive_ext: tar.gz
|
|
- platform: linux-arm64
|
|
runner: ubuntu-24.04-arm
|
|
archive_ext: tar.gz
|
|
- platform: windows-amd64
|
|
runner: windows-latest
|
|
archive_ext: zip
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Set up GraalVM JDK 25
|
|
uses: graalvm/setup-graalvm@186d0493a2df5eb62df5ecc498883d18fd58c303 # v1.6.2
|
|
with:
|
|
distribution: graalvm-community
|
|
java-version: '25'
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
cache: maven
|
|
native-image-job-reports: 'true'
|
|
|
|
- name: Verify toolchain
|
|
shell: pwsh
|
|
run: |
|
|
java -version
|
|
native-image --version
|
|
mvn -version
|
|
|
|
- name: Build native collector package
|
|
run: mvn -B -pl hertzbeat-collector/hertzbeat-collector-collector -am -Pnative -DskipTests package
|
|
|
|
- name: Locate native collector package
|
|
id: package
|
|
shell: pwsh
|
|
run: |
|
|
$package = Get-ChildItem -Path "dist/apache-hertzbeat-collector-native-*-${{ matrix.platform }}-bin.${{ matrix.archive_ext }}" | Select-Object -First 1
|
|
if (-not $package) {
|
|
throw "Native collector package not found for ${{ matrix.platform }}"
|
|
}
|
|
"archive=$($package.FullName)" >> $env:GITHUB_OUTPUT
|
|
|
|
- name: Smoke test native collector package
|
|
shell: pwsh
|
|
run: |
|
|
$ErrorActionPreference = "Stop"
|
|
$archive = "${{ steps.package.outputs.archive }}"
|
|
$work = Join-Path ([System.IO.Path]::GetTempPath()) "hzb-smoke"
|
|
Remove-Item -Recurse -Force $work -ErrorAction SilentlyContinue
|
|
New-Item -ItemType Directory -Path $work | Out-Null
|
|
|
|
if ($archive.EndsWith(".zip")) {
|
|
Expand-Archive -Path $archive -DestinationPath $work -Force
|
|
} else {
|
|
tar -xzf $archive -C $work
|
|
}
|
|
|
|
$binary = Get-ChildItem -Path $work -Recurse -File |
|
|
Where-Object { $_.Name -like "apache-hertzbeat-collector-native-*" -and $_.Name -notlike "*.txt" } |
|
|
Where-Object { $_.Length -gt 10MB } | Select-Object -First 1
|
|
if (-not $binary) { throw "native executable not found in $archive" }
|
|
$conf = Join-Path $binary.DirectoryName "config"
|
|
Write-Host "executable: $($binary.FullName)"
|
|
|
|
$out = Join-Path $work "stdout.log"
|
|
$err = Join-Path $work "stderr.log"
|
|
$env:MANAGER_HOST = "127.0.0.1"
|
|
$env:IDENTITY = "ci-smoke-${{ matrix.platform }}"
|
|
$proc = Start-Process -FilePath $binary.FullName `
|
|
-ArgumentList "--spring.config.location=$conf$([IO.Path]::DirectorySeparatorChar)" `
|
|
-RedirectStandardOutput $out -RedirectStandardError $err -PassThru
|
|
|
|
# The collector prints "Started Collector" before the runners execute, and past
|
|
# failures crashed after that line, so wait for the ServiceLoader registration too
|
|
# and then confirm the process is still alive.
|
|
$deadline = (Get-Date).AddSeconds(90)
|
|
$registered = $false
|
|
while ((Get-Date) -lt $deadline) {
|
|
Start-Sleep -Seconds 2
|
|
$log = (Get-Content $out, $err -ErrorAction SilentlyContinue) -join "`n"
|
|
if ($log -match "collect strategies") { $registered = $true; break }
|
|
if ($proc.HasExited) { break }
|
|
}
|
|
|
|
Start-Sleep -Seconds 10
|
|
$proc.Refresh()
|
|
$alive = -not $proc.HasExited
|
|
$exitCode = if ($alive) { $null } else { $proc.ExitCode }
|
|
if ($alive) { Stop-Process -Id $proc.Id -Force -ErrorAction SilentlyContinue }
|
|
|
|
$log = (Get-Content $out, $err -ErrorAction SilentlyContinue) -join "`n"
|
|
Write-Host "----- collector output (tail) -----"
|
|
Write-Host (($log -split "`n") | Select-Object -Last 40 | Out-String)
|
|
Write-Host "-----------------------------------"
|
|
|
|
if (-not $alive) { throw "collector process exited (exit code $exitCode)" }
|
|
if (-not $registered) { throw "collector stayed up but never registered its collect strategies" }
|
|
Write-Host "smoke test passed for ${{ matrix.platform }}"
|
|
|
|
- name: Upload native collector package
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: apache-hertzbeat-collector-native-${{ matrix.platform }}
|
|
path: ${{ steps.package.outputs.archive }}
|
|
retention-days: 14
|