Skip to content

Core: Add IAM token cache support for cluster reconnections (#5663) #6

Core: Add IAM token cache support for cluster reconnections (#5663)

Core: Add IAM token cache support for cluster reconnections (#5663) #6

Workflow file for this run

name: Go CI
permissions:
contents: read
on:
push:
branches:
- main
- release-*
- v*
paths:
- glide-core/src/**
- glide-core/redis-rs/redis/src/**
- ffi/src/**
- utils/cluster_manager.py
- go/**
- .github/workflows/go.yml
- .github/workflows/install-shared-dependencies/action.yml
- .github/workflows/test-benchmark/action.yml
- .github/workflows/lint-rust/action.yml
- .github/workflows/install-engine/action.yml
- .github/workflows/create-test-matrices/action.yml
- .github/json_matrices/**
pull_request:
paths:
- glide-core/src/**
- glide-core/redis-rs/redis/src/**
- ffi/src/**
- utils/cluster_manager.py
- go/**
- .github/workflows/go.yml
- .github/workflows/install-shared-dependencies/action.yml
- .github/workflows/test-benchmark/action.yml
- .github/workflows/lint-rust/action.yml
- .github/workflows/install-engine/action.yml
- .github/workflows/create-test-matrices/action.yml
- .github/json_matrices/**
workflow_dispatch:
inputs:
full-matrix:
description: "Run the full engine, host, and language version matrix"
type: boolean
default: false
run-with-macos:
description: "Run with macos included (only when needed)"
type: choice
options:
- false
- use-self-hosted
- use-github
default: false
rc-version:
required: false
type: string
description: "RC Version number (Format: vX.Y.Z or vX.Y.Z-rcN)"
name:
required: false
type: string
description: "(Optional) Test run name"
run-modules-tests:
description: "Run modules tests"
type: boolean
default: false
workflow_call:
inputs:
run-with-macos:
description: "Run with macos included (only when necessary)"
type: string
default: false
concurrency:
group: go-${{ github.head_ref || github.ref }}-${{ toJson(inputs) }}
cancel-in-progress: true
run-name:
# Set custom name if job is started manually and name is given
${{ github.event_name == 'workflow_dispatch' && (inputs.name == '' && format('{0} @ {1} {2}', github.ref_name, github.sha, toJson(inputs)) || inputs.name) || '' }}
env:
CARGO_TERM_COLOR: always
BASE_GO_VERSION: "1.22"
jobs:
get-matrices:
runs-on: ubuntu-latest
outputs:
engine-matrix-output: ${{ steps.get-matrices.outputs.engine-matrix-output }}
host-matrix-output: ${{ steps.get-matrices.outputs.host-matrix-output }}
version-matrix-output: ${{ steps.get-matrices.outputs.version-matrix-output }}
steps:
- uses: actions/checkout@v4
- id: get-matrices
uses: ./.github/workflows/create-test-matrices
with:
language-name: go
# Run full test matrix if job started by cron or it was explictly specified by a person who triggered the workflow
run-full-matrix: ${{ github.event.inputs.full-matrix == 'true' || github.event_name == 'schedule' }}
run-with-macos: ${{ github.event.inputs.run-with-macos }}
test-go:
name: Go Tests - ${{ matrix.go }}, EngineVersion - ${{ matrix.engine.version }}, Target - ${{ matrix.host.TARGET }}
needs: get-matrices
timeout-minutes: 35
strategy:
fail-fast: false
matrix:
go: ${{ fromJson(needs.get-matrices.outputs.version-matrix-output) }}
engine: ${{ fromJson(needs.get-matrices.outputs.engine-matrix-output) }}
host: ${{ fromJson(needs.get-matrices.outputs.host-matrix-output) }}
runs-on: ${{ matrix.host.RUNNER }}
steps:
- uses: actions/checkout@v4
- name: Output Matrix Parameters for this job
run: |
echo "Job running with the following matrix configuration:"
echo "${{ toJson(matrix) }}"
- name: Set up Go ${{ matrix.go }}
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go }}
cache-dependency-path: go/go.sum
- name: Install shared software dependencies
uses: ./.github/workflows/install-shared-dependencies
with:
os: ${{ matrix.host.OS }}
target: ${{ matrix.host.TARGET }}
github-token: ${{ secrets.GITHUB_TOKEN }}
engine-version: ${{ matrix.engine.version }}
- uses: actions/cache@v4
with:
path: |
ffi/target
glide-core/src/generated
key: ${{ matrix.host.TARGET }}-go
restore-keys: |
${{ matrix.host.TARGET }}-glide-core
${{ matrix.host.TARGET }}
- name: Run patch to test with RC
working-directory: go
if: ${{ github.event.inputs.rc-version }}
env:
RC_VERSION: ${{ github.event.inputs.rc-version }}
run: |
./scripts/rc-testing/rc-test.sh "$RC_VERSION"
- uses: ./.github/actions/setup-dns-tests
with:
os: ${{ matrix.host.OS }}
- name: Install & build & test
working-directory: go
env:
RC_VERSION: ${{ github.event.inputs.rc-version }}
VALKEY_GLIDE_DNS_TESTS_ENABLED: "1"
AWS_ACCESS_KEY_ID: test_access_key
AWS_SECRET_ACCESS_KEY: test_secret_key
AWS_SESSION_TOKEN: test_session_token
run: |
if [[ -n "$RC_VERSION" ]]; then
make install-tools
make -k integ-test
else
make install-tools build
make -k unit-test integ-test
fi
make -k pubsub-test
make -k opentelemetry-test
- name: Run Example Tests
working-directory: go
if: ${{ contains(matrix.engine.version, '9') && !github.event.inputs.rc-version }}
run: |
make -k example-test
- uses: ./.github/workflows/test-benchmark
if: ${{ matrix.engine.version == '8.0' && matrix.host.OS == 'ubuntu' && matrix.host.RUNNER == 'ubuntu-latest' && matrix.go == env.BASE_GO_VERSION }}
with:
language-flag: -go
- name: Upload logs and reports
if: always()
continue-on-error: true
uses: actions/upload-artifact@v4
with:
name: test-report-go-${{ matrix.go }}-${{ matrix.engine.type }}-${{ matrix.engine.version }}-${{ matrix.host.OS }}-${{ matrix.host.ARCH }}
path: |
utils/clusters/**
benchmarks/results/**
go/reports/**
lint:
timeout-minutes: 10
runs-on: ubuntu-latest
if: ${{ !github.event.inputs.rc-version }}
steps:
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: ${{ env.BASE_GO_VERSION }}
cache-dependency-path: go/go.sum
- name: Install protoc
uses: ./.github/workflows/install-rust-and-protoc
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/cache@v4
with:
path: |
ffi/target
glide-core/src/generated
key: x86_64-unknown-linux-gnu-go
restore-keys: |
x86_64-unknown-linux-gnu-glide-core
x86_64-unknown-linux-gnu
- name: lint rust
uses: ./.github/workflows/lint-rust
with:
cargo-toml-folder: ffi
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Install and run linters
working-directory: go
run: |
make install-dev-tools install-build-tools gen-c-bindings generate-protobuf lint-ci
get-containers:
runs-on: ubuntu-latest
if: ${{ github.event.inputs.full-matrix == 'true' || github.event_name == 'schedule' }}
outputs:
engine-matrix-output: ${{ steps.get-matrices.outputs.engine-matrix-output }}
host-matrix-output: ${{ steps.get-matrices.outputs.host-matrix-output }}
version-matrix-output: ${{ steps.get-matrices.outputs.version-matrix-output }}
steps:
- uses: actions/checkout@v4
- id: get-matrices
uses: ./.github/workflows/create-test-matrices
with:
language-name: go
run-full-matrix: true
containers: true
test-go-container:
runs-on: ${{ matrix.host.RUNNER }}
needs: get-containers
timeout-minutes: 25
strategy:
fail-fast: false
matrix:
go: ${{ fromJson(needs.get-containers.outputs.version-matrix-output) }}
engine: ${{ fromJson(needs.get-containers.outputs.engine-matrix-output) }}
host: ${{ fromJson(needs.get-containers.outputs.host-matrix-output) }}
container:
image: ${{ matrix.host.IMAGE }}
options: ${{ join(' -q ', matrix.host.CONTAINER_OPTIONS) }} # adding `-q` to bypass empty options
steps:
- name: Install git
run: |
if [[ "${{ matrix.host.OS }}" == "amazon-linux" ]]; then
yum update
yum install -y git tar
git config --global --add safe.directory "$GITHUB_WORKSPACE"
echo IMAGE=amazonlinux:latest | sed -r 's/:/-/g' >> $GITHUB_ENV
elif [[ "${{ matrix.host.TARGET }}" == *"musl"* ]]; then
apk update
apk add git bash tar
git config --global --add safe.directory "$GITHUB_WORKSPACE"
fi
# Replace `:` in the variable otherwise it can't be used in `upload-artifact`
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up Go ${{ matrix.go }}
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go }}
cache-dependency-path: go/go.sum
- name: Install shared software dependencies
uses: ./.github/workflows/install-shared-dependencies
with:
os: ${{ matrix.host.OS }}
target: ${{ matrix.host.TARGET }}
github-token: ${{ secrets.GITHUB_TOKEN }}
engine-version: ${{ matrix.engine.version }}
- name: Install Musl Dependencies
if: ${{ contains(matrix.host.TARGET, 'musl') }}
run: |
apk add clang lld compiler-rt
# Ensure Rust is in PATH for container environments
echo "$HOME/.cargo/bin:$PATH" >> $GITHUB_PATH
- name: Install zig
if: ${{ contains(matrix.host.TARGET, 'musl') }}
uses: ./.github/workflows/install-zig
with:
target: ${{ matrix.host.TARGET }}
- uses: actions/cache@v4
with:
path: |
ffi/target
glide-core/src/generated
key: ${{ matrix.host.IMAGE }}-go
restore-keys: ${{ matrix.host.IMAGE }}
- name: Run patch to test with RC
working-directory: go
if: ${{ github.event.inputs.rc-version }}
env:
RC_VERSION: ${{ github.event.inputs.rc-version }}
run: |
./scripts/rc-testing/rc-test.sh "$RC_VERSION"
- uses: ./.github/actions/setup-dns-tests
with:
os: ${{ matrix.host.OS }}
- name: Install & build & test
working-directory: go
env:
RC_VERSION: ${{ github.event.inputs.rc-version }}
VALKEY_GLIDE_DNS_TESTS_ENABLED: "1"
AWS_ACCESS_KEY_ID: test_access_key
AWS_SECRET_ACCESS_KEY: test_secret_key
AWS_SESSION_TOKEN: test_session_token
run: |
if [[ -n "$RC_VERSION" ]]; then
make install-tools
make -k integ-test
else
make install-tools build
make -k unit-test integ-test
fi
make -k pubsub-test
- name: Upload test reports
if: always()
continue-on-error: true
uses: actions/upload-artifact@v4
with:
name: test-reports-go-${{ matrix.go }}-${{ matrix.engine.type }}-${{ matrix.engine.version }}-${{ env.IMAGE }}-${{ matrix.host.ARCH }}
path: |
utils/clusters/**
benchmarks/results/**
go/reports/**
test-modules:
if: ((github.repository_owner == 'valkey-io' && github.event_name == 'workflow_dispatch' && github.event.inputs.run-modules-tests == 'true') || github.event.pull_request.head.repo.owner.login == 'valkey-io')
environment: AWS_ACTIONS
name: Modules Tests
runs-on: [self-hosted, linux, ARM64, persistent]
timeout-minutes: 15
steps:
- name: Setup self-hosted runner access
run: sudo chown -R $USER:$USER /home/ubuntu/actions-runner/_work/valkey-glide
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: ${{ env.BASE_GO_VERSION }}
cache-dependency-path: go/go.sum
- uses: actions/cache@v4
with:
path: |
ffi/target
glide-core/src/generated
key: aarch64-unknown-linux-gnu-go
restore-keys: |
aarch64-unknown-linux-gnu-glide-core
aarch64-unknown-linux-gnu
- name: Install zig
uses: ./.github/workflows/install-zig
- name: Run patch to test with RC
working-directory: go
if: ${{ github.event.inputs.rc-version }}
env:
RC_VERSION: ${{ github.event.inputs.rc-version }}
run: |
./scripts/rc-testing/rc-test.sh "$RC_VERSION"
- name: Build and test
working-directory: ./go
env:
RC_VERSION: ${{ github.event.inputs.rc-version }}
run: |
if [[ -n "$RC_VERSION" ]]; then
make install-tools modules-test cluster-endpoints=${{ secrets.MEMDB_MODULES_ENDPOINT }} tls=true
else
make install-tools build modules-test cluster-endpoints=${{ secrets.MEMDB_MODULES_ENDPOINT }} tls=true
fi
make -k pubsub-test
- name: Upload test reports
if: always()
continue-on-error: true
uses: actions/upload-artifact@v4
with:
name: test-reports-modules
path: |
go/reports/**
test-long-timeout:
name: Go Long Timeout Tests - ${{ matrix.go }}, EngineVersion - ${{ matrix.engine.version }}, Target - ${{ matrix.host.TARGET }}
needs: get-matrices
timeout-minutes: 35
strategy:
fail-fast: false
matrix:
go: ${{ fromJson(needs.get-matrices.outputs.version-matrix-output) }}
engine: ${{ fromJson(needs.get-matrices.outputs.engine-matrix-output) }}
host: ${{ fromJson(needs.get-matrices.outputs.host-matrix-output) }}
runs-on: ${{ matrix.host.RUNNER }}
steps:
- uses: actions/checkout@v4
- name: Output Matrix Parameters for this job
run: |
echo "Job running with the following matrix configuration:"
echo "${{ toJson(matrix) }}"
- name: Set up Go ${{ matrix.go }}
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go }}
cache-dependency-path: go/go.sum
- name: Install shared software dependencies
uses: ./.github/workflows/install-shared-dependencies
with:
os: ${{ matrix.host.OS }}
target: ${{ matrix.host.TARGET }}
github-token: ${{ secrets.GITHUB_TOKEN }}
engine-version: ${{ matrix.engine.version }}
- uses: actions/cache@v4
with:
path: |
ffi/target
glide-core/src/generated
key: ${{ matrix.host.TARGET }}-go
restore-keys: |
${{ matrix.host.TARGET }}-glide-core
${{ matrix.host.TARGET }}
- name: Run patch to test with RC
working-directory: go
if: ${{ github.event.inputs.rc-version }}
env:
RC_VERSION: ${{ github.event.inputs.rc-version }}
run: |
./scripts/rc-testing/rc-test.sh "$RC_VERSION"
- name: Install & build & test
working-directory: go
env:
RC_VERSION: ${{ github.event.inputs.rc-version }}
run: |
if [[ -n "$RC_VERSION" ]]; then
make install-tools
make -k long-timeout-test test-filter=TestLongTimeout
else
make install-tools build
make -k long-timeout-test test-filter=TestLongTimeout
fi
make -k pubsub-test
- name: Upload logs and reports
if: always()
continue-on-error: true
uses: actions/upload-artifact@v4
with:
name: test-report-go-long-timeout-${{ matrix.go }}-${{ matrix.engine.type }}-${{ matrix.engine.version }}-${{ matrix.host.OS }}-${{ matrix.host.ARCH }}
path: |
utils/clusters/**
benchmarks/results/**
go/reports/**