mirror of
https://github.com/factoriotools/factorio-docker.git
synced 2025-06-27 20:48:04 +02:00
Use new version API to check update (#466)
* Use new version API
Update latest to experimental
* fix by shellcheck
* Revert "Auto Update Factorio to version:"
This reverts commit dfd442dfda
.
* Fix correct exit when online information get fails
This commit is contained in:
78
update.sh
78
update.sh
@ -1,11 +1,19 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
SEMVER_REGEX="^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"
|
||||
|
||||
version=$(curl 'https://www.factorio.com/updater/get-available-versions?apiVersion=2' | jq '.[] | .[] | select(.stable) | .stable' -r)
|
||||
sha256=$(curl "https://www.factorio.com/get-download/${version}/headless/linux64" -L | sha256sum | awk '{print $1}')
|
||||
currentversion=$(jq 'with_entries(select(contains({value:{tags:["stable"]}}))) | keys | .[0]' buildinfo.json -r)
|
||||
echo "version:$version currentversion:$currentversion"
|
||||
if [[ "$currentversion" == "$version" ]]; then
|
||||
stable_online_version=$(curl 'https://factorio.com/api/latest-releases' | jq '.stable.headless' -r)
|
||||
experimental_online_version=$(curl 'https://factorio.com/api/latest-releases' | jq '.experimental.headless' -r)
|
||||
stable_sha256=$(curl "https://www.factorio.com/get-download/${stable_online_version}/headless/linux64" -L | sha256sum | awk '{print $1}')
|
||||
experimental_sha256=$(curl "https://www.factorio.com/get-download/${experimental_online_version}/headless/linux64" -L | sha256sum | awk '{print $1}')
|
||||
stable_current_version=$(jq 'with_entries(select(contains({value:{tags:["stable"]}}))) | keys | .[0]' buildinfo.json -r)
|
||||
latest_current_version=$(jq 'with_entries(select(contains({value:{tags:["latest"]}}))) | keys | .[0]' buildinfo.json -r)
|
||||
echo "stable_online_version=${stable_online_version} experimental_online_version=${experimental_online_version}"
|
||||
echo "stable_current_version=${stable_current_version} latest_current_version=${latest_current_version}"
|
||||
if [[ -z "${stable_online_version}" ]] || [[ -z "${experimental_online_version}" ]]; then
|
||||
exit
|
||||
fi
|
||||
if [[ "${stable_current_version}" == "${stable_online_version}" ]] && [[ "${latest_current_version}" == "${experimental_online_version}" ]]; then
|
||||
exit
|
||||
fi
|
||||
|
||||
@ -19,39 +27,65 @@ function get-semver(){
|
||||
fi
|
||||
case $type in
|
||||
major)
|
||||
echo $major
|
||||
echo "$major"
|
||||
;;
|
||||
minor)
|
||||
echo $minor
|
||||
echo "$minor"
|
||||
;;
|
||||
patch)
|
||||
echo $patch
|
||||
echo "$patch"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
versionMajor=$(get-semver $version major)
|
||||
versionMinor=$(get-semver $version minor)
|
||||
currentversionMajor=$(get-semver $currentversion major)
|
||||
currentversionMinor=$(get-semver $currentversion minor)
|
||||
stableOnlineVersionMajor=$(get-semver "${stable_online_version}" major)
|
||||
stableOnlineVersionMinor=$(get-semver "${stable_online_version}" minor)
|
||||
experimentalOnlineVersionMajor=$(get-semver "${experimental_online_version}" major)
|
||||
experimentalOnlineVersionMinor=$(get-semver "${experimental_online_version}" minor)
|
||||
stableCurrentVersionMajor=$(get-semver "${stable_current_version}" major)
|
||||
stableCurrentVersionMinor=$(get-semver "${stable_current_version}" minor)
|
||||
latestCurrentVersionMajor=$(get-semver "${latest_current_version}" major)
|
||||
latestCurrentVersionMinor=$(get-semver "${latest_current_version}" minor)
|
||||
|
||||
versionShort=$versionMajor.$versionMinor
|
||||
currentversionShort=$currentversionMajor.$currentversionMinor
|
||||
echo "versionShort=$versionShort currentversionShort=$currentversionShort"
|
||||
stableOnlineVersionShort=$stableOnlineVersionMajor.$stableOnlineVersionMinor
|
||||
experimentalOnlineVersionShort=$experimentalOnlineVersionMajor.$experimentalOnlineVersionMinor
|
||||
stableCurrentVersionShort=$stableCurrentVersionMajor.$stableCurrentVersionMinor
|
||||
latestCurrentVersionShort=$latestCurrentVersionMajor.$latestCurrentVersionMinor
|
||||
|
||||
echo "stableOnlineVersionShort=${stableOnlineVersionShort} experimentalOnlineVersionShort=${experimentalOnlineVersionShort}"
|
||||
echo "stableCurrentVersionShort=${stableCurrentVersionShort} latestCurrentVersionShort=${latestCurrentVersionShort}"
|
||||
|
||||
tmpfile=$(mktemp)
|
||||
|
||||
# Remove latest tag
|
||||
cp buildinfo.json "$tmpfile"
|
||||
if [[ $versionShort == $currentversionShort ]]; then
|
||||
jq --arg currentversion $currentversion --arg version $version --arg sha256 $sha256 'with_entries(if .key == $currentversion then .key |= $version | .value.sha256 |= $sha256 | .value.tags |= . - [$currentversion] + [$version] else . end)' "$tmpfile" > buildinfo.json
|
||||
jq --arg latest_current_version "$latest_current_version" 'with_entries(if .key == $latest_current_version then .value.tags |= . - ["latest"] else . end)' "$tmpfile" > buildinfo.json
|
||||
rm -f -- "$tmpfile"
|
||||
|
||||
# Update tag by stable
|
||||
cp buildinfo.json "$tmpfile"
|
||||
if [[ $stableOnlineVersionShort == "$stableCurrentVersionShort" ]]; then
|
||||
jq --arg stable_current_version "$stable_current_version" --arg stable_online_version "$stable_online_version" --arg sha256 "$stable_sha256" 'with_entries(if .key == $stable_current_version then .key |= $stable_online_version | .value.sha256 |= $sha256 | .value.tags |= . - [$stable_current_version] + [$stable_online_version] else . end)' "$tmpfile" > buildinfo.json
|
||||
else
|
||||
jq --arg currentversion $currentversion --arg version $version --arg sha256 $sha256 --arg versionShort $versionShort --arg versionMajor $versionMajor 'with_entries(if .key == $currentversion then .value.tags |= . - ["latest","stable",$versionMajor] else . end) | to_entries | . + [{ key: $version, value: { sha256: $sha256, tags: ["latest","stable",$versionMajor,$versionShort,$version]}}] | from_entries' "$tmpfile" > buildinfo.json
|
||||
jq --arg stable_current_version "$stable_current_version" --arg stable_online_version "$stable_online_version" --arg sha256 "$stable_sha256" --arg stableOnlineVersionShort "$stableOnlineVersionShort" --arg stableOnlineVersionMajor "$stableOnlineVersionMajor" 'with_entries(if .key == $stable_current_version then .value.tags |= . - ["latest","stable",$stableOnlineVersionMajor] else . end) | to_entries | . + [{ key: $stable_online_version, value: { sha256: $sha256, tags: ["latest","stable",$stableOnlineVersionMajor,$stableOnlineVersionShort,$stable_online_version]}}] | from_entries' "$tmpfile" > buildinfo.json
|
||||
fi
|
||||
rm -f -- "$tmpfile"
|
||||
|
||||
readme_tags=$(cat buildinfo.json | jq --sort-keys 'keys[]' | tac | (while read line
|
||||
# Update tag by latest
|
||||
cp buildinfo.json "$tmpfile"
|
||||
if [[ $experimental_online_version != "$stable_online_version" ]]; then
|
||||
if [[ $stableOnlineVersionShort == "$experimentalOnlineVersionShort" ]]; then
|
||||
jq --arg experimental_online_version "$experimental_online_version" --arg stable_online_version "$stable_online_version" --arg sha256 "$experimental_sha256" 'with_entries(if .key == $stable_online_version then .value.tags |= . - ["latest"] else . end) | to_entries | . + [{ key: $experimental_online_version, value: { sha256: $sha256, tags: ["latest", $experimental_online_version]}}] | from_entries' "$tmpfile" > buildinfo.json
|
||||
else
|
||||
jq --arg experimental_online_version "$experimental_online_version" --arg stable_online_version "$stable_online_version" --arg sha256 "$experimental_sha256" --arg experimentalOnlineVersionShort "$experimentalOnlineVersionShort" --arg experimentalOnlineVersionMajor "$experimentalOnlineVersionMajor" 'with_entries(if .key == $stable_online_version then .value.tags |= . - ["latest"] else . end) | to_entries | . + [{ key: $experimental_online_version, value: { sha256: $sha256, tags: ["latest",$experimentalOnlineVersionMajor,$experimentalOnlineVersionShort,$experimental_online_version]}}] | from_entries' "$tmpfile" > buildinfo.json
|
||||
fi
|
||||
fi
|
||||
rm -f -- "$tmpfile"
|
||||
|
||||
readme_tags=$(jq --sort-keys 'keys[]' buildinfo.json | tac | (while read -r line
|
||||
do
|
||||
tags="$tags\n* "$(cat buildinfo.json | jq --sort-keys ".$line.tags | sort | .[]" | sed 's/"/`/g' | sed ':a; /$/N; s/\n/, /; ta')
|
||||
done && echo $tags"\n"))
|
||||
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
|
||||
|
||||
@ -60,7 +94,7 @@ git config user.email 41898282+github-actions[bot]@users.noreply.github.com
|
||||
|
||||
git add buildinfo.json
|
||||
git add README.md
|
||||
git commit -a -m "Auto Update Factorio to version: $version"
|
||||
git commit -a -m "Auto Update Factorio to stable version: ${stable_online_version} experimental version: ${experimental_online_version}"
|
||||
|
||||
git tag -f latest
|
||||
git push
|
||||
|
Reference in New Issue
Block a user