diff --git a/.github/workflows/docker-rewarder.yml b/.github/workflows/docker-rewarder.yml
new file mode 100644
index 0000000..a2bcfaa
--- /dev/null
+++ b/.github/workflows/docker-rewarder.yml
@@ -0,0 +1,26 @@
+name: Docker - Rewarder Bot
+
+on:
+ push:
+ branches:
+ - master
+ tags:
+ - 'v*.*.*'
+ paths:
+ - 'Tools/TestNetRewarder/**'
+ - '!Tools/TestNetRewarder/docker/docker-compose.yaml'
+ - 'Framework/**'
+ - 'ProjectPlugins/**'
+ - .github/workflows/docker-rewarder.yml
+ - .github/workflows/docker-reusable.yml
+ workflow_dispatch:
+
+jobs:
+ build-and-push:
+ name: Build and Push
+ uses: ./.github/workflows/docker-reusable.yml
+ with:
+ docker_file: Tools/TestNetRewarder/docker/Dockerfile
+ docker_repo: codexstorage/codex-rewarderbot
+ secrets: inherit
+
diff --git a/Tools/DiscordRewards/CheckConfig.cs b/Framework/DiscordRewards/CheckConfig.cs
similarity index 100%
rename from Tools/DiscordRewards/CheckConfig.cs
rename to Framework/DiscordRewards/CheckConfig.cs
diff --git a/Tools/DiscordRewards/DiscordRewards.csproj b/Framework/DiscordRewards/DiscordRewards.csproj
similarity index 100%
rename from Tools/DiscordRewards/DiscordRewards.csproj
rename to Framework/DiscordRewards/DiscordRewards.csproj
diff --git a/Tools/DiscordRewards/GiveRewardsCommand.cs b/Framework/DiscordRewards/GiveRewardsCommand.cs
similarity index 100%
rename from Tools/DiscordRewards/GiveRewardsCommand.cs
rename to Framework/DiscordRewards/GiveRewardsCommand.cs
diff --git a/Tools/DiscordRewards/RewardConfig.cs b/Framework/DiscordRewards/RewardConfig.cs
similarity index 100%
rename from Tools/DiscordRewards/RewardConfig.cs
rename to Framework/DiscordRewards/RewardConfig.cs
diff --git a/Tools/DiscordRewards/RewardRepo.cs b/Framework/DiscordRewards/RewardRepo.cs
similarity index 100%
rename from Tools/DiscordRewards/RewardRepo.cs
rename to Framework/DiscordRewards/RewardRepo.cs
diff --git a/Tools/GethConnector/GethConnector.cs b/Framework/GethConnector/GethConnector.cs
similarity index 100%
rename from Tools/GethConnector/GethConnector.cs
rename to Framework/GethConnector/GethConnector.cs
diff --git a/Tools/GethConnector/GethConnector.csproj b/Framework/GethConnector/GethConnector.csproj
similarity index 100%
rename from Tools/GethConnector/GethConnector.csproj
rename to Framework/GethConnector/GethConnector.csproj
diff --git a/Tools/GethConnector/GethInput.cs b/Framework/GethConnector/GethInput.cs
similarity index 100%
rename from Tools/GethConnector/GethInput.cs
rename to Framework/GethConnector/GethInput.cs
diff --git a/Tools/BiblioTech/BiblioTech.csproj b/Tools/BiblioTech/BiblioTech.csproj
index 9eb33a4..19422e4 100644
--- a/Tools/BiblioTech/BiblioTech.csproj
+++ b/Tools/BiblioTech/BiblioTech.csproj
@@ -10,9 +10,9 @@
+
+
-
-
diff --git a/Tools/TestNetRewarder/TestNetRewarder.csproj b/Tools/TestNetRewarder/TestNetRewarder.csproj
index 2b3bd49..e4e7463 100644
--- a/Tools/TestNetRewarder/TestNetRewarder.csproj
+++ b/Tools/TestNetRewarder/TestNetRewarder.csproj
@@ -9,9 +9,9 @@
+
+
-
-
diff --git a/Tools/TestNetRewarder/docker/Dockerfile b/Tools/TestNetRewarder/docker/Dockerfile
new file mode 100644
index 0000000..1a96c3f
--- /dev/null
+++ b/Tools/TestNetRewarder/docker/Dockerfile
@@ -0,0 +1,13 @@
+# Variables
+ARG IMAGE=mcr.microsoft.com/dotnet/sdk:7.0
+ARG APP_HOME=/app
+
+# Create
+FROM ${IMAGE}
+ARG APP_HOME
+
+WORKDIR ${APP_HOME}
+COPY ./Tools/TestNetRewarder ./Tools/TestNetRewarder
+COPY ./Framework ./Framework
+COPY ./ProjectPlugins ./ProjectPlugins
+CMD ["dotnet", "run", "--project", "Tools/TestNetRewarder"]
diff --git a/cs-codex-dist-testing.sln b/cs-codex-dist-testing.sln
index bf199b1..3a403fe 100644
--- a/cs-codex-dist-testing.sln
+++ b/cs-codex-dist-testing.sln
@@ -53,12 +53,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DeployAndRunPlugin", "Proje
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FrameworkTests", "Tests\FrameworkTests\FrameworkTests.csproj", "{25E72004-4D71-4D1E-A193-FC125D12FF96}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DiscordRewards", "Tools\DiscordRewards\DiscordRewards.csproj", "{497352BE-0A1D-4D83-8E21-A07B4A80F2F3}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GethConnector", "Tools\GethConnector\GethConnector.csproj", "{41811923-AF3A-4CC4-B508-D90EC2AFEC55}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestNetRewarder", "Tools\TestNetRewarder\TestNetRewarder.csproj", "{570C0DBE-0EF1-47B5-9A3B-E1F7895722A5}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GethConnector", "Framework\GethConnector\GethConnector.csproj", "{F730DA73-1C92-4107-BCFB-D33759DAB0C3}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DiscordRewards", "Framework\DiscordRewards\DiscordRewards.csproj", "{B07820C4-309F-4454-BCC1-1D4902C9C67B}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -149,18 +149,18 @@ Global
{25E72004-4D71-4D1E-A193-FC125D12FF96}.Debug|Any CPU.Build.0 = Debug|Any CPU
{25E72004-4D71-4D1E-A193-FC125D12FF96}.Release|Any CPU.ActiveCfg = Release|Any CPU
{25E72004-4D71-4D1E-A193-FC125D12FF96}.Release|Any CPU.Build.0 = Release|Any CPU
- {497352BE-0A1D-4D83-8E21-A07B4A80F2F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {497352BE-0A1D-4D83-8E21-A07B4A80F2F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {497352BE-0A1D-4D83-8E21-A07B4A80F2F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {497352BE-0A1D-4D83-8E21-A07B4A80F2F3}.Release|Any CPU.Build.0 = Release|Any CPU
- {41811923-AF3A-4CC4-B508-D90EC2AFEC55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {41811923-AF3A-4CC4-B508-D90EC2AFEC55}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {41811923-AF3A-4CC4-B508-D90EC2AFEC55}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {41811923-AF3A-4CC4-B508-D90EC2AFEC55}.Release|Any CPU.Build.0 = Release|Any CPU
{570C0DBE-0EF1-47B5-9A3B-E1F7895722A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{570C0DBE-0EF1-47B5-9A3B-E1F7895722A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{570C0DBE-0EF1-47B5-9A3B-E1F7895722A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{570C0DBE-0EF1-47B5-9A3B-E1F7895722A5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F730DA73-1C92-4107-BCFB-D33759DAB0C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F730DA73-1C92-4107-BCFB-D33759DAB0C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F730DA73-1C92-4107-BCFB-D33759DAB0C3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F730DA73-1C92-4107-BCFB-D33759DAB0C3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B07820C4-309F-4454-BCC1-1D4902C9C67B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B07820C4-309F-4454-BCC1-1D4902C9C67B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B07820C4-309F-4454-BCC1-1D4902C9C67B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B07820C4-309F-4454-BCC1-1D4902C9C67B}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -187,9 +187,9 @@ Global
{3E38A906-C2FC-43DC-8CA2-FC07C79CF3CA} = {7591C5B3-D86E-4AE4-8ED2-B272D17FE7E3}
{1CC5AF82-8924-4C7E-BFF1-3125D86E53FB} = {8F1F1C2A-E313-4E0C-BE40-58FB0BA91124}
{25E72004-4D71-4D1E-A193-FC125D12FF96} = {88C2A621-8A98-4D07-8625-7900FC8EF89E}
- {497352BE-0A1D-4D83-8E21-A07B4A80F2F3} = {7591C5B3-D86E-4AE4-8ED2-B272D17FE7E3}
- {41811923-AF3A-4CC4-B508-D90EC2AFEC55} = {7591C5B3-D86E-4AE4-8ED2-B272D17FE7E3}
{570C0DBE-0EF1-47B5-9A3B-E1F7895722A5} = {7591C5B3-D86E-4AE4-8ED2-B272D17FE7E3}
+ {F730DA73-1C92-4107-BCFB-D33759DAB0C3} = {81AE04BC-CBFA-4E6F-B039-8208E9AFAAE7}
+ {B07820C4-309F-4454-BCC1-1D4902C9C67B} = {81AE04BC-CBFA-4E6F-B039-8208E9AFAAE7}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {237BF0AA-9EC4-4659-AD9A-65DEB974250C}