diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..42e87cb --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,60 @@ +name: Component Release + +permissions: + contents: write + +on: + pull_request: + types: [opened, edited, ready_for_review, closed] + branches: + - develop + +jobs: + validate-version: + if: ${{ github.event.action == 'opened' || github.event.action == 'edited' || github.event.action == 'ready_for_review' }} + runs-on: ubuntu-latest + steps: + - name: Validate PR description version field + env: + PR_DESCRIPTION: ${{ github.event.pull_request.body }} + run: | + if ! echo "$PR_DESCRIPTION" | grep -qiE 'version[[:space:]]*:[[:space:]]*(major|minor|patch|none)'; then + echo "[release.yml] ERROR: Pull Request description must include a version field in the format 'version: major|minor|patch|none' (case-insensitive)" + exit 1 + fi + echo "[release.yml] INFO: Validation passed: version field found." + + dispatch-release: + if: github.event.pull_request.merged == true + runs-on: ubuntu-latest + steps: + - name: Extract PR version field + id: version + env: + PR_DESCRIPTION: ${{ github.event.pull_request.body }} + run: | + VERSION_TYPE=$(echo "$PR_DESCRIPTION" | grep -oiP 'version\s*:\s*\K(major|minor|patch|none)' | tr '[:upper:]' '[:lower:]') + if [[ -z "$VERSION_TYPE" ]]; then + echo "[release.yml] ERROR: No version data found in Pull Request description, defaulting to none." + VERSION_TYPE="none" + fi + echo "version_type=$VERSION_TYPE" >> $GITHUB_OUTPUT + echo "[release.yml] INFO: Detected version type: $VERSION_TYPE" + + - name: Dispatch release to Device Management Repo + if: steps.version.outputs.version_type != 'none' + env: + VERSION_TYPE: ${{ steps.version.outputs.version_type }} + COMPONENT_REPO: ${{ github.repository }} + run: | + payload=$(jq -n \ + --arg version_type "$VERSION_TYPE" \ + --arg component_repo "$COMPONENT_REPO" \ + '{ref: "main", inputs: {version_type: $version_type, component_repo: $component_repo}}') + + curl -X POST \ + -H "Authorization: token ${{ secrets.MGMT_REPO_PAT }}" \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/${{ secrets.MGMT_REPO }}/actions/workflows/component-release.yml/dispatches \ + -d "$payload" + echo "[release.yml] INFO: Dispatched release workflow to management repo with version type: $VERSION_TYPE" \ No newline at end of file diff --git a/c_sourcecode/src/Makefile.am b/c_sourcecode/src/Makefile.am index 7319f81..f1c9514 100644 --- a/c_sourcecode/src/Makefile.am +++ b/c_sourcecode/src/Makefile.am @@ -21,12 +21,19 @@ bin_PROGRAMS = crashupload # Common include directories AM_CPPFLAGS = -I$(top_srcdir)/common \ + -I$(top_srcdir)/src \ -I$(top_srcdir)/src/init \ -I$(top_srcdir)/src/config \ -I$(top_srcdir)/src/platform \ + -I$(top_srcdir)/src/scanner \ + -I$(top_srcdir)/src/archive \ + -I$(top_srcdir)/src/ratelimit \ + -I$(top_srcdir)/src/rfcInterface \ + -I$(top_srcdir)/src/rbusInterface \ + -I$(top_srcdir)/src/upload \ -I$(top_srcdir)/include \ -I$(top_srcdir)/src/utils \ - -I${top_srcdir}/src/t2Interface + -I$(top_srcdir)/src/t2Interface # External library flags AM_CFLAGS = $(LIBCURL_CFLAGS) $(OPENSSL_CFLAGS) $(ZLIB_CFLAGS) diff --git a/c_sourcecode/src/archive/archive.c b/c_sourcecode/src/archive/archive.c index a59f8c9..68cfc3d 100644 --- a/c_sourcecode/src/archive/archive.c +++ b/c_sourcecode/src/archive/archive.c @@ -27,7 +27,7 @@ #include #include "file_utils.h" #include "telemetryinterface.h" -#include "../utils/logger.h" +#include "logger.h" // For unit testing: allow static functions to be visible #ifdef UNIT_TEST diff --git a/c_sourcecode/src/archive/archive_crash.h b/c_sourcecode/src/archive/archive_crash.h index 0ccb969..717dd35 100644 --- a/c_sourcecode/src/archive/archive_crash.h +++ b/c_sourcecode/src/archive/archive_crash.h @@ -23,7 +23,7 @@ #ifndef ARCHIVE_SMART_H #define ARCHIVE_SMART_H -#include "../../common/types.h" +#include "types.h" #include #include #include diff --git a/c_sourcecode/src/config/config_manager.c b/c_sourcecode/src/config/config_manager.c index 2b4ed4e..123c6c6 100644 --- a/c_sourcecode/src/config/config_manager.c +++ b/c_sourcecode/src/config/config_manager.c @@ -20,10 +20,10 @@ * SKELETON: Implementation needed */ #include "config_manager.h" -#include "../../common/errors.h" -#include "../utils/logger.h" -#include "../rfcInterface/rfcinterface.h" -#include "../rbusInterface/rbus_interface.h" +#include "errors.h" +#include "logger.h" +#include "rfcinterface.h" +#include "rbus_interface.h" #include #include diff --git a/c_sourcecode/src/config/config_manager.h b/c_sourcecode/src/config/config_manager.h index 4229809..7b5e5ef 100644 --- a/c_sourcecode/src/config/config_manager.h +++ b/c_sourcecode/src/config/config_manager.h @@ -23,7 +23,7 @@ #ifndef CONFIG_MANAGER_H #define CONFIG_MANAGER_H -#include "../../common/types.h" +#include "types.h" bool get_opt_out_status(void); /** diff --git a/c_sourcecode/src/init/system_init.c b/c_sourcecode/src/init/system_init.c index 3150d95..7b92159 100644 --- a/c_sourcecode/src/init/system_init.c +++ b/c_sourcecode/src/init/system_init.c @@ -24,12 +24,12 @@ */ #include "system_init.h" -#include "../../common/errors.h" -#include "../../common/constants.h" -#include "../config/config_manager.h" -#include "../utils/logger.h" -#include "../platform/platform.h" -#include "../t2Interface/telemetryinterface.h" +#include "errors.h" +#include "constants.h" +#include "config_manager.h" +#include "logger.h" +#include "platform.h" +#include "telemetryinterface.h" #include #include diff --git a/c_sourcecode/src/init/system_init.h b/c_sourcecode/src/init/system_init.h index f6d1b03..1672c85 100644 --- a/c_sourcecode/src/init/system_init.h +++ b/c_sourcecode/src/init/system_init.h @@ -28,7 +28,7 @@ #ifndef SYSTEM_INIT_H #define SYSTEM_INIT_H -#include "../../common/types.h" +#include "types.h" #include #include diff --git a/c_sourcecode/src/main.c b/c_sourcecode/src/main.c index 0df3864..58ae435 100644 --- a/c_sourcecode/src/main.c +++ b/c_sourcecode/src/main.c @@ -25,23 +25,23 @@ * SKELETON: Function bodies need implementation */ -#include "../common/types.h" -#include "../common/constants.h" -#include "../common/errors.h" -#include "init/system_init.h" -#include "config/config_manager.h" -#include "utils/prerequisites.h" -#include "utils/lock_manager.h" -#include "scanner/scanner.h" -#include "archive/archive_crash.h" -#include "utils/cleanup_batch.h" -#include "utils/logger.h" +#include "types.h" +#include "constants.h" +#include "errors.h" +#include "system_init.h" +#include "config_manager.h" +#include "prerequisites.h" +#include "lock_manager.h" +#include "scanner.h" +#include "archive_crash.h" +#include "cleanup_batch.h" +#include "logger.h" #include #include "file_utils.h" #include "ratelimit.h" #include "systemutils.h" #include "upload.h" -#include "t2Interface/telemetryinterface.h" +#include "telemetryinterface.h" int lock_dir_prefix = 0; diff --git a/c_sourcecode/src/platform/platform.c b/c_sourcecode/src/platform/platform.c index 5ee67cf..7223784 100644 --- a/c_sourcecode/src/platform/platform.c +++ b/c_sourcecode/src/platform/platform.c @@ -20,8 +20,8 @@ * SKELETON: Implementation needed */ #include "platform.h" -#include "../../common/errors.h" -#include "../utils/logger.h" +#include "errors.h" +#include "logger.h" /* function NormalizeMac - gets the eSTB MAC address of the device. diff --git a/c_sourcecode/src/platform/platform.h b/c_sourcecode/src/platform/platform.h index f72f80f..0dbd527 100644 --- a/c_sourcecode/src/platform/platform.h +++ b/c_sourcecode/src/platform/platform.h @@ -23,7 +23,7 @@ #ifndef PLATFORM_H #define PLATFORM_H -#include "../../common/types.h" +#include "types.h" #include "rdk_fwdl_utils.h" #include "system_utils.h" #include "file_utils.h" diff --git a/c_sourcecode/src/ratelimit/ratelimit.c b/c_sourcecode/src/ratelimit/ratelimit.c index e16a9e9..b78de8f 100644 --- a/c_sourcecode/src/ratelimit/ratelimit.c +++ b/c_sourcecode/src/ratelimit/ratelimit.c @@ -26,7 +26,7 @@ #include #include #include "ratelimit.h" -#include "../utils/logger.h" +#include "logger.h" int set_time(const char *deny_file, int type) { diff --git a/c_sourcecode/src/rbusInterface/rbus_interface.c b/c_sourcecode/src/rbusInterface/rbus_interface.c index ea049bb..d2b73ab 100644 --- a/c_sourcecode/src/rbusInterface/rbus_interface.c +++ b/c_sourcecode/src/rbusInterface/rbus_interface.c @@ -21,7 +21,7 @@ #include #include #include "rbus_interface.h" -#include "../utils/logger.h" +#include "logger.h" #ifdef RBUS_API_ENABLED #include "rbus/rbus.h" diff --git a/c_sourcecode/src/rfcInterface/rfcinterface.c b/c_sourcecode/src/rfcInterface/rfcinterface.c index 30f55f5..b65c73c 100644 --- a/c_sourcecode/src/rfcInterface/rfcinterface.c +++ b/c_sourcecode/src/rfcInterface/rfcinterface.c @@ -16,7 +16,7 @@ */ #include "rfcinterface.h" -#include "../utils/logger.h" +#include "logger.h" #ifndef GTEST_ENABLE #include "rdk_fwdl_utils.h" diff --git a/c_sourcecode/src/scanner/scanner.c b/c_sourcecode/src/scanner/scanner.c index 3af4745..69681a3 100644 --- a/c_sourcecode/src/scanner/scanner.c +++ b/c_sourcecode/src/scanner/scanner.c @@ -24,11 +24,11 @@ #include #include #include -#include "../../common/types.h" +#include "types.h" #include "file_utils.h" #include "scanner.h" #include "telemetryinterface.h" -#include "../utils/logger.h" +#include "logger.h" // For unit testing: allow static functions to be visible #ifdef UNIT_TEST diff --git a/c_sourcecode/src/scanner/scanner.h b/c_sourcecode/src/scanner/scanner.h index dc5a723..92fb2ea 100644 --- a/c_sourcecode/src/scanner/scanner.h +++ b/c_sourcecode/src/scanner/scanner.h @@ -23,7 +23,7 @@ #ifndef SCANNER_H #define SCANNER_H -#include "../../common/types.h" +#include "types.h" #include /** * @brief Find and sort dump files diff --git a/c_sourcecode/src/t2Interface/telemetryinterface.c b/c_sourcecode/src/t2Interface/telemetryinterface.c index debc1dc..c4945f2 100644 --- a/c_sourcecode/src/t2Interface/telemetryinterface.c +++ b/c_sourcecode/src/t2Interface/telemetryinterface.c @@ -25,7 +25,7 @@ #include "telemetryinterface.h" #include -#include "../utils/logger.h" +#include "logger.h" #ifdef T2_EVENT_ENABLED #include diff --git a/c_sourcecode/src/upload/upload.c b/c_sourcecode/src/upload/upload.c index 22b5d09..e86b242 100644 --- a/c_sourcecode/src/upload/upload.c +++ b/c_sourcecode/src/upload/upload.c @@ -20,7 +20,7 @@ #include #include #include -#include "../rfcInterface/rfcinterface.h" +#include "rfcinterface.h" #include "upload.h" #ifndef GTEST_ENABLE #include "common_device_api.h" @@ -30,7 +30,7 @@ #include "ratelimit.h" #include #include "telemetryinterface.h" -#include "../utils/logger.h" +#include "logger.h" #define MAX_RETRIES 3 #define TIMEOUT_SECONDS 45 diff --git a/c_sourcecode/src/utils/cleanup_batch.c b/c_sourcecode/src/utils/cleanup_batch.c index a581539..e1dee3f 100644 --- a/c_sourcecode/src/utils/cleanup_batch.c +++ b/c_sourcecode/src/utils/cleanup_batch.c @@ -27,7 +27,7 @@ #include #include #include "cleanup_batch.h" -#include "../../common/errors.h" +#include "errors.h" #include "logger.h" // For unit testing: allow static functions to be visible diff --git a/c_sourcecode/src/utils/cleanup_batch.h b/c_sourcecode/src/utils/cleanup_batch.h index 296b9ea..02cb43f 100644 --- a/c_sourcecode/src/utils/cleanup_batch.h +++ b/c_sourcecode/src/utils/cleanup_batch.h @@ -26,7 +26,7 @@ #include #include #include -#include "../../common/types.h" +#include "types.h" /* ---------- File list structure for sorting by mtime ---------- */ diff --git a/c_sourcecode/src/utils/prerequisites.c b/c_sourcecode/src/utils/prerequisites.c index 5a05bd7..b7a7d1f 100644 --- a/c_sourcecode/src/utils/prerequisites.c +++ b/c_sourcecode/src/utils/prerequisites.c @@ -21,7 +21,7 @@ */ #include "prerequisites.h" #include "cleanup_batch.h" -#include "../../common/errors.h" +#include "errors.h" #include #include diff --git a/c_sourcecode/src/utils/prerequisites.h b/c_sourcecode/src/utils/prerequisites.h index cfb8ac4..32277dd 100644 --- a/c_sourcecode/src/utils/prerequisites.h +++ b/c_sourcecode/src/utils/prerequisites.h @@ -23,7 +23,7 @@ #ifndef PREREQUISITES_H #define PREREQUISITES_H -#include "../../common/types.h" +#include "types.h" #include "rdk_fwdl_utils.h" #include "system_utils.h" diff --git a/unittest/Makefile.am b/unittest/Makefile.am index 8f2f4f6..087fda5 100644 --- a/unittest/Makefile.am +++ b/unittest/Makefile.am @@ -31,16 +31,19 @@ check_PROGRAMS = config_manager_gtest platform_gtest scanner_gtest archive_gtest # Common include directories AM_CPPFLAGS = \ -I$(top_srcdir)/../c_sourcecode/src \ + -I$(top_srcdir)/../c_sourcecode/src/init \ -I$(top_srcdir)/../c_sourcecode/src/config \ - -I$(top_srcdir)/../c_sourcecode/common \ - -I$(top_srcdir)/../c_sourcecode/include \ - -I$(top_srcdir)/../c_sourcecode/src/utils \ -I$(top_srcdir)/../c_sourcecode/src/platform \ -I$(top_srcdir)/../c_sourcecode/src/scanner \ -I$(top_srcdir)/../c_sourcecode/src/archive \ - -I$(top_srcdir)/../c_sourcecode/src/utils \ + -I$(top_srcdir)/../c_sourcecode/src/ratelimit \ + -I$(top_srcdir)/../c_sourcecode/src/rfcInterface \ + -I$(top_srcdir)/../c_sourcecode/src/rbusInterface \ -I$(top_srcdir)/../c_sourcecode/src/upload \ - -I$(top_srcdir)/../c_sourcecode/src/t2Interface \ + -I$(top_srcdir)/../c_sourcecode/src/utils \ + -I$(top_srcdir)/../c_sourcecode/src/t2Interface \ + -I$(top_srcdir)/../c_sourcecode/common \ + -I$(top_srcdir)/../c_sourcecode/include \ -I/usr/include \ -I/usr/local/include diff --git a/unittest/archive_gtest.cpp b/unittest/archive_gtest.cpp index 1d7e68f..ab22257 100644 --- a/unittest/archive_gtest.cpp +++ b/unittest/archive_gtest.cpp @@ -52,9 +52,9 @@ using namespace std; extern "C" { -#include "../c_sourcecode/src/archive/archive_crash.h" -#include "../c_sourcecode/common/types.h" -#include "../c_sourcecode/common/errors.h" +#include "archive_crash.h" +#include "types.h" +#include "errors.h" #if 0 // Forward declarations for static functions (with UNIT_TEST flag) diff --git a/unittest/config_manager_gtest.cpp b/unittest/config_manager_gtest.cpp index ecc0132..a24aeaa 100644 --- a/unittest/config_manager_gtest.cpp +++ b/unittest/config_manager_gtest.cpp @@ -37,10 +37,10 @@ #include extern "C" { -#include "../c_sourcecode/src/config/config_manager.h" -#include "../c_sourcecode/common/types.h" -#include "../c_sourcecode/common/errors.h" -#include "../c_sourcecode/common/constants.h" +#include "config_manager.h" +#include "types.h" +#include "errors.h" +#include "constants.h" // Mock function declarations int mock_getIncludePropertyData(const char* param, char* value, int len); @@ -712,7 +712,7 @@ TEST_F(ConfigManagerTest, GetPrivacyControlMode_RbusStubBehavior) { // ============================================================================ extern "C" { -#include "../c_sourcecode/src/rfcInterface/rfcinterface.h" +#include "rfcinterface.h" } TEST_F(ConfigManagerTest, WriteRFCProperty_StringType_ReturnsNotApplicable) { diff --git a/unittest/lock_manager_gtest.cpp b/unittest/lock_manager_gtest.cpp index 6e5f2ae..ea2ac5e 100644 --- a/unittest/lock_manager_gtest.cpp +++ b/unittest/lock_manager_gtest.cpp @@ -36,7 +36,7 @@ #include extern "C" { -#include "../c_sourcecode/src/utils/lock_manager.h" +#include "lock_manager.h" // Forward declarations for internal functions not in header int acquire_process_lock_or_wait(const char *lock_path, int wait_time); diff --git a/unittest/mainapp_gmock.cpp b/unittest/mainapp_gmock.cpp index 0c84b05..38414cc 100644 --- a/unittest/mainapp_gmock.cpp +++ b/unittest/mainapp_gmock.cpp @@ -69,9 +69,9 @@ #include extern "C" { -#include "../c_sourcecode/common/types.h" -#include "../c_sourcecode/common/errors.h" -#include "../c_sourcecode/common/constants.h" +#include "types.h" +#include "errors.h" +#include "constants.h" } // Mock state control structure diff --git a/unittest/mainapp_test_fixture.h b/unittest/mainapp_test_fixture.h index 6d85666..43a44eb 100644 --- a/unittest/mainapp_test_fixture.h +++ b/unittest/mainapp_test_fixture.h @@ -41,10 +41,10 @@ #include extern "C" { -#include "../c_sourcecode/src/init/system_init.h" -#include "../c_sourcecode/common/types.h" -#include "../c_sourcecode/common/errors.h" -#include "../c_sourcecode/common/constants.h" +#include "system_init.h" +#include "types.h" +#include "errors.h" +#include "constants.h" int main_test(int argc, char *argv[]); void handle_signal(int no, siginfo_t* info, void* uc); diff --git a/unittest/platform_gtest.cpp b/unittest/platform_gtest.cpp index 7e32357..10f26dc 100644 --- a/unittest/platform_gtest.cpp +++ b/unittest/platform_gtest.cpp @@ -40,9 +40,9 @@ #include extern "C" { -#include "../c_sourcecode/src/platform/platform.h" -#include "../c_sourcecode/common/types.h" -#include "../c_sourcecode/common/errors.h" +#include "platform.h" +#include "types.h" +#include "errors.h" // External functions being tested void NormalizeMac(char *mac, size_t size); diff --git a/unittest/prerequisites_gtest.cpp b/unittest/prerequisites_gtest.cpp index be69a94..c05a5cf 100644 --- a/unittest/prerequisites_gtest.cpp +++ b/unittest/prerequisites_gtest.cpp @@ -34,9 +34,9 @@ #include extern "C" { -#include "../c_sourcecode/src/utils/prerequisites.h" -#include "../c_sourcecode/common/types.h" -#include "../c_sourcecode/common/errors.h" +#include "prerequisites.h" +#include "types.h" +#include "errors.h" // Forward declarations for internal functions void defer_upload_if_needed(device_type_t device_type); diff --git a/unittest/ratelimit_gtest.cpp b/unittest/ratelimit_gtest.cpp index 108ed0e..0ec1f15 100644 --- a/unittest/ratelimit_gtest.cpp +++ b/unittest/ratelimit_gtest.cpp @@ -34,8 +34,8 @@ #include extern "C" { -#include "../c_sourcecode/include/ratelimit.h" -#include "../c_sourcecode/common/types.h" +#include "ratelimit.h" +#include "types.h" } // ============================================================================ diff --git a/unittest/scanner_gmock.cpp b/unittest/scanner_gmock.cpp index 9e217f2..c54cf9d 100644 --- a/unittest/scanner_gmock.cpp +++ b/unittest/scanner_gmock.cpp @@ -46,7 +46,7 @@ #include extern "C" { -#include "../c_sourcecode/common/types.h" +#include "types.h" } // Mock state control structure diff --git a/unittest/scanner_gtest.cpp b/unittest/scanner_gtest.cpp index 53de8d5..fbdda43 100644 --- a/unittest/scanner_gtest.cpp +++ b/unittest/scanner_gtest.cpp @@ -51,10 +51,10 @@ #include extern "C" { -#include "../c_sourcecode/src/scanner/scanner.h" -#include "../c_sourcecode/common/types.h" -#include "../c_sourcecode/common/errors.h" -#include "../c_sourcecode/common/constants.h" +#include "scanner.h" +#include "types.h" +#include "errors.h" +#include "constants.h" // External functions being tested int scanner_find_dumps(const char *path, dump_file_t **dumps, int *count, const char *dump_extn_pattern); diff --git a/unittest/upload_gmock.cpp b/unittest/upload_gmock.cpp index 327b6de..5d1a2e7 100644 --- a/unittest/upload_gmock.cpp +++ b/unittest/upload_gmock.cpp @@ -56,7 +56,7 @@ #include extern "C" { -#include "../c_sourcecode/common/types.h" +#include "types.h" // External type definitions for mocking typedef struct { diff --git a/unittest/upload_gtest.cpp b/unittest/upload_gtest.cpp index 16d851d..30a9c56 100644 --- a/unittest/upload_gtest.cpp +++ b/unittest/upload_gtest.cpp @@ -47,10 +47,10 @@ #include extern "C" { -#include "../c_sourcecode/include/upload.h" -#include "../c_sourcecode/common/types.h" -#include "../c_sourcecode/common/errors.h" -#include "../c_sourcecode/common/constants.h" +#include "upload.h" +#include "types.h" +#include "errors.h" +#include "constants.h" // External functions being tested int get_crashupload_s3signed_url(char *url, size_t size_buf); diff --git a/unittest/utils_gtest.cpp b/unittest/utils_gtest.cpp index 927436e..30316c6 100644 --- a/unittest/utils_gtest.cpp +++ b/unittest/utils_gtest.cpp @@ -61,10 +61,10 @@ #include extern "C" { -#include "../c_sourcecode/src/utils/cleanup_batch.h" -#include "../c_sourcecode/include/file_utils.h" -#include "../c_sourcecode/common/types.h" -#include "../c_sourcecode/common/errors.h" +#include "cleanup_batch.h" +#include "file_utils.h" +#include "types.h" +#include "errors.h" // Mock function declarations void set_mock_stripinvalidchar_behavior(size_t return_value);