Skip to content

Commit 25587f6

Browse files
authored
Merge pull request #22 from IBM/jo5ta/dev
Jo5ta/dev
2 parents 30e62ef + 6868897 commit 25587f6

File tree

11 files changed

+375
-26
lines changed

11 files changed

+375
-26
lines changed

.github/workflows/ci.yml

Lines changed: 72 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ env:
1313
CONTAINER_CMD: docker
1414
CONTAINER_NON_INTERACTIVE: true
1515

16-
# Required for pushing to ghcr.io
16+
# Required for pushing to ghcr.io and creating releases
1717
permissions:
18-
contents: read
18+
contents: write
1919
packages: write
2020

2121
jobs:
@@ -88,3 +88,73 @@ jobs:
8888

8989
- name: Package Validate
9090
run: ./scripts/container.sh ./scripts/ci-cd/step_package_validate.sh --skip-srpm-rebuild
91+
92+
- name: Upload SRPM artifact
93+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
94+
uses: actions/upload-artifact@v4
95+
with:
96+
name: srpm
97+
path: build/packages/*.src.rpm
98+
retention-days: 1
99+
100+
# ============================================
101+
# Release (only on push to main)
102+
# ============================================
103+
release:
104+
runs-on: ubuntu-latest
105+
needs: package
106+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
107+
steps:
108+
- name: Checkout code
109+
uses: actions/checkout@v4
110+
111+
- name: Download SRPM artifact
112+
uses: actions/download-artifact@v4
113+
with:
114+
name: srpm
115+
path: packages
116+
117+
- name: Get version and generate release info
118+
id: release_info
119+
env:
120+
COMMIT_SHA: ${{ github.sha }}
121+
run: |
122+
VERSION=$(head -n1 VERSION.md)
123+
echo "version=$VERSION" >> $GITHUB_OUTPUT
124+
125+
# Create a unique tag using version + short commit hash
126+
SHORT_SHA=$(echo "$COMMIT_SHA" | cut -c1-7)
127+
echo "tag=v${VERSION}+${SHORT_SHA}" >> $GITHUB_OUTPUT
128+
129+
# Generate checksums
130+
cd packages
131+
sha256sum *.src.rpm > SHA256SUMS
132+
133+
# Build release body with checksums embedded
134+
cd ..
135+
cat > release_body.md << EOF
136+
Release of Common Low Level Tracing Kit
137+
138+
**Commit:** ${COMMIT_SHA}
139+
140+
## Install from SRPM
141+
\`\`\`bash
142+
rpmbuild --rebuild clltk-${VERSION}-*.src.rpm
143+
sudo dnf install ~/rpmbuild/RPMS/x86_64/clltk-*.rpm
144+
\`\`\`
145+
146+
## Checksums (SHA256)
147+
\`\`\`
148+
$(cat packages/SHA256SUMS)
149+
\`\`\`
150+
EOF
151+
152+
- name: Create Release
153+
uses: softprops/action-gh-release@v2
154+
with:
155+
tag_name: ${{ steps.release_info.outputs.tag }}
156+
name: ${{ steps.release_info.outputs.version }}
157+
body_path: release_body.md
158+
files: |
159+
packages/*.src.rpm
160+
packages/SHA256SUMS

CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ if(CLLTK_TESTS AND EXISTS ./tests/)
7171
add_subdirectory(./tests/)
7272
endif()
7373

74+
# Generate build info header (for command line tool)
75+
# Note: Must be after all CLLTK_* options are defined since build_info uses them
76+
include(cmake/CreateBuildInfo.cmake)
77+
7478
# --- CMake package config for find_package(CLLTK) ---
7579
include(CMakePackageConfigHelpers)
7680
include(GNUInstallDirs)

VERSION.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
1.2.57
1+
1.2.58
22

33
# Change log
4+
## 1.2.58
5+
- cli: show features, git hash, license, and URL in --version output
6+
- ci: auto-publish SRPM to GitHub releases when PRs are merged
47
## 1.2.57
58
- refactor: move linux userspace abstraction to unix userspace abstraction
69
- fix: prevent complex_cpp to run if encounter known bad compiler

cmake/CreateBuildInfo.cmake

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# Copyright (c) 2024, International Business Machines
2+
# SPDX-License-Identifier: BSD-2-Clause-Patent
3+
4+
# ============================================================================
5+
# Build info generation (for command line tool)
6+
# ============================================================================
7+
# This generates build_info.gen.h which contains:
8+
# - Version string
9+
# - Git commit hash and dirty flag
10+
# - Project metadata (maintainer, license, URL)
11+
# - Feature flags (which components are enabled)
12+
#
13+
# Note: This is separate from version.gen.h because:
14+
# - version.gen.h is used by the tracing library (including kernel module)
15+
# - build_info.gen.h is only used by the command line tool
16+
# - The kernel build doesn't use CMake, so it can't determine feature flags
17+
#
18+
# This file must be included AFTER all CLLTK_* options are defined.
19+
# ============================================================================
20+
21+
# Convert CMake options to 1/0 for the shell script
22+
# These need to be evaluated at build time, but since options don't change
23+
# after configure, we can set them here
24+
if(CLLTK_TRACING)
25+
set(CLLTK_HAS_TRACING_FLAG 1)
26+
else()
27+
set(CLLTK_HAS_TRACING_FLAG 0)
28+
endif()
29+
30+
if(CLLTK_SNAPSHOT)
31+
set(CLLTK_HAS_SNAPSHOT_FLAG 1)
32+
else()
33+
set(CLLTK_HAS_SNAPSHOT_FLAG 0)
34+
endif()
35+
36+
if(CLLTK_CPP_DECODER)
37+
set(CLLTK_HAS_CPP_DECODER_FLAG 1)
38+
else()
39+
set(CLLTK_HAS_CPP_DECODER_FLAG 0)
40+
endif()
41+
42+
if(CLLTK_PYTHON_DECODER)
43+
set(CLLTK_HAS_PYTHON_DECODER_FLAG 1)
44+
else()
45+
set(CLLTK_HAS_PYTHON_DECODER_FLAG 0)
46+
endif()
47+
48+
if(CLLTK_KERNEL_TRACING)
49+
set(CLLTK_HAS_KERNEL_TRACING_FLAG 1)
50+
else()
51+
set(CLLTK_HAS_KERNEL_TRACING_FLAG 0)
52+
endif()
53+
54+
add_custom_target(clltk-build-info-file
55+
COMMAND ${CMAKE_COMMAND} -E env
56+
CLLTK_HAS_TRACING=${CLLTK_HAS_TRACING_FLAG}
57+
CLLTK_HAS_SNAPSHOT=${CLLTK_HAS_SNAPSHOT_FLAG}
58+
CLLTK_HAS_CPP_DECODER=${CLLTK_HAS_CPP_DECODER_FLAG}
59+
CLLTK_HAS_PYTHON_DECODER=${CLLTK_HAS_PYTHON_DECODER_FLAG}
60+
CLLTK_HAS_KERNEL_TRACING=${CLLTK_HAS_KERNEL_TRACING_FLAG}
61+
${CMAKE_CURRENT_LIST_DIR}/gen_version_header.sh
62+
-b ${CMAKE_CURRENT_LIST_DIR}/build_info.h.template
63+
-B ${CLLTK_VERSION_INCLUDE_PATH}/CommonLowLevelTracingKit/build_info.gen.h
64+
BYPRODUCTS
65+
${CLLTK_VERSION_INCLUDE_PATH}/CommonLowLevelTracingKit/build_info.gen.h
66+
DEPENDS
67+
clltk-version-file
68+
${CMAKE_CURRENT_LIST_DIR}/gen_version_header.sh
69+
${CMAKE_CURRENT_LIST_DIR}/build_info.h.template
70+
${CMAKE_CURRENT_LIST_DIR}/../VERSION.md
71+
)
72+
73+
add_library(clltk-build-info INTERFACE)
74+
target_include_directories(clltk-build-info
75+
INTERFACE
76+
$<BUILD_INTERFACE:${CLLTK_VERSION_INCLUDE_PATH}>
77+
)
78+
79+
add_dependencies(clltk-build-info clltk-build-info-file)

cmake/CreateVersion.cmake

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1+
# Copyright (c) 2024, International Business Machines
2+
# SPDX-License-Identifier: BSD-2-Clause-Patent
13

4+
# Parse version from VERSION.md - this must happen early so that
5+
# CLLTK_VERSION_STRING, CLLTK_VERSION_MAJOR, etc. are available
6+
# when library subdirectories are processed (for SOVERSION)
27

38
file(READ "${CMAKE_CURRENT_LIST_DIR}/../VERSION.md" VERSION_CONTENTS)
49
string(REGEX MATCH "^[0-9]+\\.[0-9]+\\.[0-9]+" CLLTK_VERSION_STRING "${VERSION_CONTENTS}")
@@ -31,4 +36,4 @@ target_include_directories(clltk-version
3136
$<BUILD_INTERFACE:${CLLTK_VERSION_INCLUDE_PATH}>
3237
)
3338

34-
add_dependencies(clltk-version clltk-version-file)
39+
add_dependencies(clltk-version clltk-version-file)

cmake/build_info.h.template

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Copyright (c) 2024, International Business Machines
2+
// SPDX-License-Identifier: BSD-2-Clause-Patent
3+
//
4+
// Auto-generated file - do not edit manually
5+
6+
#ifndef _CLLTK_BUILD_INFO_GEN_H_
7+
#define _CLLTK_BUILD_INFO_GEN_H_
8+
9+
// Version information (also available in version.gen.h)
10+
#define CLLTK_BUILD_VERSION_STR "$CLLTK_VERSION_MAJOR.$CLLTK_VERSION_MINOR.$CLLTK_VERSION_PATCH"
11+
12+
// Git information
13+
#define CLLTK_BUILD_GIT_HASH "$CLLTK_GIT_HASH"
14+
#define CLLTK_BUILD_GIT_DIRTY $CLLTK_GIT_DIRTY
15+
16+
// Project information
17+
#define CLLTK_BUILD_TOOL_NAME "clltk"
18+
#define CLLTK_BUILD_FULL_NAME "Common Low Level Tracing Kit"
19+
#define CLLTK_BUILD_MAINTAINER "International Business Machines"
20+
#define CLLTK_BUILD_LICENSE "BSD-2-Clause-Patent"
21+
#define CLLTK_BUILD_URL "https://github.com/IBM/CommonLowLevelTracingKit"
22+
23+
// Feature flags (1 = enabled, 0 = disabled)
24+
#define CLLTK_HAS_TRACING $CLLTK_HAS_TRACING
25+
#define CLLTK_HAS_SNAPSHOT $CLLTK_HAS_SNAPSHOT
26+
#define CLLTK_HAS_CPP_DECODER $CLLTK_HAS_CPP_DECODER
27+
#define CLLTK_HAS_PYTHON_DECODER $CLLTK_HAS_PYTHON_DECODER
28+
#define CLLTK_HAS_KERNEL_TRACING $CLLTK_HAS_KERNEL_TRACING
29+
30+
#endif // _CLLTK_BUILD_INFO_GEN_H_
31+

cmake/gen_version_header.sh

Lines changed: 95 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,43 @@
22
# Copyright (c) 2024, International Business Machines
33
# SPDX-License-Identifier: BSD-2-Clause-Patent
44

5-
SRC_TOPLEVEL="$(dirname $0)/.."
6-
TEMPLATE="$SRC_TOPLEVEL/cmake/version.h.template"
7-
OUTPUT="$SRC_TOPLEVEL/tracing_library/include/CommonLowLevelTracingKit/version.gen.h"
5+
set -e
6+
7+
SRC_TOPLEVEL="$(dirname "$0")/.."
8+
9+
# Version header generation (optional if only generating build_info)
10+
TEMPLATE=""
11+
OUTPUT=""
12+
13+
# Build info generation (optional, for command line tool)
14+
BUILD_INFO_TEMPLATE=""
15+
BUILD_INFO_OUTPUT=""
16+
17+
# Feature flags (default to 0/unknown when not specified)
18+
CLLTK_HAS_TRACING="${CLLTK_HAS_TRACING:-0}"
19+
CLLTK_HAS_SNAPSHOT="${CLLTK_HAS_SNAPSHOT:-0}"
20+
CLLTK_HAS_CPP_DECODER="${CLLTK_HAS_CPP_DECODER:-0}"
21+
CLLTK_HAS_PYTHON_DECODER="${CLLTK_HAS_PYTHON_DECODER:-0}"
22+
CLLTK_HAS_KERNEL_TRACING="${CLLTK_HAS_KERNEL_TRACING:-0}"
823

924
print_help() {
10-
echo "$0 [-t TEMPLATE_FILE] [-o OUTPUT_FILE]"
25+
echo "$0 [-t TEMPLATE_FILE] [-o OUTPUT_FILE] [-b BUILD_INFO_TEMPLATE] [-B BUILD_INFO_OUTPUT]"
1126
echo "\
27+
Generate version.gen.h and/or build_info.gen.h from templates.
28+
At least one of (-t and -o) or (-b and -B) must be specified.
29+
1230
args:
13-
-t | --template TEMPLAE_FILE (default $TEMPLATE)
14-
-o | --output OUTPUT_FILE (default $OUTPUT)
31+
-t | --template TEMPLATE_FILE version.h template
32+
-o | --output OUTPUT_FILE version.h output
33+
-b | --build-info-template TEMPLATE build_info.h template
34+
-B | --build-info-output OUTPUT build_info.h output
35+
36+
environment variables for build_info (feature flags):
37+
CLLTK_HAS_TRACING (0 or 1, default 0)
38+
CLLTK_HAS_SNAPSHOT (0 or 1, default 0)
39+
CLLTK_HAS_CPP_DECODER (0 or 1, default 0)
40+
CLLTK_HAS_PYTHON_DECODER (0 or 1, default 0)
41+
CLLTK_HAS_KERNEL_TRACING (0 or 1, default 0)
1542
1643
other:
1744
-h | --help this help
@@ -28,6 +55,14 @@ while (($#)) ; do
2855
OUTPUT="$2"
2956
shift 2
3057
;;
58+
-b | --build-info-template)
59+
BUILD_INFO_TEMPLATE="$2"
60+
shift 2
61+
;;
62+
-B | --build-info-output)
63+
BUILD_INFO_OUTPUT="$2"
64+
shift 2
65+
;;
3166
-h | --help)
3267
print_help
3368
exit
@@ -40,16 +75,59 @@ while (($#)) ; do
4075
esac
4176
done
4277

43-
CLLTK_VERSION=$(cat "$SRC_TOPLEVEL/VERSION.md" | head -n1 )
44-
CLLTK_VERSION_MAJOR=$(echo $CLLTK_VERSION | cut -d . -f 1 )
45-
CLLTK_VERSION_MINOR=$(echo $CLLTK_VERSION | cut -d . -f 2 )
46-
CLLTK_VERSION_PATCH=$(echo $CLLTK_VERSION | cut -d . -f 3 )
78+
# Validate that at least one output is requested
79+
if [[ -z "$TEMPLATE" && -z "$BUILD_INFO_TEMPLATE" ]]; then
80+
echo "Error: At least one of -t/-o or -b/-B must be specified"
81+
print_help
82+
exit 1
83+
fi
84+
85+
# Parse version from VERSION.md
86+
CLLTK_VERSION=$(head -n1 "$SRC_TOPLEVEL/VERSION.md")
87+
CLLTK_VERSION_MAJOR=$(echo "$CLLTK_VERSION" | cut -d . -f 1)
88+
CLLTK_VERSION_MINOR=$(echo "$CLLTK_VERSION" | cut -d . -f 2)
89+
CLLTK_VERSION_PATCH=$(echo "$CLLTK_VERSION" | cut -d . -f 3)
4790

48-
temp_file=$(mktemp)
49-
env CLLTK_VERSION_MAJOR=$CLLTK_VERSION_MAJOR \
50-
CLLTK_VERSION_MINOR=$CLLTK_VERSION_MINOR \
51-
CLLTK_VERSION_PATCH=$CLLTK_VERSION_PATCH \
52-
envsubst < "$TEMPLATE" > "$temp_file"
91+
# Get git information
92+
if git -C "$SRC_TOPLEVEL" rev-parse --git-dir > /dev/null 2>&1; then
93+
CLLTK_GIT_HASH=$(git -C "$SRC_TOPLEVEL" rev-parse --short HEAD 2>/dev/null || echo "unknown")
94+
if git -C "$SRC_TOPLEVEL" diff --quiet 2>/dev/null; then
95+
CLLTK_GIT_DIRTY=0
96+
else
97+
CLLTK_GIT_DIRTY=1
98+
fi
99+
else
100+
CLLTK_GIT_HASH="unknown"
101+
CLLTK_GIT_DIRTY=0
102+
fi
53103

54-
rsync --checksum $temp_file $OUTPUT
55-
rm -f "$temp_file"
104+
# Generate version.gen.h (if templates provided)
105+
if [[ -n "$TEMPLATE" && -n "$OUTPUT" ]]; then
106+
temp_file=$(mktemp)
107+
env CLLTK_VERSION_MAJOR="$CLLTK_VERSION_MAJOR" \
108+
CLLTK_VERSION_MINOR="$CLLTK_VERSION_MINOR" \
109+
CLLTK_VERSION_PATCH="$CLLTK_VERSION_PATCH" \
110+
envsubst < "$TEMPLATE" > "$temp_file"
111+
112+
rsync --checksum "$temp_file" "$OUTPUT"
113+
rm -f "$temp_file"
114+
fi
115+
116+
# Generate build_info.gen.h (if templates provided)
117+
if [[ -n "$BUILD_INFO_TEMPLATE" && -n "$BUILD_INFO_OUTPUT" ]]; then
118+
temp_file=$(mktemp)
119+
env CLLTK_VERSION_MAJOR="$CLLTK_VERSION_MAJOR" \
120+
CLLTK_VERSION_MINOR="$CLLTK_VERSION_MINOR" \
121+
CLLTK_VERSION_PATCH="$CLLTK_VERSION_PATCH" \
122+
CLLTK_GIT_HASH="$CLLTK_GIT_HASH" \
123+
CLLTK_GIT_DIRTY="$CLLTK_GIT_DIRTY" \
124+
CLLTK_HAS_TRACING="$CLLTK_HAS_TRACING" \
125+
CLLTK_HAS_SNAPSHOT="$CLLTK_HAS_SNAPSHOT" \
126+
CLLTK_HAS_CPP_DECODER="$CLLTK_HAS_CPP_DECODER" \
127+
CLLTK_HAS_PYTHON_DECODER="$CLLTK_HAS_PYTHON_DECODER" \
128+
CLLTK_HAS_KERNEL_TRACING="$CLLTK_HAS_KERNEL_TRACING" \
129+
envsubst < "$BUILD_INFO_TEMPLATE" > "$temp_file"
130+
131+
rsync --checksum "$temp_file" "$BUILD_INFO_OUTPUT"
132+
rm -f "$temp_file"
133+
fi

command_line_tool/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ target_link_libraries(clltk-cmd
2929
PRIVATE
3030
clltk-cmd-interface
3131
clltk-version
32+
clltk-build-info
3233
)
3334

3435
# Check that all commands are OBJECT or SHARED libraries

0 commit comments

Comments
 (0)