Skip to content

Commit f81d025

Browse files
authored
Merge branch 'main' into main
2 parents 2daf168 + cfbd474 commit f81d025

File tree

255 files changed

+5327
-4571
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

255 files changed

+5327
-4571
lines changed

.editorconfig

Lines changed: 64 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -138,23 +138,73 @@ csharp_space_between_method_call_empty_parameter_list_parentheses = false
138138
csharp_preserve_single_line_statements = true
139139
csharp_preserve_single_line_blocks = true
140140

141-
# IDE0090: Use 'new(...)'
142-
dotnet_diagnostic.IDE0090.severity = silent
143141

144-
# RCS1037: Remove trailing white-space.
145-
dotnet_diagnostic.RCS1037.severity = error
142+
# IDE preferences
143+
dotnet_diagnostic.IDE0090.severity = silent # IDE0090: Use 'new(...)'
144+
145+
#Roslynator preferences
146+
dotnet_diagnostic.RCS1037.severity = error # RCS1037: Remove trailing white-space.
147+
dotnet_diagnostic.RCS1098.severity = none # RCS1098: Constant values should be placed on right side of comparisons.
148+
149+
dotnet_diagnostic.RCS1194.severity = none # RCS1194: Implement exception constructors.
150+
dotnet_diagnostic.RCS1229.severity = none # RCS1229: Use async/await when necessary.
151+
dotnet_diagnostic.RCS1233.severity = none # RCS1233: Use short-circuiting operator.
152+
dotnet_diagnostic.RCS1234.severity = none # RCS1234: Duplicate enum value.
153+
154+
# StyleCop preferences
155+
dotnet_diagnostic.SA0001.severity = none # SA0001: XML comment analysis is disabled
156+
157+
dotnet_diagnostic.SA1101.severity = none # SA1101: Prefix local calls with this
158+
dotnet_diagnostic.SA1108.severity = none # SA1108: Block statements should not contain embedded comments
159+
dotnet_diagnostic.SA1122.severity = none # SA1122: Use string.Empty for empty strings
160+
dotnet_diagnostic.SA1127.severity = none # SA1127: Generic type constraints should be on their own line
161+
dotnet_diagnostic.SA1128.severity = none # SA1128: Put constructor initializers on their own line
162+
dotnet_diagnostic.SA1132.severity = none # SA1132: Do not combine fields
163+
dotnet_diagnostic.SA1133.severity = none # SA1133: Do not combine attributes
164+
165+
dotnet_diagnostic.SA1200.severity = none # SA1200: Using directives should be placed correctly
166+
dotnet_diagnostic.SA1201.severity = none # SA1201: Elements should appear in the correct order
167+
dotnet_diagnostic.SA1202.severity = none # SA1202: Elements should be ordered by access
168+
dotnet_diagnostic.SA1203.severity = none # SA1203: Constants should appear before fields
169+
170+
dotnet_diagnostic.SA1306.severity = none # SA1306: Field names should begin with lower-case letter
171+
dotnet_diagnostic.SA1309.severity = none # SA1309: Field names should not begin with underscore
172+
dotnet_diagnostic.SA1310.severity = silent # SA1310: Field names should not contain underscore
173+
dotnet_diagnostic.SA1311.severity = none # SA1311: Static readonly fields should begin with upper-case letter
174+
dotnet_diagnostic.SA1312.severity = none # SA1312: Variable names should begin with lower-case letter
175+
176+
dotnet_diagnostic.SA1401.severity = silent # SA1401: Fields should be private
177+
dotnet_diagnostic.SA1402.severity = suggestion # SA1402: File may only contain a single type
178+
179+
dotnet_diagnostic.SA1503.severity = silent # SA1503: Braces should not be omitted
180+
dotnet_diagnostic.SA1516.severity = silent # SA1516: Elements should be separated by blank line
181+
182+
dotnet_diagnostic.SA1600.severity = none # SA1600: Elements should be documented
183+
dotnet_diagnostic.SA1601.severity = none # SA1601: Partial elements should be documented
184+
dotnet_diagnostic.SA1602.severity = none # SA1602: Enumeration items should be documented
185+
dotnet_diagnostic.SA1615.severity = none # SA1615: Element return value should be documented
186+
dotnet_diagnostic.SA1623.severity = none # SA1623: Property summary documentation should match accessors
187+
dotnet_diagnostic.SA1633.severity = none # SA1633: File should have header
188+
dotnet_diagnostic.SA1642.severity = none # SA1642: Constructor summary documentation should begin with standard text
189+
dotnet_diagnostic.SA1643.severity = none # SA1643: Destructor summary documentation should begin with standard text
190+
191+
192+
# To Fix:
193+
dotnet_diagnostic.SA1204.severity = none # SA1204: Static elements should appear before instance elements
194+
dotnet_diagnostic.SA1214.severity = none # SA1214: Readonly fields should appear before non-readonly fields
195+
dotnet_diagnostic.SA1304.severity = none # SA1304: Non-private readonly fields should begin with upper-case letter
196+
dotnet_diagnostic.SA1307.severity = none # SA1307: Accessible fields should begin with upper-case letter
197+
dotnet_diagnostic.SA1308.severity = suggestion # SA1308: Variable names should not be prefixed
198+
dotnet_diagnostic.SA1131.severity = none # SA1131: Use readable conditions
199+
dotnet_diagnostic.SA1405.severity = none # SA1405: Debug.Assert should provide message text
200+
dotnet_diagnostic.SA1501.severity = none # SA1501: Statement should not be on a single line
201+
dotnet_diagnostic.SA1502.severity = suggestion # SA1502: Element should not be on a single line
202+
dotnet_diagnostic.SA1513.severity = none # SA1513: Closing brace should be followed by blank line
203+
dotnet_diagnostic.SA1515.severity = none # SA1515: Single-line comment should be preceded by blank line
204+
dotnet_diagnostic.SA1611.severity = suggestion # SA1611: Element parameters should be documented
205+
dotnet_diagnostic.SA1649.severity = suggestion # SA1649: File name should match first type name
146206

147-
# RCS1098: Constant values should be placed on right side of comparisons.
148-
dotnet_diagnostic.RCS1098.severity = none
149207

150-
# RCS1194: Implement exception constructors.
151-
dotnet_diagnostic.RCS1194.severity = none
152208

153-
# RCS1229: Use async/await when necessary.
154-
dotnet_diagnostic.RCS1229.severity = none
155209

156-
# RCS1233: Use short-circuiting operator.
157-
dotnet_diagnostic.RCS1233.severity = none
158210

159-
# RCS1234: Duplicate enum value.
160-
dotnet_diagnostic.RCS1234.severity = none

.github/workflows/CI.yml

Lines changed: 85 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,20 @@ jobs:
1818
TERM: xterm # Enable color output in GitHub Actions
1919
steps:
2020
- name: Checkout code
21-
uses: actions/checkout@v1
21+
uses: actions/checkout@v4
22+
with:
23+
fetch-depth: 0 # Fetch the full history
24+
- name: Start Redis Services (docker-compose)
25+
working-directory: ./tests/RedisConfigs
26+
run: docker compose -f docker-compose.yml up -d --wait
2227
- name: Install .NET SDK
2328
uses: actions/setup-dotnet@v3
2429
with:
2530
dotnet-version: |
2631
6.0.x
27-
7.0.x
32+
8.0.x
2833
- name: .NET Build
2934
run: dotnet build Build.csproj -c Release /p:CI=true
30-
- name: Start Redis Services (docker-compose)
31-
working-directory: ./tests/RedisConfigs
32-
run: docker-compose -f docker-compose.yml up -d
3335
- name: StackExchange.Redis.Tests
3436
run: dotnet test tests/StackExchange.Redis.Tests/StackExchange.Redis.Tests.csproj -c Release --logger trx --logger GitHubActions --results-directory ./test-results/ /p:CI=true
3537
- uses: dorny/test-reporter@v1
@@ -49,37 +51,88 @@ jobs:
4951
NUGET_CERT_REVOCATION_MODE: offline # Disabling signing because of massive perf hit, see https://github.com/NuGet/Home/issues/11548
5052
DOTNET_SYSTEM_CONSOLE_ALLOW_ANSI_COLOR_REDIRECTION: "1" # Note this doesn't work yet for Windows - see https://github.com/dotnet/runtime/issues/68340
5153
TERM: xterm
54+
DOCKER_BUILDKIT: 1
5255
steps:
5356
- name: Checkout code
54-
uses: actions/checkout@v1
55-
# - name: Install .NET SDK
56-
# uses: actions/setup-dotnet@v3
57-
# with:
58-
# dotnet-version: |
59-
# 6.0.x
60-
# 7.0.x
57+
uses: actions/checkout@v4
58+
with:
59+
fetch-depth: 0 # Fetch the full history
60+
- uses: Vampire/setup-wsl@v2
61+
with:
62+
distribution: Ubuntu-22.04
63+
- name: Install Redis
64+
shell: wsl-bash {0}
65+
working-directory: ./tests/RedisConfigs
66+
run: |
67+
apt-get update
68+
apt-get install curl gpg lsb-release libgomp1 jq -y
69+
curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
70+
chmod 644 /usr/share/keyrings/redis-archive-keyring.gpg
71+
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/redis.list
72+
apt-get update
73+
apt-get install -y redis
74+
mkdir redis
75+
- name: Run redis-server
76+
shell: wsl-bash {0}
77+
working-directory: ./tests/RedisConfigs/redis
78+
run: |
79+
pwd
80+
ls .
81+
# Run each server instance in order
82+
redis-server ../Basic/primary-6379.conf &
83+
redis-server ../Basic/replica-6380.conf &
84+
redis-server ../Basic/secure-6381.conf &
85+
redis-server ../Failover/primary-6382.conf &
86+
redis-server ../Failover/replica-6383.conf &
87+
redis-server ../Cluster/cluster-7000.conf --dir ../Cluster &
88+
redis-server ../Cluster/cluster-7001.conf --dir ../Cluster &
89+
redis-server ../Cluster/cluster-7002.conf --dir ../Cluster &
90+
redis-server ../Cluster/cluster-7003.conf --dir ../Cluster &
91+
redis-server ../Cluster/cluster-7004.conf --dir ../Cluster &
92+
redis-server ../Cluster/cluster-7005.conf --dir ../Cluster &
93+
redis-server ../Sentinel/redis-7010.conf &
94+
redis-server ../Sentinel/redis-7011.conf &
95+
redis-server ../Sentinel/sentinel-26379.conf --sentinel &
96+
redis-server ../Sentinel/sentinel-26380.conf --sentinel &
97+
redis-server ../Sentinel/sentinel-26381.conf --sentinel &
98+
# Wait for server instances to get ready
99+
sleep 5
100+
echo "Checking redis-server version with port 6379"
101+
redis-cli -p 6379 INFO SERVER | grep redis_version || echo "Failed to get version for port 6379"
102+
echo "Checking redis-server version with port 6380"
103+
redis-cli -p 6380 INFO SERVER | grep redis_version || echo "Failed to get version for port 6380"
104+
echo "Checking redis-server version with port 6381"
105+
redis-cli -p 6381 INFO SERVER | grep redis_version || echo "Failed to get version for port 6381"
106+
echo "Checking redis-server version with port 6382"
107+
redis-cli -p 6382 INFO SERVER | grep redis_version || echo "Failed to get version for port 6382"
108+
echo "Checking redis-server version with port 6383"
109+
redis-cli -p 6383 INFO SERVER | grep redis_version || echo "Failed to get version for port 6383"
110+
echo "Checking redis-server version with port 7000"
111+
redis-cli -p 7000 INFO SERVER | grep redis_version || echo "Failed to get version for port 7000"
112+
echo "Checking redis-server version with port 7001"
113+
redis-cli -p 7001 INFO SERVER | grep redis_version || echo "Failed to get version for port 7001"
114+
echo "Checking redis-server version with port 7002"
115+
redis-cli -p 7002 INFO SERVER | grep redis_version || echo "Failed to get version for port 7002"
116+
echo "Checking redis-server version with port 7003"
117+
redis-cli -p 7003 INFO SERVER | grep redis_version || echo "Failed to get version for port 7003"
118+
echo "Checking redis-server version with port 7004"
119+
redis-cli -p 7004 INFO SERVER | grep redis_version || echo "Failed to get version for port 7004"
120+
echo "Checking redis-server version with port 7005"
121+
redis-cli -p 7005 INFO SERVER | grep redis_version || echo "Failed to get version for port 7005"
122+
echo "Checking redis-server version with port 7010"
123+
redis-cli -p 7010 INFO SERVER | grep redis_version || echo "Failed to get version for port 7010"
124+
echo "Checking redis-server version with port 7011"
125+
redis-cli -p 7011 INFO SERVER | grep redis_version || echo "Failed to get version for port 7011"
126+
echo "Checking redis-server version with port 26379"
127+
redis-cli -p 26379 INFO SERVER | grep redis_version || echo "Failed to get version for port 26379"
128+
echo "Checking redis-server version with port 26380"
129+
redis-cli -p 26380 INFO SERVER | grep redis_version || echo "Failed to get version for port 26380"
130+
echo "Checking redis-server version with port 26381"
131+
redis-cli -p 26381 INFO SERVER | grep redis_version || echo "Failed to get version for port 26381"
132+
continue-on-error: true
133+
61134
- name: .NET Build
62135
run: dotnet build Build.csproj -c Release /p:CI=true
63-
- name: Start Redis Services (v3.0.503)
64-
working-directory: .\tests\RedisConfigs\3.0.503
65-
run: |
66-
.\redis-server.exe --service-install --service-name "redis-6379" "..\Basic\primary-6379-3.0.conf"
67-
.\redis-server.exe --service-install --service-name "redis-6380" "..\Basic\replica-6380.conf"
68-
.\redis-server.exe --service-install --service-name "redis-6381" "..\Basic\secure-6381.conf"
69-
.\redis-server.exe --service-install --service-name "redis-6382" "..\Failover\primary-6382.conf"
70-
.\redis-server.exe --service-install --service-name "redis-6383" "..\Failover\replica-6383.conf"
71-
.\redis-server.exe --service-install --service-name "redis-7000" "..\Cluster\cluster-7000.conf" --dir "..\Cluster"
72-
.\redis-server.exe --service-install --service-name "redis-7001" "..\Cluster\cluster-7001.conf" --dir "..\Cluster"
73-
.\redis-server.exe --service-install --service-name "redis-7002" "..\Cluster\cluster-7002.conf" --dir "..\Cluster"
74-
.\redis-server.exe --service-install --service-name "redis-7003" "..\Cluster\cluster-7003.conf" --dir "..\Cluster"
75-
.\redis-server.exe --service-install --service-name "redis-7004" "..\Cluster\cluster-7004.conf" --dir "..\Cluster"
76-
.\redis-server.exe --service-install --service-name "redis-7005" "..\Cluster\cluster-7005.conf" --dir "..\Cluster"
77-
.\redis-server.exe --service-install --service-name "redis-7010" "..\Sentinel\redis-7010.conf"
78-
.\redis-server.exe --service-install --service-name "redis-7011" "..\Sentinel\redis-7011.conf"
79-
.\redis-server.exe --service-install --service-name "redis-26379" "..\Sentinel\sentinel-26379.conf" --sentinel
80-
.\redis-server.exe --service-install --service-name "redis-26380" "..\Sentinel\sentinel-26380.conf" --sentinel
81-
.\redis-server.exe --service-install --service-name "redis-26381" "..\Sentinel\sentinel-26381.conf" --sentinel
82-
Start-Service redis-*
83136
- name: StackExchange.Redis.Tests
84137
run: dotnet test tests/StackExchange.Redis.Tests/StackExchange.Redis.Tests.csproj -c Release --logger trx --logger GitHubActions --results-directory ./test-results/ /p:CI=true
85138
- uses: dorny/test-reporter@v1

Directory.Build.props

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,13 @@
3333
<Deterministic>true</Deterministic>
3434
<EmbedUntrackedSources>true</EmbedUntrackedSources>
3535
</PropertyGroup>
36+
3637
<ItemGroup Condition="'$(Configuration)' == 'Release' and '$(SourceRoot)'==''">
3738
<SourceRoot Include="$(MSBuildThisFileDirectory)/"/>
3839
</ItemGroup>
40+
3941
<ItemGroup>
4042
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" PrivateAssets="all" />
43+
<PackageReference Include="StyleCop.Analyzers" PrivateAssets="All" />
4144
</ItemGroup>
4245
</Project>

Directory.Packages.props

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,32 @@
11
<Project>
22
<ItemGroup>
33
<!-- Packages we depend on for StackExchange.Redis, upgrades can create binding redirect pain! -->
4-
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="5.0.0" />
4+
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="6.0.0" />
5+
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.0" />
56
<PackageVersion Include="Pipelines.Sockets.Unofficial" Version="2.2.8" />
67
<PackageVersion Include="System.Diagnostics.PerformanceCounter" Version="5.0.0" />
78
<PackageVersion Include="System.Threading.Channels" Version="5.0.0" />
89
<PackageVersion Include="System.Runtime.InteropServices.RuntimeInformation" Version="4.3.0" />
910
<PackageVersion Include="System.IO.Compression" Version="4.3.0" />
1011

1112
<!-- Packages only used in the solution, upgrade at will -->
12-
<PackageVersion Include="BenchmarkDotNet" Version="0.13.1" />
13-
<PackageVersion Include="GitHubActionsTestLogger" Version="2.0.0-alpha" />
13+
<PackageVersion Include="BenchmarkDotNet" Version="0.14.0" />
14+
<PackageVersion Include="GitHubActionsTestLogger" Version="2.4.1" />
1415
<PackageVersion Include="Microsoft.CodeAnalysis.PublicApiAnalyzers" Version="3.3.4" />
15-
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.0" />
16-
<PackageVersion Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.2" />
17-
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
18-
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="1.1.1" />
19-
<PackageVersion Include="Nerdbank.GitVersioning" Version="3.4.255" />
20-
<PackageVersion Include="Newtonsoft.Json" Version="13.0.1" />
21-
<PackageVersion Include="NSubstitute" Version="5.0.0" />
16+
<PackageVersion Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" />
17+
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
18+
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
19+
<PackageVersion Include="Nerdbank.GitVersioning" Version="3.6.146" />
20+
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
21+
<PackageVersion Include="NSubstitute" Version="5.3.0" />
2222
<PackageVersion Include="StackExchange.Redis" Version="2.6.96" />
23+
<PackageVersion Include="StyleCop.Analyzers" Version="1.2.0-beta.556" />
24+
<PackageVersion Include="System.Collections.Immutable" Version="9.0.0" />
25+
<PackageVersion Include="System.Reflection.Metadata" Version="9.0.0" />
2326
<!-- For binding redirect testing, main package gets this transitively -->
24-
<PackageVersion Include="System.IO.Pipelines" Version="5.0.1" />
25-
<PackageVersion Include="System.Runtime.Caching" Version="5.0.0" />
26-
<PackageVersion Include="xunit" Version="2.5.0" />
27-
<PackageVersion Include="xunit.runner.visualstudio" Version="2.5.0" />
27+
<PackageVersion Include="System.IO.Pipelines" Version="9.0.0" />
28+
<PackageVersion Include="System.Runtime.Caching" Version="9.0.0" />
29+
<PackageVersion Include="xunit" Version="2.9.2" />
30+
<PackageVersion Include="xunit.runner.visualstudio" Version="2.8.2" />
2831
</ItemGroup>
2932
</Project>

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
StackExchange.Redis
22
===================
33

4+
StackExchange.Redis is a .NET client for communicating with RESP servers such as [Redis](https://redis.io/), [Garnet](https://microsoft.github.io/garnet/), [Valkey](https://valkey.io/), [Azure Cache for Redis](https://azure.microsoft.com/products/cache), [AWS ElastiCache](https://aws.amazon.com/elasticache/), and a wide range of other Redis-like servers. We do not maintain a list of compatible servers, but if the server has a Redis-like API: it will *probably* work fine. If not: log an issue with details!
5+
46
For all documentation, [see here](https://stackexchange.github.io/StackExchange.Redis/).
57

68
#### Build Status

0 commit comments

Comments
 (0)