Skip to content

Commit

Permalink
bash script version watchdog (#462)
Browse files Browse the repository at this point in the history
* impl version watchdog

* Update update.sh

Co-authored-by: Florian Kinder <florian.kinder@fankserver.com>

* increase update check frequency to per hour

* Update .github/workflows/update.yml

Co-authored-by: Sandro <sandro.jaeckel@gmail.com>

* Update update.sh

Co-authored-by: Sandro <sandro.jaeckel@gmail.com>

* Update update.sh

Co-authored-by: Sandro <sandro.jaeckel@gmail.com>

* Update .github/workflows/update.yml

Co-authored-by: Sandro <sandro.jaeckel@gmail.com>

* prevent schedule running on fork

---------

Co-authored-by: Florian Kinder <florian.kinder@fankserver.com>
Co-authored-by: Sandro <sandro.jaeckel@gmail.com>
  • Loading branch information
3 people committed Apr 15, 2023
1 parent d904807 commit 69e7d8e
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ name: Docker build

on:
pull_request:
push:
tags:
- latest

jobs:
build:
Expand Down
24 changes: 24 additions & 0 deletions .github/workflows/update.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: Check Update

on:
schedule:
- cron: "0 * * * *"
workflow_dispatch:
inputs:
desc:
description: "desc"
required: false

jobs:
build:
runs-on: ubuntu-latest
if: github.event_name != 'schedule' || (github.event_name == 'schedule' && github.repository == 'factoriotools/factorio-docker')

steps:
- uses: actions/checkout@v3
with:
token: ${{ secrets.REPO_TOKEN }}

- name: Run update script
run: ./update.sh
shell: bash
57 changes: 57 additions & 0 deletions update.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#!/bin/bash
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
exit
fi

function get-semver(){
local ver=$1
local type=$2
if [[ "$ver" =~ $SEMVER_REGEX ]]; then
local major=${BASH_REMATCH[1]}
local minor=${BASH_REMATCH[2]}
local patch=${BASH_REMATCH[3]}
fi
case $type in
major)
echo $major
;;
minor)
echo $minor
;;
patch)
echo $patch
;;
esac
}

versionMajor=$(get-semver $version major)
versionMinor=$(get-semver $version minor)
currentversionMajor=$(get-semver $currentversion major)
currentversionMinor=$(get-semver $currentversion minor)

versionShort=$versionMajor.$versionMinor
currentversionShort=$currentversionMajor.$currentversionMinor
echo "versionShort=$versionShort currentversionShort=$currentversionShort"

tmpfile=$(mktemp)
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
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
fi
rm -f -- "$tmpfile"

git config user.name github-actions[bot]
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
git add buildinfo.json
git commit -a -m "Auto Update Factorio to version: $version"
git tag -f latest
git push
git push origin --tags -f

0 comments on commit 69e7d8e

Please sign in to comment.