Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: Clean and update manifest + automation #2964

Merged
merged 10 commits into from
Aug 16, 2023

Conversation

koplo199
Copy link
Contributor

@koplo199 koplo199 commented Jul 16, 2023

Description

Clean the flatpak manifest from modules no longer necessary (which were left over from previous migrations), and update remaining modules/dependencies.

Additionally, support for flatpak-external-data-checker has been added. It is then used by Github Actions to update automatically those modules/dependencies in the future.

It will check for updates every day, but using the require-important-update feature of flatpak-external-data-checker, it will only submit a PR if "important" modules have been updated. Important modules are those who have is-important: true defined in the manifest.

The modules flagged as important are currently:

  1. Bottles runtime
  2. GameMode
  3. LatencyFlex
  4. vkbasalt-cli

If any of those modules are outdated, it will submit a PR looking like this updating any outdated module.

Type of change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

How Has This Been Tested?

Please describe the tests that you ran to verify your changes.
Provide instructions so we can reproduce.

  • Tested locally and with CI build.

@koplo199 koplo199 marked this pull request as draft July 16, 2023 15:36
@koplo199
Copy link
Contributor Author

It is technically ready for review, I'm converting to draft because bottlesdevs/runtime#6 changes the asset naming scheme and I will need to reflect that change here once merged.

@github-actions
Copy link
Contributor

github-actions bot commented Jul 16, 2023

Pylint result on modfied files:
************* Module bottles.frontend.views.bottle_preferences
bottles/frontend/views/bottle_preferences.py:1:0: C0302: Too many lines in module (1125/1000) (too-many-lines)
bottles/frontend/views/bottle_preferences.py:440:13: W0511: "vista": "Windows Vista", # TODO: implement this in the backend (fixme)
bottles/frontend/views/bottle_preferences.py:55:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:57:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:146:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:147:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:148:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:149:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:150:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:152:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:153:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:154:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:155:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:156:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:157:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:158:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:159:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:160:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:161:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:162:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:163:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:164:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:165:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:166:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:167:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:168:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:169:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:180:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:184:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/frontend/views/bottle_preferences.py:23:0: E0611: No name 'Adw' in module 'gi.repository' (no-name-in-module)
bottles/frontend/views/bottle_preferences.py:172:8: W0105: String statement has no effect (pointless-string-statement)
bottles/frontend/views/bottle_preferences.py:177:8: W0105: String statement has no effect (pointless-string-statement)
bottles/frontend/views/bottle_preferences.py:186:8: W0105: String statement has no effect (pointless-string-statement)
bottles/frontend/views/bottle_preferences.py:272:8: W0212: Access to a protected member __library of a client class (protected-access)
bottles/frontend/views/bottle_preferences.py:285:25: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:344:12: W0612: Unused variable 'index' (unused-variable)
bottles/frontend/views/bottle_preferences.py:525:40: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:532:39: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:539:34: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:557:48: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:564:38: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:571:28: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:578:43: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:586:38: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:614:32: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:623:30: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:632:32: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:641:27: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:650:29: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:670:32: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:679:33: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:688:31: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:697:31: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:706:37: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:715:36: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:724:46: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:754:39: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:763:43: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:772:31: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:785:16: C0103: Variable name "w" doesn't conform to snake_case naming style (invalid-name)
bottles/frontend/views/bottle_preferences.py:801:41: W0613: Unused argument 'error' (unused-argument)
bottles/frontend/views/bottle_preferences.py:840:0: W0613: Unused argument 'args' (unused-argument)
bottles/frontend/views/bottle_preferences.py:1014:19: W0613: Unused argument 'result' (unused-argument)
bottles/frontend/views/bottle_preferences.py:1014:27: W0613: Unused argument 'error' (unused-argument)
bottles/frontend/views/bottle_preferences.py:1024:8: C0103: Variable name "rk" doesn't conform to snake_case naming style (invalid-name)
bottles/frontend/views/bottle_preferences.py:1051:40: W0613: Unused argument 'widget' (unused-argument)
bottles/frontend/views/bottle_preferences.py:1060:30: W0613: Unused argument 'status' (unused-argument)
bottles/frontend/views/bottle_preferences.py:1060:43: W0613: Unused argument 'error' (unused-argument)
bottles/frontend/views/bottle_preferences.py:1072:31: W0613: Unused argument 'status' (unused-argument)
bottles/frontend/views/bottle_preferences.py:1072:44: W0613: Unused argument 'error' (unused-argument)
bottles/frontend/views/bottle_preferences.py:1084:31: W0613: Unused argument 'status' (unused-argument)
bottles/frontend/views/bottle_preferences.py:1084:44: W0613: Unused argument 'error' (unused-argument)
bottles/frontend/views/bottle_preferences.py:1101:37: W0613: Unused argument 'status' (unused-argument)
bottles/frontend/views/bottle_preferences.py:1101:50: W0613: Unused argument 'error' (unused-argument)
bottles/frontend/views/bottle_preferences.py:1114:17: R1719: The if expression can be replaced with 'not test' (simplifiable-if-expression)
bottles/frontend/views/bottle_preferences.py:1116:12: C0103: Variable name "w" doesn't conform to snake_case naming style (invalid-name)
bottles/frontend/views/bottle_preferences.py:272:8: W0238: Unused private member `PreferencesView.__library` (unused-private-member)
bottles/frontend/views/bottle_preferences.py:247:16: W0201: Attribute '__valid_name' defined outside __init__ (attribute-defined-outside-init)
bottles/frontend/views/bottle_preferences.py:250:8: W0201: Attribute '__valid_name' defined outside __init__ (attribute-defined-outside-init)
bottles/frontend/views/bottle_preferences.py:256:12: W0201: Attribute '__valid_name' defined outside __init__ (attribute-defined-outside-init)
bottles/frontend/views/bottle_preferences.py:433:8: W0201: Attribute 'windows_versions' defined outside __init__ (attribute-defined-outside-init)
************* Module bottles.backend.wine.winecommand
bottles/backend/wine/winecommand.py:267:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/backend/wine/winecommand.py:478:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/backend/wine/winecommand.py:478:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/backend/wine/winecommand.py:587:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/backend/wine/winecommand.py:587:0: W1405: Quote delimiter ' is inconsistent with the rest of the file (inconsistent-quotes)
bottles/backend/wine/winecommand.py:85:4: R0913: Too many arguments (11/5) (too-many-arguments)
bottles/backend/wine/winecommand.py:129:12: W0105: String statement has no effect (pointless-string-statement)
bottles/backend/wine/winecommand.py:135:12: W0105: String statement has no effect (pointless-string-statement)
bottles/backend/wine/winecommand.py:172:8: C0103: Variable name "ld" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/wine/winecommand.py:190:16: C0103: Variable name "e" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/wine/winecommand.py:199:19: C0103: Variable name "v" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/wine/winecommand.py:218:20: C0103: Variable name "ld" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/wine/winecommand.py:365:24: C0103: Variable name "p" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/wine/winecommand.py:372:20: W0105: String statement has no effect (pointless-string-statement)
bottles/backend/wine/winecommand.py:376:51: E1136: Value 'gpu['prime']['integrated']' is unsubscriptable (unsubscriptable-object)
bottles/backend/wine/winecommand.py:378:20: W0105: String statement has no effect (pointless-string-statement)
bottles/backend/wine/winecommand.py:171:8: W0612: Unused variable 'is_nvidia' (unused-variable)
bottles/backend/wine/winecommand.py:422:12: W0105: String statement has no effect (pointless-string-statement)
bottles/backend/wine/winecommand.py:431:12: W0105: String statement has no effect (pointless-string-statement)
bottles/backend/wine/winecommand.py:478:32: R1732: Consider using 'with' for resource-allocating operations (consider-using-with)
bottles/backend/wine/winecommand.py:487:21: W1514: Using open without explicitly specifying an encoding (unspecified-encoding)
bottles/backend/wine/winecommand.py:487:49: C0103: Variable name "f" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/wine/winecommand.py:494:21: W1514: Using open without explicitly specifying an encoding (unspecified-encoding)
bottles/backend/wine/winecommand.py:494:49: C0103: Variable name "f" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/wine/winecommand.py:498:16: C0103: Variable name "st" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/wine/winecommand.py:510:20: W0105: String statement has no effect (pointless-string-statement)
bottles/backend/wine/winecommand.py:515:20: W0105: String statement has no effect (pointless-string-statement)
bottles/backend/wine/winecommand.py:520:20: W0105: String statement has no effect (pointless-string-statement)
bottles/backend/wine/winecommand.py:587:12: C0103: Variable name "s" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/wine/winecommand.py:589:12: C0103: Variable name "s" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/wine/winecommand.py:597:8: R1732: Consider using 'with' for resource-allocating operations (consider-using-with)
bottles/backend/wine/winecommand.py:608:8: R1732: Consider using 'with' for resource-allocating operations (consider-using-with)
bottles/backend/wine/winecommand.py:645:12: R1705: Unnecessary "else" after "return", remove the "else" and de-indent the code inside it (no-else-return)
bottles/backend/wine/winecommand.py:683:8: C0103: Variable name "rv" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/wine/winecommand.py:685:12: C0103: Variable name "rv" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/wine/winecommand.py:691:12: C0103: Variable name "rv" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/wine/winecommand.py:662:23: R1732: Consider using 'with' for resource-allocating operations (consider-using-with)
bottles/backend/wine/winecommand.py:711:17: W1514: Using open without explicitly specifying an encoding (unspecified-encoding)
bottles/backend/wine/winecommand.py:711:41: C0103: Variable name "f" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/wine/winecommand.py:715:17: W1514: Using open without explicitly specifying an encoding (unspecified-encoding)
bottles/backend/wine/winecommand.py:715:41: C0103: Variable name "f" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/wine/winecommand.py:717:17: W1514: Using open without explicitly specifying an encoding (unspecified-encoding)
bottles/backend/wine/winecommand.py:717:41: C0103: Variable name "f" doesn't conform to snake_case naming style (invalid-name)
************* Module bottles.backend.managers.steam
bottles/backend/managers/steam.py:314:0: C0325: Unnecessary parens after '=' keyword (superfluous-parens)
bottles/backend/managers/steam.py:315:0: C0325: Unnecessary parens after '=' keyword (superfluous-parens)
bottles/backend/managers/steam.py:97:13: W1514: Using open without explicitly specifying an encoding (unspecified-encoding)
bottles/backend/managers/steam.py:97:54: C0103: Variable name "f" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/managers/steam.py:124:13: W1514: Using open without explicitly specifying an encoding (unspecified-encoding)
bottles/backend/managers/steam.py:124:66: C0103: Variable name "f" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/managers/steam.py:157:13: W1514: Using open without explicitly specifying an encoding (unspecified-encoding)
bottles/backend/managers/steam.py:157:67: C0103: Variable name "f" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/managers/steam.py:174:13: W1514: Using open without explicitly specifying an encoding (unspecified-encoding)
bottles/backend/managers/steam.py:174:49: C0103: Variable name "f" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/managers/steam.py:188:13: W1514: Using open without explicitly specifying an encoding (unspecified-encoding)
bottles/backend/managers/steam.py:188:39: C0103: Variable name "f" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/managers/steam.py:317:16: C0103: Variable name "p" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/managers/steam.py:393:12: C0103: Variable name "p" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/managers/steam.py:395:19: C0103: Variable name "v" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/managers/steam.py:396:16: C0103: Variable name "v" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/managers/steam.py:409:8: C0206: Consider iterating with .items() (consider-using-dict-items)
bottles/backend/managers/steam.py:409:12: C0103: Variable name "e" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/managers/steam.py:411:19: C0103: Variable name "v" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/managers/steam.py:413:20: C0103: Variable name "v" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/managers/steam.py:432:19: C0103: Variable name "v" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/managers/steam.py:433:16: C0103: Variable name "v" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/managers/steam.py:438:12: C0103: Variable name "e" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/managers/steam.py:438:15: C0103: Variable name "v" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/managers/steam.py:474:12: C0103: Variable name "e" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/managers/steam.py:474:15: C0103: Variable name "v" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/managers/steam.py:547:12: C0103: Variable name "c" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/managers/steam.py:552:69: C0103: Variable name "f" doesn't conform to snake_case naming style (invalid-name)
bottles/backend/managers/steam.py:555:20: W0702: No exception type(s) specified (bare-except)
bottles/backend/managers/steam.py:561:65: C0103: Variable name "f" doesn't conform to snake_case naming style (invalid-name)

@orowith2os
Copy link
Contributor

orowith2os commented Jul 16, 2023

You can probably remove the com.valvesoftware.Steam.Utility extension point too, gamescope is the only thing we're pulling from it, it seems.

@koplo199
Copy link
Contributor Author

There's still com.valvesoftware.Steam.Utility.steamtinkerlaunch using it, while non-Proton compatibility layers are unsupported at the moment, I guess it doesn't hurt to leave it as is for the time being. It will spare debugging time for permission issues, which are kind of annoying as I unfortunately learned from #2961.

@orowith2os
Copy link
Contributor

Can you drop a PR to the Flathub package, and I can merge all the changes?

@koplo199
Copy link
Contributor Author

koplo199 commented Aug 15, 2023

@orowith2os Sure, I opened flathub/com.usebottles.bottles#449 which mirrors manifest changes made here (no automation), but just as this PR it is also marked as draft because it needs bottlesdevs/runtime#6.

@orowith2os
Copy link
Contributor

I can land all three once all of the appropriate workflows are working as appropriate. Not sure if it's relevant here, but Mypy is complaining, that should probably be fixed.

@koplo199
Copy link
Contributor Author

@orowith2os The mypy workflow was broken: it was checking the bottledevs repository and not the PR repository. I fixed it in addition to the mypy error itself in the last two commits.

@orowith2os
Copy link
Contributor

Thanks, will queue these up now :)

@orowith2os orowith2os marked this pull request as ready for review August 15, 2023 16:03
@orowith2os
Copy link
Contributor

Sorry, I can't merge the runtime repository changes. I'll bug Mirko about it.

@orowith2os
Copy link
Contributor

Hm, why the separate com.usebottles.bottles.src manifest? I also noticed that in the Flathub PR, the Bottles source is duplicated there and in the main manifest.

@koplo199
Copy link
Contributor Author

koplo199 commented Aug 16, 2023

Hm, why the separate com.usebottles.bottles.src manifest? I also noticed that in the Flathub PR, the Bottles source is duplicated there and in the main manifest.

I tried to explain a bit in this comment, but I did it in order to avoid out of sync manifest between this repository and the flathub one.

For instance, manifests already have diverged as we speak: here, the runtime is at version 0.6, and on flathub it is at 0.6.2. Imagine that for a module being responsible for a bug, it would be horrendous to debug as it effectively makes reproducing impossible with a local build. Keeping manifests in sync would circumvent these situations.

There is, and should be, only one difference between manifests here and manifests on flathub: the location of the Bottles source directory. That change now belong to a distinct file named com.usebottles.bottles.src.yaml, so that the other two manifests (com.usebottles.bottles.pypi-deps.yaml, and com.usebottles.bottles.yml) can be mirrored on the flathub repository without any change required!

Let's say tomorrow Bottles version 52 is released: on flathub the CI will detect this new version (thanks to the x-checker-data metadata in com.usebottles.bottles.src.yaml, this is the only yml file it will check for), and will automatically pull com.usebottles.bottles.yml and com.usebottles.bottles.pypi-deps.yaml from this repository at the 52 tag, overwriting the old one. This is why it currently looks like the Bottles source is duplicated on the flathub PR, but it's not, it will be overwritten in the following release.

Hopefully the motivation of this change is clearer with these explanations, let me know if there still is something unclear.

@orowith2os
Copy link
Contributor

Alright, everything LGTM.

@orowith2os orowith2os marked this pull request as ready for review August 16, 2023 22:59
@mirkobrombin mirkobrombin merged commit a898cc4 into bottlesdevs:main Aug 16, 2023
4 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
3 participants