-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
.github/workflows: add integration test workflow (#59)
* wip * fix go get? * checkout mk/bump-chainlink-ccip branch on ccip * add CL_DATABASE_URL env var * revert TODO
- Loading branch information
Showing
6 changed files
with
154 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
POSTGRES_USER=postgres | ||
POSTGRES_OPTIONS="-c max_connections=1000 -c shared_buffers=2GB -c log_lock_waits=true" | ||
POSTGRES_PASSWORD=postgres | ||
POSTGRES_DB=chainlink_test | ||
POSTGRES_HOST_AUTH_METHOD=trust |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
name: Setup Postgresql | ||
description: Setup postgres docker container via docker-compose, allowing usage of a custom command, see https://github.com/orgs/community/discussions/26688 | ||
inputs: | ||
base-path: | ||
description: Path to the base of the repo | ||
required: false | ||
default: . | ||
runs: | ||
using: composite | ||
steps: | ||
- name: Start postgres service | ||
run: docker compose up -d | ||
shell: bash | ||
working-directory: ${{ inputs.base-path }}/.github/actions/setup-postgres | ||
- name: Wait for postgres service to be healthy | ||
run: ./wait-for-healthy-postgres.sh | ||
shell: bash | ||
working-directory: ${{ inputs.base-path }}/.github/actions/setup-postgres |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
#!/usr/bin/env bash | ||
# | ||
# This script acts as a docker replacement around pg_dump so that developers can | ||
# run DB involved tests locally without having postgres installed. | ||
# | ||
# Installation: | ||
# - Make sure that your PATH doesn't already contain a postgres installation | ||
# - Add this script to your PATH | ||
# | ||
# Usage: | ||
# You should be able to setup your test db via: | ||
# - go build -o chainlink.test . # Build the chainlink binary to run test db prep commands from | ||
# - export CL_DATABASE_URL="postgresql://postgres:postgres@localhost:5432/chainlink_test?sslmode=disable" | ||
# - pushd .github/actions/setup-postgres/ # Navigate to the setup-postgres action so we can spin up a docker postgres | ||
# instance | ||
# - docker compose up # Spin up postgres | ||
# - ./chainlink.test local db preparetest # Run the db migration, which will shell out to our pg_dump wrapper too. | ||
# - popd | ||
# - go test -timeout 30s ./core/services/workflows/... -v # Run tests that use the database | ||
|
||
cd "$(dirname "$0")" || exit | ||
|
||
docker compose exec -T postgres pg_dump "$@" |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
name: gha_postgres | ||
services: | ||
postgres: | ||
ports: | ||
- "5432:5432" | ||
container_name: cl_pg | ||
image: postgres:14-alpine | ||
command: postgres ${POSTGRES_OPTIONS} | ||
env_file: | ||
- .env | ||
healthcheck: | ||
test: "pg_isready -d ${POSTGRES_DB} -U ${POSTGRES_USER}" | ||
interval: 2s | ||
timeout: 5s | ||
retries: 5 |
25 changes: 25 additions & 0 deletions
25
.github/actions/setup-postgres/wait-for-healthy-postgres.sh
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
#!/bin/bash | ||
RETRIES=10 | ||
|
||
until [ $RETRIES -eq 0 ]; do | ||
DOCKER_OUTPUT=$(docker compose ps postgres --status running --format json) | ||
JSON_TYPE=$(echo "$DOCKER_OUTPUT" | jq -r 'type') | ||
|
||
if [ "$JSON_TYPE" == "array" ]; then | ||
HEALTH_STATUS=$(echo "$DOCKER_OUTPUT" | jq -r '.[0].Health') | ||
elif [ "$JSON_TYPE" == "object" ]; then | ||
HEALTH_STATUS=$(echo "$DOCKER_OUTPUT" | jq -r '.Health') | ||
else | ||
HEALTH_STATUS="Unknown JSON type: $JSON_TYPE" | ||
fi | ||
|
||
echo "postgres health status: $HEALTH_STATUS" | ||
if [ "$HEALTH_STATUS" == "healthy" ]; then | ||
exit 0 | ||
fi | ||
|
||
echo "Waiting for postgres server, $((RETRIES--)) remaining attempts..." | ||
sleep 2 | ||
done | ||
|
||
exit 1 |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
name: "Run CCIP OCR3 Integration Test" | ||
|
||
on: | ||
pull_request: | ||
push: | ||
branches: | ||
- 'ccip-develop' | ||
|
||
jobs: | ||
integration-test-ccip-ocr3: | ||
env: | ||
# We explicitly have this env var not be "CL_DATABASE_URL" to avoid having it be used by core related tests | ||
# when they should not be using it, while still allowing us to DRY up the setup | ||
DB_URL: postgresql://postgres:postgres@localhost:5432/chainlink_test?sslmode=disable | ||
|
||
runs-on: ubuntu-latest | ||
strategy: | ||
matrix: | ||
go-version: ['1.22.5'] | ||
steps: | ||
- name: Checkout the repo | ||
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 | ||
- name: Setup Go ${{ matrix.go-version }} | ||
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 | ||
with: | ||
go-version: ${{ matrix.go-version }} | ||
- name: Display Go version | ||
run: go version | ||
- name: Clone CCIP repo | ||
run: | | ||
git clone https://github.com/smartcontractkit/ccip.git | ||
cd ccip | ||
git fetch | ||
git checkout ccip-develop | ||
- name: Update chainlink-ccip dependency in ccip | ||
run: | | ||
cd ccip | ||
go get github.com/smartcontractkit/chainlink-ccip@${{ github.event.pull_request.head.sha }} | ||
make gomodtidy | ||
- name: Setup Postgres | ||
uses: ./.github/actions/setup-postgres | ||
- name: Download Go vendor packages | ||
run: | | ||
cd ccip | ||
go mod download | ||
- name: Build binary | ||
run: | | ||
cd ccip | ||
go build -o ccip.test . | ||
- name: Setup DB | ||
run: | | ||
cd ccip | ||
./ccip.test local db preparetest | ||
env: | ||
CL_DATABASE_URL: ${{ env.DB_URL }} | ||
- name: Run ccip ocr3 integration test | ||
run: | | ||
cd ccip | ||
go test -v -timeout 3m -run "^TestIntegration_OCR3Nodes$" ./core/capabilities/ccip/ccip_integration_tests | ||
EXITCODE=${PIPESTATUS[0]} | ||
if [ $EXITCODE -ne 0 ]; then | ||
echo "Integration test failed" | ||
else | ||
echo "Integration test passed!" | ||
fi | ||
exit $EXITCODE | ||
env: | ||
CL_DATABASE_URL: ${{ env.DB_URL }} |