diff --git a/.github/free-disk-space/action.yml b/.github/free-disk-space/action.yml new file mode 100644 index 00000000..3bdfefb0 --- /dev/null +++ b/.github/free-disk-space/action.yml @@ -0,0 +1,245 @@ +name: "Free Disk Space (Ubuntu)" +description: "A configurable GitHub Action to free up disk space on an Ubuntu GitHub Actions runner." + +# Thanks @jlumbroso for the action code https://github.com/jlumbroso/free-disk-space/ +# See: https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions#branding + +inputs: + android: + description: "Remove Android runtime" + required: false + default: "true" + dotnet: + description: "Remove .NET runtime" + required: false + default: "true" + haskell: + description: "Remove Haskell runtime" + required: false + default: "true" + + # option inspired by: + # https://github.com/apache/flink/blob/master/tools/azure-pipelines/free_disk_space.sh + large-packages: + description: "Remove large packages" + required: false + default: "true" + + docker-images: + description: "Remove Docker images" + required: false + default: "true" + + # option inspired by: + # https://github.com/actions/virtual-environments/issues/2875#issuecomment-1163392159 + tool-cache: + description: "Remove image tool cache" + required: false + default: "false" + + swap-storage: + description: "Remove swap storage" + required: false + default: "true" + +runs: + using: "composite" + steps: + - shell: bash + run: | + + # ====== + # MACROS + # ====== + + # macro to print a line of equals + # (silly but works) + printSeparationLine() { + str=${1:=} + num=${2:-80} + counter=1 + output="" + while [ $counter -le $num ] + do + output="${output}${str}" + counter=$((counter+1)) + done + echo "${output}" + } + + # macro to compute available space + # REF: https://unix.stackexchange.com/a/42049/60849 + # REF: https://stackoverflow.com/a/450821/408734 + getAvailableSpace() { echo $(df -a $1 | awk 'NR > 1 {avail+=$4} END {print avail}'); } + + # macro to make Kb human readable (assume the input is Kb) + # REF: https://unix.stackexchange.com/a/44087/60849 + formatByteCount() { echo $(numfmt --to=iec-i --suffix=B --padding=7 $1'000'); } + + # macro to output saved space + printSavedSpace() { + saved=${1} + title=${2:-} + + echo "" + printSeparationLine '*' 80 + if [ ! -z "${title}" ]; then + echo "=> ${title}: Saved $(formatByteCount $saved)" + else + echo "=> Saved $(formatByteCount $saved)" + fi + printSeparationLine '*' 80 + echo "" + } + + # macro to print output of dh with caption + printDH() { + caption=${1:-} + + printSeparationLine '=' 80 + echo "${caption}" + echo "" + echo "$ dh -h /" + echo "" + df -h / + echo "$ dh -a /" + echo "" + df -a / + echo "$ dh -a" + echo "" + df -a + printSeparationLine '=' 80 + } + + + + # ====== + # SCRIPT + # ====== + + # Display initial disk space stats + + AVAILABLE_INITIAL=$(getAvailableSpace) + AVAILABLE_ROOT_INITIAL=$(getAvailableSpace '/') + + printDH "BEFORE CLEAN-UP:" + echo "" + + + # Option: Remove Android library + + if [[ ${{ inputs.android }} == 'true' ]]; then + BEFORE=$(getAvailableSpace) + + sudo rm -rf /usr/local/lib/android || true + + AFTER=$(getAvailableSpace) + SAVED=$((AFTER-BEFORE)) + printSavedSpace $SAVED "Android library" + fi + + # Option: Remove .NET runtime + + if [[ ${{ inputs.dotnet }} == 'true' ]]; then + BEFORE=$(getAvailableSpace) + + # https://github.community/t/bigger-github-hosted-runners-disk-space/17267/11 + sudo rm -rf /usr/share/dotnet || true + + AFTER=$(getAvailableSpace) + SAVED=$((AFTER-BEFORE)) + printSavedSpace $SAVED ".NET runtime" + fi + + # Option: Remove Haskell runtime + + if [[ ${{ inputs.haskell }} == 'true' ]]; then + BEFORE=$(getAvailableSpace) + + sudo rm -rf /opt/ghc || true + sudo rm -rf /usr/local/.ghcup || true + + AFTER=$(getAvailableSpace) + SAVED=$((AFTER-BEFORE)) + printSavedSpace $SAVED "Haskell runtime" + fi + + # Option: Remove large packages + # REF: https://github.com/apache/flink/blob/master/tools/azure-pipelines/free_disk_space.sh + + if [[ ${{ inputs.large-packages }} == 'true' ]]; then + BEFORE=$(getAvailableSpace) + + sudo apt-get remove -y '^aspnetcore-.*' || echo "::warning::The command [sudo apt-get remove -y '^aspnetcore-.*'] failed to complete successfully. Proceeding..." + sudo apt-get remove -y '^dotnet-.*' --fix-missing || echo "::warning::The command [sudo apt-get remove -y '^dotnet-.*' --fix-missing] failed to complete successfully. Proceeding..." + sudo apt-get remove -y '^llvm-.*' --fix-missing || echo "::warning::The command [sudo apt-get remove -y '^llvm-.*' --fix-missing] failed to complete successfully. Proceeding..." + sudo apt-get remove -y 'php.*' --fix-missing || echo "::warning::The command [sudo apt-get remove -y 'php.*' --fix-missing] failed to complete successfully. Proceeding..." + sudo apt-get remove -y '^mongodb-.*' --fix-missing || echo "::warning::The command [sudo apt-get remove -y '^mongodb-.*' --fix-missing] failed to complete successfully. Proceeding..." + sudo apt-get remove -y '^mysql-.*' --fix-missing || echo "::warning::The command [sudo apt-get remove -y '^mysql-.*' --fix-missing] failed to complete successfully. Proceeding..." + sudo apt-get remove -y azure-cli google-chrome-stable firefox powershell mono-devel libgl1-mesa-dri --fix-missing || echo "::warning::The command [sudo apt-get remove -y azure-cli google-chrome-stable firefox powershell mono-devel libgl1-mesa-dri --fix-missing] failed to complete successfully. Proceeding..." + sudo apt-get remove -y google-cloud-sdk --fix-missing || echo "::debug::The command [sudo apt-get remove -y google-cloud-sdk --fix-missing] failed to complete successfully. Proceeding..." + sudo apt-get remove -y google-cloud-cli --fix-missing || echo "::debug::The command [sudo apt-get remove -y google-cloud-cli --fix-missing] failed to complete successfully. Proceeding..." + sudo apt-get autoremove -y || echo "::warning::The command [sudo apt-get autoremove -y] failed to complete successfully. Proceeding..." + sudo apt-get clean || echo "::warning::The command [sudo apt-get clean] failed to complete successfully. Proceeding..." + + AFTER=$(getAvailableSpace) + SAVED=$((AFTER-BEFORE)) + printSavedSpace $SAVED "Large misc. packages" + fi + + # Option: Remove Docker images + + if [[ ${{ inputs.docker-images }} == 'true' ]]; then + BEFORE=$(getAvailableSpace) + + sudo docker image prune --all --force || true + + AFTER=$(getAvailableSpace) + SAVED=$((AFTER-BEFORE)) + printSavedSpace $SAVED "Docker images" + fi + + # Option: Remove tool cache + # REF: https://github.com/actions/virtual-environments/issues/2875#issuecomment-1163392159 + + if [[ ${{ inputs.tool-cache }} == 'true' ]]; then + BEFORE=$(getAvailableSpace) + + sudo rm -rf "$AGENT_TOOLSDIRECTORY" || true + + AFTER=$(getAvailableSpace) + SAVED=$((AFTER-BEFORE)) + printSavedSpace $SAVED "Tool cache" + fi + + # Option: Remove Swap storage + + if [[ ${{ inputs.swap-storage }} == 'true' ]]; then + BEFORE=$(getAvailableSpace) + + sudo swapoff -a || true + sudo rm -f /mnt/swapfile || true + free -h + + AFTER=$(getAvailableSpace) + SAVED=$((AFTER-BEFORE)) + printSavedSpace $SAVED "Swap storage" + fi + + + + # Output saved space statistic + + AVAILABLE_END=$(getAvailableSpace) + AVAILABLE_ROOT_END=$(getAvailableSpace '/') + + echo "" + printDH "AFTER CLEAN-UP:" + + echo "" + echo "" + + echo "/dev/root:" + printSavedSpace $((AVAILABLE_ROOT_END - AVAILABLE_ROOT_INITIAL)) + echo "overall:" + printSavedSpace $((AVAILABLE_END - AVAILABLE_INITIAL)) \ No newline at end of file diff --git a/.github/workflows/Procedure_push_docker_images.yml b/.github/workflows/Procedure_push_docker_images.yml index 2ae47e6a..ba5aa3f6 100644 --- a/.github/workflows/Procedure_push_docker_images.yml +++ b/.github/workflows/Procedure_push_docker_images.yml @@ -12,7 +12,7 @@ on: description: 'wazuh-docker reference' default: 'v4.12.0' required: true - PRODUCTS: + products: description: 'Comma-separated list of the image names to build and push' default: 'wazuh-manager,wazuh-dashboard,wazuh-indexer' required: true @@ -42,12 +42,12 @@ on: inputs: image_tag: description: 'Docker image tag' - default: '4.10.0' + default: '4.11.0' required: true type: string docker_reference: description: 'wazuh-docker reference' - default: 'v4.10.0' + default: 'v4.11.0' required: false type: string products: diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 957cceb9..94bf3b7c 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -29,21 +29,21 @@ jobs: docker save wazuh/wazuh-dashboard:${{env.WAZUH_IMAGE_VERSION}} -o /home/runner/work/wazuh-docker/wazuh-docker/docker-images/wazuh-dashboard.tar - name: Temporarily save Wazuh manager Docker image - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: docker-artifact-manager path: /home/runner/work/wazuh-docker/wazuh-docker/docker-images/wazuh-manager.tar retention-days: 1 - name: Temporarily save Wazuh indexer Docker image - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: docker-artifact-indexer path: /home/runner/work/wazuh-docker/wazuh-docker/docker-images/wazuh-indexer.tar retention-days: 1 - name: Temporarily save Wazuh dashboard Docker image - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: docker-artifact-dashboard path: /home/runner/work/wazuh-docker/wazuh-docker/docker-images/wazuh-dashboard.tar @@ -77,17 +77,17 @@ jobs: run: cat .env > $GITHUB_ENV - name: Retrieve saved Wazuh indexer Docker image - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: docker-artifact-indexer - name: Retrieve saved Wazuh manager Docker image - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: docker-artifact-manager - name: Retrieve saved Wazuh dashboard Docker image - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: docker-artifact-dashboard @@ -205,25 +205,20 @@ jobs: run: cat .env > $GITHUB_ENV - name: free disk space - run: | - sudo swapoff -a - sudo rm -f /swapfile - sudo apt clean - docker rmi $(docker image ls -aq) - df -h + uses: ./.github/free-disk-space - name: Retrieve saved Wazuh dashboard Docker image - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: docker-artifact-dashboard - name: Retrieve saved Wazuh manager Docker image - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: docker-artifact-manager - name: Retrieve saved Wazuh indexer Docker image - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: docker-artifact-indexer diff --git a/CHANGELOG.md b/CHANGELOG.md index a472e542..4c603324 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 +- None ### Changed @@ -17,13 +17,11 @@ All notable changes to this project will be documented in this file. ### Deleted -- None - -## [4.10.2] +## [4.11.0] ### Added -- none +- None ### Changed @@ -31,7 +29,7 @@ All notable changes to this project will be documented in this file. ### Fixed -- None +- Change the cleaning disk step ([#1663](https://github.com/wazuh/wazuh-docker/pull/1663)) ### Deleted @@ -41,7 +39,7 @@ All notable changes to this project will be documented in this file. ### Added -- none +- None ### Changed diff --git a/README.md b/README.md index 5a2fb14c..85c1c2df 100644 --- a/README.md +++ b/README.md @@ -179,7 +179,7 @@ WAZUH_MONITORING_REPLICAS=0 ## | Wazuh version | ODFE | XPACK | |---------------|---------|--------| | v4.12.0 | | | -| v4.10.2 | | | +| v4.11.0 | | | | v4.10.1 | | | | v4.10.0 | | | | v4.9.2 | | |