Commit Graph
196 Commits
Author SHA1 Message Date
xPokee 5e629dff04 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync 2025-10-03 07:05:54 -04:00
d87637e6ab Adjusts easing in places where EASE_IN/OUT was applied without a curve. (#92976)
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-09-27 17:54:45 +02:00
xPokee b308ee9d78 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync 2025-09-24 10:13:01 -04:00
MrMelbertandGitHub 750ca9d2ec Two as anything greps (and some other cleanup) (#92974) 2025-09-20 13:44:28 -04:00
LucyandRoxy 9992246ac4 Add a new lint to ensure genesis_call.dme isn't accidentally changed (#92014)
## About The Pull Request

Port of https://github.com/Monkestation/Monkestation2.0/pull/7121

> adds a new lint to just verify the sha256sum of
`code/genesis_call.dme`, to ensure it's not accidentally mangled from
someone using dreammaker as an IDE instead of vscode or something:
> 
>
![image](https://github.com/user-attachments/assets/621ad2b0-ec27-4fe5-b870-e08e726543fa)

## Changelog

> no actual in-game changes
2025-07-19 20:29:22 -04:00
LucyandGitHub 2d96adcf46 Add a new lint to ensure genesis_call.dme isn't accidentally changed (#92014)
## About The Pull Request

Port of https://github.com/Monkestation/Monkestation2.0/pull/7121

> adds a new lint to just verify the sha256sum of
`code/genesis_call.dme`, to ensure it's not accidentally mangled from
someone using dreammaker as an IDE instead of vscode or something:
> 
>
![image](https://github.com/user-attachments/assets/621ad2b0-ec27-4fe5-b870-e08e726543fa)

## Changelog

> no actual in-game changes
2025-07-12 14:22:54 -06:00
Mikhail G.andRoxy 85dec714d3 Fix: linux build file name (#91877) 2025-07-04 16:33:05 -04:00
Mikhail G.andGitHub 2a94d3c574 Fix: linux build file name (#91877) 2025-06-29 11:48:17 +02:00
LucyandRoxy 5dcdfd6702 disable OpenDream linting complaining about world.IsSubscribed and client.IsByondMember (#91845)
## About The Pull Request

this disables the `UnsupportedAccess` warning in opendream linting, so
we stop getting these warnings for every opendream lint:
```
Warning: OD2801: /world.IsSubscribed() is unsupported: OpenDream does not have a premium tier
Warning: OD2801: /client.IsByondMember() is unsupported: OpenDream has no premium tier.
Warning: OD2801: /client.IsByondMember() is unsupported: OpenDream has no premium tier.
Warning: OD2801: /client.IsByondMember() is unsupported: OpenDream has no premium tier.
```

## Why It's Good For The Game

![jiggly](https://github.com/user-attachments/assets/19e926ce-93a2-45f6-b4ef-76cd0724268f)

## Changelog

no player-facing changes

(cherry picked from commit 9e040d7d54)
2025-06-28 20:37:13 -04:00
LucyandGitHub 9e040d7d54 disable OpenDream linting complaining about world.IsSubscribed and client.IsByondMember (#91845)
## About The Pull Request

this disables the `UnsupportedAccess` warning in opendream linting, so
we stop getting these warnings for every opendream lint:
```
Warning: OD2801: /world.IsSubscribed() is unsupported: OpenDream does not have a premium tier
Warning: OD2801: /client.IsByondMember() is unsupported: OpenDream has no premium tier.
Warning: OD2801: /client.IsByondMember() is unsupported: OpenDream has no premium tier.
Warning: OD2801: /client.IsByondMember() is unsupported: OpenDream has no premium tier.
```

## Why It's Good For The Game


![jiggly](https://github.com/user-attachments/assets/19e926ce-93a2-45f6-b4ef-76cd0724268f)

## Changelog

no player-facing changes
2025-06-27 16:16:34 -06:00
san7890andRoxy 1bc430830c Remove mysql insecure warning in CI (#91739)
## About The Pull Request


![image](https://github.com/user-attachments/assets/e8007e11-fc54-4f31-905e-2249481cd0a0)

This warning thing has been annoying me for a while when I scour CI logs
looking for oranges/reds, let's remove this needless emission by
confabulating a `.cfg` file and using that to run any necessary
commands. This worked on my local repository and should pass CI without
any issues on this repo as well.
## Why It's Good For The Game

In case we really wanna start cracking down on failing due to warnings
in CI it's helpful to ensure that the standard case is normal. Also just
cleaner in general.
## Changelog
Not needed.
2025-06-21 22:38:20 -04:00
san7890andGitHub 10d71a1bca Remove mysql insecure warning in CI (#91739)
## About The Pull Request


![image](https://github.com/user-attachments/assets/e8007e11-fc54-4f31-905e-2249481cd0a0)

This warning thing has been annoying me for a while when I scour CI logs
looking for oranges/reds, let's remove this needless emission by
confabulating a `.cfg` file and using that to run any necessary
commands. This worked on my local repository and should pass CI without
any issues on this repo as well.
## Why It's Good For The Game

In case we really wanna start cracking down on failing due to warnings
in CI it's helpful to ensure that the standard case is normal. Also just
cleaner in general.
## Changelog
Not needed.
2025-06-21 21:52:24 -04:00
JeremiahandRoxy a5a4b83a25 Sets prettier to run on the repo (#91379)
Prettier (an auto formatter) is set to only run within the tgui folder
currently. This removes that limitation, allowing it to automatically
format all supported files in the repo (.js, .html, .yml
[etc](https://prettier.io/docs/))

I made a few exceptions for bundled and generated files
I'm of the opinion that code should look uniform and am lazy enough to
want CTRL-S to format files without having to think beyond that
2025-06-05 19:13:02 -04:00
JeremiahandGitHub 9db2f6916b Sets prettier to run on the repo (#91379)
## About The Pull Request
Prettier (an auto formatter) is set to only run within the tgui folder
currently. This removes that limitation, allowing it to automatically
format all supported files in the repo (.js, .html, .yml
[etc](https://prettier.io/docs/))

I made a few exceptions for bundled and generated files
## Why It's Good For The Game
I'm of the opinion that code should look uniform and am lazy enough to
want CTRL-S to format files without having to think beyond that
## Changelog
2025-05-29 21:23:59 -07:00
Roxy 21589b743a Add user agent string to BYOND download requests (#91101)
## About The Pull Request

Someone in the BYOND discord said that they were able to fix their CI
script by making sure the request had a user agent attached, and lummox
said that BYOND suffered a DDoS yesterday so the failures are probably
anti-bot measures.

## Why It's Good For The Game

Fix CI mayhaps

## Changelog

N/A
2025-05-11 13:59:38 -04:00
RoxyandGitHub ec481b03ac Add user agent string to BYOND download requests (#91101)
## About The Pull Request

Someone in the BYOND discord said that they were able to fix their CI
script by making sure the request had a user agent attached, and lummox
said that BYOND suffered a DDoS yesterday so the failures are probably
anti-bot measures.

## Why It's Good For The Game

Fix CI mayhaps

## Changelog

N/A
2025-05-11 10:05:02 -07:00
Roxy 557bc53c09 Fixes for #90905 2025-05-08 20:00:42 -04:00
GaxeerandRoxy a3aec50f1a Pre compile builds for tests (#90905)
## About The Pull Request

Pre compile build and save as artifact for further use in integration
and alternate tests.
Which saves us some time on compilation (compilation takes ~50s) for
every test - we just download compilation output artifact.

So totally we save 434s ( (50s * 11 tests) - (83s + 3s * 11 tests) ) for
runners.

Workflow also supports multiple alternate tests.

<details>
<summary>
Before (per each test)
</summary>


![image](https://github.com/user-attachments/assets/af94f91a-50df-4a30-a51e-751429b55fd5)
</details>

<details>
<summary>
After
</summary>

Once per whole CI

![image](https://github.com/user-attachments/assets/0a31fbd2-145d-4f7f-9ea7-3e674b859da7)

Per each test

![image](https://github.com/user-attachments/assets/a9d5377f-add0-4c27-8f3c-9404915b285c)

</details>

## Changelog

Nothing player facing
2025-05-08 18:42:18 -04:00
GaxeerandGitHub 1d60e99e2a Pre compile builds for tests (#90905)
## About The Pull Request

Pre compile build and save as artifact for further use in integration
and alternate tests.
Which saves us some time on compilation (compilation takes ~50s) for
every test - we just download compilation output artifact.

So totally we save 434s ( (50s * 11 tests) - (83s + 3s * 11 tests) ) for
runners.

Workflow also supports multiple alternate tests.

<details>
<summary>
Before (per each test)
</summary>


![image](https://github.com/user-attachments/assets/af94f91a-50df-4a30-a51e-751429b55fd5)
</details>

<details>
<summary>
After
</summary>

Once per whole CI

![image](https://github.com/user-attachments/assets/0a31fbd2-145d-4f7f-9ea7-3e674b859da7)

Per each test

![image](https://github.com/user-attachments/assets/a9d5377f-add0-4c27-8f3c-9404915b285c)

</details>

## Changelog

Nothing player facing
2025-04-30 17:38:13 +02:00
MrMelbertandShadow-Quill 7c56731e3b Mecha cargo holds no longer shove themselves inside themselves when being deleted (#90626) 2025-04-29 17:56:53 -06:00
MrMelbertandGitHub 541c352a74 Mecha cargo holds no longer shove themselves inside themselves when being deleted (#90626) 2025-04-16 09:38:53 +02:00
itsmeowandRoxy 9ebcabb077 IconForge: rust-g Spritesheet Generation (#89478)
Replaces the asset subsystem's spritesheet generator with a rust-based
implementation (https://github.com/tgstation/rust-g/pull/160).

This is a rough port of
https://github.com/BeeStation/BeeStation-Hornet/pull/10404, but it
includes fixes for some cases I didn't catch that apply on TG.

(FWIW we've been using this system on prod for over a year and
encountered no major issues.)

![image](https://github.com/user-attachments/assets/53bd2b44-9bb5-42d2-b33f-093651edebc0)

`/datum/asset/spritesheet_batched`: A version of the spritesheet system
that collects a list of `/datum/universal_icon`s and sends them off to
rustg asynchronously, and the generation also runs on another thread, so
the game doesn't block during realize_spritesheet. The rust generation
is about 10x faster when it comes to actual icon generation, but the
biggest perk of the batched spritesheets is the caching system.

This PR notably does not convert a few things to the new spritesheet
generator.

- Species and antagonist icons in the preferences view because they use
getFlatIcon ~~which can't be converted to universal icons~~.
- Yes, this is still a *massive* cost to init, unfortunately. On Bee, I
actually enabled the 'legacy' cache on prod and development, which you
can see in my PR. That's why I added the 'clear cache' verb and the
`unregister()` procs, because it can force a regeneration at runtime. I
decided not to port this, since I think it would be detrimental to the
large amount of contributors here.
- It is *technically* possible to port parts of this to the uni_icon
system by making a uni_icon version of getFlatIcon. However, some
overlays use runtime-generated icons which are ~~completely unparseable
to IconForge, since they're stored in the RSC and don't exist as files
anywhere~~. This is most noticeable with things like hair (which blend
additively with the hair mask on the server, thus making them invisible
to `get_flat_uni_icon`). It also doesn't help that species and antag
icons will still need to generate a bunch of dummies and delete them to
even verify cache validity.
- It is actually possible to write the RSC icons to the filesystem
(using fcopy) and reference them in IconForge. However, I'm going to
wait on doing this until I port my GAGS implementation because it
requires GAGS to exist on the filesystem as well.

IconForge generates a cache based on the set of icons used, all
transform operations applied, and the source DMIs of each icon used
within the spritesheet. It can compare the hashes and invalidate the
cache automatically if any of these change. This means we can enable
caching on development, and have absolutely no downsides, because if
anything changes, the cache invalidates itself.

The caching has a mean cost of ~5ms and saves a lot of time compared to
generating the spritesheet, even with rust's faster generation. The main
downside is that the cache still requires building the list of icons and
their transforms, then json encoding it to send to rustg.

Here's an abbreviated example of a cache JSON. All of these need to
match for the cache to be valid. `input_hash` contains the transform
definitions for all the sprites in the spritesheet, so if the input to
iconforge changes, that hash catches it. The `sizes` and `sprites` are
loaded into DM.

```json
{
	"input_hash": "99f1bc67d590e000",
	"dmi_hashes": {
		"icons/ui/achievements/achievements.dmi": "771200c75da11c62"
	},
	"sizes": [
		"76x76"
	],
	"sprites": {
		"achievement-rustascend": {
			"size_id": "76x76",
			"position": 1
		}
	},
	"rustg_version": "3.6.0",
	"dm_version": 1
}
```

Universal icons are just a collection of DMI, Icon State, and any icon
transformation procs you apply (blends, crops, scales). They can be
convered to DM icons via `to_icon()`. I've included an implementation of
GAGS that produces universal icons, allowing GAGS items to be converted
into them. IconForge can read universal icons and add them to
spritesheets. It's basically just a wrapper that reimplements BYOND icon
procs.

Converts some uses of md5asfile within legacy spritesheets to use
rustg_hash_file instead, improving the performance of their generation.

Fixes lizard body markings not showing in previews, and re-adds eyes to
the ethereal color preview. This is a side effect of IconForge having
*much* better error handling than DM icon procs. Invalid stuff that gets
passed around will error instead of silently doing nothing.

Changes the CSS used in legacy spritesheet generation to split
`background: url(...) no-repeat` into separate props. This is necessary
for WebView2, as IE treats these properties differently - adding
`background-color` to an icon object (as seen in the R&D console) won't
work if you don't split these out.

Deletes unused spritesheets and their associated icons (condiments
spritesheet, old PDA spritesheet)

If you press "Character Setup", the 10-13sec of lag is now approximately
0.5-2 seconds.

Tracy profile showing the time spent on get_asset_datum. I pressed the
preferences button during init on both branches. Do note that this was
ran with a smart cache HIT, so no generation occurred.

![image](https://github.com/user-attachments/assets/3efa71ab-972b-4f5a-acab-0892496ef999)

Much lower worst-case for /datum/asset/New (which includes
`create_spritesheets()` and `register()`)

![image](https://github.com/user-attachments/assets/9ad8ceee-7bd6-4c48-b5f3-006520f527ef)

Here's a look at the internal costs from rustg - as you can see
`generate_spritesheet()` is very fast:

![image](https://github.com/user-attachments/assets/e6892c28-8c31-4af5-96d4-501e966d0ce9)

**Before**

![image](https://github.com/user-attachments/assets/cbd65787-42ba-4278-a45c-bd3d538da986)

**After**

![image](https://github.com/user-attachments/assets/d750899a-bd07-4b57-80fb-420fcc0ae416)

🆑
fix: Fixed lizard body markings and ethereal feature previews in the
preference menu missing some overlays.
refactor: Optimized spritesheet asset generation greatly using rustg
IconForge, greatly reducing post-initialization lag as well as reducing
init times and saving server computation.
config: Added 'smart' asset caching, for batched rustg IconForge
spritesheets. It is persistent and suitable for use on local, with
automatic invalidation.
add: Added admin verbs - Debug -> Clear Smart/Legacy Asset Cache for
spritesheets.
fix: Fixed R&D console icons breaking on WebView2/516
/🆑
2025-03-12 17:10:20 -04:00
MichiRecRoomandRoxy eefdf8dfa5 [NO GBP] Remove the call to install_node.sh from the Windows CI build script (#89494)
## About The Pull Request
Back when I moved all of the CI to use `actions/setup-node` in
https://github.com/tgstation/tgstation/pull/89363, it seems I forgot to
remove a line from the Windows build script that attempts to call
`tools/ci/install_node.sh`.

Thankfully, nothing was broken - it just complains that the script
doesn't exist, and continues on as if nothing happened.

That said, there's also no point to the error - so this PR removes that
line.
2025-03-12 16:03:00 -04:00
itsmeowandGitHub cc335e7e9e IconForge: rust-g Spritesheet Generation (#89478)
## About The Pull Request

Replaces the asset subsystem's spritesheet generator with a rust-based
implementation (https://github.com/tgstation/rust-g/pull/160).

This is a rough port of
https://github.com/BeeStation/BeeStation-Hornet/pull/10404, but it
includes fixes for some cases I didn't catch that apply on TG.

(FWIW we've been using this system on prod for over a year and
encountered no major issues.)

### TG MAINTAINER NOTE


![image](https://github.com/user-attachments/assets/53bd2b44-9bb5-42d2-b33f-093651edebc0)

### Batched Spritesheets

`/datum/asset/spritesheet_batched`: A version of the spritesheet system
that collects a list of `/datum/universal_icon`s and sends them off to
rustg asynchronously, and the generation also runs on another thread, so
the game doesn't block during realize_spritesheet. The rust generation
is about 10x faster when it comes to actual icon generation, but the
biggest perk of the batched spritesheets is the caching system.

This PR notably does not convert a few things to the new spritesheet
generator.

- Species and antagonist icons in the preferences view because they use
getFlatIcon ~~which can't be converted to universal icons~~.
- Yes, this is still a *massive* cost to init, unfortunately. On Bee, I
actually enabled the 'legacy' cache on prod and development, which you
can see in my PR. That's why I added the 'clear cache' verb and the
`unregister()` procs, because it can force a regeneration at runtime. I
decided not to port this, since I think it would be detrimental to the
large amount of contributors here.
- It is *technically* possible to port parts of this to the uni_icon
system by making a uni_icon version of getFlatIcon. However, some
overlays use runtime-generated icons which are ~~completely unparseable
to IconForge, since they're stored in the RSC and don't exist as files
anywhere~~. This is most noticeable with things like hair (which blend
additively with the hair mask on the server, thus making them invisible
to `get_flat_uni_icon`). It also doesn't help that species and antag
icons will still need to generate a bunch of dummies and delete them to
even verify cache validity.
- It is actually possible to write the RSC icons to the filesystem
(using fcopy) and reference them in IconForge. However, I'm going to
wait on doing this until I port my GAGS implementation because it
requires GAGS to exist on the filesystem as well.

#### Caching

IconForge generates a cache based on the set of icons used, all
transform operations applied, and the source DMIs of each icon used
within the spritesheet. It can compare the hashes and invalidate the
cache automatically if any of these change. This means we can enable
caching on development, and have absolutely no downsides, because if
anything changes, the cache invalidates itself.

The caching has a mean cost of ~5ms and saves a lot of time compared to
generating the spritesheet, even with rust's faster generation. The main
downside is that the cache still requires building the list of icons and
their transforms, then json encoding it to send to rustg.

Here's an abbreviated example of a cache JSON. All of these need to
match for the cache to be valid. `input_hash` contains the transform
definitions for all the sprites in the spritesheet, so if the input to
iconforge changes, that hash catches it. The `sizes` and `sprites` are
loaded into DM.

```json
{
	"input_hash": "99f1bc67d590e000",
	"dmi_hashes": {
		"icons/ui/achievements/achievements.dmi": "771200c75da11c62"
	},
	"sizes": [
		"76x76"
	],
	"sprites": {
		"achievement-rustascend": {
			"size_id": "76x76",
			"position": 1
		}
	},
	"rustg_version": "3.6.0",
	"dm_version": 1
}
```

### Universal Icons

Universal icons are just a collection of DMI, Icon State, and any icon
transformation procs you apply (blends, crops, scales). They can be
convered to DM icons via `to_icon()`. I've included an implementation of
GAGS that produces universal icons, allowing GAGS items to be converted
into them. IconForge can read universal icons and add them to
spritesheets. It's basically just a wrapper that reimplements BYOND icon
procs.

### Other Stuff

Converts some uses of md5asfile within legacy spritesheets to use
rustg_hash_file instead, improving the performance of their generation.

Fixes lizard body markings not showing in previews, and re-adds eyes to
the ethereal color preview. This is a side effect of IconForge having
*much* better error handling than DM icon procs. Invalid stuff that gets
passed around will error instead of silently doing nothing.

Changes the CSS used in legacy spritesheet generation to split
`background: url(...) no-repeat` into separate props. This is necessary
for WebView2, as IE treats these properties differently - adding
`background-color` to an icon object (as seen in the R&D console) won't
work if you don't split these out.

Deletes unused spritesheets and their associated icons (condiments
spritesheet, old PDA spritesheet)

## Why It's Good For The Game

If you press "Character Setup", the 10-13sec of lag is now approximately
0.5-2 seconds.

Tracy profile showing the time spent on get_asset_datum. I pressed the
preferences button during init on both branches. Do note that this was
ran with a smart cache HIT, so no generation occurred.


![image](https://github.com/user-attachments/assets/3efa71ab-972b-4f5a-acab-0892496ef999)

Much lower worst-case for /datum/asset/New (which includes
`create_spritesheets()` and `register()`)


![image](https://github.com/user-attachments/assets/9ad8ceee-7bd6-4c48-b5f3-006520f527ef)

Here's a look at the internal costs from rustg - as you can see
`generate_spritesheet()` is very fast:


![image](https://github.com/user-attachments/assets/e6892c28-8c31-4af5-96d4-501e966d0ce9)

### Comparison for a single spritesheet - chat spritesheet:

**Before**


![image](https://github.com/user-attachments/assets/cbd65787-42ba-4278-a45c-bd3d538da986)

**After**


![image](https://github.com/user-attachments/assets/d750899a-bd07-4b57-80fb-420fcc0ae416)

## Changelog

🆑
fix: Fixed lizard body markings and ethereal feature previews in the
preference menu missing some overlays.
refactor: Optimized spritesheet asset generation greatly using rustg
IconForge, greatly reducing post-initialization lag as well as reducing
init times and saving server computation.
config: Added 'smart' asset caching, for batched rustg IconForge
spritesheets. It is persistent and suitable for use on local, with
automatic invalidation.
add: Added admin verbs - Debug -> Clear Smart/Legacy Asset Cache for
spritesheets.
fix: Fixed R&D console icons breaking on WebView2/516
/🆑
2025-03-03 14:58:27 +01:00
Majkl-J 136c0d4869 [EXPERIMENTAL] expands some linter checks to modular folders 2025-02-26 02:16:32 -08:00
Majkl-J b6b8306fda Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-25-02a 2025-02-20 00:00:19 -08:00
MichiRecRoomandGitHub f591449df2 [NO GBP] Remove the call to install_node.sh from the Windows CI build script (#89494)
## About The Pull Request
Back when I moved all of the CI to use `actions/setup-node` in
https://github.com/tgstation/tgstation/pull/89363, it seems I forgot to
remove a line from the Windows build script that attempts to call
`tools/ci/install_node.sh`.

Thankfully, nothing was broken - it just complains that the script
doesn't exist, and continues on as if nothing happened.

That said, there's also no point to the error - so this PR removes that
line.
2025-02-16 14:30:37 -07:00
MichiRecRoomandGitHub ba7f720eaa CI now uses actions/setup-node to setup Node and restore the Yarn cache (#89363)
## About The Pull Request
This PR changes CI to use `actions/setup-node` to setup Node, instead of
using `tools/ci/install_node.sh`. The version given to this action is
the same as specified in `dependencies.sh`.

This fixes the issue of CI not using the node version provided in
`dependencies.sh`. Previously, it was using the system-wide Node, which
at the time of this PR is `v20.18.2`.

This change is NOT applied across all jobs, but is applied at minimum to
any jobs where the game is compiled. For example, any integration test
jobs now use `actions/setup-node` - but the "Remove guide comments" job
is untouched.

This PR has the additional following effects:
* The node install is no longer cached - it is instead downloaded from
<https://github.com/actions/node-versions> (or
<https://nodejs.org/dist/> if that fails). Being that the CI runner
needs to contact Github anyways to obtain the cached Node install, this
should make no difference.
* We no longer have to perform Yarn caching ourselves -
`actions/setup-node` does it for us! However, a side effect of this is
that the Yarn cache uses a different cache key now. I would have set up
the action to pull from the existing cache, but unfortunately that
wasn't an option.

Speaking of caching - the new action, `.github/actions/setup_node`, will
NOT restore the Yarn cache unless the `restore-yarn-cache` input is
`true`. This saves a couple seconds where we need node, but don't need
the yarn cache (such as in integration tests).
2025-02-07 12:54:26 -07:00
MichiRecRoomandGitHub 2b89a04939 Unit Test failures now output a job summary, making it easier to see what the failures are. (#89284)
This change was requested by Absolucy, of catgirl fame.

## About The Pull Request
The CI is very useful for figuring out if you made any errors with your
changes. Among other things, it runs unit tests on a variety of maps and
BYOND versions, making sure everything still works as expected.

Unfortunately, figuring out the specific errors you got in CI is a bit
of a pain. You could scroll through the individual logs - but the logs
are so long, it'd take forever.

You could also use the annotations section, but that's gets filled with
generic error messages:


![image](https://github.com/user-attachments/assets/0c01374d-65fd-4586-8bea-e71725e3ffe5)

This PR helps on this matter, by adding [a job
summary](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions#adding-a-job-summary)
whenever a failure is detected. Here's an example where I intentionally
generated fails:


![image](https://github.com/user-attachments/assets/6f0fd948-125f-4685-9230-20fa48b2b357)

(If you want to see how it looks on your own screen, have a look:
<https://github.com/LikeLakers2/tgstation/actions/runs/13026959405>)

As it is set up currently, each integration test job will generate its
own summary; each summary contains one section per failed test; each
section will contain the associated failure message(s) in a code block.

This system is pretty basic currently (for example, breaking something
across all maps will cause many job summaries to be generated), but it's
a step up from what we had previously. Ideally, I'll come back to this
later, and improve on the job summary output - for example, by merging
identical errors across maps, and having the failures generated as a
singular job summary.

## Why It's Good For The Game
Having all the failures summarized in one place, without generic failure
messages splattered in-between, can make it easier to diagnose issues
detected by CI.
2025-02-06 23:53:02 -08:00
TiviPlusandGitHub dba1f9b1e3 ProcArgumentGlobal pragma as error from warning (#88992)
## About The Pull Request
Makes OD2211 as an error since it fixes a byond bug that nobody should
be using
```
New Pragma: OD2211 - ProcArgumentGlobal
A new pragma has been added for detecting this BYOND bug: https://www.byond.com/forum/post/2830750
When a proc argument begins with /var/ instead of var/, it creates a global variable instead of an argument.
/datum/proc/foo(/var/bar = 5)
    return

/proc/main()
    world.log << global.bar // This prints 5 in BYOND

Since this is obviously nonsense, elevating this pragma to an error is strongly encouraged. I have only found it in one SS13 codebase so far.
```
2025-01-10 23:11:22 -06:00
John WillardandGitHub 2e4d70afe5 Updates href uses for 516 (#88699)
## About The Pull Request

Was just scrolling through the Paradise github since they seem to have
more work done for 516 to see if there's anything I can port over, found
this and thought why not.

Ports parts of https://github.com/ParadiseSS13/Paradise/pull/25105
Specifically, updaing all hrefs to use the internal ``byond://``, and
adding it to grep.

## Why It's Good For The Game

More work towards 516.

## Changelog

Nothing player-facing.
2024-12-24 11:42:20 -08:00
TimandGitHub 189616ae2c Add better logging for ruins (#88403)
## About The Pull Request
~~This adds a new test for the CI/CD so that we can load all space ruins
instead of it being RNG.~~
Adds more robust logging for ruins so we can see when they fail/succeed
and how many are placed on a map.

This also removes a deprecated CI config setting. It prevented ALL ruins
from spawning during CI tests which is bad.

The config setting was made redundant in:
- #87910

## Why It's Good For The Game
More robust CI/CD.

## Changelog
🆑
code: Add better logging for ruins
/🆑
2024-12-08 15:11:09 +00:00
Bloopandlessthanthree 5961aa3b53 Fixes improper static list declarations + adds grep for it (#87207)
## About The Pull Request

I randomly came across a `var/list/static` in the code, which does not
actually do what was intended, and thought it was silly. A ctrl+f
revealed that this was a fairly common mistake, so I went and fixed all
the instances of it I could find.

~~Including one in lighting code, which it looked like they were trying
to create a global list to cache generated lighting sheet values for
speed, but it was just a normal list that got created each time
pointlessly. Now those values are actually being cached (using a global
var, because a `static` list was not the right thing to use there in the
first place).~~

Nevermind, it seems that this was in fact being cached even if it
shouldn't have been, because byond. Just rearranged it there seeing as
it works either way.

## Why It's Good For The Game

Code that does what it's supposed to

## Changelog

🆑
fix: fixes a bunch of improper static list declarations
/🆑
# Conflicts:
#	code/game/objects/items/kirby_plants/kirbyplants.dm
2024-11-16 00:44:53 -08:00
JeremiahandGitHub 8522aeac41 [tgui] Bumps node & yarn versions (#87700)
## About The Pull Request
- Node 22 LTS and Yarn 4.5.1
- Removes windows 7 compatibility support
- Set to install for you on the next build
- CI also bumped to Node LTS
## Why It's Good For The Game
Oil change for TGUI. Up to date and fresh!
## Changelog

N/A
2024-11-05 18:18:48 -05:00
Majkl-J e59d8ba64b Merge commit '179a607a90ad7ec62bdaff4e6fe72af60ee56442' of https://github.com/tgstation/tgstation into upstream-24-10b 2024-10-23 23:27:16 -07:00
WaterpigandMajkl-J bb70889f6e TG Upstream Part 1
3591 individual conflicts

Update build.js

Update install_node.sh

Update byond.js

oh my fucking god

hat

slow

huh

holy shit

we all fall down

2 more I missed

2900 individual conflicts

2700 Individual conflicts

replaces yarn file with tg version, bumping us down to 2200-ish

Down to 2000 individual conflicts

140 down

mmm

aaaaaaaaaaaaaaaaaaa

not yt

575

soon

900 individual conflicts

600 individual conflicts, 121 file conflicts

im not okay

160 across 19 files

29 in 4 files

0 conflicts, compiletime fix time

some minor incap stuff

missed ticks

weird dupe definition stuff

missed ticks 2

incap fixes

undefs and pie fix

Radio update and some extra minor stuff

returns a single override

no more dupe definitions, 175 compiletime errors

Unticked file fix

sound and emote stuff

honk and more radio stuff
2024-10-19 08:04:33 -07:00
BloopandGitHub 241514f520 Fixes improper static list declarations + adds grep for it (#87207)
## About The Pull Request

I randomly came across a `var/list/static` in the code, which does not
actually do what was intended, and thought it was silly. A ctrl+f
revealed that this was a fairly common mistake, so I went and fixed all
the instances of it I could find.

~~Including one in lighting code, which it looked like they were trying
to create a global list to cache generated lighting sheet values for
speed, but it was just a normal list that got created each time
pointlessly. Now those values are actually being cached (using a global
var, because a `static` list was not the right thing to use there in the
first place).~~

Nevermind, it seems that this was in fact being cached even if it
shouldn't have been, because byond. Just rearranged it there seeing as
it works either way.


## Why It's Good For The Game

Code that does what it's supposed to

## Changelog

🆑
fix: fixes a bunch of improper static list declarations
/🆑
2024-10-14 22:36:41 -06:00
SmArtKarandGitHub faf3eb5106 Adds OD's new pragma to lints, fixes all issues it found (#86568)
## About The Pull Request

Closes #86567
Don't think any of these were found/reported or actually could trigger
in-game

## Why It's Good For The Game
Glory to OpenDream

## Changelog
🆑
code: Fixed multiple minor logic issues with code found by OpenDream's
new pragma
/🆑
2024-09-10 10:33:26 +12:00
Waterpig 4c4930c71d Merge branch 'master' of https://github.com/tgstation/tgstation into pulls-tg-to-fix-shit 2024-09-08 00:59:39 +02:00
Y0SH1M4S73RandGitHub d1ccb530b2 Replaces Auxlua with the byondapi-based Dreamluau (#84810)
## About The Pull Request

Ever since byondapi went stable, I've been meaning to create a
replacement lua library that uses it instead of the auxtools-based
auxlua. After so many months, I've finally got the code just about into
a position where it's ready for a PR.

[Click here](https://hackmd.io/@aloZJicNQrmfYgykhfFwAQ/BySAS18u0) for a
guide to rewriting auxlua scripts for dreamluau syntax.

## Why It's Good For The Game

Code that runs on production servers should not depend on memory hacks
that are liable to break any time Dream Daemon updates.

## Changelog

🆑
admin: Admin lua scripting uses a new library that (probably) will not
break when BYOND updates.
/🆑

## TODO:
- [x] Convert the lua editor ui to TS
- [x] Include a guide for converting scripts from auxlua syntax to
dreamluau syntax
2024-07-28 18:45:49 +00:00
1e4eea1177 [MIRROR] Unit tests for stuff accidentally placed in space by mappers (#28538)
* Unit tests for stuff accidentally placed in space by mappers (#84453)

This unit test detects all turfs & other movables that aren't in a lit
area (ie area/space/nearspace) on station zlevels

The grep detects movables placed on shuttles that do not have the
correct area assigned, which caused those atoms to break off of the
shuttle & literally get launched into random parts of space (usually on
station z-levels; the only reason I found this issue was cause the unit
test was detecting random shit ending up on station maps lol)

Minor fix for the mapload_space_verification unit test - it was falsely
detecting turfs that shuttle grids (that were template_noop) were parked
ontop of, which aren't effected by the shuttle in any way. This allowed
the following fix

Fixed a number of shuttles having atoms in /area/template_noop areas.
Atoms in these areas are treated as not actually part of the shuttle
itself & were launched off into random space tiles across all z-levels
via dump_in_space(). Corrected those grids to have the correct area, and
as such, shuttles now stay together properly.

🆑 ShizCalev
fix: Fixed a number of shuttles having parts (such as lattices)
completely disappearing.
fix: Fixed the ceilings above shuttles on station maps being
full-bright.
fix: Fixed lattices sometimes appearing at random locations in space on
station maps.
fix: Cleaned up a number of accidentally placed objects in space across
all station maps.
fix: Fixed a false positive with the mapload_space_verification unit
test failing on turfs that weren't actually part of shuttles.
code: Added a unit test that automatically finds all base space turfs
with objects on them, as well as non-space turfs that are set to space
areas (meaning that these squares weren't lit properly.)
/🆑

Shuttle Ceiling Fix:
Before

![2024-06-30_23-15-18-dreamseeker-Doctor_s_Spess_Junk_Eta](https://github.com/tgstation/tgstation/assets/6209658/4d1fb186-460a-409f-ab5d-3258b4e205f8)
Fixed
![Screenshot 2024-06-30
231528](https://github.com/tgstation/tgstation/assets/6209658/bd957384-4ba5-4fb6-9919-7f17f01d723c)

Shuttle Fix:
Before

![image](https://github.com/tgstation/tgstation/assets/6209658/4b408c40-0a25-4d8c-a9c7-65157eaf1172)
Fixed (look at the lattices in the middle. the stuff in the shuttle are
randomized / not part of this)

![image](https://github.com/tgstation/tgstation/assets/6209658/80a9e5f2-8c30-492e-8cd3-31f9b8ffb275)

* Unit tests for stuff accidentally placed in space by mappers

* Fixes maps for nearspace unit test (#28557)

Fixes maps

---------

Co-authored-by: Afevis <ShizCalev@users.noreply.github.com>
Co-authored-by: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com>
2024-07-02 15:25:34 +05:30
65f0e6bd76 [MIRROR] Adds a new power storage type: The Megacell. Drastically reduces power cell consumption/storage. [MDB Ignore] (#28376)
* Adds a new power storage type: The Megacell. Drastically reduces power cell consumption/storage. [MDB Ignore]

* Multi chargers

* all this other shit

* maps

* more fixes

* even more

* mapping

* map fixes

* MCR

* map2

* map3

* map4

* map5

---------

Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
Co-authored-by: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com>
Co-authored-by: Fluffles <piecopresident@gmail.com>
2024-07-01 23:44:49 +05:30
AfevisandGitHub 1aade91a18 Unit tests for stuff accidentally placed in space by mappers (#84453)
This unit test detects all turfs & other movables that aren't in a lit
area (ie area/space/nearspace) on station zlevels

The grep detects movables placed on shuttles that do not have the
correct area assigned, which caused those atoms to break off of the
shuttle & literally get launched into random parts of space (usually on
station z-levels; the only reason I found this issue was cause the unit
test was detecting random shit ending up on station maps lol)

Minor fix for the mapload_space_verification unit test - it was falsely
detecting turfs that shuttle grids (that were template_noop) were parked
ontop of, which aren't effected by the shuttle in any way. This allowed
the following fix

Fixed a number of shuttles having atoms in /area/template_noop areas.
Atoms in these areas are treated as not actually part of the shuttle
itself & were launched off into random space tiles across all z-levels
via dump_in_space(). Corrected those grids to have the correct area, and
as such, shuttles now stay together properly.

🆑 ShizCalev
fix: Fixed a number of shuttles having parts (such as lattices)
completely disappearing.
fix: Fixed the ceilings above shuttles on station maps being
full-bright.
fix: Fixed lattices sometimes appearing at random locations in space on
station maps.
fix: Cleaned up a number of accidentally placed objects in space across
all station maps.
fix: Fixed a false positive with the mapload_space_verification unit
test failing on turfs that weren't actually part of shuttles.
code: Added a unit test that automatically finds all base space turfs
with objects on them, as well as non-space turfs that are set to space
areas (meaning that these squares weren't lit properly.)
/🆑


Shuttle Ceiling Fix:
Before

![2024-06-30_23-15-18-dreamseeker-Doctor_s_Spess_Junk_Eta](https://github.com/tgstation/tgstation/assets/6209658/4d1fb186-460a-409f-ab5d-3258b4e205f8)
Fixed
![Screenshot 2024-06-30
231528](https://github.com/tgstation/tgstation/assets/6209658/bd957384-4ba5-4fb6-9919-7f17f01d723c)


Shuttle Fix:
Before

![image](https://github.com/tgstation/tgstation/assets/6209658/4b408c40-0a25-4d8c-a9c7-65157eaf1172)
Fixed (look at the lattices in the middle. the stuff in the shuttle are
randomized / not part of this)

![image](https://github.com/tgstation/tgstation/assets/6209658/80a9e5f2-8c30-492e-8cd3-31f9b8ffb275)
2024-07-01 11:51:18 +02:00
2b06838f02 [MIRROR] Tells od lints to shut the fuck up (#28359)
Tells od lints to shut the fuck up

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
2024-06-25 16:19:44 +05:30
0db2a23faf Adds a new power storage type: The Megacell. Drastically reduces power cell consumption/storage. [MDB Ignore] (#84079)
## About The Pull Request
As the title says. A standard power cell now only stores 10 KJ and
drains power similar to how it did before the refactor to all power
appliances.

The new standard megacell stock part stores 1 MJ (what cells store right
now). APCs and SMESs have had their power cells replaced with these
megacell stock parts instead. Megacells can only be used in APCs and
SMESs. It shouldn't be possible to use megacells in any typical
appliance.

This shouldn't change anything about how much 'use' you can get out of a
power cell in regular practice. Most should operate the same and you
should still get the same amount of shots out of a laser gun, and we can
look at expanding what can be switched over to megacells, e.g. if we
want mechs to require significantly more power than a typical appliance.

Thanks to Meyhazah for the megacell icon sprites.

## Why It's Good For The Game
Power cell consumption is way too high ever since the power appliance
refactor that converted most things to be in joules. It's a bit
ridiculous for most of our machinery to drain the station's power supply
this early on.

The reason it's like this is because regular appliances (laser guns,
borgs, lights) all have a cell type that is identical to the APC/SMES
cell type. And it means that if we want to provide an easy way to charge
these appliances without making it easy to charge APCs/SMESs through a
power bug exploit, we need to introduce a new cell type to differentiate
between what supplies power and regular appliances that use power. This
is primarily what the megacell stock part does.

This moves us back to what it was originally like before the power
refactor, where recharging power cells wouldn't drain an exorbitant
amount of energy. However, it maintains the goal of the original
refactor which was to prevent people from cheesing power generation to
produce an infinite amount of power, as the power that APCs and SMESs
operate at is drastically different from the power that a regular
appliance uses.

## Changelog
🆑 Watermelon, Mayhazah
balance: Drastically reduces the power consumption and max charge of
power cells
balance: Added a new stock part called the battery, used primarily in
the construction of APCs and SMESs.
add: Suiciding with a cell/battery will shock you and potentially dust
you/shock the people around you if the charge is great enough.
/🆑

---------

Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
Co-authored-by: Pickle-Coding <58013024+Pickle-Coding@users.noreply.github.com>
2024-06-25 00:32:19 +00:00
ZephyrandGitHub c85c8b6ff4 Tells od lints to shut the fuck up (#84069)
## About The Pull Request

I want this lint to go away. it's killing me internally.
## Why It's Good For The Game

It's a pragma that no longer exists
2024-06-24 16:18:04 -05:00
61ec10c3e0 [MIRROR] grep's for "recieve" typos (#27826)
* grep's for "recieve" typos (#83369)

Just spellchecking some common mistakes.

* Missed these.

---------

Co-authored-by: Afevis <ShizCalev@users.noreply.github.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
2024-05-23 23:38:14 +02:00
AfevisandGitHub 53a8ba74c8 grep's for "recieve" typos (#83369)
Just spellchecking some common mistakes.
2024-05-23 00:41:05 -04:00
JeremiahandGitHub c0133e4032 Reimplements node compatibility mode (#83141)
## About The Pull Request
Puts a switch inside our build tools that will download the appropriate
node version based on your OS.

#82334

## Why It's Good For The Game
Closes #83076
Allows players to play the game
2024-05-11 01:17:07 -07:00
AfevisandSkyratBot dff93b0290 Greps for pronoun helper spelling mistakes (#83086)
Fixes #83083

These are case sensitive
2024-05-07 00:39:12 +00:00