mirror of
https://github.com/RPCS3/discord-bot.git
synced 2024-11-23 02:09:38 +00:00
better azure pipelines integration and building docker image
This commit is contained in:
parent
8b14e84e5f
commit
62b3c69a49
3
.dockerignore
Normal file
3
.dockerignore
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.vs/
|
||||||
|
.vscode/
|
||||||
|
_ReSharper.*/
|
@ -8,6 +8,7 @@
|
|||||||
<UserSecretsId>c2e6548b-b215-4a18-a010-958ef294b310</UserSecretsId>
|
<UserSecretsId>c2e6548b-b215-4a18-a010-958ef294b310</UserSecretsId>
|
||||||
<LangVersion>latest</LangVersion>
|
<LangVersion>latest</LangVersion>
|
||||||
<NoWarn>1701;1702;VSTHRD200</NoWarn>
|
<NoWarn>1701;1702;VSTHRD200</NoWarn>
|
||||||
|
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@ -37,6 +38,7 @@
|
|||||||
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="2.2.0" />
|
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="2.2.0" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="2.2.4" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="2.2.4" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="2.2.0" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="2.2.0" />
|
||||||
|
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.4.10" />
|
||||||
<PackageReference Include="Nerdbank.Streams" Version="2.3.26" />
|
<PackageReference Include="Nerdbank.Streams" Version="2.3.26" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
|
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
|
||||||
<PackageReference Include="NLog" Version="4.6.6" />
|
<PackageReference Include="NLog" Version="4.6.6" />
|
||||||
|
@ -5,6 +5,7 @@ using System.Diagnostics;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
using CompatBot.Utils;
|
||||||
using DSharpPlus.Entities;
|
using DSharpPlus.Entities;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.Configuration.UserSecrets;
|
using Microsoft.Extensions.Configuration.UserSecrets;
|
||||||
@ -54,13 +55,16 @@ namespace CompatBot
|
|||||||
public static int MinimumPiracyTriggerLength => config.GetValue(nameof(MinimumPiracyTriggerLength), 4);
|
public static int MinimumPiracyTriggerLength => config.GetValue(nameof(MinimumPiracyTriggerLength), 4);
|
||||||
|
|
||||||
public static string Token => config.GetValue(nameof(Token), "");
|
public static string Token => config.GetValue(nameof(Token), "");
|
||||||
public static string LogPath => config.GetValue(nameof(LogPath), "logs/bot.log"); // paths are relative to the assembly, so this will put it in the project's root
|
public static string LogPath => config.GetValue(nameof(LogPath), "../../../logs/"); // paths are relative to the assembly, so this will put it in the project's root
|
||||||
public static string IrdCachePath => config.GetValue(nameof(IrdCachePath), "./ird/");
|
public static string IrdCachePath => config.GetValue(nameof(IrdCachePath), "./ird/");
|
||||||
|
|
||||||
public static string GoogleApiConfigPath
|
public static string GoogleApiConfigPath
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
if (SandboxDetector.Detect() == "Docker")
|
||||||
|
return "/bot-config/credentials.json";
|
||||||
|
|
||||||
if (Assembly.GetEntryAssembly().GetCustomAttribute<UserSecretsIdAttribute>() is UserSecretsIdAttribute attribute)
|
if (Assembly.GetEntryAssembly().GetCustomAttribute<UserSecretsIdAttribute>() is UserSecretsIdAttribute attribute)
|
||||||
{
|
{
|
||||||
var path = Path.GetDirectoryName(PathHelper.GetSecretsPathFromSecretsId(attribute.UserSecretsId));
|
var path = Path.GetDirectoryName(PathHelper.GetSecretsPathFromSecretsId(attribute.UserSecretsId));
|
||||||
@ -68,6 +72,7 @@ namespace CompatBot
|
|||||||
if (File.Exists(path))
|
if (File.Exists(path))
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
return "Properties/credentials.json";
|
return "Properties/credentials.json";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -154,7 +159,7 @@ namespace CompatBot
|
|||||||
|
|
||||||
config = new ConfigurationBuilder()
|
config = new ConfigurationBuilder()
|
||||||
.AddUserSecrets(Assembly.GetExecutingAssembly()) // lower priority
|
.AddUserSecrets(Assembly.GetExecutingAssembly()) // lower priority
|
||||||
//.AddEnvironmentVariables()
|
.AddEnvironmentVariables()
|
||||||
.AddInMemoryCollection(inMemorySettings) // higher priority
|
.AddInMemoryCollection(inMemorySettings) // higher priority
|
||||||
.Build();
|
.Build();
|
||||||
Log = GetLog();
|
Log = GetLog();
|
||||||
@ -172,7 +177,7 @@ namespace CompatBot
|
|||||||
{
|
{
|
||||||
var config = new NLog.Config.LoggingConfiguration();
|
var config = new NLog.Config.LoggingConfiguration();
|
||||||
var fileTarget = new FileTarget("logfile") {
|
var fileTarget = new FileTarget("logfile") {
|
||||||
FileName = Path.Combine("../../../", LogPath),
|
FileName = Path.Combine(LogPath, "bot.log"),
|
||||||
ArchiveEvery = FileArchivePeriod.Day,
|
ArchiveEvery = FileArchivePeriod.Day,
|
||||||
ArchiveNumbering = ArchiveNumberingMode.DateAndSequence,
|
ArchiveNumbering = ArchiveNumberingMode.DateAndSequence,
|
||||||
KeepFileOpen = true,
|
KeepFileOpen = true,
|
||||||
|
@ -3,6 +3,7 @@ using System.IO;
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using CompatBot.Database.Migrations;
|
using CompatBot.Database.Migrations;
|
||||||
|
using CompatBot.Utils;
|
||||||
using Microsoft.Data.Sqlite;
|
using Microsoft.Data.Sqlite;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations.Internal;
|
using Microsoft.EntityFrameworkCore.Migrations.Internal;
|
||||||
@ -110,6 +111,9 @@ namespace CompatBot.Database
|
|||||||
|
|
||||||
internal static string GetDbPath(string dbName, Environment.SpecialFolder desiredFolder)
|
internal static string GetDbPath(string dbName, Environment.SpecialFolder desiredFolder)
|
||||||
{
|
{
|
||||||
|
if (SandboxDetector.Detect() == "Docker")
|
||||||
|
return Path.Combine("/bot-db/", dbName);
|
||||||
|
|
||||||
var settingsFolder = Path.Combine(Environment.GetFolderPath(desiredFolder), "compat-bot");
|
var settingsFolder = Path.Combine(Environment.GetFolderPath(desiredFolder), "compat-bot");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Reflection;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using CompatBot.Commands;
|
using CompatBot.Commands;
|
||||||
@ -8,10 +9,12 @@ using CompatBot.Database;
|
|||||||
using CompatBot.Database.Providers;
|
using CompatBot.Database.Providers;
|
||||||
using CompatBot.EventHandlers;
|
using CompatBot.EventHandlers;
|
||||||
using CompatBot.ThumbScrapper;
|
using CompatBot.ThumbScrapper;
|
||||||
|
using CompatBot.Utils;
|
||||||
using DSharpPlus;
|
using DSharpPlus;
|
||||||
using DSharpPlus.CommandsNext;
|
using DSharpPlus.CommandsNext;
|
||||||
using DSharpPlus.Entities;
|
using DSharpPlus.Entities;
|
||||||
using DSharpPlus.Interactivity;
|
using DSharpPlus.Interactivity;
|
||||||
|
using Microsoft.Extensions.Configuration.UserSecrets;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
namespace CompatBot
|
namespace CompatBot
|
||||||
@ -24,6 +27,17 @@ namespace CompatBot
|
|||||||
|
|
||||||
internal static async Task Main(string[] args)
|
internal static async Task Main(string[] args)
|
||||||
{
|
{
|
||||||
|
if (args.Length > 0 && args[0] == "--dry-run")
|
||||||
|
{
|
||||||
|
Console.WriteLine("Confinement: " + SandboxDetector.Detect());
|
||||||
|
Console.WriteLine("Database path: " + Path.GetDirectoryName(Path.GetFullPath(DbImporter.GetDbPath("fake.db", Environment.SpecialFolder.ApplicationData))));
|
||||||
|
if (Assembly.GetEntryAssembly().GetCustomAttribute<UserSecretsIdAttribute>() is UserSecretsIdAttribute attribute)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Bot config path: " + Path.GetDirectoryName(Path.GetFullPath(Config.GoogleApiConfigPath)));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var singleInstanceCheckThread = new Thread(() =>
|
var singleInstanceCheckThread = new Thread(() =>
|
||||||
{
|
{
|
||||||
using (var instanceLock = new Mutex(false, @"Global\RPCS3 Compatibility Bot"))
|
using (var instanceLock = new Mutex(false, @"Global\RPCS3 Compatibility Bot"))
|
||||||
|
@ -2,6 +2,9 @@
|
|||||||
"profiles": {
|
"profiles": {
|
||||||
"default": {
|
"default": {
|
||||||
"commandName": "Project"
|
"commandName": "Project"
|
||||||
|
},
|
||||||
|
"Docker": {
|
||||||
|
"commandName": "Docker"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -218,7 +218,7 @@ namespace CompatBot.Utils
|
|||||||
return result.ToString(0, result.Length-1);
|
return result.ToString(0, result.Length-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string GetMoons(decimal? stars)
|
public static string GetMoons(decimal? stars, bool haveFun = true)
|
||||||
{
|
{
|
||||||
if (!stars.HasValue)
|
if (!stars.HasValue)
|
||||||
return null;
|
return null;
|
||||||
@ -232,7 +232,7 @@ namespace CompatBot.Utils
|
|||||||
|
|
||||||
if (halfStar == 4)
|
if (halfStar == 4)
|
||||||
{
|
{
|
||||||
if (new Random().Next(100) == 69)
|
if (haveFun && new Random().Next(100) == 69)
|
||||||
result += "🌝";
|
result += "🌝";
|
||||||
else
|
else
|
||||||
result += "🌕";
|
result += "🌕";
|
||||||
@ -246,7 +246,7 @@ namespace CompatBot.Utils
|
|||||||
|
|
||||||
for (var i = 0; i < noStars; i++)
|
for (var i = 0; i < noStars; i++)
|
||||||
{
|
{
|
||||||
if (i == 0 && halfStar == 0 && new Random().Next(100) == 69)
|
if (haveFun && i == 0 && halfStar == 0 && new Random().Next(100) == 69)
|
||||||
result += "🌚";
|
result += "🌚";
|
||||||
else
|
else
|
||||||
result += "🌑";
|
result += "🌑";
|
||||||
|
@ -12,6 +12,9 @@ namespace CompatBot.Utils
|
|||||||
if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("FLATPAK_SYSTEM_DIR")))
|
if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("FLATPAK_SYSTEM_DIR")))
|
||||||
return "Flatpak";
|
return "Flatpak";
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("RUNNING_IN_DOCKER")))
|
||||||
|
return "Docker";
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -82,5 +82,7 @@ namespace CompatBot.Utils
|
|||||||
return date.ToUniversalTime();
|
return date.ToUniversalTime();
|
||||||
return date.AsUtc();
|
return date.AsUtc();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static List<string> GetSupportedTimeZoneAbbreviations() => TimeZoneMap.Keys.ToList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
11
Dockerfile
Normal file
11
Dockerfile
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
FROM mcr.microsoft.com/dotnet/core/sdk:latest AS base
|
||||||
|
COPY packages /root/.nuget/packages/
|
||||||
|
WORKDIR /src
|
||||||
|
COPY . .
|
||||||
|
RUN rm -rf ./packages
|
||||||
|
RUN git status
|
||||||
|
RUN dotnet build "CompatBot/CompatBot.csproj" -c Release
|
||||||
|
ENV RUNNING_IN_DOCKER true
|
||||||
|
WORKDIR /src/CompatBot
|
||||||
|
RUN dotnet run -c Release --dry-run
|
||||||
|
ENTRYPOINT ["dotnet", "run", "-c Release", "CompatBot.csproj"]
|
@ -47,6 +47,8 @@ How to Build
|
|||||||
|
|
||||||
How to Run in Production
|
How to Run in Production
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
|
### Running from source
|
||||||
* Change configuration if needed (probably just token):
|
* Change configuration if needed (probably just token):
|
||||||
* use `$ dotnet user-secrets set Token <your_token_here>`
|
* use `$ dotnet user-secrets set Token <your_token_here>`
|
||||||
* for available configuration variables, see [Config.cs](CompatBot/Config.cs#L31)
|
* for available configuration variables, see [Config.cs](CompatBot/Config.cs#L31)
|
||||||
@ -54,6 +56,11 @@ How to Run in Production
|
|||||||
* `$ cd CompatBot`
|
* `$ cd CompatBot`
|
||||||
* `$ dotnet run -c Release`
|
* `$ dotnet run -c Release`
|
||||||
|
|
||||||
|
### Running with Docker
|
||||||
|
* Official image is hosted on [Docker Hub](https://hub.docker.com/r/13xforever/rpcs3-discord-bot).
|
||||||
|
* You should pull images tagged with `release-latest` (same thing as `latest`)
|
||||||
|
* Please take a look at the [docker-compose.yml](docker-compose.yml) for required configuration (bot token and mounting points for persistent data).
|
||||||
|
|
||||||
External resources that need manual updates
|
External resources that need manual updates
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
* [Unicode confusables](http://www.unicode.org/Public/security/latest/confusables.txt) gzipped, for Homoglyph checks
|
* [Unicode confusables](http://www.unicode.org/Public/security/latest/confusables.txt) gzipped, for Homoglyph checks
|
||||||
|
@ -4,7 +4,7 @@ using NUnit.Framework;
|
|||||||
|
|
||||||
namespace Tests
|
namespace Tests
|
||||||
{
|
{
|
||||||
[TestFixture]
|
[TestFixture, Explicit("Requires files to run")]
|
||||||
public class IrdTests
|
public class IrdTests
|
||||||
{
|
{
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -23,7 +23,7 @@ namespace Tests
|
|||||||
[TestCase(1.0, "🌕🌑🌑🌑🌑")]
|
[TestCase(1.0, "🌕🌑🌑🌑🌑")]
|
||||||
public void FormatTest(decimal score, string expectedValue)
|
public void FormatTest(decimal score, string expectedValue)
|
||||||
{
|
{
|
||||||
Assert.That(StringUtils.GetMoons(score), Is.EqualTo(expectedValue), "Failed for " + score);
|
Assert.That(StringUtils.GetMoons(score, false), Is.EqualTo(expectedValue), "Failed for " + score);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,12 +8,12 @@ namespace Tests
|
|||||||
public class TimeParserTests
|
public class TimeParserTests
|
||||||
{
|
{
|
||||||
[TestCase("2019-8-19 6:00 PT", "2019-08-19T13:00Z")]
|
[TestCase("2019-8-19 6:00 PT", "2019-08-19T13:00Z")]
|
||||||
[TestCase("2019-8-19 17:00 bst", "2019-08-19T16:00Z")]
|
[TestCase("2019-8-19 17:00 cest", "2019-08-19T15:00Z")]
|
||||||
[TestCase("2019-9-1 22:00 jst", "2019-09-01T13:00Z")]
|
[TestCase("2019-9-1 22:00 jst", "2019-09-01T13:00Z")]
|
||||||
public void TimeZoneConverterTest(string input, string utcInput)
|
public void TimeZoneConverterTest(string input, string utcInput)
|
||||||
{
|
{
|
||||||
var utc = DateTime.Parse(utcInput).Normalize();
|
var utc = DateTime.Parse(utcInput).Normalize();
|
||||||
Assert.That(TimeParser.TryParse(input, out var result), Is.True);
|
Assert.That(TimeParser.TryParse(input, out var result), Is.True, $"{input} failed to parse\nSupported time zones: {string.Join(", ", TimeParser.GetSupportedTimeZoneAbbreviations())}");
|
||||||
Assert.That(result, Is.EqualTo(utc));
|
Assert.That(result, Is.EqualTo(utc));
|
||||||
Assert.That(result.Kind, Is.EqualTo(DateTimeKind.Utc));
|
Assert.That(result.Kind, Is.EqualTo(DateTimeKind.Utc));
|
||||||
}
|
}
|
||||||
|
@ -1,20 +1,75 @@
|
|||||||
# ASP.NET Core
|
jobs:
|
||||||
# Build and test ASP.NET Core projects targeting .NET Core.
|
- job: BuildAndTest
|
||||||
# Add steps that run tests, create a NuGet package, deploy, and more:
|
displayName: 'Run tests'
|
||||||
# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core
|
pool:
|
||||||
|
vmImage: 'ubuntu-latest'
|
||||||
|
steps:
|
||||||
|
- script: dotnet restore --ignore-failed-sources
|
||||||
|
displayName: 'dotnet restore (first try)'
|
||||||
|
|
||||||
pool:
|
- script: dotnet restore --ignore-failed-sources
|
||||||
vmImage: 'Ubuntu 16.04'
|
displayName: 'dotnet restore (second try)'
|
||||||
|
|
||||||
variables:
|
- script: dotnet restore
|
||||||
buildConfiguration: 'Release'
|
displayName: 'dotnet restore (last try)'
|
||||||
|
|
||||||
steps:
|
- script: dotnet build --configuration Debug
|
||||||
- script: dotnet restore
|
displayName: 'dotnet build Debug'
|
||||||
displayName: 'dotnet restore'
|
|
||||||
|
|
||||||
- script: dotnet build --configuration Debug
|
- task: DotNetCoreCLI@2
|
||||||
displayName: 'dotnet build Debug'
|
displayName: 'dotnet test'
|
||||||
|
inputs:
|
||||||
|
command: 'test'
|
||||||
|
projects: Tests/Tests.csproj
|
||||||
|
|
||||||
- script: dotnet build --configuration Release
|
- job: DockerImage
|
||||||
displayName: 'dotnet build Release'
|
displayName: 'Build Docker image'
|
||||||
|
condition: and(and(succeeded(), eq(variables['ReleaseBranch'], variables['Build.SourceBranch'])), ne(format('{0}', variables['DockerConnection']), ''))
|
||||||
|
dependsOn: BuildAndTest
|
||||||
|
pool:
|
||||||
|
vmImage: 'ubuntu-latest'
|
||||||
|
steps:
|
||||||
|
- script: git checkout -f $(Build.SourceBranchName)
|
||||||
|
displayName: 'create local tracking branch'
|
||||||
|
|
||||||
|
- script: git clean -dfx
|
||||||
|
displayName: 'clean build artifacts'
|
||||||
|
|
||||||
|
- script: dotnet restore --ignore-failed-sources
|
||||||
|
displayName: 'dotnet restore (first try)'
|
||||||
|
|
||||||
|
- script: dotnet restore --ignore-failed-sources
|
||||||
|
displayName: 'dotnet restore (second try)'
|
||||||
|
|
||||||
|
- script: dotnet restore
|
||||||
|
displayName: 'dotnet restore (last try)'
|
||||||
|
|
||||||
|
- script: dotnet build --configuration Release
|
||||||
|
displayName: 'dotnet build Release'
|
||||||
|
|
||||||
|
- script: mkdir packages && cp -a /home/vsts/.nuget/packages ./packages/
|
||||||
|
displayName: 'copy nuget package cache for docker'
|
||||||
|
|
||||||
|
- task: Docker@2
|
||||||
|
displayName: 'building release docker image'
|
||||||
|
condition: and(succeeded(), eq(variables['ReleaseKind'], 'release'))
|
||||||
|
inputs:
|
||||||
|
containerRegistry: $(DockerConnection)
|
||||||
|
repository: $(DockerRegistry)
|
||||||
|
command: 'buildAndPush'
|
||||||
|
Dockerfile: 'Dockerfile'
|
||||||
|
tags: |
|
||||||
|
$(Build.BuildId)
|
||||||
|
release-latest
|
||||||
|
latest
|
||||||
|
|
||||||
|
- task: Docker@2
|
||||||
|
displayName: 'building test docker image'
|
||||||
|
condition: and(succeeded(), not(eq(variables['ReleaseKind'], 'release')))
|
||||||
|
inputs:
|
||||||
|
containerRegistry: $(DockerConnection)
|
||||||
|
repository: $(DockerRegistry)
|
||||||
|
command: 'buildAndPush'
|
||||||
|
Dockerfile: 'Dockerfile'
|
||||||
|
tags: test-latest
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio 15
|
# Visual Studio Version 16
|
||||||
VisualStudioVersion = 15.0.27703.2035
|
VisualStudioVersion = 16.0.28917.181
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompatBot", "CompatBot\CompatBot.csproj", "{6D9CA448-60C1-4D66-91D6-EC6C586508E6}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompatBot", "CompatBot\CompatBot.csproj", "{6D9CA448-60C1-4D66-91D6-EC6C586508E6}"
|
||||||
EndProject
|
EndProject
|
||||||
@ -17,9 +17,16 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests", "Tests\Tests.csproj
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Clients", "Clients", "{E7FE0ADD-CBA6-4321-8A1C-0A3B5C3F54C2}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Clients", "Clients", "{E7FE0ADD-CBA6-4321-8A1C-0A3B5C3F54C2}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GithubClient", "Clients\GithubClient\GithubClient.csproj", "{AF8FDA29-864E-4A1C-9568-99DECB7E4B36}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GithubClient", "Clients\GithubClient\GithubClient.csproj", "{AF8FDA29-864E-4A1C-9568-99DECB7E4B36}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppveyorClient", "Clients\AppveyorClient\AppveyorClient.csproj", "{595ED201-1456-49F9-AD60-54B08499A5C1}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AppveyorClient", "Clients\AppveyorClient\AppveyorClient.csproj", "{595ED201-1456-49F9-AD60-54B08499A5C1}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{AD87F38F-BFCE-4EA6-A430-20C497552FD7}"
|
||||||
|
ProjectSection(SolutionItems) = preProject
|
||||||
|
azure-pipelines.yml = azure-pipelines.yml
|
||||||
|
docker-compose.example.yml = docker-compose.example.yml
|
||||||
|
Dockerfile = Dockerfile
|
||||||
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
13
docker-compose.example.yml
Normal file
13
docker-compose.example.yml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
version: "3"
|
||||||
|
services:
|
||||||
|
bot:
|
||||||
|
image: rpcs3/discord-bot:latest
|
||||||
|
volumes:
|
||||||
|
- /home/MY_USER_NAME/.local/share/compat-bot:/bot-db
|
||||||
|
- /home/MY_USER_NAME/.microsoft/usersecrets/c2e6548b-b215-4a18-a010-958ef294b310:/bot-config
|
||||||
|
- /var/logs/compat-bot:/src/CompatBot/logs
|
||||||
|
- /ver/ird:/var/ird
|
||||||
|
environment:
|
||||||
|
Token: MY_BOT_TOKEN
|
||||||
|
LogPath: /var/logs/compat-bot
|
||||||
|
IrdCachePath: /var/ird
|
Loading…
Reference in New Issue
Block a user