Skip to content

chore(submodule): update valkey-glide to tag v2.1.0 #21

chore(submodule): update valkey-glide to tag v2.1.0

chore(submodule): update valkey-glide to tag v2.1.0 #21

Workflow file for this run

name: C# CD
on:
push:
tags:
- "v*.*"
workflow_dispatch:
inputs:
version:
description: "The release version of GLIDE, formatted as v*.*.* or v*.*.*-rc*"
required: true
nuget_publish:
description: "Publish to NuGet"
required: true
type: boolean
permissions:
contents: read
id-token: write
concurrency:
group: C#-CD-${{ 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
jobs:
load-platform-matrix:
runs-on: ubuntu-latest
outputs:
PLATFORM_MATRIX: ${{ steps.load-platform-matrix.outputs.PLATFORM_MATRIX }}
steps:
- name: Checkout
uses: actions/checkout@v5
- name: load-platform-matrix
id: load-platform-matrix
working-directory: .github/json_matrices
run: |
jq -c "[.[] | select(any(.tags[] == \"cd\"; .))]" < os-matrix.json | awk '{ printf "PLATFORM_MATRIX=%s\n", $0 }' | tee -a $GITHUB_OUTPUT
set-release-version:
runs-on: ubuntu-latest
outputs:
RELEASE_VERSION: ${{ steps.release-version.outputs.RELEASE_VERSION }}
steps:
- name: Set the release version
id: release-version
shell: bash
run: |
if ${{ github.event_name == 'workflow_dispatch' }}; then
RAW_VERSION="${{ env.INPUT_VERSION }}"
else
RAW_VERSION=${{ github.ref_name }}
fi
# Strip leading 'v' if present
R_VERSION="${RAW_VERSION#v}"
echo "RELEASE_VERSION=${R_VERSION}" >> $GITHUB_ENV
echo "Release version detected: $R_VERSION (raw: $RAW_VERSION)"
echo "RELEASE_VERSION=$R_VERSION" >> $GITHUB_OUTPUT
env:
INPUT_VERSION: ${{ github.event.inputs.version }}
create-binaries:
needs: [load-platform-matrix]
timeout-minutes: 35
strategy:
# Run all jobs
fail-fast: false
matrix:
host: ${{ fromJson(needs.load-platform-matrix.outputs.PLATFORM_MATRIX) }}
runs-on: ${{ matrix.host.RUNNER }}
steps:
- uses: actions/checkout@v5
with:
submodules: true
- name: Output Matrix Parameters for this job
shell: bash
run: |
echo "Job running with the following matrix configuration:"
echo "${{ toJson(matrix) }}"
- 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 }}
- uses: actions/cache@v4
with:
path: rust/target
key: rust-${{ matrix.host.TARGET }}
- name: Build native libs (linux gnu)
if: ${{ contains(matrix.host.TARGET, 'linux-gnu') }}
working-directory: rust
run: |
cargo zigbuild -r --target ${{ matrix.host.TARGET }}.2.17
mkdir -p target/release
- name: Build native libs
if: ${{ !contains(matrix.host.TARGET, 'linux-gnu') }}
working-directory: rust
run: cargo build --release --target ${{ matrix.host.TARGET }}
- name: Upload artifacts to publish
continue-on-error: true
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.host.TARGET }}
if-no-files-found: error
path: |
rust/target/${{ matrix.host.TARGET }}/release/*.so
rust/target/${{ matrix.host.TARGET }}/release/*.dylib
rust/target/${{ matrix.host.TARGET }}/release/*.dll
build-package-to-publish:
needs: [set-release-version, create-binaries]
runs-on: ubuntu-latest
env:
RELEASE_VERSION: ${{ needs.set-release-version.outputs.RELEASE_VERSION }}
steps:
- uses: actions/checkout@v5
- name: Download published artifacts
uses: actions/download-artifact@v5
with:
path: bin
- name: Rename lib for windows
working-directory: bin
run: |
find . -name glide_rs.dll -execdir mv {} libglide_rs.dll \;
tree -h
- name: Set up dotnet
uses: actions/setup-dotnet@v4
with:
# install all supported versions + latest dotnet too to use language features
dotnet-version: |
6
8
9
env:
DOTNET_INSTALL_DIR: ~/.dotnet
- name: Pack the client
working-directory: sources/Valkey.Glide
run: |
dotnet build Valkey.Glide.csproj --configuration Release /property:Version=$RELEASE_VERSION
dotnet pack Valkey.Glide.csproj --configuration Release -p:NuspecProperties=version=$RELEASE_VERSION
tree -h bin/Release
unzip -l bin/Release/Valkey.Glide.$RELEASE_VERSION.nupkg
unzip -l bin/Release/Valkey.Glide.$RELEASE_VERSION.snupkg
env:
SkipCargo: true
- name: Upload artifacts to publish
uses: actions/upload-artifact@v4
with:
name: package
if-no-files-found: error
path: sources/Valkey.Glide/bin/Release/Valkey.Glide.*nupkg
publish:
environment: Release
if: ${{ (inputs.nuget_publish == true || github.event_name == 'push') && github.repository_owner == 'valkey-io' }}
needs: [build-package-to-publish, set-release-version]
runs-on: ubuntu-latest
env:
RELEASE_VERSION: ${{ needs.set-release-version.outputs.RELEASE_VERSION }}
steps:
- name: Download package
uses: actions/download-artifact@v5
with:
name: package
- name: Publish
run: |
ls -lh
dotnet nuget push Valkey.Glide.$RELEASE_VERSION.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json
- name: Wait for package to be ready for download
run: |
dotnet new console --name temp-check --output . --framework net8.0
TIMEOUT=600 # 10 minutes
INTERVAL=10 # 10 seconds
ELAPSED=0
while [ $ELAPSED -lt $TIMEOUT ]; do
echo "Checking availability... (${ELAPSED}s elapsed)"
if dotnet add package Valkey.Glide --version $RELEASE_VERSION ; then
echo "Package is now available!"
exit 0
fi
sleep $INTERVAL
ELAPSED=$((ELAPSED + INTERVAL))
dotnet nuget locals all --clear
done
echo "Timeout: Package is not available after ${TIMEOUT}s"
exit 1
test:
needs: [publish, set-release-version, load-platform-matrix]
timeout-minutes: 35
strategy:
# Run all jobs
fail-fast: false
matrix:
host: ${{ fromJson(needs.load-platform-matrix.outputs.PLATFORM_MATRIX) }}
runs-on: ${{ matrix.host.RUNNER }}
env:
RELEASE_VERSION: ${{ needs.set-release-version.outputs.RELEASE_VERSION }}
steps:
- uses: actions/checkout@v5
with:
submodules: true
- name: Download package
if: ${{ needs.publish.result == 'skipped' }}
uses: actions/download-artifact@v5
with:
name: package
path: nuget.local
- name: Set up dotnet
uses: actions/setup-dotnet@v4
with:
# install latest dotnet too to use language features
dotnet-version: |
8
9
- name: Set up a local nuget
if: ${{ needs.publish.result == 'skipped' }}
shell: bash
run: |
ls -l $GITHUB_WORKSPACE/nuget.local
dotnet nuget add source $GITHUB_WORKSPACE/nuget.local
dotnet nuget config paths
if [[ "$OS" != "Windows_NT" ]]; then
dotnet nuget config paths | xargs cat
else
cat "C:\\Users\\runneradmin\\AppData\\Roaming\\NuGet\\NuGet.Config"
fi
- name: Patch IT suite to run tests using freshly published version
working-directory: tests/Valkey.Glide.IntegrationTests
shell: bash
run: |
dotnet remove reference $(dotnet list reference | tail -n +3)
dotnet add package Valkey.Glide --version $RELEASE_VERSION
git diff
- name: Install server
# TODO activate this on windows once fixed, see https://github.com/valkey-io/valkey-glide-csharp/issues/6
if: ${{ matrix.host.OS != 'windows' }}
uses: ./.github/workflows/install-server
with:
server-version: 8.1
target: ${{ matrix.host.TARGET }}
- name: Run tests
# TODO activate this on windows once fixed, see https://github.com/valkey-io/valkey-glide-csharp/issues/6
if: ${{ matrix.host.OS != 'windows' }}
working-directory: tests/Valkey.Glide.IntegrationTests
run: |
dotnet test --framework net8.0 --logger "console;verbosity=detailed" --logger "html;LogFileName=TestReport.html" --results-directory . --filter "FullyQualifiedName~CommandTests"
- name: Upload test reports
if: always()
continue-on-error: true
uses: actions/upload-artifact@v4
with:
name: test-reports-${{ matrix.host.TARGET }}
path: |
TestReport.html
valkey-glide/utils/clusters/**
remove-package-if-validation-fails:
needs: [publish, test, set-release-version]
if: ${{ !cancelled() }}
runs-on: ubuntu-latest
env:
RELEASE_VERSION: ${{ needs.set-release-version.outputs.RELEASE_VERSION }}
steps:
- name: Remove package from NuGet due to test failures
if: ${{ (needs.test.result == 'failure' && needs.publish.result == 'success') || needs.publish.result == 'failure' }}
run: dotnet nuget delete Valkey.Glide $RELEASE_VERSION --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --non-interactive