mirror of
https://github.com/factoriotools/factorio-docker.git
synced 2025-07-01 22:48:26 +02:00
Compare commits
70 Commits
Author | SHA1 | Date | |
---|---|---|---|
851507c3ef | |||
3e5afe32ab | |||
2359a1c5d8 | |||
d99ef45240 | |||
2b26cd1b69 | |||
7dddaf62bd | |||
3f034d0754 | |||
7720e32081 | |||
65049c8120 | |||
c94ab998b4 | |||
6e4ec92a95 | |||
7dcac4cdd7 | |||
cc70895c33 | |||
89b54579e0 | |||
c1e1a1c4ca | |||
429c88f290 | |||
074bf11633 | |||
5765088f7e | |||
316f790530 | |||
c91852a196 | |||
9ba7c5c8d6 | |||
f2a4223c7b | |||
2a5e5b48ef | |||
57e979bca1 | |||
88ca3293a6 | |||
018269377a | |||
846e102ac8 | |||
4551f6ee03 | |||
09db1e2141 | |||
cb9a9812bd | |||
d03e4063e7 | |||
21c5c85ac3 | |||
a10642d3eb | |||
2856c1cf76 | |||
3e736968d1 | |||
ac6d647ddd | |||
02439750d1 | |||
3efae7b161 | |||
49a258c830 | |||
3ffa3610ef | |||
56984b2ef1 | |||
653c87a32e | |||
07bd20120c | |||
bd7347b42c | |||
cfbef2aedb | |||
8436dfe8a0 | |||
82892d8ad8 | |||
34132ddbd6 | |||
b52af78919 | |||
13964c7a50 | |||
e5e5dc27d2 | |||
8ad8f81eed | |||
b0e855bb8a | |||
31a60e976b | |||
c108d48f00 | |||
fa741f635f | |||
5258ed7843 | |||
d31d7f5ae6 | |||
0efbfb5c2d | |||
57f867aa80 | |||
ded7d36fa8 | |||
93822d930c | |||
5474bb842d | |||
ff432200f0 | |||
310214eb46 | |||
bc3b08e470 | |||
1ef555ab24 | |||
c8c6cb62ea | |||
ac21591ee9 | |||
bef01206d1 |
18
.github/workflows/docker-description.yml
vendored
Normal file
18
.github/workflows/docker-description.yml
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
name: Docker build & push
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
docker-description:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Docker Hub Description
|
||||||
|
uses: peter-evans/dockerhub-description@v2.4.1
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
repository: factoriotools/factorio
|
53
.github/workflows/docker.yml
vendored
Normal file
53
.github/workflows/docker.yml
vendored
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
name: Docker build & push
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
push:
|
||||||
|
branches: master
|
||||||
|
tags:
|
||||||
|
- '*'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
old-version:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
version: [ "1.0", "0.18", "0.17", "0.16", "0.15", "0.14" ]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: build
|
||||||
|
env:
|
||||||
|
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
VERSION_SHORT: ${{ matrix.version }}
|
||||||
|
run: |
|
||||||
|
./build.sh ${{ matrix.version }}
|
||||||
|
|
||||||
|
stable:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: build
|
||||||
|
env:
|
||||||
|
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
EXTRA_TAG: stable,latest
|
||||||
|
VERSION_SHORT: "1.1"
|
||||||
|
run: |
|
||||||
|
./build.sh $VERSION_SHORT
|
||||||
|
|
||||||
|
# experimental:
|
||||||
|
# runs-on: ubuntu-latest
|
||||||
|
# steps:
|
||||||
|
# - name: Checkout
|
||||||
|
# uses: actions/checkout@v2
|
||||||
|
# - name: build
|
||||||
|
# env:
|
||||||
|
# DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
# DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
# EXTRA_TAG: latest
|
||||||
|
# VERSION_SHORT: "1.2"
|
||||||
|
# run: |
|
||||||
|
# ./build.sh $VERSION_SHORT
|
27
.github/workflows/lint.yml
vendored
Normal file
27
.github/workflows/lint.yml
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
name: 'Linter'
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
push:
|
||||||
|
branches: master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
shellcheck:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: shellcheck
|
||||||
|
uses: reviewdog/action-shellcheck@v1
|
||||||
|
with:
|
||||||
|
github_token: ${{ secrets.github_token }}
|
||||||
|
reporter: github-pr-review
|
||||||
|
|
||||||
|
hadolint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: hadolint
|
||||||
|
uses: reviewdog/action-hadolint@v1
|
||||||
|
with:
|
||||||
|
github_token: ${{ secrets.github_token }}
|
||||||
|
reporter: github-pr-review
|
34
.travis.yml
34
.travis.yml
@ -1,34 +0,0 @@
|
|||||||
dist: xenial
|
|
||||||
language: bash
|
|
||||||
services:
|
|
||||||
- docker
|
|
||||||
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- jq
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
include:
|
|
||||||
- stage: test
|
|
||||||
script:
|
|
||||||
- git ls-files --exclude='*Dockerfile' --ignored | xargs --max-lines=1 -I{} sh -c 'docker run --rm -i -v ${PWD}/.hadolint.yaml:/.hadolint.yaml hadolint/hadolint < "$1"' -- {}
|
|
||||||
- bash -c 'shopt -s globstar; shellcheck **/*.sh'
|
|
||||||
|
|
||||||
- &build
|
|
||||||
stage: Build & update Docker HUB description
|
|
||||||
env: VERSION_SHORT=0.18 EXTRA_TAG=latest
|
|
||||||
script:
|
|
||||||
- ./build.sh $VERSION_SHORT
|
|
||||||
- <<: *build
|
|
||||||
env: VERSION_SHORT=0.17 EXTRA_TAG=stable
|
|
||||||
- <<: *build
|
|
||||||
env: VERSION_SHORT=0.16
|
|
||||||
- <<: *build
|
|
||||||
env: VERSION_SHORT=0.15
|
|
||||||
- <<: *build
|
|
||||||
env: VERSION_SHORT=0.14
|
|
||||||
- <<: *build
|
|
||||||
if: branch = master AND type != pull_request
|
|
||||||
env:
|
|
||||||
script: DOCKERHUB_USERNAME=$DOCKER_USERNAME DOCKERHUB_PASSWORD=$DOCKER_PASSWORD DOCKERHUB_REPOSITORY='factoriotools/factorio' README_FILEPATH='./README.md' ./update-dockerhub-description.sh
|
|
@ -31,6 +31,7 @@ RUN set -ox pipefail \
|
|||||||
&& chmod ugo=rwx /opt/factorio \
|
&& chmod ugo=rwx /opt/factorio \
|
||||||
&& rm "$archive" \
|
&& rm "$archive" \
|
||||||
&& ln -s "$SCENARIOS" /opt/factorio/scenarios \
|
&& ln -s "$SCENARIOS" /opt/factorio/scenarios \
|
||||||
|
&& ln -s "$SAVES" /opt/factorio/saves \
|
||||||
&& mkdir -p /opt/factorio/config/ \
|
&& mkdir -p /opt/factorio/config/ \
|
||||||
&& 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" \
|
||||||
|
@ -5,7 +5,7 @@ if [[ -f /run/secrets/username ]]; then
|
|||||||
USERNAME=$(cat /run/secrets/username)
|
USERNAME=$(cat /run/secrets/username)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -f /run/secrets/username ]]; then
|
if [[ -f /run/secrets/token ]]; then
|
||||||
TOKEN=$(cat /run/secrets/token)
|
TOKEN=$(cat /run/secrets/token)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -32,6 +32,8 @@ fi
|
|||||||
exec /opt/factorio/bin/x64/factorio \
|
exec /opt/factorio/bin/x64/factorio \
|
||||||
--port "$PORT" \
|
--port "$PORT" \
|
||||||
--start-server-load-scenario "$SERVER_SCENARIO" \
|
--start-server-load-scenario "$SERVER_SCENARIO" \
|
||||||
|
--map-gen-settings "$CONFIG/map-gen-settings.json" \
|
||||||
|
--map-settings "$CONFIG/map-settings.json" \
|
||||||
--server-settings "$CONFIG/server-settings.json" \
|
--server-settings "$CONFIG/server-settings.json" \
|
||||||
--server-banlist "$CONFIG/server-banlist.json" \
|
--server-banlist "$CONFIG/server-banlist.json" \
|
||||||
--server-whitelist "$CONFIG/server-whitelist.json" \
|
--server-whitelist "$CONFIG/server-whitelist.json" \
|
||||||
|
@ -25,11 +25,12 @@ print_failure()
|
|||||||
|
|
||||||
update_mod()
|
update_mod()
|
||||||
{
|
{
|
||||||
MOD_NAME="${1// /%20}"
|
MOD_NAME="$1"
|
||||||
|
MOD_NAME_ENCODED="${1// /%20}"
|
||||||
|
|
||||||
print_step "Checking for update of mod $MOD_NAME..."
|
print_step "Checking for update of mod $MOD_NAME..."
|
||||||
|
|
||||||
MOD_INFO_URL="$MOD_BASE_URL/api/mods/$MOD_NAME"
|
MOD_INFO_URL="$MOD_BASE_URL/api/mods/$MOD_NAME_ENCODED"
|
||||||
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
|
if ! echo "$MOD_INFO_JSON" | jq -e .name >/dev/null; then
|
||||||
|
@ -9,8 +9,8 @@ ARG PGID=845
|
|||||||
|
|
||||||
ENV PORT=34197 \
|
ENV PORT=34197 \
|
||||||
RCON_PORT=27015 \
|
RCON_PORT=27015 \
|
||||||
VERSION=0.18.45 \
|
VERSION=0.18.47 \
|
||||||
SHA1=3f9ead0229188d00ed831ed024378990d6f95701 \
|
SHA1=32e23b0e83c41f6328d9270667330ee71f60837e \
|
||||||
SAVES=/factorio/saves \
|
SAVES=/factorio/saves \
|
||||||
CONFIG=/factorio/config \
|
CONFIG=/factorio/config \
|
||||||
MODS=/factorio/mods \
|
MODS=/factorio/mods \
|
||||||
@ -31,6 +31,7 @@ RUN set -ox pipefail \
|
|||||||
&& chmod ugo=rwx /opt/factorio \
|
&& chmod ugo=rwx /opt/factorio \
|
||||||
&& rm "$archive" \
|
&& rm "$archive" \
|
||||||
&& ln -s "$SCENARIOS" /opt/factorio/scenarios \
|
&& ln -s "$SCENARIOS" /opt/factorio/scenarios \
|
||||||
|
&& ln -s "$SAVES" /opt/factorio/saves \
|
||||||
&& mkdir -p /opt/factorio/config/ \
|
&& mkdir -p /opt/factorio/config/ \
|
||||||
&& 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" \
|
||||||
|
@ -5,7 +5,7 @@ if [[ -f /run/secrets/username ]]; then
|
|||||||
USERNAME=$(cat /run/secrets/username)
|
USERNAME=$(cat /run/secrets/username)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -f /run/secrets/username ]]; then
|
if [[ -f /run/secrets/token ]]; then
|
||||||
TOKEN=$(cat /run/secrets/token)
|
TOKEN=$(cat /run/secrets/token)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -32,6 +32,8 @@ fi
|
|||||||
exec /opt/factorio/bin/x64/factorio \
|
exec /opt/factorio/bin/x64/factorio \
|
||||||
--port "$PORT" \
|
--port "$PORT" \
|
||||||
--start-server-load-scenario "$SERVER_SCENARIO" \
|
--start-server-load-scenario "$SERVER_SCENARIO" \
|
||||||
|
--map-gen-settings "$CONFIG/map-gen-settings.json" \
|
||||||
|
--map-settings "$CONFIG/map-settings.json" \
|
||||||
--server-settings "$CONFIG/server-settings.json" \
|
--server-settings "$CONFIG/server-settings.json" \
|
||||||
--server-banlist "$CONFIG/server-banlist.json" \
|
--server-banlist "$CONFIG/server-banlist.json" \
|
||||||
--server-whitelist "$CONFIG/server-whitelist.json" \
|
--server-whitelist "$CONFIG/server-whitelist.json" \
|
||||||
|
@ -25,11 +25,12 @@ print_failure()
|
|||||||
|
|
||||||
update_mod()
|
update_mod()
|
||||||
{
|
{
|
||||||
MOD_NAME="${1// /%20}"
|
MOD_NAME="$1"
|
||||||
|
MOD_NAME_ENCODED="${1// /%20}"
|
||||||
|
|
||||||
print_step "Checking for update of mod $MOD_NAME..."
|
print_step "Checking for update of mod $MOD_NAME..."
|
||||||
|
|
||||||
MOD_INFO_URL="$MOD_BASE_URL/api/mods/$MOD_NAME"
|
MOD_INFO_URL="$MOD_BASE_URL/api/mods/$MOD_NAME_ENCODED"
|
||||||
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
|
if ! echo "$MOD_INFO_JSON" | jq -e .name >/dev/null; then
|
||||||
|
45
1.0/Dockerfile
Normal file
45
1.0/Dockerfile
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
FROM frolvlad/alpine-glibc:alpine-3.12
|
||||||
|
|
||||||
|
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=1.0.0 \
|
||||||
|
SHA1=a50dd6f1ab17acde5a8d77bc5fb478c798d9c20e \
|
||||||
|
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" \
|
||||||
|
&& ln -s "$SCENARIOS" /opt/factorio/scenarios \
|
||||||
|
&& ln -s "$SAVES" /opt/factorio/saves \
|
||||||
|
&& mkdir -p /opt/factorio/config/ \
|
||||||
|
&& addgroup -g "$PGID" -S "$GROUP" \
|
||||||
|
&& adduser -u "$PUID" -G "$GROUP" -s /bin/sh -SDH "$USER" \
|
||||||
|
&& chown -R "$USER":"$GROUP" /opt/factorio /factorio
|
||||||
|
|
||||||
|
COPY files/*.sh /
|
||||||
|
COPY files/config.ini /opt/factorio/config/config.ini
|
||||||
|
|
||||||
|
VOLUME /factorio
|
||||||
|
EXPOSE $PORT/udp $RCON_PORT/tcp
|
||||||
|
ENTRYPOINT ["/docker-entrypoint.sh"]
|
16
1.0/docker-compose.yml
Normal file
16
1.0/docker-compose.yml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
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
|
||||||
|
# - PORT=34198
|
755
1.0/files/config.ini
Normal file
755
1.0/files/config.ini
Normal file
@ -0,0 +1,755 @@
|
|||||||
|
; version=8
|
||||||
|
; This is INI file : https://en.wikipedia.org/wiki/INI_file#Format
|
||||||
|
; Semicolons (;) at the beginning of the line indicate a comment. Comment lines are ignored.
|
||||||
|
[path]
|
||||||
|
read-data=__PATH__executable__/../../data
|
||||||
|
write-data=__PATH__executable__/../..
|
||||||
|
|
||||||
|
[general]
|
||||||
|
locale=
|
||||||
|
|
||||||
|
[other]
|
||||||
|
; Options: true, false
|
||||||
|
; verbose-logging=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; log-saving-statistics=false
|
||||||
|
|
||||||
|
; autosave-interval=5
|
||||||
|
|
||||||
|
; autosave-slots=3
|
||||||
|
|
||||||
|
; In ticks
|
||||||
|
; minimum-latency-in-multiplayer=0
|
||||||
|
|
||||||
|
; In seconds
|
||||||
|
; multiplayer-initial-connection-timeout=10
|
||||||
|
|
||||||
|
; port=34197
|
||||||
|
|
||||||
|
; max-map-preview-chunk-side=64
|
||||||
|
|
||||||
|
; max-map-preview-threads=7
|
||||||
|
|
||||||
|
; In bytes
|
||||||
|
; max-multiplayer-script-reload-size=1048576
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; enable-steam-networking=true
|
||||||
|
|
||||||
|
; proxy=
|
||||||
|
|
||||||
|
; proxy-username=
|
||||||
|
|
||||||
|
; proxy-password=
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; check-updates=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; enable-experimental-updates=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; enable-new-mods=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; use-mod-settings-per-save=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; disable-minimal-mode=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; disable-blueprint-storage=false
|
||||||
|
|
||||||
|
; Disables tracking which mod created/changed what prototype. Mainly for faster startup during development.
|
||||||
|
;
|
||||||
|
; Options: true, false
|
||||||
|
; disable-prototype-history=false
|
||||||
|
|
||||||
|
; Print a warning for all prototype values that were not accessed.
|
||||||
|
;
|
||||||
|
; Options: true, false
|
||||||
|
; check-unused-prototype-data=false
|
||||||
|
|
||||||
|
; Cache data stage prototype data for faster startup. Experimental.
|
||||||
|
;
|
||||||
|
; Options: true, false
|
||||||
|
; cache-prototype-data=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; enable-razer-chroma-support=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; enable-logitech-led-support=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; enable-crash-log-uploading=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; enable-heap-validation=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; enable-threaded-message-pump=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; enable-taskbar-animation=true
|
||||||
|
|
||||||
|
; Does nothing on Windows
|
||||||
|
;
|
||||||
|
; Options: true, false
|
||||||
|
; non-blocking-saving=false
|
||||||
|
|
||||||
|
; Related to MacOS
|
||||||
|
;
|
||||||
|
; Options: true, false
|
||||||
|
; discard-mouse-events-when-accessibility-zoomed=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; enable-blueprint-storage-cloud-sync=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; force-enable-factorio-version-check=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; bring-window-to-top-on-click=true
|
||||||
|
|
||||||
|
; Options: fast, maximum
|
||||||
|
; multiplayer-compression-level=fast
|
||||||
|
|
||||||
|
; Options: none, fast, maximum
|
||||||
|
; autosave-compression-level=fast
|
||||||
|
|
||||||
|
; Socket to host RCON on when lauching MP server from the menu.
|
||||||
|
; local-rcon-socket=0.0.0.0:0
|
||||||
|
|
||||||
|
; Password for RCON when launching MP server from the menu.
|
||||||
|
; local-rcon-password=
|
||||||
|
|
||||||
|
|
||||||
|
[interface]
|
||||||
|
; Options: true, false
|
||||||
|
; automatic-ui-scale=true
|
||||||
|
|
||||||
|
; custom-ui-scale=1.000000
|
||||||
|
|
||||||
|
; tooltip-delay=0.040000
|
||||||
|
|
||||||
|
; entity-tooltip-delay=0.000000
|
||||||
|
|
||||||
|
; tooltip-offset=20
|
||||||
|
|
||||||
|
; output-console-delay=1200
|
||||||
|
|
||||||
|
; train-stop-label-angle=0.085526
|
||||||
|
|
||||||
|
; active-quick-bars=2
|
||||||
|
|
||||||
|
; shortcut-bar-rows=2
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; autosort-inventory=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; research-finished-stops-game=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; use-item-groups=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; use-item-subgroups=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; use-version-filter-in-browse-games-gui=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; use-version-filter-in-install-mods-gui=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; play-sound-for-chat-messages=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; fuzzy-search-enabled=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; pick-ghost-cursor=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-minimap=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-tips-and-tricks=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-tutorial-notifications=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-turret-radius-when-blueprinting=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-item-labels-in-cursor=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-rail-block-visualization=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-missing-logistic-network-icon=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-interaction-indications=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-grid-when-paused=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-inserter-arrows-when-selected=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-inserter-arrows-when-detailed-info-is-on=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-pump-arrows-when-detailed-info-is-on=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-mining-drill-arrows-when-detailed-info-is-on=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-combinator-settings-when-detailed-info-is-on=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; entity-tooltip-on-the-side=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-mod-owners-in-tooltips=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-descriptions-in-tooltips=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-total-raw-in-recipe-tooltips=true
|
||||||
|
|
||||||
|
; debug-font-size=18
|
||||||
|
|
||||||
|
; train-visualization-length=5
|
||||||
|
|
||||||
|
|
||||||
|
[sound]
|
||||||
|
; master-volume=0.800000
|
||||||
|
|
||||||
|
; music-volume=0.500000
|
||||||
|
|
||||||
|
; game-effects-volume=0.700000
|
||||||
|
|
||||||
|
; gui-effects-volume=0.600000
|
||||||
|
|
||||||
|
; walking-sound-volume=0.250000
|
||||||
|
|
||||||
|
; environment-sounds-volume=0.550000
|
||||||
|
|
||||||
|
; alerts-volume=0.500000
|
||||||
|
|
||||||
|
; wind-volume=0.350000
|
||||||
|
|
||||||
|
; audible-distance=40.000000
|
||||||
|
|
||||||
|
; environment-audible-distance=30.000000
|
||||||
|
|
||||||
|
; maximum-environment-sounds=50
|
||||||
|
|
||||||
|
; active-gui-volume-modifier=0.800000
|
||||||
|
|
||||||
|
; active-gui-environment-volume-modifier=0.400000
|
||||||
|
|
||||||
|
; The maximum volume allowed for any sound.
|
||||||
|
; maximum-volume=2.000000
|
||||||
|
|
||||||
|
; ambient-music-pause-mean-seconds=45.000000
|
||||||
|
|
||||||
|
; ambient-music-pause-variance-seconds=30.000000
|
||||||
|
|
||||||
|
; Options: main-tracks-only, interleave-main-tracks-with-interludes, randomize-all
|
||||||
|
; ambient-music-mode=interleave-main-tracks-with-interludes
|
||||||
|
|
||||||
|
; zoom-audible-distance-coefficient=0.500000
|
||||||
|
|
||||||
|
; zoom-volume-coefficient=0.750000
|
||||||
|
|
||||||
|
|
||||||
|
[map-view]
|
||||||
|
; Options: true, false
|
||||||
|
; show-logistic-network=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-electric-network=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-turret-range=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-pollution=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-networkless-logistic-members=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-train-station-names=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-player-names=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-non-standard-map-info=false
|
||||||
|
|
||||||
|
|
||||||
|
[debug]
|
||||||
|
; force=enemy
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; capture-perf-statistics=false
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-fps=debug
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-detailed-info=debug
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-time-usage=debug
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-gpu-time-usage=debug
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-sprite-counts=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-lua-object-statistics=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-heat-buffer-info=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-multiplayer-waiting-icon=debug
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-multiplayer-statistics=debug
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-multiplayer-selection-rectangles=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-debug-info-in-tooltips=debug
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; hide-mod-guis=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-tile-grid=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-collision-rectangles=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-selection-rectangles=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-render-rectangles=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-entity-positions=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-entity-velocities=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-selected-entity-advanced-tiles=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-selected-input-transport-belts=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-paths=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-path-requests=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-next-waypoint-bb=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-target=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-unit-group-info=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-unit-behavior-info=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-pathfinder-fringe=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-path-cache=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-path-cache-paths=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-rail-paths=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-rolling-stock-count=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-rail-connections=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-rail-joints=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-rail-signal-states=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-rail-segment-collision-boxes=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-train-stop-point=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-train-braking-distance=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-train-signals=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-train-repathing=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-network-connected-entities=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-circuit-network-numbers=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-energy-sources-networks=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-active-state=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-wakeup-lists=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-transport-lines=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-transport-line-gaps=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-pollution-values=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-active-entities-on-chunk-counts=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-active-chunks=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-polluted-chunks=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; hide-chart-tags=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-enemy-expansion-candidate-chunks=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-enemy-expansion-candidate-chunk-values=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-bad-attack-chunks=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-tile-variations=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-raw-tile-transitions=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-fluid-box-fluid-info=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-environment-sound-info=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-environment-sound-area=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-selected-entity-audible-range=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-recently-played-sound-info=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-logistic-robot-targets=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-logistic-robots-on-map=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-recipe-icons-on-map=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-player-robots=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-fire-info=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-sticker-info=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-decorative-names=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-decorative-collision-rectangles=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; allow-increased-zoom=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-chunk-components=never
|
||||||
|
|
||||||
|
|
||||||
|
[multiplayer-lobby]
|
||||||
|
; name=
|
||||||
|
|
||||||
|
; description=
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; visibility-public=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; visibility-steam=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; visibility-lan=true
|
||||||
|
|
||||||
|
; max-players=0
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; ignore-player-limit-when-returning=false
|
||||||
|
|
||||||
|
; max-upload-in-kilobytes-per-second=0
|
||||||
|
|
||||||
|
; max-upload-slots=5
|
||||||
|
|
||||||
|
; password=
|
||||||
|
|
||||||
|
; tag-list=
|
||||||
|
|
||||||
|
; afk-auto-kick=0
|
||||||
|
|
||||||
|
; Options: true, false, admins-only
|
||||||
|
; allowed-commands=admins-only
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; only-admins-can-pause=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; autosave-only-on-server=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; non-blocking-saving=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; verify-user-identity=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; enable-whitelist=false
|
||||||
|
|
||||||
|
|
||||||
|
[graphics]
|
||||||
|
; lights-render-quality=0.250000
|
||||||
|
|
||||||
|
; Default preferred display index should force finding primary monitor
|
||||||
|
; preferred-display-index=255
|
||||||
|
|
||||||
|
; screenshots-threads-count=8
|
||||||
|
|
||||||
|
; cache-sprite-atlas-count=1
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; cache-sprite-atlas=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; compress-sprite-atlas-cache=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; texture-streaming=true
|
||||||
|
|
||||||
|
; streamed-atlas-physical-vram-size=0
|
||||||
|
|
||||||
|
; sprite-vertex-buffer-size=1048576
|
||||||
|
|
||||||
|
; max-texture-size=0
|
||||||
|
|
||||||
|
; max-threads=8
|
||||||
|
|
||||||
|
; 'low' and 'very-low' options are deprecated and will be migrated to 'normal'
|
||||||
|
;
|
||||||
|
; Options: high, normal, low, very-low
|
||||||
|
; graphics-quality=normal
|
||||||
|
|
||||||
|
; brightness=0
|
||||||
|
|
||||||
|
; contrast=0
|
||||||
|
|
||||||
|
; saturation=100
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; full-screen=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; minimize-on-focus-loss=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-smoke=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-clouds=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-decoratives=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-particles=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-item-shadows=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-inserter-shadows=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-animated-water=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-tree-distortion=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; force-opengl=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; v-sync=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; high-quality-animations=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; high-quality-shadows=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; high-quality-terrain=true
|
||||||
|
|
||||||
|
; Minimum number of turrets required to turn on the turret range overdraw optimization
|
||||||
|
; turret-overdraw-minimum-count=4
|
||||||
|
|
||||||
|
; Scale at which the turret range overdraw optimization will start being applied
|
||||||
|
; turret-overdraw-scale-threshold=0.200000
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; skip-vram-detection=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; halt-rendering-when-minimized=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; runtime-sprite-reload=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; full-color-depth=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; render-in-native-resolution=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; use-flip-presentation-model=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; debug-api=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; discard-buffers-on-begin-frame=true
|
||||||
|
|
||||||
|
; Options: all, high, medium, low
|
||||||
|
; video-memory-usage=high
|
||||||
|
|
||||||
|
; Options: none, high-quality, low-quality
|
||||||
|
; texture-compression-level=high-quality
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; compress-virtual-atlas=true
|
||||||
|
|
||||||
|
; Options: copy, copy-sequential, flip, flip-discard
|
||||||
|
; dxgi-presentation-model=copy
|
||||||
|
|
||||||
|
; Options: none, flush, wait-for-vblank, flush-and-wait-for-vblank
|
||||||
|
; dxgi-action-before-present=none
|
||||||
|
|
||||||
|
; relevant only for flip presentation models
|
||||||
|
;
|
||||||
|
; Options: true, false
|
||||||
|
; dxgi-allow-tearing=false
|
||||||
|
|
||||||
|
; Options: false, true, auto
|
||||||
|
; dxgi-flip-do-not-wait=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; dxgi-present-restart=false
|
||||||
|
|
||||||
|
; dxgi-swap-chain-buffer-count=0
|
||||||
|
|
||||||
|
; dxgi-max-frame-latency=0
|
||||||
|
|
||||||
|
; dxgi-adapter-index=-1
|
||||||
|
|
||||||
|
; max-sprite-loading-threads=32
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; gpu-accelerated-compression=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; gpu-accelerated-mipmap-compression=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; wait-until-mipmap-generation-finished=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; check-for-unused-pixels=false
|
||||||
|
|
||||||
|
; ogl-depth-buffer-bit-depth=0
|
||||||
|
|
||||||
|
; Options: false, true, auto
|
||||||
|
; ogl-accelerated-renderer=auto
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; ogl-double-buffered=true
|
||||||
|
|
||||||
|
; Set to true if mipmapped sprites render very blurry on your GPU. Limited support.
|
||||||
|
;
|
||||||
|
; Options: true, false
|
||||||
|
; legacy-gpu-no-mipmaps=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; force-linear-magnification=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; custom-mipmap-workaround=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; buffer-rename-workaround=false
|
||||||
|
|
||||||
|
; Comma separated list of OpenGL extensions that should not be used (for example: ARB_copy_image,KHR_debug)
|
||||||
|
; disabled-opengl-extensions=
|
||||||
|
|
||||||
|
|
98
1.0/files/docker-entrypoint.sh
Executable file
98
1.0/files/docker-entrypoint.sh
Executable file
@ -0,0 +1,98 @@
|
|||||||
|
#!/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:-} == "true" ]]; 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
|
||||||
|
|
||||||
|
sed -i '/write-data=/c\write-data=\/factorio/' /opt/factorio/config/config.ini
|
||||||
|
|
||||||
|
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
1.0/files/docker-update-mods.sh
Executable file
28
1.0/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/token ]]; 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"
|
44
1.0/files/scenario.sh
Executable file
44
1.0/files/scenario.sh
Executable file
@ -0,0 +1,44 @@
|
|||||||
|
#!/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" \
|
||||||
|
--map-gen-settings "$CONFIG/map-gen-settings.json" \
|
||||||
|
--map-settings "$CONFIG/map-settings.json" \
|
||||||
|
--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
1.0/files/scenario2map.sh
Executable file
27
1.0/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"
|
96
1.0/files/update-mods.sh
Executable file
96
1.0/files/update-mods.sh
Executable file
@ -0,0 +1,96 @@
|
|||||||
|
#!/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"
|
||||||
|
MOD_NAME_ENCODED="${1// /%20}"
|
||||||
|
|
||||||
|
print_step "Checking for update of mod $MOD_NAME..."
|
||||||
|
|
||||||
|
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
|
||||||
|
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
|
45
1.1/Dockerfile
Normal file
45
1.1/Dockerfile
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
FROM frolvlad/alpine-glibc:alpine-3.12
|
||||||
|
|
||||||
|
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=1.1.26 \
|
||||||
|
SHA1=5736da3d068ee74b282926b99ad0255368569b51 \
|
||||||
|
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" \
|
||||||
|
&& ln -s "$SCENARIOS" /opt/factorio/scenarios \
|
||||||
|
&& ln -s "$SAVES" /opt/factorio/saves \
|
||||||
|
&& mkdir -p /opt/factorio/config/ \
|
||||||
|
&& addgroup -g "$PGID" -S "$GROUP" \
|
||||||
|
&& adduser -u "$PUID" -G "$GROUP" -s /bin/sh -SDH "$USER" \
|
||||||
|
&& chown -R "$USER":"$GROUP" /opt/factorio /factorio
|
||||||
|
|
||||||
|
COPY files/*.sh /
|
||||||
|
COPY files/config.ini /opt/factorio/config/config.ini
|
||||||
|
|
||||||
|
VOLUME /factorio
|
||||||
|
EXPOSE $PORT/udp $RCON_PORT/tcp
|
||||||
|
ENTRYPOINT ["/docker-entrypoint.sh"]
|
16
1.1/docker-compose.yml
Normal file
16
1.1/docker-compose.yml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
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
|
||||||
|
# - PORT=34198
|
755
1.1/files/config.ini
Normal file
755
1.1/files/config.ini
Normal file
@ -0,0 +1,755 @@
|
|||||||
|
; version=8
|
||||||
|
; This is INI file : https://en.wikipedia.org/wiki/INI_file#Format
|
||||||
|
; Semicolons (;) at the beginning of the line indicate a comment. Comment lines are ignored.
|
||||||
|
[path]
|
||||||
|
read-data=__PATH__executable__/../../data
|
||||||
|
write-data=__PATH__executable__/../..
|
||||||
|
|
||||||
|
[general]
|
||||||
|
locale=
|
||||||
|
|
||||||
|
[other]
|
||||||
|
; Options: true, false
|
||||||
|
; verbose-logging=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; log-saving-statistics=false
|
||||||
|
|
||||||
|
; autosave-interval=5
|
||||||
|
|
||||||
|
; autosave-slots=3
|
||||||
|
|
||||||
|
; In ticks
|
||||||
|
; minimum-latency-in-multiplayer=0
|
||||||
|
|
||||||
|
; In seconds
|
||||||
|
; multiplayer-initial-connection-timeout=10
|
||||||
|
|
||||||
|
; port=34197
|
||||||
|
|
||||||
|
; max-map-preview-chunk-side=64
|
||||||
|
|
||||||
|
; max-map-preview-threads=7
|
||||||
|
|
||||||
|
; In bytes
|
||||||
|
; max-multiplayer-script-reload-size=1048576
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; enable-steam-networking=true
|
||||||
|
|
||||||
|
; proxy=
|
||||||
|
|
||||||
|
; proxy-username=
|
||||||
|
|
||||||
|
; proxy-password=
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; check-updates=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; enable-experimental-updates=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; enable-new-mods=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; use-mod-settings-per-save=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; disable-minimal-mode=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; disable-blueprint-storage=false
|
||||||
|
|
||||||
|
; Disables tracking which mod created/changed what prototype. Mainly for faster startup during development.
|
||||||
|
;
|
||||||
|
; Options: true, false
|
||||||
|
; disable-prototype-history=false
|
||||||
|
|
||||||
|
; Print a warning for all prototype values that were not accessed.
|
||||||
|
;
|
||||||
|
; Options: true, false
|
||||||
|
; check-unused-prototype-data=false
|
||||||
|
|
||||||
|
; Cache data stage prototype data for faster startup. Experimental.
|
||||||
|
;
|
||||||
|
; Options: true, false
|
||||||
|
; cache-prototype-data=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; enable-razer-chroma-support=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; enable-logitech-led-support=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; enable-crash-log-uploading=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; enable-heap-validation=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; enable-threaded-message-pump=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; enable-taskbar-animation=true
|
||||||
|
|
||||||
|
; Does nothing on Windows
|
||||||
|
;
|
||||||
|
; Options: true, false
|
||||||
|
; non-blocking-saving=false
|
||||||
|
|
||||||
|
; Related to MacOS
|
||||||
|
;
|
||||||
|
; Options: true, false
|
||||||
|
; discard-mouse-events-when-accessibility-zoomed=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; enable-blueprint-storage-cloud-sync=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; force-enable-factorio-version-check=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; bring-window-to-top-on-click=true
|
||||||
|
|
||||||
|
; Options: fast, maximum
|
||||||
|
; multiplayer-compression-level=fast
|
||||||
|
|
||||||
|
; Options: none, fast, maximum
|
||||||
|
; autosave-compression-level=fast
|
||||||
|
|
||||||
|
; Socket to host RCON on when lauching MP server from the menu.
|
||||||
|
; local-rcon-socket=0.0.0.0:0
|
||||||
|
|
||||||
|
; Password for RCON when launching MP server from the menu.
|
||||||
|
; local-rcon-password=
|
||||||
|
|
||||||
|
|
||||||
|
[interface]
|
||||||
|
; Options: true, false
|
||||||
|
; automatic-ui-scale=true
|
||||||
|
|
||||||
|
; custom-ui-scale=1.000000
|
||||||
|
|
||||||
|
; tooltip-delay=0.040000
|
||||||
|
|
||||||
|
; entity-tooltip-delay=0.000000
|
||||||
|
|
||||||
|
; tooltip-offset=20
|
||||||
|
|
||||||
|
; output-console-delay=1200
|
||||||
|
|
||||||
|
; train-stop-label-angle=0.085526
|
||||||
|
|
||||||
|
; active-quick-bars=2
|
||||||
|
|
||||||
|
; shortcut-bar-rows=2
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; autosort-inventory=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; research-finished-stops-game=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; use-item-groups=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; use-item-subgroups=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; use-version-filter-in-browse-games-gui=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; use-version-filter-in-install-mods-gui=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; play-sound-for-chat-messages=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; fuzzy-search-enabled=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; pick-ghost-cursor=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-minimap=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-tips-and-tricks=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-tutorial-notifications=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-turret-radius-when-blueprinting=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-item-labels-in-cursor=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-rail-block-visualization=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-missing-logistic-network-icon=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-interaction-indications=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-grid-when-paused=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-inserter-arrows-when-selected=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-inserter-arrows-when-detailed-info-is-on=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-pump-arrows-when-detailed-info-is-on=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-mining-drill-arrows-when-detailed-info-is-on=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-combinator-settings-when-detailed-info-is-on=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; entity-tooltip-on-the-side=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-mod-owners-in-tooltips=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-descriptions-in-tooltips=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-total-raw-in-recipe-tooltips=true
|
||||||
|
|
||||||
|
; debug-font-size=18
|
||||||
|
|
||||||
|
; train-visualization-length=5
|
||||||
|
|
||||||
|
|
||||||
|
[sound]
|
||||||
|
; master-volume=0.800000
|
||||||
|
|
||||||
|
; music-volume=0.500000
|
||||||
|
|
||||||
|
; game-effects-volume=0.700000
|
||||||
|
|
||||||
|
; gui-effects-volume=0.600000
|
||||||
|
|
||||||
|
; walking-sound-volume=0.250000
|
||||||
|
|
||||||
|
; environment-sounds-volume=0.550000
|
||||||
|
|
||||||
|
; alerts-volume=0.500000
|
||||||
|
|
||||||
|
; wind-volume=0.350000
|
||||||
|
|
||||||
|
; audible-distance=40.000000
|
||||||
|
|
||||||
|
; environment-audible-distance=30.000000
|
||||||
|
|
||||||
|
; maximum-environment-sounds=50
|
||||||
|
|
||||||
|
; active-gui-volume-modifier=0.800000
|
||||||
|
|
||||||
|
; active-gui-environment-volume-modifier=0.400000
|
||||||
|
|
||||||
|
; The maximum volume allowed for any sound.
|
||||||
|
; maximum-volume=2.000000
|
||||||
|
|
||||||
|
; ambient-music-pause-mean-seconds=45.000000
|
||||||
|
|
||||||
|
; ambient-music-pause-variance-seconds=30.000000
|
||||||
|
|
||||||
|
; Options: main-tracks-only, interleave-main-tracks-with-interludes, randomize-all
|
||||||
|
; ambient-music-mode=interleave-main-tracks-with-interludes
|
||||||
|
|
||||||
|
; zoom-audible-distance-coefficient=0.500000
|
||||||
|
|
||||||
|
; zoom-volume-coefficient=0.750000
|
||||||
|
|
||||||
|
|
||||||
|
[map-view]
|
||||||
|
; Options: true, false
|
||||||
|
; show-logistic-network=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-electric-network=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-turret-range=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-pollution=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-networkless-logistic-members=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-train-station-names=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-player-names=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-non-standard-map-info=false
|
||||||
|
|
||||||
|
|
||||||
|
[debug]
|
||||||
|
; force=enemy
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; capture-perf-statistics=false
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-fps=debug
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-detailed-info=debug
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-time-usage=debug
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-gpu-time-usage=debug
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-sprite-counts=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-lua-object-statistics=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-heat-buffer-info=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-multiplayer-waiting-icon=debug
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-multiplayer-statistics=debug
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-multiplayer-selection-rectangles=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-debug-info-in-tooltips=debug
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; hide-mod-guis=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-tile-grid=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-collision-rectangles=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-selection-rectangles=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-render-rectangles=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-entity-positions=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-entity-velocities=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-selected-entity-advanced-tiles=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-selected-input-transport-belts=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-paths=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-path-requests=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-next-waypoint-bb=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-target=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-unit-group-info=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-unit-behavior-info=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-pathfinder-fringe=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-path-cache=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-path-cache-paths=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-rail-paths=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-rolling-stock-count=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-rail-connections=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-rail-joints=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-rail-signal-states=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-rail-segment-collision-boxes=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-train-stop-point=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-train-braking-distance=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-train-signals=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-train-repathing=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-network-connected-entities=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-circuit-network-numbers=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-energy-sources-networks=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-active-state=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-wakeup-lists=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-transport-lines=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-transport-line-gaps=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-pollution-values=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-active-entities-on-chunk-counts=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-active-chunks=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-polluted-chunks=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; hide-chart-tags=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-enemy-expansion-candidate-chunks=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-enemy-expansion-candidate-chunk-values=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-bad-attack-chunks=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-tile-variations=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-raw-tile-transitions=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-fluid-box-fluid-info=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-environment-sound-info=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-environment-sound-area=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-selected-entity-audible-range=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-recently-played-sound-info=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-logistic-robot-targets=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-logistic-robots-on-map=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-recipe-icons-on-map=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-player-robots=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-fire-info=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-sticker-info=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-decorative-names=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-decorative-collision-rectangles=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; allow-increased-zoom=never
|
||||||
|
|
||||||
|
; Options: always, debug, never
|
||||||
|
; show-chunk-components=never
|
||||||
|
|
||||||
|
|
||||||
|
[multiplayer-lobby]
|
||||||
|
; name=
|
||||||
|
|
||||||
|
; description=
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; visibility-public=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; visibility-steam=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; visibility-lan=true
|
||||||
|
|
||||||
|
; max-players=0
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; ignore-player-limit-when-returning=false
|
||||||
|
|
||||||
|
; max-upload-in-kilobytes-per-second=0
|
||||||
|
|
||||||
|
; max-upload-slots=5
|
||||||
|
|
||||||
|
; password=
|
||||||
|
|
||||||
|
; tag-list=
|
||||||
|
|
||||||
|
; afk-auto-kick=0
|
||||||
|
|
||||||
|
; Options: true, false, admins-only
|
||||||
|
; allowed-commands=admins-only
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; only-admins-can-pause=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; autosave-only-on-server=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; non-blocking-saving=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; verify-user-identity=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; enable-whitelist=false
|
||||||
|
|
||||||
|
|
||||||
|
[graphics]
|
||||||
|
; lights-render-quality=0.250000
|
||||||
|
|
||||||
|
; Default preferred display index should force finding primary monitor
|
||||||
|
; preferred-display-index=255
|
||||||
|
|
||||||
|
; screenshots-threads-count=8
|
||||||
|
|
||||||
|
; cache-sprite-atlas-count=1
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; cache-sprite-atlas=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; compress-sprite-atlas-cache=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; texture-streaming=true
|
||||||
|
|
||||||
|
; streamed-atlas-physical-vram-size=0
|
||||||
|
|
||||||
|
; sprite-vertex-buffer-size=1048576
|
||||||
|
|
||||||
|
; max-texture-size=0
|
||||||
|
|
||||||
|
; max-threads=8
|
||||||
|
|
||||||
|
; 'low' and 'very-low' options are deprecated and will be migrated to 'normal'
|
||||||
|
;
|
||||||
|
; Options: high, normal, low, very-low
|
||||||
|
; graphics-quality=normal
|
||||||
|
|
||||||
|
; brightness=0
|
||||||
|
|
||||||
|
; contrast=0
|
||||||
|
|
||||||
|
; saturation=100
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; full-screen=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; minimize-on-focus-loss=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-smoke=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-clouds=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-decoratives=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-particles=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-item-shadows=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-inserter-shadows=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-animated-water=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; show-tree-distortion=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; force-opengl=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; v-sync=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; high-quality-animations=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; high-quality-shadows=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; high-quality-terrain=true
|
||||||
|
|
||||||
|
; Minimum number of turrets required to turn on the turret range overdraw optimization
|
||||||
|
; turret-overdraw-minimum-count=4
|
||||||
|
|
||||||
|
; Scale at which the turret range overdraw optimization will start being applied
|
||||||
|
; turret-overdraw-scale-threshold=0.200000
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; skip-vram-detection=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; halt-rendering-when-minimized=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; runtime-sprite-reload=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; full-color-depth=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; render-in-native-resolution=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; use-flip-presentation-model=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; debug-api=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; discard-buffers-on-begin-frame=true
|
||||||
|
|
||||||
|
; Options: all, high, medium, low
|
||||||
|
; video-memory-usage=high
|
||||||
|
|
||||||
|
; Options: none, high-quality, low-quality
|
||||||
|
; texture-compression-level=high-quality
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; compress-virtual-atlas=true
|
||||||
|
|
||||||
|
; Options: copy, copy-sequential, flip, flip-discard
|
||||||
|
; dxgi-presentation-model=copy
|
||||||
|
|
||||||
|
; Options: none, flush, wait-for-vblank, flush-and-wait-for-vblank
|
||||||
|
; dxgi-action-before-present=none
|
||||||
|
|
||||||
|
; relevant only for flip presentation models
|
||||||
|
;
|
||||||
|
; Options: true, false
|
||||||
|
; dxgi-allow-tearing=false
|
||||||
|
|
||||||
|
; Options: false, true, auto
|
||||||
|
; dxgi-flip-do-not-wait=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; dxgi-present-restart=false
|
||||||
|
|
||||||
|
; dxgi-swap-chain-buffer-count=0
|
||||||
|
|
||||||
|
; dxgi-max-frame-latency=0
|
||||||
|
|
||||||
|
; dxgi-adapter-index=-1
|
||||||
|
|
||||||
|
; max-sprite-loading-threads=32
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; gpu-accelerated-compression=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; gpu-accelerated-mipmap-compression=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; wait-until-mipmap-generation-finished=true
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; check-for-unused-pixels=false
|
||||||
|
|
||||||
|
; ogl-depth-buffer-bit-depth=0
|
||||||
|
|
||||||
|
; Options: false, true, auto
|
||||||
|
; ogl-accelerated-renderer=auto
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; ogl-double-buffered=true
|
||||||
|
|
||||||
|
; Set to true if mipmapped sprites render very blurry on your GPU. Limited support.
|
||||||
|
;
|
||||||
|
; Options: true, false
|
||||||
|
; legacy-gpu-no-mipmaps=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; force-linear-magnification=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; custom-mipmap-workaround=false
|
||||||
|
|
||||||
|
; Options: true, false
|
||||||
|
; buffer-rename-workaround=false
|
||||||
|
|
||||||
|
; Comma separated list of OpenGL extensions that should not be used (for example: ARB_copy_image,KHR_debug)
|
||||||
|
; disabled-opengl-extensions=
|
||||||
|
|
||||||
|
|
98
1.1/files/docker-entrypoint.sh
Executable file
98
1.1/files/docker-entrypoint.sh
Executable file
@ -0,0 +1,98 @@
|
|||||||
|
#!/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:-} == "true" ]]; 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
|
||||||
|
|
||||||
|
sed -i '/write-data=/c\write-data=\/factorio/' /opt/factorio/config/config.ini
|
||||||
|
|
||||||
|
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
1.1/files/docker-update-mods.sh
Executable file
28
1.1/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/token ]]; 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"
|
44
1.1/files/scenario.sh
Executable file
44
1.1/files/scenario.sh
Executable file
@ -0,0 +1,44 @@
|
|||||||
|
#!/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" \
|
||||||
|
--map-gen-settings "$CONFIG/map-gen-settings.json" \
|
||||||
|
--map-settings "$CONFIG/map-settings.json" \
|
||||||
|
--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
1.1/files/scenario2map.sh
Executable file
27
1.1/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"
|
96
1.1/files/update-mods.sh
Executable file
96
1.1/files/update-mods.sh
Executable file
@ -0,0 +1,96 @@
|
|||||||
|
#!/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"
|
||||||
|
MOD_NAME_ENCODED="${1// /%20}"
|
||||||
|
|
||||||
|
print_step "Checking for update of mod $MOD_NAME..."
|
||||||
|
|
||||||
|
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
|
||||||
|
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
|
10
README.md
10
README.md
@ -1,7 +1,9 @@
|
|||||||
# 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.18.45`, `0.18`, `latest` [(0.18/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.18/Dockerfile)
|
* `1.1.26`, `1.1`, `latest`, `stable` [(1.1/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/1.1/Dockerfile)
|
||||||
* `0.17.79`, `0.17`, `stable` [(0.17/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.17/Dockerfile)
|
* `1.0.0`, `1.0` [(1.0/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/1.0/Dockerfile)
|
||||||
|
* `0.18.47`, `0.18` [(0.18/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.18/Dockerfile)
|
||||||
|
* `0.17.79`, `0.17` [(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)
|
||||||
@ -311,7 +313,7 @@ sudo docker-compose up -d
|
|||||||
|
|
||||||
### Ports
|
### Ports
|
||||||
|
|
||||||
* `34197/udp` - Game server (required).
|
* `34197/udp` - Game server (required). This can be changed with the `PORT` environment variable.
|
||||||
* `27015/tcp` - RCON (optional).
|
* `27015/tcp` - RCON (optional).
|
||||||
|
|
||||||
## LAN Games
|
## LAN Games
|
||||||
@ -378,7 +380,7 @@ Use the `PORT` environment variable to start the server on the a different port,
|
|||||||
* [DBendit](https://github.com/DBendit/docker_factorio_server) - Coded admin list, ban list support and contributed version updates
|
* [DBendit](https://github.com/DBendit/docker_factorio_server) - Coded admin list, ban list support and contributed version updates
|
||||||
* [Zopanix](https://github.com/zopanix/docker_factorio_server) - Original Author
|
* [Zopanix](https://github.com/zopanix/docker_factorio_server) - Original Author
|
||||||
* [Rfvgyhn](https://github.com/Rfvgyhn/docker-factorio) - Coded randomly generated RCON password
|
* [Rfvgyhn](https://github.com/Rfvgyhn/docker-factorio) - Coded randomly generated RCON password
|
||||||
* [gnomus](https://github.com/gnomus/docker_factorio_server) - Coded wite listing support
|
* [gnomus](https://github.com/gnomus/docker_factorio_server) - Coded white listing support
|
||||||
* [bplein](https://github.com/bplein/docker_factorio_server) - Coded scenario support
|
* [bplein](https://github.com/bplein/docker_factorio_server) - Coded scenario support
|
||||||
* [jaredledvina](https://github.com/jaredledvina/docker_factorio_server) - Contributed version updates
|
* [jaredledvina](https://github.com/jaredledvina/docker_factorio_server) - Contributed version updates
|
||||||
* [carlbennett](https://github.com/carlbennett) - Contributed version updates and bugfixes
|
* [carlbennett](https://github.com/carlbennett) - Contributed version updates and bugfixes
|
||||||
|
37
build.sh
37
build.sh
@ -16,19 +16,21 @@ 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
|
BRANCH=${GITHUB_REF#refs/*/}
|
||||||
TAGS="$DOCKER_REPO:$TRAVIS_PULL_REQUEST_SLUG"
|
|
||||||
|
if [[ -n ${GITHUB_BASE_REF:-} ]]; then
|
||||||
|
TAGS="-t $DOCKER_REPO:$GITHUB_BASE_REF"
|
||||||
else
|
else
|
||||||
if [[ -n ${CI:-} ]]; then
|
if [[ -n ${CI:-} ]]; then
|
||||||
# we are either on master or on a tag build
|
# we are either on master or on a tag build
|
||||||
if [[ ${TRAVIS_BRANCH:-} == master || ${TRAVIS_BRANCH:-} == "$VERSION" ]]; then
|
if [[ ${BRANCH:-} == master || ${BRANCH:-} == "$VERSION" ]]; then
|
||||||
TAGS="-t $DOCKER_REPO:$VERSION -t $DOCKER_REPO:$VERSION_SHORT"
|
TAGS="-t $DOCKER_REPO:$VERSION -t $DOCKER_REPO:$VERSION_SHORT"
|
||||||
# we are on an incremental build of a tag
|
# we are on an incremental build of a tag
|
||||||
elif [[ $VERSION == "${TRAVIS_BRANCH%-*}" ]]; then
|
elif [[ $VERSION == "${BRANCH%-*}" ]]; then
|
||||||
TAGS="-t $DOCKER_REPO:$TRAVIS_BRANCH -t $DOCKER_REPO:$VERSION -t $DOCKER_REPO:$VERSION_SHORT"
|
TAGS="-t $DOCKER_REPO:$BRANCH -t $DOCKER_REPO:$VERSION -t $DOCKER_REPO:$VERSION_SHORT"
|
||||||
# we build a other branch than master and exclude dependabot branches from tags cause the / is not supported by docker
|
# we build a other branch than master and exclude dependabot branches from tags cause the / is not supported by docker
|
||||||
elif [[ -n ${TRAVIS_BRANCH:-} && ! $TRAVIS_BRANCH =~ "/" ]]; then
|
elif [[ -n ${BRANCH:-} && ! $BRANCH =~ "/" ]]; then
|
||||||
TAGS="-t $DOCKER_REPO:$TRAVIS_BRANCH"
|
TAGS="-t $DOCKER_REPO:$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
|
||||||
@ -47,19 +49,24 @@ else
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Travis gets rate limited by Docker HUB.
|
||||||
|
if [[ ${CI:-} == true && -n ${DOCKER_PASSWORD:-} && -n ${DOCKER_USERNAME:-} ]]; then
|
||||||
|
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
|
||||||
|
fi
|
||||||
|
|
||||||
# shellcheck disable=SC2068
|
# shellcheck disable=SC2068
|
||||||
eval docker build . ${TAGS[@]:-}
|
eval docker build . ${TAGS[@]:-}
|
||||||
docker images
|
docker images
|
||||||
|
|
||||||
# remove -1 from incremental tag
|
# remove -1 from incremental tag
|
||||||
# eg before: 0.18.24-1, after 0.18.24
|
# eg before: 0.18.24-1, after 0.18.24
|
||||||
if [[ ${TRAVIS_BRANCH:-} ]]; then
|
if [[ ${BRANCH:-} ]]; then
|
||||||
TRAVIS_BRANCH_VERSION=${TRAVIS_BRANCH%-*}
|
BRANCH_VERSION=${BRANCH%-*}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# only push when:
|
# only push when:
|
||||||
# or we build a tag and we don't build a PR
|
# or we build a tag and we don't build a PR
|
||||||
if [[ $VERSION == "${TRAVIS_BRANCH_VERSION:-}" && ${TRAVIS_PULL_REQUEST_BRANCH:-} == "" ]] ||
|
if [[ $VERSION == "${BRANCH_VERSION:-}" && ${GITHUB_BASE_REF:-} == "" ]] ||
|
||||||
# or we are not in CI
|
# or we are not in CI
|
||||||
[[ -z ${CI:-} ]]; then
|
[[ -z ${CI:-} ]]; then
|
||||||
|
|
||||||
@ -68,18 +75,18 @@ if [[ $VERSION == "${TRAVIS_BRANCH_VERSION:-}" && ${TRAVIS_PULL_REQUEST_BRANCH:-
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# push a tag on a branch other than master except dependabot branches cause docker does not support /
|
# push a tag on a branch other than master except dependabot branches cause docker does not support /
|
||||||
if [[ -n ${TRAVIS_BRANCH:-} && $VERSION != "${TRAVIS_BRANCH_VERSION:-}" && ${TRAVIS_BRANCH:-} != "master" && ! ${TRAVIS_BRANCH:-} =~ "/" ]]; then
|
if [[ -n ${BRANCH:-} && $VERSION != "${BRANCH_VERSION:-}" && ${BRANCH:-} != "master" && ! ${BRANCH:-} =~ "/" ]]; then
|
||||||
docker push "$DOCKER_REPO:$TRAVIS_BRANCH"
|
docker push "$DOCKER_REPO:$BRANCH"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# push an incremental tag
|
# push an incremental tag
|
||||||
# eg 0.18.24-1
|
# eg 0.18.24-1
|
||||||
if [[ $VERSION == "${TRAVIS_BRANCH_VERSION:-}" ]]; then
|
if [[ $VERSION == "${BRANCH_VERSION:-}" ]]; then
|
||||||
docker push "$DOCKER_REPO:$TRAVIS_BRANCH"
|
docker push "$DOCKER_REPO:$BRANCH"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# only push on tags or when manually running the script
|
# only push on tags or when manually running the script
|
||||||
if [[ -n ${TRAVIS_TAG:-} || -z ${CI:-} ]]; then
|
if [[ -n ${BRANCH_VERSION:-} || -z ${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
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
#!/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