From 1655c1a1365b6856d72261b8bc7f371bf69cc2f1 Mon Sep 17 00:00:00 2001 From: haysch <36488481+haysch@users.noreply.github.com> Date: Thu, 10 Aug 2023 21:02:59 +0200 Subject: [PATCH 1/9] Add devcontainer --- .devcontainer/Dockerfile | 5 ++++ .devcontainer/devcontainer.json | 16 +++++++++++++ .devcontainer/docker-compose.yml | 39 ++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/devcontainer.json create mode 100644 .devcontainer/docker-compose.yml diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 00000000..ff6fbb99 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,5 @@ +# base development image on .NET 7.0 +FROM mcr.microsoft.com/devcontainers/dotnet:0-7.0-bullseye AS build + +# fetch the .NET 6.0 SDK for use in testing +COPY --from=mcr.microsoft.com/dotnet/sdk:6.0 /usr/share/dotnet/shared /usr/share/dotnet/shared \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..dc30419a --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,16 @@ +{ + "name": "NRedisStack (.NET)", + + "dockerComposeFile": "docker-compose.yml", + "service": "devcontainer", + "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", + "customizations": { + "vscode": { + "extensions": [ + "ms-dotnettools.csharp", + "ms-dotnettools.csdevkit", + "ms-dotnettools.vscodeintellicode-csharp" + ] + } + } +} diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml new file mode 100644 index 00000000..56916249 --- /dev/null +++ b/.devcontainer/docker-compose.yml @@ -0,0 +1,39 @@ +--- +version: "3.8" +services: + devcontainer: + build: + context: . + dockerfile: Dockerfile + volumes: + - ../..:/workspaces:cached + networks: + - redis + command: sleep infinity + environment: + REDIS: "redis-stack-edge:6379" # default targeted Redis version + REDIS__7_0_6: "redis-stack-7.0.6:6379" + REDIS__6_2_6: "redis-stack-6.2.6:6379" + REDIS__edge: "redis-stack-edge:6379" + + redis-stack-7.0.6: + image: redis/redis-stack-server:7.0.6-RC8 + restart: unless-stopped + networks: + - redis + + redis-stack-6.2.6: + image: redis/redis-stack-server:6.2.6-v7 + restart: unless-stopped + networks: + - redis + + redis-stack-edge: + image: redis/redis-stack-server:edge + restart: unless-stopped + networks: + - redis + +networks: + # defines shared network for communicating with Redis + redis: From 36b55fe200b94caa3e4a6700d7171ef6d2755505 Mon Sep 17 00:00:00 2001 From: haysch <36488481+haysch@users.noreply.github.com> Date: Thu, 10 Aug 2023 21:11:05 +0200 Subject: [PATCH 2/9] Add test tasks for the different Redis versions. Specify default .NET solution. --- .vscode/settings.json | 3 ++- .vscode/tasks.json | 55 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index b26a2359..079dbf34 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,5 @@ { "dotnet-test-explorer.testArguments": "/p:CollectCoverage=true /p:CoverletOutputFormat=lcov /p:CoverletOutput=./lcov.info", - "dotnet-test-explorer.testProjectPath": "**/*NRedisStack.Tests.csproj" + "dotnet-test-explorer.testProjectPath": "**/*NRedisStack.Tests.csproj", + "dotnet.defaultSolution": "NRedisStack.sln" } \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 0542bb3a..927dd8fd 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -38,8 +38,13 @@ "problemMatcher": "$msCompile" }, { - "label": "test", + "label": "test 6.2.6", "dependsOn": [], + "options": { + "env": { + "REDIS": "${env:REDIS__6_2_6}" + } + }, "command": "dotnet", "type": "process", "args": [ @@ -49,6 +54,54 @@ "/p:CoverletOutputFormat=lcov", "/p:CoverletOutput=./lcov.info" ], + "problemMatcher": "$msCompile" + }, + { + "label": "test 7.0.6", + "dependsOn": [], + "options": { + "env": { + "REDIS": "${env:REDIS__7_0_6}" + } + }, + "command": "dotnet", + "type": "process", + "args": [ + "test", + "${workspaceFolder}/tests/NRedisStack.Tests/NRedisStack.Tests.csproj", + "/p:CollectCoverage=true", + "/p:CoverletOutputFormat=lcov", + "/p:CoverletOutput=./lcov.info" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "test edge", + "dependsOn": [], + "options": { + "env": { + "REDIS": "${env:REDIS__edge}" + } + }, + "command": "dotnet", + "type": "process", + "args": [ + "test", + "${workspaceFolder}/tests/NRedisStack.Tests/NRedisStack.Tests.csproj", + "/p:CollectCoverage=true", + "/p:CoverletOutputFormat=lcov", + "/p:CoverletOutput=./lcov.info" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "test all", + "dependsOrder": "parallel", + "dependsOn": [ + "test 6.2.6", + "test 7.0.6", + "test edge" + ], "problemMatcher": "$msCompile", "group": { "kind": "test", From e6c606f9eaf7389c6412de73e562aa0957ea4ffa Mon Sep 17 00:00:00 2001 From: haysch <36488481+haysch@users.noreply.github.com> Date: Thu, 10 Aug 2023 21:12:29 +0200 Subject: [PATCH 3/9] Minor clarification by moving initialization to constructor --- tests/NRedisStack.Tests/RedisFixture.cs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tests/NRedisStack.Tests/RedisFixture.cs b/tests/NRedisStack.Tests/RedisFixture.cs index 8ae470f2..f971d04f 100644 --- a/tests/NRedisStack.Tests/RedisFixture.cs +++ b/tests/NRedisStack.Tests/RedisFixture.cs @@ -4,17 +4,18 @@ namespace NRedisStack.Tests { public class RedisFixture : IDisposable { - - - // Set the enviroment variable to specify your own alternet host and port: - string redis = Environment.GetEnvironmentVariable("REDIS") ?? "localhost:6379"; - public RedisFixture() => Redis = ConnectionMultiplexer.Connect($"{redis}"); + public RedisFixture() + { + // Set the enviroment variable to specify your own alternet host and port: + var redisConnectionString = Environment.GetEnvironmentVariable("REDIS") ?? "localhost:6379"; + Redis = ConnectionMultiplexer.Connect(redisConnectionString); + } public void Dispose() { Redis.Close(); } - public ConnectionMultiplexer Redis { get; private set; } + public ConnectionMultiplexer Redis { get; } } } \ No newline at end of file From 32ad67f0706b3ef7d731bedb9b21e230d0982f1e Mon Sep 17 00:00:00 2001 From: haysch <36488481+haysch@users.noreply.github.com> Date: Sat, 19 Aug 2023 13:19:37 +0200 Subject: [PATCH 4/9] Update devcontainer setup, and vscode tasks, to match updated Redis versions from CI pipeline. --- .devcontainer/docker-compose.yml | 8 ++++---- .vscode/tasks.json | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index 56916249..2af542a2 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -12,18 +12,18 @@ services: command: sleep infinity environment: REDIS: "redis-stack-edge:6379" # default targeted Redis version - REDIS__7_0_6: "redis-stack-7.0.6:6379" + REDIS__7_2_0: "redis-stack-7.2.0:6379" REDIS__6_2_6: "redis-stack-6.2.6:6379" REDIS__edge: "redis-stack-edge:6379" - redis-stack-7.0.6: - image: redis/redis-stack-server:7.0.6-RC8 + redis-stack-7.2.0: + image: redis/redis-stack-server:7.2.0-RC3 restart: unless-stopped networks: - redis redis-stack-6.2.6: - image: redis/redis-stack-server:6.2.6-v7 + image: redis/redis-stack-server:6.2.6-v9 restart: unless-stopped networks: - redis diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 927dd8fd..68c52359 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -57,11 +57,11 @@ "problemMatcher": "$msCompile" }, { - "label": "test 7.0.6", + "label": "test 7.2.0", "dependsOn": [], "options": { "env": { - "REDIS": "${env:REDIS__7_0_6}" + "REDIS": "${env:REDIS__7_2_0}" } }, "command": "dotnet", @@ -96,10 +96,10 @@ }, { "label": "test all", - "dependsOrder": "parallel", + "dependsOrder": "sequence", "dependsOn": [ "test 6.2.6", - "test 7.0.6", + "test 7.2.0", "test edge" ], "problemMatcher": "$msCompile", From f5b123c4e744c1b93deaf62b5664406b81b277aa Mon Sep 17 00:00:00 2001 From: haysch <36488481+haysch@users.noreply.github.com> Date: Sat, 19 Aug 2023 13:20:02 +0200 Subject: [PATCH 5/9] Include section on DevContainers --- CONTRIBUTING.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9cb9846a..0b3aaeb8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -35,10 +35,19 @@ Here's how to get started with your code contribution: 3. Write your tests 4. Use the `docker run -p 6379:6379 -it redis/redis-stack-server:edge` as your local environment for running the functional tests. -5. Make sure your tests pass using `dotnet test' +5. Make sure your tests pass using `dotnet test` 6. Push your changes to GitHub 7. Open a pull request +### Dev Container + +Dev Containers are an easy way to define and setup a reproducible development environment by using containers. +NRedisStack provides a [development container environment](https://containers.dev/) that can be used to get running relatively fast without focusing on the different Redis deployments. + +The devcontainer comes packed with .NET 6 and 7, required by the testing suite, as well as the currently supported Redis versions that are run as part of the CI pipeline. + +Devcontainers are supported in a few [editors](https://containers.dev/supporting#editors) or by using the [`devcontainer-cli` tool](https://github.com/devcontainers/cli). + ## Testing Call `dotnet test` to run all tests From 77c2d10781ae28bd157f32cfcf9ef4ca4c60de65 Mon Sep 17 00:00:00 2001 From: haysch <36488481+haysch@users.noreply.github.com> Date: Sat, 19 Aug 2023 13:20:02 +0200 Subject: [PATCH 6/9] Include section on DevContainers Signed-off-by: haysch <36488481+haysch@users.noreply.github.com> --- CONTRIBUTING.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9cb9846a..0b3aaeb8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -35,10 +35,19 @@ Here's how to get started with your code contribution: 3. Write your tests 4. Use the `docker run -p 6379:6379 -it redis/redis-stack-server:edge` as your local environment for running the functional tests. -5. Make sure your tests pass using `dotnet test' +5. Make sure your tests pass using `dotnet test` 6. Push your changes to GitHub 7. Open a pull request +### Dev Container + +Dev Containers are an easy way to define and setup a reproducible development environment by using containers. +NRedisStack provides a [development container environment](https://containers.dev/) that can be used to get running relatively fast without focusing on the different Redis deployments. + +The devcontainer comes packed with .NET 6 and 7, required by the testing suite, as well as the currently supported Redis versions that are run as part of the CI pipeline. + +Devcontainers are supported in a few [editors](https://containers.dev/supporting#editors) or by using the [`devcontainer-cli` tool](https://github.com/devcontainers/cli). + ## Testing Call `dotnet test` to run all tests From 1e64e80de81338f584ee58835529178e5fe2d6f6 Mon Sep 17 00:00:00 2001 From: haysch <36488481+haysch@users.noreply.github.com> Date: Sat, 19 Aug 2023 13:27:57 +0200 Subject: [PATCH 7/9] Fix "spelling mistakes" --- CONTRIBUTING.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0b3aaeb8..a23df65d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -39,14 +39,14 @@ Here's how to get started with your code contribution: 6. Push your changes to GitHub 7. Open a pull request -### Dev Container +### Development Container -Dev Containers are an easy way to define and setup a reproducible development environment by using containers. +Development Containers are an easy way to define and setup a reproducible development environment by using containers. NRedisStack provides a [development container environment](https://containers.dev/) that can be used to get running relatively fast without focusing on the different Redis deployments. -The devcontainer comes packed with .NET 6 and 7, required by the testing suite, as well as the currently supported Redis versions that are run as part of the CI pipeline. +The development container comes packed with .NET 6 and 7, required by the testing suite, as well as the currently supported Redis versions that are run as part of the CI pipeline. -Devcontainers are supported in a few [editors](https://containers.dev/supporting#editors) or by using the [`devcontainer-cli` tool](https://github.com/devcontainers/cli). +Development containers are supported in a few [editors](https://containers.dev/supporting#editors) or by using the [`devcontainer-cli` tool](https://github.com/devcontainers/cli). ## Testing From be140f906993bfcb93e9e37b696f9c384d27eac2 Mon Sep 17 00:00:00 2001 From: shacharPash Date: Mon, 21 Aug 2023 14:41:21 +0300 Subject: [PATCH 8/9] add explenation about dev containers --- CONTRIBUTING.md | 51 ++++++++++++++++++++++++++++-- docs/devcontainerNotification.png | Bin 0 -> 20570 bytes 2 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 docs/devcontainerNotification.png diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a23df65d..e3b2a3ba 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -34,12 +34,12 @@ Here's how to get started with your code contribution: 2. Do the changes in your fork 3. Write your tests -4. Use the `docker run -p 6379:6379 -it redis/redis-stack-server:edge` as your local environment for running the functional tests. +4. Use the `docker run -p 6379:6379 -it redis/redis-stack-server:edge` as your local environment for running the functional tests. You can also use Development Container as described below. 5. Make sure your tests pass using `dotnet test` 6. Push your changes to GitHub 7. Open a pull request -### Development Container +## Development Container Development Containers are an easy way to define and setup a reproducible development environment by using containers. NRedisStack provides a [development container environment](https://containers.dev/) that can be used to get running relatively fast without focusing on the different Redis deployments. @@ -48,6 +48,53 @@ The development container comes packed with .NET 6 and 7, required by the testin Development containers are supported in a few [editors](https://containers.dev/supporting#editors) or by using the [`devcontainer-cli` tool](https://github.com/devcontainers/cli). +This guide explains how to use the existing development container setup for this project. + +### Prerequisites + +Before you start, make sure you have the following installed: + +- [Visual Studio Code](https://code.visualstudio.com/) +- [Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) for VS Code + +### Steps to Use the Existing Development Container Setup + +1. **Clone the Project:** Start by cloning the project's repository to your local machine using Git. + +2. **Install Prerequisites:** Ensure you have Visual Studio Code and the Dev Containers extension installed. + +3. **Open in Development Container:** + + a. Open the cloned project directory using Visual Studio Code. + + b. VS Code should detect the `.devcontainer` folder and the associated configuration files. + + c. You will likely see a notification suggesting reopening the project in a development container: + ![devcontainer notification](./docs/devcontainerNotification.png) + + Click on this notification or press `Ctrl + Shift + P` (or `Cmd + Shift + P` on Mac) and type _"Dev Containers: Reopen in Container"_. Select the suggestion that appears. + + d. Visual Studio Code will build the Docker image according to the configuration and start a container using the specified setup. + +4. **Develop Inside the DevContainer:** + + You're now working within the development container environment. Access extensions, dependencies, and settings specified in `devcontainer.json`. Edit code, use the integrated terminal, and run commands as usual. + +5. **Save and Commit:** + + Changes made within the development container will be saved to your local repository. Use Git within the container to manage changes, create branches, commit, and push code. + +6. **Stop the DevContainer:** + + Close the development container by clicking the "Close Remote Connection" button in the bottom-left corner of the VS Code window. This stops the container while preserving changes. + +7. **Resume Work:** + + Reopen the project in the development container to work on it again using the same steps. + +By using the existing `.devcontainer` setup, you benefit from a consistent development environment tailored to the project's requirements. For specific configuration details or issues, consult the project documentation or ask maintainers for assistance. + + ## Testing Call `dotnet test` to run all tests diff --git a/docs/devcontainerNotification.png b/docs/devcontainerNotification.png new file mode 100644 index 0000000000000000000000000000000000000000..5bfd86a77219e9bd0542fe071b73aaadfd946c82 GIT binary patch literal 20570 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 Date: Mon, 21 Aug 2023 14:45:18 +0300 Subject: [PATCH 9/9] wordlist --- .github/wordlist.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/wordlist.txt b/.github/wordlist.txt index 69a237fb..2f52fbd0 100644 --- a/.github/wordlist.txt +++ b/.github/wordlist.txt @@ -1,6 +1,8 @@ cli codecov Codecov +Dev +DevContainer dotnet firsttimersonly github