diff --git a/.github/scripts/update_mod_versions.py b/.github/scripts/update_mod_versions.py index 6b577d70..2b8e552d 100755 --- a/.github/scripts/update_mod_versions.py +++ b/.github/scripts/update_mod_versions.py @@ -27,14 +27,22 @@ def extract_repo_info(repo_url): return None, None VersionSource = Enum("VersionSource", [ - ("RELEASE_TAG", "release"), + ("LATEST_TAG", "release"), ("HEAD", "commit"), + ("SPECIFIC_TAG", "specific_tag"), ]) -def get_version_string(source: Enum, owner, repo, start_timestamp, n = 1): +def get_version_string(source: Enum, owner, repo, start_timestamp, n = 1, tag_data=None): """Get the version string from a given GitHub repo.""" - if source is VersionSource.RELEASE_TAG: + if source is VersionSource.LATEST_TAG: url = f'https://api.github.com/repos/{owner}/{repo}/releases/latest' + elif source is VersionSource.SPECIFIC_TAG: + if not tag_data: + print(f"ERROR: SPECIFIC_TAG source requires tag_name") + return None + + tag_name = tag_data['name'] + url = f'https://api.github.com/repos/{owner}/{repo}/releases/tags/{tag_name}' else: if not source is VersionSource.HEAD: print(f"UNIMPLEMENTED(VersionSource): `{source}`,\nfalling back to `HEAD`") @@ -58,10 +66,33 @@ def get_version_string(source: Enum, owner, repo, start_timestamp, n = 1): if response.status_code == 200: data = response.json() - if source is VersionSource.RELEASE_TAG: + if source is VersionSource.LATEST_TAG: # Return name of latest tag return data.get('tag_name') + elif source is VersionSource.SPECIFIC_TAG: + assets = data.get('assets', []) + if not assets: + print(f"⚠️ No assets found in release {tag_name}") + return None + + latest_created_at = "" + latest_asset = None + + for asset in assets: + created_at = asset.get('created_at', '') + if created_at > latest_created_at: + latest_created_at = created_at + latest_asset = asset['name'] + + # Convert 2099-12-31T01:02:03Z to 20991231_010203 + parts = latest_created_at.replace('Z', '').split('T') + date_part = parts[0].replace('-', '') # 20991231 + time_part = parts[1].replace(':', '') # 010203 + version = f"{date_part}_{time_part}" # 20991231_010203 + tag_data['file'] = latest_asset + return version + if data and len(data) > 0: # Return shortened commit hash (first 7 characters) return data[0]['sha'][:7] @@ -98,7 +129,7 @@ def get_version_string(source: Enum, owner, repo, start_timestamp, n = 1): print(f"Waiting {wait_time} seconds until next attempt...") time.sleep(wait_time) n += 1 - return get_version_string(source, owner, repo, start_timestamp, n) # Retry + return get_version_string(source, owner, repo, start_timestamp, n, tag_data=tag_data) # Retry else: print(f"Next attempt in {wait_time} seconds, but Action run time would exceed 1800 seconds - Stopping...") sys.exit(1) @@ -165,10 +196,22 @@ def process_mod(start_timestamp, name, meta_file): print("Download URL links to HEAD, checking latest commit...") source = VersionSource.HEAD new_version = get_version_string(VersionSource.HEAD, owner, repo, start_timestamp) + elif (meta.get('fixed-release-tag-updates') == True) and "/releases/download/" in download_url: + source = VersionSource.SPECIFIC_TAG + tag_data = {} + + # Pattern: /releases/download/{tag}/{file} - tag is second-to-last + print("Download URL links to specific release asset, checking that asset's tag...") + tag_name = download_url.split('/')[-2] + print(f"Checking release tag: {tag_name}") + tag_data['name'] = tag_name + new_version = get_version_string( + source, owner, repo, start_timestamp, tag_data=tag_data + ) else: print("Checking releases for latest version tag...") - source = VersionSource.RELEASE_TAG + source = VersionSource.LATEST_TAG new_version = get_version_string(source, owner, repo, start_timestamp) if not new_version: @@ -192,6 +235,8 @@ def process_mod(start_timestamp, name, meta_file): meta['version'] = new_version if "/archive/refs/tags/" in download_url: meta['downloadURL'] = f"{repo_url}/archive/refs/tags/{meta['version']}.zip" + elif source == VersionSource.SPECIFIC_TAG: + meta['downloadURL'] = f"{repo_url}/releases/download/{tag_data['name']}/{tag_data['file']}" with open(meta_file, 'w', encoding='utf-8') as f: # Preserve formatting with indentation @@ -241,4 +286,3 @@ if __name__ == "__main__": # Exit with status code 0 even if no updates were made sys.exit(0) - diff --git a/.github/workflows/check-mod.yml b/.github/workflows/check-mod.yml index 315b718f..26e721de 100644 --- a/.github/workflows/check-mod.yml +++ b/.github/workflows/check-mod.yml @@ -121,10 +121,11 @@ jobs: - name: Validate meta.json Against Schema if: always() && steps.find-changed-mods.outputs.changed_mods_found == 'true' - uses: dsanders11/json-schema-validate-action@v1.2.0 + uses: dsanders11/json-schema-validate-action@v1.4.0 with: schema: "./schema/meta.schema.json" files: ${{ steps.find-changed-mods.outputs.meta_json_files }} + custom-errors: true - name: Validate Download URLs if: always() && steps.find-changed-mods.outputs.changed_mods_found == 'true' diff --git a/README.md b/README.md index 6e3cb4ac..69c2c796 100644 --- a/README.md +++ b/README.md @@ -52,8 +52,15 @@ This file stores essential metadata in JSON format. **Make sure you adhere to th - **version**: The version number of the mod files available at `downloadURL`. - *folderName*: (*Optional*) The name for the mod's install folder. This must be **unique**, and cannot contain characters `<` `>` `:` `"` `/` `\` `|` `?` `*` - *automatic-version-check*: (*Optional* but **recommended**) Set to `true` to let the Index automatically update the `version` field. - - Updates happen once every hour, by checking either your mod's latest Release **or** latest commit, depending on the `downloadURL`. - - Enable this option **only** if your `downloadURL` points to an automatically updating source, using a link to [releases/latest](https://docs.github.com/en/repositories/releasing-projects-on-github/linking-to-releases) (recommended), or a link to the [latest commit (HEAD)](https://docs.github.com/en/repositories/working-with-files/using-files/downloading-source-code-archives#source-code-archive-urls). + - Updates happen once every hour, by checking either your mod's latest Release, latest commit, or specific release tag, depending on the `downloadURL`. + - Enable this option **only** if your `downloadURL` points to an automatically updating source: + - **Latest release** (recommended): Using a link to [releases/latest](https://docs.github.com/en/repositories/releasing-projects-on-github/linking-to-releases) + - **Latest commit**: Using a link to the [latest commit (HEAD)](https://docs.github.com/en/repositories/working-with-files/using-files/downloading-source-code-archives#source-code-archive-urls) +- *fixed-release-tag-updates*: (*Optional*) Set to `true` if your mod uses a fixed release tag and still wants to auto-update when modifying the underlying files. This can be useful for repositories with multiple mods, allowing you to have a release tag dedicated for each mod where you upload new versions. Note that: + - Requires `automatic-version-check` to also be set to `true`. + - The `downloadURL` must point to a specific release asset using a link such as `https://github.com/author/repo/releases/download/my-release-tag/mod.zip`. + + ### 3. thumbnail.jpg (Optional) If included, this image will appear alongside your mod in the index. Maximum and recommended size is 1920x1080 pixels. diff --git a/mods/BakersDozenBagels@Bakery/meta.json b/mods/BakersDozenBagels@Bakery/meta.json index 08772737..dd40e52b 100644 --- a/mods/BakersDozenBagels@Bakery/meta.json +++ b/mods/BakersDozenBagels@Bakery/meta.json @@ -11,5 +11,5 @@ "repo": "https://github.com/BakersDozenBagels/BalatroBakery", "downloadURL": "https://github.com/BakersDozenBagels/BalatroBakery/archive/refs/heads/main.zip", "automatic-version-check": true, - "version": "c65bc75" + "version": "6b48bcf" } diff --git a/mods/BarrierTrio@Cardsauce/meta.json b/mods/BarrierTrio@Cardsauce/meta.json index ddb56d3b..c7e2bb3b 100644 --- a/mods/BarrierTrio@Cardsauce/meta.json +++ b/mods/BarrierTrio@Cardsauce/meta.json @@ -12,5 +12,5 @@ "downloadURL": "https://github.com/BarrierTrio/Cardsauce/archive/refs/heads/main.zip", "folderName": "Cardsauce", "automatic-version-check": true, - "version": "b604e72" + "version": "8094b16" } diff --git a/mods/CampfireCollective@ExtraCredit/meta.json b/mods/CampfireCollective@ExtraCredit/meta.json index 910bfc0f..32266730 100644 --- a/mods/CampfireCollective@ExtraCredit/meta.json +++ b/mods/CampfireCollective@ExtraCredit/meta.json @@ -10,5 +10,5 @@ "repo": "https://github.com/GuilloryCraft/ExtraCredit", "downloadURL": "https://github.com/GuilloryCraft/ExtraCredit/archive/refs/heads/main.zip", "automatic-version-check": true, - "version": "94bd9fb" + "version": "0855210" } diff --git a/mods/CelestinGaming@BalatrinGamingDeck/description.md b/mods/CelestinGaming@BalatrinGamingDeck/description.md new file mode 100644 index 00000000..15b44a74 --- /dev/null +++ b/mods/CelestinGaming@BalatrinGamingDeck/description.md @@ -0,0 +1,6 @@ +# Balatrin Gaming Deck +Deck design for Balatro cards inspired by [Ratatin Gaming](https://www.youtube.com/@RatatinGaming). Requires [Steamodded](https://github.com/Steamopollys/Steamodded). + + +Made by [Celestin Gaming](https://x.com/CG64_oficial) + diff --git a/mods/CelestinGaming@BalatrinGamingDeck/meta.json b/mods/CelestinGaming@BalatrinGamingDeck/meta.json new file mode 100644 index 00000000..1e47c9df --- /dev/null +++ b/mods/CelestinGaming@BalatrinGamingDeck/meta.json @@ -0,0 +1,14 @@ +{ + "title": "BalatrinGamingDeck", + "requires-steamodded": true, + "requires-talisman": false, + "categories": [ + "Resource Packs" + ], + "author": "Celestin Gaming", + "repo": "https://github.com/CelestinGaming/BalatrinGamingDeck", + "downloadURL": "https://github.com/CelestinGaming/BalatrinGamingDeck/archive/refs/heads/main.zip", + "folderName": "BalatrinGamingDeck", + "automatic-version-check": true, + "version": "d1bc486" +} diff --git a/mods/CelestinGaming@BalatrinGamingDeck/thumbnail.jpg b/mods/CelestinGaming@BalatrinGamingDeck/thumbnail.jpg new file mode 100644 index 00000000..07c64fe6 Binary files /dev/null and b/mods/CelestinGaming@BalatrinGamingDeck/thumbnail.jpg differ diff --git a/mods/EricTheToon@Fortlatro/meta.json b/mods/EricTheToon@Fortlatro/meta.json index e40af415..678e36d2 100644 --- a/mods/EricTheToon@Fortlatro/meta.json +++ b/mods/EricTheToon@Fortlatro/meta.json @@ -11,5 +11,5 @@ "repo": "https://github.com/EricTheToon/Fortlatro", "downloadURL": "https://github.com/EricTheToon/Fortlatro/releases/latest/download/Fortlatro.zip", "automatic-version-check": true, - "version": "1.1.6" + "version": "1.1.7" } diff --git a/mods/Finnaware@Finn'sPokélatro/meta.json b/mods/Finnaware@Finn'sPokélatro/meta.json index 716ff540..87dbd79e 100644 --- a/mods/Finnaware@Finn'sPokélatro/meta.json +++ b/mods/Finnaware@Finn'sPokélatro/meta.json @@ -9,5 +9,5 @@ "repo": "https://github.com/Finnaware/Finn-Pokelatro", "downloadURL": "https://github.com/Finnaware/Finn-Pokelatro/archive/refs/heads/main.zip", "automatic-version-check": true, - "version": "34651f5" + "version": "edd7cc0" } diff --git a/mods/Glitchkat10@Cryptposting/meta.json b/mods/Glitchkat10@Cryptposting/meta.json index 86a8b338..e90c4cf7 100644 --- a/mods/Glitchkat10@Cryptposting/meta.json +++ b/mods/Glitchkat10@Cryptposting/meta.json @@ -10,6 +10,6 @@ "repo": "https://github.com/kierkat10/Cryptposting", "downloadURL": "https://github.com/kierkat10/Cryptposting/archive/refs/heads/main.zip", "folderName": "Cryptposting", - "version": "2fd5488", + "version": "1342ba6", "automatic-version-check": true } diff --git a/mods/GunnableScum@Visibility/meta.json b/mods/GunnableScum@Visibility/meta.json index d8374307..572df57c 100644 --- a/mods/GunnableScum@Visibility/meta.json +++ b/mods/GunnableScum@Visibility/meta.json @@ -11,5 +11,5 @@ "repo": "https://github.com/GunnableScum/Visibility", "downloadURL": "https://github.com/GunnableScum/Visibility/releases/latest/download/Visibility.zip", "automatic-version-check": true, - "version": "v1.0.1" + "version": "v1.0.2" } diff --git a/mods/IcyEthics@BalatroGoesKino/meta.json b/mods/IcyEthics@BalatroGoesKino/meta.json index 52256daf..04209c97 100644 --- a/mods/IcyEthics@BalatroGoesKino/meta.json +++ b/mods/IcyEthics@BalatroGoesKino/meta.json @@ -9,6 +9,6 @@ "repo": "https://github.com/icyethics/Kino", "downloadURL": "https://github.com/icyethics/Kino/archive/refs/heads/main.zip", "folderName": "Kino", - "version": "5e96140", + "version": "5568884", "automatic-version-check": true } diff --git a/mods/InertSteak@Pokermon/meta.json b/mods/InertSteak@Pokermon/meta.json index 4c9a5f9c..73ead315 100644 --- a/mods/InertSteak@Pokermon/meta.json +++ b/mods/InertSteak@Pokermon/meta.json @@ -11,5 +11,5 @@ "repo": "https://github.com/InertSteak/Pokermon", "downloadURL": "https://github.com/InertSteak/Pokermon/archive/refs/heads/main.zip", "automatic-version-check": true, - "version": "c77fb3b" + "version": "0265040" } diff --git a/mods/JosephPB09@CuriLatro/description.md b/mods/JosephPB09@CuriLatro/description.md new file mode 100644 index 00000000..38b42c1f --- /dev/null +++ b/mods/JosephPB09@CuriLatro/description.md @@ -0,0 +1,4 @@ +# CuriLatro +This mod changes some jokers to curis created or shared in the Balatro fans Facebook group. + +only put this folder into the mod manager folder diff --git a/mods/JosephPB09@CuriLatro/meta.json b/mods/JosephPB09@CuriLatro/meta.json new file mode 100644 index 00000000..9640057e --- /dev/null +++ b/mods/JosephPB09@CuriLatro/meta.json @@ -0,0 +1,14 @@ +{ + "title": "CuriLatro", + "requires-steamodded": true, + "requires-talisman": false, + "categories": [ + "Resource Packs" + ], + "author": "JosephPB09 and Balatro fans", + "repo": "https://github.com/JosephPB0909/CuriLatro", + "downloadURL": "https://github.com/JosephPB0909/CuriLatro/archive/refs/tags/mod.zip", + "folderName": "CuriLatro", + "version": "mod", + "automatic-version-check": true +} diff --git a/mods/JosephPB09@CuriLatro/thumbnail.jpg b/mods/JosephPB09@CuriLatro/thumbnail.jpg new file mode 100644 index 00000000..3d9df216 Binary files /dev/null and b/mods/JosephPB09@CuriLatro/thumbnail.jpg differ diff --git a/mods/KROOOL@Tiendita's/meta.json b/mods/KROOOL@Tiendita's/meta.json index 57a839f7..c7f304ab 100644 --- a/mods/KROOOL@Tiendita's/meta.json +++ b/mods/KROOOL@Tiendita's/meta.json @@ -10,6 +10,6 @@ "repo": "https://github.com/KROOOL/Tiendita-s-Jokers", "downloadURL": "https://github.com/KROOOL/Tiendita-s-Jokers/archive/refs/heads/main.zip", "folderName": "Tiendita's Jokers", - "version": "84db0dd", + "version": "7c01a1e", "automatic-version-check": true } diff --git a/mods/Larswijn@CardSleeves/meta.json b/mods/Larswijn@CardSleeves/meta.json index cd33dc41..02848094 100644 --- a/mods/Larswijn@CardSleeves/meta.json +++ b/mods/Larswijn@CardSleeves/meta.json @@ -10,5 +10,5 @@ "repo": "https://github.com/larswijn/CardSleeves", "downloadURL": "https://github.com/larswijn/CardSleeves/archive/refs/heads/master.zip", "automatic-version-check": true, - "version": "1b74176" + "version": "c2a22f0" } diff --git a/mods/MathIsFun0@Talisman/meta.json b/mods/MathIsFun0@Talisman/meta.json index 969dde0a..bce6bed3 100644 --- a/mods/MathIsFun0@Talisman/meta.json +++ b/mods/MathIsFun0@Talisman/meta.json @@ -12,5 +12,5 @@ "downloadURL": "https://github.com/MathIsFun0/Talisman/releases/latest/download/Talisman.zip", "folderName": "Talisman", "automatic-version-check": true, - "version": "v2.2.0c" + "version": "v2.3.0" } diff --git a/mods/Mysthaps@LobotomyCorp/meta.json b/mods/Mysthaps@LobotomyCorp/meta.json index f12978e0..524213aa 100644 --- a/mods/Mysthaps@LobotomyCorp/meta.json +++ b/mods/Mysthaps@LobotomyCorp/meta.json @@ -9,5 +9,5 @@ "repo": "https://github.com/Mysthaps/LobotomyCorp", "downloadURL": "https://github.com/Mysthaps/LobotomyCorp/archive/refs/heads/main.zip", "automatic-version-check": true, - "version": "f46562b" + "version": "62fc049" } diff --git a/mods/OneSuchKeeper@Hunatro/meta.json b/mods/OneSuchKeeper@Hunatro/meta.json index 0bb4f159..01fc0db7 100644 --- a/mods/OneSuchKeeper@Hunatro/meta.json +++ b/mods/OneSuchKeeper@Hunatro/meta.json @@ -9,5 +9,5 @@ "repo": "https://github.com/onesuchkeeper/Hunatro", "downloadURL": "https://github.com/onesuchkeeper/hunatro/releases/latest/download/hunatro.zip", "automatic-version-check": true, - "version": "v1.1.0" + "version": "v1.1.1" } diff --git a/mods/OneSuchKeeper@TelepurteCards/meta.json b/mods/OneSuchKeeper@TelepurteCards/meta.json index 3a9030b6..50f896d0 100644 --- a/mods/OneSuchKeeper@TelepurteCards/meta.json +++ b/mods/OneSuchKeeper@TelepurteCards/meta.json @@ -9,5 +9,5 @@ "repo": "https://github.com/onesuchkeeper/telepurtedeck", "downloadURL": "https://github.com/onesuchkeeper/telepurtedeck/releases/latest/download/TelepurteCards.zip", "automatic-version-check": true, - "version": "v1.0.0" + "version": "v1.0.1" } diff --git a/mods/Opal@ChallengerDeep/meta.json b/mods/Opal@ChallengerDeep/meta.json index 86a0e4af..8cf1f708 100644 --- a/mods/Opal@ChallengerDeep/meta.json +++ b/mods/Opal@ChallengerDeep/meta.json @@ -10,5 +10,5 @@ "repo": "https://github.com/OOkayOak/Challenger-Deep", "downloadURL": "https://github.com/OOkayOak/Challenger-Deep/releases/latest/download/ChallengerDeep.zip", "automatic-version-check": true, - "version": "v1.4.1" + "version": "v1.4.2" } diff --git a/mods/RattlingSnow353@Familiar/meta.json b/mods/RattlingSnow353@Familiar/meta.json index a535ecb4..73a885d2 100644 --- a/mods/RattlingSnow353@Familiar/meta.json +++ b/mods/RattlingSnow353@Familiar/meta.json @@ -9,5 +9,5 @@ "repo": "https://github.com/RattlingSnow353/Familiar/tree/main", "downloadURL": "https://github.com/RattlingSnow353/Familiar/archive/refs/heads/BetterCalc-Fixes.zip", "automatic-version-check": true, - "version": "8c562ca" + "version": "0dcd89b" } diff --git a/mods/RoffleChat@Rofflatro/meta.json b/mods/RoffleChat@Rofflatro/meta.json index fc208a54..bde3b68f 100644 --- a/mods/RoffleChat@Rofflatro/meta.json +++ b/mods/RoffleChat@Rofflatro/meta.json @@ -8,8 +8,8 @@ ], "author": "Roffle's Chat", "repo": "https://github.com/MamiKeRiko/Rofflatro", - "downloadURL": "https://github.com/MamiKeRiko/Rofflatro/archive/refs/tags/v1.1.3d.zip", + "downloadURL": "https://github.com/MamiKeRiko/Rofflatro/archive/refs/tags/v1.1.3e.zip", "folderName": "Rofflatro", - "version": "v1.1.3d", + "version": "v1.1.3e", "automatic-version-check": true } diff --git a/mods/SDM0@SDM_0-s-Stuff/meta.json b/mods/SDM0@SDM_0-s-Stuff/meta.json index 4418ce91..650d47cd 100644 --- a/mods/SDM0@SDM_0-s-Stuff/meta.json +++ b/mods/SDM0@SDM_0-s-Stuff/meta.json @@ -10,5 +10,5 @@ "repo": "https://github.com/SDM0/SDM_0-s-Stuff", "downloadURL": "https://github.com/SDM0/SDM_0-s-Stuff/archive/refs/heads/main.zip", "automatic-version-check": true, - "version": "988681d" + "version": "22d8d17" } diff --git a/mods/SMG9000@Cryptid-MoreMarioJokers/meta.json b/mods/SMG9000@Cryptid-MoreMarioJokers/meta.json index baaf8780..1d8a302f 100644 --- a/mods/SMG9000@Cryptid-MoreMarioJokers/meta.json +++ b/mods/SMG9000@Cryptid-MoreMarioJokers/meta.json @@ -10,6 +10,6 @@ "repo": "https://github.com/smg9000/Cryptid-MoreMarioJokers", "downloadURL": "https://github.com/smg9000/Cryptid-MoreMarioJokers/archive/refs/heads/main.zip", "folderName": "Cryptid-MoreMarioJokers", - "version": "64e63c4", + "version": "4f7c987", "automatic-version-check": true } diff --git a/mods/SirMaiquis@Baldatro/description.md b/mods/SirMaiquis@Baldatro/description.md new file mode 100644 index 00000000..d709b687 --- /dev/null +++ b/mods/SirMaiquis@Baldatro/description.md @@ -0,0 +1,26 @@ +# Baldatro Mod for Balatro + +Baldatro is a mod that makes all the jokers bald, thats it, enjoy! + +## Features + +- **Makes almost all Jokers bald**: Thats it, not much to say. + +## Installation + +To install the "Baldatro" mod, follow these steps: + +1. This mod requires [Steamodded](https://github.com/Steamodded/smods). +2. Just the download the "Baldatro-vx.zip" file from releases of the mod and extract it in your C:\Users\\AppData\Roaming\Balatro\Mods or %appdata%\Balatro\Mods directory. + +## Support + +If you encounter any problems or have questions, please open an issue in this repository. Feedback and suggestions are always appreciated! + +Thank you for using or contributing to the Stickers Always Shown mod! + +## Contributors + +Special thanks to the mod contributors: + +- [@SirMaiquis](https://github.com/SirMaiquis) - Main developer and maintainer of the mod. diff --git a/mods/SirMaiquis@Baldatro/meta.json b/mods/SirMaiquis@Baldatro/meta.json new file mode 100644 index 00000000..10611d08 --- /dev/null +++ b/mods/SirMaiquis@Baldatro/meta.json @@ -0,0 +1,15 @@ +{ + "title": "Baldatro", + "requires-steamodded": true, + "requires-talisman": false, + "categories": [ + "Resource Packs", + "Joker" + ], + "author": "SirMaiquis", + "repo": "https://github.com/SirMaiquis/Balatro-Baldatro", + "downloadURL": "https://github.com/SirMaiquis/Balatro-Baldatro/releases/latest/download/Baldatro.zip", + "folderName": "Baldatro", + "automatic-version-check": true, + "version": "v1.1.0" +} diff --git a/mods/SirMaiquis@Baldatro/thumbnail.jpg b/mods/SirMaiquis@Baldatro/thumbnail.jpg new file mode 100644 index 00000000..b9da46c2 Binary files /dev/null and b/mods/SirMaiquis@Baldatro/thumbnail.jpg differ diff --git a/mods/SleepyG11@HandyBalatro/meta.json b/mods/SleepyG11@HandyBalatro/meta.json index 01c2eb81..1fbd983f 100644 --- a/mods/SleepyG11@HandyBalatro/meta.json +++ b/mods/SleepyG11@HandyBalatro/meta.json @@ -9,5 +9,5 @@ "repo": "https://github.com/SleepyG11/HandyBalatro", "downloadURL": "https://github.com/SleepyG11/HandyBalatro/archive/refs/heads/main.zip", "automatic-version-check": true, - "version": "41ca519" + "version": "ab4595b" } diff --git a/mods/Squidguset@TooManyDecks/meta.json b/mods/Squidguset@TooManyDecks/meta.json index 0f6438f2..461ee257 100644 --- a/mods/Squidguset@TooManyDecks/meta.json +++ b/mods/Squidguset@TooManyDecks/meta.json @@ -9,6 +9,6 @@ "repo": "https://github.com/Squidguset/TooManyDecks", "downloadURL": "https://github.com/Squidguset/TooManyDecks/archive/refs/heads/main.zip", "folderName": "TooManyDecks", - "version": "8098d0c", + "version": "7ecfc30", "automatic-version-check": true } diff --git a/mods/Steamodded@smods/meta.json b/mods/Steamodded@smods/meta.json index aa6ca8ff..839e321f 100644 --- a/mods/Steamodded@smods/meta.json +++ b/mods/Steamodded@smods/meta.json @@ -9,5 +9,5 @@ "repo": "https://github.com/Steamodded/smods", "downloadURL": "https://github.com/Steamodded/smods/archive/refs/heads/main.zip", "automatic-version-check": true, - "version": "b1179a4" + "version": "67279fa" } diff --git a/mods/TOGAPack@TheOneGoofAli/meta.json b/mods/TOGAPack@TheOneGoofAli/meta.json index 8e136c43..bf85ed71 100644 --- a/mods/TOGAPack@TheOneGoofAli/meta.json +++ b/mods/TOGAPack@TheOneGoofAli/meta.json @@ -10,5 +10,5 @@ "repo": "https://github.com/TheOneGoofAli/TOGAPackBalatro", "downloadURL": "https://github.com/TheOneGoofAli/TOGAPackBalatro/archive/refs/heads/main.zip", "automatic-version-check": true, - "version": "83e12f6" + "version": "9c38451" } diff --git a/mods/Th30ne@GrabBag/meta.json b/mods/Th30ne@GrabBag/meta.json index 19602c36..a5f5bdbf 100644 --- a/mods/Th30ne@GrabBag/meta.json +++ b/mods/Th30ne@GrabBag/meta.json @@ -11,5 +11,5 @@ "downloadURL": "https://github.com/thefaketh30ne/grab-bag/archive/refs/heads/main.zip", "folderName": "GrabBag", "automatic-version-check": true, - "version": "6467c19" + "version": "d28a242" } diff --git a/mods/TheMotherfuckingBearodactyl@Insolence/meta.json b/mods/TheMotherfuckingBearodactyl@Insolence/meta.json index 66267a95..657c55fd 100644 --- a/mods/TheMotherfuckingBearodactyl@Insolence/meta.json +++ b/mods/TheMotherfuckingBearodactyl@Insolence/meta.json @@ -7,8 +7,8 @@ ], "author": "The Motherfucking Bearodactyl", "repo": "https://github.com/thebearodactyl/insolence-balatro", - "downloadURL": "https://github.com/thebearodactyl/insolence-balatro/archive/refs/tags/2.1.1.zip", + "downloadURL": "https://github.com/thebearodactyl/insolence-balatro/archive/refs/tags/2.1.2.zip", "folderName": "Insolence", - "version": "2.1.1", + "version": "2.1.2", "automatic-version-check": true } diff --git a/mods/Trif3ctal@LuckyRabbit/meta.json b/mods/Trif3ctal@LuckyRabbit/meta.json index 0c813e52..95130b13 100644 --- a/mods/Trif3ctal@LuckyRabbit/meta.json +++ b/mods/Trif3ctal@LuckyRabbit/meta.json @@ -10,5 +10,5 @@ "downloadURL": "https://github.com/Trif3ctal/Lucky-Rabbit/archive/refs/heads/main.zip", "folderName": "LuckyRabbit", "automatic-version-check": true, - "version": "9b19f25" + "version": "43057bf" } diff --git a/mods/baimao@Partner/meta.json b/mods/baimao@Partner/meta.json index 5f46253f..6e5484f8 100644 --- a/mods/baimao@Partner/meta.json +++ b/mods/baimao@Partner/meta.json @@ -8,7 +8,7 @@ ], "author": "baimao", "repo": "https://github.com/Icecanno/Partner-API", - "downloadURL": "https://github.com/Icecanno/Partner-API/archive/refs/tags/1.0.2d.zip", - "version": "1.0.2d", + "downloadURL": "https://github.com/Icecanno/Partner-API/archive/refs/tags/1.0.2e.zip", + "version": "1.0.2e", "automatic-version-check": true } diff --git a/mods/cg223@TooManyJokers/meta.json b/mods/cg223@TooManyJokers/meta.json index e30afedd..36c130f2 100644 --- a/mods/cg223@TooManyJokers/meta.json +++ b/mods/cg223@TooManyJokers/meta.json @@ -9,5 +9,5 @@ "repo": "https://github.com/cg-223/toomanyjokers", "downloadURL": "https://github.com/cg-223/toomanyjokers/archive/refs/heads/main.zip", "automatic-version-check": true, - "version": "2bdffd9" + "version": "e38730c" } diff --git a/mods/lordruby@Entropy/meta.json b/mods/lordruby@Entropy/meta.json index dd1457d3..d5c63303 100644 --- a/mods/lordruby@Entropy/meta.json +++ b/mods/lordruby@Entropy/meta.json @@ -9,6 +9,6 @@ "repo": "https://github.com/lord-ruby/Entropy", "downloadURL": "https://github.com/lord-ruby/Entropy/archive/refs/heads/main.zip", "folderName": "Entropy", - "version": "8700099", + "version": "65a353b", "automatic-version-check": true } diff --git a/mods/nh6574@JokerDisplay/meta.json b/mods/nh6574@JokerDisplay/meta.json index 7dfa5e70..f994bc64 100644 --- a/mods/nh6574@JokerDisplay/meta.json +++ b/mods/nh6574@JokerDisplay/meta.json @@ -10,5 +10,5 @@ "repo": "https://github.com/nh6574/JokerDisplay", "downloadURL": "https://github.com/nh6574/JokerDisplay/archive/refs/heads/master.zip", "automatic-version-check": true, - "version": "99a83ab" + "version": "e90fa02" } diff --git a/mods/nh6574@JoyousSpring/meta.json b/mods/nh6574@JoyousSpring/meta.json index 9f6c82e0..de273600 100644 --- a/mods/nh6574@JoyousSpring/meta.json +++ b/mods/nh6574@JoyousSpring/meta.json @@ -10,5 +10,5 @@ "repo": "https://github.com/nh6574/JoyousSpring", "downloadURL": "https://github.com/nh6574/JoyousSpring/archive/refs/heads/master.zip", "automatic-version-check": true, - "version": "a2630a0" + "version": "c0a24f9" } diff --git a/mods/pi_cubed@pi_cubedsJokers/meta.json b/mods/pi_cubed@pi_cubedsJokers/meta.json index dc6afcdd..9bca5a73 100644 --- a/mods/pi_cubed@pi_cubedsJokers/meta.json +++ b/mods/pi_cubed@pi_cubedsJokers/meta.json @@ -8,6 +8,6 @@ "author": "pi_cubed", "repo": "https://github.com/pi-cubed-cat/pi_cubeds_jokers", "downloadURL": "https://github.com/pi-cubed-cat/pi_cubeds_jokers/archive/refs/heads/main.zip", - "version": "76ba966", + "version": "352ced1", "automatic-version-check": true } diff --git a/mods/riosodu@black-seal/meta.json b/mods/riosodu@black-seal/meta.json index fda60412..545145b2 100644 --- a/mods/riosodu@black-seal/meta.json +++ b/mods/riosodu@black-seal/meta.json @@ -10,5 +10,6 @@ "downloadURL": "https://github.com/gfreitash/balatro-mods/releases/download/black-seal__latest/black-seal.zip", "folderName": "black-seal", "automatic-version-check": true, - "version": "black-seal__v3.2.9" + "fixed-release-tag-updates": true, + "version": "20250708_032640" } diff --git a/mods/riosodu@qol-bundle/meta.json b/mods/riosodu@qol-bundle/meta.json index a259eea0..ff23e611 100644 --- a/mods/riosodu@qol-bundle/meta.json +++ b/mods/riosodu@qol-bundle/meta.json @@ -10,5 +10,6 @@ "downloadURL": "https://github.com/gfreitash/balatro-mods/releases/download/qol-bundle__latest/qol-bundle.zip", "folderName": "qol-bundle", "automatic-version-check": true, - "version": "black-seal__v3.2.9" + "fixed-release-tag-updates": true, + "version": "20250708_032641" } diff --git a/mods/riosodu@rebalanced-stakes/meta.json b/mods/riosodu@rebalanced-stakes/meta.json index e92ad07a..c025fe07 100644 --- a/mods/riosodu@rebalanced-stakes/meta.json +++ b/mods/riosodu@rebalanced-stakes/meta.json @@ -11,5 +11,6 @@ "downloadURL": "https://github.com/gfreitash/balatro-mods/releases/download/rebalanced-stakes__latest/rebalanced-stakes.zip", "folderName": "rebalanced-stakes", "automatic-version-check": true, - "version": "black-seal__v3.2.9" + "fixed-release-tag-updates": true, + "version": "20250708_032641" } diff --git a/mods/stupxd@Cartomancer/meta.json b/mods/stupxd@Cartomancer/meta.json index c41c41cb..44da8d12 100644 --- a/mods/stupxd@Cartomancer/meta.json +++ b/mods/stupxd@Cartomancer/meta.json @@ -9,5 +9,5 @@ "repo": "https://github.com/stupxd/Cartomancer", "downloadURL": "https://github.com/stupxd/Cartomancer/archive/refs/heads/main.zip", "automatic-version-check": true, - "version": "662c833" + "version": "5489211" } diff --git a/mods/wingedcatgirl@reUnlockAll/meta.json b/mods/wingedcatgirl@reUnlockAll/meta.json index 7fe4518a..735dd3da 100644 --- a/mods/wingedcatgirl@reUnlockAll/meta.json +++ b/mods/wingedcatgirl@reUnlockAll/meta.json @@ -1,5 +1,6 @@ { "title": "re:Unlock All", + "folderName":"reUnlockAll", "requires-steamodded": false, "requires-talisman": false, "categories": [ diff --git a/schema/meta.schema.json b/schema/meta.schema.json index 21a3f85f..a88ead48 100644 --- a/schema/meta.schema.json +++ b/schema/meta.schema.json @@ -49,6 +49,9 @@ }, "automatic-version-check": { "type": "boolean" + }, + "fixed-release-tag-updates": { + "type": "boolean" } }, "required": [ @@ -60,5 +63,80 @@ "repo", "downloadURL", "version" + ], + "allOf": [ + { + "$comment": "This rule prevents accidental freezing of updates", + "not": { + "allOf": [ + { + "$comment": "'automatic-version-check' is true", + "properties": { + "automatic-version-check": { + "const": true + } + }, + "required": [ + "automatic-version-check" + ] + }, + { + "$comment": "'downloadURL' points to a specific release asset", + "properties": { + "downloadURL": { + "pattern": "^https?://github\\.com/[^/]+/[^/]+/releases/download/[^/]+/.+$" + } + }, + "required": [ + "downloadURL" + ] + }, + { + "$comment": "'fixed-release-tag-updates' is NOT true (i.e., it's false, or it's completely missing)", + "not": { + "properties": { + "fixed-release-tag-updates": { + "const": true + } + }, + "required": [ + "fixed-release-tag-updates" + ] + } + } + ] + }, + "errorMessage": "When 'downloadURL' points to a specific GitHub release asset AND 'automatic-version-check' is true, 'fixed-release-tag-updates' must also be true. This prevents accidental update freezing." + }, + { + "$comment": "This rule checks the value of 'fixed-release-tag-updates' and guarantees consistency", + "if": { + "properties": { + "fixed-release-tag-updates": { + "const": true + } + }, + "required": [ + "fixed-release-tag-updates" + ] + }, + "then": { + "$comment": "Conditions when 'fixed-release-tag-updates' is true", + "properties": { + "automatic-version-check": { + "const": true, + "errorMessage": "'automatic-version-check' must be true when 'fixed-release-tag-updates' is true." + }, + "downloadURL": { + "pattern": "^https?://github\\.com/[^/]+/[^/]+/releases/download/[^/]+/.+$", + "errorMessage": "When 'fixed-release-tag-updates' is true, 'downloadURL' must point to a specific GitHub specific release asset (e.g., '/releases/download/v1.0.0/asset.zip'), NOT a branch head or latest release URL." + } + }, + "required": [ + "automatic-version-check" + ], + "errorMessage": "When 'fixed-release-tag-updates' 'automatic-version-check' must be true, and 'downloadURL' must point to a specific release asset." + } + } ] }