229 lines
8.7 KiB
YAML
229 lines
8.7 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches: [ main ]
|
|
pull_request:
|
|
branches: [ main ]
|
|
|
|
jobs:
|
|
|
|
test:
|
|
name: Test suite
|
|
# List of supported runners:
|
|
# https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners
|
|
runs-on: ubuntu-22.04
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
#####################################################
|
|
# #
|
|
# Install all dependencies required by test suites. #
|
|
# #
|
|
#####################################################
|
|
|
|
- name: Pre-build container images
|
|
run: >-
|
|
docker compose
|
|
-f docker-compose.yml
|
|
-f extensions/logspout/logspout-compose.yml
|
|
-f extensions/fleet/fleet-compose.yml
|
|
-f extensions/fleet/agent-apmserver-compose.yml
|
|
-f extensions/metricbeat/metricbeat-compose.yml
|
|
-f extensions/filebeat/filebeat-compose.yml
|
|
-f extensions/heartbeat/heartbeat-compose.yml
|
|
-f extensions/enterprise-search/enterprise-search-compose.yml
|
|
build
|
|
|
|
########################################################
|
|
# #
|
|
# Ensure §"Initial setup" of the README remains valid. #
|
|
# #
|
|
########################################################
|
|
|
|
- name: Set password of every built-in user to 'testpasswd'
|
|
run: |
|
|
|
|
sed -i -e 's/\(ELASTIC_PASSWORD=\)'\''changeme'\''/\1testpasswd/g' \
|
|
-e 's/\(LOGSTASH_INTERNAL_PASSWORD=\)'\''changeme'\''/\1testpasswd/g' \
|
|
-e 's/\(KIBANA_SYSTEM_PASSWORD=\)'\''changeme'\''/\1testpasswd/g' \
|
|
-e 's/\(BEATS_SYSTEM_PASSWORD=\)'\'\''/\1testpasswd/g' \
|
|
-e 's/\(REMOTE_MONITORING_USER_PASSWORD=\)'\'\''/\1testpasswd/g' .env
|
|
|
|
##########################################################
|
|
# #
|
|
# Test core components: Elasticsearch, Logstash, Kibana. #
|
|
# #
|
|
##########################################################
|
|
|
|
- name: Run the stack
|
|
run: docker compose up -d
|
|
|
|
- name: Execute core test suite
|
|
run: .github/workflows/scripts/run-tests-core.sh
|
|
|
|
- name: 'debug: Display state and logs (core)'
|
|
# https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions#jobsjob_idif
|
|
# https://docs.github.com/en/free-pro-team@latest/actions/reference/context-and-expression-syntax-for-github-actions#job-status-check-functions
|
|
if: always()
|
|
run: |
|
|
docker compose ps
|
|
docker compose logs setup
|
|
docker compose logs elasticsearch
|
|
docker compose logs logstash
|
|
docker compose logs kibana
|
|
|
|
##############################
|
|
# #
|
|
# Test supported extensions. #
|
|
# #
|
|
##############################
|
|
|
|
#
|
|
# Logspout
|
|
#
|
|
|
|
- name: Execute Logspout test suite
|
|
run: |
|
|
|
|
# Set mandatory Logstash settings
|
|
|
|
sed -i '$ a input { udp { port => 50000 codec => json } }' logstash/pipeline/logstash.conf
|
|
|
|
# Restart Logstash for changes to take effect
|
|
|
|
docker compose restart logstash
|
|
|
|
# Run Logspout and execute tests.
|
|
|
|
docker compose -f docker-compose.yml -f extensions/logspout/logspout-compose.yml up --remove-orphans -d logspout
|
|
.github/workflows/scripts/run-tests-logspout.sh
|
|
|
|
# Revert changes to Logstash configuration
|
|
|
|
sed -i '/input { udp { port => 50000 codec => json } }/d' logstash/pipeline/logstash.conf
|
|
docker compose restart logstash
|
|
|
|
- name: 'debug: Display state and logs (Logspout)'
|
|
if: always()
|
|
run: |
|
|
docker compose -f docker-compose.yml -f extensions/logspout/logspout-compose.yml ps
|
|
docker compose -f docker-compose.yml -f extensions/logspout/logspout-compose.yml logs logspout
|
|
# next steps don't need Logstash
|
|
docker compose stop logstash
|
|
|
|
#
|
|
# Fleet
|
|
#
|
|
|
|
- name: Execute Fleet test suite
|
|
run: |
|
|
docker compose -f docker-compose.yml -f extensions/fleet/fleet-compose.yml -f extensions/fleet/agent-apmserver-compose.yml up --remove-orphans -d fleet-server apm-server
|
|
.github/workflows/scripts/run-tests-fleet.sh
|
|
|
|
- name: 'debug: Display state and logs (Fleet)'
|
|
if: always()
|
|
run: |
|
|
docker compose -f docker-compose.yml -f extensions/fleet/fleet-compose.yml -f extensions/fleet/agent-apmserver-compose.yml ps
|
|
docker compose -f docker-compose.yml -f extensions/fleet/fleet-compose.yml -f extensions/fleet/agent-apmserver-compose.yml logs fleet-server
|
|
docker compose -f docker-compose.yml -f extensions/fleet/fleet-compose.yml -f extensions/fleet/agent-apmserver-compose.yml logs apm-server
|
|
|
|
#
|
|
# Metricbeat
|
|
#
|
|
|
|
- name: Execute Metricbeat test suite
|
|
run: |
|
|
docker compose -f docker-compose.yml -f extensions/metricbeat/metricbeat-compose.yml up --remove-orphans -d metricbeat
|
|
.github/workflows/scripts/run-tests-metricbeat.sh
|
|
|
|
- name: 'debug: Display state and logs (Metricbeat)'
|
|
if: always()
|
|
run: |
|
|
docker compose -f docker-compose.yml -f extensions/metricbeat/metricbeat-compose.yml ps
|
|
docker compose -f docker-compose.yml -f extensions/metricbeat/metricbeat-compose.yml logs metricbeat
|
|
|
|
#
|
|
# Filebeat
|
|
#
|
|
|
|
- name: Execute Filebeat test suite
|
|
run: |
|
|
docker compose -f docker-compose.yml -f extensions/filebeat/filebeat-compose.yml up --remove-orphans -d filebeat
|
|
.github/workflows/scripts/run-tests-filebeat.sh
|
|
|
|
- name: 'debug: Display state and logs (Filebeat)'
|
|
if: always()
|
|
run: |
|
|
docker compose -f docker-compose.yml -f extensions/filebeat/filebeat-compose.yml ps
|
|
docker compose -f docker-compose.yml -f extensions/filebeat/filebeat-compose.yml logs filebeat
|
|
|
|
#
|
|
# Heartbeat
|
|
#
|
|
|
|
- name: Execute Heartbeat test suite
|
|
run: |
|
|
docker compose -f docker-compose.yml -f extensions/heartbeat/heartbeat-compose.yml up --remove-orphans -d heartbeat
|
|
.github/workflows/scripts/run-tests-heartbeat.sh
|
|
|
|
- name: 'debug: Display state and logs (Heartbeat)'
|
|
if: always()
|
|
run: |
|
|
docker compose -f docker-compose.yml -f extensions/heartbeat/heartbeat-compose.yml ps
|
|
docker compose -f docker-compose.yml -f extensions/heartbeat/heartbeat-compose.yml logs heartbeat
|
|
|
|
#
|
|
# Enterprise Search
|
|
#
|
|
|
|
- name: Execute Enterprise Search test suite
|
|
run: |
|
|
|
|
# Set mandatory Elasticsearch settings
|
|
|
|
sed -i '$ a xpack.security.authc.api_key.enabled: true' elasticsearch/config/elasticsearch.yml
|
|
|
|
# Restart Elasticsearch for changes to take effect
|
|
|
|
docker compose restart elasticsearch
|
|
|
|
# Run Enterprise Search and execute tests
|
|
|
|
sed -i 's/\(secret_management.encryption_keys:\)/\1 [test-encrypt]/g' extensions/enterprise-search/config/enterprise-search.yml
|
|
|
|
docker compose -f docker-compose.yml -f extensions/enterprise-search/enterprise-search-compose.yml up --remove-orphans -d enterprise-search
|
|
.github/workflows/scripts/run-tests-enterprise-search.sh
|
|
|
|
# Revert changes to Elasticsearch configuration
|
|
|
|
sed -i '/xpack.security.authc.api_key.enabled: true/d' elasticsearch/config/elasticsearch.yml
|
|
docker compose restart elasticsearch
|
|
|
|
- name: 'debug: Display state and logs (Enterprise Search)'
|
|
if: always()
|
|
run: |
|
|
docker compose -f docker-compose.yml -f extensions/enterprise-search/enterprise-search-compose.yml ps
|
|
docker compose -f docker-compose.yml -f extensions/enterprise-search/enterprise-search-compose.yml logs enterprise-search
|
|
|
|
##############
|
|
# #
|
|
# Tear down. #
|
|
# #
|
|
##############
|
|
|
|
- name: Terminate all components
|
|
if: always()
|
|
run: >-
|
|
docker compose
|
|
-f docker-compose.yml
|
|
-f extensions/logspout/logspout-compose.yml
|
|
-f extensions/fleet/fleet-compose.yml
|
|
-f extensions/fleet/agent-apmserver-compose.yml
|
|
-f extensions/metricbeat/metricbeat-compose.yml
|
|
-f extensions/filebeat/filebeat-compose.yml
|
|
-f extensions/heartbeat/heartbeat-compose.yml
|
|
-f extensions/enterprise-search/enterprise-search-compose.yml
|
|
down -v
|