name: Wazuh Docker pipeline permissions: contents: read id-token: write on: [pull_request] jobs: prepare-variables: runs-on: ubuntu-latest outputs: WAZUH_VERSION: ${{ steps.dotenv.outputs.WAZUH_VERSION }} WAZUH_IMAGE_VERSION: ${{ steps.dotenv.outputs.WAZUH_IMAGE_VERSION }} WAZUH_TAG_REVISION: ${{ steps.dotenv.outputs.WAZUH_TAG_REVISION }} WAZUH_UI_REVISION: ${{ steps.dotenv.outputs.WAZUH_UI_REVISION }} WAZUH_REGISTRY: ${{ vars.IMAGE_REGISTRY_DEV }} IMAGE_TAG: ${{ steps.dotenv.outputs.IMAGE_TAG }} WAZUH_MINOR_VERSION: ${{ steps.dotenv.outputs.WAZUH_MINOR_VERSION }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Export .env variables id: dotenv shell: bash run: | if [ ! -f .env ]; then echo "::error::.env missing"; exit 1; fi grep -v '^#' .env | grep -v '^\s*$' >> "$GITHUB_OUTPUT" FULL_VERSION=$(grep "^WAZUH_VERSION=" .env | cut -d'=' -f2) MINOR_VERSION=$(echo "$FULL_VERSION" | cut -d'.' -f1,2) echo "WAZUH_MINOR_VERSION=$MINOR_VERSION" >> "$GITHUB_OUTPUT" build-images: runs-on: ubuntu-latest needs: prepare-variables steps: - name: Build step run: echo "Build Docker images here" # uses: ./.github/workflows/Procedure_push_docker_images.yml # secrets: inherit # with: # image_tag: ${{ needs.prepare-variables.outputs.WAZUH_IMAGE_VERSION }} # docker_reference: ${{ github.head_ref }} # revision: ${{ needs.prepare-variables.outputs.WAZUH_TAG_REVISION }} # reference: "latest" # id: ${{ github.run_id }} # dev: true Execute-Goss-tests: needs: [prepare-variables, build-images] runs-on: ubuntu-22.04 env: WAZUH_IMAGE_VERSION: ${{ needs.prepare-variables.outputs.WAZUH_IMAGE_VERSION }} WAZUH_REGISTRY: ${{ needs.prepare-variables.outputs.WAZUH_REGISTRY }} steps: - name: Check out code uses: actions/checkout@v4 - name: Install Goss uses: e1himself/goss-installation-action@v1.0.3 with: version: 'v0.4.4' - name: Configure aws credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: ${{ secrets.AWS_IAM_DOCKER_ROLE }} aws-region: "${{ secrets.AWS_REGION }}" - name: Log in to Amazon ECR uses: aws-actions/amazon-ecr-login@v2 - name: Execute Goss tests (wazuh-manager) run: dgoss run ${{ env.WAZUH_REGISTRY }}/wazuh/wazuh-manager:${{ env.WAZUH_IMAGE_VERSION }} env: GOSS_SLEEP: 30 GOSS_FILE: .github/.goss.yaml check-single-node: name: Check single node on ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-22.04, ubuntu-22.04-arm] fail-fast: false needs: [prepare-variables, Execute-Goss-tests, build-images] env: WAZUH_IMAGE_VERSION: ${{ needs.prepare-variables.outputs.WAZUH_IMAGE_VERSION }} WAZUH_MINOR_VERSION: ${{ needs.prepare-variables.outputs.WAZUH_MINOR_VERSION }} WAZUH_REGISTRY: ${{ needs.prepare-variables.outputs.WAZUH_REGISTRY }} INDEXER_USERNAME: admin INDEXER_PASSWORD: admin API_USERNAME: wazuh-wui API_PASSWORD: MyS3cr37P450r.*- MANAGER_NODES: "manager" steps: - name: Check out code uses: actions/checkout@v4 - name: free disk space uses: ./.github/free-disk-space - name: Configure aws credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: ${{ secrets.AWS_IAM_DOCKER_ROLE }} aws-region: "${{ secrets.AWS_REGION }}" - name: Log in to Amazon ECR uses: aws-actions/amazon-ecr-login@v2 - name: Create single node certficates run: | wazuh_certs_tool_url=$(aws s3 presign s3://${{ vars.AWS_S3_BUCKET_DEV }}/development/wazuh/5.x/secondary/installation-assistant/${{ env.WAZUH_IMAGE_VERSION }}/wazuh-certs-tool.sh --expires-in 3600 --region us-west-1) curl -sL "$wazuh_certs_tool_url" -o ./wazuh-certs-tool.sh cat > config.yml </$(ip addr show docker0 | grep 'inet ' | awk '{print $2}' | cut -d'/' -f1)/g" wazuh-agent/docker-compose.yml - name: Edit Wazuh agent docker-compose file shell: bash env: WAZUH_REGISTRY: ${{ env.WAZUH_REGISTRY }} run: | TARGET_FILE="wazuh-agent/docker-compose.yml" if [ -f "$TARGET_FILE" ]; then echo "Updating registry in $TARGET_FILE to: ${{ env.WAZUH_REGISTRY }}" sed -i "s|wazuh/wazuh-|${{ env.WAZUH_REGISTRY }}/wazuh/wazuh-|g" "$TARGET_FILE" else echo "File $TARGET_FILE not found" exit 1 fi - name: Start Wazuh agent run: docker compose up -d working-directory: ./wazuh-agent - name: Check Wazuh agent enrollment run: | sleep 20 curl -k -s -X GET "https://localhost:55000/agents?pretty=true" -H "Authorization: Bearer ${{env.TOKEN}}" env: TOKEN: $(curl -s -u ${{ env.API_USERNAME }}:${{ env.API_PASSWORD }} -k -X GET "https://127.0.0.1:55000/security/user/authenticate?raw=true") - name: Check errors in ossec.log for Wazuh manager run: ./.github/single-node-log-check.sh check-multi-node: name: Check multi node on ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-22.04, ubuntu-22.04-arm] fail-fast: false needs: [prepare-variables, Execute-Goss-tests, build-images] env: WAZUH_IMAGE_VERSION: ${{ needs.prepare-variables.outputs.WAZUH_IMAGE_VERSION }} WAZUH_MINOR_VERSION: ${{ needs.prepare-variables.outputs.WAZUH_MINOR_VERSION }} WAZUH_REGISTRY: ${{ needs.prepare-variables.outputs.WAZUH_REGISTRY }} INDEXER_USERNAME: admin INDEXER_PASSWORD: admin API_USERNAME: wazuh-wui API_PASSWORD: MyS3cr37P450r.*- MANAGER_NODES: "master,worker01" steps: - name: Check out code uses: actions/checkout@v4 - name: free disk space uses: ./.github/free-disk-space - name: Configure aws credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: ${{ secrets.AWS_IAM_DOCKER_ROLE }} aws-region: "${{ secrets.AWS_REGION }}" - name: Log in to Amazon ECR uses: aws-actions/amazon-ecr-login@v2 - name: Create multi node certficates run: | wazuh_certs_tool_url=$(aws s3 presign s3://${{ vars.AWS_S3_BUCKET_DEV }}/development/wazuh/5.x/secondary/installation-assistant/${{ env.WAZUH_IMAGE_VERSION }}/wazuh-certs-tool.sh --expires-in 3600 --region us-west-1) curl -sL "$wazuh_certs_tool_url" -o ./wazuh-certs-tool.sh cat > config.yml </$(ip addr show docker0 | grep 'inet ' | awk '{print $2}' | cut -d'/' -f1)/g" wazuh-agent/docker-compose.yml - name: Edit Wazuh agent docker-compose file shell: bash env: WAZUH_REGISTRY: ${{ env.WAZUH_REGISTRY }} run: | TARGET_FILE="wazuh-agent/docker-compose.yml" if [ -f "$TARGET_FILE" ]; then echo "Updating registry in $TARGET_FILE to: ${{ env.WAZUH_REGISTRY }}" sed -i "s|wazuh/wazuh-|${{ env.WAZUH_REGISTRY }}/wazuh/wazuh-|g" "$TARGET_FILE" else echo "File $TARGET_FILE not found" exit 1 fi - name: Start Wazuh agent run: docker compose -f wazuh-agent/docker-compose.yml up -d - name: Check Wazuh agent enrollment run: | sleep 20 curl -k -s -X GET "https://localhost:55000/agents?pretty=true" -H "Authorization: Bearer ${{env.TOKEN}}" env: TOKEN: $(curl -s -u ${{ env.API_USERNAME }}:${{ env.API_PASSWORD }} -k -X GET "https://127.0.0.1:55000/security/user/authenticate?raw=true") - name: Check errors in ossec.log for Wazuh manager run: ./.github/multi-node-log-check.sh