Skip to content

Commit 229d0fb

Browse files
committed
Added some XKCD #927 mitigations
- Added ScreenMenuAPI implementation driver - Added MenuManagerApi compatibility plugin - Corrected nullability on the ItemSelectedAction event - Added singleton for CSSUniversalAPI capability
1 parent 426c169 commit 229d0fb

20 files changed

+706
-40
lines changed

.github/shared.yml

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ definitions:
3030

3131
build: &build
3232
name: Build
33-
run: dotnet build --configuration Release --no-restore
33+
run: dotnet publish --configuration Release --no-restore
3434

3535
test: &test
3636
name: Test
@@ -63,18 +63,11 @@ definitions:
6363
run: dotnet nuget push 'artifacts/*.nupkg' -k ${{ secrets.GITHUB_TOKEN }} -s csgals --skip-duplicate --no-symbols
6464

6565
build-css-package: &build-css-package
66-
name: 'Build CSS Package'
66+
name: 'Build CSS Packages'
6767
run: |
68-
src="./src/CSSUniversalMenuAPI/bin/Release/net8.0"
69-
dst="./artifacts/CSSUniversalMenuAPI"
70-
dst_shared="$dst/addons/counterstrikesharp/shared/CSSUniversalMenuAPI"
71-
mkdir -p "$dst_shared"
72-
cp "$src/CSSUniversalMenuAPI.dll" "$dst_shared/"
73-
cp "$src/CSSUniversalMenuAPI.deps.json" "$dst_shared/"
74-
pushd "$dst"
75-
7z a ../CSSUniversalMenuAPI.zip ./
76-
popd
77-
rm -rf "$dst"
68+
bash package.sh
69+
70+
7871
7972
empty: "hi" # fixes the yml parser from messing the last value up
8073

.github/workflows/continuous-delivery.yml

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ jobs:
4848
run: dotnet restore
4949

5050
- name: Build
51-
run: dotnet build --configuration Release --no-restore
51+
run: dotnet publish --configuration Release --no-restore
5252

5353
- name: Test
5454
run: dotnet test --configuration Debug --logger GitHubActions -p:CollectCoverage=true
@@ -58,18 +58,46 @@ jobs:
5858
run: dotnet pack -p:PackageOutputPath="$(pwd)/artifacts" --configuration Release
5959
--no-restore
6060

61-
- name: Build CSS Package
61+
- name: Build CSS Packages
6262
run: |
63-
src="./src/CSSUniversalMenuAPI/bin/Release/net8.0"
63+
# build CSSUniversalMenuAPI.zip
6464
dst="./artifacts/CSSUniversalMenuAPI"
65-
dst_shared="$dst/addons/counterstrikesharp/shared/CSSUniversalMenuAPI"
66-
mkdir -p "$dst_shared"
67-
cp "$src/CSSUniversalMenuAPI.dll" "$dst_shared/"
68-
cp "$src/CSSUniversalMenuAPI.deps.json" "$dst_shared/"
65+
dst_shared="$dst/addons/counterstrikesharp/shared"
66+
dst_plugins="$dst/addons/counterstrikesharp/plugins"
67+
68+
# package CSSUniversalMenuAPI
69+
mkdir -p "$dst_shared/CSSUniversalMenuAPI"
70+
src="./src/CSSUniversalMenuAPI/bin/Release/net8.0/publish"
71+
cp -r "$src/." "$dst_shared/CSSUniversalMenuAPI/"
72+
73+
# package UniversalMenu.Compat.MenuManagerApi
74+
mkdir -p "$dst_plugins/UniversalMenu.Compat.MenuManagerApi"
75+
src="./src/UniversalMenu.Compat.MenuManagerApi/bin/Release/net8.0/publish"
76+
cp -r "$src/." "$dst_shared/UniversalMenu.Compat.MenuManagerApi/"
77+
78+
# zip CSSUniversalMenuAPI.zip
6979
pushd "$dst"
7080
7z a ../CSSUniversalMenuAPI.zip ./
7181
popd
72-
rm -rf "$dst"
82+
rm -rf "$dst
83+
84+
# build UniversalMenu.Driver.ScreenManagerAPI.zip
85+
dst="./artifacts/UniversalMenu.Driver.ScreenManagerAPI"
86+
dst_shared="$dst/addons/counterstrikesharp/shared"
87+
dst_plugins="$dst/addons/counterstrikesharp/plugins"
88+
89+
# package UniversalMenu.Driver.ScreenManagerAPI
90+
mkdir -p "$dst_plugins/UniversalMenu.Driver.ScreenManagerAPI"
91+
src="./src/UniversalMenu.Driver.ScreenManagerAPI/bin/Release/net8.0/publish"
92+
cp -r "$src/." "$dst_shared/UniversalMenu.Driver.ScreenManagerAPI/"
93+
94+
# zip UniversalMenu.Driver.ScreenManagerAPI.zip
95+
pushd "$dst"
96+
7z a ../UniversalMenu.Driver.ScreenManagerAPI.zip ./
97+
popd
98+
rm -rf "$dst
99+
100+
73101
74102
- name: Upload Artifacts
75103
uses: actions/upload-artifact@v4

.github/workflows/continuous-integration.yml

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ jobs:
4646
run: dotnet restore
4747

4848
- name: Build
49-
run: dotnet build --configuration Release --no-restore
49+
run: dotnet publish --configuration Release --no-restore
5050

5151
- name: Test
5252
run: dotnet test --configuration Debug --logger GitHubActions -p:CollectCoverage=true
@@ -56,18 +56,46 @@ jobs:
5656
run: dotnet pack -p:PackageOutputPath="$(pwd)/artifacts" --configuration Release
5757
--no-restore
5858

59-
- name: Build CSS Package
59+
- name: Build CSS Packages
6060
run: |
61-
src="./src/CSSUniversalMenuAPI/bin/Release/net8.0"
61+
# build CSSUniversalMenuAPI.zip
6262
dst="./artifacts/CSSUniversalMenuAPI"
63-
dst_shared="$dst/addons/counterstrikesharp/shared/CSSUniversalMenuAPI"
64-
mkdir -p "$dst_shared"
65-
cp "$src/CSSUniversalMenuAPI.dll" "$dst_shared/"
66-
cp "$src/CSSUniversalMenuAPI.deps.json" "$dst_shared/"
63+
dst_shared="$dst/addons/counterstrikesharp/shared"
64+
dst_plugins="$dst/addons/counterstrikesharp/plugins"
65+
66+
# package CSSUniversalMenuAPI
67+
mkdir -p "$dst_shared/CSSUniversalMenuAPI"
68+
src="./src/CSSUniversalMenuAPI/bin/Release/net8.0/publish"
69+
cp -r "$src/." "$dst_shared/CSSUniversalMenuAPI/"
70+
71+
# package UniversalMenu.Compat.MenuManagerApi
72+
mkdir -p "$dst_plugins/UniversalMenu.Compat.MenuManagerApi"
73+
src="./src/UniversalMenu.Compat.MenuManagerApi/bin/Release/net8.0/publish"
74+
cp -r "$src/." "$dst_shared/UniversalMenu.Compat.MenuManagerApi/"
75+
76+
# zip CSSUniversalMenuAPI.zip
6777
pushd "$dst"
6878
7z a ../CSSUniversalMenuAPI.zip ./
6979
popd
70-
rm -rf "$dst"
80+
rm -rf "$dst
81+
82+
# build UniversalMenu.Driver.ScreenManagerAPI.zip
83+
dst="./artifacts/UniversalMenu.Driver.ScreenManagerAPI"
84+
dst_shared="$dst/addons/counterstrikesharp/shared"
85+
dst_plugins="$dst/addons/counterstrikesharp/plugins"
86+
87+
# package UniversalMenu.Driver.ScreenManagerAPI
88+
mkdir -p "$dst_plugins/UniversalMenu.Driver.ScreenManagerAPI"
89+
src="./src/UniversalMenu.Driver.ScreenManagerAPI/bin/Release/net8.0/publish"
90+
cp -r "$src/." "$dst_shared/UniversalMenu.Driver.ScreenManagerAPI/"
91+
92+
# zip UniversalMenu.Driver.ScreenManagerAPI.zip
93+
pushd "$dst"
94+
7z a ../UniversalMenu.Driver.ScreenManagerAPI.zip ./
95+
popd
96+
rm -rf "$dst
97+
98+
7199
72100
- name: Upload Artifacts
73101
uses: actions/upload-artifact@v4

.github/workflows/deploy-release.yml

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ jobs:
4848
run: dotnet restore
4949

5050
- name: Build
51-
run: dotnet build --configuration Release --no-restore
51+
run: dotnet publish --configuration Release --no-restore
5252

5353
- name: Test
5454
run: dotnet test --configuration Debug --logger GitHubActions -p:CollectCoverage=true
@@ -58,18 +58,46 @@ jobs:
5858
run: dotnet pack -p:PackageOutputPath="$(pwd)/artifacts" --configuration Release
5959
--no-restore
6060

61-
- name: Build CSS Package
61+
- name: Build CSS Packages
6262
run: |
63-
src="./src/CSSUniversalMenuAPI/bin/Release/net8.0"
63+
# build CSSUniversalMenuAPI.zip
6464
dst="./artifacts/CSSUniversalMenuAPI"
65-
dst_shared="$dst/addons/counterstrikesharp/shared/CSSUniversalMenuAPI"
66-
mkdir -p "$dst_shared"
67-
cp "$src/CSSUniversalMenuAPI.dll" "$dst_shared/"
68-
cp "$src/CSSUniversalMenuAPI.deps.json" "$dst_shared/"
65+
dst_shared="$dst/addons/counterstrikesharp/shared"
66+
dst_plugins="$dst/addons/counterstrikesharp/plugins"
67+
68+
# package CSSUniversalMenuAPI
69+
mkdir -p "$dst_shared/CSSUniversalMenuAPI"
70+
src="./src/CSSUniversalMenuAPI/bin/Release/net8.0/publish"
71+
cp -r "$src/." "$dst_shared/CSSUniversalMenuAPI/"
72+
73+
# package UniversalMenu.Compat.MenuManagerApi
74+
mkdir -p "$dst_plugins/UniversalMenu.Compat.MenuManagerApi"
75+
src="./src/UniversalMenu.Compat.MenuManagerApi/bin/Release/net8.0/publish"
76+
cp -r "$src/." "$dst_shared/UniversalMenu.Compat.MenuManagerApi/"
77+
78+
# zip CSSUniversalMenuAPI.zip
6979
pushd "$dst"
7080
7z a ../CSSUniversalMenuAPI.zip ./
7181
popd
72-
rm -rf "$dst"
82+
rm -rf "$dst
83+
84+
# build UniversalMenu.Driver.ScreenManagerAPI.zip
85+
dst="./artifacts/UniversalMenu.Driver.ScreenManagerAPI"
86+
dst_shared="$dst/addons/counterstrikesharp/shared"
87+
dst_plugins="$dst/addons/counterstrikesharp/plugins"
88+
89+
# package UniversalMenu.Driver.ScreenManagerAPI
90+
mkdir -p "$dst_plugins/UniversalMenu.Driver.ScreenManagerAPI"
91+
src="./src/UniversalMenu.Driver.ScreenManagerAPI/bin/Release/net8.0/publish"
92+
cp -r "$src/." "$dst_shared/UniversalMenu.Driver.ScreenManagerAPI/"
93+
94+
# zip UniversalMenu.Driver.ScreenManagerAPI.zip
95+
pushd "$dst"
96+
7z a ../UniversalMenu.Driver.ScreenManagerAPI.zip ./
97+
popd
98+
rm -rf "$dst
99+
100+
73101
74102
- name: Upload Artifacts
75103
uses: actions/upload-artifact@v4

CSSUniversalMenuAPI.sln

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
44
VisualStudioVersion = 17.0.31903.59
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnitTests", "tests\UnitTests\UnitTests.csproj", "{A605AB7A-AD18-4C24-B086-9678F071FE5B}"
7+
ProjectSection(ProjectDependencies) = postProject
8+
{2BB5D58A-F186-4B9C-8FE6-DDA31CC791C7} = {2BB5D58A-F186-4B9C-8FE6-DDA31CC791C7}
9+
EndProjectSection
710
EndProject
811
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{12ADA386-60DF-4855-A3AD-D76CB1C3770F}"
912
ProjectSection(SolutionItems) = preProject
@@ -20,6 +23,20 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSSUniversalMenuAPI", "src\
2023
EndProject
2124
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProofOfConcepts", "tests\ProofOfConcepts\ProofOfConcepts.csproj", "{6BDB6BFA-284D-4C47-9095-4BBE83DB6B8A}"
2225
EndProject
26+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalMenu.Compat.MenuManagerApi", "src\UniversalMenu.Compat.MenuManagerApi\UniversalMenu.Compat.MenuManagerApi.csproj", "{44AAF649-62D6-1CD8-3F16-028F4D262BE6}"
27+
EndProject
28+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalMenu.Driver.ScreenMenuAPI", "src\UniversalMenu.Driver.ScreenMenuAPI\UniversalMenu.Driver.ScreenMenuAPI.csproj", "{E2FD83DD-D7EA-97CA-B6F4-DE2F92E5A00F}"
29+
EndProject
30+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GitHub Actions", "GitHub Actions", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}"
31+
ProjectSection(SolutionItems) = preProject
32+
.github\continuous-delivery.yml = .github\continuous-delivery.yml
33+
.github\continuous-integration.yml = .github\continuous-integration.yml
34+
.github\dependabot.yml = .github\dependabot.yml
35+
.github\deploy-release.yml = .github\deploy-release.yml
36+
.github\regenerate-actions.sh = .github\regenerate-actions.sh
37+
.github\shared.yml = .github\shared.yml
38+
EndProjectSection
39+
EndProject
2340
Global
2441
GlobalSection(SolutionConfigurationPlatforms) = preSolution
2542
Debug|Any CPU = Debug|Any CPU
@@ -38,10 +55,21 @@ Global
3855
{6BDB6BFA-284D-4C47-9095-4BBE83DB6B8A}.Debug|Any CPU.Build.0 = Debug|Any CPU
3956
{6BDB6BFA-284D-4C47-9095-4BBE83DB6B8A}.Release|Any CPU.ActiveCfg = Release|Any CPU
4057
{6BDB6BFA-284D-4C47-9095-4BBE83DB6B8A}.Release|Any CPU.Build.0 = Release|Any CPU
58+
{44AAF649-62D6-1CD8-3F16-028F4D262BE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
59+
{44AAF649-62D6-1CD8-3F16-028F4D262BE6}.Debug|Any CPU.Build.0 = Debug|Any CPU
60+
{44AAF649-62D6-1CD8-3F16-028F4D262BE6}.Release|Any CPU.ActiveCfg = Release|Any CPU
61+
{44AAF649-62D6-1CD8-3F16-028F4D262BE6}.Release|Any CPU.Build.0 = Release|Any CPU
62+
{E2FD83DD-D7EA-97CA-B6F4-DE2F92E5A00F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
63+
{E2FD83DD-D7EA-97CA-B6F4-DE2F92E5A00F}.Debug|Any CPU.Build.0 = Debug|Any CPU
64+
{E2FD83DD-D7EA-97CA-B6F4-DE2F92E5A00F}.Release|Any CPU.ActiveCfg = Release|Any CPU
65+
{E2FD83DD-D7EA-97CA-B6F4-DE2F92E5A00F}.Release|Any CPU.Build.0 = Release|Any CPU
4166
EndGlobalSection
4267
GlobalSection(SolutionProperties) = preSolution
4368
HideSolutionNode = FALSE
4469
EndGlobalSection
70+
GlobalSection(NestedProjects) = preSolution
71+
{02EA681E-C7D8-13C7-8484-4AC65E1B71E8} = {12ADA386-60DF-4855-A3AD-D76CB1C3770F}
72+
EndGlobalSection
4573
GlobalSection(ExtensibilityGlobals) = postSolution
4674
SolutionGuid = {C275584F-B754-4C9D-9361-03D343B72607}
4775
EndGlobalSection

Directory.Build.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
<!-- Meta info -->
3232
<Authors>Ashleigh Adams</Authors>
3333
<RootNamespace>UniversalMenuAPI</RootNamespace>
34+
<IsPackable Condition="'$(IsPackable)' == ''">false</IsPackable>
3435
<!--<PackageIcon>images/packageicon.png</PackageIcon>-->
3536
</PropertyGroup>
3637
<!--

README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,19 @@ var menu = API.CreateMenu(player);
9797
menu.AddItem("Test", (menuItem) => Console.WriteLine("Test"));
9898
menu.Display();
9999
```
100+
101+
```mermaid
102+
classDiagram
103+
MenuManagerImpl <-- MenuManagerApi
104+
MenuManagerApi <-- UniversalMenu.Driver.MenuMangerApi
105+
UniversalMenu.Driver.MenuMangerApi <-- CSSUniversalMenuAPI
106+
ScreenMenuImpl <-- ScreenMenuAPI
107+
ScreenMenuAPI <-- UniversalMenu.Driver.ScreenMenuAPI
108+
UniversalMenu.Driver.ScreenMenuAPI <-- CSSUniversalMenuAPI
109+
NativeMenuImpl <-- CSSUniversalMenuAPI
110+
CSSUniversalMenuAPI <-- UniversalMenu.Compat.MenuMangerApi
111+
UniversalMenu.Compat.MenuMangerApi <-- PluginUsingSomeMenuManager
112+
CSSUniversalMenuAPI <-- UniversalMenu.Compat.ScreenMenuAPI
113+
UniversalMenu.Compat.ScreenMenuAPI <-- PluginUsingSomeScreenMenu
114+
CSSUniversalMenuAPI <-- PluginUsingUniversalAPI
115+
```

package.sh

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#!/bin/bash
2+
set -euf -o pipefail
3+
4+
# build CSSUniversalMenuAPI.zip
5+
dst="./artifacts/CSSUniversalMenuAPI"
6+
dst_shared="$dst/addons/counterstrikesharp/shared"
7+
dst_plugins="$dst/addons/counterstrikesharp/plugins"
8+
9+
# package CSSUniversalMenuAPI
10+
mkdir -p "$dst_shared/CSSUniversalMenuAPI"
11+
src="./src/CSSUniversalMenuAPI/bin/Release/net8.0/publish"
12+
cp -r "$src/." "$dst_shared/CSSUniversalMenuAPI/"
13+
14+
# package UniversalMenu.Compat.MenuManagerApi
15+
mkdir -p "$dst_plugins/UniversalMenu.Compat.MenuManagerApi"
16+
src="./src/UniversalMenu.Compat.MenuManagerApi/bin/Release/net8.0/publish"
17+
cp -r "$src/." "$dst_plugins/UniversalMenu.Compat.MenuManagerApi/"
18+
19+
# zip CSSUniversalMenuAPI.zip
20+
pushd "$dst"
21+
7z a ../CSSUniversalMenuAPI.zip ./
22+
popd
23+
rm -rf "$dst"
24+
25+
# build UniversalMenu.Driver.ScreenMenuAPI.zip
26+
dst="./artifacts/UniversalMenu.Driver.ScreenMenuAPI"
27+
dst_shared="$dst/addons/counterstrikesharp/shared"
28+
dst_plugins="$dst/addons/counterstrikesharp/plugins"
29+
30+
# package UniversalMenu.Driver.ScreenMenuAPI
31+
mkdir -p "$dst_plugins/UniversalMenu.Driver.ScreenMenuAPI"
32+
src="./src/UniversalMenu.Driver.ScreenMenuAPI/bin/Release/net8.0/publish"
33+
cp -r "$src/." "$dst_plugins/UniversalMenu.Driver.ScreenMenuAPI/"
34+
35+
# zip UniversalMenu.Driver.ScreenMenuAPI.zip
36+
pushd "$dst"
37+
7z a ../UniversalMenu.Driver.ScreenMenuAPI.zip ./
38+
popd
39+
rm -rf "$dst"
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<Nullable>enable</Nullable>
5+
<IsPackable>true</IsPackable>
56
</PropertyGroup>
67

78
<ItemGroup>
8-
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.316" />
9+
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.316" ExcludeAssets="runtime" />
910
</ItemGroup>
1011

1112
</Project>

src/CSSUniversalMenuAPI/IMenuAPI.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Threading;
33

44
using CounterStrikeSharp.API.Core;
5+
using CounterStrikeSharp.API.Core.Capabilities;
56

67
namespace CSSUniversalMenuAPI;
78

@@ -37,4 +38,9 @@ public interface IMenuAPI
3738
/// <param name="player">The player of which to query.</param>
3839
/// <returns>Whether the player has an active menu on their screen.</returns>
3940
bool IsMenuOpen(CCSPlayerController player);
41+
42+
/// <summary>
43+
/// Standard helper to get get or provide this implementation
44+
/// </summary>
45+
static readonly PluginCapability<IMenuAPI> PluginCapability = new("universalmenuapi");
4046
}

0 commit comments

Comments
 (0)