Skip to content

Timeline

Timeline #285

Workflow file for this run

name: CI
on:
push:
branches: [main]
pull_request:
types: [opened, synchronize, reopened, labeled]
branches: ["**"]
workflow_call:
jobs:
lint:
name: Lint
if: ${{ github.event_name != 'pull_request' || (github.event_name == 'pull_request' && github.event.action != 'labeled') || (github.event_name == 'pull_request' && github.event.action == 'labeled' && github.event.label.name == 'publish-dev-test') }}
runs-on: ubuntu-24.04
strategy:
fail-fast: true
max-parallel: 2
matrix:
go: ["stable"]
steps:
- name: Install dependencies
run: sudo apt-get install -y llvm clang dwz cmake curl unzip
- name: Install Zydis
shell: bash
run: |
cd /tmp
git clone --depth 1 --branch v3.1.0 --recursive https://github.com/zyantific/zydis.git
cd zydis
rm -rf build
mkdir build
cd build
cmake -DZYDIS_BUILD_EXAMPLES=OFF ..
make -j$(nproc)
sudo make install
cd zycore
sudo make install
- name: Check out
uses: actions/checkout@v4
- name: Set up Go ${{matrix.go}}
uses: actions/setup-go@v5
with:
go-version: ${{matrix.go}}
check-latest: true
cache-dependency-path: |
go.sum
id: go
- name: Install gRPC dependencies
env:
PB_URL: "https://github.com/protocolbuffers/protobuf/releases/download/v24.4/"
PB_FILE: "protoc-24.4-linux-x86_64.zip"
INSTALL_DIR: "/usr/local"
run: |
go install google.golang.org/protobuf/cmd/[email protected]
go install google.golang.org/grpc/cmd/[email protected]
curl -LO "$PB_URL/$PB_FILE"
sudo unzip "$PB_FILE" -d "$INSTALL_DIR" 'bin/*' 'include/*'
sudo chmod +xr "$INSTALL_DIR/bin/protoc"
sudo find "$INSTALL_DIR/include" -type d -exec chmod +x {} \;
sudo find "$INSTALL_DIR/include" -type f -exec chmod +r {} \;
rm "$PB_FILE"
- name: Linter
run: |
go version
make lint TARGET_ARCH=amd64
test:
name: Test
if: ${{ github.event_name != 'pull_request' || (github.event_name == 'pull_request' && github.event.action != 'labeled') || (github.event_name == 'pull_request' && github.event.action == 'labeled' && github.event.label.name == 'publish-dev-test') }}
strategy:
fail-fast: true
max-parallel: 2
matrix:
go: ["stable"]
# Tests fail on arm64, so we only run them on x86_64
os: ["ubuntu-24.04"]
runs-on: ${{ matrix.os }}
steps:
- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y --no-install-recommends gcc make llvm clang-16 dwz cmake curl unzip
- name: Check out
uses: actions/checkout@v4
- name: Set up Go ${{matrix.go}}
uses: actions/setup-go@v5
with:
go-version: ${{matrix.go}}
check-latest: true
cache-dependency-path: |
go.sum
id: go
- name: Install gRPC dependencies
env:
PB_URL: "https://github.com/protocolbuffers/protobuf/releases/download/v24.4/"
PB_FILE: "protoc-24.4-linux-%arch%.zip"
INSTALL_DIR: "/usr/local"
run: |
go install google.golang.org/protobuf/cmd/[email protected]
go install google.golang.org/grpc/cmd/[email protected]
ARCH=$(uname -m | sed 's/aarch64/aarch_64/')
PB_FILE=$(echo $PB_FILE | sed "s/%arch%/$ARCH/g")
curl -LO "$PB_URL/$PB_FILE"
sudo unzip "$PB_FILE" -d "$INSTALL_DIR" 'bin/*' 'include/*'
sudo chmod +xr "$INSTALL_DIR/bin/protoc"
sudo find "$INSTALL_DIR/include" -type d -exec chmod +x {} \;
sudo find "$INSTALL_DIR/include" -type f -exec chmod +r {} \;
rm "$PB_FILE"
- name: Build
run: |
echo $PATH
make
- name: Tests
run: |
make test
build-integration-test-binaries:
name: Build integration test binaries
if: ${{ github.event_name != 'pull_request' || (github.event_name == 'pull_request' && github.event.action != 'labeled') || (github.event_name == 'pull_request' && github.event.action == 'labeled' && github.event.label.name == 'publish-dev-test') }}
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install dependencies
run: sudo apt-get install -y llvm clang-16 dwz cmake curl unzip
- name: Install Zydis
shell: bash
run: |
cd /tmp
git clone --depth 1 --branch v3.1.0 --recursive https://github.com/zyantific/zydis.git
cd zydis
rm -rf build
mkdir build
cd build
cmake -DZYDIS_BUILD_EXAMPLES=OFF ..
make -j$(nproc)
sudo make install
cd zycore
sudo make install
- name: Prepare integration test binaries for qemu tests
run: |
make integration-test-binaries
- name: Upload integration test binaries
uses: actions/upload-artifact@v4
with:
name: integration-test-binaries
path: support/*.test
integration-tests:
name: Integration tests (kernel v${{ matrix.kernel-version }})
runs-on: ubuntu-24.04
needs: build-integration-test-binaries
if: ${{ github.event_name != 'pull_request' || (github.event_name == 'pull_request' && github.event.action != 'labeled') || (github.event_name == 'pull_request' && github.event.action == 'labeled' && github.event.label.name == 'publish-dev-test') }}
strategy:
matrix:
kernel-version: [ "4.19.314", "5.4.276", "5.10.217", "5.15.159", "6.1.91", "6.6.31", "6.8.10", "6.9.1" ]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
- name: Install dependencies
run: |
sudo apt-get -y update
sudo apt-get -y install qemu-system-x86
go install github.com/florianl/[email protected]
sudo mv ~/go/bin/bluebox /usr/local/bin/.
- name: Fetch integration test binaries
uses: actions/download-artifact@v4
with: { name: integration-test-binaries }
- name: Fetch precompiled kernels
run: |
install -d ci-kernels
echo "FROM ghcr.io/cilium/ci-kernels:${{ matrix.kernel-version }}" | docker buildx build --quiet --pull --output="ci-kernels" -
mv ci-kernels/boot/ ci-kernels/${{ matrix.kernel-version }}/
- name: Test on kernel ${{ matrix.kernel-version }}
run: |
chmod a+rx *.test
support/run-tests.sh ${{ matrix.kernel-version }}
build:
env:
RELEASE_VERSION: ${{ (github.ref_name == 'main' && 'dev') || (github.event_name != 'pull_request' && github.ref_name) || github.head_ref }}
name: Build
needs: [ test, lint, integration-tests ]
if: ${{ github.event_name != 'pull_request' || (github.event_name == 'pull_request' && github.event.action != 'labeled') || (github.event_name == 'pull_request' && github.event.action == 'labeled' && github.event.label.name == 'publish-dev-test') }}
strategy:
fail-fast: true
max-parallel: 2
matrix:
go: ["stable"]
os: ["arm-4core-linux-ubuntu24.04", "ubuntu-24.04"]
runs-on: ${{ matrix.os }}
steps:
- name: Set version
run: echo "VERSION=${RELEASE_VERSION}+`echo ${GITHUB_SHA::7}`.${{ github.run_id }}" >> $GITHUB_ENV
- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y --no-install-recommends gcc make llvm clang-16 dwz cmake curl unzip
- name: Install Zydis
shell: bash
run: |
cd /tmp
git clone --depth 1 --branch v3.1.0 --recursive https://github.com/zyantific/zydis.git
cd zydis
rm -rf build
mkdir build
cd build
cmake -DZYDIS_BUILD_EXAMPLES=OFF ..
make -j$(nproc)
sudo make install
cd zycore
sudo make install
- name: Check out
uses: actions/checkout@v4
- name: Set up Go ${{matrix.go}}
uses: actions/setup-go@v5
with:
go-version: ${{matrix.go}}
check-latest: true
cache-dependency-path: |
go.sum
id: go
- name: Install gRPC dependencies
env:
PB_URL: "https://github.com/protocolbuffers/protobuf/releases/download/v24.4/"
PB_FILE: "protoc-24.4-linux-%arch%.zip"
INSTALL_DIR: "/usr/local"
run: |
go install google.golang.org/protobuf/cmd/[email protected]
go install google.golang.org/grpc/cmd/[email protected]
ARCH=$(uname -m | sed 's/aarch64/aarch_64/')
PB_FILE=$(echo $PB_FILE | sed "s/%arch%/$ARCH/g")
curl -LO "$PB_URL/$PB_FILE"
sudo unzip "$PB_FILE" -d "$INSTALL_DIR" 'bin/*' 'include/*'
sudo chmod +xr "$INSTALL_DIR/bin/protoc"
sudo find "$INSTALL_DIR/include" -type d -exec chmod +x {} \;
sudo find "$INSTALL_DIR/include" -type f -exec chmod +r {} \;
rm "$PB_FILE"
- name: Build
run: |
echo $PATH
make
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: agent-${{ matrix.os == 'arm-4core-linux-ubuntu24.04' && 'aarch64' || 'x86_64' }}
path: otel-profiling-agent
publish:
env:
RELEASE_VERSION: ${{ github.event_name == 'pull_request' && 'dev-test' || 'dev' }}
if: ${{ (github.event_name == 'push' && github.ref == 'refs/heads/main') || (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'publish-dev-test') )}}
name: Publish pre-release
needs: [build]
runs-on: ubuntu-24.04
steps:
- name: Download artifacts
uses: actions/download-artifact@v4
- name: Create assets
run: |
tar czf otel-profiling-agent-${RELEASE_VERSION}-aarch64.tar.gz -C agent-aarch64 .
tar czf otel-profiling-agent-${RELEASE_VERSION}-x86_64.tar.gz -C agent-x86_64 .
sha256sum otel-profiling-agent-${RELEASE_VERSION}-aarch64.tar.gz otel-profiling-agent-${RELEASE_VERSION}-x86_64.tar.gz > sha256sums.txt
- name: Create or move previous dev tag
continue-on-error: true
uses: actions/github-script@v7
with:
script: |
github.rest.git.createRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: 'refs/tags/${{ env.RELEASE_VERSION }}',
sha: context.sha
}).catch(err => {
if (err.status !== 422) throw err;
github.rest.git.updateRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: 'tags/${{ env.RELEASE_VERSION }}',
sha: context.sha
})
});
- name: Create pre-release
uses: ncipollo/release-action@v1
with:
artifacts: "otel-profiling-agent-${{ env.RELEASE_VERSION }}-*.tar.gz,sha256sums.txt"
allowUpdates: true
removeArtifacts: true
omitBody: true
omitDraftDuringUpdate: true
prerelease: true
draft: false
tag: ${{ env.RELEASE_VERSION }}