mirror of
https://github.com/factoriotools/factorio-docker.git
synced 2025-07-04 07:58:13 +02:00
Compare commits
42 Commits
Author | SHA1 | Date | |
---|---|---|---|
4e261043cd | |||
4c47dbc4ee | |||
07264e626f | |||
64a1f8d9bf | |||
15a2d493f8 | |||
3777041d3e | |||
ccd0707d21 | |||
a5b03e6625 | |||
03b4d9eb5e | |||
af48272100 | |||
cc63e10cd1 | |||
f90cd27bcd | |||
1ab01d0277 | |||
66c11b1a82 | |||
49055cfe1b | |||
ab818efda4 | |||
6da1250b5b | |||
deaaf83967 | |||
9691472b84 | |||
236b27d94e | |||
457ab79b5b | |||
235a2abb60 | |||
c52f649b35 | |||
52167abffa | |||
f20fe0ad85 | |||
1cd2015cc4 | |||
c4b2d30366 | |||
5c81134430 | |||
7d220042a9 | |||
e61a3aa622 | |||
773005b320 | |||
51185620dd | |||
c24b7bc41b | |||
5301aff1b1 | |||
502f13c1cd | |||
fe3d0d65bc | |||
4bc30e718c | |||
994a091595 | |||
c754e64e47 | |||
a2726704ed | |||
f4e8b30e90 | |||
07dcd690bd |
11
.travis.yml
11
.travis.yml
@ -1,7 +1,6 @@
|
|||||||
dist: xenial
|
dist: xenial
|
||||||
sudo: required
|
|
||||||
language: bash
|
language: bash
|
||||||
services:
|
services:
|
||||||
- docker
|
- docker
|
||||||
|
|
||||||
addons:
|
addons:
|
||||||
@ -18,9 +17,11 @@ jobs:
|
|||||||
|
|
||||||
- &build
|
- &build
|
||||||
stage: Build & update Docker HUB description
|
stage: Build & update Docker HUB description
|
||||||
env: VERSION_SHORT=0.17 EXTRA_TAG=latest STABLE=0.17.79
|
env: VERSION_SHORT=0.18 EXTRA_TAG=latest
|
||||||
script:
|
script:
|
||||||
- ./build.sh $VERSION_SHORT
|
- ./build.sh $VERSION_SHORT
|
||||||
|
- <<: *build
|
||||||
|
env: VERSION_SHORT=0.17 EXTRA_TAG=stable
|
||||||
- <<: *build
|
- <<: *build
|
||||||
env: VERSION_SHORT=0.16
|
env: VERSION_SHORT=0.16
|
||||||
- <<: *build
|
- <<: *build
|
||||||
@ -28,6 +29,6 @@ jobs:
|
|||||||
- <<: *build
|
- <<: *build
|
||||||
env: VERSION_SHORT=0.14
|
env: VERSION_SHORT=0.14
|
||||||
- <<: *build
|
- <<: *build
|
||||||
if: branch = master
|
if: branch = master AND type != pull_request
|
||||||
env:
|
env:
|
||||||
script: docker run -v $PWD:/workspace -e DOCKERHUB_USERNAME=$DOCKER_USERNAME -e DOCKERHUB_PASSWORD=$DOCKER_PASSWORD -e DOCKERHUB_REPOSITORY='factoriotools/factorio' -e README_FILEPATH='/workspace/README.md' peterevans/dockerhub-description:2.1.0
|
script: DOCKERHUB_USERNAME=$DOCKER_USERNAME DOCKERHUB_PASSWORD=$DOCKER_PASSWORD DOCKERHUB_REPOSITORY='factoriotools/factorio' README_FILEPATH='./README.md' ./update-dockerhub-description.sh
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
FROM frolvlad/alpine-glibc:alpine-3.9
|
FROM frolvlad/alpine-glibc:alpine-3.11
|
||||||
|
|
||||||
LABEL maintainer="https://github.com/factoriotools/factorio-docker"
|
LABEL maintainer="https://github.com/factoriotools/factorio-docker"
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
FROM frolvlad/alpine-glibc:alpine-3.9
|
FROM frolvlad/alpine-glibc:alpine-3.11
|
||||||
|
|
||||||
LABEL maintainer="https://github.com/factoriotools/factorio-docker"
|
LABEL maintainer="https://github.com/factoriotools/factorio-docker"
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
FROM frolvlad/alpine-glibc:alpine-3.9
|
FROM frolvlad/alpine-glibc:alpine-3.11
|
||||||
|
|
||||||
LABEL maintainer="https://github.com/factoriotools/factorio-docker"
|
LABEL maintainer="https://github.com/factoriotools/factorio-docker"
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
FROM frolvlad/alpine-glibc:alpine-3.9
|
FROM frolvlad/alpine-glibc:alpine-3.11
|
||||||
|
|
||||||
LABEL maintainer="https://github.com/factoriotools/factorio-docker"
|
LABEL maintainer="https://github.com/factoriotools/factorio-docker"
|
||||||
|
|
||||||
@ -19,6 +19,7 @@ ENV PORT=34197 \
|
|||||||
PUID="$PUID" \
|
PUID="$PUID" \
|
||||||
PGID="$PGID"
|
PGID="$PGID"
|
||||||
|
|
||||||
|
SHELL ["/bin/ash", "-eo", "pipefail", "-c"]
|
||||||
RUN set -ox pipefail \
|
RUN set -ox pipefail \
|
||||||
&& archive="/tmp/factorio_headless_x64_$VERSION.tar.xz" \
|
&& archive="/tmp/factorio_headless_x64_$VERSION.tar.xz" \
|
||||||
&& mkdir -p /opt /factorio \
|
&& mkdir -p /opt /factorio \
|
||||||
@ -29,10 +30,12 @@ RUN set -ox pipefail \
|
|||||||
&& tar xf "$archive" --directory /opt \
|
&& tar xf "$archive" --directory /opt \
|
||||||
&& chmod ugo=rwx /opt/factorio \
|
&& chmod ugo=rwx /opt/factorio \
|
||||||
&& rm "$archive" \
|
&& rm "$archive" \
|
||||||
&& ln -s "$SAVES" /opt/factorio/saves \
|
&& mkdir -p /opt/factorio/config/ \
|
||||||
&& ln -s "$MODS" /opt/factorio/mods \
|
&& printf "\
|
||||||
&& ln -s "$SCENARIOS" /opt/factorio/scenarios \
|
[path]\n\
|
||||||
&& ln -s "$SCRIPTOUTPUT" /opt/factorio/script-output \
|
read-data=__PATH__executable__/../../data\n\
|
||||||
|
write-data=/factorio\n\
|
||||||
|
" >> /opt/factorio/config/config.ini \
|
||||||
&& addgroup -g "$PGID" -S "$GROUP" \
|
&& addgroup -g "$PGID" -S "$GROUP" \
|
||||||
&& adduser -u "$PUID" -G "$GROUP" -s /bin/sh -SDH "$USER" \
|
&& adduser -u "$PUID" -G "$GROUP" -s /bin/sh -SDH "$USER" \
|
||||||
&& chown -R "$USER":"$GROUP" /opt/factorio /factorio
|
&& chown -R "$USER":"$GROUP" /opt/factorio /factorio
|
||||||
|
@ -32,19 +32,20 @@ update_mod()
|
|||||||
MOD_INFO_URL="$MOD_BASE_URL/api/mods/$MOD_NAME"
|
MOD_INFO_URL="$MOD_BASE_URL/api/mods/$MOD_NAME"
|
||||||
MOD_INFO_JSON=$(curl --silent "$MOD_INFO_URL")
|
MOD_INFO_JSON=$(curl --silent "$MOD_INFO_URL")
|
||||||
|
|
||||||
|
if ! echo "$MOD_INFO_JSON" | jq -e .name >/dev/null; then
|
||||||
|
print_success " Custom mod not on $MOD_BASE_URL, skipped."
|
||||||
|
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_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_FILENAME=$(echo "$MOD_INFO" | cut -f1 -d";")
|
||||||
MOD_URL=$(echo "$MOD_INFO" | cut -f2 -d";")
|
MOD_URL=$(echo "$MOD_INFO" | cut -f2 -d";")
|
||||||
MOD_SHA1=$(echo "$MOD_INFO" | cut -f3 -d";")
|
MOD_SHA1=$(echo "$MOD_INFO" | cut -f3 -d";")
|
||||||
|
|
||||||
if [[ -z $MOD_URL ]]; then
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $MOD_FILENAME == null ]]; then
|
if [[ $MOD_FILENAME == null ]]; then
|
||||||
print_failure " Not compatible with version"
|
print_failure " Not compatible with version"
|
||||||
return 1
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -f $MOD_DIR/$MOD_FILENAME ]]; then
|
if [[ -f $MOD_DIR/$MOD_FILENAME ]]; then
|
||||||
|
49
0.18/Dockerfile
Normal file
49
0.18/Dockerfile
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
FROM frolvlad/alpine-glibc:alpine-3.11
|
||||||
|
|
||||||
|
LABEL maintainer="https://github.com/factoriotools/factorio-docker"
|
||||||
|
|
||||||
|
ARG USER=factorio
|
||||||
|
ARG GROUP=factorio
|
||||||
|
ARG PUID=845
|
||||||
|
ARG PGID=845
|
||||||
|
|
||||||
|
ENV PORT=34197 \
|
||||||
|
RCON_PORT=27015 \
|
||||||
|
VERSION=0.18.24 \
|
||||||
|
SHA1=04f9aa9b93eaf220d55447201cb10f96e325e073 \
|
||||||
|
SAVES=/factorio/saves \
|
||||||
|
CONFIG=/factorio/config \
|
||||||
|
MODS=/factorio/mods \
|
||||||
|
SCENARIOS=/factorio/scenarios \
|
||||||
|
SCRIPTOUTPUT=/factorio/script-output \
|
||||||
|
PUID="$PUID" \
|
||||||
|
PGID="$PGID"
|
||||||
|
|
||||||
|
SHELL ["/bin/ash", "-eo", "pipefail", "-c"]
|
||||||
|
RUN set -ox pipefail \
|
||||||
|
&& archive="/tmp/factorio_headless_x64_$VERSION.tar.xz" \
|
||||||
|
&& mkdir -p /opt /factorio \
|
||||||
|
&& apk add --update --no-cache --no-progress bash binutils curl file gettext jq libintl pwgen shadow su-exec \
|
||||||
|
&& curl -sSL "https://www.factorio.com/get-download/$VERSION/headless/linux64" -o "$archive" \
|
||||||
|
&& echo "$SHA1 $archive" | sha1sum -c \
|
||||||
|
|| (sha1sum "$archive" && file "$archive" && exit 1) \
|
||||||
|
&& tar xf "$archive" --directory /opt \
|
||||||
|
&& chmod ugo=rwx /opt/factorio \
|
||||||
|
&& rm "$archive" \
|
||||||
|
&& mkdir -p /opt/factorio/config/ \
|
||||||
|
&& printf "\
|
||||||
|
[path]\n\
|
||||||
|
read-data=__PATH__executable__/../../data\n\
|
||||||
|
write-data=/factorio\n\
|
||||||
|
" >> /opt/factorio/config/config.ini \
|
||||||
|
&& addgroup -g "$PGID" -S "$GROUP" \
|
||||||
|
&& adduser -u "$PUID" -G "$GROUP" -s /bin/sh -SDH "$USER" \
|
||||||
|
&& chown -R "$USER":"$GROUP" /opt/factorio /factorio
|
||||||
|
|
||||||
|
VOLUME /factorio
|
||||||
|
|
||||||
|
EXPOSE $PORT/udp $RCON_PORT/tcp
|
||||||
|
|
||||||
|
COPY files/ /
|
||||||
|
|
||||||
|
ENTRYPOINT ["/docker-entrypoint.sh"]
|
15
0.18/docker-compose.yml
Normal file
15
0.18/docker-compose.yml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
version: '2'
|
||||||
|
services:
|
||||||
|
factorio:
|
||||||
|
build: .
|
||||||
|
ports:
|
||||||
|
- "34197:34197/udp"
|
||||||
|
- "27015:27015/tcp"
|
||||||
|
volumes:
|
||||||
|
- /opt/factorio:/factorio
|
||||||
|
# environment:
|
||||||
|
# - PUID=1000
|
||||||
|
# - PGID=1000
|
||||||
|
# - UPDATE_MODS_ON_START=true
|
||||||
|
# - USERNAME=FactorioUsername
|
||||||
|
# - TOKEN=FactorioToken
|
96
0.18/files/docker-entrypoint.sh
Executable file
96
0.18/files/docker-entrypoint.sh
Executable file
@ -0,0 +1,96 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -eoux pipefail
|
||||||
|
|
||||||
|
FACTORIO_VOL=/factorio
|
||||||
|
LOAD_LATEST_SAVE="${LOAD_LATEST_SAVE:-true}"
|
||||||
|
GENERATE_NEW_SAVE="${GENERATE_NEW_SAVE:-false}"
|
||||||
|
SAVE_NAME="${SAVE_NAME:-""}"
|
||||||
|
|
||||||
|
mkdir -p "$FACTORIO_VOL"
|
||||||
|
mkdir -p "$SAVES"
|
||||||
|
mkdir -p "$CONFIG"
|
||||||
|
mkdir -p "$MODS"
|
||||||
|
mkdir -p "$SCENARIOS"
|
||||||
|
mkdir -p "$SCRIPTOUTPUT"
|
||||||
|
|
||||||
|
if [[ ! -f $CONFIG/rconpw ]]; then
|
||||||
|
# Generate a new RCON password if none exists
|
||||||
|
pwgen 15 1 >"$CONFIG/rconpw"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f $CONFIG/server-settings.json ]]; then
|
||||||
|
# Copy default settings if server-settings.json doesn't exist
|
||||||
|
cp /opt/factorio/data/server-settings.example.json "$CONFIG/server-settings.json"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f $CONFIG/map-gen-settings.json ]]; then
|
||||||
|
cp /opt/factorio/data/map-gen-settings.example.json "$CONFIG/map-gen-settings.json"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f $CONFIG/map-settings.json ]]; then
|
||||||
|
cp /opt/factorio/data/map-settings.example.json "$CONFIG/map-settings.json"
|
||||||
|
fi
|
||||||
|
|
||||||
|
NRTMPSAVES=$( find -L "$SAVES" -iname \*.tmp.zip -mindepth 1 | wc -l )
|
||||||
|
if [[ $NRTMPSAVES -gt 0 ]]; then
|
||||||
|
# Delete incomplete saves (such as after a forced exit)
|
||||||
|
rm -f "$SAVES"/*.tmp.zip
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ${UPDATE_MODS_ON_START:-} ]]; then
|
||||||
|
./docker-update-mods.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $(id -u) = 0 ]]; then
|
||||||
|
# Update the User and Group ID based on the PUID/PGID variables
|
||||||
|
usermod -o -u "$PUID" factorio
|
||||||
|
groupmod -o -g "$PGID" factorio
|
||||||
|
# Take ownership of factorio data if running as root
|
||||||
|
chown -R factorio:factorio "$FACTORIO_VOL"
|
||||||
|
# Drop to the factorio user
|
||||||
|
SU_EXEC="su-exec factorio"
|
||||||
|
else
|
||||||
|
SU_EXEC=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
NRSAVES=$(find -L "$SAVES" -iname \*.zip -mindepth 1 | wc -l)
|
||||||
|
if [[ $GENERATE_NEW_SAVE != true && $NRSAVES == 0 ]]; then
|
||||||
|
GENERATE_NEW_SAVE=true
|
||||||
|
SAVE_NAME=_autosave1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $GENERATE_NEW_SAVE == true ]]; then
|
||||||
|
if [[ -z "$SAVE_NAME" ]]; then
|
||||||
|
echo "If \$GENERATE_NEW_SAVE is true, you must specify \$SAVE_NAME"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [[ -f "$SAVES/$SAVE_NAME.zip" ]]; then
|
||||||
|
echo "Map $SAVES/$SAVE_NAME.zip already exists, skipping map generation"
|
||||||
|
else
|
||||||
|
$SU_EXEC /opt/factorio/bin/x64/factorio \
|
||||||
|
--create "$SAVES/$SAVE_NAME.zip" \
|
||||||
|
--map-gen-settings "$CONFIG/map-gen-settings.json" \
|
||||||
|
--map-settings "$CONFIG/map-settings.json"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
FLAGS=(\
|
||||||
|
--port "$PORT" \
|
||||||
|
--server-settings "$CONFIG/server-settings.json" \
|
||||||
|
--server-banlist "$CONFIG/server-banlist.json" \
|
||||||
|
--rcon-port "$RCON_PORT" \
|
||||||
|
--server-whitelist "$CONFIG/server-whitelist.json" \
|
||||||
|
--use-server-whitelist \
|
||||||
|
--server-adminlist "$CONFIG/server-adminlist.json" \
|
||||||
|
--rcon-password "$(cat "$CONFIG/rconpw")" \
|
||||||
|
--server-id /factorio/config/server-id.json \
|
||||||
|
)
|
||||||
|
|
||||||
|
if [[ $LOAD_LATEST_SAVE == true ]]; then
|
||||||
|
FLAGS+=( --start-server-load-latest )
|
||||||
|
else
|
||||||
|
FLAGS+=( --start-server "$SAVE_NAME" )
|
||||||
|
fi
|
||||||
|
|
||||||
|
# shellcheck disable=SC2086
|
||||||
|
exec $SU_EXEC /opt/factorio/bin/x64/factorio "${FLAGS[@]}" "$@"
|
28
0.18/files/docker-update-mods.sh
Executable file
28
0.18/files/docker-update-mods.sh
Executable file
@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -eou pipefail
|
||||||
|
|
||||||
|
if [[ -f /run/secrets/username ]]; then
|
||||||
|
USERNAME=$(cat /run/secrets/username)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -f /run/secrets/username ]]; then
|
||||||
|
TOKEN=$(cat /run/secrets/token)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z ${USERNAME:-} ]]; then
|
||||||
|
USERNAME="$(jq -j ".username" "$CONFIG/server-settings.json")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
./update-mods.sh "$VERSION" "$MODS" "$USERNAME" "$TOKEN"
|
42
0.18/files/scenario.sh
Executable file
42
0.18/files/scenario.sh
Executable file
@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -eoux pipefail
|
||||||
|
|
||||||
|
if [[ -z ${1:-} ]]; then
|
||||||
|
echo "No argument supplied"
|
||||||
|
fi
|
||||||
|
|
||||||
|
SERVER_SCENARIO="$1"
|
||||||
|
mkdir -p "$SAVES"
|
||||||
|
mkdir -p "$CONFIG"
|
||||||
|
mkdir -p "$MODS"
|
||||||
|
mkdir -p "$SCENARIOS"
|
||||||
|
|
||||||
|
#chown -R factorio /factorio
|
||||||
|
|
||||||
|
if [[ ! -f $CONFIG/rconpw ]]; then
|
||||||
|
pwgen 15 1 >"$CONFIG/rconpw"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f $CONFIG/server-settings.json ]]; then
|
||||||
|
cp /opt/factorio/data/server-settings.example.json "$CONFIG/server-settings.json"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f $CONFIG/map-gen-settings.json ]]; then
|
||||||
|
cp /opt/factorio/data/map-gen-settings.example.json "$CONFIG/map-gen-settings.json"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f $CONFIG/map-settings.json ]]; then
|
||||||
|
cp /opt/factorio/data/map-settings.example.json "$CONFIG/map-settings.json"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec /opt/factorio/bin/x64/factorio \
|
||||||
|
--port "$PORT" \
|
||||||
|
--start-server-load-scenario "$SERVER_SCENARIO" \
|
||||||
|
--server-settings "$CONFIG/server-settings.json" \
|
||||||
|
--server-banlist "$CONFIG/server-banlist.json" \
|
||||||
|
--server-whitelist "$CONFIG/server-whitelist.json" \
|
||||||
|
--use-server-whitelist \
|
||||||
|
--server-adminlist "$CONFIG/server-adminlist.json" \
|
||||||
|
--rcon-port "$RCON_PORT" \
|
||||||
|
--rcon-password "$(cat "$CONFIG/rconpw")" \
|
||||||
|
--server-id /factorio/config/server-id.json
|
27
0.18/files/scenario2map.sh
Executable file
27
0.18/files/scenario2map.sh
Executable file
@ -0,0 +1,27 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -eoux pipefail
|
||||||
|
|
||||||
|
if [[ -z ${1:-} ]]; then
|
||||||
|
echo "No argument supplied"
|
||||||
|
fi
|
||||||
|
|
||||||
|
SERVER_SCENARIO="$1"
|
||||||
|
mkdir -p "$SAVES"
|
||||||
|
mkdir -p "$CONFIG"
|
||||||
|
mkdir -p "$MODS"
|
||||||
|
mkdir -p "$SCENARIOS"
|
||||||
|
|
||||||
|
if [[ ! -f $CONFIG/server-settings.json ]]; then
|
||||||
|
cp /opt/factorio/data/server-settings.example.json "$CONFIG/server-settings.json"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f $CONFIG/map-gen-settings.json ]]; then
|
||||||
|
cp /opt/factorio/data/map-gen-settings.example.json "$CONFIG/map-gen-settings.json"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f $CONFIG/map-settings.json ]]; then
|
||||||
|
cp /opt/factorio/data/map-settings.example.json "$CONFIG/map-settings.json"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec /opt/factorio/bin/x64/factorio \
|
||||||
|
--scenario2map "$SERVER_SCENARIO"
|
95
0.18/files/update-mods.sh
Executable file
95
0.18/files/update-mods.sh
Executable file
@ -0,0 +1,95 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -eou pipefail
|
||||||
|
|
||||||
|
FACTORIO_VERSION=$1
|
||||||
|
MOD_DIR=$2
|
||||||
|
USERNAME=$3
|
||||||
|
TOKEN=$4
|
||||||
|
|
||||||
|
MOD_BASE_URL="https://mods.factorio.com"
|
||||||
|
|
||||||
|
print_step()
|
||||||
|
{
|
||||||
|
echo "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_success()
|
||||||
|
{
|
||||||
|
echo "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_failure()
|
||||||
|
{
|
||||||
|
echo "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
update_mod()
|
||||||
|
{
|
||||||
|
MOD_NAME="${1// /%20}"
|
||||||
|
|
||||||
|
print_step "Checking for update of mod $MOD_NAME..."
|
||||||
|
|
||||||
|
MOD_INFO_URL="$MOD_BASE_URL/api/mods/$MOD_NAME"
|
||||||
|
MOD_INFO_JSON=$(curl --silent "$MOD_INFO_URL")
|
||||||
|
|
||||||
|
if ! echo "$MOD_INFO_JSON" | jq -e .name >/dev/null; then
|
||||||
|
print_success " Custom mod not on $MOD_BASE_URL, skipped."
|
||||||
|
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";")
|
||||||
|
MOD_SHA1=$(echo "$MOD_INFO" | cut -f3 -d";")
|
||||||
|
|
||||||
|
if [[ $MOD_FILENAME == null ]]; then
|
||||||
|
print_failure " Not compatible with version"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -f $MOD_DIR/$MOD_FILENAME ]]; then
|
||||||
|
print_success " Already up-to-date."
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_step "Downloading..."
|
||||||
|
FULL_URL="$MOD_BASE_URL$MOD_URL?username=$USERNAME&token=$TOKEN"
|
||||||
|
HTTP_STATUS=$(curl --silent -L -w "%{http_code}" -o "$MOD_DIR/$MOD_FILENAME" "$FULL_URL")
|
||||||
|
|
||||||
|
if [[ $HTTP_STATUS != 200 ]]; then
|
||||||
|
print_failure " Download failed: Code $HTTP_STATUS."
|
||||||
|
rm -f "$MOD_DIR/$MOD_FILENAME"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f $MOD_DIR/$MOD_FILENAME ]]; then
|
||||||
|
print_failure " Downloaded file missing!"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! [[ $(sha1sum "$MOD_DIR/$MOD_FILENAME") =~ $MOD_SHA1 ]]; then
|
||||||
|
print_failure " SHA1 mismatch!"
|
||||||
|
rm -f "$MOD_DIR/$MOD_FILENAME"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_success " Download complete."
|
||||||
|
|
||||||
|
for file in "$MOD_DIR/${MOD_NAME}_"*".zip"; do # wildcard does usually not work in quotes: https://unix.stackexchange.com/a/67761
|
||||||
|
if [[ $file != $MOD_DIR/$MOD_FILENAME ]]; then
|
||||||
|
print_success " Deleting old version: $file"
|
||||||
|
rm -f "$file"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
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"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
13
README.md
13
README.md
@ -1,6 +1,7 @@
|
|||||||
# Factorio [](https://travis-ci.org/factoriotools/factorio-docker) [](https://hub.docker.com/r/factoriotools/factorio/) [](https://hub.docker.com/r/factoriotools/factorio/) [](https://hub.docker.com/r/factoriotools/factorio/) [](https://microbadger.com/images/factoriotools/factorio "Get your own image badge on microbadger.com")
|
# Factorio [](https://travis-ci.org/factoriotools/factorio-docker)  [](https://hub.docker.com/r/factoriotools/factorio/) [](https://hub.docker.com/r/factoriotools/factorio/) [](https://hub.docker.com/r/factoriotools/factorio/) [](https://microbadger.com/images/factoriotools/factorio "Get your own image badge on microbadger.com")
|
||||||
|
|
||||||
* `0.17.79`, `0.17`, `latest`, `stable` [(0.17/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.17/Dockerfile)
|
* `0.18.24`, `0.18`, `latest` [(0.18/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.18/Dockerfile)
|
||||||
|
* `0.17.79`, `0.17`, `stable` [(0.17/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.17/Dockerfile)
|
||||||
* `0.16.51`, `0.16` [(0.16/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.16/Dockerfile)
|
* `0.16.51`, `0.16` [(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)
|
||||||
@ -117,22 +118,22 @@ sudo docker run -d \
|
|||||||
-p 34197:34197/udp \
|
-p 34197:34197/udp \
|
||||||
-p 27015:27015/tcp \
|
-p 27015:27015/tcp \
|
||||||
-v /opt/factorio:/factorio \
|
-v /opt/factorio:/factorio \
|
||||||
-e ENABLE_SERVER_LOAD_LATEST=false \
|
-e LOAD_LATEST_SAVE=false \
|
||||||
-e SAVE_NAME=replaceme \
|
-e SAVE_NAME=replaceme \
|
||||||
--name factorio \
|
--name factorio \
|
||||||
--restart=always \
|
--restart=always \
|
||||||
factoriotools/factorio
|
factoriotools/factorio
|
||||||
```
|
```
|
||||||
|
|
||||||
To generate a new map set `ENABLE_GENERATE_NEW_MAP_SAVE=true` and specify `SAVE_NAME`:
|
To generate a new map set `GENERATE_NEW_SAVE=true` and specify `SAVE_NAME`:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
sudo docker run -d \
|
sudo docker run -d \
|
||||||
-p 34197:34197/udp \
|
-p 34197:34197/udp \
|
||||||
-p 27015:27015/tcp \
|
-p 27015:27015/tcp \
|
||||||
-v /opt/factorio:/factorio \
|
-v /opt/factorio:/factorio \
|
||||||
-e ENABLE_SERVER_LOAD_LATEST=false \
|
-e LOAD_LATEST_SAVE=false \
|
||||||
-e ENABLE_GENERATE_NEW_MAP_SAVE=true \
|
-e GENERATE_NEW_SAVE=true \
|
||||||
-e SAVE_NAME=replaceme \
|
-e SAVE_NAME=replaceme \
|
||||||
--name factorio \
|
--name factorio \
|
||||||
--restart=always \
|
--restart=always \
|
||||||
|
16
build.sh
16
build.sh
@ -27,8 +27,10 @@ else
|
|||||||
elif [[ $VERSION == "${TRAVIS_BRANCH%-*}" ]]; then
|
elif [[ $VERSION == "${TRAVIS_BRANCH%-*}" ]]; then
|
||||||
TAGS="-t $DOCKER_REPO:$TRAVIS_BRANCH -t $DOCKER_REPO:$VERSION -t $DOCKER_REPO:$VERSION_SHORT"
|
TAGS="-t $DOCKER_REPO:$TRAVIS_BRANCH -t $DOCKER_REPO:$VERSION -t $DOCKER_REPO:$VERSION_SHORT"
|
||||||
# we build a other branch than master
|
# we build a other branch than master
|
||||||
elif [[ -n $TRAVIS_BRANCH ]]; then
|
# disabled for now cause it breaks Travis CI builds of dependabot
|
||||||
TAGS="-t $DOCKER_REPO:$TRAVIS_BRANCH"
|
# https://travis-ci.org/github/factoriotools/factorio-docker/jobs/688176474#L182
|
||||||
|
# elif [[ -n $TRAVIS_BRANCH ]]; then
|
||||||
|
# TAGS="-t $DOCKER_REPO:$TRAVIS_BRANCH"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
# we are not in CI and tag version and version short
|
# we are not in CI and tag version and version short
|
||||||
@ -68,13 +70,15 @@ if [[ $(dirname "$(git diff --name-only HEAD^)") =~ $VERSION_SHORT ]] && [[ ${TR
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# push a tag on a branch other than master
|
# push a tag on a branch other than master
|
||||||
if [[ -n ${TRAVIS_BRANCH:-} ]] && [[ $VERSION != "${TRAVIS_BRANCH_VERSION:-}" ]] && [[ ${TRAVIS_BRANCH:-} != "master" ]]; then
|
# disabled for now cause it breaks Travis CI builds of dependabot
|
||||||
docker push "$DOCKER_REPO:$TRAVIS_BRANCH"
|
# https://travis-ci.org/github/factoriotools/factorio-docker/jobs/688176474#L182
|
||||||
fi
|
# if [[ -n ${TRAVIS_BRANCH:-} ]] && [[ $VERSION != "${TRAVIS_BRANCH_VERSION:-}" ]] && [[ ${TRAVIS_BRANCH:-} != "master" ]]; then
|
||||||
|
# docker push "$DOCKER_REPO:$TRAVIS_BRANCH"
|
||||||
|
# fi
|
||||||
|
|
||||||
# push an incremental tag
|
# push an incremental tag
|
||||||
if [[ $VERSION == "${TRAVIS_BRANCH_VERSION:-}" ]]; then
|
if [[ $VERSION == "${TRAVIS_BRANCH_VERSION:-}" ]]; then
|
||||||
docker push "$DOCKER_REPO:$TRAVIS_BRANCH"
|
docker push "$DOCKER_REPO:$VERSION"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -n ${TRAVIS_TAG:-} ]] || [[ -z ${CI:-} ]]; then
|
if [[ -n ${TRAVIS_TAG:-} ]] || [[ -z ${CI:-} ]]; then
|
||||||
|
35
update-dockerhub-description.sh
Executable file
35
update-dockerhub-description.sh
Executable file
@ -0,0 +1,35 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# This script is licensed under MIT and was originally written by Peter Evans. You can find a copy of the MIT license next to this file.
|
||||||
|
# The original file is available on his Github repo under the following link:
|
||||||
|
# https://github.com/peter-evans/dockerhub-description/blob/84d38211e27bb9b9effefa718f8c734db8adc5e1/entrypoint.sh
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
|
||||||
|
# Set the default path to README.md
|
||||||
|
README_FILEPATH=${README_FILEPATH:="./README.md"}
|
||||||
|
|
||||||
|
# Check the file size
|
||||||
|
if [[ $(wc -c <${README_FILEPATH}) -gt 25000 ]]; then
|
||||||
|
echo "File size exceeds the maximum allowed 25000 bytes"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Acquire a token for the Docker Hub API
|
||||||
|
echo "Acquiring token"
|
||||||
|
# shellcheck disable=2089
|
||||||
|
LOGIN_PAYLOAD="{\"username\": \"${DOCKERHUB_USERNAME}\", \"password\": \"${DOCKERHUB_PASSWORD}\"}"
|
||||||
|
TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d "${LOGIN_PAYLOAD}" https://hub.docker.com/v2/users/login/ | jq -r .token)
|
||||||
|
|
||||||
|
# Send a PATCH request to update the description of the repository
|
||||||
|
echo "Sending PATCH request"
|
||||||
|
REPO_URL="https://hub.docker.com/v2/repositories/${DOCKERHUB_REPOSITORY}/"
|
||||||
|
RESPONSE_CODE=$(curl -s --write-out "%{response_code}" --output /dev/null -H "Authorization: JWT ${TOKEN}" -X PATCH --data-urlencode full_description@${README_FILEPATH} "${REPO_URL}")
|
||||||
|
echo "Received response code: $RESPONSE_CODE"
|
||||||
|
|
||||||
|
if [[ $RESPONSE_CODE -eq 200 ]]; then
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
exit 1
|
||||||
|
fi
|
Reference in New Issue
Block a user