mirror of https://github.com/go-redis/redis.git
Create workflow that tests go-redis against docker
This commit is contained in:
parent
e63669e170
commit
8be51b79c5
|
@ -0,0 +1,120 @@
|
|||
---
|
||||
|
||||
name: Build and Test using containerized environment
|
||||
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
- '**/*.rst'
|
||||
branches:
|
||||
- master
|
||||
- '[0-9].*'
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- '[0-9].*'
|
||||
schedule:
|
||||
- cron: '0 1 * * *' # nightly build
|
||||
|
||||
jobs:
|
||||
|
||||
build:
|
||||
name: Build and Test
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
REDIS_ENV_WORK_DIR: ${{ github.workspace }}/redis-env-work
|
||||
REDIS_ENV_CONF_DIR: ${{ github.workspace }}/src/test/resources/env
|
||||
CLIENT_LIBS_IMAGE_PREFIX: "redislabs/client-libs-test"
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
redis_version:
|
||||
- "7.4.1"
|
||||
- "7.2.6"
|
||||
- "6.2.16"
|
||||
go_version:
|
||||
- "1.19.x"
|
||||
- "1.20.x"
|
||||
- "1.21.x"
|
||||
steps:
|
||||
- name: Set up ${{ matrix.go_version }}
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: ${{ matrix.go_version }}
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# Set up Docker Compose environment
|
||||
- name: Set up Docker Compose environment
|
||||
run: |
|
||||
mkdir -m 777 $REDIS_ENV_WORK_DIR
|
||||
export REDIS_VERSION="${{ matrix.redis_version }}"
|
||||
export COMPOSE_ENV_FILES="src/test/resources/env/.env"
|
||||
if [[ "${{ matrix.redis_version }}" == "6.2.16" ]]; then
|
||||
COMPOSE_ENV_FILES+=",src/test/resources/env/.env.v${{ matrix.redis_version }}"
|
||||
fi
|
||||
docker compose -f src/test/resources/env/docker-compose.yml up -d
|
||||
|
||||
- name: Run tests
|
||||
env:
|
||||
GO_VERSION: ${{ matrix.go_version }}
|
||||
run: |
|
||||
set -e
|
||||
GO_MOD_DIRS=$(find . -type d -name go.mod | xargs -n 1 dirname)
|
||||
for dir in $GO_MOD_DIRS; do
|
||||
if echo "$dir" | grep -q "./example" && [ "$GO_VERSION" = "19" ]; then
|
||||
echo "Skipping go test in $dir due to Go version 1.19 and dir contains ./example"
|
||||
continue
|
||||
fi
|
||||
echo "Running tests in $dir"
|
||||
(
|
||||
cd "$dir"
|
||||
go mod tidy -compat=1.18
|
||||
go test ./... -short -race
|
||||
go test ./... -run=NONE -bench=. -benchmem
|
||||
env GOOS=linux GOARCH=386 go test ./...
|
||||
go test -coverprofile=coverage.txt -covermode=atomic ./...
|
||||
go vet
|
||||
)
|
||||
done
|
||||
|
||||
- name: Build custom vet tool
|
||||
run: |
|
||||
cd internal/customvet && go build .
|
||||
go vet -vettool ./internal/customvet/customvet
|
||||
|
||||
# Collect logs on failure
|
||||
- name: Collect logs on failure
|
||||
if: failure() # This runs only if the previous steps failed
|
||||
run: |
|
||||
echo "Collecting logs from $WORK_DIR..."
|
||||
ls -la $REDIS_ENV_WORK_DIR
|
||||
# Upload logs as artifacts
|
||||
- name: Upload logs on failure
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: redis-env-work-logs
|
||||
path: ${{ env.REDIS_ENV_WORK_DIR }}
|
||||
# Bring down the Docker Compose test environment
|
||||
- name: Tear down Docker Compose environment
|
||||
if: always()
|
||||
run: |
|
||||
docker compose $COMPOSE_ENV_FILES -f src/test/resources/env/docker-compose.yml down
|
||||
continue-on-error: true
|
||||
# Upload code coverage
|
||||
- name: Upload coverage to Codecov
|
||||
uses: codecov/codecov-action@v4
|
||||
with:
|
||||
fail_ci_if_error: false
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
- name: Upload test results to Codecov
|
||||
if: ${{ github.event_name == 'schedule' || (github.event_name == 'push') || github.event_name == 'workflow_dispatch'}}
|
||||
uses: codecov/test-results-action@v1
|
||||
with:
|
||||
fail_ci_if_error: false
|
||||
files: ./target/surefire-reports/TEST*
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
Loading…
Reference in New Issue