Skip to content

Commit 8be51b7

Browse files
committed
Create workflow that tests go-redis against docker
1 parent e63669e commit 8be51b7

File tree

1 file changed

+120
-0
lines changed

1 file changed

+120
-0
lines changed
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
---
2+
3+
name: Build and Test using containerized environment
4+
5+
on:
6+
push:
7+
paths-ignore:
8+
- 'docs/**'
9+
- '**/*.md'
10+
- '**/*.rst'
11+
branches:
12+
- master
13+
- '[0-9].*'
14+
pull_request:
15+
branches:
16+
- master
17+
- '[0-9].*'
18+
schedule:
19+
- cron: '0 1 * * *' # nightly build
20+
21+
jobs:
22+
23+
build:
24+
name: Build and Test
25+
runs-on: ubuntu-latest
26+
env:
27+
REDIS_ENV_WORK_DIR: ${{ github.workspace }}/redis-env-work
28+
REDIS_ENV_CONF_DIR: ${{ github.workspace }}/src/test/resources/env
29+
CLIENT_LIBS_IMAGE_PREFIX: "redislabs/client-libs-test"
30+
strategy:
31+
fail-fast: false
32+
matrix:
33+
redis_version:
34+
- "7.4.1"
35+
- "7.2.6"
36+
- "6.2.16"
37+
go_version:
38+
- "1.19.x"
39+
- "1.20.x"
40+
- "1.21.x"
41+
steps:
42+
- name: Set up ${{ matrix.go_version }}
43+
uses: actions/setup-go@v5
44+
with:
45+
go-version: ${{ matrix.go_version }}
46+
47+
- name: Checkout code
48+
uses: actions/checkout@v4
49+
50+
# Set up Docker Compose environment
51+
- name: Set up Docker Compose environment
52+
run: |
53+
mkdir -m 777 $REDIS_ENV_WORK_DIR
54+
export REDIS_VERSION="${{ matrix.redis_version }}"
55+
export COMPOSE_ENV_FILES="src/test/resources/env/.env"
56+
if [[ "${{ matrix.redis_version }}" == "6.2.16" ]]; then
57+
COMPOSE_ENV_FILES+=",src/test/resources/env/.env.v${{ matrix.redis_version }}"
58+
fi
59+
docker compose -f src/test/resources/env/docker-compose.yml up -d
60+
61+
- name: Run tests
62+
env:
63+
GO_VERSION: ${{ matrix.go_version }}
64+
run: |
65+
set -e
66+
GO_MOD_DIRS=$(find . -type d -name go.mod | xargs -n 1 dirname)
67+
for dir in $GO_MOD_DIRS; do
68+
if echo "$dir" | grep -q "./example" && [ "$GO_VERSION" = "19" ]; then
69+
echo "Skipping go test in $dir due to Go version 1.19 and dir contains ./example"
70+
continue
71+
fi
72+
echo "Running tests in $dir"
73+
(
74+
cd "$dir"
75+
go mod tidy -compat=1.18
76+
go test ./... -short -race
77+
go test ./... -run=NONE -bench=. -benchmem
78+
env GOOS=linux GOARCH=386 go test ./...
79+
go test -coverprofile=coverage.txt -covermode=atomic ./...
80+
go vet
81+
)
82+
done
83+
84+
- name: Build custom vet tool
85+
run: |
86+
cd internal/customvet && go build .
87+
go vet -vettool ./internal/customvet/customvet
88+
89+
# Collect logs on failure
90+
- name: Collect logs on failure
91+
if: failure() # This runs only if the previous steps failed
92+
run: |
93+
echo "Collecting logs from $WORK_DIR..."
94+
ls -la $REDIS_ENV_WORK_DIR
95+
# Upload logs as artifacts
96+
- name: Upload logs on failure
97+
if: failure()
98+
uses: actions/upload-artifact@v3
99+
with:
100+
name: redis-env-work-logs
101+
path: ${{ env.REDIS_ENV_WORK_DIR }}
102+
# Bring down the Docker Compose test environment
103+
- name: Tear down Docker Compose environment
104+
if: always()
105+
run: |
106+
docker compose $COMPOSE_ENV_FILES -f src/test/resources/env/docker-compose.yml down
107+
continue-on-error: true
108+
# Upload code coverage
109+
- name: Upload coverage to Codecov
110+
uses: codecov/codecov-action@v4
111+
with:
112+
fail_ci_if_error: false
113+
token: ${{ secrets.CODECOV_TOKEN }}
114+
- name: Upload test results to Codecov
115+
if: ${{ github.event_name == 'schedule' || (github.event_name == 'push') || github.event_name == 'workflow_dispatch'}}
116+
uses: codecov/test-results-action@v1
117+
with:
118+
fail_ci_if_error: false
119+
files: ./target/surefire-reports/TEST*
120+
token: ${{ secrets.CODECOV_TOKEN }}

0 commit comments

Comments
 (0)