Merge pull request #36 from middleware-cloud/create-pull-request/patch #46
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: [ master ] | |
pull_request: | |
branches: [ master ] | |
jobs: | |
test-compose: | |
name: 'Test suite: Compose' | |
# List of supported runners: | |
# https://docs.github.com/en/free-pro-team@latest/actions/reference/specifications-for-github-hosted-runners#supported-runners-and-hardware-resources | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v2 | |
##################################################### | |
# # | |
# Install all dependencies required by test suites. # | |
# # | |
##################################################### | |
- name: Prepare environment | |
run: | | |
# Install Linux packages | |
# | |
# List of packages pre-installed in the runner: | |
# https://docs.github.com/en/free-pro-team@latest/actions/reference/specifications-for-github-hosted-runners#supported-software | |
sudo apt install -y expect | |
# Pre-build container images | |
docker-compose build | |
######################################################## | |
# # | |
# Ensure §"Initial setup" of the README remains valid. # | |
# # | |
######################################################## | |
- name: Set password of every built-in user to 'testpasswd' | |
run: | | |
# Change password of 'elastic' user from 'changeme' to 'testpasswd' in config files | |
sed -i -e 's/\(xpack.monitoring.elasticsearch.username:\) elastic/\1 logstash_system/g' -e 's/\(xpack.monitoring.elasticsearch.password:\) changeme/\1 testpasswd/g' logstash/config/logstash.yml | |
sed -i 's/\(password =>\) "changeme"/\1 "testpasswd"/g' logstash/pipeline/logstash.conf | |
sed -i -e 's/\(elasticsearch.username:\) elastic/\1 kibana_system/g' -e 's/\(elasticsearch.password:\) changeme/\1 testpasswd/g' kibana/config/kibana.yml | |
sed -i -e 's/\(elasticsearch.password:\) changeme/\1 testpasswd/g' -e 's/\(secret_management.encryption_keys:\)/\1 [test-encrypt]/g' extensions/enterprise-search/config/enterprise-search.yml | |
sed -i 's/\(password:\) changeme/\1 testpasswd/g' extensions/apm-server/config/apm-server.yml | |
sed -i 's/\(password:\) changeme/\1 testpasswd/g' extensions/metricbeat/config/metricbeat.yml | |
# Run Elasticsearch and wait for its availability | |
docker-compose up -d elasticsearch | |
source .github/workflows/scripts/lib/testing.sh | |
poll_ready "$(container_id elasticsearch)" "http://$(service_ip elasticsearch):9200/" -u 'elastic:changeme' | |
# Set passwords | |
.github/workflows/scripts/elasticsearch-setup-passwords.exp | |
########################################################## | |
# # | |
# 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 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 | |
# Run Logspout and execute tests. | |
# Logstash will be restarted as a result of building the Logspout | |
# image, so changes above will automatically take effect. | |
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 | |
- 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 | |
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 | |
############## | |
# # | |
# 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 | |
down -v | |
test-swarm: | |
name: 'Test suite: Swarm' | |
runs-on: ubuntu-latest | |
env: | |
MODE: swarm | |
steps: | |
- uses: actions/checkout@v2 | |
##################################################### | |
# # | |
# Install all dependencies required by test suites. # | |
# # | |
##################################################### | |
- name: Prepare environment | |
run: | | |
# Install Linux packages | |
sudo apt install -y expect | |
# Enable Swarm mode | |
docker swarm init | |
######################################################## | |
# # | |
# Ensure §"Initial setup" of the README remains valid. # | |
# # | |
######################################################## | |
- name: Set password of every built-in user to 'testpasswd' | |
run: | | |
# Change password of 'elastic' user from 'changeme' to 'testpasswd' in config files | |
sed -i -e 's/\(xpack.monitoring.elasticsearch.username:\) elastic/\1 logstash_system/g' -e 's/\(xpack.monitoring.elasticsearch.password:\) changeme/\1 testpasswd/g' logstash/config/logstash.yml | |
sed -i 's/\(password =>\) "changeme"/\1 "testpasswd"/g' logstash/pipeline/logstash.conf | |
sed -i -e 's/\(elasticsearch.username:\) elastic/\1 kibana_system/g' -e 's/\(elasticsearch.password:\) changeme/\1 testpasswd/g' kibana/config/kibana.yml | |
# Run Elasticsearch and wait for its availability | |
docker stack deploy -c ./docker-stack.yml elk | |
docker service scale elk_logstash=0 elk_kibana=0 | |
source .github/workflows/scripts/lib/testing.sh | |
poll_ready "$(container_id elasticsearch)" "http://$(service_ip elasticsearch):9200/" -u 'elastic:changeme' | |
# Set passwords | |
.github/workflows/scripts/elasticsearch-setup-passwords.exp swarm | |
########################################################## | |
# # | |
# Test core components: Elasticsearch, Logstash, Kibana. # | |
# # | |
########################################################## | |
- name: Run the stack | |
run: docker service scale elk_logstash=1 elk_kibana=1 | |
- name: Execute core test suite | |
run: .github/workflows/scripts/run-tests-core.sh swarm | |
- name: 'debug: Display state and logs (core)' | |
if: always() | |
run: | | |
docker stack services elk | |
docker service logs elk_elasticsearch | |
docker service logs elk_kibana | |
docker service logs elk_logstash | |
############## | |
# # | |
# Tear down. # | |
# # | |
############## | |
- name: Terminate all components | |
if: always() | |
run: docker stack rm elk |