Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
8381106
Migrate GitHub runners to AWS runners
yenienserrano Jun 18, 2026
87df0ba
Refactor runner naming format in workflow files for consistency
yenienserrano Jun 18, 2026
b56f2b2
Update revision retrieval method in build workflow to use package.json
yenienserrano Jun 18, 2026
52de78f
Add non-root build user and update bootstrap command for permissions
yenienserrano Jun 18, 2026
399bb3a
Refactor runner naming format in workflow files to use format functio…
yenienserrano Jun 18, 2026
1d63398
Update build commands to run as non-root user for improved security
yenienserrano Jun 18, 2026
ccaa21d
Fix artifact renaming path in build workflow for consistency
yenienserrano Jun 18, 2026
607b893
Add installation of zip utility for packaging plugins
yenienserrano Jun 18, 2026
af2aa1e
Refactor artifact paths in build workflow to use github.workspace for…
yenienserrano Jun 18, 2026
1a1fc31
Install zip utility conditionally for arm64 architecture in build wor…
yenienserrano Jun 18, 2026
48734ba
Add workarounds for AWS CodeBuild runners to handle missing tools and…
yenienserrano Jun 18, 2026
1734a9b
Add Docker Hub login step and conditional Docker daemon start for AWS…
yenienserrano Jun 18, 2026
fd65dcc
Improve Docker daemon startup process in build workflow for ARM archi…
yenienserrano Jun 18, 2026
602b1ea
Add Docker Hub login and start Docker daemon for AWS CodeBuild runners
yenienserrano Jun 18, 2026
3167120
Add workarounds for AWS CodeBuild runners to handle systemd service m…
yenienserrano Jun 18, 2026
42a0c14
Refactor DEB package testing to use systemd-enabled container and str…
yenienserrano Jun 19, 2026
1c25861
Add workaround to install pip3 for AWS CodeBuild ARM runners
yenienserrano Jun 19, 2026
7c36398
Add missing apt-get update before package installation in deb-test sc…
yenienserrano Jun 19, 2026
0f46d84
Add workaround for AWS CodeBuild ARM runners to install pip3 and open…
yenienserrano Jun 19, 2026
fed0250
Refactor GitHub Actions workflows to use formatted runner names for A…
yenienserrano Jun 19, 2026
15600d1
Refactor GitHub Actions workflows to use updated runner names for AWS…
yenienserrano Jun 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions .github/workflows/4_builderpackage_dashboard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ permissions:

jobs:
setup-variables:
runs-on: wz-linux-amd64
runs-on: codebuild-github-actions-codebuild-runner-dashboard-amd-${{ github.run_id }}-${{ github.run_attempt }}
name: Setup variables
outputs:
CURRENT_DIR: ${{ steps.setup-variables.outputs.CURRENT_DIR }}
Expand Down Expand Up @@ -226,7 +226,7 @@ jobs:
echo "ARCHITECTURE_FLAG=$ARCHITECTURE_FLAG" >> $GITHUB_OUTPUT

validate-job:
runs-on: wz-linux-amd64
runs-on: codebuild-github-actions-codebuild-runner-dashboard-amd-${{ github.run_id }}-${{ github.run_attempt }}
needs: setup-variables
name: Validate inputs
steps:
Expand Down Expand Up @@ -276,7 +276,7 @@ jobs:

build-package:
needs: [setup-variables, build-main-plugins, build-base, build-security-plugin]
runs-on: ${{ (inputs.architecture == 'arm64' || inputs.architecture == 'aarch64') && 'wz-linux-arm64' || 'wz-linux-amd64' }}
runs-on: ${{ (inputs.architecture == 'arm64' || inputs.architecture == 'aarch64') && format('codebuild-github-actions-codebuild-runner-dashboard-arm-{0}-{1}', github.run_id, github.run_attempt) || format('codebuild-github-actions-codebuild-runner-dashboard-amd-{0}-{1}', github.run_id, github.run_attempt) }}
name: Generate packages
steps:
- name: Checkout code
Expand Down Expand Up @@ -353,7 +353,7 @@ jobs:

test-package:
needs: [setup-variables, build-package]
runs-on: ${{ needs.setup-variables.outputs.ARCHITECTURE_FLAG == '--arm' && 'wz-linux-arm64' || 'wz-linux-amd64' }}
runs-on: ${{ needs.setup-variables.outputs.ARCHITECTURE_FLAG == '--arm' && format('codebuild-github-actions-codebuild-runner-dashboard-arm-{0}-{1}', github.run_id, github.run_attempt) || format('codebuild-github-actions-codebuild-runner-dashboard-amd-{0}-{1}', github.run_id, github.run_attempt) }}
strategy:
fail-fast: false
name: Test package
Expand Down Expand Up @@ -545,7 +545,7 @@ jobs:

upload-package:
needs: [setup-variables, test-package]
runs-on: ${{ inputs.architecture == 'arm64' && 'wz-linux-arm64' || 'wz-linux-amd64' }}
runs-on: ${{ inputs.architecture == 'arm64' && format('codebuild-github-actions-codebuild-runner-dashboard-arm-{0}-{1}', github.run_id, github.run_attempt) || format('codebuild-github-actions-codebuild-runner-dashboard-amd-{0}-{1}', github.run_id, github.run_attempt) }}
name: Upload package
steps:
- name: Set up AWS CLI
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/4_builderpackage_dashboard_core.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ on:

jobs:
build:
runs-on: ${{ (inputs.ARCHITECTURE == 'x86_64' || inputs.ARCHITECTURE == 'amd64') && 'wz-linux-amd64' || 'wz-linux-arm64' }}
runs-on: ${{ (inputs.ARCHITECTURE == 'x86_64' || inputs.ARCHITECTURE == 'amd64') && format('codebuild-github-actions-codebuild-runner-dashboard-amd-{0}-{1}', github.run_id, github.run_attempt) || format('codebuild-github-actions-codebuild-runner-dashboard-arm-{0}-{1}', github.run_id, github.run_attempt) }}
name: Build
defaults:
run:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/4_bumper_repository.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ on:
jobs:
bump:
name: Repository bumper
runs-on: ubuntu-22.04
runs-on: codebuild-github-actions-codebuild-runner-dashboard-amd-${{ github.run_id }}-${{ github.run_attempt }}
permissions:
contents: write
pull-requests: write
Expand Down
223 changes: 99 additions & 124 deletions .github/workflows/5_builderpackage_dashboard.yml

Large diffs are not rendered by default.

17 changes: 13 additions & 4 deletions .github/workflows/5_builderpackage_dashboard_core.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ on:

jobs:
build:
runs-on: ${{ (inputs.ARCHITECTURE == 'x86_64' || inputs.ARCHITECTURE == 'amd64') && 'wz-linux-amd64' || 'wz-linux-arm64' }}
runs-on: ${{ (inputs.ARCHITECTURE == 'x86_64' || inputs.ARCHITECTURE == 'amd64') && format('codebuild-github-actions-codebuild-runner-dashboard-amd-{0}-{1}', github.run_id, github.run_attempt) || format('codebuild-github-actions-codebuild-runner-dashboard-arm-{0}-{1}', github.run_id, github.run_attempt) }}
name: Build
defaults:
run:
Expand Down Expand Up @@ -88,14 +88,23 @@ jobs:
run: |
echo "ARTIFACT_BUILD_NAME=wazuh-dashboard_${{ env.WZD_VERSION }}-${{ env.WZD_REVISION }}_${{ (inputs.ARCHITECTURE == 'x86_64' || inputs.ARCHITECTURE == 'amd64') && 'x64' || 'arm64' }}.${{ matrix.DISTRIBUTION }}" >> $GITHUB_ENV

# Workaround: AWS CodeBuild runners execute as root; OpenSearch Dashboards refuses to run as root
- name: Create non-root build user
run: |
useradd -m builduser
chown -R builduser:builduser .

- name: Run bootstrap
run: yarn osd bootstrap || yarn osd bootstrap
run: |
chown -R builduser:builduser "$YARN_CACHE_LOCATION" 2>/dev/null || true
sudo -u builduser -H env PATH="$PATH" yarn osd bootstrap || \
sudo -u builduser -H env PATH="$PATH" yarn osd bootstrap

- name: Build
run: yarn build-platform --${{(inputs.ARCHITECTURE == 'x86_64' || inputs.ARCHITECTURE == 'amd64') && 'linux' || 'linux-arm'}} --skip-os-packages --release
run: sudo -u builduser -H env PATH="$PATH" yarn build-platform --${{(inputs.ARCHITECTURE == 'x86_64' || inputs.ARCHITECTURE == 'amd64') && 'linux' || 'linux-arm'}} --skip-os-packages --release

- name: Rename artifact
run: mv /home/runner/work/wazuh-dashboard/wazuh-dashboard/artifacts/target/opensearch-dashboards-${{ env.VERSION }}-linux-${{ (inputs.ARCHITECTURE == 'x86_64' || inputs.ARCHITECTURE == 'amd64') && 'x64' || 'arm64' }}.${{ matrix.DISTRIBUTION }} /home/runner/work/wazuh-dashboard/wazuh-dashboard/artifacts/target/${{ env.ARTIFACT_BUILD_NAME }}
run: mv target/opensearch-dashboards-${{ env.VERSION }}-linux-${{ (inputs.ARCHITECTURE == 'x86_64' || inputs.ARCHITECTURE == 'amd64') && 'x64' || 'arm64' }}.${{ matrix.DISTRIBUTION }} target/${{ env.ARTIFACT_BUILD_NAME }}

- uses: actions/upload-artifact@v4
if: success()
Expand Down
15 changes: 12 additions & 3 deletions .github/workflows/5_builderpackage_dashboard_plugins.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ on:
jobs:
build-plugins:
name: Build Plugin ${{ inputs.name }}
runs-on: wz-linux-amd64
runs-on: codebuild-github-actions-codebuild-runner-dashboard-amd-${{ github.run_id }}-${{ github.run_attempt }}
env:
PLUGIN_REF: ${{ inputs.reference_plugins }}
steps:
Expand Down Expand Up @@ -113,18 +113,27 @@ jobs:
mv ${{inputs.pathPlugin}}/${{ inputs.path }} plugins/${{ inputs.name }}
rm -rf ${{inputs.pathPlugin}}

# Workaround: AWS CodeBuild runners execute as root; OpenSearch Dashboards refuses to run as root
- name: Create non-root build user
run: |
useradd -m builduser
chown -R builduser:builduser .

- name: Bootstrap with Plugins
env:
GIT_REF: ${{ env.PLUGIN_REF }}
run: yarn osd bootstrap --single-version=loose || yarn osd bootstrap --single-version=loose
run: |
chown -R builduser:builduser "$YARN_CACHE_LOCATION" 2>/dev/null || true
sudo -u builduser -H env PATH="$PATH" GIT_REF="$GIT_REF" yarn osd bootstrap --single-version=loose || \
sudo -u builduser -H env PATH="$PATH" GIT_REF="$GIT_REF" yarn osd bootstrap --single-version=loose

- name: Build Plugin
working-directory: plugins/${{ inputs.name }}
env:
GIT_REF: ${{ env.PLUGIN_REF }}
run: |
set -o pipefail
OPENSEARCH_DASHBOARDS_VERSION=${{ inputs.version_opensearch }} yarn build 2>&1 | tee build.log
sudo -u builduser -H env PATH="$PATH" GIT_REF="$GIT_REF" OPENSEARCH_DASHBOARDS_VERSION="${{ inputs.version_opensearch }}" yarn build 2>&1 | tee build.log

- name: Build metadata
if: success()
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/5_builderpackage_dev_docker_image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ on:

jobs:
extract-versions:
runs-on: ubuntu-24.04
runs-on: codebuild-github-actions-codebuild-runner-dashboard-amd-${{ github.run_id }}-${{ github.run_attempt }}
outputs:
opensearch_version: ${{ steps.versions.outputs.opensearch_version }}
tag: ${{ steps.versions.outputs.tag }}
Expand Down Expand Up @@ -95,10 +95,10 @@ jobs:
matrix:
include:
- platform: linux/amd64
runner: ubuntu-24.04
runner: ${{ format('codebuild-github-actions-codebuild-runner-dashboard-amd-{0}-{1}', github.run_id, github.run_attempt) }}
arch: amd64
- platform: linux/arm64
runner: ubuntu-24.04-arm
runner: ${{ format('codebuild-github-actions-codebuild-runner-dashboard-arm-{0}-{1}', github.run_id, github.run_attempt) }}
arch: arm64
steps:
- name: Checkout code
Expand Down Expand Up @@ -153,7 +153,7 @@ jobs:
--push

create-manifest:
runs-on: ubuntu-24.04
runs-on: ${{ format('codebuild-github-actions-codebuild-runner-dashboard-amd-{0}-{1}', github.run_id, github.run_attempt) }}
needs: [extract-versions, build]

steps:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/5_bumper_repository.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ on:
jobs:
bump:
name: Repository bumper
runs-on: ubuntu-22.04
runs-on: codebuild-github-actions-codebuild-runner-dashboard-amd-${{ github.run_id }}-${{ github.run_attempt }}
permissions:
contents: write
pull-requests: write
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/6_builderpackage_dashboard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ jobs:
# - Final package name based on system, architecture and stage.
# - Architecture flags.
# - Version, revision and commit SHA information.
runs-on: wz-linux-amd64
runs-on: codebuild-github-actions-codebuild-runner-dashboard-amd-${{ github.run_id }}-${{ github.run_attempt }}
name: Setup variables
outputs:
CURRENT_DIR: ${{ steps.setup-variables.outputs.CURRENT_DIR }}
Expand Down Expand Up @@ -235,7 +235,7 @@ jobs:
validate-job:
# 1. Validates valid combinations of system and architecture.
# 2. Sets up AWS CLI for future uploads if needed.
runs-on: wz-linux-amd64
runs-on: codebuild-github-actions-codebuild-runner-dashboard-amd-${{ github.run_id }}-${{ github.run_attempt }}
needs: setup-variables
name: Validate job
steps:
Expand Down Expand Up @@ -296,7 +296,7 @@ jobs:
# 7. Finally, upload the resulting package as an artifact.
needs:
[setup-variables, build-main-plugins, build-base, build-security-plugin, build-report-plugin]
runs-on: ${{ (inputs.architecture == 'arm64' || inputs.architecture == 'aarch64') && 'wz-linux-arm64' || 'wz-linux-amd64' }}
runs-on: ${{ (inputs.architecture == 'arm64' || inputs.architecture == 'aarch64') && format('codebuild-github-actions-codebuild-runner-dashboard-arm-{0}-{1}', github.run_id, github.run_attempt) || format('codebuild-github-actions-codebuild-runner-dashboard-amd-{0}-{1}', github.run_id, github.run_attempt) }}
name: Generate packages
steps:
- name: Checkout code
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/6_builderpackage_dashboard_core.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ on:

jobs:
build:
runs-on: ${{ (inputs.ARCHITECTURE == 'x86_64' || inputs.ARCHITECTURE == 'amd64') && 'wz-linux-amd64' || 'wz-linux-arm64' }}
runs-on: ${{ (inputs.ARCHITECTURE == 'x86_64' || inputs.ARCHITECTURE == 'amd64') && 'codebuild-github-actions-codebuild-runner-dashboard-amd-${{ github.run_id }}-${{ github.run_attempt }}' || 'codebuild-github-actions-codebuild-runner-dashboard-arm-${{ github.run_id }}-${{ github.run_attempt }}' }}
name: Build
defaults:
run:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/6_bumper_repository.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ on:
jobs:
bump:
name: Repository bumper
runs-on: ubuntu-22.04
runs-on: codebuild-github-actions-codebuild-runner-dashboard-amd-${{ github.run_id }}-${{ github.run_attempt }}
permissions:
contents: write
pull-requests: write
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build_base.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ on:

jobs:
build:
runs-on: ${{ (inputs.ARCHITECTURE == 'x86_64' || inputs.ARCHITECTURE == 'amd64') && 'ubuntu-latest' || 'wz-linux-arm64' }}
runs-on: ${{ (inputs.ARCHITECTURE == 'x86_64' || inputs.ARCHITECTURE == 'amd64') && format('github-actions-codebuild-runner-dashboard-amd-{0}-{1}', github.run_id, github.run_attempt) || format('github-actions-codebuild-runner-dashboard-arm-{0}-{1}', github.run_id, github.run_attempt) }}
name: Build
defaults:
run:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/build_wazuh_dashboard_with_plugins.yml
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ jobs:

build-package:
needs: [setup-variables, build-main-plugins, build-base, build-security-plugin]
runs-on: ${{ (inputs.architecture == 'arm64' || inputs.architecture == 'aarch64') && 'wz-linux-arm64' || 'ubuntu-22.04' }}
runs-on: ${{ (inputs.architecture == 'arm64' || inputs.architecture == 'aarch64') && format('github-actions-codebuild-runner-dashboard-arm-${{ github.run_id }}-${{ github.run_attempt }}') || format('github-actions-codebuild-runner-dashboard-amd64-${{ github.run_id }}-${{ github.run_attempt }}') }}
name: Generate packages
steps:
- name: Checkout code
Expand Down Expand Up @@ -336,7 +336,7 @@ jobs:

test-package:
needs: [setup-variables, build-package]
runs-on: ${{ needs.setup-variables.outputs.ARCHITECTURE_FLAG == '--arm' && 'ubuntu-24.04-arm' || 'ubuntu-24.04' }}
runs-on: ${{ needs.setup-variables.outputs.ARCHITECTURE_FLAG == '--arm' && format('github-actions-codebuild-runner-dashboard-arm-${{ github.run_id }}-${{ github.run_attempt }}') || format('github-actions-codebuild-runner-dashboard-amd64-${{ github.run_id }}-${{ github.run_attempt }}') }}
strategy:
fail-fast: false
name: Test package
Expand Down
29 changes: 29 additions & 0 deletions dev-tools/test-packages/builder/systemd-test.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Minimal systemd-enabled Ubuntu image for DEB package tests, booted with
# /sbin/init. Built from AWS ECR Public to avoid Docker Hub unauthenticated
# pull-rate limits on CodeBuild runners.
FROM public.ecr.aws/ubuntu/ubuntu:jammy

ENV DEBIAN_FRONTEND=noninteractive
ENV container=docker

RUN apt-get update && \
apt-get install -y --no-install-recommends \
systemd \
systemd-sysv \
dbus \
curl \
ca-certificates \
gnupg \
apt-transport-https \
libcap2-bin && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* && \
# Drop units that are pointless (and slow/noisy) inside a container.
rm -f /lib/systemd/system/systemd-update-utc* \
/lib/systemd/system/systemd-tmpfiles-setup* \
/lib/systemd/system/sysinit.target.wants/systemd-firstboot.service \
/lib/systemd/system/multi-user.target.wants/systemd-update-utmp-runlevel.service

STOPSIGNAL SIGRTMIN+3

CMD ["/sbin/init"]
50 changes: 50 additions & 0 deletions dev-tools/test-packages/deb-test-cross-major-blocked.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/bin/bash
# Runs inside the systemd container started by run_in_systemd_container.sh.
# Tests that installing a 5.x package over a running 4.x installation is blocked.
#
# Usage: deb-test-cross-major-blocked.sh <package-name> <previous-4x-version>

set -euo pipefail

PACKAGE_NAME="$1"
PREVIOUS="$2"

apt-get update
apt-get install -y debhelper tar curl libcap2-bin gnupg apt-transport-https
curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH \
| gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import
chmod 644 /usr/share/keyrings/wazuh.gpg
echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" \
| tee -a /etc/apt/sources.list.d/wazuh.list
apt-get update
apt-get -y install "wazuh-dashboard=${PREVIOUS}"

systemctl daemon-reload
systemctl enable wazuh-dashboard
systemctl start wazuh-dashboard
if systemctl status wazuh-dashboard | grep -q "active (running)"; then
echo "Service running"
else
echo "ERROR: Service not running"
exit 1
fi

# Attempt 5.x upgrade — MUST fail
set +e
OUTPUT=$(dpkg -i "/test-packages/${PACKAGE_NAME}" 2>&1)
EXIT_CODE=$?
set -e

if [ "$EXIT_CODE" -eq 0 ]; then
echo "ERROR: Installation should have been blocked but succeeded"
exit 1
fi

if echo "$OUTPUT" | grep -F -q "ERROR: Upgrade from Wazuh dashboard versions prior to 5.x is not supported."; then
echo "TEST: Cross-major upgrade correctly blocked"
echo "$OUTPUT"
else
echo "ERROR: Expected block message not found"
echo "$OUTPUT"
exit 1
fi
35 changes: 35 additions & 0 deletions dev-tools/test-packages/deb-test-install-uninstall.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#!/bin/bash
# Runs inside the systemd container started by run_in_systemd_container.sh.
# Tests that the package installs, the service starts, and the package uninstalls cleanly.
#
# Usage: deb-test-install-uninstall.sh <package-name>

set -euo pipefail

PACKAGE_NAME="$1"

dpkg -i "/test-packages/${PACKAGE_NAME}"
if dpkg-query -W -f='${Status}' wazuh-dashboard 2>/dev/null | grep -q "install ok installed"; then
echo "Package installed"
else
echo "Package not installed"
exit 1
fi

systemctl daemon-reload
systemctl enable wazuh-dashboard
systemctl start wazuh-dashboard
if systemctl status wazuh-dashboard | grep -q "active (running)"; then
echo "Service running"
else
echo "Service not running"
exit 1
fi

apt-get remove --purge wazuh-dashboard -y
if dpkg-query -W -f='${Status}' wazuh-dashboard 2>/dev/null | grep -q "install ok installed"; then
echo "Package not uninstalled"
exit 1
else
echo "Package uninstalled"
fi
Loading
Loading