Merge pull request #7 from reshmabidikar/release-kaui #18
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: | |
workflow_dispatch: | |
env: | |
COMPOSE_DOCKER_CLI_BUILD: 1 | |
DB_NAME: kaui | |
DOCKER_BUILDKIT: 1 | |
JRUBY_OPTS: -J-Xmx1024M | |
KB_ADDRESS: 127.0.0.1 | |
KB_PORT: 8080 | |
RAILS_ENV: test | |
jobs: | |
test: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
include: | |
- ruby-version: '3.2.2' | |
database-adapter: 'mysql2' | |
database-user: 'root' | |
database-password: 'root' | |
database-port: '3306' | |
docker-compose-file: 'docker-compose.ci.mysql.yml' | |
- ruby-version: 'jruby-9.4.2.0' | |
database-adapter: 'mysql2' | |
database-user: 'root' | |
database-password: 'root' | |
database-port: '3306' | |
docker-compose-file: 'docker-compose.ci.mysql.yml' | |
- ruby-version: '3.2.2' | |
database-adapter: 'postgresql' | |
database-user: 'postgres' | |
database-password: 'postgres' | |
database-port: '5432' | |
docker-compose-file: 'docker-compose.ci.postgresql.yml' | |
- ruby-version: 'jruby-9.4.2.0' | |
database-adapter: 'postgresql' | |
database-user: 'postgres' | |
database-password: 'postgres' | |
database-port: '5432' | |
docker-compose-file: 'docker-compose.ci.postgresql.yml' | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: ${{ matrix.ruby-version }} | |
bundler-cache: true | |
- name: Start stack | |
run: | | |
cd docker | |
docker-compose -p it -f ${{ matrix.docker-compose-file }} up --no-start | |
docker start it_db_1 | |
- name: Wait for MySQL | |
if: ${{ matrix.docker-compose-file == 'docker-compose.ci.mysql.yml' }} | |
run: | | |
set +e | |
count=0 | |
until mysqladmin ping -h 127.0.0.1 -u root --password=root --silent; do | |
if [[ "$count" == "25" ]]; then | |
exit 1 | |
fi | |
(( count++ )) | |
printf '.' | |
sleep 5 | |
done | |
set -e | |
- name: Wait for PostgreSQL | |
if: ${{ matrix.docker-compose-file == 'docker-compose.ci.postgresql.yml' }} | |
run: | | |
set +e | |
count=0 | |
until $(psql -h 127.0.0.1 -U postgres -p 5432 -l > /dev/null); do | |
if [[ "$count" == "25" ]]; then | |
exit 1 | |
fi | |
(( count++ )) | |
printf '.' | |
sleep 5 | |
done | |
set -e | |
- name: Start Kill Bill | |
# Sometimes it gets stuck (if Kill Bill starts when the DB isn't ready?) | |
timeout-minutes: 4 | |
run: | | |
docker start it_killbill_1 | |
count=0 | |
until $(curl --connect-timeout 10 --max-time 30 --output /dev/null --silent --fail http://${KB_ADDRESS}:${KB_PORT}/1.0/healthcheck); do | |
if [[ "$count" == "180" ]]; then | |
exit 64 | |
fi | |
count=$(( count + 1 )) | |
sleep 1 | |
done | |
curl --connect-timeout 10 --max-time 30 -v \ | |
-X POST \ | |
-u admin:password \ | |
-H 'Content-Type: application/json' \ | |
-H 'X-Killbill-CreatedBy: GitHub' \ | |
-d '{"apiKey": "bob", "apiSecret": "lazar"}' \ | |
"http://${KB_ADDRESS}:${KB_PORT}/1.0/kb/tenants" | |
- name: Install plugin specific MySQL DDL | |
if: ${{ matrix.docker-compose-file == 'docker-compose.ci.mysql.yml' }} | |
run: | | |
curl https://raw.githubusercontent.com/killbill/killbill-email-notifications-plugin/master/src/main/resources/ddl.sql | mysql -h 127.0.0.1 -u root --password=root killbill | |
- name: Install plugin specific PostgreSQL DDL | |
if: ${{ matrix.docker-compose-file == 'docker-compose.ci.postgresql.yml' }} | |
run: | | |
curl https://raw.githubusercontent.com/killbill/killbill-email-notifications-plugin/master/src/main/resources/ddl.sql | psql -h 127.0.0.1 -U postgres -p 5432 -d killbill | |
- name: Install plugin | |
run: | | |
curl --connect-timeout 10 --max-time 30 -v \ | |
-X POST \ | |
-u admin:password \ | |
-H 'Content-Type: application/json' \ | |
-H 'X-Killbill-CreatedBy: GitHub' \ | |
-d '{ | |
"nodeCommandProperties": [ | |
{ | |
"key": "pluginKey", | |
"value": "email-notifications" | |
} | |
], | |
"nodeCommandType": "INSTALL_PLUGIN", | |
"isSystemCommandType": "true" | |
}' \ | |
"http://${KB_ADDRESS}:${KB_PORT}/1.0/kb/nodesInfo" | |
sudo snap install yq | |
count=0 | |
until [[ "$(curl -s -uadmin:password http://${KB_ADDRESS}:${KB_PORT}/1.0/kb/nodesInfo | jq -r '.[].pluginsInfo[] | select(.pluginKey == "email-notifications").state')" == "STOPPED" ]]; do | |
if [[ "$count" == "180" ]]; then | |
exit 64 | |
fi | |
count=$(( count + 1 )) | |
sleep 1 | |
done | |
curl --connect-timeout 10 --max-time 30 -v \ | |
-X POST \ | |
-u admin:password \ | |
-H 'Content-Type: application/json' \ | |
-H 'X-Killbill-CreatedBy: GitHub' \ | |
-d '{ | |
"nodeCommandProperties": [ | |
{ | |
"key": "pluginKey", | |
"value": "email-notifications" | |
} | |
], | |
"nodeCommandType": "START_PLUGIN", | |
"isSystemCommandType": "true" | |
}' \ | |
"http://${KB_ADDRESS}:${KB_PORT}/1.0/kb/nodesInfo" | |
count=0 | |
until [[ "$(curl -s -uadmin:password http://${KB_ADDRESS}:${KB_PORT}/1.0/kb/nodesInfo | jq -r '.[].pluginsInfo[] | select(.pluginKey == "email-notifications").state')" == "RUNNING" ]]; do | |
if [[ "$count" == "180" ]]; then | |
exit 65 | |
fi | |
count=$(( count + 1 )) | |
sleep 1 | |
done | |
- name: Run tests | |
env: | |
DB_ADAPTER: ${{ matrix.database-adapter }} | |
DB_USER: ${{ matrix.database-user }} | |
DB_PASSWORD: ${{ matrix.database-password }} | |
DB_PORT: ${{ matrix.database-port }} | |
run: | | |
# Some flakiness unfortunately | |
./bin/retry bundle exec rails t -w -f | |
- name: Debugging after failure | |
if: failure() | |
run: | | |
echo "[DEBUG] killbill healthcheck" | |
curl --connect-timeout 10 --max-time 30 -v http://${KB_ADDRESS}:${KB_PORT}/1.0/healthcheck || true | |
echo "[DEBUG] hostname" | |
hostname | |
echo "[DEBUG] netstat -tulpn" | |
sudo netstat -tulpn | |
echo "[DEBUG] docker network ls" | |
docker network ls | |
echo "[DEBUG] docker ps -a" | |
docker ps -a | |
echo "[DEBUG] killbill env" | |
docker exec it_killbill_1 env || true | |
echo "[DEBUG] db env" | |
docker exec it_db_1 env || true | |
echo "[DEBUG] killbill logs" | |
docker logs -t --details it_killbill_1 || true | |
echo "[DEBUG] db logs" | |
docker logs -t --details it_db_1 || true |