1
0
Files
balatro-mod-index/.github/workflows/check-mod.yml
2025-03-08 19:22:57 +01:00

150 lines
5.4 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: Validate Balatro Mods
on:
pull_request:
paths:
- "mods/**"
jobs:
validate:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v3
with:
fetch-depth: 0 # Get full history for comparing changes
- name: Install ImageMagick
run: |
sudo apt-get update
sudo apt-get install -y imagemagick
- name: Identify Changed Mods
id: find-changed-mods
run: |
# Fetch the base branch of the PR
git fetch origin ${{ github.event.pull_request.base.ref }}
# Find all added or modified files in mods directory
git diff --name-only --diff-filter=AM origin/${{ github.event.pull_request.base.ref }}..HEAD | grep -E '^mods/[^/]+/' | cut -d'/' -f1-2 | sort | uniq > changed_mods.txt
if [ ! -s changed_mods.txt ]; then
echo "No mods were added or modified in this PR."
echo "changed_mods_found=false" >> $GITHUB_OUTPUT
exit 0
fi
echo "Changed mods found:"
cat changed_mods.txt
echo "changed_mods_found=true" >> $GITHUB_OUTPUT
# Create a comma-separated list for JSON schema validation
META_JSON_FILES=""
while read -r mod_path; do
if [ -f "$mod_path/meta.json" ]; then
if [ -z "$META_JSON_FILES" ]; then
META_JSON_FILES="$mod_path/meta.json"
else
META_JSON_FILES="$META_JSON_FILES,$mod_path/meta.json"
fi
fi
done < changed_mods.txt
echo "meta_json_files=$META_JSON_FILES" >> $GITHUB_OUTPUT
- name: Check Required Files
if: steps.find-changed-mods.outputs.changed_mods_found == 'true'
run: |
while read -r mod_path; do
if [ -d "$mod_path" ]; then
MOD_DIR="$(basename "$mod_path")"
# Ensure description.md and meta.json exist
if [ ! -f "$mod_path/description.md" ]; then
echo "Error: Missing description.md in $MOD_DIR"
exit 1
fi
if [ ! -f "$mod_path/meta.json" ]; then
echo "Error: Missing meta.json in $MOD_DIR"
exit 1
fi
fi
done < changed_mods.txt
- name: Check Thumbnail Dimensions
if: steps.find-changed-mods.outputs.changed_mods_found == 'true'
run: |
while read -r mod_path; do
if [ -d "$mod_path" ]; then
MOD_DIR="$(basename "$mod_path")"
THUMBNAIL="$mod_path/thumbnail.jpg"
if [ -f "$THUMBNAIL" ]; then
# Extract width and height using ImageMagick
DIMENSIONS=$(identify -format "%wx%h" "$THUMBNAIL")
WIDTH=$(echo "$DIMENSIONS" | cut -dx -f1)
HEIGHT=$(echo "$DIMENSIONS" | cut -dx -f2)
# Check if dimensions exceed 1920x1080
if [ "$WIDTH" -gt 1920 ] || [ "$HEIGHT" -gt 1080 ]; then
echo "Error: Thumbnail in $MOD_DIR exceeds the recommended size of 1920×1080."
exit 1
fi
fi
fi
done < changed_mods.txt
- name: Validate JSON Format
if: steps.find-changed-mods.outputs.changed_mods_found == 'true'
run: |
# Use jq to validate each JSON file
while read -r mod_path; do
if [ -f "$mod_path/meta.json" ]; then
if ! jq empty "$mod_path/meta.json" 2>/dev/null; then
echo "Error: Invalid JSON format in $mod_path/meta.json"
exit 1
fi
fi
done < changed_mods.txt
- name: Validate meta.json Against Schema
if: steps.find-changed-mods.outputs.changed_mods_found == 'true'
uses: dsanders11/json-schema-validate-action@v1.2.0
with:
schema: "./schema/meta.schema.json"
files: ${{ steps.find-changed-mods.outputs.meta_json_files }}
- name: Validate Download URLs
if: steps.find-changed-mods.outputs.changed_mods_found == 'true'
run: |
while read -r mod_path; do
if [ -d "$mod_path" ]; then
MOD_DIR="$(basename "$mod_path")"
META_JSON="$mod_path/meta.json"
# Check if downloadURL exists and is not empty
DOWNLOAD_URL=$(jq -r '.downloadURL // empty' "$META_JSON")
if [ -z "$DOWNLOAD_URL" ]; then
echo "Error: Missing or empty downloadURL in $MOD_DIR/meta.json"
exit 1
fi
# Optional: Check if URL is accessible
if ! curl --output /dev/null --silent --head --fail "$DOWNLOAD_URL"; then
echo "Error: downloadURL in $MOD_DIR/meta.json is not accessible"
exit 1
fi
fi
done < changed_mods.txt
review-and-approve:
needs: validate # This job will only run after 'validate' completes successfully.
runs-on: ubuntu-latest
environment:
name: mod-review # This is the environment you created earlier.
steps:
- name: Await Approval from Maintainers
run: echo "Waiting for manual approval by maintainers..."