Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
640 commits
Select commit Hold shift + click to select a range
7cba448
More xenoborg names (#42984)
Samuka-C Feb 21, 2026
f25dcc1
Automatic changelog update
PJBot Feb 21, 2026
f661edf
Make prescription glasses actually work (#42990)
lyxcaster Feb 21, 2026
e517a04
Automatic changelog update
PJBot Feb 22, 2026
274d4b6
Update Credits (#42992)
github-actions[bot] Feb 22, 2026
67cb6de
Improved camera static shader randomness (#42968)
eoineoineoin Feb 22, 2026
0807fe3
Move fuckrules CL to Admin (#42996)
ScarKy0 Feb 22, 2026
39f8655
Predicted Networked Metabolism (#42798)
Princess-Cheeseballs Feb 22, 2026
f7ec60c
Minor Relic Fixes (#42921)
Vortebo Feb 22, 2026
75d52f1
Automatic changelog update
PJBot Feb 22, 2026
d9c4cf1
Add unlockable reporter cosmetics (#41079)
SlamBamActionman Feb 22, 2026
f1c1a97
Automatic changelog update
PJBot Feb 22, 2026
4206315
Oasis: Label every air alarm (#42911)
F1restar4 Feb 22, 2026
ae26d20
Remake the "Vegan Meatball" salvage wreck (#42994)
Blackern5000 Feb 22, 2026
bb28458
Automatic changelog update
PJBot Feb 22, 2026
cf74345
Fixed Packed by adding extra APC to comms room (#42953)
11BelowStudio Feb 22, 2026
a714898
Automatic changelog update
PJBot Feb 22, 2026
47923be
EMP implant uplink texture (Addresses #42008) (#42998)
ketufaispikinut Feb 23, 2026
284693e
Automatic changelog update
PJBot Feb 23, 2026
b584549
serpentcrest atmos/sec tweaks (#42905)
TytosB Feb 23, 2026
e9f8042
Automatic changelog update
PJBot Feb 23, 2026
04b4b7d
Non-obsoletion warnings as errors in Release. (#42983)
moonheart08 Feb 23, 2026
be4aaa0
Lizard rehappy alternative (#42915)
DaturoDewitt Feb 23, 2026
e2cc5de
Automatic changelog update
PJBot Feb 23, 2026
63457d0
Add TriggerOnRot Component (#42667)
blueDev2 Feb 24, 2026
0a55e5f
Largely Revert Unique Corgi Hardsuit and Equipment Sprites (#42696)
TiniestShark Feb 25, 2026
462f4d0
Automatic changelog update
PJBot Feb 25, 2026
01c8cd8
Revert "Remove dwarves" (#43027)
SlamBamActionman Feb 25, 2026
65ff6c4
Fix repeated Localization warnings when viewing the Power Monitoring …
korczoczek Feb 25, 2026
7e5ddfd
Give borgs default prying (#41812)
ScarKy0 Feb 25, 2026
2a274a0
Automatic changelog update
PJBot Feb 25, 2026
af71eec
Make HasMind not always false for client. (#43033)
Velken Feb 25, 2026
e774e11
Add transfer entity to mind events. (#43020)
ScarKy0 Feb 26, 2026
f981f8a
Partially revert "Remove bad accents" (#43030)
SlamBamActionman Feb 26, 2026
9ae88c4
Automatic changelog update
PJBot Feb 26, 2026
8315eaa
Revert "Cleanup Antag Selection Logic a Lot" (#43041)
Errant-4 Feb 26, 2026
ef21b12
Fix hypodart uplink description (#43035)
OrbitSystem07 Feb 26, 2026
4d5dab1
Automatic changelog update
PJBot Feb 26, 2026
08db33b
Stop AI knocking on shutters, blast doors (#42972)
eoineoineoin Feb 26, 2026
497888f
Add building animations to techfabs (#42962)
DinnerCalzone Feb 26, 2026
5a923b8
Automatic changelog update
PJBot Feb 26, 2026
7bc062e
StrippableComponent timespan calculation fix (#43022)
Redrover1760 Feb 26, 2026
e16fc10
Fix Holosign Placement (#42909)
TriviaSolari Feb 26, 2026
9cdc009
Automatic changelog update
PJBot Feb 27, 2026
e361944
Make DamageSpecifier serializable (#43049)
sowelipililimute Feb 27, 2026
d21e95e
Automatic changelog update
PJBot Feb 27, 2026
f9f4e09
Fixed redundant bar sign windows (#42960)
pcaessayrs Feb 27, 2026
e295d0a
Automatic changelog update
PJBot Feb 27, 2026
76741dc
Make DamageableComponent manually networked again (#43054)
sowelipililimute Feb 27, 2026
a3c6d0d
Make sure vox passively regenerate at the same pace as everyone else …
sowelipililimute Feb 27, 2026
2484ec7
Dynamic feedback popup (#43021)
Samuka-C Feb 27, 2026
210fae0
Raise SolutionChangedEvent and SolutionContainerChangedEvent when han…
slarticodefast Feb 27, 2026
7f15e77
Xenoborg extractor (#42796)
Samuka-C Feb 28, 2026
7ba3f75
Automatic changelog update
PJBot Feb 28, 2026
adc6605
Adding serpentcrest to map pool + overhauling several rooms (#43061)
TytosB Feb 28, 2026
219f562
Automatic changelog update
PJBot Feb 28, 2026
c3d5754
Change Bad Chembottle Suffixes (#43064)
kontakt Feb 28, 2026
c4d6e5b
Reparent White Gilgamesh (#43065)
kontakt Feb 28, 2026
ed0b178
Throwing Croissant Incorrect Inhand Removed (#43066)
kontakt Feb 28, 2026
34d162b
Automatic changelog update
PJBot Feb 28, 2026
b5b21c0
Fix Makeshift Juicer Crafting (#43075)
ScarKy0 Feb 28, 2026
1751e41
Automatic changelog update
PJBot Feb 28, 2026
3c75e82
Add xenoborg gun sprites (#43013)
beck-thompson Feb 28, 2026
6c33441
Automatic changelog update
PJBot Feb 28, 2026
6828aba
Remove unused noise texture (#42970)
eoineoineoin Feb 28, 2026
99d275f
[Fix] Door remote fixes (#43063)
Velken Feb 28, 2026
7970c4a
Automatic changelog update
PJBot Feb 28, 2026
b3501bc
Revenants cannot be stuck with plastic explosives (#42889)
IProduceWidgets Feb 28, 2026
5d967bf
Automatic changelog update
PJBot Feb 28, 2026
28ebad6
Removed rollerskates & clown-outfit cargo bounties; reduce pancakes n…
Hitlinemoss Feb 28, 2026
eab6b9c
Automatic changelog update
PJBot Feb 28, 2026
2e0875a
Fix damagable mispredicts (#43080)
slarticodefast Feb 28, 2026
15e4b51
Automatic changelog update
PJBot Mar 1, 2026
b32e24b
Update Credits (#43084)
github-actions[bot] Mar 1, 2026
2011b52
use proxy methods in EntitySystems (#43083)
slarticodefast Mar 1, 2026
5add083
fix topicals (#43087)
slarticodefast Mar 1, 2026
855979f
Automatic changelog update
PJBot Mar 1, 2026
1008bc5
APC building doAfter fix (#43089)
AffleWaffle Mar 1, 2026
d6eb03c
Automatic changelog update
PJBot Mar 1, 2026
9c28c19
[STAGING] Innate prying tooltip (#43081)
ScarKy0 Mar 1, 2026
59e7886
Fixed Mining Hardsuit Helmet Name + Added Internals to Crates (#43072)
SirWarock Mar 1, 2026
5136e98
Automatic changelog update
PJBot Mar 1, 2026
38a31af
Fix "Unknown messageId" warnings from ID cards (#42886)
Tayrtahn Mar 1, 2026
df8e151
yaml format nitpick (#43074)
Pharaz4 Mar 1, 2026
8770701
Fix AtmosDebugOverlay being always active (#43073)
B-Kirill Mar 1, 2026
2de2d76
Only one puddle sparkle please (#43086)
jessicamaybe Mar 1, 2026
19c8221
Add borg construction interaction test (#42359)
Tayrtahn Mar 1, 2026
07f24e7
Fix door remotes 2 (#43094)
Velken Mar 1, 2026
0673373
Automatic changelog update
PJBot Mar 1, 2026
1fee95f
Stable merge to master (#43095)
SlamBamActionman Mar 2, 2026
18149db
Support for melee weapon user overrides (#39633)
Pok27 Mar 2, 2026
d9d0cd9
add nested entity effects+conditions (#42341)
deltanedas Mar 3, 2026
8cb0664
Inventory + Storage toolshed query commands (#40813)
UpAndLeaves Mar 3, 2026
11fd67d
Automatic changelog update
PJBot Mar 3, 2026
b098b82
Hyper autolathe now requires the same ammount of manipulators as auto…
ProPeperos Mar 4, 2026
be19f0b
Automatic changelog update
PJBot Mar 4, 2026
eea773f
Remove salv stuff from mothership (#43007)
Samuka-C Mar 4, 2026
506f9a3
Automatic changelog update
PJBot Mar 4, 2026
eb18317
HTNComponent from SharedNPCSystem (#42750)
Shegare Mar 4, 2026
1918f8e
Small tippy fix + msg toolshed additions (#43082)
neomoth Mar 6, 2026
0611a4f
Automatic changelog update
PJBot Mar 6, 2026
1a975eb
merge remote wizden/stable
DIMMoon1 Mar 6, 2026
6449814
first upstream fix
DIMMoon1 Mar 6, 2026
be708eb
merge origin/master
DIMMoon1 Mar 6, 2026
01ebb40
content fix
DIMMoon1 Mar 7, 2026
cfe2e06
Brings Estoc DMR accuracy to standard rifle accuracy, removes movemen…
august-sun Mar 7, 2026
c2681cd
Automatic changelog update
PJBot Mar 7, 2026
b2b547b
Initial decoupling pass on Damageable (#43103)
sowelipililimute Mar 7, 2026
90f6a72
Automatic changelog update
PJBot Mar 7, 2026
a42284a
meow
DIMMoon1 Mar 7, 2026
ae6b681
PinpointerSystem&Component cleanup (#42463)
alexalexmax Mar 7, 2026
312ff05
error RA0026 forever
DIMMoon1 Mar 7, 2026
49644d5
merge origin/master
DIMMoon1 Mar 7, 2026
755cdea
Serpentcrest antivirus update (#43102)
TytosB Mar 7, 2026
f98be0d
Automatic changelog update
PJBot Mar 7, 2026
e00c8bd
Vulpkanin Gauze (#43096)
Minemoder5000 Mar 7, 2026
9148b0e
meow2
DIMMoon1 Mar 7, 2026
12f25e2
Automatic changelog update
PJBot Mar 7, 2026
15f9528
Fixing issue 42759, air grenades cannot be re-triggered. (#42866)
11BelowStudio Mar 8, 2026
e630dcd
Update Credits (#43140)
github-actions[bot] Mar 8, 2026
05843d0
Mix xenoborg_scream.ogg to mono (#43132)
Tayrtahn Mar 8, 2026
1821d1e
Automatic changelog update
PJBot Mar 8, 2026
dd051d0
Nukie guidebook improvements (#43131)
CoconutThunder Mar 8, 2026
601e572
Make map tests more fine-grained. (#42977)
moonheart08 Mar 8, 2026
1b50111
Weather entities (#41427)
TheShuEd Mar 8, 2026
24382dd
Automatic changelog update
PJBot Mar 8, 2026
4cdef6a
Patch for engine ComponentFilter (#43168)
moonheart08 Mar 10, 2026
8e0a271
Refactor guide entry tests. (#43159)
moonheart08 Mar 10, 2026
b01d2ec
Refactor explosion prototype tests. (#43158)
moonheart08 Mar 10, 2026
5eba73c
Refactor Device Linking tests. (#43157)
moonheart08 Mar 10, 2026
be8bd66
Refactor construction tests (#43155)
moonheart08 Mar 10, 2026
87a3787
Add exception tolerance to SharedDoAfterSystem. (#43088)
moonheart08 Mar 10, 2026
b07fc5f
Reactions test cleanup. (#42979)
moonheart08 Mar 10, 2026
229ce3e
Refactor MobThresholds and Stamina tests. (#43156)
moonheart08 Mar 10, 2026
c83077f
Update `NodeHelpers` and `Node.GetReachableNodes` to use `Entity<Tran…
Tayrtahn Mar 10, 2026
700e901
Add a basic API to `JukeboxSystem` (#42896)
Tayrtahn Mar 11, 2026
5f030ee
Atmos YAML-defined gas flammability, flammability API (#43165)
ArtisticRoomba Mar 11, 2026
f3bb1be
Vent Hordes (#43047)
ScarKy0 Mar 11, 2026
d547adc
Automatic changelog update
PJBot Mar 11, 2026
67b0e89
Add DB Config to development.toml (#43036)
Geekyhobo Mar 12, 2026
012ffe5
Add banning to server api (#43205)
Simyon264 Mar 12, 2026
38cd873
Revert "Support for melee weapon user overrides" (#43106)
slarticodefast Mar 12, 2026
03f1963
Update RT to 273.0.0 (#43130)
Tayrtahn Mar 13, 2026
d902843
Wrapped parcels can go into mail carts (#43226)
Centronias Mar 13, 2026
30c28b5
Make test runnable on windows in debug config again (#43227)
Centronias Mar 13, 2026
03d5c4c
Removes a test that handles engine behavior in content. (#43228)
moonheart08 Mar 13, 2026
d6f1e97
Automatic changelog update
PJBot Mar 13, 2026
a915930
[Fix] Silicon Ion Law Scramble Text (#43229)
Velken Mar 13, 2026
dcbe5e0
Automatic changelog update
PJBot Mar 13, 2026
a1d7406
Move a metric fuckton of AtmosphereSystem to Shared. (#42989)
Princess-Cheeseballs Mar 14, 2026
58cab10
fix bottle reagent localization (#43208)
TaserTheFox Mar 14, 2026
e105237
Automatic changelog update
PJBot Mar 14, 2026
2cbc857
Fix missing word from emitter alerts (#43225)
CroilBird Mar 14, 2026
e49d36a
Make EntityTableSpawner spawn relative to grid instead of map (#43234)
SnappingOpossum Mar 14, 2026
fe8f5f2
Add a holy light effect to bible healing (#43189)
themias Mar 14, 2026
23aa4c9
Automatic changelog update
PJBot Mar 14, 2026
6e33382
Automatic changelog update
PJBot Mar 14, 2026
93dccc3
Content-side IRobustRandom cleanup. (#43231)
moonheart08 Mar 14, 2026
fbed18b
Cleanup warnings: CS0168, CS0414 (#43198)
B-Kirill Mar 14, 2026
4ab475a
On Exo, fixed power for AI North and South external cameras (#43143)
Suenrg Mar 14, 2026
4e6bf98
Automatic changelog update
PJBot Mar 15, 2026
193c0dc
CachedResources for GasTileDangerousTemperatureOverlay (#43032)
insoPL Mar 15, 2026
05b6ec1
Update Credits (#43241)
github-actions[bot] Mar 15, 2026
d5ed6aa
Refactor: Gas tile overlay split (#42881)
insoPL Mar 15, 2026
3caea16
Move ID card name/title length limit to server (#43237)
Tayrtahn Mar 15, 2026
60ce454
Update ruined_prison_ship.yml (#43242)
DiegoLob0 Mar 15, 2026
57d8210
Revert "Remove salv stuff from mothership (#43007)"
ScarKy0 Mar 15, 2026
f796cef
remove changelog
ScarKy0 Mar 15, 2026
38f7800
Single item cargo orders are delivered in Parcel Wrap instead of crat…
Centronias Mar 15, 2026
c99d94c
Automatic changelog update
PJBot Mar 15, 2026
c51a7ea
Refactor Ion Law string generation (#42629)
Velken Mar 15, 2026
116e09e
Fix bug blocking character saves for species without hair. (#43170)
VerinSenpai Mar 15, 2026
651b70f
Automatic changelog update
PJBot Mar 15, 2026
bd96c0e
Revert "Remove salv stuff from mothership (#43007)" (#43249)
ScarKy0 Mar 15, 2026
2736c45
Predict reagent grinder (#42815)
slarticodefast Mar 15, 2026
bc0ce07
Automatic changelog update
PJBot Mar 15, 2026
5c94e14
Fix reagent grinders on dev map (#43253)
slarticodefast Mar 15, 2026
4554e3a
Fix changelog for #43049 (#43248)
SlamBamActionman Mar 15, 2026
31bf1e7
Fixed the two-handed activated sound bug. (#38070)
RedBookcase Mar 16, 2026
53e4139
Removed MovementBodyPartComponent (#43257)
Tuchila-Adi-Bogdan Mar 16, 2026
f89fdaa
Revert "Xenoborg extractor (#42796)"
ScarKy0 Mar 16, 2026
e9d7362
revert CL
ScarKy0 Mar 16, 2026
b335e4e
Revert "Xenoborg extractor (#42796)" (#43262)
SlamBamActionman Mar 17, 2026
4495128
Fix floating point tilefire nonsense (#43263)
ArtisticRoomba Mar 17, 2026
6d9d3ef
Staging Stable Release (#43265)
Princess-Cheeseballs Mar 17, 2026
9b0067e
Staging To Master (#43264)
Princess-Cheeseballs Mar 17, 2026
ec8f1d7
Add test result archiving to our test actions + Test fixes (#43175)
moonheart08 Mar 17, 2026
33beb79
Update RT to 274.0.0 (#43261)
Tayrtahn Mar 17, 2026
5645b94
Make the chem guidebook show when chemicals adjust body temperature (…
Eternally-Confused Mar 17, 2026
f63d2fd
Automatic changelog update
PJBot Mar 17, 2026
4ae82ec
Tech disk resprite and pricing changes (#37719)
murolem Mar 17, 2026
53ca3fe
Automatic changelog update
PJBot Mar 17, 2026
dd6254f
Fix Airtight Explosion Cache (#43276)
Princess-Cheeseballs Mar 18, 2026
9087a2e
Stable -> Master (#43284)
Princess-Cheeseballs Mar 18, 2026
cedae35
Fix thermomachine guidebook typo (#43285)
Buunie099 Mar 18, 2026
ee3926f
Automatic changelog update
PJBot Mar 18, 2026
b03a72d
DeleteComponentCommand minor cleanup/rename. (#43289)
VerinSenpai Mar 18, 2026
087edd2
Cleaning Blood Footstep Sounds (#43266)
Prole0 Mar 18, 2026
2008be2
Update Packed's TEG Burn chamber (#43278)
rwrv1 Mar 19, 2026
6a67512
Automatic changelog update
PJBot Mar 19, 2026
b251848
Move salvage RandomSpawners to EntityTableSpawners (#43233)
SnappingOpossum Mar 19, 2026
f27d600
Borg charger hitbox changes (#43300)
ProPeperos Mar 20, 2026
545a4bc
Automatic changelog update
PJBot Mar 20, 2026
d14423f
Move some simple random spawners to entity table spawners (#43305)
SnappingOpossum Mar 21, 2026
7a9cd0b
Fix melee attack sprite rotations (#43307)
slarticodefast Mar 21, 2026
803fd2d
Automatic changelog update
PJBot Mar 21, 2026
7cf3728
Update Credits (#43313)
github-actions[bot] Mar 22, 2026
d86219c
removed PhysicalConstants.ZERO_CELCIUS (#43316)
MendaxxDev Mar 22, 2026
a89a63a
merge remote wizden/stable
DIMMoon1 Mar 22, 2026
d795bad
merge origin/master
DIMMoon1 Mar 22, 2026
226deda
Fix welders running an additional time when no damage remains. (#43321)
VerinSenpai Mar 22, 2026
441f4c8
Automatic changelog update
PJBot Mar 22, 2026
9f97b14
first fix
DIMMoon1 Mar 22, 2026
d7c79c4
ipc super fix
DIMMoon1 Mar 23, 2026
fb87414
ipc fix 2
DIMMoon1 Mar 23, 2026
fff3990
merge remote wizden/master
DIMMoon1 Mar 23, 2026
77243d4
upstream fix
DIMMoon1 Mar 23, 2026
7faeefd
syntax update
DIMMoon1 Mar 23, 2026
4f485d8
Correct attribution for /Textures/Objects/mre.rsi (#43328)
VerinSenpai Mar 23, 2026
a46bd0f
tts repair
DIMMoon1 Mar 24, 2026
cc732f2
Flatpack opening uses collision of flatpacked entity (#41849)
mqole Mar 24, 2026
fcb74f6
Automatic changelog update
PJBot Mar 24, 2026
8235971
Move remaining random spawners to entity table spawners (#43324)
SnappingOpossum Mar 24, 2026
0d1c744
Improvments for Reach station (#43046)
ProPeperos Mar 24, 2026
1a2831d
Automatic changelog update
PJBot Mar 24, 2026
d743763
Update RT to 274.0.1 (#43337)
slarticodefast Mar 24, 2026
db74373
remove all use cases of TimerComponent (#43320)
slarticodefast Mar 25, 2026
35d97c6
trico no longer heals when mob is crit, and no longer heals rad (#43293)
Not-A-Chair Mar 25, 2026
c57e117
Automatic changelog update
PJBot Mar 25, 2026
744e298
Fixes ambuzol pills. (#43331)
ArcaneValiance Mar 25, 2026
343cc04
Automatic changelog update
PJBot Mar 25, 2026
7e386de
Fix `SharedCrayonSystem` being both `[Virtual]` and `abstract` (#43339)
Tayrtahn Mar 25, 2026
8ad1806
tts proto fix
DIMMoon1 Mar 26, 2026
f964592
tts proto fix try 2
DIMMoon1 Mar 26, 2026
3d67725
Painting and poster random spawners to entity table spawners (#43270)
SnappingOpossum Mar 26, 2026
dc9cd07
Призрачные запреты смотрителя (#3542)
Pok27 Mar 27, 2026
971490e
Update RT to 275.0.0 (#43357)
Tayrtahn Mar 27, 2026
120b2a0
Merge pull request #3497 from DIMMoon1/upstream02.1
DIMMoon1 Mar 28, 2026
6de7cf7
merge wizden/master
DIMMoon1 Mar 28, 2026
82d6e3d
Cat parts fix (#3544)
Svist666s Mar 28, 2026
df287ae
upstream proto fix
DIMMoon1 Mar 28, 2026
8e683a9
[Wiki] авто загрузка спрайтов (#3541)
Pok27 Mar 28, 2026
ca3cd05
map cleaning
DIMMoon1 Mar 28, 2026
0ecb263
Merge pull request #3545 from DIMMoon1/upst2-fix
DIMMoon1 Mar 28, 2026
8632844
cleaning proto(#3546)
Zekins3366 Mar 29, 2026
b100369
Глобальное реформатирование локализации №2 (#3543)
MetalSage Mar 29, 2026
1172dd6
[Locale] Xenoborgs and fix (#3522)
ElusiveTheDrake Mar 30, 2026
870c288
fix species proto(#3550)
Zekins3366 Apr 1, 2026
f074158
[Locale] Upstream (#3548)
ElusiveTheDrake Apr 2, 2026
6be6799
nuh uh
insvrg3ncy Apr 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
16 changes: 13 additions & 3 deletions .github/workflows/build-test-debug.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,24 @@ jobs:
- name: Сборка проекта
run: dotnet build --configuration DebugOpt --no-restore /m

- name: Запуск Content.Tests
run: dotnet test --no-build --configuration DebugOpt Content.Tests/Content.Tests.csproj -- NUnit.ConsoleOut=0
- name: Run Content.Tests
shell: pwsh
run: dotnet test --no-build --configuration DebugOpt Content.Tests/Content.Tests.csproj -- NUnit.ConsoleOut=0 NUnit.TestOutputXml="logs" NUnit.WorkDirectory="$(pwd)/test_results"

- name: Запуск Content.IntegrationTests
shell: pwsh
run: |
$env:DOTNET_gcServer=1
dotnet test --no-build --configuration DebugOpt Content.IntegrationTests/Content.IntegrationTests.csproj -- NUnit.ConsoleOut=0 NUnit.MapWarningTo=Failed
dotnet test --no-build --configuration DebugOpt Content.IntegrationTests/Content.IntegrationTests.csproj -- NUnit.ConsoleOut=0 NUnit.MapWarningTo=Failed NUnit.TestOutputXml="logs" NUnit.WorkDirectory="$(pwd)/test_results"

- name: Archive NUnit3 test results.
if: always()
uses: actions/upload-artifact@v4
with:
name: nunit3-results-${{ matrix.os }}
path: test_results/*
retention-days: 7
compression-level: 9
ci-success:
name: CI успешно
needs:
Expand Down
18 changes: 9 additions & 9 deletions .github/workflows/close-master-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,26 @@ name: Закрытие PR из ветки master
on:
pull_request_target:
types: [ opened, ready_for_review ]

jobs:
run:
name: Закрыть PR
runs-on: ubuntu-latest
if: ${{github.head_ref == 'master' || github.head_ref == 'main' || github.head_ref == 'develop'}}

steps:
if: ${{(github.head_ref == 'master' || github.head_ref == 'main' || github.head_ref == 'develop' || github.head_ref == 'stable' || github.head_ref == 'staging')
&& github.event.pull_request.head.repo.fork}}

steps:
- uses: superbrothers/close-pull-request@v3
with:
comment: "Благодарим вас за вклад в репозиторий Space Station 14. К сожалению, похоже, что вы отправили свой PR из master-ветки. Мы предлагаем вам следовать [нашей документации по использованию git](https://docs.spacestation14.com/en/general-development/setup/git-for-the-ss14-developer.html) \n\n Вы можете переместить текущую работу из master-ветки в другую ветку, выполнив команду `git branch <название_ветки>` и сбросив измененив в master-ветке."
comment: "Спасибо за ваш вклад! Похоже, вы создали запрос на удаление из основной ветки или другой основной ветки разработки. Это [то, чего вам следует избегать] (https://jmeridth.com/posts/do-not-issue-pull-requests-from-your-master-branch/), и, таким образом, этот запрос на удаление был автоматически закрыт. \n \n Мы рекомендуем вам следовать [нашему использованию git documentation](https://docs.spacestation14.com/en/general-development/setup/git-for-the-ss14-developer.html). \n \n Вы можете перенести свою текущую работу в другую ветку, выполнив [эти команды](https://ohshitgit.com/#accidental-commit-master). Затем вы можете повторно создать свой запрос на извлечение, используя новую ветку."

# If you prefer to just comment on the pr and not close it, uncomment the below and comment the above

# If you prefer to just comment on the pr and not close it, uncomment the bellow and comment the above

# - uses: actions/github-script@v7
# with:
# script: |
# github.rest.issues.createComment({
# issue_number: ${{ github.event.number }},
# owner: context.repo.owner,
# repo: context.repo.repo,
# body: "Thank you for contributing to the Space Station 14 repository. Unfortunately, it looks like you submitted your pull request from the master branch. We suggest you follow [our git usage documentation](https://docs.spacestation14.com/en/general-development/setup/git-for-the-ss14-developer.html) \n\n You can move your current work from the master branch to another branch by doing `git branch <branch_name` and resetting the master branch. \n\n This pr won't be automatically closed. However, a maintainer may close it for this reason."
# })
# body: "Thank you for your contribution! It appears you created a pull request from the master branch or another main development branch. This is [something you should avoid doing](https://jmeridth.com/posts/do-not-issue-pull-requests-from-your-master-branch/)\n\nYou can move your current work to another branch by following [these commands](https://ohshitgit.com/#accidental-commit-master). Then, you may recreate your pull request using the new branch. \n\n This pull request won't be automatically closed. However, a maintainer may close it for this reason."})
23 changes: 15 additions & 8 deletions .github/workflows/test-packaging.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,19 +62,26 @@ jobs:
git -c submodule.Secrets.update=checkout submodule update --init
# Corvax-Secrets-End

- name: Установка .NET
uses: actions/setup-dotnet@v4.1.0
with:
dotnet-version: 10.0.x
# ubuntu-latest has .NET 10
# - name: Setup .NET Core
# uses: actions/setup-dotnet@v4.1.0
# with:
# dotnet-version: 10.0.x

- name: Восстановить зависимости
run: dotnet restore

- name: Сборка Content.Packaging
run: dotnet build Content.Packaging --configuration Release --no-restore /m

- name: Упаковка сервера
run: dotnet run --project Content.Packaging server --platform win-x64 --platform win-arm64 --platform linux-x64 --platform linux-arm64 --platform osx-x64 --platform osx-arm64
- name: Package server
run: dotnet run --project Content.Packaging server --log-build --platform win-x64 --platform win-arm64 --platform linux-x64 --platform linux-arm64 --platform osx-x64 --platform osx-arm64

- name: Package client
run: dotnet run --project Content.Packaging client --log-build --no-wipe-release

- name: Упаковка клиента
run: dotnet run --project Content.Packaging client --no-wipe-release
- uses: actions/upload-artifact@v4
with:
name: binlogs
path: release/*.binlog
retention-days: 7
291 changes: 291 additions & 0 deletions .github/workflows/update-wiki-images.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,291 @@
name: Update Wiki Images

on:
workflow_dispatch:
push:
branches: [ master, jsondump ]
paths:
- '.github/workflows/update-wiki-images.yml'
- 'Resources/Prototypes/**'
- 'Resources/Textures/**'
- 'RobustToolbox/**'

jobs:
update-wiki-images:
name: Generate and Upload Entity Images
runs-on: ubuntu-latest

steps:
- name: Checkout Master
uses: actions/checkout@v4.2.2
with:
fetch-depth: 0

- name: Setup Submodule
run: |
git submodule update --init --recursive

- name: Pull Engine Updates
uses: space-wizards/submodule-dependency@v0.1.5

- name: Update Engine Submodules
run: |
cd RobustToolbox/
git submodule update --init --recursive

- name: Setup .NET Core
uses: actions/setup-dotnet@v4.1.0
with:
dotnet-version: 10.0.x

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.x'

- name: Install Linux graphics dependencies
run: |
sudo apt-get update
sudo apt-get install -y xvfb libgl1-mesa-dri libglu1-mesa mesa-utils libopenal1

- name: Install Dependencies
run: dotnet restore

- name: Build Project
run: dotnet build --configuration Release --no-restore /p:WarningsAsErrors=nullable /m

- name: Generate entity images
continue-on-error: true
shell: bash
env:
LIBGL_ALWAYS_SOFTWARE: "1"
MESA_GL_VERSION_OVERRIDE: "3.3"
MESA_GLSL_VERSION_OVERRIDE: "330"
SDL_AUDIODRIVER: "dummy"
run: |
set -euo pipefail
xvfb-run -a dotnet ./bin/Content.Client/Content.Client.dll --self-contained \
--cvar autogen.entity_screenshot.enabled=true \
--cvar audio.interface_volume=0 \
--cvar ambience.lobby_music_enabled=false \
--cvar audio.admin_sounds_enabled=false \
--cvar audio.bwoink_sound_enabled=false \
--cvar interface.click_sound='' \
--cvar interface.hover_sound=''

- name: Build animated PNGs
continue-on-error: true
shell: bash
run: |
set -euo pipefail

python -m pip install --disable-pip-version-check pillow

python <<'PY'
from pathlib import Path
import shutil
from PIL import Image

base = Path("./bin/Content.Client/user_data/Textures/Entities")
animated_root = base / "_animated"

if not animated_root.is_dir():
print(f"No animated frame directory found at {animated_root}")
raise SystemExit(0)

for entity_dir in sorted(path for path in animated_root.iterdir() if path.is_dir()):
metadata = entity_dir / "frames.txt"
if not metadata.is_file():
print(f"Skipping {entity_dir.name}: no frames.txt")
continue

frames = []
durations = []

with metadata.open("r", encoding="utf-8") as handle:
for raw_line in handle:
line = raw_line.strip()
if not line:
continue

filename, delay_ms = line.split("\t", 1)
frame_path = entity_dir / filename
if not frame_path.is_file():
raise FileNotFoundError(f"Missing frame {frame_path}")

frames.append(frame_path)
durations.append(max(1, int(delay_ms)))

if not frames:
print(f"Skipping {entity_dir.name}: no frames listed")
continue

output = base / f"{entity_dir.name}.png"

if len(frames) == 1:
shutil.copyfile(frames[0], output)
print(f"Copied single-frame animation to {output.name}")
continue

images = []
try:
with Image.open(frames[0]) as first_src:
canvas_size = first_src.convert("RGBA").size

for frame_path in frames:
with Image.open(frame_path) as src:
img = src.convert("RGBA")
if img.size == canvas_size:
images.append(img.copy())
else:
canvas = Image.new("RGBA", canvas_size, (0, 0, 0, 0))
canvas.paste(img, (0, 0))
images.append(canvas)

first, *rest = images
first.save(
output,
format="PNG",
save_all=True,
append_images=rest,
duration=durations,
loop=0,
disposal=1,
blend=0,
)
print(f"Built animated PNG {output.name} from {len(frames)} frames")
finally:
for image in images:
image.close()
PY

- name: Upload entity images to wiki
continue-on-error: true
shell: bash
run: |
set -euo pipefail

BASE="./bin/Content.Client/user_data/Textures/Entities"
API="${{ secrets.WIKI_ROOT_URL }}/api.php"
USER="${{ secrets.WIKI_BOT_USER }}"
PASS="${{ secrets.WIKI_BOT_PASS }}"
NAMESPACE="${{ secrets.WIKI_BOT_NAMESPACE }}"

API="$(printf "%s" "$API" | tr -d '\r\n' | sed 's/[[:space:]]*$//')"
USER="$(printf "%s" "$USER" | tr -d '\r\n')"
PASS="$(printf "%s" "$PASS" | tr -d '\r\n')"
NAMESPACE="$(printf "%s" "$NAMESPACE" | tr -d '\r\n')"

if [[ -n "$NAMESPACE" && "${NAMESPACE: -1}" != "-" ]]; then
NAMESPACE="${NAMESPACE}-"
fi

if [[ ! -d "$BASE" ]]; then
echo "Entity image directory not found: $BASE"
exit 1
fi

normalize_filename() {
awk 'BEGIN { print toupper(substr(ARGV[1],1,1)) substr(ARGV[1],2) }' "$1"
}

files=()
while IFS= read -r -d '' file; do
files+=("$file")
done < <(find "$BASE" -maxdepth 1 -type f -name '*.png' -print0 | sort -z)

if (( ${#files[@]} == 0 )); then
echo "No PNG files found in $BASE"
exit 1
fi

cookiejar="$(mktemp)"
trap 'rm -f "$cookiejar"' EXIT

login_token=$(curl -sS -c "$cookiejar" \
--data "action=query&meta=tokens&type=login&format=json" "$API" | jq -r '.query.tokens.logintoken')

curl -sS -c "$cookiejar" -b "$cookiejar" \
--data-urlencode "action=login" \
--data-urlencode "lgname=$USER" \
--data-urlencode "lgpassword=$PASS" \
--data-urlencode "lgtoken=$login_token" \
--data-urlencode "format=json" \
"$API" > /dev/null

token=$(curl -sS -b "$cookiejar" \
--data "action=query&meta=tokens&format=json" "$API" | jq -r '.query.tokens.csrftoken')

page_text=$(cat <<'EOF'
== Краткое описание ==
{{Файл
|Id = {{safesubst:#replaceset:{{subst:PAGENAME}}|/^(?:[^-]+-)?(.+?)(?:\.[^.]+)?$/=$1}}
|Проект = {{safesubst:#replaceset:{{subst:PAGENAME}}|/^(?:([^-]+)-)?.*$/=\1}}
}}

== Лицензирование ==
{{CC-BY-SA-3.0}}
EOF
)

batch_size=50

for ((i=0; i<${#files[@]}; i+=batch_size)); do
batch_files=("${files[@]:i:batch_size}")

titles=$(
for file in "${batch_files[@]}"; do
filename="$(basename "$file")"
filename_norm="$(normalize_filename "$filename")"
if [[ -n "$NAMESPACE" ]]; then
printf 'File:%s%s\n' "$NAMESPACE" "$filename_norm"
else
printf 'File:%s\n' "$filename_norm"
fi
done | paste -sd'|' -
)

existing_files=$(
curl -sS -b "$cookiejar" \
--data-urlencode "action=query" \
--data-urlencode "format=json" \
--data-urlencode "titles=$titles" \
--data-urlencode "prop=imageinfo" \
--data-urlencode "iiprop=timestamp" \
"$API" | jq -r '
.query.pages[]
| select((has("missing") | not) and (.imageinfo? | type == "array"))
| .title
| sub("^[^:]+:"; "")
'
)

for file in "${batch_files[@]}"; do
filename="$(basename "$file")"
filename_norm="$(normalize_filename "$filename")"
if [[ -n "$NAMESPACE" ]]; then
wiki_filename="${NAMESPACE}${filename_norm}"
else
wiki_filename="$filename_norm"
fi

if grep -Fxq "$wiki_filename" <<< "$existing_files"; then
echo "Skipping existing file: $wiki_filename"
continue
fi

echo "Uploading File:${wiki_filename}"

curl -sS -b "$cookiejar" \
-F "action=upload" \
-F "createonly=true" \
-F "filename=${wiki_filename}" \
-F "comment=Upload $filename via GitHub Actions" \
-F "text=$page_text" \
-F "token=$token" \
-F "ignorewarnings=0" \
-F "format=json" \
-F "file=@$file;type=image/png" \
"$API" | jq -r '.upload.result // .error.info // "null"' || true
done
done
Loading
Loading