mirror of
https://github.com/factoriotools/factorio-docker.git
synced 2025-07-03 23:48:05 +02:00
Compare commits
1 Commits
master
...
fix-preset
Author | SHA1 | Date | |
---|---|---|---|
03589716dd |
56
README.md
56
README.md
@ -6,9 +6,59 @@
|
||||
[中文](./README_zh_CN.md)
|
||||
|
||||
<!-- start autogeneration tags -->
|
||||
* `latest, 2.0.58`
|
||||
* `2, 2.0, 2.0.55, stable, stable-2.0.55`
|
||||
<!-- end autogeneration tags -->
|
||||
* `2.0.58`, `latest`
|
||||
* `2.0.57`
|
||||
* `2`, `2.0`, `2.0.55`, `stable`, `stable-2.0.55`
|
||||
* `2.0.54`
|
||||
* `2.0.53`
|
||||
* `2.0.52`
|
||||
* `2.0.51`
|
||||
* `2.0.50`
|
||||
* `2.0.49`
|
||||
* `2.0.48`
|
||||
* `2.0`, `2.0.47`, `stable-2.0.47`
|
||||
* `2.0.46`
|
||||
* `2.0.45`
|
||||
* `2.0.44`
|
||||
* `2.0`, `2.0.43`, `stable-2.0.43`
|
||||
* `2.0`, `2.0.42`, `stable-2.0.42`
|
||||
* `2.0`, `2.0.41`, `stable-2.0.41`
|
||||
* `2.0.40`
|
||||
* `2.0`, `2.0.39`, `stable-2.0.39`
|
||||
* `2.0.38`
|
||||
* `2.0.37`
|
||||
* `2.0.36`
|
||||
* `2.0.35`
|
||||
* `2.0.34`
|
||||
* `2.0.33`
|
||||
* `2.0`, `2.0.32`, `stable-2.0.32`
|
||||
* `2.0.31`
|
||||
* `2.0`, `2.0.30`, `stable-2.0.30`
|
||||
* `2.0.29`
|
||||
* `2.0`, `2.0.28`, `stable-2.0.28`
|
||||
* `2.0.27`
|
||||
* `2.0.26`
|
||||
* `2.0.25`
|
||||
* `2.0.24`
|
||||
* `2.0`, `2.0.23`, `stable-2.0.23`
|
||||
* `2.0.22`
|
||||
* `2.0`, `2.0.21`, `stable-2.0.21`
|
||||
* `2.0`, `2.0.20`, `stable-2.0.20`
|
||||
* `2.0.19`
|
||||
* `2.0.18`
|
||||
* `2.0.17`
|
||||
* `2.0.16`
|
||||
* `2.0`, `2.0.15`, `stable-2.0.15`
|
||||
* `2.0`, `2.0.14`, `stable-2.0.14`
|
||||
* `2.0`, `2.0.13`, `stable-2.0.13`
|
||||
* `1`, `1.1`, `1.1.110`, `stable-1.1.110`
|
||||
* `1.0`, `1.0.0`
|
||||
* `0.17`, `0.17.79`
|
||||
* `0.16`, `0.16.51`
|
||||
* `0.15`, `0.15.40`
|
||||
* `0.14`, `0.14.23`
|
||||
* `0.13`, `0.13.20`
|
||||
* `0.12`, `0.12.35`<!-- end autogeneration tags -->
|
||||
|
||||
## Tag descriptions
|
||||
|
||||
|
@ -23,128 +23,6 @@ print_failure()
|
||||
echo "$1"
|
||||
}
|
||||
|
||||
# Checks game version vs version in mod.
|
||||
# Returns 0 if major version differs or mod minor version is less than game version, 1 if ok
|
||||
check_game_version() {
|
||||
local game_version="$1"
|
||||
local mod_version="$2"
|
||||
|
||||
local game_major mod_major game_minor mod_minor
|
||||
game_major=$(echo "$game_version" | cut -d '.' -f1)
|
||||
game_minor=$(echo "$game_version" | cut -d '.' -f2)
|
||||
mod_major=$(echo "$mod_version" | cut -d '.' -f1)
|
||||
mod_minor=$(echo "$mod_version" | cut -d '.' -f2)
|
||||
|
||||
if [[ "$game_major" -ne "$mod_major" ]]; then
|
||||
echo 0
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ "$mod_minor" -ge "$game_minor" ]]; then
|
||||
echo 1
|
||||
else
|
||||
echo 0
|
||||
fi
|
||||
}
|
||||
|
||||
# Checks dependency string with provided version.
|
||||
# Only checks for operator based string, ignoring everything else
|
||||
# Returns 1 if check is ok, 0 if not
|
||||
check_dependency_version()
|
||||
{
|
||||
local dependency="$1"
|
||||
local mod_version="$2"
|
||||
|
||||
if [[ "$dependency" =~ ^(\?|!|~|\(~\)) ]]; then
|
||||
echo 1
|
||||
fi
|
||||
|
||||
local condition
|
||||
condition=$(echo "$dependency" | grep -oE '(>=|<=|>|<|=) [0-9]+(\.[0-9]+)*')
|
||||
|
||||
if [[ -z "$condition" ]]; then
|
||||
echo 1
|
||||
fi
|
||||
|
||||
local operator required_version
|
||||
operator=$(echo "$condition" | awk '{print $1}')
|
||||
required_version=$(echo "$condition" | awk '{print $2}')
|
||||
|
||||
case "$operator" in
|
||||
">=")
|
||||
if [[ "$(printf '%s\n%s\n' "$required_version" "$mod_version" | sort -V | head -n1)" == "$required_version" ]]; then
|
||||
echo 1
|
||||
else
|
||||
echo 0
|
||||
fi
|
||||
;;
|
||||
">")
|
||||
if [[ "$(printf '%s\n%s\n' "$required_version" "$mod_version" | sort -V | head -n1)" == "$required_version" && "$required_version" != "$FACTORIO_VERSION" ]]; then
|
||||
echo 1
|
||||
else
|
||||
echo 0
|
||||
fi
|
||||
;;
|
||||
"<=")
|
||||
if [[ "$(printf '%s\n%s\n' "$required_version" "$mod_version" | sort -V | tail -n1)" == "$required_version" ]]; then
|
||||
echo 1
|
||||
else
|
||||
echo 0
|
||||
fi
|
||||
;;
|
||||
"<")
|
||||
if [[ "$(printf '%s\n%s\n' "$required_version" "$mod_version" | sort -V | tail -n1)" == "$required_version" && "$required_version" != "$FACTORIO_VERSION" ]]; then
|
||||
echo 1
|
||||
else
|
||||
echo 0
|
||||
fi
|
||||
;;
|
||||
"=")
|
||||
if [[ "$mod_version" == "$required_version" ]]; then
|
||||
echo 1
|
||||
else
|
||||
echo 0
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo 0
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
get_mod_info()
|
||||
{
|
||||
local mod_info_json="$1"
|
||||
|
||||
while IFS= read -r mod_release_info; do
|
||||
local mod_version mod_factorio_version
|
||||
mod_version=$(echo "$mod_release_info" | jq -r ".version")
|
||||
mod_factorio_version=$(echo "$mod_release_info" | jq -r ".info_json.factorio_version")
|
||||
|
||||
if [[ $(check_game_version "$mod_factorio_version" "$FACTORIO_VERSION") == 0 ]]; then
|
||||
echo " Skipping mod version $mod_version because of factorio version mismatch" >&2
|
||||
continue
|
||||
fi
|
||||
|
||||
# If we found 'dependencies' element, we also check versions there
|
||||
if [[ $(echo "$mod_release_info" | jq -e '.info_json | has("dependencies") and (.dependencies | length > 0)') == true ]]; then
|
||||
while IFS= read -r dependency; do
|
||||
|
||||
# We only check for 'base' dependency
|
||||
if [[ "$dependency" == base* ]] && [[ $(check_dependency_version "$dependency" "$FACTORIO_VERSION") == 0 ]]; then
|
||||
echo " Skipping mod version $mod_version, unsatisfied base dependency: $dependency" >&2
|
||||
continue 2
|
||||
fi
|
||||
|
||||
done < <(echo "$mod_release_info" | jq -r '.info_json.dependencies[]')
|
||||
fi
|
||||
|
||||
echo "$mod_release_info" | jq -j ".file_name, \";\", .download_url, \";\", .sha1"
|
||||
break
|
||||
|
||||
done < <(echo "$mod_info_json" | jq -c ".releases|sort_by(.released_at)|reverse|.[]")
|
||||
}
|
||||
|
||||
update_mod()
|
||||
{
|
||||
MOD_NAME="$1"
|
||||
@ -152,7 +30,7 @@ update_mod()
|
||||
|
||||
print_step "Checking for update of mod $MOD_NAME for factorio $FACTORIO_VERSION ..."
|
||||
|
||||
MOD_INFO_URL="$MOD_BASE_URL/api/mods/$MOD_NAME_ENCODED/full"
|
||||
MOD_INFO_URL="$MOD_BASE_URL/api/mods/$MOD_NAME_ENCODED"
|
||||
MOD_INFO_JSON=$(curl --silent "$MOD_INFO_URL")
|
||||
|
||||
if ! echo "$MOD_INFO_JSON" | jq -e .name >/dev/null; then
|
||||
@ -160,12 +38,7 @@ update_mod()
|
||||
return 0
|
||||
fi
|
||||
|
||||
MOD_INFO=$(get_mod_info "$MOD_INFO_JSON")
|
||||
|
||||
if [[ "$MOD_INFO" == "" ]]; then
|
||||
print_failure " Not compatible with version"
|
||||
return 0
|
||||
fi
|
||||
MOD_INFO=$(echo "$MOD_INFO_JSON" | jq -j --arg version "$FACTORIO_VERSION" ".releases|reverse|map(select(.info_json.factorio_version as \$mod_version | \$version | startswith(\$mod_version)))[0]|.file_name, \";\", .download_url, \";\", .sha1")
|
||||
|
||||
MOD_FILENAME=$(echo "$MOD_INFO" | cut -f1 -d";")
|
||||
MOD_URL=$(echo "$MOD_INFO" | cut -f2 -d";")
|
||||
@ -217,7 +90,7 @@ update_mod()
|
||||
if [[ -f $MOD_DIR/mod-list.json ]]; then
|
||||
jq -r ".mods|map(select(.enabled))|.[].name" "$MOD_DIR/mod-list.json" | while read -r mod; do
|
||||
if [[ $mod != base ]]; then
|
||||
update_mod "$mod" || true
|
||||
update_mod "$mod"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
62
update.sh
62
update.sh
@ -91,64 +91,10 @@ if [[ $experimental_online_version != "$stable_online_version" ]]; then
|
||||
fi
|
||||
rm -f -- "$tmpfile"
|
||||
|
||||
# Generate README tags with logical sorting and de-duplication
|
||||
# First, collect all unique tags with their versions
|
||||
declare -A tag_versions
|
||||
while IFS= read -r version; do
|
||||
while IFS= read -r tag; do
|
||||
# If this tag is already seen, compare versions to keep the latest
|
||||
if [[ -n "${tag_versions[$tag]}" ]]; then
|
||||
# Compare version strings - keep the higher one
|
||||
if [[ "$version" > "${tag_versions[$tag]}" ]]; then
|
||||
tag_versions[$tag]="$version"
|
||||
fi
|
||||
else
|
||||
tag_versions[$tag]="$version"
|
||||
fi
|
||||
done < <(jq -r ".\"$version\".tags[]" buildinfo.json)
|
||||
done < <(jq -r 'keys[]' buildinfo.json | sort -V -r)
|
||||
|
||||
# Build the tags list for README
|
||||
readme_tags=""
|
||||
# First add the current latest and stable tags
|
||||
latest_version=$(jq -r 'to_entries | map(select(.value.tags | contains(["latest"]))) | .[0].key' buildinfo.json)
|
||||
stable_version=$(jq -r 'to_entries | map(select(.value.tags | index("stable"))) | .[0].key' buildinfo.json)
|
||||
|
||||
if [[ -n "$latest_version" ]]; then
|
||||
latest_tags=$(jq -r ".\"$latest_version\".tags | map(select(. == \"latest\" or . == \"$latest_version\")) | join(\", \")" buildinfo.json | sed 's/"/`/g')
|
||||
readme_tags="${readme_tags}\n* \`${latest_tags}\`"
|
||||
fi
|
||||
|
||||
if [[ -n "$stable_version" ]] && [[ "$stable_version" != "$latest_version" ]]; then
|
||||
stable_tags=$(jq -r ".\"$stable_version\".tags | sort | join(\", \")" buildinfo.json | sed 's/"/`/g')
|
||||
readme_tags="${readme_tags}\n* \`${stable_tags}\`"
|
||||
fi
|
||||
|
||||
# Add major.minor tags (e.g., 2.0, 1.1) - only the latest version for each
|
||||
declare -A major_minor_seen
|
||||
while IFS= read -r version; do
|
||||
if [[ "$version" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
|
||||
major="${BASH_REMATCH[1]}"
|
||||
minor="${BASH_REMATCH[2]}"
|
||||
major_minor="$major.$minor"
|
||||
|
||||
# Skip if this is the latest or stable version (already added above)
|
||||
if [[ "$version" == "$latest_version" ]] || [[ "$version" == "$stable_version" ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# Only add if we haven't seen this major.minor yet
|
||||
if [[ -z "${major_minor_seen[$major_minor]}" ]]; then
|
||||
major_minor_seen[$major_minor]=1
|
||||
tags=$(jq -r ".\"$version\".tags | join(\", \")" buildinfo.json | sed 's/"/`/g')
|
||||
if [[ -n "$tags" ]]; then
|
||||
readme_tags="${readme_tags}\n* \`${tags}\`"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done < <(jq -r 'keys[]' buildinfo.json | sort -V -r)
|
||||
|
||||
readme_tags="${readme_tags}\n"
|
||||
readme_tags=$(jq --sort-keys 'keys[]' buildinfo.json | tac | (while read -r line
|
||||
do
|
||||
tags="$tags\n* "$(jq --sort-keys ".$line.tags | sort | .[]" buildinfo.json | sed 's/"/`/g' | sed ':a; /$/N; s/\n/, /; ta')
|
||||
done && printf "%s\n\n" "$tags"))
|
||||
|
||||
perl -i -0777 -pe "s/<!-- start autogeneration tags -->.+<!-- end autogeneration tags -->/<!-- start autogeneration tags -->$readme_tags<!-- end autogeneration tags -->/s" README.md
|
||||
|
||||
|
Reference in New Issue
Block a user