Skip to content

Add package: text-map-tile-map.mpackage #313

Add package: text-map-tile-map.mpackage

Add package: text-map-tile-map.mpackage #313

name: Validate mpackage file
on:
pull_request:
paths:
- 'packages/*.mpackage'
- 'packages/*.zip'
jobs:
check-mpackage-contents:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@master
- uses: leafo/gh-actions-lua@v10
with:
luaVersion: "5.1.5"
- name: Only one file per PR is allowed
id: check-file-count
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
FILE=$(gh pr view ${{ github.event.pull_request.number }} --json files --jq '.files[].path')
# check only 1 file has been uploaded per PR
if [ `echo "$FILE" |wc -l` -gt 1 ]; then
echo "Error: Only one package file per pull request please."
exit 1
else
echo "Pass: just one file uploaded."
fi
echo "FILE=$FILE" >> $GITHUB_OUTPUT
- name: Unzip the mpackage and check config.lua exists
id: unzip-mpackage-file
run: |
FILE="${{ steps.check-file-count.outputs.FILE }}"
echo "${FILE}"
# unzip the mpackage
unzip -q -o "${FILE}" -d unzipped_package
ls -al unzipped_package
#only valid if it has a config.lua
if [ -f "unzipped_package/config.lua" ]; then
echo "Pass: config.lua is present"
else
echo "Error: config.lua is missing."
exit 1
fi
- name: Check config.lua contains all required information
id: check-config-lua
run: |
FILE="${{ steps.check-file-count.outputs.FILE }}"
# grep for some vital details
if grep -q "mpackage =" unzipped_package/config.lua; then
echo "Pass: has a valid mpackage name"
else
echo "Error: not a valid mpackage file"
exit 1
fi
if grep -q "title =" unzipped_package/config.lua; then
echo "Pass: has a valid title"
else
echo "Error: does not contain a valid title"
exit 1
fi
if grep -q "version =" unzipped_package/config.lua; then
echo "Pass: config.lua contains a version number"
else
echo "Error: does not contain a version number"
exit 1
fi
if grep -q "created =" unzipped_package/config.lua; then
echo "Pass: has a valid creation date"
else
echo "Error: not a valid creation date"
exit 1
fi
if grep -q "author =" unzipped_package/config.lua; then
echo "Pass: has a valid author name"
else
echo "Error: does not contain a valid author name"
exit 1
fi
if grep -q "description =" unzipped_package/config.lua; then
echo "Pass: has a valid description"
else
echo "Error: does not contain a valid description"
exit 1
fi
- name: Extract package name and author, check for duplicates
id: check-package-name
run: |
# Extract the package name and author from config.lua
PACKAGE_NAME=$(lua -e "dofile('unzipped_package/config.lua'); print(_G['mpackage'])")
PACKAGE_AUTHOR=$(lua -e "dofile('unzipped_package/config.lua'); print(_G['author'])")
echo "Package name: $PACKAGE_NAME"
echo "Package author: $PACKAGE_AUTHOR"
# Get current PR file name
CURRENT_FILE="${{ steps.check-file-count.outputs.FILE }}"
CURRENT_BASENAME=$(basename "${CURRENT_FILE}")
# Create temporary directory for checking other packages
mkdir temp_check
# Extract config.lua from all other packages, excluding current one if it exists
for package in packages/*.{mpackage,zip}; do
if [ "$package" != "${CURRENT_FILE}" ]; then
BASENAME=$(basename "$package")
unzip -q -o "$package" config.lua -d "temp_check/${BASENAME}"
fi
done
# Check for case-insensitive duplicates with different authors
for config in temp_check/**/config.lua; do
if [ -f "$config" ]; then
OTHER_NAME=$(lua -e "dofile('$config'); print(_G['mpackage'])")
OTHER_AUTHOR=$(lua -e "dofile('$config'); print(_G['author'])")
if [ "${PACKAGE_NAME,,}" = "${OTHER_NAME,,}" ] && [ "${PACKAGE_AUTHOR,,}" != "${OTHER_AUTHOR,,}" ]; then
echo "Error: Package name '$PACKAGE_NAME' by '$PACKAGE_AUTHOR' conflicts with existing package '$OTHER_NAME' by '$OTHER_AUTHOR'"
exit 1
fi
fi
done
echo "Pass: No conflicting package names found"
echo "PACKAGE_NAME=$PACKAGE_NAME" >> $GITHUB_OUTPUT
echo "PACKAGE_AUTHOR=$PACKAGE_AUTHOR" >> $GITHUB_OUTPUT