Core: Add IAM token cache support for cluster reconnections (#5663) #6
This file contains hidden or 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
| 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/** |