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: Prepare environment run: | # Pre-build container images docker compose \ -f docker-compose.yml \ -f extensions/logspout/logspout-compose.yml \ -f extensions/enterprise-search/enterprise-search-compose.yml \ -f extensions/apm-server/apm-server-compose.yml \ -f extensions/metricbeat/metricbeat-compose.yml \ -f extensions/filebeat/filebeat-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' .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 => 5000 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 -d logspout .github/workflows/scripts/run-tests-logspout.sh # Revert changes to Logstash configuration sed -i '/input { udp { port => 5000 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 Logspout docker compose -f docker-compose.yml -f extensions/logspout/logspout-compose.yml stop logspout # next steps don't need Logstash docker compose stop logstash # # 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 -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 # next steps don't need Enterprise Search docker compose -f docker-compose.yml -f extensions/enterprise-search/enterprise-search-compose.yml stop enterprise-search # # APM Server # - name: Execute APM Server test suite run: | docker compose -f docker-compose.yml -f extensions/apm-server/apm-server-compose.yml up -d apm-server .github/workflows/scripts/run-tests-apm-server.sh - name: 'debug: Display state and logs (APM Server)' if: always() run: | docker compose -f docker-compose.yml -f extensions/apm-server/apm-server-compose.yml ps docker compose -f docker-compose.yml -f extensions/apm-server/apm-server-compose.yml logs apm-server # next steps don't need APM Server docker compose -f docker-compose.yml -f extensions/apm-server/apm-server-compose.yml stop apm-server # # Metricbeat # - name: Execute Metricbeat test suite run: | docker compose -f docker-compose.yml -f extensions/metricbeat/metricbeat-compose.yml up -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 # next steps don't need Metricbeat docker compose -f docker-compose.yml -f extensions/metricbeat/metricbeat-compose.yml stop metricbeat # # Filebeat # - name: Execute Filebeat test suite run: | docker compose -f docker-compose.yml -f extensions/filebeat/filebeat-compose.yml up -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 # next steps don't need Filebeat docker compose -f docker-compose.yml -f extensions/filebeat/filebeat-compose.yml stop filebeat ############## # # # Tear down. # # # ############## - name: Terminate all components if: always() run: >- docker compose -f docker-compose.yml -f extensions/logspout/logspout-compose.yml -f extensions/enterprise-search/enterprise-search-compose.yml -f extensions/apm-server/apm-server-compose.yml -f extensions/metricbeat/metricbeat-compose.yml -f extensions/filebeat/filebeat-compose.yml down -v