From 8be51b79c5a46b58a3366204f4c9c8fb1a2de613 Mon Sep 17 00:00:00 2001 From: ofekshenawa Date: Thu, 21 Nov 2024 15:04:52 +0200 Subject: [PATCH] Create workflow that tests go-redis against docker --- .github/workflows/test-against-docker.yml | 120 ++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 .github/workflows/test-against-docker.yml diff --git a/.github/workflows/test-against-docker.yml b/.github/workflows/test-against-docker.yml new file mode 100644 index 00000000..4d0ec7f3 --- /dev/null +++ b/.github/workflows/test-against-docker.yml @@ -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 }} \ No newline at end of file