From 9b2f667a8e526c60967b8043dcafdebba679a901 Mon Sep 17 00:00:00 2001 From: c-bordon Date: Tue, 15 Apr 2025 12:05:28 -0300 Subject: [PATCH 1/5] Added repository_bumper script --- .gitignore | 3 +- tools/repository_bumper.sh | 145 +++++++++++++++++++++++++++++++++++++ 2 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 tools/repository_bumper.sh diff --git a/.gitignore b/.gitignore index 6d7fadef..31bc423a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ single-node/config/wazuh_indexer_ssl_certs/*.pem single-node/config/wazuh_indexer_ssl_certs/*.key multi-node/config/wazuh_indexer_ssl_certs/*.pem -multi-node/config/wazuh_indexer_ssl_certs/*.key \ No newline at end of file +multi-node/config/wazuh_indexer_ssl_certs/*.key +*.log \ No newline at end of file diff --git a/tools/repository_bumper.sh b/tools/repository_bumper.sh new file mode 100644 index 00000000..ea8b938f --- /dev/null +++ b/tools/repository_bumper.sh @@ -0,0 +1,145 @@ +#!/bin/bash + +# This script is used to update the version of a repository in the specified files. +# It takes a version number as an argument and updates the version in the specified files. +# Usage: ./repository_bumper.sh + +# Global variables +DIR=$(dirname "$(pwd)") +LOG_FILE="${DIR}/tools/repository_bumper_$(date +"%Y-%m-%d_%H-%M-%S-%3N").log" +VERSION="" +STAGE="" +FILES_EDITED=() + +get_old_version_and_stage() { + local VERSION_FILE="../VERSION.json" + + OLD_VERSION=$(jq -r '.version' "${VERSION_FILE}") + OLD_STAGE=$(jq -r '.stage' "${VERSION_FILE}") + echo "Old version: ${OLD_VERSION}" | tee -a "${LOG_FILE}" + echo "Old stage: ${OLD_STAGE}" | tee -a "${LOG_FILE}" +} + +grep_command() { + # This function is used to search for a specific string in the specified directory. + # It takes two arguments: the string to search for and the directory to search in. + # Usage: grep_command + eval grep -Rl "${1}" "${2}" --exclude-dir=".git" --exclude="repository_bumper_*.log" "${3}" +} + +update_version_in_files() { + + local OLD_MAYOR="$(echo "${OLD_VERSION}" | cut -d '.' -f 1)" + local OLD_MINOR="$(echo "${OLD_VERSION}" | cut -d '.' -f 2)" + local OLD_PATCH="$(echo "${OLD_VERSION}" | cut -d '.' -f 3)" + local NEW_MAYOR="$(echo "${VERSION}" | cut -d '.' -f 1)" + local NEW_MINOR="$(echo "${VERSION}" | cut -d '.' -f 2)" + local NEW_PATCH="$(echo "${VERSION}" | cut -d '.' -f 3)" + m_m_p_files=( $(grep_command "${OLD_MAYOR}\.${OLD_MINOR}\.${OLD_PATCH}" "${DIR}") ) + for file in "${m_m_p_files[@]}"; do + if [[ "${file}" == *"CHANGELOG.md"* ]]; then + sed -i "/^All notable changes to this project will be documented in this file.$/a \\\n## [${VERSION}]\\n\\n### Added\\n\\n- None\\n\\n### Changed\\n\\n- None\\n\\n### Fixed\\n\\n- None\\n\\n### Deleted\\n\\n- None" "${file}" + elif [[ "${file}" == *"README.md"* ]]; then + sed -i "/^| v${OLD_VERSION} | | |/i | v${VERSION} | | |" "${file}" + sed -i "/^| v${OLD_VERSION} | | |/!s/${OLD_MAYOR}\.${OLD_MINOR}\.${OLD_PATCH}/${NEW_MAYOR}\.${NEW_MINOR}\.${NEW_PATCH}/g" "${file}" + else + sed -i "s/${OLD_VERSION}/${VERSION}/g" "${file}" + fi + if [[ $(git diff --name-only "${file}") ]]; then + FILES_EDITED+=("${file}") + fi + done + m_m_files=( $(grep_command "${OLD_MAYOR}\.${OLD_MINOR}" "${DIR}" --exclude="CHANGELOG.md") ) + for file in "${m_m_files[@]}"; do + sed -i "/^${OLD_MAYOR}\.${OLD_MINOR}./!s/\\b${OLD_MAYOR}\.${OLD_MINOR}\b/${NEW_MAYOR}\.${NEW_MINOR}/g" "${file}" + if [[ $(git diff --name-only "${file}") ]]; then + FILES_EDITED+=("${file}") + fi + done + m_x_files=( $(grep_command "${OLD_MAYOR}\.x" "${DIR}" --exclude="CHANGELOG.md") ) + for file in "${m_x_files[@]}"; do + sed -i "s/\b${OLD_MAYOR}\.x\b/${NEW_MAYOR}\.x/g" "${file}" + if [[ $(git diff --name-only "${file}") ]]; then + FILES_EDITED+=("${file}") + fi + done + mmp_files=( $(grep_command "${OLD_MAYOR}${OLD_MINOR}${OLD_PATCH}" "${DIR}" --exclude="CHANGELOG.md") ) + for file in "${mmp_files[@]}"; do + sed -i "s/\b${OLD_MAYOR}${OLD_MINOR}${OLD_PATCH}\b/${NEW_MAYOR}${NEW_MINOR}${NEW_PATCH}/g" "${file}" + if [[ $(git diff --name-only "${file}") ]]; then + FILES_EDITED+=("${file}") + fi + done +} + +update_stage_in_files() { + local OLD_STAGE="$(echo "${OLD_STAGE}")" + files=( $(grep_command "${OLD_STAGE}" "${DIR}") ) + for file in "${files[@]}"; do + sed -i "s/${OLD_STAGE}/${STAGE}/g" "${file}" + if [[ $(git diff --name-only "${file}") ]]; then + FILES_EDITED+=("${file}") + fi + done +} + +main() { + + echo "Starting repository version bumping process..." | tee -a "${LOG_FILE}" + echo "Log file: ${LOG_FILE}" + # Parse arguments + while [[ $# -gt 0 ]]; do + case $1 in + --version) + VERSION="$2" + shift 2 + ;; + --stage) + STAGE="$2" + shift 2 + ;; + *) + echo "Unknown argument: $1" + exit 1 + ;; + esac + done + + # Validate arguments + if [[ -z "$VERSION" ]]; then + echo "Error: --version argument is required." | tee -a "${LOG_FILE}" + exit 1 + fi + + if [[ -z "$STAGE" ]]; then + echo "Error: --stage argument is required." | tee -a "${LOG_FILE}" + exit 1 + fi + + # Get old version and stage + get_old_version_and_stage + + if [[ "$OLD_VERSION" == "$VERSION" && "$OLD_STAGE" == "$STAGE" ]]; then + echo "Version and stage are already up to date." | tee -a "${LOG_FILE}" + echo "No changes needed." | tee -a "${LOG_FILE}" + exit 0 + fi + if [[ "$OLD_VERSION" != "$VERSION" ]]; then + echo "Updating version from $OLD_VERSION to $VERSION" | tee -a "${LOG_FILE}" + update_version_in_files "$VERSION" + fi + if [[ "$OLD_STAGE" != "$STAGE" ]]; then + echo "Updating stage from $OLD_STAGE to $STAGE" | tee -a "${LOG_FILE}" + update_stage_in_files "$STAGE" + fi + + echo "The following files were edited:" | tee -a "${LOG_FILE}" + for file in $(printf "%s\n" "${FILES_EDITED[@]}" | sort -u); do + echo "${file}" | tee -a "${LOG_FILE}" + done + + echo "Version and stage updated successfully." | tee -a "${LOG_FILE}" +} + +# Call the main method with all arguments +main "$@" From 1445bdc4209ed9a794f04a77e7ed727e0bf41178 Mon Sep 17 00:00:00 2001 From: c-bordon Date: Tue, 15 Apr 2025 14:21:49 -0300 Subject: [PATCH 2/5] Removed mmp version replacement --- tools/repository_bumper.sh | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/tools/repository_bumper.sh b/tools/repository_bumper.sh index ea8b938f..92513718 100644 --- a/tools/repository_bumper.sh +++ b/tools/repository_bumper.sh @@ -43,7 +43,7 @@ update_version_in_files() { sed -i "/^| v${OLD_VERSION} | | |/i | v${VERSION} | | |" "${file}" sed -i "/^| v${OLD_VERSION} | | |/!s/${OLD_MAYOR}\.${OLD_MINOR}\.${OLD_PATCH}/${NEW_MAYOR}\.${NEW_MINOR}\.${NEW_PATCH}/g" "${file}" else - sed -i "s/${OLD_VERSION}/${VERSION}/g" "${file}" + sed -i "s/${OLD_MAYOR}\.${OLD_MINOR}\.${OLD_PATCH}/${NEW_MAYOR}\.${NEW_MINOR}\.${NEW_PATCH}/g" "${file}" fi if [[ $(git diff --name-only "${file}") ]]; then FILES_EDITED+=("${file}") @@ -63,18 +63,11 @@ update_version_in_files() { FILES_EDITED+=("${file}") fi done - mmp_files=( $(grep_command "${OLD_MAYOR}${OLD_MINOR}${OLD_PATCH}" "${DIR}" --exclude="CHANGELOG.md") ) - for file in "${mmp_files[@]}"; do - sed -i "s/\b${OLD_MAYOR}${OLD_MINOR}${OLD_PATCH}\b/${NEW_MAYOR}${NEW_MINOR}${NEW_PATCH}/g" "${file}" - if [[ $(git diff --name-only "${file}") ]]; then - FILES_EDITED+=("${file}") - fi - done } update_stage_in_files() { local OLD_STAGE="$(echo "${OLD_STAGE}")" - files=( $(grep_command "${OLD_STAGE}" "${DIR}") ) + files=( $(grep_command "${OLD_STAGE}" "${DIR}" --exclude="README.md") ) for file in "${files[@]}"; do sed -i "s/${OLD_STAGE}/${STAGE}/g" "${file}" if [[ $(git diff --name-only "${file}") ]]; then From e161490f4d17b01b6c25dbe1b5f98c7512eae495 Mon Sep 17 00:00:00 2001 From: c-bordon Date: Tue, 15 Apr 2025 14:37:50 -0300 Subject: [PATCH 3/5] Updated changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5acd3b90..f2b141d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. ### Added -- None +- Added repository_bumper script. ([#1781](https://github.com/wazuh/wazuh-docker/pull/1781)) ### Changed From 2e22add312cfe6f5a29bff57461d278101b94a5b Mon Sep 17 00:00:00 2001 From: c-bordon Date: Tue, 15 Apr 2025 16:37:41 -0300 Subject: [PATCH 4/5] Removed README exception --- README.md | 45 +------------------------------------- tools/repository_bumper.sh | 22 ++++++++++++++----- 2 files changed, 18 insertions(+), 49 deletions(-) diff --git a/README.md b/README.md index 5fcaf40c..2071f81f 100644 --- a/README.md +++ b/README.md @@ -177,50 +177,7 @@ WAZUH_MONITORING_REPLICAS=0 ## | Wazuh version | ODFE | XPACK | |---------------|---------|--------| -| v4.13.0 | | | -| v4.12.1 | | | -| v4.12.0 | | | -| v4.11.2 | | | -| v4.11.1 | | | -| v4.11.0 | | | -| v4.10.1 | | | -| v4.10.0 | | | -| v4.9.2 | | | -| v4.9.1 | | | -| v4.9.0 | | | -| v4.8.2 | | | -| v4.8.1 | | | -| v4.8.0 | | | -| v4.7.5 | | | -| v4.7.4 | | | -| v4.7.3 | | | -| v4.7.2 | | | -| v4.7.1 | | | -| v4.7.0 | | | -| v4.6.0 | | | -| v4.5.4 | | | -| v4.5.3 | | | -| v4.5.2 | | | -| v4.5.1 | | | -| v4.5.0 | | | -| v4.4.5 | | | -| v4.4.4 | | | -| v4.4.3 | | | -| v4.4.2 | | | -| v4.4.1 | | | -| v4.4.0 | | | -| v4.3.11 | | | -| v4.3.10 | | | -| v4.3.9 | | | -| v4.3.8 | | | -| v4.3.7 | | | -| v4.3.6 | | | -| v4.3.5 | | | -| v4.3.4 | | | -| v4.3.3 | | | -| v4.3.2 | | | -| v4.3.1 | | | -| v4.3.0 | | | +| v4.3.0+ | N/A | N/A | | v4.2.7 | 1.13.2 | 7.11.2 | | v4.2.6 | 1.13.2 | 7.11.2 | | v4.2.5 | 1.13.2 | 7.11.2 | diff --git a/tools/repository_bumper.sh b/tools/repository_bumper.sh index 92513718..48795bfe 100644 --- a/tools/repository_bumper.sh +++ b/tools/repository_bumper.sh @@ -12,7 +12,7 @@ STAGE="" FILES_EDITED=() get_old_version_and_stage() { - local VERSION_FILE="../VERSION.json" + local VERSION_FILE="${DIR}/VERSION.json" OLD_VERSION=$(jq -r '.version' "${VERSION_FILE}") OLD_STAGE=$(jq -r '.stage' "${VERSION_FILE}") @@ -38,10 +38,9 @@ update_version_in_files() { m_m_p_files=( $(grep_command "${OLD_MAYOR}\.${OLD_MINOR}\.${OLD_PATCH}" "${DIR}") ) for file in "${m_m_p_files[@]}"; do if [[ "${file}" == *"CHANGELOG.md"* ]]; then - sed -i "/^All notable changes to this project will be documented in this file.$/a \\\n## [${VERSION}]\\n\\n### Added\\n\\n- None\\n\\n### Changed\\n\\n- None\\n\\n### Fixed\\n\\n- None\\n\\n### Deleted\\n\\n- None" "${file}" - elif [[ "${file}" == *"README.md"* ]]; then - sed -i "/^| v${OLD_VERSION} | | |/i | v${VERSION} | | |" "${file}" - sed -i "/^| v${OLD_VERSION} | | |/!s/${OLD_MAYOR}\.${OLD_MINOR}\.${OLD_PATCH}/${NEW_MAYOR}\.${NEW_MINOR}\.${NEW_PATCH}/g" "${file}" + if ! sed -i "/^All notable changes to this project will be documented in this file.$/a \\\n## [${VERSION}]\\n\\n### Added\\n\\n- None\\n\\n### Changed\\n\\n- None\\n\\n### Fixed\\n\\n- None\\n\\n### Deleted\\n\\n- None" "${file}"; then + echo "Error: Failed to update CHANGELOG.md" | tee -a "${LOG_FILE}" + fi else sed -i "s/${OLD_MAYOR}\.${OLD_MINOR}\.${OLD_PATCH}/${NEW_MAYOR}\.${NEW_MINOR}\.${NEW_PATCH}/g" "${file}" fi @@ -109,6 +108,19 @@ main() { exit 1 fi + # Validate if version is in the correct format + if ! [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "Error: Version must be in the format X.Y.Z (e.g., 1.2.3)." | tee -a "${LOG_FILE}" + exit 1 + fi + + # Validate if stage is in the correct format + STAGE=$(echo "$STAGE" | tr '[:upper:]' '[:lower:]') + if ! [[ "$STAGE" =~ ^(alpha[0-9]*|beta[0-9]*|rc[0-9]*|stable)$ ]]; then + echo "Error: Stage must be one of the following examples: alpha1, beta1, rc1, stable." | tee -a "${LOG_FILE}" + exit 1 + fi + # Get old version and stage get_old_version_and_stage From 4b04578cf5b3f0e084e7f47101106e1c676777df Mon Sep 17 00:00:00 2001 From: c-bordon Date: Tue, 22 Apr 2025 12:08:13 -0300 Subject: [PATCH 5/5] Updated major.minor replacement --- tools/repository_bumper.sh | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/tools/repository_bumper.sh b/tools/repository_bumper.sh index 48795bfe..8223e54b 100644 --- a/tools/repository_bumper.sh +++ b/tools/repository_bumper.sh @@ -24,7 +24,7 @@ grep_command() { # This function is used to search for a specific string in the specified directory. # It takes two arguments: the string to search for and the directory to search in. # Usage: grep_command - eval grep -Rl "${1}" "${2}" --exclude-dir=".git" --exclude="repository_bumper_*.log" "${3}" + eval grep -Rl "${1}" "${2}" --exclude-dir=".git" --exclude="repository_bumper_*.log" --exclude="CHANGELOG.md" "${3}" } update_version_in_files() { @@ -37,31 +37,31 @@ update_version_in_files() { local NEW_PATCH="$(echo "${VERSION}" | cut -d '.' -f 3)" m_m_p_files=( $(grep_command "${OLD_MAYOR}\.${OLD_MINOR}\.${OLD_PATCH}" "${DIR}") ) for file in "${m_m_p_files[@]}"; do - if [[ "${file}" == *"CHANGELOG.md"* ]]; then - if ! sed -i "/^All notable changes to this project will be documented in this file.$/a \\\n## [${VERSION}]\\n\\n### Added\\n\\n- None\\n\\n### Changed\\n\\n- None\\n\\n### Fixed\\n\\n- None\\n\\n### Deleted\\n\\n- None" "${file}"; then - echo "Error: Failed to update CHANGELOG.md" | tee -a "${LOG_FILE}" - fi - else - sed -i "s/${OLD_MAYOR}\.${OLD_MINOR}\.${OLD_PATCH}/${NEW_MAYOR}\.${NEW_MINOR}\.${NEW_PATCH}/g" "${file}" - fi + sed -i "s/\bv${OLD_MAYOR}\.${OLD_MINOR}\.${OLD_PATCH}\b/v${NEW_MAYOR}\.${NEW_MINOR}\.${NEW_PATCH}/g; s/\b${OLD_MAYOR}\.${OLD_MINOR}\.${OLD_PATCH}/${NEW_MAYOR}\.${NEW_MINOR}\.${NEW_PATCH}/g" "${file}" if [[ $(git diff --name-only "${file}") ]]; then FILES_EDITED+=("${file}") fi done - m_m_files=( $(grep_command "${OLD_MAYOR}\.${OLD_MINOR}" "${DIR}" --exclude="CHANGELOG.md") ) + m_m_files=( $(grep_command "${OLD_MAYOR}\.${OLD_MINOR}" "${DIR}") ) for file in "${m_m_files[@]}"; do - sed -i "/^${OLD_MAYOR}\.${OLD_MINOR}./!s/\\b${OLD_MAYOR}\.${OLD_MINOR}\b/${NEW_MAYOR}\.${NEW_MINOR}/g" "${file}" + sed -i -E "/[0-9]+\.[0-9]+\.[0-9]+/! s/(^|[^0-9.])(${OLD_MAYOR}\.${OLD_MINOR})([^0-9.]|$)/\1${NEW_MAYOR}.${NEW_MINOR}\3/g" "$file" if [[ $(git diff --name-only "${file}") ]]; then FILES_EDITED+=("${file}") fi done - m_x_files=( $(grep_command "${OLD_MAYOR}\.x" "${DIR}" --exclude="CHANGELOG.md") ) + m_x_files=( $(grep_command "${OLD_MAYOR}\.x" "${DIR}") ) for file in "${m_x_files[@]}"; do sed -i "s/\b${OLD_MAYOR}\.x\b/${NEW_MAYOR}\.x/g" "${file}" if [[ $(git diff --name-only "${file}") ]]; then FILES_EDITED+=("${file}") fi done + if ! sed -i "/^All notable changes to this project will be documented in this file.$/a \\\n## [${VERSION}]\\n\\n### Added\\n\\n- None\\n\\n### Changed\\n\\n- None\\n\\n### Fixed\\n\\n- None\\n\\n### Deleted\\n\\n- None" "${DIR}/CHANGELOG.md"; then + echo "Error: Failed to update CHANGELOG.md" | tee -a "${LOG_FILE}" + fi + if [[ $(git diff --name-only "${DIR}/CHANGELOG.md") ]]; then + FILES_EDITED+=("${DIR}/CHANGELOG.md") + fi } update_stage_in_files() {