Compare commits

...

12 Commits

8 changed files with 85 additions and 62 deletions

View File

@ -9,8 +9,8 @@ ARG PGID=845
ENV PORT=34197 \ ENV PORT=34197 \
RCON_PORT=27015 \ RCON_PORT=27015 \
VERSION=0.17.54 \ VERSION=0.17.55 \
SHA1=69750604bc9036abdf5e9297dfc975f80b52c573 \ SHA1=559bd04c688ee1975d4e5a81a8cb33cd61659d65 \
SAVES=/factorio/saves \ SAVES=/factorio/saves \
CONFIG=/factorio/config \ CONFIG=/factorio/config \
MODS=/factorio/mods \ MODS=/factorio/mods \

View File

@ -1,7 +1,5 @@
#!/bin/bash -x #!/bin/bash
set -euo pipefail set -eoux pipefail
id
FACTORIO_VOL=/factorio FACTORIO_VOL=/factorio
mkdir -p "$FACTORIO_VOL" mkdir -p "$FACTORIO_VOL"
@ -11,26 +9,26 @@ mkdir -p "$MODS"
mkdir -p "$SCENARIOS" mkdir -p "$SCENARIOS"
mkdir -p "$SCRIPTOUTPUT" mkdir -p "$SCRIPTOUTPUT"
if [ ! -f "$CONFIG/rconpw" ]; then if [[ ! -f $CONFIG/rconpw ]]; then
# Generate a new RCON password if none exists # Generate a new RCON password if none exists
pwgen 15 1 >"$CONFIG/rconpw" pwgen 15 1 >"$CONFIG/rconpw"
fi fi
if [ ! -f "$CONFIG/server-settings.json" ]; then if [[ ! -f $CONFIG/server-settings.json ]]; then
# Copy default settings if server-settings.json doesn't exist # Copy default settings if server-settings.json doesn't exist
cp /opt/factorio/data/server-settings.example.json "$CONFIG/server-settings.json" cp /opt/factorio/data/server-settings.example.json "$CONFIG/server-settings.json"
fi fi
if [ ! -f "$CONFIG/map-gen-settings.json" ]; then if [[ ! -f $CONFIG/map-gen-settings.json ]]; then
cp /opt/factorio/data/map-gen-settings.example.json "$CONFIG/map-gen-settings.json" cp /opt/factorio/data/map-gen-settings.example.json "$CONFIG/map-gen-settings.json"
fi fi
if [ ! -f "$CONFIG/map-settings.json" ]; then if [[ ! -f $CONFIG/map-settings.json ]]; then
cp /opt/factorio/data/map-settings.example.json "$CONFIG/map-settings.json" cp /opt/factorio/data/map-settings.example.json "$CONFIG/map-settings.json"
fi fi
NRTMPSAVES=$( find -L "$SAVES" -iname \*.tmp.zip -mindepth 1 | wc -l ) NRTMPSAVES=$( find -L "$SAVES" -iname \*.tmp.zip -mindepth 1 | wc -l )
if [ "$NRTMPSAVES" -gt 0 ]; then if [[ $NRTMPSAVES -gt 0 ]]; then
# Delete incomplete saves (such as after a forced exit) # Delete incomplete saves (such as after a forced exit)
rm -f "$SAVES"/*.tmp.zip rm -f "$SAVES"/*.tmp.zip
fi fi
@ -39,7 +37,7 @@ if [[ ${UPDATE_MODS_ON_START:-} ]]; then
./docker-update-mods.sh ./docker-update-mods.sh
fi fi
if [ "$(id -u)" = '0' ]; then if [[ $(id -u) = 0 ]]; then
# Update the User and Group ID based on the PUID/PGID variables # Update the User and Group ID based on the PUID/PGID variables
usermod -o -u "$PUID" factorio usermod -o -u "$PUID" factorio
groupmod -o -g "$PGID" factorio groupmod -o -g "$PGID" factorio
@ -51,8 +49,8 @@ else
SU_EXEC="" SU_EXEC=""
fi fi
NRSAVES=$( find -L "$SAVES" -iname \*.zip -mindepth 1 | wc -l ) NRSAVES=$(find -L "$SAVES" -iname \*.zip -mindepth 1 | wc -l)
if [ "$NRSAVES" -eq 0 ]; then if [[ $NRSAVES -eq 0 ]]; then
# Generate a new map if no save ZIPs exist # Generate a new map if no save ZIPs exist
$SU_EXEC /opt/factorio/bin/x64/factorio \ $SU_EXEC /opt/factorio/bin/x64/factorio \
--create "$SAVES/_autosave1.zip" \ --create "$SAVES/_autosave1.zip" \

View File

@ -1,4 +1,5 @@
#!/bin/bash #!/bin/bash
set -eou pipefail
if [[ -f /run/secrets/username ]]; then if [[ -f /run/secrets/username ]]; then
USERNAME=$(cat /run/secrets/username) USERNAME=$(cat /run/secrets/username)
@ -8,10 +9,20 @@ if [[ -f /run/secrets/username ]]; then
TOKEN=$(cat /run/secrets/token) TOKEN=$(cat /run/secrets/token)
fi fi
if [[ -z $TOKEN ]]; then if [[ -z ${USERNAME:-} ]]; then
set -- "$(jq -j ".username, \" \", .token" "$CONFIG/server-settings.json")" USERNAME="$(jq -j ".username" "$CONFIG/server-settings.json")"
USERNAME=$1 fi
TOKEN=$2
if [[ -z ${TOKEN:-} ]]; then
TOKEN="$(jq -j ".token" "$CONFIG/server-settings.json")"
fi
if [[ -z ${USERNAME:-} ]]; then
echo "You need to provide your Factorio username to update mods."
fi
if [[ -z ${TOKEN:-} ]]; then
echo "You need to provide your Factorio token to update mods."
fi fi
./update-mods.sh "$VERSION" "$MODS" "$USERNAME" "$TOKEN" ./update-mods.sh "$VERSION" "$MODS" "$USERNAME" "$TOKEN"

View File

@ -1,13 +1,11 @@
#!/bin/bash -x #!/bin/bash
if [ -z "$1" ]; then set -eoux pipefail
if [[ -z ${1:-} ]]; then
echo "No argument supplied" echo "No argument supplied"
fi fi
SERVER_SCENARIO="$1" SERVER_SCENARIO="$1"
set -euo pipefail
id
mkdir -p "$SAVES" mkdir -p "$SAVES"
mkdir -p "$CONFIG" mkdir -p "$CONFIG"
mkdir -p "$MODS" mkdir -p "$MODS"
@ -15,19 +13,19 @@ mkdir -p "$SCENARIOS"
#chown -R factorio /factorio #chown -R factorio /factorio
if [ ! -f "$CONFIG/rconpw" ]; then if [[ ! -f $CONFIG/rconpw ]]; then
pwgen 15 1 >"$CONFIG/rconpw" pwgen 15 1 >"$CONFIG/rconpw"
fi fi
if [ ! -f "$CONFIG/server-settings.json" ]; then if [[ ! -f $CONFIG/server-settings.json ]]; then
cp /opt/factorio/data/server-settings.example.json "$CONFIG/server-settings.json" cp /opt/factorio/data/server-settings.example.json "$CONFIG/server-settings.json"
fi fi
if [ ! -f "$CONFIG/map-gen-settings.json" ]; then if [[ ! -f $CONFIG/map-gen-settings.json ]]; then
cp /opt/factorio/data/map-gen-settings.example.json "$CONFIG/map-gen-settings.json" cp /opt/factorio/data/map-gen-settings.example.json "$CONFIG/map-gen-settings.json"
fi fi
if [ ! -f "$CONFIG/map-settings.json" ]; then if [[ ! -f $CONFIG/map-settings.json ]]; then
cp /opt/factorio/data/map-settings.example.json "$CONFIG/map-settings.json" cp /opt/factorio/data/map-settings.example.json "$CONFIG/map-settings.json"
fi fi

View File

@ -1,27 +1,25 @@
#!/bin/bash -x #!/bin/bash
if [ -z "$1" ]; then set -eoux pipefail
if [[ -z ${1:-} ]]; then
echo "No argument supplied" echo "No argument supplied"
fi fi
SERVER_SCENARIO="$1" SERVER_SCENARIO="$1"
set -euo pipefail
id
mkdir -p "$SAVES" mkdir -p "$SAVES"
mkdir -p "$CONFIG" mkdir -p "$CONFIG"
mkdir -p "$MODS" mkdir -p "$MODS"
mkdir -p "$SCENARIOS" mkdir -p "$SCENARIOS"
if [ ! -f "$CONFIG/server-settings.json" ]; then if [[ ! -f $CONFIG/server-settings.json ]]; then
cp /opt/factorio/data/server-settings.example.json "$CONFIG/server-settings.json" cp /opt/factorio/data/server-settings.example.json "$CONFIG/server-settings.json"
fi fi
if [ ! -f "$CONFIG/map-gen-settings.json" ]; then if [[ ! -f $CONFIG/map-gen-settings.json ]]; then
cp /opt/factorio/data/map-gen-settings.example.json "$CONFIG/map-gen-settings.json" cp /opt/factorio/data/map-gen-settings.example.json "$CONFIG/map-gen-settings.json"
fi fi
if [ ! -f "$CONFIG/map-settings.json" ]; then if [[ ! -f $CONFIG/map-settings.json ]]; then
cp /opt/factorio/data/map-settings.example.json "$CONFIG/map-settings.json" cp /opt/factorio/data/map-settings.example.json "$CONFIG/map-settings.json"
fi fi

View File

@ -1,4 +1,5 @@
#!/bin/bash #!/bin/bash
set -eou pipefail
FACTORIO_VERSION=$1 FACTORIO_VERSION=$1
MOD_DIR=$2 MOD_DIR=$2
@ -24,7 +25,7 @@ print_failure()
update_mod() update_mod()
{ {
MOD_NAME="$1" MOD_NAME="${1// /%20}"
print_step "Checking for update of mod $MOD_NAME..." print_step "Checking for update of mod $MOD_NAME..."
@ -66,8 +67,7 @@ update_mod()
return 1 return 1
fi fi
set -- "$(sha1sum "$MOD_DIR/$MOD_FILENAME")" if ! [[ $(sha1sum "$MOD_DIR/$MOD_FILENAME") =~ $MOD_SHA1 ]]; then
if [[ $1 != "$MOD_SHA1" ]]; then
print_failure " SHA1 mismatch!" print_failure " SHA1 mismatch!"
rm "$MOD_DIR/$MOD_FILENAME" rm "$MOD_DIR/$MOD_FILENAME"
return 1 return 1

View File

@ -1,6 +1,6 @@
# Factorio [![Build Status](https://travis-ci.org/factoriotools/factorio-docker.svg?branch=master)](https://travis-ci.org/factoriotools/factorio-docker) [![Docker Version](https://images.microbadger.com/badges/version/factoriotools/factorio.svg)](https://hub.docker.com/r/factoriotools/factorio/) [![Docker Pulls](https://img.shields.io/docker/pulls/factoriotools/factorio.svg?maxAge=600)](https://hub.docker.com/r/factoriotools/factorio/) [![Docker Stars](https://img.shields.io/docker/stars/factoriotools/factorio.svg?maxAge=600)](https://hub.docker.com/r/factoriotools/factorio/) [![Microbadger Layers](https://images.microbadger.com/badges/image/factoriotools/factorio.svg)](https://microbadger.com/images/factoriotools/factorio "Get your own image badge on microbadger.com") # Factorio [![Build Status](https://travis-ci.org/factoriotools/factorio-docker.svg?branch=master)](https://travis-ci.org/factoriotools/factorio-docker) [![Docker Version](https://images.microbadger.com/badges/version/factoriotools/factorio.svg)](https://hub.docker.com/r/factoriotools/factorio/) [![Docker Pulls](https://img.shields.io/docker/pulls/factoriotools/factorio.svg?maxAge=600)](https://hub.docker.com/r/factoriotools/factorio/) [![Docker Stars](https://img.shields.io/docker/stars/factoriotools/factorio.svg?maxAge=600)](https://hub.docker.com/r/factoriotools/factorio/) [![Microbadger Layers](https://images.microbadger.com/badges/image/factoriotools/factorio.svg)](https://microbadger.com/images/factoriotools/factorio "Get your own image badge on microbadger.com")
* `0.17.54`, `0.17`, `latest` [(0.17/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.17/Dockerfile) * `0.17.55`, `0.17`, `latest` [(0.17/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.17/Dockerfile)
* `0.16.51`, `0.16`, `stable` [(0.16/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.16/Dockerfile) * `0.16.51`, `0.16`, `stable` [(0.16/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.16/Dockerfile)
* `0.15.40`, `0.15` [(0.15/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.15/Dockerfile) * `0.15.40`, `0.15` [(0.15/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.15/Dockerfile)
* `0.14.23`, `0.14` [(0.14/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.14/Dockerfile) * `0.14.23`, `0.14` [(0.14/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.14/Dockerfile)
@ -9,9 +9,9 @@
* `latest` - most up-to-date version (may be experimental). * `latest` - most up-to-date version (may be experimental).
* `stable` - version declared stable on [factorio.com](https://www.factorio.com). * `stable` - version declared stable on [factorio.com](https://www.factorio.com).
* `0.x` - latest version in a branch. * `0.x` - latest version in a branch.
* `0.x.y` - a specific version. * `0.x.y` - a specific version.
* `0.x-dev` - whatever is in master for that version. * `0.x-z` - incremental fix for that version.
# What is Factorio? # What is Factorio?

View File

@ -1,33 +1,39 @@
#!/bin/bash #!/bin/bash
set -eox pipefail set -eoux pipefail
if [ -z "$1" ] && [ -n "$CI" ]; then if [[ -z ${1:-} ]] && [[ -n ${CI:-} ]]; then
echo "Usage: ./build.sh \$VERSION_SHORT" echo "Usage: ./build.sh \$VERSION_SHORT"
exit 1 exit 1
elif [ "$CI" == "true" ]; then elif [[ $CI == true ]]; then
VERSION_SHORT="$1" VERSION_SHORT="$1"
else else
VERSION_SHORT=$(find . -maxdepth 1 -type d | sort | tail -1 | grep -o "[0-9].[0-9]*") VERSION_SHORT=$(find . -maxdepth 1 -type d | sort | tail -1 | grep -o "[[0-9]].[[0-9]]*")
EXTRA_TAG=latest EXTRA_TAG=latest
fi fi
cd "$VERSION_SHORT" || exit cd "$VERSION_SHORT" || exit 1
VERSION=$(grep -oP '[0-9]+\.[0-9]+\.[0-9]+' Dockerfile | head -1) VERSION=$(grep -oP '[0-9]+\.[0-9]+\.[0-9]+' Dockerfile | head -1)
DOCKER_REPO=factoriotools/factorio DOCKER_REPO=factoriotools/factorio
if [ "$TRAVIS_PULL_REQUEST" == "true" ]; then if [[ $TRAVIS_PULL_REQUEST == true ]]; then
TAGS="$DOCKER_REPO:$TRAVIS_PULL_REQUEST_SLUG" TAGS="$DOCKER_REPO:$TRAVIS_PULL_REQUEST_SLUG"
else else
if [ "$TRAVIS_BRANCH" == "master" ] || [ "$TRAVIS_BRANCH" == "$VERSION" ]; then # we are either on master or on a tag build
if [[ $TRAVIS_BRANCH == master ]] || [[ $TRAVIS_BRANCH == "$VERSION" ]]; then
TAGS="$DOCKER_REPO:$VERSION -t $DOCKER_REPO:$VERSION_SHORT" TAGS="$DOCKER_REPO:$VERSION -t $DOCKER_REPO:$VERSION_SHORT"
elif [ -n "$TRAVIS_BRANCH" ]; then # we are on an incremental build of a tag
elif [[ $VERSION == "${TRAVIS_BRANCH%-*}" ]]; then
TAGS="$DOCKER_REPO:$TRAVIS_BRANCH -t $DOCKER_REPO:$VERSION -t $DOCKER_REPO:$VERSION_SHORT"
# we build a other branch than master
elif [[ -n $TRAVIS_BRANCH ]]; then
TAGS="$DOCKER_REPO:$TRAVIS_BRANCH" TAGS="$DOCKER_REPO:$TRAVIS_BRANCH"
elif [ "$CI" == "" ]; then # we are not in CI and tag version and version short
elif [[ $CI == "" ]]; then
TAGS="$DOCKER_REPO:$VERSION -t $DOCKER_REPO:$VERSION_SHORT" TAGS="$DOCKER_REPO:$VERSION -t $DOCKER_REPO:$VERSION_SHORT"
fi fi
if [ -n "$EXTRA_TAG" ]; then if [[ -n ${EXTRA_TAG:-} ]]; then
TAGS="$TAGS -t $DOCKER_REPO:$EXTRA_TAG" TAGS="$TAGS -t $DOCKER_REPO:$EXTRA_TAG"
fi fi
fi fi
@ -36,22 +42,34 @@ fi
docker build . -t $TAGS docker build . -t $TAGS
docker images docker images
if [[ "$(dirname "$(git diff --name-only HEAD^)")" =~ $VERSION_SHORT ]] && [ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST_BRANCH" == "" ] || # only push when:
[ "$TRAVIS_BRANCH" == "$VERSION" ] && [ "$TRAVIS_PULL_REQUEST_BRANCH" == "" ] || # latest changes where made in the folder corosponding to the version we build, we are on master and don#t build a PR.
[ "$CI" == "" ]; then if [[ $(dirname "$(git diff --name-only HEAD^)") =~ $VERSION_SHORT ]] && [[ $TRAVIS_BRANCH == master ]] && [[ $TRAVIS_PULL_REQUEST_BRANCH == "" ]] ||
# we build a tag and we are not on master
[[ $VERSION == "${TRAVIS_BRANCH%-*}" ]] && [[ $TRAVIS_PULL_REQUEST_BRANCH == "" ]] ||
# we are not in CI
[[ $CI == "" ]]; then
if [ "$CI" == "true" ]; then if [[ $CI == true ]]; then
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
fi fi
if [ -n "$TRAVIS_BRANCH" ] && [ "$TRAVIS_BRANCH" != "$VERSION" ] && [ "$TRAVIS_BRANCH" != "master" ]; then # push a tag on a branch other than master
if [[ -n $TRAVIS_BRANCH ]] && [[ $VERSION != "${TRAVIS_BRANCH%-*}" ]] && [[ $TRAVIS_BRANCH != "master" ]]; then
docker push "$DOCKER_REPO:$TRAVIS_BRANCH" docker push "$DOCKER_REPO:$TRAVIS_BRANCH"
fi fi
if [ -n "$TRAVIS_TAG" ] || [ "$CI" == "" ]; then
# push an incremental tag
if [[ $VERSION == "${TRAVIS_BRANCH%-*}" ]]; then
docker push "$DOCKER_REPO:$TRAVIS_BRANCH"
fi
if [[ -n $TRAVIS_TAG ]] || [[ $CI == "" ]]; then
docker push "$DOCKER_REPO:$VERSION" docker push "$DOCKER_REPO:$VERSION"
docker push "$DOCKER_REPO:$VERSION_SHORT" docker push "$DOCKER_REPO:$VERSION_SHORT"
fi fi
if [ -n "$EXTRA_TAG" ]; then
if [[ -n ${EXTRA_TAG:-} ]]; then
docker push "$DOCKER_REPO:$EXTRA_TAG" docker push "$DOCKER_REPO:$EXTRA_TAG"
fi fi