Compare commits

...

974 Commits

Author SHA1 Message Date
Florian Kinder
17ec12cb7f Fix shellcheck warnings in entrypoint scripts
- Add shellcheck disable=SC1091 for dynamic source paths
- Quote INSTALLED_DIRECTORY variables to prevent word splitting
- Resolves all reported shellcheck issues in PR review

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-31 22:31:45 +09:00
Florian Kinder
b8ad6e06ab Fix ARM64 emulation support in all entrypoints
- Add shared setup-exec.sh script to handle ARM64 emulation logic
- Update scenario.sh and scenario2map.sh to use box64 emulation on ARM64
- Refactor docker-entrypoint.sh and docker-entrypoint-rootless.sh to use shared script
- Ensures all factorio binary calls work correctly on ARM64 platforms

Fixes #585

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-31 22:21:22 +09:00
github-actions[bot]
89183f5271 Auto Update Factorio to stable version: 2.0.60 experimental version: 2.0.65 2025-08-22 12:50:33 +00:00
Florian Kinder
4e0c2d0fe9 Fix missing addgroup/adduser commands in Debian slim image (#584)
Replace addgroup/adduser with groupadd/useradd which are available
in the debian:stable-slim base image. The addgroup and adduser commands
are part of the adduser package which is not installed in the slim image.

This fixes the build failure:
/bin/bash: line 1: addgroup: command not found

Continues fix for #582
2025-08-13 22:38:47 +09:00
Florian Kinder
19ca8d8ceb Fix RCON build error by adding _GNU_SOURCE for inet_aton (#583)
The build was failing with 'implicit declaration of function inet_aton'
error in newer GCC versions. Adding _GNU_SOURCE feature test macro
makes inet_aton available. Also fixed unused result warning for fread.

Fixes #582
2025-08-13 22:28:12 +09:00
github-actions[bot]
15bc6ef848 Auto Update Factorio to stable version: 2.0.60 experimental version: 2.0.64 2025-08-12 12:54:36 +00:00
dependabot[bot]
bca045c3d1 Bump actions/checkout from 4 to 5 (#581)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-12 14:30:52 +09:00
github-actions[bot]
b0c8562021 Auto Update Factorio to stable version: 2.0.60 experimental version: 2.0.63 2025-08-04 17:29:02 +00:00
github-actions[bot]
2fe6a0b3c7 Auto Update Factorio to stable version: 2.0.60 experimental version: 2.0.62 2025-07-31 12:57:17 +00:00
github-actions[bot]
b8cd293fdd Auto Update Factorio to stable version: 2.0.60 experimental version: 2.0.61 2025-07-30 17:26:48 +00:00
github-actions[bot]
bd774f0ad8 Auto Update Factorio to stable version: 2.0.60 experimental version: 2.0.60 2025-07-15 08:35:47 +00:00
Florian Kinder
b3099102cf Add comprehensive permission issues guide (#580)
- Created PERMISSION_ISSUES_GUIDE.md with detailed solutions for permission problems
- Based on thorough analysis of issues #558, #556, #555, #549, #496, #501, #492, #420
- Includes platform-specific solutions (NixOS, macOS, Windows, Synology)
- Documents critical Docker version requirements (20.x+ recommended)
- Highlights rootless image as recommended solution for permission issues
- Added link to guide in README.md troubleshooting section

Key findings documented:
- Most "Operation not permitted" errors resolved by updating Docker
- Rootless Docker requires using actual Docker UID (e.g., 100999) not 845
- Interrupted chown operations cause inconsistent file ownership
- Rootless images avoid most permission issues entirely

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-07-12 14:28:20 +09:00
Florian Kinder
e8adbf55c1 feat: Add rootless Docker support (#574)
* feat: Add rootless Docker support

Implements #547 - Add support for rootless Docker images to avoid permission issues.

Key changes:
- Add Dockerfile.rootless that runs as UID 1000 by default
- Create simplified entrypoint script without chown operations
- Add build-rootless.py to build rootless variants with -rootless suffix
- Document rootless usage in README-ROOTLESS.md
- Update main README with rootless section

The rootless images eliminate common permission problems by:
- Running as non-root from the start (USER 1000:1000)
- Avoiding recursive chown operations that can cause race conditions
- Using open permissions (777) on directories during build
- Not supporting PUID/PGID environment variables

This provides a cleaner solution for rootless Docker users and those
experiencing permission issues with volumes.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: Address linting issues in rootless Docker implementation

- Add --no-install-recommends to apt-get install in Dockerfile
- Consolidate consecutive RUN instructions in Dockerfile
- Fix shellcheck warnings: quote variables and use -n instead of \! -z
- These changes improve best practices without affecting functionality

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: Add rootless image building to CI pipeline

- Update docker-build.yml workflow to build rootless variants
- Rootless images are built after regular images with -rootless suffix
- Both use the same multi-architecture build process
- Triggered automatically when buildinfo.json changes

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: Unify build system for regular and rootless images

- Create build-unified.py that handles both regular and rootless builds
- Convert build.py and build-rootless.py to wrapper scripts for backwards compatibility
- Update CI workflow to use unified build command
- Add BUILD_MIGRATION.md documentation
- Eliminate code duplication between build scripts
- Support flexible build options: --rootless, --both, --only-stable-latest

This maintains all existing functionality while providing a cleaner, more maintainable build system.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* chore: Add Python cache to .gitignore and remove from repo

- Add __pycache__/ and Python compiled files to .gitignore
- Remove accidentally committed __pycache__ directory
- Prevent future Python cache files from being tracked

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: Replace build system with unified solution

- Remove old build.py and build-rootless.py wrapper scripts
- Rename build-unified.py to build.py as the main build script
- Delete BUILD_MIGRATION.md (no longer needed)
- Update CI workflow to use new build.py syntax
- Update documentation in CLAUDE.md and README-ROOTLESS.md

The new build system provides all functionality in a single script:
- Default: builds regular images
- --rootless: builds only rootless images
- --both: builds both regular and rootless images
- --multiarch and --push-tags: work as before

This creates a cleaner, more maintainable build system.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* docs: Consolidate rootless documentation and mark as experimental

- Remove separate README-ROOTLESS.md file
- Integrate rootless documentation into main README.md
- Mark rootless support as experimental
- Add clear documentation about limitations and use cases
- Include warning about experimental nature

This consolidates all documentation in one place and makes it clear
that rootless support is still experimental.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-07-12 13:46:33 +09:00
Florian Kinder
533789470f Fix buildinfo.json pollution by only keeping latest versions (#579)
Previously, update.sh would accumulate all historical versions in buildinfo.json,
leading to an ever-growing file. This change modifies the script to rebuild
buildinfo.json from scratch with only the current stable and experimental versions.

Changes:
- Replace incremental update logic with complete rebuild
- Create fresh buildinfo.json containing only latest versions
- Preserve all proper tags (stable, latest, version numbers, etc.)
- Fix bash compatibility issue with associative arrays

This ensures buildinfo.json remains clean and only contains the versions
currently being built and published.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-07-12 12:35:59 +09:00
Florian Kinder
5b6e0cde8b Add file package to Docker image for better debugging (#578)
The Docker builds have been failing since June 2025 with the error:
'/bin/bash: line 1: file: command not found'

This error occurs when the SHA256 checksum verification fails and the
Dockerfile attempts to run 'file' command to help debug what type of
file was downloaded. However, the 'file' package is not installed in
the debian:stable-slim base image.

This commit adds the 'file' package to the apt-get install list so that
when SHA256 verification fails, we can get better debugging information
about what was actually downloaded (e.g., whether it's an HTML error
page instead of the expected tar.xz file).

While this doesn't fix the root cause of the SHA256 failures, it will
provide better diagnostics to help identify the actual issue.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

Took 55 minutes
2025-07-12 12:21:42 +09:00
github-actions[bot]
00038b5184 Auto Update Factorio to stable version: 2.0.55 experimental version: 2.0.60 2025-07-10 12:54:47 +00:00
Florian Kinder
72c3590cd6 Fix duplicate mod error with Space Age DLC mods (#576) (#577)
Skip downloading built-in DLC mods (elevated-rails, quality, space-age) when UPDATE_MODS_ON_START is enabled. These mods are included with the Space Age DLC and attempting to download them separately causes "Duplicate mod" errors.

- Modified update-mods.sh to skip DLC built-in mods during updates
- Added documentation note explaining the automatic handling of DLC mods

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-07-09 21:50:59 +09:00
github-actions[bot]
23942e3117 Auto Update Factorio to stable version: 2.0.55 experimental version: 2.0.59 2025-07-09 10:29:10 +00:00
Florian Kinder
15d38ea739 Fix mod version compatibility checking for major version differences (#575)
This fixes issue #517 where the auto mod updater was downloading the wrong
mod versions after updating to Space Age (Factorio 2.0). The problem was that
the version checking logic was incorrectly rejecting compatible mod versions.

Changes:
- Fixed check_game_version() to properly handle major version differences
- Game versions can now run mods designed for older major versions (backward compatibility)
- Game versions correctly reject mods requiring newer versions
- Fixed variable references in check_dependency_version()
- Added clarifying comments about the version checking behavior

This also addresses issue #468 by ensuring mods requiring newer Factorio
versions than currently installed are properly skipped.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-07-06 19:01:05 +09:00
Victor9401
9464758a7b Updated mods updater script to correctly process mod dependencies (#557)
Co-authored-by: Victor <victor@blockbank.ai>
2025-07-03 19:48:23 +09:00
Florian Kinder
50f04fb096 Fix README tag pollution from update script (#573)
* fix: Improve README tag generation to reduce clutter

- Modified update.sh to only show the latest and stable versions
- Removed duplicate major.minor version tags
- Changed from listing all versions to showing only the most relevant tags
- Fixed jq query to properly detect stable version using index() instead of contains()

This significantly reduces README pollution by showing only:
- The latest experimental version with its tags
- The current stable version with its tags
- One entry per major.minor version for older releases (removed from this commit)

Before: 60+ lines of tags with many duplicates
After: 2 lines showing only latest and stable versions

* fix: Address shellcheck warnings about subshell variable modifications

- Changed from pipeline to process substitution to avoid SC2030/SC2031 warnings
- Variables modified in the while loop are now properly preserved
- This ensures readme_tags modifications are not lost in subshells
2025-07-03 19:45:29 +09:00
Florian Kinder
15d31c9a2e docs: Add documentation for PRESET environment variable (#572)
- Add PRESET to the environment variables table
- Include detailed explanation of available preset values
- Add example showing how to use PRESET when generating a new map
- Document that PRESET is optional and only used with GENERATE_NEW_SAVE=true

Fixes #571

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-07-03 19:32:40 +09:00
Florian Kinder
8784845385 Add CLAUDE.md with project guidance for Claude Code
- Project overview and architecture description
- Common development commands for building and testing
- Environment variables and configuration details
- Version management and automated update process
- Volume structure and data organization

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-03 19:22:52 +09:00
github-actions[bot]
9f6c781331 Auto Update Factorio to stable version: 2.0.55 experimental version: 2.0.58 2025-06-23 15:28:19 +00:00
github-actions[bot]
8a718705b7 Auto Update Factorio to stable version: 2.0.55 experimental version: 2.0.57 2025-06-19 17:23:31 +00:00
Niu Zhihong
60277e89f1 Update README_zh_CN.md (#569) 2025-06-18 18:26:44 +09:00
github-actions[bot]
4562f675ea Auto Update Factorio to stable version: 2.0.55 experimental version: 2.0.55 2025-06-05 10:28:37 +00:00
github-actions[bot]
22d02c42fa Auto Update Factorio to stable version: 2.0.47 experimental version: 2.0.55 2025-06-02 18:35:06 +00:00
github-actions[bot]
6b3dd77a54 Auto Update Factorio to stable version: 2.0.47 experimental version: 2.0.54 2025-05-30 16:31:26 +00:00
github-actions[bot]
6d3be9aef1 Auto Update Factorio to stable version: 2.0.47 experimental version: 2.0.52 2025-05-30 13:34:06 +00:00
github-actions[bot]
bf97066b9c Auto Update Factorio to stable version: 2.0.47 experimental version: 2.0.53 2025-05-30 11:19:55 +00:00
github-actions[bot]
c0c235a28d Auto Update Factorio to stable version: 2.0.47 experimental version: 2.0.52 2025-05-23 11:20:05 +00:00
github-actions[bot]
d5db1b1281 Auto Update Factorio to stable version: 2.0.47 experimental version: 2.0.51 2025-05-19 12:53:01 +00:00
github-actions[bot]
0c0349b5d6 Auto Update Factorio to stable version: 2.0.47 experimental version: 2.0.50 2025-05-16 11:20:16 +00:00
github-actions[bot]
0c1b2f4164 Auto Update Factorio to stable version: 2.0.47 experimental version: 2.0.49 2025-05-12 17:21:44 +00:00
github-actions[bot]
b36cd87194 Auto Update Factorio to stable version: 2.0.47 experimental version: 2.0.48 2025-05-12 11:20:54 +00:00
github-actions[bot]
e82cead5f4 Auto Update Factorio to stable version: 2.0.47 experimental version: 2.0.47 2025-05-05 15:26:04 +00:00
github-actions[bot]
d9ff25fa10 Auto Update Factorio to stable version: 2.0.43 experimental version: 2.0.47 2025-04-29 19:19:23 +00:00
github-actions[bot]
b7fdff9b94 Auto Update Factorio to stable version: 2.0.43 experimental version: 2.0.46 2025-04-29 10:27:22 +00:00
github-actions[bot]
04f20de96c Auto Update Factorio to stable version: 2.0.43 experimental version: 2.0.45 2025-04-14 17:21:17 +00:00
github-actions[bot]
fcd2c2e40e Auto Update Factorio to stable version: 2.0.43 experimental version: 2.0.44 2025-04-07 17:20:58 +00:00
dependabot[bot]
f02c02f38e Bump peter-evans/dockerhub-description from 4.0.1 to 4.0.2 (#567)
Bumps [peter-evans/dockerhub-description](https://github.com/peter-evans/dockerhub-description) from 4.0.1 to 4.0.2.
- [Release notes](https://github.com/peter-evans/dockerhub-description/releases)
- [Commits](https://github.com/peter-evans/dockerhub-description/compare/v4.0.1...v4.0.2)

---
updated-dependencies:
- dependency-name: peter-evans/dockerhub-description
  dependency-version: 4.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-04 11:29:11 +09:00
dependabot[bot]
b4be6993c6 Bump peter-evans/dockerhub-description from 4.0.0 to 4.0.1 (#566)
Bumps [peter-evans/dockerhub-description](https://github.com/peter-evans/dockerhub-description) from 4.0.0 to 4.0.1.
- [Release notes](https://github.com/peter-evans/dockerhub-description/releases)
- [Commits](https://github.com/peter-evans/dockerhub-description/compare/v4.0.0...v4.0.1)

---
updated-dependencies:
- dependency-name: peter-evans/dockerhub-description
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-01 10:47:21 +09:00
github-actions[bot]
a2c11ade50 Auto Update Factorio to stable version: 2.0.43 experimental version: 2.0.43 2025-03-31 13:32:20 +00:00
Tobias
b334d27cf0 Fix watchtower also updating other containers (#565) 2025-03-31 10:37:23 +09:00
github-actions[bot]
ede09dc402 Auto Update Factorio to stable version: 2.0.42 experimental version: 2.0.43 2025-03-26 14:23:35 +00:00
github-actions[bot]
0929686ad3 Auto Update Factorio to stable version: 2.0.42 experimental version: 2.0.42 2025-03-21 18:31:36 +00:00
github-actions[bot]
317d3731e8 Auto Update Factorio to stable version: 2.0.41 experimental version: 2.0.42 2025-03-19 20:25:30 +00:00
github-actions[bot]
080a70f6be Auto Update Factorio to stable version: 2.0.41 experimental version: 2.0.41 2025-03-14 12:44:07 +00:00
github-actions[bot]
83bffe4b13 Auto Update Factorio to stable version: 2.0.39 experimental version: 2.0.41 2025-03-12 21:21:19 +00:00
github-actions[bot]
14df05cd6d Auto Update Factorio to stable version: 2.0.39 experimental version: 2.0.40 2025-03-12 11:18:51 +00:00
github-actions[bot]
c0e1bae277 Auto Update Factorio to stable version: 2.0.39 experimental version: 2.0.39 2025-03-11 10:25:24 +00:00
github-actions[bot]
370059f2f6 Auto Update Factorio to stable version: 2.0.32 experimental version: 2.0.39 2025-03-05 18:32:32 +00:00
github-actions[bot]
7e8c89c02a Auto Update Factorio to stable version: 2.0.32 experimental version: 2.0.38 2025-03-04 12:45:59 +00:00
github-actions[bot]
1e52dc48c9 Auto Update Factorio to stable version: 2.0.32 experimental version: 2.0.37 2025-02-26 19:17:45 +00:00
github-actions[bot]
14aa945717 Auto Update Factorio to stable version: 2.0.32 experimental version: 2.0.36 2025-02-26 15:25:49 +00:00
github-actions[bot]
57bbf46196 Auto Update Factorio to stable version: 2.0.32 experimental version: 2.0.35 2025-02-20 12:44:29 +00:00
github-actions[bot]
090e771c0c Auto Update Factorio to stable version: 2.0.32 experimental version: 2.0.34 2025-02-06 19:17:57 +00:00
github-actions[bot]
9e89a7930e Auto Update Factorio to stable version: 2.0.32 experimental version: 2.0.33 2025-01-28 13:25:05 +00:00
github-actions[bot]
20e6176a85 Auto Update Factorio to stable version: 2.0.32 experimental version: 2.0.32 2025-01-23 14:20:03 +00:00
github-actions[bot]
e5e1993c97 Auto Update Factorio to stable version: 2.0.30 experimental version: 2.0.32 2025-01-21 14:20:23 +00:00
github-actions[bot]
6e0ea49985 Auto Update Factorio to stable version: 2.0.28 experimental version: 2.0.32 2025-01-20 15:22:49 +00:00
github-actions[bot]
f757e538b7 Auto Update Factorio to stable version: 2.0.28 experimental version: 2.0.31 2025-01-16 15:22:26 +00:00
github-actions[bot]
a94f8a0d4e Auto Update Factorio to stable version: 2.0.28 experimental version: 2.0.30 2025-01-10 12:43:54 +00:00
github-actions[bot]
2b76185f94 Auto Update Factorio to stable version: 2.0.28 experimental version: 2.0.29 2025-01-06 11:18:02 +00:00
github-actions[bot]
3c45811e15 Auto Update Factorio to stable version: 2.0.28 experimental version: 2.0.28 2024-12-21 11:15:51 +00:00
github-actions[bot]
8990021fa1 Auto Update Factorio to stable version: 2.0.23 experimental version: 2.0.28 2024-12-20 14:19:30 +00:00
github-actions[bot]
50e5c868e5 Auto Update Factorio to stable version: 2.0.23 experimental version: 2.0.27 2024-12-18 17:20:05 +00:00
github-actions[bot]
89aebaba4b Auto Update Factorio to stable version: 2.0.23 experimental version: 2.0.26 2024-12-16 18:32:47 +00:00
github-actions[bot]
d19c97c075 Auto Update Factorio to stable version: 2.0.23 experimental version: 2.0.25 2024-12-12 18:33:00 +00:00
github-actions[bot]
19e5dc7532 Auto Update Factorio to stable version: 2.0.23 experimental version: 2.0.24 2024-12-05 15:25:48 +00:00
github-actions[bot]
6a3b160d76 Auto Update Factorio to stable version: 2.0.23 experimental version: 2.0.23 2024-12-02 09:26:26 +00:00
github-actions[bot]
a3d5456e58 Auto Update Factorio to stable version: 2.0.21 experimental version: 2.0.23 2024-11-28 16:28:35 +00:00
github-actions[bot]
8d5096e28b Auto Update Factorio to stable version: 2.0.21 experimental version: 2.0.22 2024-11-26 17:20:59 +00:00
github-actions[bot]
a1135b6a55 Auto Update Factorio to stable version: 2.0.21 experimental version: 2.0.21 2024-11-25 08:30:43 +00:00
github-actions[bot]
192f686b6b Auto Update Factorio to stable version: 2.0.20 experimental version: 2.0.21 2024-11-21 18:31:18 +00:00
github-actions[bot]
66ce43c0ca Auto Update Factorio to stable version: 2.0.20 experimental version: 2.0.20 2024-11-19 14:22:24 +00:00
github-actions[bot]
ebadd1d8b8 Auto Update Factorio to stable version: 2.0.15 experimental version: 2.0.20 2024-11-18 16:20:02 +00:00
Florian Kinder
c9989d3a07 Added hint about how stable and experimental tags works since 2.0
Fixes #526
2024-11-17 01:59:40 +01:00
github-actions[bot]
2dfaac7ec4 Auto Update Factorio to stable version: 2.0.15 experimental version: 2.0.19 2024-11-15 18:30:41 +00:00
Tobias
c2d7c5696e Add rcon client (#550)
* Add rcon client to container

* Explain rcon command

* Remove test container name

* Apply suggestions

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

* Add example docker-compose file

* Clarify return code

* Switch to pre-update

* Update docker-compose.yml

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

* Allow build support for build (/* is only possible in buildx)

* Added version information in README.md

---------

Co-authored-by: Florian Kinder <florian.kinder@fankserver.com>
2024-11-14 19:41:25 +01:00
github-actions[bot]
f14bedbc63 Auto Update Factorio to stable version: 2.0.15 experimental version: 2.0.18 2024-11-14 18:35:40 +00:00
github-actions[bot]
d91c45fa62 Auto Update Factorio to stable version: 2.0.15 experimental version: 2.0.17 2024-11-12 18:29:03 +00:00
github-actions[bot]
2092e86aec Auto Update Factorio to stable version: 2.0.15 experimental version: 2.0.16 2024-11-08 15:22:53 +00:00
github-actions[bot]
ecb89b0c11 Auto Update Factorio to stable version: 2.0.15 experimental version: 2.0.15 2024-11-08 08:27:04 +00:00
Florian Kinder
42a08a95d4 Added extra_host example for NAS (#542)
* Added extra_host example for NAS

Took 11 minutes

* 🎨

Took 3 minutes
2024-11-08 00:13:38 +01:00
github-actions[bot]
61d52eaa7c Auto Update Factorio to stable version: 2.0.14 experimental version: 2.0.15 2024-11-05 17:19:51 +00:00
github-actions[bot]
6916fcb150 Auto Update Factorio to stable version: 2.0.14 experimental version: 2.0.14 2024-11-03 12:36:15 +00:00
Florian Kinder
8c9dfd004e Use stable_online_version instead of stableOnlineVersionShort
This hopefully causes the stable tag to not be removed anymore for an unknown reason.
2024-11-01 17:50:52 +01:00
github-actions[bot]
867635db16 Auto Update Factorio to stable version: 2.0.13 experimental version: 2.0.14 2024-11-01 15:23:21 +00:00
github-actions[bot]
b7413607c4 Auto Update Factorio to stable version: 2.0.13 experimental version: 2.0.14 2024-11-01 14:20:23 +00:00
github-actions[bot]
5d6f70b285 Auto Update Factorio to stable version: 2.0.13 experimental version: 2.0.13 2024-10-31 15:23:56 +00:00
github-actions[bot]
a24e42b281 Auto Update Factorio to stable version: 2.0.13 experimental version: 2.0.13 2024-10-31 14:20:50 +00:00
github-actions[bot]
d1142e3408 Auto Update Factorio to stable version: 2.0.12 experimental version: 2.0.13 2024-10-31 13:28:03 +00:00
github-actions[bot]
4eb53b6e48 Auto Update Factorio to stable version: 2.0.12 experimental version: 2.0.12 2024-10-31 12:43:16 +00:00
github-actions[bot]
f986f1c870 Auto Update Factorio to stable version: 2.0.12 experimental version: 2.0.13 2024-10-30 20:23:47 +00:00
github-actions[bot]
bc760a9599 Auto Update Factorio to stable version: 2.0.12 experimental version: 2.0.13 2024-10-30 19:18:52 +00:00
github-actions[bot]
d153e30f1c Auto Update Factorio to stable version: 2.0.12 experimental version: 2.0.12 2024-10-29 13:29:24 +00:00
github-actions[bot]
cc5061d339 Auto Update Factorio to stable version: 2.0.12 experimental version: 2.0.12 2024-10-29 12:44:42 +00:00
github-actions[bot]
14ae422463 Auto Update Factorio to stable version: 2.0.11 experimental version: 2.0.12 2024-10-28 18:30:19 +00:00
github-actions[bot]
88ca95a1ae Auto Update Factorio to stable version: 2.0.11 experimental version: 2.0.12 2024-10-28 17:20:48 +00:00
celestialorb
64980b9db3 using absolute path over relative path for subscripts (#538) 2024-10-27 19:49:15 +01:00
Jon Renner
85f8011105 Update README_zh_CN.md (#535)
fix spelling typo
2024-10-26 16:33:42 +02:00
github-actions[bot]
cc8d89df84 Auto Update Factorio to stable version: 2.0.11 experimental version: 2.0.11 2024-10-26 09:20:52 +00:00
github-actions[bot]
956ade4f0b Auto Update Factorio to stable version: 2.0.11 experimental version: 2.0.11 2024-10-26 08:25:28 +00:00
github-actions[bot]
049d34ea9a Auto Update Factorio to stable version: 2.0.10 experimental version: 2.0.11 2024-10-25 16:27:26 +00:00
github-actions[bot]
d01580b5a5 Auto Update Factorio to stable version: 2.0.10 experimental version: 2.0.11 2024-10-25 15:22:54 +00:00
Florian Kinder
25a283ad79 Readded REPO_TOKEN in checkout, because workflows are not triggered.
related #526
2024-10-24 16:17:01 +02:00
github-actions[bot]
b172b16ff4 Auto Update Factorio to stable version: 2.0.10 experimental version: 2.0.10 2024-10-24 14:01:05 +00:00
github-actions[bot]
eb150cff0d Auto Update Factorio to stable version: 2.0.10 experimental version: 2.0.10 2024-10-24 13:59:37 +00:00
Yannick Beauchamp-H
b20d93e229 Change DLC_SPACE_AGE to enable specific Space Age mods (#530)
* Change variable DLC_SPACE_AGE to allow listing specific Space Age mods to enable

* Adjust DLC_SPACE_AGE note

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

---------

Co-authored-by: Florian Kinder <florian.kinder@fankserver.com>
2024-10-23 23:54:02 +02:00
Florian Kinder
9562212254 Filter for path and remove tags
related #526
2024-10-23 23:53:11 +02:00
github-actions[bot]
6060c7b722 Auto Update Factorio to stable version: 2.0.9 experimental version: 2.0.10 2024-10-23 21:20:20 +00:00
github-actions[bot]
06baf6a186 Auto Update Factorio to stable version: 2.0.9 experimental version: 2.0.10 2024-10-23 20:24:52 +00:00
Florian Kinder
6eb0cd96d8 MODS is available since 2.0.8
Took 11 minutes
2024-10-23 17:24:05 +02:00
github-actions[bot]
bbbfef343c Auto Update Factorio to stable version: 2.0.9 experimental version: 2.0.9 2024-10-23 11:18:00 +00:00
github-actions[bot]
44a58b056c Auto Update Factorio to stable version: 2.0.9 experimental version: 2.0.9 2024-10-23 10:23:09 +00:00
Florian Kinder
e37bcf1ed0 Create base mod-list.json if it does not exist (#523) 2024-10-22 23:54:00 +02:00
Florian Kinder
3defd74c46 Merge branch 'hjhixon-patch-1' 2024-10-22 23:41:12 +02:00
Harry Hixon
dde2761a8c fix entrypoint logic for checking if root 2024-10-22 23:40:47 +02:00
Yannick Beauchamp-H
0ec91c3391 Add documentation for env variable MODS and make it actually change the mod directory (#520) 2024-10-22 23:22:20 +02:00
Florian Kinder
f9040c7450 Added missing environment variable
Took 20 minutes
2024-10-22 21:23:58 +02:00
github-actions[bot]
c9957b7d76 Auto Update Factorio to stable version: 2.0.8 experimental version: 2.0.9 2024-10-22 19:19:24 +00:00
Florian Kinder
89ae20012e Added DLC_SPACE_AGE environment variable (#519)
* Added DLC_SPACE_AGE environment variable to enable or disable dlc related mods

Took 53 minutes

* 🎨

Took 2 minutes
2024-10-22 20:40:34 +02:00
github-actions[bot]
d137f32c2f Auto Update Factorio to stable version: 2.0.8 experimental version: 2.0.9 2024-10-22 18:29:48 +00:00
Florian Kinder
4f3c5f2e93 Do not run the build in pull requests
Took 6 minutes
2024-10-22 19:33:29 +02:00
Florian Kinder
f7e9dea263 Improve logging in updating mods (#518)
Took 55 minutes
2024-10-22 19:28:25 +02:00
Florian Kinder
748dec4ad5 Fixed tag match in update (#515)
Took 38 minutes
2024-10-22 07:40:13 +02:00
github-actions[bot]
3ce89a714b Auto Update Factorio to stable version: 2.0.8 experimental version: 2.0.8 2024-10-22 05:21:25 +00:00
dependabot[bot]
a8ecb01f4c Bump peter-evans/dockerhub-description from 2.4.1 to 4.0.0 (#512)
Bumps [peter-evans/dockerhub-description](https://github.com/peter-evans/dockerhub-description) from 2.4.1 to 4.0.0.
- [Release notes](https://github.com/peter-evans/dockerhub-description/releases)
- [Commits](https://github.com/peter-evans/dockerhub-description/compare/v2.4.1...v4.0.0)

---
updated-dependencies:
- dependency-name: peter-evans/dockerhub-description
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-22 06:48:30 +02:00
dependabot[bot]
6692bb514d Bump actions/checkout from 2 to 4 (#513)
Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-22 06:48:03 +02:00
Florian Kinder
2d805feb4f Cleanup github workflows
Took 9 minutes
2024-10-22 06:46:18 +02:00
Florian Kinder
bc2dc44cad Removed old 2.0.7 release
Related #511
2024-10-22 06:35:03 +02:00
github-actions[bot]
04085ef23d Auto Update Factorio to stable version: 2.0.8 experimental version: 2.0.8 2024-10-21 21:20:17 +00:00
github-actions[bot]
fbb787e535 Auto Update Factorio to stable version: 2.0.7 experimental version: 2.0.8 2024-10-21 18:30:01 +00:00
Marc 'risson' Schmitt
2ba59b4f95 build: build in reverse order of versions (#506)
Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>
2024-10-21 16:00:49 +02:00
Marc 'risson' Schmitt
c269289a96 Improve image stages (#509)
Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>
2024-10-21 15:59:34 +02:00
github-actions[bot]
ee0388e163 Auto Update Factorio to stable version: 2.0.7 experimental version: 2.0.7 2024-10-21 12:52:02 +00:00
Mr BasicX
a1cb15b709 Updated update.sh and clear data from broken github action! (#505)
* Update update.sh to fix SHA256 grabbing

* Update buildinfo.json reverted data so build.sh can run

* Update docker-compose.yml  reverted data so build.sh can run
2024-10-21 14:51:42 +02:00
github-actions[bot]
890489fb15 Auto Update Factorio to stable version: 2.0.7 experimental version: 2.0.7 2024-10-21 11:14:31 +00:00
github-actions[bot]
c756ffe827 Auto Update Factorio to stable version: 1.1.110 experimental version: 1.1.110 2024-08-27 19:15:55 +00:00
github-actions[bot]
4474b52473 Auto Update Factorio to stable version: 1.1.110 experimental version: 1.1.110 2024-08-27 18:27:09 +00:00
github-actions[bot]
84a808102f Auto Update Factorio to stable version: 1.1.109 experimental version: 1.1.110 2024-08-16 17:17:42 +00:00
github-actions[bot]
016c5cf3b5 Auto Update Factorio to stable version: 1.1.109 experimental version: 1.1.109 2024-07-02 14:17:09 +00:00
github-actions[bot]
159b14bd8e Auto Update Factorio to stable version: 1.1.109 experimental version: 1.1.109 2024-07-02 13:21:23 +00:00
Robbie Penziol
c1b0f6ca83 Add versioned "stable" tag. i.e. "stable-<major>.<minor>.<patch>" (#490) 2024-06-12 20:12:58 +09:00
Florian Kinder
965fef7ac2 Removed versions 2024-06-12 20:12:27 +09:00
heinGertenbach
88fed07073 container label for factorio version (#493) 2024-06-12 19:48:50 +09:00
Tristin Stagg
4ab4c889f4 Add support for --preset options provided by vanilla and popular mods (#482)
* Add support for --preset options provided by vanilla and popular mods

* Add support for --preset in scenario.sh

* Replace SU_EXEC with EXEC
2024-06-12 19:47:42 +09:00
Florian Kinder
bc28f4a917 Added missing envsubst command
Fixes #489
2024-06-12 19:46:53 +09:00
github-actions[bot]
d792589c56 Auto Update Factorio to stable version: 1.1.107 experimental version: 1.1.109 2024-06-07 14:18:34 +00:00
github-actions[bot]
486c0f1d0a Auto Update Factorio to stable version: 1.1.107 experimental version: 1.1.108 2024-05-31 10:19:43 +00:00
github-actions[bot]
80d8761520 Auto Update Factorio to stable version: 1.1.107 experimental version: 1.1.107 2024-04-18 15:18:17 +00:00
github-actions[bot]
f4e0e640c5 Auto Update Factorio to stable version: 1.1.107 experimental version: 1.1.107 2024-04-18 14:16:47 +00:00
github-actions[bot]
51b601b8b6 Auto Update Factorio to stable version: 1.1.104 experimental version: 1.1.107 2024-04-11 16:20:33 +00:00
github-actions[bot]
1d88d18b38 Auto Update Factorio to stable version: 1.1.104 experimental version: 1.1.106 2024-03-26 12:32:10 +00:00
github-actions[bot]
7d085d7fe5 Auto Update Factorio to stable version: 1.1.104 experimental version: 1.1.105 2024-03-20 15:18:36 +00:00
Florian Kinder
630c5a1864 Install procps for ps command used in kubernetes probes (#487)
Co-authored-by: Florian Kinder <florian.kinder@enthus.de>
2024-03-09 16:05:48 +09:00
Mark Crossen
98d3e475d3 add support for ARM (#485)
* build and run on arm64

* multiarch docker build

* add ARM64 warning to README.md
2024-03-03 12:09:41 +09:00
StealthCT
bd76f1c541 Swap to Debian slim baseimage (#469)
* Swap to Debian slim baseimage

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

* Only install necessary packages

---------

Co-authored-by: Doridian <git@doridian.net>
Co-authored-by: Sandro <sandro.jaeckel@gmail.com>
2024-03-03 11:57:47 +09:00
github-actions[bot]
afde97243d Auto Update Factorio to stable version: 1.1.104 experimental version: 1.1.104 2024-02-14 13:18:06 +00:00
github-actions[bot]
81b476ac97 Auto Update Factorio to stable version: 1.1.104 experimental version: 1.1.104 2024-02-14 12:31:41 +00:00
github-actions[bot]
30e56a197c Auto Update Factorio to stable version: 1.1.101 experimental version: 1.1.104 2024-01-30 14:15:37 +00:00
github-actions[bot]
effd07f84c Auto Update Factorio to stable version: 1.1.101 experimental version: 1.1.103 2024-01-19 16:23:28 +00:00
github-actions[bot]
23d40f36de Auto Update Factorio to stable version: 1.1.101 experimental version: 1.1.102 2024-01-18 13:21:53 +00:00
github-actions[bot]
250a90de53 Auto Update Factorio to stable version: 1.1.101 experimental version: 1.1.101 2024-01-10 13:21:19 +00:00
github-actions[bot]
89f601e5ce Auto Update Factorio to stable version: 1.1.101 experimental version: 1.1.101 2024-01-10 12:34:39 +00:00
github-actions[bot]
73fe111bea Auto Update Factorio to stable version: 1.1.100 experimental version: 1.1.101 2023-12-26 12:32:06 +00:00
github-actions[bot]
18b455ba43 Auto Update Factorio to stable version: 1.1.100 experimental version: 1.1.100 2023-12-11 22:17:25 +00:00
github-actions[bot]
1c5e98f289 Auto Update Factorio to stable version: 1.1.100 experimental version: 1.1.100 2023-12-11 21:15:24 +00:00
Sandro
0a3d923c5b Remove updater badge 2023-12-10 22:21:03 +01:00
github-actions[bot]
19f52a6ce0 Auto Update Factorio to stable version: 1.1.94 experimental version: 1.1.100 2023-12-04 10:20:44 +00:00
github-actions[bot]
f6461d99be Auto Update Factorio to stable version: 1.1.94 experimental version: 1.1.99 2023-11-28 10:19:49 +00:00
Florian Kinder
f5a9224756 Updated checksum based on https://www.factorio.com/download/sha256sums/
Issue reported in https://forums.factorio.com/viewtopic.php?f=3&p=597231#p597231
2023-11-23 14:06:42 +01:00
Florian Kinder
79eebfb0f9 Removed older versions 2023-11-23 14:02:19 +01:00
Anthony Poschen
b75bce7f91 Update buildinfo.json for new build in 1.1.98 (#480)
resolves https://github.com/factoriotools/factorio-docker/issues/479
2023-11-23 13:56:39 +01:00
Bill Plein
ef449c4763 Update buildinfo.json
Sorry for the mixup. Reverting this change by editing it again, not by rolling back the code. You can remove my committer status.
2023-11-22 16:28:03 -06:00
Bill Plein
42c2d0f0b9 Update buildinfo.json 2023-11-22 16:21:58 -06:00
github-actions[bot]
e2f732a61c Auto Update Factorio to stable version: 1.1.94 experimental version: 1.1.98 2023-11-22 18:22:49 +00:00
github-actions[bot]
d53f7900d8 Auto Update Factorio to stable version: 1.1.94 experimental version: 1.1.97 2023-11-14 12:33:35 +00:00
Vinzenz Sinapius
abf3166142 Use official sha256 endpoint for update check (#477) 2023-11-11 16:34:07 +01:00
github-actions[bot]
f255b89a5e Auto Update Factorio to stable version: 1.1.94 experimental version: 1.1.96 2023-11-08 12:33:25 +00:00
github-actions[bot]
fd717ee1b1 Auto Update Factorio to stable version: 1.1.94 experimental version: 1.1.95 2023-11-07 15:17:59 +00:00
github-actions[bot]
551b748297 Auto Update Factorio to stable version: 1.1.94 experimental version: 1.1.94 2023-10-30 18:22:14 +00:00
github-actions[bot]
87403fdb1b Auto Update Factorio to stable version: 1.1.94 experimental version: 1.1.94 2023-10-30 17:15:24 +00:00
github-actions[bot]
882ad42893 Auto Update Factorio to stable version: 1.1.91 experimental version: 1.1.94 2023-10-19 09:17:20 +00:00
github-actions[bot]
f9c256e0e4 Auto Update Factorio to stable version: 1.1.91 experimental version: 1.1.93 2023-10-17 18:23:36 +00:00
github-actions[bot]
8f0e42ec25 Auto Update Factorio to stable version: 1.1.91 experimental version: 1.1.92 2023-09-25 20:17:57 +00:00
github-actions[bot]
6b92576644 Auto Update Factorio to stable version: 1.1.91 experimental version: 1.1.91 2023-09-21 11:14:14 +00:00
github-actions[bot]
2f51b1ae60 Auto Update Factorio to stable version: 1.1.91 experimental version: 1.1.91 2023-09-21 10:18:47 +00:00
github-actions[bot]
21fbb3f294 Auto Update Factorio to stable version: 1.1.87 experimental version: 1.1.91 2023-09-13 15:17:57 +00:00
github-actions[bot]
d5e3f1580b Auto Update Factorio to stable version: 1.1.87 experimental version: 1.1.90 2023-09-07 09:16:44 +00:00
Florian Kinder
e3c1e34fe7 Removed intermediate versions 2023-08-20 11:28:02 +02:00
github-actions[bot]
0fc0e18cb0 Auto Update Factorio to stable version: 1.1.87 experimental version: 1.1.89 2023-08-16 18:20:19 +00:00
Owen
d634a84e0f feat: Auto-update docker-compose.yml (#472)
Update docker-compose.yml with the latest stable version.

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-08-06 18:55:55 +02:00
github-actions[bot]
ba5670692e Auto Update Factorio to stable version: 1.1.87 experimental version: 1.1.88 2023-07-20 19:13:32 +00:00
github-actions[bot]
ceea4e5dcb Auto Update Factorio to stable version: 1.1.87 experimental version: 1.1.87 2023-07-13 13:32:41 +00:00
github-actions[bot]
0f5d60d61c Auto Update Factorio to stable version: 1.1.87 experimental version: 1.1.87 2023-07-13 12:40:53 +00:00
github-actions[bot]
9171b1fd5d Auto Update Factorio to stable version: 1.1.80 experimental version: 1.1.87 2023-07-04 12:41:24 +00:00
github-actions[bot]
ced1340b11 Auto Update Factorio to stable version: 1.1.80 experimental version: 1.1.86 2023-06-28 18:24:29 +00:00
github-actions[bot]
d7e6952db8 Auto Update Factorio to stable version: 1.1.80 experimental version: 1.1.85 2023-06-16 18:20:59 +00:00
Azhrei251
24218ec31a Update sha256 hash for 1.1.83 (#471) 2023-06-16 01:37:11 +02:00
github-actions[bot]
5491f01acb Auto Update Factorio to stable version: 1.1.80 experimental version: 1.1.84 2023-06-15 10:19:08 +00:00
github-actions[bot]
3e8c2f5cb7 Auto Update Factorio to stable version: 1.1.80 experimental version: 1.1.83 2023-06-14 20:17:39 +00:00
github-actions[bot]
d306b82fbe Auto Update Factorio to stable version: 1.1.80 experimental version: 1.1.82 2023-05-29 00:30:09 +00:00
神楽坂·喵
bd1ba3cf9d Use new version API to check update (#466)
* Use new version API
Update latest to experimental

* fix by shellcheck

* Revert "Auto Update Factorio to version:"

This reverts commit dfd442dfda.

* Fix correct exit when online information get fails
2023-05-29 02:28:58 +02:00
github-actions[bot]
dfd442dfda Auto Update Factorio to version: 2023-05-12 10:18:29 +00:00
Florian Kinder
f262181b4e Update README on version update 2023-04-16 14:54:00 +02:00
Florentin Schleuß
f7282c516c Add --console-log support (#461) 2023-04-16 12:55:05 +02:00
github-actions[bot]
4fe8b3d0bd Auto Update Factorio to version: 1.1.80 2023-04-15 11:13:25 +00:00
神楽坂·喵
69e7d8ee55 bash script version watchdog (#462)
* impl version watchdog

* Update update.sh

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

* increase update check frequency to per hour

* Update .github/workflows/update.yml

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

* Update update.sh

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

* Update update.sh

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

* Update .github/workflows/update.yml

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

* prevent schedule running on fork

---------

Co-authored-by: Florian Kinder <florian.kinder@fankserver.com>
Co-authored-by: Sandro <sandro.jaeckel@gmail.com>
2023-04-15 12:41:12 +02:00
florian kinder
d90480712d Update to Factorio version 2023-02-01 15:03:11 +00:00
Jonathan Funke
d74b635be5 Update README.md (#457)
Does the same as always, except if the container was stopped. I think most user will prefer this setting.
2023-01-16 15:22:43 +01:00
florian kinder
0b5695e55a Update to Factorio version 2023-01-13 15:56:21 +00:00
florian kinder
34bf552c2c Update to Factorio version 2023-01-11 17:46:11 +00:00
florian kinder
bd048b90e2 Update to Factorio version 2022-12-16 15:51:09 +00:00
florian kinder
771eb142f0 Update to Factorio version 2022-12-06 14:31:15 +00:00
florian kinder
492b0378a3 Update to Factorio version 2022-12-01 18:36:13 +00:00
florian kinder
2ac5f259fa Update to Factorio version 2022-11-22 15:11:08 +00:00
florian kinder
5bf1b045e1 Update to Factorio version 2022-11-11 17:56:28 +00:00
florian kinder
b09c5ab001 Update to Factorio version 2022-11-04 12:11:14 +00:00
florian kinder
c6bf7fef1d Update to Factorio version 2022-10-27 14:06:10 +00:00
florian kinder
626351232a Update to Factorio version 2022-10-11 15:41:13 +00:00
florian kinder
db41eaad31 Update to Factorio version 2022-09-16 09:46:09 +00:00
florian kinder
02695f0f00 Update to Factorio version 2022-09-12 15:11:11 +00:00
Adam Zahumenský
5aef1b9f6f Add an IP bind param to the entrypoint (#447)
* Add an IP bind param to the entrypoint

* Add an example usage to readme

* Rename to BIND
2022-09-05 11:01:06 +02:00
florian kinder
2f28ee6626 Update to Factorio version 2022-08-29 09:36:17 +00:00
florian kinder
9912dbd9bb Update to Factorio version 2022-08-22 15:11:22 +00:00
florian kinder
420fecc788 Update to Factorio version 2022-08-19 13:41:12 +00:00
florian kinder
67bea4df99 Update to Factorio version 2022-08-19 10:16:10 +00:00
Bill Plein
b12e652e4d Update Dockerfile - add curl retries (#444) (#445)
Adding configurable retries to the curl download of the headless server tarball.
2022-08-06 09:54:28 +02:00
florian kinder
d0cfb691ec Update to Factorio version 2022-08-05 13:31:10 +00:00
florian kinder
88757eb5d1 Update to Factorio version 2022-08-02 15:56:10 +00:00
florian kinder
e365e2cd5e Update to Factorio version 2022-07-28 14:01:12 +00:00
florian kinder
d7db07e265 Update to Factorio version 2022-07-26 12:26:10 +00:00
Vroumm
e5aac5fc9e Fixed typo in README.md (#442) 2022-07-12 18:10:40 +02:00
Eric J
0f969e517a Update Docker Compose to 1.1.61 (#441) 2022-07-12 13:56:37 +02:00
florian kinder
96d38bc3e8 Update to Factorio version 2022-06-29 10:16:08 +00:00
florian kinder
4e43fdd73b Update to Factorio version 2022-06-23 10:51:11 +00:00
florian kinder
b20ff166e7 Update to Factorio version 2022-06-06 16:16:10 +00:00
Owen
e0165b4b2d Update server version in docker-compose file. (#436) 2022-05-17 16:32:41 +02:00
florian kinder
bbfbb86308 Update to Factorio version 2022-05-11 12:26:08 +00:00
florian kinder
0aae38e6a0 Update to Factorio version 2022-05-06 09:11:12 +00:00
florian kinder
991d3e2765 Update to Factorio version 2022-05-02 13:46:12 +00:00
florian kinder
e4ce42d9f3 Update to Factorio version 2022-04-01 15:21:08 +00:00
florian kinder
157f9484db Update to Factorio version 2022-03-31 14:41:04 +00:00
florian kinder
a8326cd88a Update to Factorio version 2022-03-09 15:35:18 +00:00
florian kinder
1ebd9ced8d Update to Factorio version 2022-02-23 16:35:18 +00:00
florian kinder
723160de54 Update to Factorio version 2022-02-23 16:20:15 +00:00
florian kinder
cc96cf2294 Update to Factorio version 2022-02-23 13:15:15 +00:00
florian kinder
79e22b8db5 Update to Factorio version 2022-01-21 17:45:12 +00:00
florian kinder
5a03444010 Update to Factorio version 2022-01-19 11:40:12 +00:00
florian kinder
43ce3dc8e1 Update to Factorio version 2022-01-18 17:45:12 +00:00
florian kinder
97e1433fde Update to Factorio version 2022-01-18 11:55:18 +00:00
florian kinder
f6aec0a546 Update to Factorio version 2021-12-23 16:30:15 +00:00
florian kinder
039a8626ba Update to Factorio version 2021-12-21 12:20:14 +00:00
florian kinder
634e7267a9 Update to Factorio version 2021-12-10 09:00:12 +00:00
florian kinder
d1e5ac742e Update to Factorio version 2021-12-07 17:35:22 +00:00
florian kinder
9eec6b9dd5 Update to Factorio version 2021-11-25 13:00:14 +00:00
florian kinder
c8b079caf0 Update to Factorio version 2021-11-24 14:50:12 +00:00
florian kinder
bce3ff95ba Update to Factorio version 2021-11-23 23:30:06 +00:00
florian kinder
faa84dbfa6 Update to Factorio version 2021-11-06 08:23:55 +00:00
florian kinder
8003142235 Update to Factorio version 2021-11-05 10:28:56 +00:00
florian kinder
9863a4cd74 Update to Factorio version 2021-10-28 14:03:56 +00:00
florian kinder
c5d668ac09 Update to Factorio version 2021-10-27 19:13:56 +00:00
florian kinder
87a4ba87e5 Update to Factorio version 2021-10-26 11:43:58 +00:00
florian kinder
9bdbd90322 Update to Factorio version 2021-10-13 12:33:56 +00:00
florian kinder
4812b5b970 Update to Factorio version 2021-10-11 11:43:56 +00:00
Paul Robertson
65e3f84c4f skip pushing to dockerhub when user and pass are not specified (#418) 2021-09-25 18:38:59 +02:00
florian kinder
02cc66c3ba Update to Factorio version 2021-09-24 11:43:55 +00:00
florian kinder
c09257d28a Update to Factorio version 2021-09-23 22:34:17 +02:00
florian kinder
769617edc4 Revert "Bump frolvlad/alpine-glibc from alpine-3.12 to alpine-3.14 in /docker (#410)"
This reverts commit 50d60680e0.
2021-09-13 16:35:50 +02:00
Paul Robertson
d6154359d9 support older versions of docker and docker-compose (#414) 2021-09-09 17:13:45 +02:00
florian kinder
765d2bb23d Fixed syntax in workflow 2021-09-09 15:11:22 +02:00
dependabot[bot]
50d60680e0 Bump frolvlad/alpine-glibc from alpine-3.12 to alpine-3.14 in /docker (#410)
Bumps frolvlad/alpine-glibc from alpine-3.12 to alpine-3.14.

---
updated-dependencies:
- dependency-name: frolvlad/alpine-glibc
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-09-08 17:12:28 +02:00
Paul Robertson
0d5f77f0da Update dependabot to check in ./docker (#405) 2021-09-08 17:10:00 +02:00
florian kinder
0a56912cfd Update to Factorio version 2021-09-08 17:07:22 +02:00
florian kinder
136329f45e Removed old travic ci badge 2021-09-02 16:36:13 +02:00
Paul Robertson
f3dc109e7e update to sha256 for checksum verification (#407)
* update sha1 to sha256 for checksum validation

* switch jinja templating to docker build-args
2021-09-02 16:01:54 +02:00
florian kinder
f84fee3624 Update to Factorio version 2021-09-02 15:19:47 +02:00
florian kinder
118f149aee Update to Factorio version 2021-09-02 15:06:37 +02:00
florian kinder
60165855ff Update to Factorio version 2021-09-02 15:01:17 +02:00
StopMotionCuber
89b9851edb Include templating support (#382) 2021-09-02 14:57:59 +02:00
florian kinder
f2a5d6d075 Update to Factorio version 2021-09-02 14:40:18 +02:00
Florian Kinder
5e018ca2ae Added autogeneration tags in README.md 2021-09-02 14:40:01 +02:00
Paul Robertson
0160889854 add a section to the readme which lists the existing environment variables (#406) 2021-09-02 09:51:00 +02:00
Florian Kinder
bc9276737b Updated Readme 2021-09-02 09:48:23 +02:00
Paul Robertson
5e3943362b update to 1.1.39 (#403) 2021-09-02 09:42:03 +02:00
jorisdrenth
3778d6bb66 Factorio 1.1.38 update (#401)
Co-authored-by: server-01 <server-01@joris.biz>
2021-08-20 22:01:08 +02:00
Paul Robertson
fbf430373d update to 1.1.37 (#399) 2021-08-05 22:27:42 +02:00
Florian Kinder
a495ac72cd Replaced badge 2021-07-13 22:02:19 +02:00
Florian Kinder
17e84504cf bumb version in readme & removed microbadger badge 2021-07-13 21:57:43 +02:00
Florian Kinder
cea55cda67 Update Dockerfile to support Factorio 1.1.36 (#398)
Resolve #397 by adding Factorio 1.1.36 support

Co-authored-by: jpsenior <jp.senior@gmail.com>
2021-07-13 21:50:47 +02:00
SuperSandroBot
b0ad3fa036 Update to Factorio 0.18.47 2021-06-23 15:02:49 +00:00
SuperSandroBot
1a6e902c6b Update to Factorio 0.18.47 2021-06-21 15:23:33 +00:00
SuperSandroBot
dadf88d5e3 Update to Factorio 0.18.47 2021-06-21 05:12:29 +00:00
SuperSandroBot
b065ecb257 Update to Factorio 0.18.47 2021-06-20 18:59:25 +00:00
SuperSandroBot
f0b1ff342f Update to Factorio 0.18.47 2021-06-20 13:19:09 +00:00
SuperSandroBot
9a563a35b8 Update to Factorio 0.18.47 2021-06-20 08:54:29 +00:00
SuperSandroBot
75543ebbe6 Update to Factorio 0.18.47 2021-06-20 02:20:10 +00:00
SuperSandroBot
d17a6e648e Update to Factorio 0.18.47 2021-06-19 09:44:12 +00:00
SuperSandroBot
b96fb634b1 Update to Factorio 0.18.47 2021-06-18 03:24:45 +00:00
SuperSandroBot
9248c57549 Update to Factorio 0.18.47 2021-06-17 11:48:40 +00:00
SuperSandroBot
8641b6d34b Update to Factorio 0.18.47 2021-06-17 11:24:07 +00:00
SuperSandroBot
aefd5339c6 Update to Factorio 1.1.35 2021-06-16 16:27:58 +00:00
SuperSandroBot
504aa3a05a Update to Factorio 0.18.47 2021-06-16 10:58:07 +00:00
SuperSandroBot
ccc7f5624a Update to Factorio 0.18.47 2021-06-16 10:55:45 +00:00
SuperSandroBot
0336fbe3cf Update to Factorio 0.18.47 2021-06-16 10:33:27 +00:00
SuperSandroBot
452aab7ffb Update to Factorio 0.18.47 2021-06-16 10:08:06 +00:00
SuperSandroBot
a953759b96 Update to Factorio 0.18.47 2021-06-16 10:06:42 +00:00
SuperSandroBot
f61abdc8b5 Update to Factorio 0.18.47 2021-06-16 09:44:42 +00:00
SuperSandroBot
bb4d2d0154 Update to Factorio 0.18.47 2021-06-16 09:41:34 +00:00
SuperSandroBot
f44f690b6a Update to Factorio 0.18.47 2021-06-16 01:12:34 +00:00
SuperSandroBot
eadada76b9 Update to Factorio 0.18.47 2021-06-15 18:25:45 +00:00
SuperSandroBot
45eb323d17 Update to Factorio 0.18.47 2021-06-15 16:45:41 +00:00
SuperSandroBot
cad67f5d0b Update to Factorio 0.18.47 2021-06-15 15:45:43 +00:00
SuperSandroBot
18fe336fb8 Update to Factorio 0.18.47 2021-06-15 15:30:50 +00:00
SuperSandroBot
a7c9b3e1c8 Update to Factorio 0.18.47 2021-06-15 10:55:53 +00:00
SuperSandroBot
2026cce01a Update to Factorio 0.18.47 2021-06-14 12:36:38 +00:00
SuperSandroBot
7b7f47f464 Update to Factorio 0.18.47 2021-06-14 05:24:13 +00:00
SuperSandroBot
1f83234834 Update to Factorio 0.18.47 2021-06-13 20:46:18 +00:00
SuperSandroBot
bc06b94f38 Update to Factorio 0.18.47 2021-06-12 12:11:20 +00:00
SuperSandroBot
3abd2d69fc Update to Factorio 0.18.47 2021-06-12 08:31:41 +00:00
SuperSandroBot
63fc1066dc Update to Factorio 0.18.47 2021-06-12 03:56:47 +00:00
SuperSandroBot
7f4e005b1a Update to Factorio 0.18.47 2021-06-10 21:29:54 +00:00
SuperSandroBot
5222d392b1 Update to Factorio 0.18.47 2021-06-10 12:21:32 +00:00
SuperSandroBot
be8c1b28a3 Update to Factorio 0.18.47 2021-06-08 16:45:37 +00:00
SuperSandroBot
e5a70d4ada Update to Factorio 0.18.47 2021-06-06 21:30:20 +00:00
SuperSandroBot
31448a0c06 Update to Factorio 0.18.47 2021-06-06 17:37:22 +00:00
SuperSandroBot
6d2fcd5696 Update to Factorio 0.18.47 2021-06-06 16:22:33 +00:00
SuperSandroBot
65b909310c Update to Factorio 0.18.47 2021-06-06 13:05:51 +00:00
SuperSandroBot
e8fca26f7a Update to Factorio 0.18.47 2021-06-06 11:55:03 +00:00
SuperSandroBot
6ce248eacb Update to Factorio 0.18.47 2021-06-05 14:06:06 +00:00
SuperSandroBot
a683f67f86 Update to Factorio 0.18.47 2021-06-05 10:06:28 +00:00
SuperSandroBot
b253a086cc Update to Factorio 0.18.47 2021-06-04 10:35:23 +00:00
SuperSandroBot
36ecbb3de8 Update to Factorio 0.18.47 2021-06-01 05:54:15 +00:00
SuperSandroBot
3bd6929ee7 Update to Factorio 0.18.47 2021-05-31 05:28:27 +00:00
SuperSandroBot
cb4f36fc91 Update to Factorio 0.18.47 2021-05-27 07:11:10 +00:00
SuperSandroBot
06433d2ba1 Update to Factorio 0.18.47 2021-05-26 15:15:43 +00:00
SuperSandroBot
31a0c78ba6 Update to Factorio 0.18.47 2021-05-26 13:08:55 +00:00
SuperSandroBot
29f5222c35 Update to Factorio 0.18.47 2021-05-25 17:24:50 +00:00
SuperSandroBot
13ebf33867 Update to Factorio 0.18.47 2021-05-24 13:21:35 +00:00
SuperSandroBot
3947458623 Update to Factorio 1.1.34 2021-05-24 11:46:29 +00:00
SuperSandroBot
cb6eb6e519 Update to Factorio 0.18.47 2021-05-24 06:38:10 +00:00
SuperSandroBot
9896b03e0a Update to Factorio 0.18.47 2021-05-23 21:50:10 +00:00
SuperSandroBot
5176be56db Update to Factorio 0.18.47 2021-05-23 21:19:31 +00:00
SuperSandroBot
72fdb9fc42 Update to Factorio 0.18.47 2021-05-23 07:17:00 +00:00
SuperSandroBot
b0b62d5ba7 Update to Factorio 0.18.47 2021-05-20 22:11:42 +00:00
SuperSandroBot
4f73862221 Update to Factorio 0.18.47 2021-05-19 17:37:45 +00:00
SuperSandroBot
5b83699e5c Update to Factorio 0.18.47 2021-05-15 10:46:54 +00:00
SuperSandroBot
511520c459 Update to Factorio 0.18.47 2021-05-15 07:23:50 +00:00
SuperSandroBot
99db93d6f8 Update to Factorio 0.18.47 2021-05-14 22:43:13 +00:00
SuperSandroBot
24825309c3 Update to Factorio 0.18.47 2021-05-14 22:18:14 +00:00
SuperSandroBot
db25aab203 Update to Factorio 0.18.47 2021-05-14 22:08:13 +00:00
SuperSandroBot
d10ec1e309 Update to Factorio 0.18.47 2021-05-13 23:04:53 +00:00
SuperSandroBot
14851be061 Update to Factorio 0.18.47 2021-05-13 22:53:34 +00:00
SuperSandroBot
1212e00fa3 Update to Factorio 0.18.47 2021-05-11 12:31:29 +00:00
SuperSandroBot
c537410871 Update to Factorio 0.18.47 2021-05-11 01:01:33 +00:00
SuperSandroBot
068b96ae2b Update to Factorio 0.18.47 2021-05-06 07:08:36 +00:00
SuperSandroBot
9c3ec3c817 Update to Factorio 0.18.47 2021-05-04 13:36:13 +00:00
SuperSandroBot
229f3d7fda Update to Factorio 0.18.47 2021-05-04 10:42:44 +00:00
SuperSandroBot
248dab3db1 Update to Factorio 0.18.47 2021-05-04 10:22:59 +00:00
Sandro Jäckel
c25e2c8a1d Disable 0.18 because it got yanked from the download servers 2021-05-03 19:04:50 +02:00
SuperSandroBot
4a84743920 Update to Factorio 1.1.33 2021-05-03 16:53:19 +00:00
dependabot-preview[bot]
cc4f8b192d Upgrade to GitHub-native Dependabot (#389)
Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2021-04-30 01:49:38 +02:00
SuperSandroBot
acd9c559fb Update to Factorio 0.18.47 2021-04-28 14:29:19 +00:00
SuperSandroBot
ff7074822b Update to Factorio 0.18.47 2021-04-26 02:21:25 +00:00
SuperSandroBot
99100f8495 Update to Factorio 0.18.47 2021-04-23 15:33:06 +00:00
SuperSandroBot
939827eb81 Update to Factorio 0.18.47 2021-04-20 21:31:10 +00:00
SuperSandroBot
7c1406b38c Update to Factorio 0.18.47 2021-04-20 19:31:09 +00:00
SuperSandroBot
5f7a32e492 Update to Factorio 0.18.47 2021-04-20 14:07:30 +00:00
SuperSandroBot
a11cbbbf41 Update to Factorio 0.18.47 2021-04-20 11:37:28 +00:00
SuperSandroBot
dac8e07016 Update to Factorio 0.18.47 2021-04-20 11:07:37 +00:00
SuperSandroBot
63fcb292a8 Update to Factorio 0.18.47 2021-04-20 06:47:30 +00:00
SuperSandroBot
2a313aa6d6 Update to Factorio 0.18.47 2021-04-19 13:17:29 +00:00
SuperSandroBot
b5a6059386 Update to Factorio 0.18.47 2021-04-19 11:22:26 +00:00
SuperSandroBot
5904849dbc Update to Factorio 0.18.47 2021-04-19 04:57:43 +00:00
SuperSandroBot
1987d7b43a Update to Factorio 0.18.47 2021-04-18 19:02:18 +00:00
dependabot-preview[bot]
54b1a97074 Bump frolvlad/alpine-glibc from alpine-3.12 to alpine-3.13 in /0.18 (#358)
Bumps frolvlad/alpine-glibc from alpine-3.12 to alpine-3.13.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2021-04-16 11:21:19 +02:00
dependabot-preview[bot]
ec1aef13d6 Bump frolvlad/alpine-glibc from alpine-3.12 to alpine-3.13 in /0.15 (#359)
Bumps frolvlad/alpine-glibc from alpine-3.12 to alpine-3.13.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2021-04-16 11:21:13 +02:00
dependabot-preview[bot]
bc9ec68e87 Bump frolvlad/alpine-glibc from alpine-3.12 to alpine-3.13 in /0.16 (#362)
Bumps frolvlad/alpine-glibc from alpine-3.12 to alpine-3.13.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2021-04-16 11:21:07 +02:00
dependabot-preview[bot]
51762ba589 Bump frolvlad/alpine-glibc from alpine-3.12 to alpine-3.13 in /0.14 (#361)
Bumps frolvlad/alpine-glibc from alpine-3.12 to alpine-3.13.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2021-04-16 11:21:02 +02:00
dependabot-preview[bot]
dffc09f0ff Bump frolvlad/alpine-glibc from alpine-3.12 to alpine-3.13 in /0.17 (#360)
Bumps frolvlad/alpine-glibc from alpine-3.12 to alpine-3.13.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2021-04-16 11:20:56 +02:00
SuperSandroBot
cc7f772024 Update to Factorio 1.1.32 2021-04-14 08:51:20 +00:00
SuperSandroBot
cef0016bf4 Update to Factorio 1.1.31 2021-04-13 07:38:54 +00:00
SuperSandroBot
5b5a658116 Update to Factorio 1.1.30 2021-04-11 04:16:23 +00:00
SuperSandroBot
3e3dfb7c05 Update to Factorio 1.1.30 2021-04-10 09:46:19 +00:00
SuperSandroBot
e150272201 Update to Factorio 1.1.30 2021-04-06 07:52:03 +00:00
SuperSandroBot
228cc517e0 Update to Factorio 1.1.30 2021-04-05 17:02:02 +00:00
SuperSandroBot
850bb9aef0 Update to Factorio 1.1.30 2021-03-24 20:39:58 +00:00
SuperSandroBot
caafc2cbef Update to Factorio 1.1.29 2021-03-24 18:05:14 +00:00
SuperSandroBot
3f3fa0a008 Update to Factorio 1.1.28 2021-03-24 13:29:58 +00:00
SuperSandroBot
af51b87df7 Update to Factorio 1.1.27 2021-03-19 03:31:22 +00:00
SuperSandroBot
78b45f2cca Update to Factorio 1.1.27 2021-03-18 13:43:16 +00:00
SuperSandroBot
257229118f Update to Factorio 1.1.27 2021-03-11 10:33:57 +00:00
Sandro
6aadd6053a Merge pull request #376 from Thrimbda/doc/zh_CN-translation 2021-03-11 01:19:03 +01:00
SuperSandroBot
db54b89dae Update to Factorio 1.1.26 2021-03-03 23:43:04 +00:00
Siyuan Wang
64cad3e345 replace specific version info with a link to original ones 2021-03-04 00:39:29 +08:00
Siyuan Wang
c88e79fd5b doc: finish translation 2021-03-04 00:39:29 +08:00
Siyuan Wang
d0610c47d6 doc: add simplified Chinese translation. 2021-03-04 00:38:50 +08:00
SuperSandroBot
851507c3ef Update to Factorio 1.1.26 2021-03-01 13:27:33 +00:00
Sandro
3e5afe32ab Merge pull request #377 from jmriddell/patch-1
Fix small typo on README.md
2021-02-19 10:42:15 +01:00
Juan Molina Riddell
2359a1c5d8 Fix small typo 2021-02-18 23:16:08 -03:00
SuperSandroBot
d99ef45240 Update to Factorio 1.1.25 2021-02-17 17:47:25 +00:00
SuperSandroBot
2b26cd1b69 Update to Factorio 1.1.24 2021-02-16 15:53:19 +00:00
SuperSandroBot
7dddaf62bd Update to Factorio 1.1.24 2021-02-16 10:17:23 +00:00
SuperSandroBot
3f034d0754 Update to Factorio 1.1.23 2021-02-16 08:38:07 +00:00
SuperSandroBot
7720e32081 Update to Factorio 1.1.23 2021-02-16 07:17:24 +00:00
SuperSandroBot
65049c8120 Update to Factorio 1.1.22 2021-02-15 21:27:28 +00:00
SuperSandroBot
c94ab998b4 Update to Factorio 1.1.21 2021-02-12 23:33:03 +00:00
SuperSandroBot
6e4ec92a95 Update to Factorio 1.1.21 2021-02-11 09:30:47 +00:00
SuperSandroBot
7dcac4cdd7 Update to Factorio 1.1.21 2021-02-10 05:27:46 +00:00
SuperSandroBot
cc70895c33 Update to Factorio 1.1.21 2021-02-06 21:14:54 +00:00
SuperSandroBot
89b54579e0 Update to Factorio 1.1.21 2021-02-06 18:01:57 +00:00
Sandro Jäckel
c1e1a1c4ca Fix CI for PRs 2021-02-05 22:55:04 +01:00
SuperSandroBot
429c88f290 Update to Factorio 1.1.21 2021-02-05 18:19:26 +00:00
SuperSandroBot
074bf11633 Update to Factorio 1.1.20 2021-02-04 22:24:29 +00:00
SuperSandroBot
5765088f7e Update to Factorio 1.1.19 2021-02-04 17:55:42 +00:00
SuperSandroBot
316f790530 Update to Factorio 1.1.19 2021-02-04 08:41:53 +00:00
SuperSandroBot
c91852a196 Update to Factorio 1.1.19 2021-02-04 06:45:27 +00:00
SuperSandroBot
9ba7c5c8d6 Update to Factorio 1.1.19 2021-02-03 11:14:38 +00:00
SuperSandroBot
f2a4223c7b Update to Factorio 1.1.19 2021-02-03 05:51:48 +00:00
SuperSandroBot
2a5e5b48ef Update to Factorio 1.1.19 2021-02-02 19:13:10 +00:00
SuperSandroBot
57e979bca1 Update to Factorio 1.1.19 2021-02-02 02:00:33 +00:00
Sandro Jäckel
88ca3293a6 Push base version on incremental tags 2021-01-28 00:19:59 +01:00
Sandro Jäckel
018269377a Remove ref/tags from version 2021-01-28 00:12:38 +01:00
Sandro Jäckel
846e102ac8 Fix version short for stable 2021-01-27 23:51:45 +01:00
Sandro Jäckel
4551f6ee03 Fix tag pushes 2021-01-27 23:49:40 +01:00
Sandro Jäckel
09db1e2141 Mark 1.1 as stable 2021-01-27 23:39:56 +01:00
Sandro Jäckel
cb9a9812bd Fix image in docker description update 2021-01-27 11:24:26 +01:00
Sandro Jäckel
d03e4063e7 Quote version numbers 2021-01-26 20:00:56 +01:00
Sandro Jäckel
21c5c85ac3 Fix yaml 2021-01-26 19:59:58 +01:00
Sandro Jäckel
a10642d3eb Use secrets properly 2021-01-26 19:57:15 +01:00
Sandro Jäckel
2856c1cf76 Update docker hub description update 2021-01-26 19:51:32 +01:00
Sandro
3e736968d1 Converto to GitHub actions (#364) 2021-01-26 19:43:14 +01:00
SuperSandroBot
ac6d647ddd Update to Factorio 1.1.19 2021-01-26 15:11:30 +00:00
SuperSandroBot
02439750d1 Update to Factorio 1.1.18 2021-01-25 21:26:24 +00:00
SuperSandroBot
3efae7b161 Update to Factorio 1.1.17 2021-01-25 18:26:24 +00:00
SuperSandroBot
49a258c830 Update to Factorio 1.1.16 2021-01-25 10:11:39 +00:00
SuperSandroBot
3ffa3610ef Update to Factorio 1.1.15 2021-01-24 17:31:24 +00:00
SuperSandroBot
56984b2ef1 Update to Factorio 1.1.14 2021-01-23 09:11:24 +00:00
SuperSandroBot
653c87a32e Update to Factorio 1.1.13 2021-01-22 12:31:24 +00:00
SuperSandroBot
07bd20120c Update to Factorio 1.1.12 2021-01-16 11:01:09 +00:00
Sandro Jäckel
bd7347b42c ci: fix invalid yaml 2021-01-15 11:30:40 +01:00
Sandro Jäckel
cfbef2aedb ci: log into docker hub to pull the hadolint image 2021-01-15 11:21:25 +01:00
Sandro Jäckel
8436dfe8a0 Fix travis rate limiting
Should close #354
2021-01-15 10:39:24 +01:00
SuperSandroBot
82892d8ad8 Update to Factorio 1.1.11 2021-01-14 17:31:28 +00:00
SuperSandroBot
34132ddbd6 Update to Factorio 1.1.10 2021-01-14 14:31:29 +00:00
SuperSandroBot
b52af78919 Update to Factorio 1.1.9 2021-01-14 09:56:29 +00:00
SuperSandroBot
13964c7a50 Update to Factorio 1.1.8 2021-01-07 19:22:14 +00:00
SuperSandroBot
e5e5dc27d2 Update to Factorio 1.1.7 2021-01-07 09:52:17 +00:00
SuperSandroBot
8ad8f81eed Update to Factorio 1.1.6 2020-12-14 19:48:56 +00:00
SuperSandroBot
b0e855bb8a Update to Factorio 1.1.5 2020-12-04 05:41:02 +00:00
SuperSandroBot
31a60e976b Update to Factorio 1.1.4 2020-12-03 15:36:01 +00:00
SuperSandroBot
c108d48f00 Update to Factorio 1.1.3 2020-11-30 17:50:45 +00:00
SuperSandroBot
fa741f635f Update to Factorio 1.1.2 2020-11-28 12:15:35 +00:00
SuperSandroBot
5258ed7843 Update to Factorio 1.1.1 2020-11-25 09:27:03 +00:00
Florian Kinder
d31d7f5ae6 Change stable to 1.0.0 2020-11-25 09:32:00 +01:00
Florian Kinder
0efbfb5c2d Updated readme 2020-11-24 09:25:46 +01:00
Florian Kinder
57f867aa80 Added travis 1.1 build 2020-11-24 09:24:53 +01:00
Kirill Vorobyev
ded7d36fa8 Added 1.1.0 support (#348) 2020-11-24 09:20:42 +01:00
Sandro Jäckel
93822d930c Fix reading docker secrets token 2020-09-26 13:53:48 +02:00
Sandro Jäckel
5474bb842d Better document PORT env 2020-09-17 18:10:59 +02:00
florian kinder
ff432200f0 Added 1.0 for travis and marked it as latest & stable 2020-08-14 11:42:25 +02:00
Crabbey
310214eb46 Added 1.0 (#342) 2020-08-14 11:34:16 +02:00
Sandro
bc3b08e470 Truly fix mod updates with spaces in names (#320) 2020-08-11 19:10:59 +02:00
cielo
1ef555ab24 Save op fix for scenario.sh and scenario2map.sh. (#340) 2020-08-11 18:54:25 +02:00
cielo
c8c6cb62ea Let scenario.sh script to use map-gen-settings.json/map-settings.json located in config directory. (#341) 2020-08-11 18:53:49 +02:00
SuperSandroBot
ac21591ee9 Update to Factorio 0.18.47 2020-08-11 10:44:10 +00:00
SuperSandroBot
bef01206d1 Update to Factorio 0.18.46 2020-08-10 20:09:09 +00:00
SuperSandroBot
a7131499e4 Update to Factorio 0.18.45 2020-08-07 14:19:10 +00:00
SuperSandroBot
2a2092755c Update to Factorio 0.18.44 2020-08-07 09:29:10 +00:00
SuperSandroBot
7d50408b87 Update to Factorio 0.18.43 2020-08-06 16:29:10 +00:00
SuperSandroBot
9a7174ddaf Update to Factorio 0.18.42 2020-08-03 17:34:20 +00:00
SuperSandroBot
fffc38615f Update to Factorio 0.18.41 2020-08-03 05:39:09 +00:00
SuperSandroBot
7b31cc044a Update to Factorio 0.18.40 2020-08-01 08:59:15 +00:00
SuperSandroBot
0331df2774 Update to Factorio 0.18.39 2020-08-01 06:29:17 +00:00
SuperSandroBot
1405a9be04 Update to Factorio 0.18.38 2020-07-30 06:54:11 +00:00
SuperSandroBot
b630de0efa Update to Factorio 0.18.37 2020-07-29 15:24:10 +00:00
Sandro
a2aec76419 Fix loading of scenarios (#336) 2020-07-29 14:20:02 +02:00
SuperSandroBot
c112d3969f Update to Factorio 0.18.36 2020-07-15 22:42:15 +00:00
SuperSandroBot
624c42a831 Update to Factorio 0.18.35 2020-07-06 12:58:00 +00:00
SuperSandroBot
8c9adbbbc6 Update to Factorio 0.18.34 2020-06-26 11:07:58 +00:00
SuperSandroBot
e057dd5b22 Update to Factorio 0.18.33 2020-06-24 12:26:22 +00:00
dependabot-preview[bot]
a5b2e042a9 Bump frolvlad/alpine-glibc from alpine-3.11 to alpine-3.12 in /0.15 (#332)
Bumps frolvlad/alpine-glibc from alpine-3.11 to alpine-3.12.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-19 18:46:05 +02:00
dependabot-preview[bot]
9960cc856d Bump frolvlad/alpine-glibc from alpine-3.11 to alpine-3.12 in /0.16 (#331)
Bumps frolvlad/alpine-glibc from alpine-3.11 to alpine-3.12.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-19 18:44:49 +02:00
dependabot-preview[bot]
1bb5f2610e Bump frolvlad/alpine-glibc from alpine-3.11 to alpine-3.12 in /0.14 (#329)
Bumps frolvlad/alpine-glibc from alpine-3.11 to alpine-3.12.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-19 18:44:16 +02:00
dependabot-preview[bot]
8ee8fafe38 Bump frolvlad/alpine-glibc from alpine-3.11 to alpine-3.12 in /0.17 (#330)
Bumps frolvlad/alpine-glibc from alpine-3.11 to alpine-3.12.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-19 18:42:15 +02:00
dependabot-preview[bot]
ab33e69fb1 Bump frolvlad/alpine-glibc from alpine-3.11 to alpine-3.12 in /0.18 (#328)
Bumps frolvlad/alpine-glibc from alpine-3.11 to alpine-3.12.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-19 18:41:15 +02:00
Sandro Jäckel
d14fb33575 Don't crash when building no tag 2020-06-19 18:39:59 +02:00
SuperSandroBot
3f4e823fbc Update to Factorio 0.18.32 2020-06-16 09:31:20 +00:00
SuperSandroBot
e439c21591 Update to Factorio 0.18.31 2020-06-10 11:04:03 +00:00
SuperSandroBot
c7bb5393ad Update to Factorio 0.18.30 2020-06-03 13:59:33 +00:00
SuperSandroBot
54a9b4c5c4 Update to Factorio 0.18.29 2020-06-01 19:03:38 +00:00
SuperSandroBot
775ed4b228 Update to Factorio 0.18.28 2020-05-28 16:17:12 +00:00
SuperSandroBot
5550f9b707 Update to Factorio 0.18.27 2020-05-26 15:12:19 +00:00
Sandro Jäckel
0c924152a7 Correctly check UPDATE_MODS_ON_START env
Closes #323
2020-05-25 03:21:17 +02:00
SuperSandroBot
cb36026261 Update to Factorio 0.18.26 2020-05-23 01:26:01 +00:00
Sandro
ef6bbde78d Fix migration when config is mounted (#318) 2020-05-23 03:05:56 +02:00
SuperSandroBot
44d4898862 Update to Factorio 0.18.25 2020-05-19 11:40:16 +00:00
Sandro Jäckel
46b94cb19f ci: Fix incremental push 2020-05-18 04:08:29 +02:00
Sandro Jäckel
e47431c7af ci: fix dependabot condition 2020-05-18 04:08:18 +02:00
Sandro Jäckel
d03fb43532 ci: unbrick incremental tags 2020-05-18 03:56:55 +02:00
Sandro Jäckel
bd6d956518 ci: fix crash on empty vars 2020-05-18 03:50:08 +02:00
Sandro Jäckel
afd636fc3f ci: don't push on master, only tags 2020-05-18 03:09:14 +02:00
Sandro Jäckel
a2849b016a ci: improve doc 2020-05-18 03:04:12 +02:00
Sandro Jäckel
4e261043cd CI: simplify logic 2020-05-18 02:43:06 +02:00
Sandro Jäckel
4c47dbc4ee CI: Also disable docker push for branches 2020-05-18 02:42:55 +02:00
Sandro Jäckel
07264e626f Update all base images to alpine 3.11 2020-05-18 02:42:35 +02:00
Sandro Jäckel
64a1f8d9bf Replace symlinks with config option write-data
Closes #311
2020-05-18 02:36:26 +02:00
Sandro Jäckel
15a2d493f8 apply shellcheck suggestions 2020-05-18 02:34:53 +02:00
Sandro Jäckel
3777041d3e CI: disable branch tagging to fix dependabot 2020-05-18 02:21:47 +02:00
Simon Schneider
ccd0707d21 update alpine-glibc image to 3.11 (#312) 2020-05-18 01:25:03 +02:00
SuperSandroBot
a5b03e6625 Update to Factorio 0.18.24 2020-05-12 13:45:50 +00:00
SuperSandroBot
03b4d9eb5e Update to Factorio 0.18.23 2020-05-12 12:10:51 +00:00
Sandro Jäckel
af48272100 Fix shellcheck warnings, change shebang to bash 2020-05-07 22:31:20 +02:00
Sandro Jäckel
cc63e10cd1 Vendor docker hub update script 2020-05-07 22:30:58 +02:00
SuperSandroBot
f90cd27bcd Update to Factorio 0.18.22 2020-04-30 12:05:50 +00:00
Richard Xia
1ab01d0277 Fix save file environment variables in README.md. (#309) 2020-04-26 11:12:11 +02:00
SuperSandroBot
66c11b1a82 Update to Factorio 0.18.21 2020-04-24 09:33:13 +00:00
SuperSandroBot
49055cfe1b Update to Factorio 0.18.20 2020-04-24 06:43:20 +00:00
SuperSandroBot
ab818efda4 Update to Factorio 0.18.19 2020-04-20 11:53:15 +00:00
SuperSandroBot
6da1250b5b Update to Factorio 0.18.18 2020-04-08 16:02:54 +00:00
Sandro Jäckel
deaaf83967 Do not stop updating process on incompatible version
Closes #308
2020-04-05 11:09:01 +02:00
Sandro Jäckel
9691472b84 Backport #307 to 0.17 2020-04-05 11:07:18 +02:00
SuperSandroBot
236b27d94e Update to Factorio 0.18.17 2020-03-27 17:58:41 +00:00
SuperSandroBot
457ab79b5b Update to Factorio 0.18.16 2020-03-25 16:00:10 +00:00
Kai
235a2abb60 Fixes #306 by skipping custom mods (#307) 2020-03-21 12:54:27 +01:00
SuperSandroBot
c52f649b35 Update to Factorio 0.18.15 2020-03-20 15:25:07 +00:00
SuperSandroBot
52167abffa Update to Factorio 0.18.14 2020-03-18 17:20:08 +00:00
SuperSandroBot
f20fe0ad85 Update to Factorio 0.18.13 2020-03-17 14:10:20 +00:00
SuperSandroBot
1cd2015cc4 Update to Factorio 0.18.12 2020-03-10 17:45:07 +00:00
SuperSandroBot
c4b2d30366 Update to Factorio 0.18.11 2020-03-10 15:05:07 +00:00
SuperSandroBot
5c81134430 Update to Factorio 0.18.10 2020-03-03 14:30:08 +00:00
SuperSandroBot
7d220042a9 Update to Factorio 0.18.9 2020-02-25 12:30:39 +00:00
SuperSandroBot
e61a3aa622 Update to Factorio 0.18.8 2020-02-18 18:05:11 +00:00
SuperSandroBot
773005b320 Update to Factorio 0.18.7 2020-02-18 15:15:10 +00:00
SuperSandroBot
51185620dd Update to Factorio 0.18.6 2020-02-11 21:21:35 +00:00
SuperSandroBot
c24b7bc41b Update to Factorio 0.18.5 2020-02-11 18:02:10 +00:00
SuperSandroBot
5301aff1b1 Update to Factorio 0.18.4 2020-02-06 14:31:36 +00:00
SuperSandroBot
502f13c1cd Update to Factorio 0.18.3 2020-01-30 18:56:34 +00:00
SuperSandroBot
fe3d0d65bc Update to Factorio 0.18.2 2020-01-28 14:46:33 +00:00
florian kinder
4bc30e718c ⬆️ 0.18.1 2020-01-24 10:47:48 +01:00
florian kinder
994a091595 Don't update dockerhub on pull requests 2020-01-24 10:43:25 +01:00
florian kinder
c754e64e47 ⬇️ 0.18.0 2020-01-24 10:39:46 +01:00
MagicHack
a2726704ed Update to Factorio 0.18.0 and 0.18.1 (#303)
* Update to Factorio 0.18.0

* Update to Factorio 0.18.1
2020-01-24 10:37:42 +01:00
Sandro Jäckel
f4e8b30e90 Travis: Remove deprecated option 2019-12-26 16:05:09 +01:00
Sandro
07dcd690bd Add updater status badge 2019-12-19 12:02:04 +01:00
Sandro
4bf909979a Remove very out of date env section, format 2019-11-25 08:43:10 +01:00
Chance Zibolski
7ec79a6e1b Allow configuring factorio server to run with a specific save th… (#296)
This change enables specifying a specific save to use via the $SAVE_NAME
variable when $ENABLE_SERVER_LOAD_LATEST is false. Additionally, you can
set $ENABLE_GENERATE_NEW_MAP_SAVE to generate a map for $SAVE_NAME if
one does not already exist.

Co-authored-by: Chance Zibolski <czibolsk@redhat.com>
2019-11-25 08:31:28 +01:00
Sandro Jäckel
6a1317cb7a Clear env for cleaner job list 2019-11-25 01:51:05 +01:00
Sandro Jäckel
15efa9caec Fix Docker HUB description update for PRs 2019-11-25 01:48:55 +01:00
Sandro
41b2c9b743 Update contributors
Shameless self promotion 😝
2019-11-25 01:34:30 +01:00
Sandro Jäckel
4e4810aea3 Combine stages for faster pipeline 2019-11-20 22:57:13 +01:00
Sandro Jäckel
d667a247e1 Fix typo 2019-11-20 22:53:23 +01:00
Sandro Jäckel
ce1f980525 Make 0.17.79 stable
Closes #295
2019-11-20 22:47:20 +01:00
SuperSandroBot
120ee1bbdb Update to Factorio 0.17.79 2019-11-19 18:43:06 +00:00
Sandro Jäckel
5cba3991ef Fix stable version in readme 2019-11-19 15:55:10 +01:00
SuperSandroBot
412c16e379 Update to Factorio 0.17.79 2019-11-19 14:32:54 +00:00
SuperSandroBot
82635a9cff Update to Factorio 0.17.78 2019-11-15 17:48:02 +00:00
SuperSandroBot
c495fc38a4 Update to Factorio 0.17.77 2019-11-14 20:10:02 +00:00
Sandro Jäckel
b580447de4 Update Docker Hub Description 2019-11-11 22:21:45 +01:00
SuperSandroBot
2290034ecf Update to Factorio 0.17.76 2019-11-10 02:29:36 +01:00
Sandro Jäckel
300300e7ec Fix stable tag 2019-11-07 00:27:02 +01:00
SuperSandroBot
179be082d9 Update to Factorio 0.17.75 2019-11-07 00:22:42 +01:00
Sandro Jäckel
efcc29cfed Mod Updater: Force remove mod archives
Closes #293
2019-11-04 16:12:49 +01:00
Sandro Jäckel
1b7decd8ce Mark 0.17 stable 2019-11-01 10:15:23 +01:00
SuperSandroBot
b38750e4ac Update to Factorio 0.17.74 2019-10-25 15:17:09 +00:00
SuperSandroBot
bfb8b7fd95 Update to Factorio 0.17.73 2019-10-24 18:30:51 +00:00
SuperSandroBot
8b5d4e06df Update to Factorio 0.17.72 2019-10-18 13:08:58 +00:00
Sandro Jäckel
33060cc4fb Update readme 2019-10-18 11:56:15 +02:00
Sandro Jäckel
e1beb32f81 Fix CI 2019-10-18 11:56:07 +02:00
Sandro Jäckel
2c1d1cd985 Fix CI
hopefully!
2019-10-18 11:52:25 +02:00
Sandro Jäckel
39fd391e9b Fix ci script for manual runs 2019-10-18 11:37:43 +02:00
Sandro Jäckel
a5d6466f0b Fix variable expansion 2019-10-18 11:21:15 +02:00
Sandro Jäckel
c6b15d89c1 Fix shellcheck 2019-10-18 11:15:36 +02:00
Sandro Jäckel
7c9011dcee Add note for when 0.17 leaves experimental entirely 2019-10-18 10:53:16 +02:00
Sandro Jäckel
b5af3130e2 Format 2019-10-18 10:51:06 +02:00
Sandro Jäckel
e307b1d537 CI: Add support for comma seperated extra tags 2019-10-18 10:50:25 +02:00
SuperSandroBot
8c0ddf99ce Update to Factorio 0.17.71 2019-10-16 16:06:48 +00:00
SuperSandroBot
d7b79c567a Update to Factorio 0.17.70 2019-10-15 20:20:03 +00:00
Sandro Jäckel
3e62698b4b Update store links 2019-10-01 16:25:31 +02:00
Jean-Marie Baran
d4870219f6 Added a link to Gog in addition to Factorio's website and Steam in the README.md (#290) 2019-10-01 11:48:30 +02:00
SuperSandroBot
01194242b9 Update to Factorio 0.17.69 2019-09-19 15:32:52 +00:00
SuperSandroBot
4255475b18 Update to Factorio 0.17.68 2019-09-04 17:49:55 +00:00
SuperSandroBot
4ff8179912 Update to Factorio 0.17.67 2019-09-03 12:49:54 +00:00
SuperSandroBot
db14988396 update to 0.17.66 2019-08-16 13:40:26 +00:00
xxalfa
cd29f2003b Load admin list in scenario (#288) 2019-08-16 13:58:59 +02:00
SuperSandroBot
cd2d89a7bc update to 0.17.65 2019-08-14 11:35:26 +00:00
xxalfa
2d9f646728 Fix whitelist args in scenario entrypoint 2019-08-11 01:40:33 +02:00
SuperSandroBot
9e96ca5aa8 update to 0.17.64 2019-08-09 19:24:45 +00:00
Andrew Holt
5c947846d1 Fix 0.17.63 SHA (#284) 2019-08-07 13:57:43 +02:00
SuperSandroBot
edd0c95d9b update to 0.17.63 2019-08-06 12:20:39 +00:00
SuperSandroBot
6651289d6e update to 0.17.62 2019-08-02 22:37:32 +00:00
SuperSandroBot
784626b689 update to 0.17.61 2019-08-02 17:07:36 +00:00
SuperSandroBot
47ce1706db update to 0.17.60 2019-07-30 14:37:31 +00:00
Fabricio20
460ba0187d Update to 0.17.59 (#281)
* Update Dockerfile

* Update README.md
2019-07-26 00:28:10 +02:00
SuperSandroBot
6d496def35 update to 0.17.58 2019-07-15 21:28:01 +00:00
SuperSandroBot
9f8f6da0d2 update to 0.17.57 2019-07-15 17:43:15 +00:00
Sandro Jäckel
71c75671d5 Add debug code when sha match fails 2019-07-13 12:23:01 +02:00
Sandro Jäckel
5a66d1a8df Revert "Fix 0.17.56 sha"
This reverts commit a48b9d107d.
2019-07-13 12:22:21 +02:00
Sandro Jäckel
a48b9d107d Fix 0.17.56 sha 2019-07-13 12:05:08 +02:00
Sandro Jäckel
e5f34134f7 Apply shell-format 2019-07-13 12:04:34 +02:00
SuperSandroBot
5d997bf1c7 update to 0.17.56 2019-07-11 20:13:01 +00:00
SuperSandroBot
7a08cbb04c update to 0.17.55 2019-07-09 13:33:01 +00:00
Sandro Jäckel
40cc26ca02 URL encode spaces (#276)
Closes #275
2019-07-08 17:05:18 +02:00
Sandro Jäckel
e8705a44b8 Fix docker push with new incremental tags pt. 3 2019-07-06 17:32:35 +02:00
Sandro Jäckel
fe9875343f Fix docker push with new incremental tags pt. 2 2019-07-06 17:26:15 +02:00
Sandro Jäckel
06729a6097 Fix docker push with new incremental tags 2019-07-06 17:21:08 +02:00
Sandro Jäckel
95766e90c9 Switch to test pt. 2 2019-07-06 17:00:03 +02:00
Sandro Jäckel
4afbed52c8 Switch to test, add support for incremental tags
Closes #274
2019-07-06 16:46:56 +02:00
Sandro Jäckel
fd7b8cd839 Made username, token checking more robust against configuration errors 2019-07-06 16:45:38 +02:00
Sandro Jäckel
9c92ac9342 Fix sha check 2019-07-06 16:41:40 +02:00
Sandro Jäckel
1b6c8adf28 Switch to test, cleanupm, formatting 2019-07-06 16:37:13 +02:00
Sandro Jäckel
65c5833fd9 Cleanup shebangs, add set -eou[x] pipefail to all files 2019-07-06 16:32:49 +02:00
Sandro Jäckel
c949351391 Update readme to reflect upcoming tagging change. 2019-07-06 14:23:35 +02:00
Sandro Jäckel
6ae5795d38 Hide apk progress, sort packages 2019-07-05 09:24:04 +02:00
Sandro Jäckel
29ee60236e Switch scripts to bash
Closes #268, #269
2019-07-05 09:19:46 +02:00
Carl Bennett
7028eb72f6 Add @carlbennett as a contributor 2019-07-05 09:11:12 +02:00
Carl Bennett
dfeb95d614 Update to 0.17.54 (#271) 2019-07-05 02:46:55 +02:00
Carl Bennett
f8c62978ee Add executable permission on 0.17 shell files (#270) 2019-07-05 02:46:24 +02:00
Sandro Jäckel
28598a42a3 Rebase modupdater (#267)
Based on work from https://github.com/ALovedOne and https://github.com/patschi
2019-07-04 00:34:09 +02:00
Sandro Jäckel
4ba56ee010 Link version badge to Docker Hub, organize badges 2019-07-03 11:33:02 +02:00
Sandro Jäckel
d2a02e8a66 Update contributors description 2019-07-02 23:02:15 +02:00
SuperSandroBot
5b24f8ac74 update to 0.17.53 2019-07-02 20:18:40 +00:00
Carl Bennett
e3466a9800 Update to 0.17.52 (#266) 2019-06-25 16:42:09 +02:00
florian kinder
e6f66a2100 update to 0.17.51 2019-06-25 16:40:18 +02:00
Florian Kinder
18153f3f46 update to 0.17.50 2019-06-17 15:39:11 +00:00
Florian Kinder
62e1a9f266 update to 0.17.49 2019-06-13 17:09:11 +00:00
Florian Kinder
be7ecddb0d update to 0.17.48 2019-06-11 14:14:13 +00:00
Florian Kinder
43599d0c23 update to 0.17.47 2019-06-07 15:49:12 +00:00
Florian Kinder
6fb4cbc600 update to 0.17.46 2019-06-07 11:19:11 +00:00
Florian Kinder
fe0e8f9b91 update to 0.17.45 2019-05-31 13:14:12 +00:00
Florian Kinder
f76e88cea1 update to 0.17.44 2019-05-30 15:14:11 +00:00
Sandro Jäckel
cbaa20cdea CI: Do not try to push master 2019-05-25 23:49:55 +02:00
Florian Kinder
b3c134d396 update to 0.17.43 2019-05-24 13:09:12 +00:00
Sandro Jäckel
9bdb79b494 CI: Do not try to push master 2019-05-21 22:37:26 +02:00
Florian Kinder
77d83b4152 update to 0.17.42 2019-05-21 17:09:12 +00:00
Sandro Jäckel
25d4edf14f CI: Don't push $TRAVIS_BRANCH if it is equal to $VERSIOn
Reason behind that is that git tags have $TRAVIS_BRANCH set to the tag name
2019-05-18 14:07:27 +02:00
Sandro Jäckel
e16b111c0b CI: Tag Docker Image with $VERSION_SHORT on git tag building 2019-05-18 14:01:22 +02:00
Sandro Jäckel
09e1ad2045 CI: another try to fix tag building 2019-05-18 13:40:25 +02:00
Sandro Jäckel
2efa39084f Cache shields.io badges for 10m 2019-05-18 13:37:51 +02:00
Sandro Jäckel
77edb05109 CI: try fix tag building, fix upload, add easy manual pushing, more fixes 2019-05-18 13:26:04 +02:00
Sandro Jäckel
2eea2a25e4 CI: correct docker hub repo name 2019-05-17 19:57:33 +02:00
Sandro Jäckel
98ea8a27c1 Fix sha1 of 0.17.41
Closes #261
2019-05-17 19:45:29 +02:00
Florian Kinder
956af65a2b update to 0.17.41 2019-05-17 11:19:10 +00:00
Jason
b5c1dff7b4 Allow puid/pgid to be set as environment vars on stable (#256)
* allow puid/pgid to be set on stable

* update docker-entrypoint to include puid, gpid

* add quotes to env puid/pgid env vars

* add quotes for factorio-vol
2019-05-17 12:32:55 +02:00
Sandro Jäckel
ee5b023911 Quote all vars in Dockerfile (#259) 2019-05-17 09:11:09 +02:00
Sandro Jäckel
045ef7a214 Skip docker push if it is a PR 2019-05-16 20:19:36 +02:00
Sandro Jäckel
bbc2d42302 Compare $VERSION_SHORT wether we need to push the image 2019-05-16 20:04:24 +02:00
Sandro Jäckel
0173eab54c Quote factorio volume variable 2019-05-16 19:59:42 +02:00
Sandro Jäckel
f868aa16ad Follow up to #255 2019-05-16 19:55:43 +02:00
Osiris
5cd0c40975 fix for .tmp.zip saves not being deleted on start (#255)
Co-Authored-By: Chris Cowan <agentme49@gmail.com>
2019-05-16 19:55:02 +02:00
Sandro Jäckel
778d982c6d CI: Actually check the entire array 2019-05-16 19:43:44 +02:00
Sandro Jäckel
9d2c38df65 CI: Fix version detection of which image to push, actually push the image 2019-05-16 19:39:50 +02:00
Sandro Jäckel
b2a4195e13 Advance CI features (#245)
* Build feature branches with branch tag

* Build short and long image tag

* Add latest and stable tag, made moving repos easier

* Only push tags to registry

* Only build tags that where changed

* Fix if and quoting, push $VERSION_SHORT

* Update MicroBadger with Webhook, closes #251

* Quote vars

* Set tag on PR, too

* Switch to hadolint docker image

due to PR not having enviroment variables and I don't want to commit my token in the script

* Only push image on master
2019-05-16 19:23:07 +02:00
Florian Kinder
18ccac666d update to 0.17.40 2019-05-16 15:59:12 +00:00
Sandro Jäckel
830d042e4b Add me (SuperSandro2000) to the Contributors list 2019-05-15 20:05:36 +02:00
florian kinder
a0868ba653 Added build status & latest dockerhub version 2019-05-15 13:26:00 +02:00
florian kinder
7002778ab5 Updated urls 2019-05-15 13:07:30 +02:00
Florian Kinder
44371283b6 update to 0.17.39 2019-05-14 15:49:11 +00:00
Florian Kinder
d421adab67 update to 0.17.38 2019-05-10 14:39:11 +00:00
Osiris
b0cedbbe1b Update docker-entrypoint.sh (#253) 2019-05-10 01:27:25 +02:00
Florian Kinder
010b96e0b0 update to 0.17.37 2019-05-07 16:29:12 +00:00
Sandro Jäckel
621ccf4282 Fixed naming of $SCENARIOS (#242)
Fixed naming of `$SCENARIOS`
2019-05-04 16:18:06 +02:00
Florian Kinder
1204b97fca update to 0.17.36 2019-05-03 16:29:13 +00:00
Brandon Houghton
aef16e83a7 Fixed naming of $SCENARIOS
Renamed local variable `$SCENARIO` to `$SERVER_SCENARIO`
2019-05-02 12:07:38 -04:00
Florian Kinder
605ca74c0e Add travis ci, linter, merge shellcheck, fix some issues (#241)
* Quote all vars, remove useless echo/sub-shell, add shebands, fail on unset vars, enable pipefail, formatting

* Add CI including linting via hadolint nad shellcheck

* Update all base images to tag 3.9

* Switch to maintainer labels

* Quote vars

* Remove commented code

* Ignore if the folder exists
2019-05-02 17:28:20 +02:00
Florian Kinder
e34180ca51 update to 0.17.35 2019-05-02 14:34:11 +00:00
florian kinder
0db1dde077 Updated readme with new dockerhub links & updated version to 0.17 2019-05-02 13:10:51 +02:00
Dan Anstis
e8aeb461a9 Quote all vars, remove useless echo/sub-shell, add shebands, formatting (#226) 2019-05-02 14:53:26 +10:00
Sandro Jäckel
46f24b0b7a Quote all vars, remove useless echo/sub-shell, add shebands, fail on unset vars, enable pipefail, formatting 2019-05-01 10:04:56 +02:00
Dan Anstis
6d92825f56 Add AWS deployment repo Link (#235) 2019-04-29 08:23:24 +10:00
Dan Anstis
55fdc2e0de Remove reference to 0.13 path, fix spelling issues (#238) 2019-04-28 12:07:29 +02:00
Michael Chandler
57c9f59f46 Add AWS deployment repo Link. 2019-04-28 11:05:44 +10:00
Florian Kinder
8f15b73d7b update to 0.17.34 2019-04-26 15:04:11 +00:00
Florian Kinder
ecc54400ba update to 0.17.33 2019-04-24 17:19:11 +00:00
Dan Anstis
eea1d550f2 Fix conflicting user group ids (#232) 2019-04-21 12:15:01 +02:00
Florian Kinder
730b2c334b update to 0.17.32 2019-04-18 11:29:11 +00:00
Dan Anstis
288f080ebc Add support for changing UID/GID (#216)
* Add support for changing UID/GID

* Revert volume definition in docker-compose file
2019-04-18 13:00:14 +02:00
Florian Kinder
2ffac3c4a8 update to 0.17.31 2019-04-12 22:14:12 +00:00
Florian Kinder
88fed15bb4 update to 0.17.30 2019-04-12 17:09:11 +00:00
Florian Kinder
968fb8a3bd update to 0.17.29 2019-04-12 12:29:11 +00:00
Florian Kinder
9d642d8fb0 update to 0.17.28 2019-04-09 19:14:11 +00:00
Florian Kinder
4c3818b27c update to 0.17.26 2019-04-08 18:34:12 +00:00
Florian Kinder
a6d480d695 update to 0.17.25 2019-04-04 19:04:12 +00:00
Florian Kinder
fce556160a update to 0.17.24 2019-04-02 17:39:13 +00:00
Florian Kinder
4727f62a8f update to 0.17.23 2019-03-29 16:58:35 +00:00
Florian Kinder
64cbf48082 update to 0.17.22 2019-03-29 12:43:35 +00:00
Florian Kinder
dd6bc76827 update to 0.17.21 2019-03-26 20:48:35 +00:00
Florian Kinder
b7108c64cb update to 0.17.20 2019-03-26 16:53:35 +00:00
Florian Kinder
2f53d7e03c update to 0.17.19 2019-03-26 14:58:35 +00:00
Florian Kinder
f97eee5f83 update to 0.17.18 2019-03-25 18:28:35 +00:00
Florian Kinder
0e1808c3f5 update to 0.17.17 2019-03-21 19:53:34 +00:00
David Andersen
629a3fade3 removed 0.13 2019-03-20 10:20:44 -07:00
Florian Kinder
3f88bcbf52 update to 0.17.16 2019-03-19 21:53:35 +00:00
Florian Kinder
fb36aaa0d9 update to 0.17.15 2019-03-18 20:33:35 +00:00
Florian Kinder
e22ce8989b update to 0.17.14 2019-03-15 20:23:35 +00:00
Florian Kinder
29f3e54adf Merge pull request #220 from MagicHack/master
Update to 0.17.13
2019-03-15 20:01:54 +01:00
Émile Larose-Levac
148de89c52 Update to 0.17.13 2019-03-15 14:51:21 -04:00
David Andersen
4fc8da6581 Merge pull request #217 from MagicHack/master
Update to 0.17.12
2019-03-15 07:33:29 -07:00
Émile Larose-Levac
e6290605c7 Update to 0.17.12 2019-03-14 16:45:22 -04:00
Florian Kinder
662372a1ba Update to 0.17.11 2019-03-11 23:24:16 +01:00
Florian Kinder
82f6bdf865 Merge pull request #212 from psykzz/patch-3
Update to 0.17.11
2019-03-11 23:23:44 +01:00
Matt Smith
c9f4510195 Update to 0.17.11 2019-03-11 22:04:24 +00:00
Florian Kinder
6602c7cf7f Merge pull request #210 from notgne2/patch-1
Bump the Factorio version number in Dockerfile
2019-03-11 20:18:01 +01:00
installgen2
8be7b47c07 Bump the Factorio version number in Dockerfile 2019-03-11 18:55:35 +00:00
Florian Kinder
717275198e Merge pull request #209 from pascaldulieu/master
0.17.10
2019-03-11 19:20:26 +01:00
Pascal
d68ec4fdd4 Update README.md 2019-03-11 17:39:19 +00:00
Pascal
47464e0b9b Update Dockerfile 2019-03-11 17:39:07 +00:00
Pascal
23fdd4ed09 Update Dockerfile 2019-03-11 17:37:42 +00:00
David Andersen
e7a6bddc1f Merge pull request #207 from pascaldulieu/master
0.17.9
2019-03-08 11:49:10 -08:00
Pascal
3d9e2999b6 Update README.md 2019-03-08 18:34:38 +00:00
Pascal
7b33b9f6e8 Update Dockerfile 2019-03-08 18:33:28 +00:00
David Andersen
066c61fb85 Merge pull request #206 from pascaldulieu/master
0.17.8
2019-03-07 09:31:16 -08:00
David Andersen
303fbb5d97 Merge branch 'master' into master 2019-03-07 09:30:50 -08:00
David Andersen
3f4fd9e348 0.17.7 2019-03-07 09:18:40 -08:00
Pascal
504ebfde23 Update README.md 2019-03-07 17:03:36 +00:00
Pascal
f982370229 Update Dockerfile 2019-03-07 17:02:52 +00:00
David Andersen
51d3845af7 Merge pull request #202 from DeliciousJaffa/master
0.17.6
2019-03-05 11:02:59 -08:00
Jaffa
889c10bd48 0.17.6 2019-03-05 18:07:20 +00:00
Jaffa
46f397a9bb Update dockerfile for 0.17.6 2019-03-05 18:06:18 +00:00
David Andersen
988aa08a73 Merge pull request #200 from DBendit/stop-deleting-mapgen
Stop wiping out mapgen settings
2019-03-05 09:48:36 -08:00
David Andersen
ff6f4b6cd0 Merge pull request #201 from deveth0/master
#197: Enable envsubst
2019-03-05 09:48:06 -08:00
Alex Muthmann
ea426ca0f4 Update README.md 2019-03-05 14:05:49 +01:00
Alex Muthmann
4ecb1dcb6b Update README.md 2019-03-05 13:08:21 +01:00
deveth0
3ef8c5309e #197: Enable envsubst - README 2019-03-05 13:05:27 +01:00
root
70c402b9dd #197: Enable envsubst 2019-03-05 12:47:23 +01:00
Dave Bendit
2b434ff08f Stop wiping out mapgen settings 2019-03-04 23:49:33 -06:00
David Andersen
49c5dff898 Merge pull request #199 from DBendit/fix-duplicate-banlist
Removing duplicate banlist line
2019-03-04 13:18:56 -08:00
Dave Bendit
35d22efc67 Removing duplicate banlist line 2019-03-04 15:14:59 -06:00
David Andersen
f1b75ac034 added contributor 2019-03-04 11:00:12 -08:00
David Andersen
fbb550916c Merge pull request #198 from DBendit/0.17.5
0.17.5
2019-03-04 10:53:26 -08:00
Dave Bendit
1d8be250e9 0.17.5 2019-03-04 12:47:39 -06:00
David Andersen
d90f45bd41 Merge pull request #195 from DBendit/0.17.4
0.17.4
2019-03-01 11:41:12 -08:00
Dave Bendit
2b201fea5b 0.17.4 2019-03-01 13:06:08 -06:00
David Andersen
b0a64e5939 minor text changes 2019-03-01 08:43:50 -08:00
David Andersen
ef24dad0bf Merge pull request #194 from DBendit/readme
Reorganizing volume listing to include map-settings and proper ordering
2019-02-28 14:01:13 -08:00
Dave Bendit
69a52f2c19 Reorganizing volume listing to include map-settings and proper ordering 2019-02-28 13:45:51 -06:00
David Andersen
902ad53bd3 Merge pull request #193 from DBendit/0.17.3
0.17.3
2019-02-28 11:36:06 -08:00
Dave Bendit
bd2af80a52 0.17.3 2019-02-28 13:26:18 -06:00
David Andersen
de9fb52d48 minor text changes 2019-02-28 09:35:29 -08:00
David Andersen
c0157e19ee added binutils 2019-02-28 17:33:30 +00:00
David Andersen
8e7bca222a generate map as factorio user 2019-02-27 19:45:13 +00:00
David Andersen
3e7c79ab74 update readme 2019-02-27 11:11:36 -08:00
David Andersen
979326ebf6 Merge pull request #189 from DBendit/fix-mapgen
Mapgen example fixed in 0.17.2
2019-02-27 11:10:11 -08:00
David Andersen
d5ac333364 make sure /opt/factorio/temp exists 2019-02-27 19:09:35 +00:00
Dave Bendit
e941e9a2c8 Mapgen example fixed in 0.17.2 2019-02-27 13:06:47 -06:00
David Andersen
6fece0c9e3 Merge pull request #188 from DBendit/0.17.2
0.17.2
2019-02-27 10:27:22 -08:00
David Andersen
10d000408c take ownership of /opt/factorio/temp 2019-02-27 18:25:54 +00:00
Dave Bendit
d59fd0844a 0.17.2 2019-02-27 12:23:11 -06:00
David Andersen
324920cdf8 don't run su-exec if container starts as non-root 2019-02-27 16:30:46 +00:00
David Andersen
2c88f5e982 Merge pull request #185 from DBendit/master
Adding support for 0.17's new banlist and adminlist options
2019-02-26 20:02:24 -08:00
Dave Bendit
26cec3ae93 Adding banlist support 2019-02-26 19:30:47 -06:00
Dave Bendit
7897de5080 Adding support for adminlist 2019-02-26 19:26:59 -06:00
David Andersen
b474afc1b7 tag description update 2019-02-26 14:51:16 -08:00
David Andersen
795ec7dc55 0.17.1 2019-02-26 14:34:54 -08:00
David Andersen
03f171e34c updated tag descriptions 2019-02-26 14:32:32 -08:00
David Andersen
313faf6fa5 0.17 tags 2019-02-26 14:19:35 -08:00
David Andersen
17109c97c1 removed unused USER directive 2019-02-26 14:18:43 -08:00
David Andersen
e62f5e799a updated docker tag for 0.17 2019-02-26 14:08:37 -08:00
David Andersen
47a7b8312f Merge pull request #183 from notgne2/master
workaround 0.17 issues (fix #181 and #182)
2019-02-26 13:26:44 -08:00
installgen2
3cdf39d04b Merge branch '0.17-debug' into master 2019-02-26 21:19:14 +00:00
David Andersen
b840e86d21 use su-exec instead of gosu; don't use example map settings 2019-02-26 21:13:05 +00:00
installgen2
a9047cae58 workaround 0.17 issues 2019-02-26 14:12:51 -07:00
David Andersen
bf128afdb4 debugging branch 2019-02-26 19:55:45 +00:00
David Andersen
f5ffae1cb4 make scripts executable 2019-02-26 19:44:26 +00:00
David Andersen
31b6768882 updated sha1 for 0.17.0 2019-02-26 19:24:59 +00:00
David Andersen
41eca9edf6 correct case on Dockerfile 2019-02-26 19:22:53 +00:00
David Andersen
86169c9dad add files to 0.17 2019-02-26 11:11:21 -08:00
David Andersen
f36e58058b update sha1 for 0.17.0 2019-02-26 11:09:08 -08:00
David Andersen
1a12761739 Merge pull request #178 from nexusmaniac/patch-1
Create 0.17 dockerfile
2019-02-26 11:03:14 -08:00
nexusmaniac
7f43739481 Create 0.17 dockerfile
Updated to Alpine 3.9 & added preliminary support for the 0.17 headless binary (once released) 💥
2019-02-26 17:31:14 +00:00
Florian Kinder
33e33a4db7 update to 0.16.51 2018-06-15 12:42:59 +00:00
Florian Kinder
2d54d50951 update to 0.16.50 2018-06-11 15:32:59 +00:00
Florian Kinder
86c8270d99 update to 0.16.49 2018-06-08 11:52:59 +00:00
Florian Kinder
5109bc1b40 update to 0.16.48 2018-06-07 17:33:00 +00:00
Florian Kinder
5e36f8bad8 update to 0.16.47 2018-05-31 07:47:59 +00:00
Florian Kinder
d1258008c1 Added catch all to allow custom options for factorio (#169) 2018-05-30 20:37:46 +02:00
Florian Kinder
275faa1fcc update to 0.16.46 2018-05-29 14:03:01 +00:00
Florian Kinder
87cf6c051a Fixed wrong checksum 2018-05-23 09:41:09 +02:00
Florian Kinder
3d8cdfcc1d update to 0.16.45 2018-05-22 20:07:47 +00:00
Florian Kinder
d3ef74b10d update to 0.16.43 (#162) 2018-05-16 18:03:52 +02:00
Florian Kinder
b41aad4dc6 update to 0.16.42 (#161) 2018-05-11 18:48:47 +02:00
David Andersen
24ac45dbce Merge pull request #157 from afex/master
Expose script-output to mounted volume
2018-05-04 12:19:56 -07:00
Florian Kinder
8286ab58ac update to 0.16.41 (#159) 2018-05-03 21:22:40 +02:00
Florian Kinder
c2d8509aa8 update to 0.16.40 (#158) 2018-05-03 00:53:14 +02:00
keith
b94db83033 setup script-output directory 2018-05-02 12:45:11 -07:00
keith
cc23bb396e expose script-output to volume 2018-05-02 12:44:34 -07:00
Florian Kinder
1b2fdb298f update to 0.16.39 (#156) 2018-04-30 20:00:30 +02:00
David Andersen
ab277975ae Merge pull request #153 from dtandersen/update-0.16.38
Updated to version 0.16.38
2018-04-26 11:45:23 -07:00
Florian Kinder
80d8866242 update to 0.16.38 2018-04-26 15:24:39 +00:00
David Andersen
4ec18b2d15 Merge pull request #152 from dtandersen/update-0.16.37
Updated to version 0.16.37
2018-04-23 10:57:13 -07:00
Florian Kinder
93a3011cd3 update to 0.16.37 2018-04-23 17:44:49 +00:00
David Andersen
15cacdc3da 0.16 is stable 2018-03-29 09:44:34 -07:00
David Andersen
927bcb89a0 Merge pull request #150 from dtandersen/update-0.16.36
Updated to version 0.16.36
2018-03-28 09:40:26 -07:00
Florian Kinder
4ceff25fc2 update to 0.16.36 2018-03-28 12:54:40 +00:00
Florian Kinder
5d072db9cc update to 0.16.35 (#149) 2018-03-24 14:37:57 +01:00
Florian Kinder
216b225681 update to 0.16.34 (#148) 2018-03-23 13:42:54 +01:00
David Andersen
18f3943eaf Merge pull request #146 from dtandersen/update-0.16.33
Updated to version 0.16.33
2018-03-22 10:24:01 -07:00
Florian Kinder
2725534b2b update to 0.16.33 2018-03-22 17:04:41 +00:00
David Andersen
df35d57455 Merge pull request #145 from dtandersen/update-0.16.32
Updated to version 0.16.32
2018-03-20 08:20:37 -07:00
Florian Kinder
9adc8ce4bc update to 0.16.32 2018-03-20 12:54:39 +00:00
Florian Kinder
6272bb0018 update to 0.16.31 (#144) 2018-03-19 20:37:39 +01:00
David Andersen
a989b500b0 moved entrypoints to files directory 2018-03-19 17:28:40 +00:00
David Andersen
66bef56cd2 moved entry points to /; dont put hard link in place of entrypoint folder 2018-03-19 16:58:53 +00:00
David Andersen
10f891cabf don't need to create these 2018-03-14 13:16:23 -07:00
David Andersen
9a7f01f8bf Merge pull request #142 from yukienterprises/temp-save-removal
Remove temp (invalid) saves on container start
2018-03-14 07:56:50 -07:00
Yuki Hyou
877219f9c9 Remove temp (invalid) saves on container start 2018-03-14 23:13:43 +11:00
Florian Kinder
843bcbff21 update to 0.16.30 (#140) 2018-03-12 23:35:36 +01:00
David Andersen
a7786f03ed updated maintainers 2018-03-12 10:33:05 -07:00
David Andersen
754663df49 Merge pull request #139 from dtandersen/scenario2
Scenario tweaks
2018-03-12 10:00:12 -07:00
David Andersen
9ac04bcff8 moved env to Dockerfile so they can be shared 2018-03-12 16:54:17 +00:00
David Andersen
66d4652302 moved volume creation back as per PR#101; create symlink once 2018-03-12 09:38:40 -07:00
David Andersen
5ddb9ab472 Merge pull request #115 from bplein/master
Add Scenarios Folder, Alternate Entrypoints Folder
2018-03-12 09:29:15 -07:00
David Andersen
9e72f0509a Merge pull request #138 from dtandersen/update-0.16.29
Updated to version 0.16.29
2018-03-12 09:22:49 -07:00
Florian Kinder
914b12adf4 update to 0.16.29 2018-03-12 16:15:23 +00:00
Bill
dc3c040d7c another symlink bug 2018-03-10 17:17:16 -06:00
Bill
6a9a596cd8 fix syntax on symlink 2018-03-10 17:11:47 -06:00
Bill
eb22dac840 force symlinks 2018-03-10 17:08:09 -06:00
Bill
b48bb4c134 Merge branch 'master' of https://github.com/dtandersen/docker_factorio_server 2018-03-09 14:45:36 -06:00
David Andersen
cf5af1aae1 Merge pull request #137 from dtandersen/update-0.16.28
Updated to version 0.16.28
2018-03-05 12:25:24 -08:00
Florian Kinder
d7f0fe16d7 update to 0.16.28 2018-03-05 18:09:43 +00:00
Bill
27c1426109 Merged in dtandersen/factorio changes 2018-03-02 15:40:08 -06:00
Bill
a86ac6cafe Merge remote-tracking branch 'upstream/master'
Updating to catch up with upstream
2018-03-02 15:36:31 -06:00
Florian Kinder
70e08f10f3 update to 0.16.27 (#136) 2018-02-28 19:40:35 +01:00
Florian Kinder
c28cea29a4 update to 0.16.26 (#135) 2018-02-26 17:30:23 +01:00
David Andersen
e21fc20eb2 Merge pull request #134 from dtandersen/update-0.16.25
Updated to version 0.16.25
2018-02-20 08:14:38 -08:00
Florian Kinder
c75b7fa830 update to 0.16.25 2018-02-19 20:59:40 +00:00
David Andersen
387383d3e8 Merge pull request #129 from psykzz/patch-3
Fix adduser
2018-02-15 11:45:02 -08:00
Florian Kinder
c6c94ee180 update to 0.16.24 (#131) 2018-02-15 18:19:26 +01:00
Florian Kinder
b2908081b4 update to 0.16.23 (#130) 2018-02-12 12:41:55 +01:00
Matt Smith
e53c2adc54 Fix adduser 2018-02-03 21:15:07 +00:00
David Andersen
d6da776148 Merge pull request #128 from dtandersen/update-0.16.22
Updated to version 0.16.22
2018-02-02 06:57:23 -08:00
Florian Kinder
30e5f6dd2d update to 0.16.22 2018-02-02 09:08:50 +00:00
Florian Kinder
b69fe57291 update to 0.16.21 (#126) 2018-02-01 16:50:20 +01:00
David Andersen
b99c1044ca Merge pull request #123 from dtandersen/update-0.16.20
Updated to version 0.16.20
2018-01-26 14:47:14 -08:00
Florian Kinder
b37af9bf93 update to 0.16.20 2018-01-26 21:43:48 +00:00
David Andersen
185ee256ff Merge pull request #122 from dtandersen/update-0.16.19
Updated to version 0.16.19
2018-01-25 14:29:24 -08:00
Florian Kinder
6020015574 update to 0.16.19 2018-01-25 19:53:49 +00:00
Florian Kinder
a520b87fc8 update to 0.16.18 (#121) 2018-01-23 13:05:56 +01:00
David Andersen
e3abfbbe9b Merge pull request #118 from dtandersen/update-0.16.17
Updated to version 0.16.17
2018-01-22 12:54:07 -08:00
Florian Kinder
6a135a06bc update to 0.16.17 2018-01-22 20:23:49 +00:00
Bill
14fb9ecf35 Typo in Dockerfile 2018-01-16 18:24:35 -06:00
Bill
ffef5899e9 Updated Dockerfile to copy in example entrypoints 2018-01-16 18:03:13 -06:00
Bill
4449e13675 Added creation and symlinking of scenarios directory, creation and symlinking of an entrypoints directory for custom entrypoints, and two examples of using entrypoints with scenarios 2018-01-16 17:59:28 -06:00
David Andersen
189395d5c8 Merge pull request #112 from dtandersen/update-0.16.16
Updated to version 0.16.16
2018-01-10 09:15:09 -08:00
Florian Kinder
4c1ea766f4 update to 0.16.16 2018-01-10 16:48:33 +00:00
David Andersen
9ce9a63cfc alpine 3.7 2018-01-09 14:59:21 -08:00
David Andersen
8d16422fcb Merge pull request #110 from dtandersen/update-0.16.15
Updated to version 0.16.15
2018-01-05 13:48:40 -08:00
Florian Kinder
628c7a34aa update to 0.16.15 2018-01-05 20:28:30 +00:00
David Andersen
eafc933ca5 Merge pull request #109 from dtandersen/update-0.16.14
Updated to version 0.16.14
2018-01-04 14:48:22 -08:00
Florian Kinder
0175ddbca9 update to 0.16.14 2018-01-04 21:08:30 +00:00
David Andersen
d994449808 Merge pull request #108 from dtandersen/update-0.16.13
Updated to version 0.16.13
2018-01-03 14:46:07 -08:00
Florian Kinder
4e63b2654e update to 0.16.13 2018-01-03 21:53:30 +00:00
David Andersen
abe6054b27 Merge pull request #107 from dtandersen/update-0.16.12
Updated to version 0.16.12
2017-12-31 09:29:11 -08:00
Florian Kinder
4fc35c3cdb update to 0.16.12 2017-12-31 12:18:31 +00:00
David Andersen
081b0c244f vagrant 2017-12-30 23:22:09 -08:00
David Andersen
a331033196 updated lan game docs 2017-12-30 21:07:06 -08:00
David Andersen
1e3d6d7886 docker compose instructions 2017-12-30 20:40:58 -08:00
David Andersen
2474da335e minor text changes 2017-12-30 20:34:18 -08:00
David Andersen
648b81edf8 Merge pull request #101 from smessmer/patch-1
Fix volume permissions for docker-compose
2017-12-30 20:26:08 -08:00
David Andersen
25326b9073 0.16 not 1.16 2017-12-30 19:16:44 -08:00
David Andersen
cae2d3b226 Merge pull request #99 from jmerdich/patch-1
Document the required permissions change in 1.16+
2017-12-30 19:15:52 -08:00
David Andersen
e13768aa12 updated ports 2017-12-30 19:14:32 -08:00
David Andersen
78f00b9f17 changed paths to /opt/factorio instead of /tmp/factorio 2017-12-30 19:12:15 -08:00
David Andersen
aedc8a29a4 0.16.11 2017-12-30 17:08:50 -08:00
David Andersen
7168f2927c 0.16.10 2017-12-30 17:05:46 -08:00
David Andersen
7b19c3bfa5 Merge pull request #103 from dtandersen/update-0.16.9
Updated to version 0.16.9
2017-12-30 16:53:06 -08:00
David Andersen
bffa336cb2 Merge branch 'master' into update-0.16.9 2017-12-30 16:52:57 -08:00
David Andersen
06a76e4156 Merge pull request #102 from dtandersen/update-0.16.8
Updated to version 0.16.8
2017-12-30 16:49:56 -08:00
David Andersen
107b902191 Merge branch 'master' into update-0.16.8 2017-12-30 16:49:21 -08:00
Florian Kinder
9e4888fe8a Merge pull request #105 from dtandersen/update-0.16.11
Updated to version 0.16.11
2017-12-31 00:36:09 +01:00
Florian Kinder
aa5e51680f Merge branch 'master' into update-0.16.11 2017-12-31 00:35:51 +01:00
Florian Kinder
590adff3a0 Merge pull request #104 from dtandersen/update-0.16.10
Updated to version 0.16.10
2017-12-30 23:34:29 +01:00
Florian Kinder
c60794de39 update to 0.16.11 2017-12-30 20:08:29 +00:00
Florian Kinder
a871fe689d update to 0.16.10 2017-12-30 10:23:29 +00:00
Florian Kinder
739ed46afe update to 0.16.9 2017-12-29 21:43:33 +00:00
Florian Kinder
dfa067e2e9 update to 0.16.8 2017-12-29 18:28:32 +00:00
Sebastian Meßmer
7113c03076 Fix volume permissions for docker-compose
When using named containers in docker compose, it creates them with root and the factorio docker container fails to start because it doesn't have write permissions. Reproduce by using the following docker-compose file:

    version: '3.2'
    services:
      server:
        image: dtandersen/factorio:0.16.7
        volumes:
        - logs:/var/log
        - data:/factorio
        ports:
        - "34197:34197/udp"
        - "27015:27015/tcp"
    volumes:
      logs:
      data:

With this proposed change, the /factorio folder is created *before* it is made a volume. This causes docker to correctly preserve the permissions, the docker-compose file above works now.

This is related to https://github.com/dtandersen/docker_factorio_server/issues/91 and maybe also makes https://github.com/dtandersen/docker_factorio_server/pull/99 obsolete.
2017-12-28 12:37:23 +00:00
Jake Merdich
2095404c2a Document the required permissions change in 1.16+
Make sure users of 1.16 don't get stopped by weird permissions errors created by #91 because factorio is no longer run as root in the container.
2017-12-21 17:54:38 -07:00
David Andersen
dff6b849f8 Merge pull request #98 from dtandersen/update-0.16.7
Updated to version 0.16.7
2017-12-21 11:49:45 -08:00
Florian Kinder
5c616483f6 update to 0.16.7 2017-12-21 19:03:29 +00:00
Florian Kinder
856066ccf1 Merge pull request #96 from dtandersen/update-0.16.6
Updated to version 0.16.6
2017-12-18 20:14:24 +01:00
Florian Kinder
ce039016e0 update to 0.16.6 2017-12-18 18:48:30 +00:00
David Andersen
6f20f17472 Merge pull request #95 from dtandersen/update-0.16.5
Updated to version 0.16.5
2017-12-17 15:39:05 -08:00
Florian Kinder
44a28d5c70 update to 0.16.5 2017-12-17 20:03:30 +00:00
David Andersen
f9b2d6bb9f Merge pull request #94 from dtandersen/update-0.16.4
Updated to version 0.16.4
2017-12-16 10:09:56 -08:00
Florian Kinder
bb06a73144 update to 0.16.4 2017-12-16 11:58:29 +00:00
Florian Kinder
3eed964b32 Merge pull request #93 from dtandersen/update-0.16.3
Updated to version 0.16.3
2017-12-16 03:42:23 +01:00
Florian Kinder
0eb64bc190 update to 0.16.3 2017-12-15 15:08:32 +00:00
David Andersen
9834ca2842 don't need to make all of /opt/factorio writeable 2017-12-14 15:16:25 +00:00
David Andersen
6b2307635e give up on scenario entry point 2017-12-14 07:13:45 -08:00
David Andersen
6f4f179276 no need to set user 2017-12-14 07:10:27 -08:00
David Andersen
ebd6da4b97 Merge pull request #92 from dtandersen/update-0.16.2
Updated to version 0.16.2
2017-12-14 06:47:36 -08:00
Florian Kinder
8ee7c360c5 update to 0.16.2 2017-12-14 12:18:31 +00:00
David Andersen
5f7f1f145c 0.16.1 2017-12-13 13:19:19 -08:00
David Andersen
6b58cb1909 0.16.1 2017-12-13 21:17:41 +00:00
David Andersen
d6d039d4a6 0.15.40 is stable 2017-12-13 10:59:16 -08:00
David Andersen
02d2c449d3 add 0.16 to readme 2017-12-13 10:53:22 -08:00
David Andersen
8091c3a9f9 0.16.0 2017-12-13 18:43:01 +00:00
David Andersen
cb5bc74e4b run as factorio user 2017-12-13 18:33:51 +00:00
David Andersen
1ce5c5db7e added 0.16 2017-12-13 08:54:30 -08:00
David Andersen
e2e7cc7798 remove chmod +x because file is already executable 2017-12-12 10:14:49 -08:00
David Andersen
487d345480 Merge pull request #89 from luliu/patch-1
Allowing non-root user to run factorio
2017-12-12 10:14:03 -08:00
rullie
7a276adb3c Allowing non-root user to run factorio
When starting the container with `docker run -d -u $(id -u factorio):$(id -g factorio) ...`, permission is denied upon trying to create `/opt/factorio/.lock` file.
This permission tweak will allow caller to pass desired user from host to container such that the permissions are retained correctly when games are saved to the mount.

Also, it just feels wrong to run factorio as root, container or not.  :)
2017-12-06 15:46:45 -05:00
David Andersen
7a5f3471d6 Merge pull request #86 from tsuckow/fix-permissions
Fix permissions in #85
2017-11-29 20:28:34 -08:00
Thomas Suckow
eac273e2d6 Fix permissions in #85 2017-11-29 23:05:43 -05:00
David Andersen
768eaac7b2 Update README.md
0.15.37 is still stable
2017-11-29 14:44:06 -08:00
David Andersen
67a0420f06 Merge pull request #80 from schmic/master
Allow to define RCON port as well
2017-11-29 14:39:21 -08:00
David Andersen
b2248d1e8c Merge branch 'master' into master 2017-11-29 14:38:50 -08:00
David Andersen
60a124f22c Merge branch 'master' into master 2017-11-29 14:38:08 -08:00
David Andersen
76ee77b674 Merge pull request #84 from dtandersen/update-0.15.40
Updated to version 0.15.40
2017-11-29 14:33:46 -08:00
Florian Kinder
a6f0b66f9b update to 0.15.40 2017-11-29 21:48:31 +00:00
David Andersen
596eec12b6 Merge pull request #83 from dtandersen/update-0.15.39
Updated to version 0.15.39
2017-11-27 14:09:54 -08:00
David Andersen
e30e313a55 Merge branch 'master' into update-0.15.39 2017-11-27 14:09:28 -08:00
David Andersen
9528901b95 Merge pull request #81 from dtandersen/update-0.15.38
Updated to version 0.15.38
2017-11-27 14:07:22 -08:00
Florian Kinder
16c0f35c97 update to 0.15.39 2017-11-27 19:53:35 +00:00
Florian Kinder
623cd6ac87 update to 0.15.38 2017-11-24 12:23:33 +00:00
Michael Scherer
ca3a66ca2f Allow to define RCON port as well 2017-11-12 13:49:58 +01:00
David Andersen
bc74c61fc0 Merge pull request #77 from dtandersen/update-0.15.37
Updated to version 0.15.37
2017-10-17 08:31:30 -07:00
Florian Kinder
893124cf43 update to 0.15.37 2017-10-17 14:26:02 +00:00
David Andersen
92130e3b34 Merge pull request #76 from dtandersen/update-0.15.36
Updated to version 0.15.36
2017-10-10 09:43:46 -07:00
Florian Kinder
1194fde627 update to 0.15.36 2017-10-10 15:26:00 +00:00
Florian Kinder
6ae4c0d569 Merge pull request #74 from dtandersen/update-0.15.35
Updated to version 0.15.35
2017-09-30 15:54:39 +02:00
Florian Kinder
11d8626ccd update to 0.15.35 2017-09-28 13:35:50 +00:00
David Andersen
d1d5e405cb Update README.md 2017-08-23 12:11:54 -07:00
David Andersen
1c1e374346 Merge pull request #72 from dtandersen/update-0.15.34
Updated to version 0.15.34
2017-08-23 12:10:42 -07:00
Florian Kinder
046a632860 update to 0.15.34 2017-08-23 12:57:11 +00:00
David Andersen
d80ae622fd Update README.md 2017-08-09 10:52:10 -07:00
David Andersen
07786290c4 Merge pull request #69 from dtandersen/update-0.15.33
Updated to version 0.15.33
2017-08-09 10:07:41 -07:00
Florian Kinder
1e5f88ffd9 update to 0.15.33 2017-08-09 16:12:14 +00:00
David Andersen
672101f0f7 0.15.31 is still stable 2017-08-02 09:34:10 -07:00
David Andersen
7b9d0f514e Merge pull request #67 from dtandersen/update-0.15.32
Updated to version 0.15.32
2017-08-02 09:30:12 -07:00
Florian Kinder
7e40c62ff6 update to 0.15.32 2017-08-02 11:57:11 +00:00
David Andersen
37fbaa38cf 0.15.31 is stable 2017-07-26 16:37:13 -07:00
David Andersen
b52a39fe03 Merge pull request #65 from dtandersen/update-0.15.31
Updated to version 0.15.31
2017-07-25 12:11:07 -07:00
Florian Kinder
4528be2297 update to 0.15.31 2017-07-25 17:07:12 +00:00
David Andersen
36bb311baa Merge pull request #64 from dtandersen/update-0.15.30
Updated to version 0.15.30
2017-07-14 18:21:30 +01:00
Florian Kinder
78289a5930 update to 0.15.30 2017-07-14 16:27:19 +00:00
David Andersen
250d5e464d Merge pull request #63 from dtandersen/update-0.15.29
Updated to version 0.15.29
2017-07-13 21:11:42 +01:00
Florian Kinder
70e61be5b6 update to 0.15.29 2017-07-13 19:42:12 +00:00
David Andersen
e935200821 Merge pull request #62 from dtandersen/update-0.15.28
Updated to version 0.15.28
2017-07-06 10:32:07 -07:00
Florian Kinder
add31ebe53 update to 0.15.28 2017-07-06 16:42:10 +00:00
David Andersen
8e20e6696b Merge pull request #61 from dtandersen/update-0.15.27
Updated to version 0.15.27
2017-07-03 11:01:28 -07:00
Florian Kinder
126669ca7a update to 0.15.27 2017-07-03 17:17:11 +00:00
Florian Kinder
67aaa41cd8 Merge pull request #59 from dtandersen/update-0.15.26
Updated to version 0.15.26
2017-07-01 08:32:40 +02:00
Florian Kinder
a61f05709e update to 0.15.26 2017-06-30 19:42:11 +00:00
David Andersen
0b5c4e144a Merge pull request #58 from dtandersen/update-0.15.25
Updated to version 0.15.25
2017-06-29 10:42:35 -07:00
Florian Kinder
95c45b7a39 update to 0.15.25 2017-06-29 17:22:13 +00:00
David Andersen
5dbb82debe Merge pull request #57 from dtandersen/update-0.15.24
Updated to version 0.15.24
2017-06-29 09:59:41 -07:00
Florian Kinder
d85de90142 update to 0.15.24 2017-06-29 10:27:12 +00:00
David Andersen
216ab0a7d5 Merge pull request #54 from dtandersen/update-0.15.23
Updated to version 0.15.23
2017-06-22 10:45:04 -07:00
Florian Kinder
e9c698cbc8 update to 0.15.23 2017-06-22 16:47:12 +00:00
Florian Kinder
8d0eef4e2c Merge pull request #52 from dtandersen/update-0.15.22
Updated to version 0.15.22
2017-06-22 14:10:48 +02:00
Florian Kinder
110a598ca8 update to 0.15.22 2017-06-21 16:37:12 +00:00
David Andersen
2f0ce132f2 Merge pull request #50 from dtandersen/update-0.15.21
Updated to version 0.15.21
2017-06-15 09:14:28 -07:00
Florian Kinder
96eff95f47 update to 0.15.21 2017-06-15 10:27:11 +00:00
David Andersen
6c5282b855 Merge pull request #48 from dtandersen/update-0.15.20
Updated to version 0.15.20
2017-06-14 10:16:50 -07:00
Florian Kinder
d195fdcdfc update to 0.15.20 2017-06-14 16:07:12 +00:00
David Andersen
d9a5fac17c Merge pull request #43 from Entroper/map-settings
Add map-settings.json config file
2017-06-08 08:36:51 -07:00
David Andersen
4ec6f41635 Merge pull request #44 from dtandersen/update-0.15.19
Updated to version 0.15.19
2017-06-08 08:35:16 -07:00
Florian Kinder
eb0a7410eb update to 0.15.19 2017-06-08 11:52:11 +00:00
Entroper
01aeb3b1aa Add map-settings.json to README 2017-06-06 14:22:31 -04:00
Entroper
91f28e34a2 add map-settings.json config file 2017-06-06 13:20:10 -04:00
David Andersen
7f9f640eff Merge pull request #41 from dtandersen/update-0.15.18
Updated to version 0.15.18
2017-06-02 01:58:24 -07:00
Florian Kinder
2d99b36f7e update to 0.15.18 2017-06-02 08:47:04 +00:00
David Andersen
5e71044728 updated to alpine 3.6 2017-06-01 18:31:53 +00:00
David Andersen
52dd896f3c 0.15.17 2017-06-01 11:25:14 -07:00
David Andersen
3a5ce81d2e Merge pull request #38 from Mettwurscht/patch-2
Update to 0.15.17
2017-06-01 11:24:24 -07:00
Mettwurscht
ad707ee2ad Update to 0.15.17 2017-06-01 15:39:01 +02:00
David Andersen
61fd28bb36 0.15.16 2017-05-27 12:12:43 -07:00
David Andersen
892a684f98 Merge pull request #36 from Mettwurscht/patch-1
Update to 0.15.16
2017-05-27 12:11:06 -07:00
Mettwurscht
a0cedba383 Update to 0.15.16 2017-05-27 20:07:37 +02:00
46 changed files with 3970 additions and 377 deletions

11
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,11 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
- package-ecosystem: docker
directory: "/docker"
schedule:
interval: "daily"

29
.github/workflows/docker-build.yml vendored Normal file
View File

@@ -0,0 +1,29 @@
name: Docker build & push
on:
push:
branches:
- master
paths:
- buildinfo.json
# workaround for #526
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: build and push all images
if: ${{ env.DOCKER_USERNAME != '' && env.DOCKER_PASSWORD != '' }}
env:
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
run: |
./build.py --push-tags --multiarch --both

View File

@@ -0,0 +1,28 @@
name: Docker Hub Description
on:
push:
branches:
- master
paths:
- README.md
# workaround for #526
workflow_dispatch:
jobs:
docker-description:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Docker Hub Description
uses: peter-evans/dockerhub-description@v4.0.2
if: ${{ env.DOCKER_USERNAME != '' && env.DOCKER_PASSWORD != '' }}
env:
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
repository: factoriotools/factorio

32
.github/workflows/lint.yml vendored Normal file
View File

@@ -0,0 +1,32 @@
name: 'Linter'
on:
pull_request:
push:
branches:
- master
jobs:
shellcheck:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
- name: shellcheck
uses: reviewdog/action-shellcheck@v1
with:
github_token: ${{ secrets.github_token }}
reporter: github-pr-review
hadolint:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
- name: hadolint
uses: reviewdog/action-hadolint@v1
with:
github_token: ${{ secrets.github_token }}
reporter: github-pr-review

21
.github/workflows/update.yml vendored Normal file
View File

@@ -0,0 +1,21 @@
name: Check Update
on:
schedule:
- cron: "0 * * * *"
workflow_dispatch:
jobs:
check:
runs-on: ubuntu-latest
if: github.event_name != 'schedule' || (github.event_name == 'schedule' && github.repository == 'factoriotools/factorio-docker')
steps:
- name: Checkout
uses: actions/checkout@v5
with:
token: ${{ secrets.REPO_TOKEN }}
- name: Run update script
run: ./update.sh
shell: bash

7
.gitignore vendored Normal file
View File

@@ -0,0 +1,7 @@
# IDE
.idea
# Python
__pycache__/
*.py[cod]
*$py.class

14
.hadolint.yaml Normal file
View File

@@ -0,0 +1,14 @@
ignored:
# ignore apt version pinning
- DL3008
# ignore pip version pinning
- DL3013
# ignore apk version pinning
- DL3018
# ignore pipefail cause Balena/resin.io images do not work with it
- DL4006
# ignore false positive regex
- SC1083
- SC2086
# ignore as need for debug
- SC2005

View File

@@ -1,28 +0,0 @@
FROM frolvlad/alpine-glibc:alpine-3.4
MAINTAINER https://github.com/dtandersen/docker_factorio_server
COPY ./factorio.crt /opt/factorio.crt
ENV VERSION=0.13.20 \
SHA1=59ed0edb3f62f0f41a01fc291959b0a8b44cf631
RUN apk --no-cache add curl tini pwgen && \
curl -sSL --cacert /opt/factorio.crt \
https://www.factorio.com/get-download/$VERSION/headless/linux64 \
-o /tmp/factorio_headless_x64_$VERSION.tar.gz && \
echo "$SHA1 /tmp/factorio_headless_x64_$VERSION.tar.gz" | sha1sum -c && \
tar xzf /tmp/factorio_headless_x64_$VERSION.tar.gz --directory /opt && \
rm /tmp/factorio_headless_x64_$VERSION.tar.gz && \
apk del curl && \
ln -s /factorio/saves /opt/factorio/saves && \
ln -s /factorio/mods /opt/factorio/mods
VOLUME /factorio
EXPOSE 34197/udp 27015/tcp
COPY ./docker-entrypoint.sh /
ENTRYPOINT ["/sbin/tini", "--"]
CMD ["/docker-entrypoint.sh"]

View File

@@ -1 +0,0 @@
sudo docker build -t dtandersen/factorio:0.13-dev .

View File

@@ -1 +0,0 @@
sudo rm -rf /tmp/factorio

View File

@@ -1,35 +0,0 @@
#!/bin/sh -x
set -e
SAVES=/factorio/saves
CONFIG=/factorio/config
mkdir -p $SAVES
mkdir -p /factorio/mods
mkdir -p $CONFIG
if [ ! -f $CONFIG/rconpw ]; then
echo $(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 ! find -L $SAVES -iname \*.zip -mindepth 1 -print | grep -q .; then
/opt/factorio/bin/x64/factorio \
--create $SAVES/_autosave1.zip \
--map-gen-settings $CONFIG/map-gen-settings.json
fi
exec /opt/factorio/bin/x64/factorio \
--port 34197 \
--start-server-load-latest \
--server-settings $CONFIG/server-settings.json \
--rcon-port 27015 \
--rcon-password "$(cat $CONFIG/rconpw)"

View File

@@ -1,92 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIGCDCCA/CgAwIBAgIQKy5u6tl1NmwUim7bo3yMBzANBgkqhkiG9w0BAQwFADCB
hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV
BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwMjEy
MDAwMDAwWhcNMjkwMjExMjM1OTU5WjCBkDELMAkGA1UEBhMCR0IxGzAZBgNVBAgT
EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
Q09NT0RPIENBIExpbWl0ZWQxNjA0BgNVBAMTLUNPTU9ETyBSU0EgRG9tYWluIFZh
bGlkYXRpb24gU2VjdXJlIFNlcnZlciBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAI7CAhnhoFmk6zg1jSz9AdDTScBkxwtiBUUWOqigwAwCfx3M28Sh
bXcDow+G+eMGnD4LgYqbSRutA776S9uMIO3Vzl5ljj4Nr0zCsLdFXlIvNN5IJGS0
Qa4Al/e+Z96e0HqnU4A7fK31llVvl0cKfIWLIpeNs4TgllfQcBhglo/uLQeTnaG6
ytHNe+nEKpooIZFNb5JPJaXyejXdJtxGpdCsWTWM/06RQ1A/WZMebFEh7lgUq/51
UHg+TLAchhP6a5i84DuUHoVS3AOTJBhuyydRReZw3iVDpA3hSqXttn7IzW3uLh0n
c13cRTCAquOyQQuvvUSH2rnlG51/ruWFgqUCAwEAAaOCAWUwggFhMB8GA1UdIwQY
MBaAFLuvfgI9+qbxPISOre44mOzZMjLUMB0GA1UdDgQWBBSQr2o6lFoL2JDqElZz
30O0Oija5zAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNV
HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGwYDVR0gBBQwEjAGBgRVHSAAMAgG
BmeBDAECATBMBgNVHR8ERTBDMEGgP6A9hjtodHRwOi8vY3JsLmNvbW9kb2NhLmNv
bS9DT01PRE9SU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDBxBggrBgEFBQcB
AQRlMGMwOwYIKwYBBQUHMAKGL2h0dHA6Ly9jcnQuY29tb2RvY2EuY29tL0NPTU9E
T1JTQUFkZFRydXN0Q0EuY3J0MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5jb21v
ZG9jYS5jb20wDQYJKoZIhvcNAQEMBQADggIBAE4rdk+SHGI2ibp3wScF9BzWRJ2p
mj6q1WZmAT7qSeaiNbz69t2Vjpk1mA42GHWx3d1Qcnyu3HeIzg/3kCDKo2cuH1Z/
e+FE6kKVxF0NAVBGFfKBiVlsit2M8RKhjTpCipj4SzR7JzsItG8kO3KdY3RYPBps
P0/HEZrIqPW1N+8QRcZs2eBelSaz662jue5/DJpmNXMyYE7l3YphLG5SEXdoltMY
dVEVABt0iN3hxzgEQyjpFv3ZBdRdRydg1vs4O2xyopT4Qhrf7W8GjEXCBgCq5Ojc
2bXhc3js9iPc0d1sjhqPpepUfJa3w/5Vjo1JXvxku88+vZbrac2/4EjxYoIQ5QxG
V/Iz2tDIY+3GH5QFlkoakdH368+PUq4NCNk+qKBR6cGHdNXJ93SrLlP7u3r7l+L4
HyaPs9Kg4DdbKDsx5Q5XLVq4rXmsXiBmGqW5prU5wfWYQ//u+aen/e7KJD2AFsQX
j4rBYKEMrltDR5FL1ZoXX/nUh8HCjLfn4g8wGTeGrODcQgPmlKidrv0PJFGUzpII
0fxQ8ANAe4hZ7Q7drNJ3gjTcBpUC2JD5Leo31Rpg0Gcg19hCC0Wvgmje3WYkN5Ap
lBlGGSW4gNfL1IYoakRwJiNiqZ+Gb7+6kHDSVneFeO/qJakXzlByjAA6quPbYzSf
+AZxAeKCINT+b72x
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFdDCCBFygAwIBAgIQJ2buVutJ846r13Ci/ITeIjANBgkqhkiG9w0BAQwFADBv
MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk
ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF
eHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFow
gYUxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
BgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMSswKQYD
VQQDEyJDT01PRE8gUlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkq
hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkehUktIKVrGsDSTdxc9EZ3SZKzejfSNw
AHG8U9/E+ioSj0t/EFa9n3Byt2F/yUsPF6c947AEYe7/EZfH9IY+Cvo+XPmT5jR6
2RRr55yzhaCCenavcZDX7P0N+pxs+t+wgvQUfvm+xKYvT3+Zf7X8Z0NyvQwA1onr
ayzT7Y+YHBSrfuXjbvzYqOSSJNpDa2K4Vf3qwbxstovzDo2a5JtsaZn4eEgwRdWt
4Q08RWD8MpZRJ7xnw8outmvqRsfHIKCxH2XeSAi6pE6p8oNGN4Tr6MyBSENnTnIq
m1y9TBsoilwie7SrmNnu4FGDwwlGTm0+mfqVF9p8M1dBPI1R7Qu2XK8sYxrfV8g/
vOldxJuvRZnio1oktLqpVj3Pb6r/SVi+8Kj/9Lit6Tf7urj0Czr56ENCHonYhMsT
8dm74YlguIwoVqwUHZwK53Hrzw7dPamWoUi9PPevtQ0iTMARgexWO/bTouJbt7IE
IlKVgJNp6I5MZfGRAy1wdALqi2cVKWlSArvX31BqVUa/oKMoYX9w0MOiqiwhqkfO
KJwGRXa/ghgntNWutMtQ5mv0TIZxMOmm3xaG4Nj/QN370EKIf6MzOi5cHkERgWPO
GHFrK+ymircxXDpqR+DDeVnWIBqv8mqYqnK8V0rSS527EPywTEHl7R09XiidnMy/
s1Hap0flhFMCAwEAAaOB9DCB8TAfBgNVHSMEGDAWgBStvZh6NLQm9/rEJlTvA73g
JMtUGjAdBgNVHQ4EFgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQD
AgGGMA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0gBAowCDAGBgRVHSAAMEQGA1UdHwQ9
MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9BZGRUcnVzdEV4dGVy
bmFsQ0FSb290LmNybDA1BggrBgEFBQcBAQQpMCcwJQYIKwYBBQUHMAGGGWh0dHA6
Ly9vY3NwLnVzZXJ0cnVzdC5jb20wDQYJKoZIhvcNAQEMBQADggEBAGS/g/FfmoXQ
zbihKVcN6Fr30ek+8nYEbvFScLsePP9NDXRqzIGCJdPDoCpdTPW6i6FtxFQJdcfj
Jw5dhHk3QBN39bSsHNA7qxcS1u80GH4r6XnTq1dFDK8o+tDb5VCViLvfhVdpfZLY
Uspzgb8c8+a4bmYRBbMelC1/kZWSWfFMzqORcUx8Rww7Cxn2obFshj5cqsQugsv5
B5a6SE2Q8pTIqXOi6wZ7I53eovNNVZ96YUWYGGjHXkBrI/V5eu+MtWuLt29G9Hvx
PUsE2JOAWVrgQSQdso8VYFhH2+9uRv0V9dlfmrPb2LjkQLPNlzmuhbsdjrzch5vR
pu/xO28QOG8=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
-----END CERTIFICATE-----

View File

@@ -1,5 +0,0 @@
sudo docker run --rm -it \
-v /tmp/factorio:/factorio \
--name factorio \
dtandersen/factorio:0.13-dev "$@"
find /tmp/factorio -type f

View File

@@ -1,26 +0,0 @@
FROM frolvlad/alpine-glibc:alpine-3.4
MAINTAINER https://github.com/dtandersen/docker_factorio_server
ENV VERSION=0.14.23 \
SHA1=6ef84341c6fc1cf45cfdd6acc8468aaa117b9e8a
RUN mkdir /opt && \
apk --no-cache add curl tini pwgen && \
curl -sSL https://www.factorio.com/get-download/$VERSION/headless/linux64 \
-o /tmp/factorio_headless_x64_$VERSION.tar.gz && \
echo "$SHA1 /tmp/factorio_headless_x64_$VERSION.tar.gz" | sha1sum -c && \
tar xzf /tmp/factorio_headless_x64_$VERSION.tar.gz --directory /opt && \
rm /tmp/factorio_headless_x64_$VERSION.tar.gz && \
apk del curl && \
ln -s /factorio/saves /opt/factorio/saves && \
ln -s /factorio/mods /opt/factorio/mods
VOLUME /factorio
EXPOSE 34197/udp 27015/tcp
COPY ./docker-entrypoint.sh /
ENTRYPOINT ["/sbin/tini", "--"]
CMD ["/docker-entrypoint.sh"]

View File

@@ -1 +0,0 @@
sudo docker build --no-cache -t factorio .

View File

@@ -1 +0,0 @@
sudo rm -rf /tmp/factorio

View File

@@ -1,35 +0,0 @@
#!/bin/sh -x
set -e
SAVES=/factorio/saves
CONFIG=/factorio/config
mkdir -p $SAVES
mkdir -p /factorio/mods
mkdir -p $CONFIG
if [ ! -f $CONFIG/rconpw ]; then
echo $(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 ! find -L $SAVES -iname \*.zip -mindepth 1 -print | grep -q .; then
/opt/factorio/bin/x64/factorio \
--create $SAVES/_autosave1.zip \
--map-gen-settings $CONFIG/map-gen-settings.json
fi
exec /opt/factorio/bin/x64/factorio \
--port 34197 \
--start-server-load-latest \
--server-settings $CONFIG/server-settings.json \
--rcon-port 27015 \
--rcon-password "$(cat $CONFIG/rconpw)"

View File

@@ -1,5 +0,0 @@
sudo docker run --rm -it \
-v /tmp/factorio:/factorio \
--name factorio \
factorio "$@"
find /tmp/factorio -type f

View File

@@ -1,28 +0,0 @@
FROM frolvlad/alpine-glibc:alpine-3.5
MAINTAINER https://github.com/dtandersen/docker_factorio_server
ENV PORT=34197 \
VERSION=0.15.15 \
SHA1=b3b40bb0c28a39be3b34681521c0ccdd2fba8e6b
RUN mkdir /opt && \
apk add --update --no-cache tini pwgen && \
apk add --update --no-cache --virtual .build-deps curl && \
curl -sSL https://www.factorio.com/get-download/$VERSION/headless/linux64 \
-o /tmp/factorio_headless_x64_$VERSION.tar.xz && \
echo "$SHA1 /tmp/factorio_headless_x64_$VERSION.tar.xz" | sha1sum -c && \
tar xf /tmp/factorio_headless_x64_$VERSION.tar.xz --directory /opt && \
rm /tmp/factorio_headless_x64_$VERSION.tar.xz && \
ln -s /factorio/saves /opt/factorio/saves && \
ln -s /factorio/mods /opt/factorio/mods && \
apk del .build-deps
VOLUME /factorio
EXPOSE $PORT/udp 27015/tcp
COPY ./docker-entrypoint.sh /
ENTRYPOINT ["/sbin/tini", "--"]
CMD ["/docker-entrypoint.sh"]

View File

@@ -1,8 +0,0 @@
version: '2'
services:
factorio:
build: .
ports:
- "34197:34197"
volumes:
- /tmp/factorio:/factorio

View File

@@ -1,38 +0,0 @@
#!/bin/sh -x
set -e
SAVES=/factorio/saves
CONFIG=/factorio/config
mkdir -p $SAVES
mkdir -p /factorio/mods
mkdir -p $CONFIG
if [ ! -f $CONFIG/rconpw ]; then
echo $(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 ! find -L $SAVES -iname \*.zip -mindepth 1 -print | grep -q .; then
/opt/factorio/bin/x64/factorio \
--create $SAVES/_autosave1.zip \
--map-gen-settings $CONFIG/map-gen-settings.json
fi
exec /opt/factorio/bin/x64/factorio \
--port $PORT \
--start-server-load-latest \
--server-settings $CONFIG/server-settings.json \
--server-whitelist $CONFIG/server-whitelist.json \
--server-banlist $CONFIG/server-banlist.json \
--rcon-port 27015 \
--rcon-password "$(cat $CONFIG/rconpw)" \
--server-id /factorio/config/server-id.json

126
CLAUDE.md Normal file
View File

@@ -0,0 +1,126 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
This is a Docker image for running a Factorio headless server. It provides automated builds for multiple Factorio versions (stable and experimental) and supports both AMD64 and ARM64 architectures.
## Architecture
### Key Components
1. **Docker Image Build System**
- `build.py` - Unified Python script that builds both regular and rootless Docker images from `buildinfo.json`
- `docker/Dockerfile` - Main Dockerfile that creates the Factorio server image
- `docker/Dockerfile.rootless` - Dockerfile for rootless variant (runs as UID 1000)
- `buildinfo.json` - Contains version info, SHA256 checksums, and tags for all supported versions
- Supports multi-architecture builds (linux/amd64, linux/arm64) using Docker buildx
2. **Automated Updates**
- `update.sh` - Checks for new Factorio releases and updates `buildinfo.json`
- Updates README.md with new version tags
- Commits changes and tags releases automatically
- Run by GitHub Actions to keep images up-to-date
3. **Container Scripts**
- `docker/files/docker-entrypoint.sh` - Main entrypoint that configures and starts the server
- `docker/files/docker-update-mods.sh` - Updates mods on server start
- `docker/files/docker-dlc.sh` - Manages DLC (Space Age) activation
- `docker/files/scenario.sh` - Alternative entrypoint for launching scenarios
- `docker/files/players-online.sh` - Checks if players are online (for watchtower integration)
4. **RCON Client**
- `docker/rcon/` - C source for RCON client, built during Docker image creation
- Allows sending commands to the running server
## Common Development Commands
### Building Images
```bash
# Build regular images locally (single architecture)
python3 build.py
# Build rootless images only
python3 build.py --rootless
# Build both regular and rootless images
python3 build.py --both
# Build and push multi-architecture images (regular only)
python3 build.py --multiarch --push-tags
# Build and push both regular and rootless multi-architecture images
python3 build.py --multiarch --push-tags --both
```
### Running the Container
```bash
# Basic run command
docker run -d \
-p 34197:34197/udp \
-p 27015:27015/tcp \
-v /opt/factorio:/factorio \
--name factorio \
factoriotools/factorio
# Using docker-compose
docker-compose up -d
```
### Linting
```bash
# Lint Dockerfiles
./lint.sh
```
### Testing Updates
```bash
# Check for new Factorio versions and update buildinfo.json
./update.sh
```
## Key Configuration
### Environment Variables
- `LOAD_LATEST_SAVE` - Load the most recent save (default: true)
- `GENERATE_NEW_SAVE` - Generate a new save if none exists (default: false)
- `SAVE_NAME` - Name of the save file to load/create
- `UPDATE_MODS_ON_START` - Update mods before starting (requires USERNAME/TOKEN)
- `DLC_SPACE_AGE` - Enable/disable Space Age DLC (default: true)
- `PORT` - UDP port for game server (default: 34197)
- `RCON_PORT` - TCP port for RCON (default: 27015)
### Volume Structure
All data is stored in a single volume mounted at `/factorio`:
```
/factorio/
├── config/ # Server configuration files
├── mods/ # Game modifications
├── saves/ # Save games
├── scenarios/ # Scenario files
└── script-output/ # Script output directory
```
## Version Management
The project maintains compatibility with multiple Factorio versions:
- Latest experimental version gets the `latest` tag
- Latest stable version gets the `stable` tag
- Each version also gets specific tags (e.g., `2.0.55`, `2.0`, `2`)
- Legacy versions back to 0.12 are supported
Version updates are automated via GitHub Actions that run `update.sh` periodically.
## Testing Changes
1. Modify `buildinfo.json` to test specific versions
2. Run `python3 build.py` to build regular images locally
- Use `python3 build.py --rootless` for rootless images
- Use `python3 build.py --both` to build both variants
3. Test the container with your local data volume
4. For production changes, ensure `update.sh` handles version transitions correctly

408
PERMISSION_ISSUES_GUIDE.md Normal file
View File

@@ -0,0 +1,408 @@
# Factorio Docker Permission Issues - Solutions and Workarounds
This document provides comprehensive solutions and workarounds for permission-related issues in the Factorio Docker container, based on detailed analysis of issues #558, #556, #555, #549, #496, #501, #492, and #420.
## Table of Contents
- [Root Cause Analysis](#root-cause-analysis)
- [Critical Prerequisites](#critical-prerequisites)
- [General Solutions](#general-solutions)
- [Platform-Specific Issues](#platform-specific-issues)
- [Docker System Requirements](#docker-system-requirements)
- [Advanced Troubleshooting](#advanced-troubleshooting)
- [Known Issues and Limitations](#known-issues-and-limitations)
## Root Cause Analysis
Based on detailed investigation by maintainer @Fank and community reports, the permission issues stem from:
1. **Container Architecture Issues**:
- No `USER` directive in Dockerfile despite creating a factorio user
- Container starts as root and performs recursive `chown` on every start
- The recursive `chown -R factorio:factorio /factorio` can be interrupted, leaving inconsistent permissions
- Dynamic UID/GID mapping using PUID/PGID environment variables adds complexity
2. **Rootless Docker Complications**:
- UID namespace remapping (e.g., container UID 845 → host UID 100844)
- Rootless Docker daemons cannot change ownership of bind-mounted volumes
- Different rootless implementations use different UID mappings
3. **Host System Dependencies**:
- Older Docker versions (especially pre-20.x) have permission handling bugs
- Some kernel versions have issues with user namespace operations
- SELinux and AppArmor can interfere with volume permissions
## Critical Prerequisites
### Update Your System First!
Many permission issues are caused by outdated system components:
```bash
# For Ubuntu/Debian
sudo apt-get update
sudo apt-get upgrade
# Specifically update Docker to 27.x or newer
# Follow: https://docs.docker.com/engine/install/ubuntu/#install-docker-engine
```
**Important**: Multiple users reported that updating Docker resolved their "Operation not permitted" errors.
## General Solutions
### Solution A: Pre-create Directories with Correct Permissions
```bash
# Create the directory structure
sudo mkdir -p /opt/factorio/{saves,mods,config,scenarios,script-output}
# Set ownership to factorio user (845:845)
sudo chown -R 845:845 /opt/factorio
# Set appropriate permissions (note the 'u+rwx' for write access)
sudo chmod -R u+rwx /opt/factorio
```
### Solution B: Use the Rootless Docker Image (Recommended)
The project now provides a rootless variant that runs as UID 1000, which avoids most permission issues:
```bash
docker run -d \
-p 34197:34197/udp \
-p 27015:27015/tcp \
-v /opt/factorio:/factorio \
--name factorio \
factoriotools/factorio:latest-rootless
```
**Benefits of rootless images**:
- No `chown` operations on startup
- No need to pre-create directories with specific permissions
- Works seamlessly with rootless Docker installations
- Avoids the recursive permission changes that can be interrupted
**Available rootless tags**:
- `latest-rootless`
- `stable-rootless`
- `2.0.55-rootless` (or any specific version with `-rootless` suffix)
## Platform-Specific Issues and Solutions
### NixOS with Rootless Docker
**Problem**: Permission denied errors when creating directories, even after setting ownership to 845:845. Files show ownership by UID 100844 instead of 845.
**Solutions**:
1. **Find and use your actual rootless Docker user ID**:
```bash
# Method 1: Check your user ID
id -u
# Method 2: Check existing Docker volumes for the UID Docker is using
ls -lan /path/to/other/docker/volumes
# Common rootless Docker UIDs:
# - 100999 (NixOS default)
# - 100844 (as reported in issue #558)
# - 1000 (some configurations)
# Apply the correct ownership
sudo chown -R 100999:100999 ./factorio
```
2. **Configure NixOS Docker properly**:
```nix
# In configuration.nix
virtualisation.docker.rootless = {
enable = true;
setSocketVariable = true;
};
```
3. **Port Mapping Issues**: Rootless Docker on NixOS has issues with userland-proxy that can cause random port assignments. Consider using host networking if possible.
### macOS with Colima
**Problem**: `copy_file` permission denied errors, even with correct ownership. Permission errors when running docker-dlc.sh.
**Solutions**:
1. **Set broader permissions before mounting**:
```bash
# Create directory structure
mkdir -p ./factorio-server/{saves,mods,config,scenarios}
# Set ownership AND permissions
sudo chown -R 845:845 ./factorio-server
sudo chmod -R 775 ./factorio-server
```
2. **Use Docker Desktop instead of Colima** if the issues persist, as it has better macOS integration
3. **Specify PUID/PGID explicitly**:
```yaml
environment:
- PUID=502 # Common macOS user ID
- PGID=20 # Common macOS staff group
```
### Windows
**Problem**: Cannot remove temporary locale files due to Windows-Linux permission translation. Errors like "Permission denied trying to remove /factorio/temp/currently-playing/locale/de".
**Solutions**:
1. **Use WSL2 backend** for Docker Desktop (required for proper Linux filesystem semantics)
2. **Store volumes in WSL2 filesystem** instead of Windows filesystem:
```bash
# Inside WSL2 terminal
mkdir -p ~/factorio
chmod -R 777 ~/factorio
```
```yaml
# docker-compose.yml - use WSL2 path
volumes:
- ~/factorio:/factorio
```
3. **Avoid Windows drive mounts** (like `W:\docker\factorio`) as they have inherent permission translation issues
4. **Add :Z flag for SELinux context** (some Windows Docker setups benefit from this):
```yaml
volumes:
- ~/factorio:/factorio:Z
```
### Synology NAS
**Problem**: Permission denied when accessing mounted volumes. Error: "filesystem error: status: Permission denied [/factorio/saves]".
**Solutions**:
1. **Create and set permissions via SSH**:
```bash
# SSH into Synology
sudo mkdir -p /volume1/docker/factorio
sudo chown -R 845:845 /volume1/docker/factorio
sudo chmod -R u+rwx /volume1/docker/factorio # Important: u+rwx for write access
```
2. **Use the correct volume path in your container**:
```bash
docker run -d \
-p 34197:34197/udp \
-p 27015:27015/tcp \
-v /volume1/docker/factorio:/factorio \
--name factorio \
--restart=always \
factoriotools/factorio
```
3. **Check DSM Docker permissions** - ensure the Docker package has proper permissions to the shared folder
## Docker System Requirements
### Minimum Docker Version
Based on community reports, these Docker versions are known to work:
- **Docker 27.4.1** - Confirmed working
- **Docker 20.x+** - Generally stable
- **Docker 19.x and below** - Known permission issues
**Check your Docker version**:
```bash
docker --version
# If below 20.x, update immediately!
```
### "Operation not permitted" at Util.cpp:81
This specific error is often caused by:
1. **Outdated Docker version** - Update Docker first!
2. **Outdated kernel** - Run system updates
3. **Missing kernel capabilities** - Check Docker daemon configuration
## Docker Compose Best Practices
### Basic Configuration
```yaml
version: '3'
services:
factorio:
image: factoriotools/factorio:stable
container_name: factorio
ports:
- "34197:34197/udp"
- "27015:27015/tcp"
volumes:
- ./factorio:/factorio
restart: unless-stopped
stdin_open: true # For interactive console
tty: true
```
### Advanced Configuration for Permission Issues
```yaml
version: '3'
services:
factorio:
image: factoriotools/factorio:stable
container_name: factorio
ports:
- "34197:34197/udp"
- "27015:27015/tcp"
volumes:
- ./factorio:/factorio:Z # :Z for SELinux systems
restart: unless-stopped
# user: "845:845" # WARNING: This might break the entrypoint script
environment:
- PUID=845
- PGID=845
- UPDATE_MODS_ON_START=false # Disable if having permission issues
```
### Rootless Docker Configuration
```yaml
version: '3'
services:
factorio:
image: factoriotools/factorio:latest-rootless
container_name: factorio
ports:
- "34197:34197/udp"
- "27015:27015/tcp"
volumes:
- ./factorio:/factorio
restart: unless-stopped
environment:
- PUID=1000 # Rootless default
- PGID=1000
```
## Advanced Troubleshooting
### Step-by-Step Diagnosis
1. **Check Current Ownership**:
```bash
ls -lan ./factorio
# Look for UIDs like 845, 1000, 100844, 100999
```
2. **Verify Docker User Mapping**:
```bash
# Check what user the container is running as
docker exec factorio id
# Check file ownership inside container
docker exec factorio ls -lan /factorio
```
3. **Test Without Volume Mount** (isolates host permission issues):
```bash
docker run --rm -it factoriotools/factorio:stable
# If this works, the issue is with your host volume permissions
```
4. **Check Security Modules**:
```bash
# SELinux (Fedora, RHEL, CentOS)
getenforce
# If "Enforcing", try adding :Z to volume mount
# AppArmor (Ubuntu, Debian)
sudo apparmor_status | grep docker
```
5. **Debug the Entrypoint Script**:
```bash
# Run with debug output
docker run --rm -it \
-e DEBUG=true \
-v ./factorio:/factorio \
factoriotools/factorio:stable
```
### Common Error Messages and Solutions
| Error | Cause | Solution |
|-------|-------|----------|
| `Util.cpp:81: Operation not permitted` | Outdated Docker/kernel | Update Docker and system packages |
| `chown: Operation not permitted` | Rootless Docker | Use rootless Docker UID for ownership |
| `Permission denied [/factorio/saves]` | Wrong directory permissions | `chmod -R u+rwx` on host directory |
| `Couldn't create lock file /factorio/.lock` | Container can't write to volume | Check volume mount and permissions |
| `Map version X cannot be loaded` | Version mismatch | Use correct Docker image version |
## Known Issues and Limitations
### Interrupted chown Operations
The container performs `chown -R factorio:factorio /factorio` on every start. If the container is killed during this operation:
- Files will have inconsistent ownership
- Some files owned by 845, others by different UIDs
- Solution: Let the container complete startup before stopping
### Rootless Docker Port Mapping
**Issue #496**: Rootless Docker with userland-proxy causes random port assignments instead of the configured 34197.
- **Workaround**: Use host networking mode if possible
- **Note**: This is a Docker limitation, not specific to this image
### Map Version Compatibility
**Problem**: "Map version 2.0.23-0 cannot be loaded because it is higher than the game version".
**Solution**:
```bash
# Use a version that matches or exceeds your save
docker pull factoriotools/factorio:2.0.23
# Or always use latest for newest features
docker pull factoriotools/factorio:latest
```
## Recommended Approach
### For New Installations
1. **Update your system first** - Many issues are caused by old Docker versions
2. **Try the rootless image first** - It avoids most permission issues entirely
3. **Pre-create directories** with correct permissions if using the standard image
4. **Test without volumes** first to ensure the image works
### For Existing Installations with Issues
1. **Stop the container** and let it shut down cleanly
2. **Backup your data** before making changes
3. **Check Docker version** - update if below 20.x
4. **Fix permissions** using the platform-specific solution
5. **Consider rootless variant** for easier permission management
### Best Practices
- **Let the container start fully** before stopping (avoid interrupted chown)
- **Use named volumes** instead of bind mounts when possible
- **Monitor first startup** to ensure permissions are set correctly
- **Keep Docker updated** to avoid known bugs
## Community Solutions
### Proposed Improvements (from @Fank)
1. **Add USER directive** in Dockerfile after creating directories
2. **Optimize chown logic** to only run when ownership is wrong
3. **Implement fixuid** for better UID/GID mapping
4. **Add health checks** to ensure permissions are correct before starting
### Alternative Images
Some users have tried other Factorio Docker images (e.g., goofball222/factorio) but report the same Util.cpp:81 errors, suggesting this is a broader ecosystem issue related to Docker versions and system configurations.
## Quick Reference
| Platform | Common UID | Recommended Approach |
|----------|-----------|---------------------|
| Standard Docker | 845 | Update Docker, use `chown 845:845` |
| Rootless Docker (NixOS) | 100999, 100844 | Find actual UID, chown to that |
| macOS (Docker Desktop) | 502 (user), 20 (staff) | Use PUID/PGID env vars |
| Windows | N/A | Use WSL2 filesystem |
| Synology NAS | varies | Check DSM user, ensure Docker has folder access |
## Getting Help
If these solutions don't work:
1. **Update everything first** (Docker, kernel, system packages)
2. **Provide full details** when reporting issues:
- Docker version (`docker --version`)
- OS and version
- Full error messages
- Output of `ls -lan` on your volume
3. **Try the rootless image** as an alternative
4. **Check issue #558** for ongoing discussions
Remember: The vast majority of permission issues are resolved by updating Docker to version 20.x or newer!

502
README.md
View File

@@ -1,19 +1,24 @@
# Factorio [![](https://images.microbadger.com/badges/image/dtandersen/factorio.svg)](https://microbadger.com/images/dtandersen/factorio "Get your own image badge on microbadger.com") [![Docker Pulls](https://img.shields.io/docker/pulls/dtandersen/factorio.svg)](https://hub.docker.com/r/dtandersen/factorio/) [![Docker Stars](https://img.shields.io/docker/stars/dtandersen/factorio.svg)](https://hub.docker.com/r/dtandersen/factorio/)
# Factorio [![Docker Version](https://img.shields.io/docker/v/factoriotools/factorio?sort=semver)](https://hub.docker.com/r/factoriotools/factorio/) [![Docker Pulls](https://img.shields.io/docker/pulls/factoriotools/factorio.svg?maxAge=600)](https://hub.docker.com/r/factoriotools/factorio/) [![Docker Stars](https://img.shields.io/docker/stars/factoriotools/factorio.svg?maxAge=600)](https://hub.docker.com/r/factoriotools/factorio/)
* `0.15.15`, `0.15`, `latest` [(0.15/Dockerfile)](https://github.com/dtandersen/docker_factorio_server/blob/master/0.15/Dockerfile)
* `0.14.23`, `0.14`, `stable` [(0.14/Dockerfile)](https://github.com/dtandersen/docker_factorio_server/blob/master/0.14/Dockerfile)
* `0.13.20`, `0.13` [(0.13/Dockerfile)](https://github.com/dtandersen/docker_factorio_server/blob/master/0.13/Dockerfile)
> [!NOTE]
> Support for ARM is experimental. Expect crashes and lag if you try to run this on a raspberry pi.
*Tag descriptions*
[中文](./README_zh_CN.md)
* `latest` - highest version: may be experimental.
* `stable` - highest version declared stable.
* `0.x` - highest version in a branch: may be experimental.
<!-- start autogeneration tags -->
* `latest, 2.0.65`
* `2, 2.0, 2.0.60, stable, stable-2.0.60`
<!-- end autogeneration tags -->
## Tag descriptions
* `latest` - most up-to-date version (may be experimental).
* `stable` - version declared stable on [factorio.com](https://www.factorio.com) ([FFF-435 Since 2.0 versions gets released as experimental first, once stable it will be marked as stable](https://factorio.com/blog/post/fff-435)).
* `0.x` - latest version in a branch.
* `0.x.y` - a specific version.
* `0.x-dev` - whatever is in master for that version.
* `0.x-z` - incremental fix for that version.
# What is Factorio?
## What is Factorio?
[Factorio](https://www.factorio.com) is a game in which you build and maintain factories.
@@ -21,92 +26,190 @@ You will be mining resources, researching technologies, building infrastructure,
The game is very stable and optimized for building massive factories. You can create your own maps, write mods in Lua or play with friends via Multiplayer.
NOTE: This is only the server. The game is available at [factorio.com](https://www.factorio.com) and [Steam](http://store.steampowered.com/app/427520/).
NOTE: This is only the server. The full game is available at [Factorio.com](https://www.factorio.com), [Steam](https://store.steampowered.com/app/427520/), [GOG.com](https://www.gog.com/game/factorio) and [Humble Bundle](https://www.humblebundle.com/store/factorio).
## Usage
# Usage
### Quick Start
## Quick Start
Run the server to create the necessary folder structure and configuration files. For this example data is stored in `/opt/factorio`.
Run the server to create the necessary folder structure and configuration files. For this example data is stored in `/tmp/factorio`.
```
docker run -d -p 34197:34197/udp -p 27015:27015/tcp \
-v /tmp/factorio:/factorio \
```shell
sudo mkdir -p /opt/factorio
sudo chown 845:845 /opt/factorio
sudo docker run -d \
-p 34197:34197/udp \
-p 27015:27015/tcp \
-v /opt/factorio:/factorio \
--name factorio \
--restart=always \
dtandersen/factorio
--restart=unless-stopped \
factoriotools/factorio
```
For those new to Docker, here is an explanation of the options:
* `-d` - Run as a daemon ("detached").
* `-p` - Expose ports.
* `-v` - Mount `/tmp/factorio` on the local file system to `/factorio` in the container.
* `-v` - Mount `/opt/factorio` on the local file system to `/factorio` in the container.
* `--restart` - Restart the server if it crashes and at system start
* `--name` - Name the container "factorio" (otherwise it has a funny random name).
The `chown` command is needed because in 0.16+, we no longer run the game server as root for security reasons, but rather as a 'factorio' user with user id 845. The host must therefore allow these files to be written by that user.
Check the logs to see what happened:
```
```shell
docker logs factorio
```
Stop the server:
```
```shell
docker stop factorio
```
Now there's a `server-settings.json` file in the folder `/tmp/factorio/config`. Modify this to your liking and restart the server:
Now there's a `server-settings.json` file in the folder `/opt/factorio/config`. Modify this to your liking and restart the server:
```
```shell
docker start factorio
```
Try to connect to the server. Check the logs if it isn't working.
## Console
### Console
To issue console commands to the server, start the server in interactive mode with `-it`. Open the console with `docker attach` and then type commands.
docker run -d -it \
--name factorio \
dtandersen/factorio
docker attach factorio
```shell
docker run -d -it \
--name factorio \
factoriotools/factorio
docker attach factorio
```
### RCON (2.0.18+)
## Upgrading
Alternativly (e.g. for scripting) the RCON connection can be used to send commands to the running factorio server.
This does not require the RCON connection to be exposed.
```shell
docker exec factorio rcon /h
```
### Upgrading
Before upgrading backup the save. It's easy to make a save in the client.
Ensure `-v` was used to run the server so the save is outside of the Docker container. The `docker rm` command completely destroys the container, which includes the save if it isn't stored in an data volume.
Ensure `-v` was used to run the server so the save is outside of the Docker container. The `docker rm` command completely destroys the container, which includes the save if it isn't stored in a data volume.
Delete the container and refresh the image:
docker stop factorio
docker rm factorio
docker pull dtandersen/factorio
```shell
docker stop factorio
docker rm factorio
docker pull factoriotools/factorio
```
Now run the server as before. In about a minute the new version of Factorio should be up and running, complete with saves and config!
### Saves
## Saves
A new map named `_autosave1.zip` is generated the first time the server is started. The `map-gen-settings.json` file in `/tmp/factorio/config` is used for the map settings. On subsequent runs the newest save is used.
A new map named `_autosave1.zip` is generated the first time the server is started. The `map-gen-settings.json` and `map-settings.json` files in `/opt/factorio/config` are used for the map settings. On subsequent runs the newest save is used.
To load an old save stop the server and run the command `touch oldsave.zip`. This resets the date. Then restart the server. Another option is to delete all saves except one.
To generate a new map stop the server, delete all of the saves and restart the server.
#### Specify a save directly (0.17.79-2+)
## Mods
You can specify a specific save to load by configuring the server through a set of environment variables:
To load an existing save set `SAVE_NAME` to the name of your existing save file located within the `saves` directory, without the `.zip` extension:
```shell
sudo docker run -d \
-p 34197:34197/udp \
-p 27015:27015/tcp \
-v /opt/factorio:/factorio \
-e LOAD_LATEST_SAVE=false \
-e SAVE_NAME=replaceme \
--name factorio \
--restart=unless-stopped \
factoriotools/factorio
```
To generate a new map set `GENERATE_NEW_SAVE=true` and specify `SAVE_NAME`:
```shell
sudo docker run -d \
-p 34197:34197/udp \
-p 27015:27015/tcp \
-v /opt/factorio:/factorio \
-e LOAD_LATEST_SAVE=false \
-e GENERATE_NEW_SAVE=true \
-e SAVE_NAME=replaceme \
--name factorio \
--restart=unless-stopped \
factoriotools/factorio
```
To generate a new map with a specific preset (e.g., death-world):
```shell
sudo docker run -d \
-p 34197:34197/udp \
-p 27015:27015/tcp \
-v /opt/factorio:/factorio \
-e LOAD_LATEST_SAVE=false \
-e GENERATE_NEW_SAVE=true \
-e SAVE_NAME=replaceme \
-e PRESET=death-world \
--name factorio \
--restart=unless-stopped \
factoriotools/factorio
```
### Mods
Copy mods into the mods folder and restart the server.
As of 0.17 a new environment variable was added ``UPDATE_MODS_ON_START`` which if set to ``true`` will cause the mods get to updated on server start. If set a valid [Factorio Username and Token](https://www.factorio.com/profile) must be supplied or else the server will not start. They can either be set as docker secrets, environment variables, or pulled from the server-settings.json file.
## RCON
**Note:** When using the Space Age DLC, the built-in mods (`elevated-rails`, `quality`, and `space-age`) are automatically skipped during mod updates to prevent conflicts. These mods are included with the DLC and should not be downloaded separately.
### Scenarios
If you want to launch a scenario from a clean start (not from a saved map) you'll need to start the docker image from an alternate entrypoint. To do this, use the example entrypoint file stored in the /factorio/entrypoints directory in the volume, and launch the image with the following syntax. Note that this is the normal syntax with the addition of the --entrypoint setting AND the additional argument at the end, which is the name of the Scenario in the Scenarios folder.
```shell
docker run -d \
-p 34197:34197/udp \
-p 27015:27015/tcp \
-v /opt/factorio:/factorio \
--name factorio \
--restart=unless-stopped \
--entrypoint "/scenario.sh" \
factoriotools/factorio \
MyScenarioName
```
### Converting Scenarios to Regular Maps
If you would like to export your scenario to a saved map, you can use the example entrypoint similar to the Scenario usage above. Factorio will run once, converting the Scenario to a saved Map in your saves directory. A restart of the docker image using the standard options will then load that map, just as if the scenario were just started by the Scenarios example noted above.
```shell
docker run -d \
-p 34197:34197/udp \
-p 27015:27015/tcp \
-v /opt/factorio:/factorio \
--name factorio \
--restart=unless-stopped \
--entrypoint "/scenario2map.sh" \
factoriotools/factorio
MyScenarioName
```
### RCON
Set the RCON password in the `rconpw` file. A random password is generated if `rconpw` doesn't exist.
@@ -114,17 +217,103 @@ To change the password, stop the server, modify `rconpw`, and restart the server
To "disable" RCON don't expose port 27015, i.e. start the server without `-p 27015:27015/tcp`. RCON is still running, but nobody can to connect to it.
## Whitelisting (0.15.3+)
### Whitelisting (0.15.3+)
Create file `config/server-whitelist.json` and add the whitelisted users.
[
"you",
"friend"
]
```json
[
"you",
"friend"
]
```
# Container Details
### Banlisting (0.17.1+)
Create file `config/server-banlist.json` and add the banlisted users.
```json
[
"bad_person",
"other_bad_person"
]
```
### Adminlisting (0.17.1+)
Create file `config/server-adminlist.json` and add the adminlisted users.
```json
[
"you",
"friend"
]
```
### Customize configuration files (0.17.x+)
Out-of-the box, factorio does not support environment variables inside the configuration files. A workaround is the usage of `envsubst` which generates the configuration files dynamically during startup from environment variables set in docker-compose:
Example which replaces the server-settings.json:
```yaml
factorio_1:
image: factoriotools/factorio
ports:
- "34197:34197/udp"
volumes:
- /opt/factorio:/factorio
- ./server-settings.json:/server-settings.json
environment:
- INSTANCE_NAME=Your Instance's Name
- INSTANCE_DESC=Your Instance's Description
entrypoint: /bin/sh -c "mkdir -p /factorio/config && envsubst < /server-settings.json > /factorio/config/server-settings.json && exec /docker-entrypoint.sh"
```
The `server-settings.json` file may then contain the variable references like this:
```json
"name": "${INSTANCE_NAME}",
"description": "${INSTANCE_DESC}",
```
### Environment Variables
These are the environment variables which can be specified at container run time.
| Variable Name | Description | Default | Available in |
|----------------------|----------------------------------------------------------------------|----------------|--------------|
| GENERATE_NEW_SAVE | Generate a new save if one does not exist before starting the server | false | 0.17+ |
| LOAD_LATEST_SAVE | Load latest when true. Otherwise load SAVE_NAME | true | 0.17+ |
| PORT | UDP port the server listens on | 34197 | 0.15+ |
| BIND | IP address (v4 or v6) the server listens on (IP\[:PORT]) | | 0.15+ |
| RCON_PORT | TCP port the rcon server listens on | 27015 | 0.15+ |
| SAVE_NAME | Name to use for the save file | _autosave1 | 0.17+ |
| PRESET | Map generation preset when GENERATE_NEW_SAVE is true | | 0.17+ |
| TOKEN | factorio.com token | | 0.17+ |
| UPDATE_MODS_ON_START | If mods should be updated before starting the server | | 0.17+ |
| USERNAME | factorio.com username | | 0.17+ |
| CONSOLE_LOG_LOCATION | Saves the console log to the specifies location | | |
| DLC_SPACE_AGE | Enables or disables the mods for DLC Space Age in mod-list.json[^1] | true | 2.0.8+ |
| MODS | Mod directory to use | /factorio/mods | 2.0.8+ |
**Note:** All environment variables are compared as strings
#### PRESET Values
The `PRESET` environment variable is used when generating a new map (when `GENERATE_NEW_SAVE=true`). It corresponds to Factorio's built-in map generation presets. Common values include:
- `default` - Normal settings
- `rich-resources` - Resources are more abundant
- `marathon` - Recipes and technologies are more expensive
- `death-world` - Biters are more aggressive and numerous
- `death-world-marathon` - Combines death-world and marathon settings
- `rail-world` - Resources are further apart, encouraging train usage
- `ribbon-world` - Map height is limited for a unique challenge
If PRESET is not specified or left empty, the map will be generated using the settings from `map-gen-settings.json` and `map-settings.json` without a preset.
## Container Details
The philosophy is to [keep it simple](http://wiki.c2.com/?KeepItSimple).
@@ -132,37 +321,195 @@ The philosophy is to [keep it simple](http://wiki.c2.com/?KeepItSimple).
* Prefer configuration files over environment variables.
* Use one volume for data.
## Volumes
### Volumes
To keep things simple, the container uses a single volume mounted at `/factorio`. This volume stores configuration, mods, and saves.
factorio
|-- config
| |-- map-gen-settings.json
| |-- rconpw
| |-- server-settings.json
| `-- server-whitelist.json
|-- mods
| `-- fancymod.zip
`-- saves
`-- _autosave1.zip
The files in this volume should be owned by the factorio user, uid 845.
```text
factorio
|-- config
| |-- map-gen-settings.json
| |-- map-settings.json
| |-- rconpw
| |-- server-adminlist.json
| |-- server-banlist.json
| |-- server-settings.json
| `-- server-whitelist.json
|-- mods
| `-- fancymod.zip
`-- saves
`-- _autosave1.zip
```
## Ports
## Docker Compose
* `34197/udp` - Game server (required).
[Docker Compose](https://docs.docker.com/compose/install/) is an easy way to run Docker containers.
* docker-engine >= 1.10.0 is required
* docker-compose >=1.6.0 is required
First get a [docker-compose.yml](https://github.com/factoriotools/factorio-docker/blob/master/docker/docker-compose.yml) file. To get it from this repository:
```shell
git clone https://github.com/factoriotools/factorio-docker.git
cd factorio-docker/docker
```
Or make your own:
```yaml
version: '2'
services:
factorio:
image: factoriotools/factorio
ports:
- "34197:34197/udp"
- "27015:27015/tcp"
volumes:
- /opt/factorio:/factorio
```
Now cd to the directory with docker-compose.yml and run:
```shell
sudo mkdir -p /opt/factorio
sudo chown 845:845 /opt/factorio
sudo docker-compose up -d
```
### Ports
* `34197/udp` - Game server (required). This can be changed with the `PORT` environment variable.
* `27015/tcp` - RCON (optional).
## LAN Games
## Environment Variables
Ensure the `lan` setting in server-settings.json is `true`.
* `PORT` (0.15+) - Start the server on an alterate port, .e.g. `docker run -e "PORT=34198"`.
```json
"visibility":
{
"public": false,
"lan": true
},
```
Start the container with the `--network=host` option so clients can automatically find LAN games. Refer to the Quick Start to create the `/opt/factorio` directory.
```shell
sudo docker run -d \
--network=host \
-p 34197:34197/udp \
-p 27015:27015/tcp \
-v /opt/factorio:/factorio \
--name factorio \
--restart=unless-stopped \
factoriotools/factorio
```
## Deploy to other plaforms
### Vagrant
[Vagrant](https://www.vagrantup.com/) is a easy way to setup a virtual machine (VM) to run Docker. The [Factorio Vagrant box repository](https://github.com/dtandersen/factorio-lan-vagrant) contains a sample Vagrantfile.
For LAN games the VM needs an internal IP in order for clients to connect. One way to do this is with a public network. The VM uses DHCP to acquire an IP address. The VM must also forward port 34197.
```ruby
config.vm.network "public_network"
config.vm.network "forwarded_port", guest: 34197, host: 34197
```
### Amazon Web Services (AWS) Deployment
If you're looking for a simple way to deploy this to the Amazon Web Services Cloud, check out the [Factorio Server Deployment (CloudFormation) repository](https://github.com/m-chandler/factorio-spot-pricing). This repository contains a CloudFormation template that will get you up and running in AWS in a matter of minutes. Optionally it uses Spot Pricing so the server is very cheap, and you can easily turn it off when not in use.
## Using a reverse proxy
If you need to use a reverse proxy you can use the following nginx snippet:
```
stream {
server {
listen 34197 udp reuseport;
proxy_pass my.upstream.host:34197;
}
}
```
If your factorio host uses multiple IP addresses (very common with IPv6), you might additionally need to bind Factorio to a single IP (otherwise the UDP proxy might get confused with IP mismatches). To do that pass the `BIND` envvar to the container: `docker run --network=host -e BIND=2a02:1234::5678 ...`
## Rootless Docker Support (Experimental)
> **Note**: Rootless support is currently experimental. Please report any issues you encounter.
If you're experiencing permission issues or want better security, consider using the rootless images. These images are designed to work seamlessly with rootless Docker installations and avoid common permission problems.
### What are Rootless Images?
The rootless images differ from regular images in several ways:
- Run as UID 1000 (non-root) by default
- No dynamic UID/GID mapping (PUID/PGID not supported)
- No runtime chown operations
- All directories created with open permissions during build
### Rootless Image Tags
Each regular tag has a corresponding rootless version with the `-rootless` suffix:
- `latest-rootless` (experimental)
- `stable-rootless` (experimental)
- `2.0.55-rootless` (experimental)
### Quick Start with Rootless
```shell
docker run -d \
-p 34197:34197/udp \
-p 27015:27015/tcp \
-v ~/factorio:/factorio \
--name factorio \
--restart=unless-stopped \
factoriotools/factorio:stable-rootless
```
Key differences:
- No `chown` command needed
- No PUID/PGID environment variables
- Runs as UID 1000 by default
- No permission issues with volumes
### When to Use Rootless Images
Consider using rootless images if you:
- Are running Docker in rootless mode
- Experience permission issues with volume mounts
- Want to avoid containers running as root
- Don't need dynamic UID/GID mapping via PUID/PGID
### Limitations
- PUID/PGID environment variables are not supported
- Fixed to UID 1000 (may not match your host user)
- Experimental feature - may have undiscovered issues
## Troubleshooting
**My server is listed in the server browser, but nobody can connect**
### Permission Issues
If you're experiencing permission errors such as:
- `chown: Operation not permitted`
- `Permission denied [/factorio/saves]`
- `Util.cpp:81: Operation not permitted`
- Files owned by unexpected UIDs (like 100844 instead of 845)
Please refer to our comprehensive [Permission Issues Guide](./PERMISSION_ISSUES_GUIDE.md) for detailed solutions. Common fixes include:
- **Updating Docker** to version 20.x or newer (this resolves many issues)
- **Using the rootless image** variants (e.g., `factoriotools/factorio:stable-rootless`)
- **Setting correct ownership** for your specific Docker configuration
### My server is listed in the server browser, but nobody can connect
Check the logs. If there is the line `Own address is RIGHT IP:WRONG PORT`, then this could be caused by the Docker proxy. If the the IP and port is correct it's probably a port forwarding or firewall issue instead.
@@ -170,15 +517,24 @@ By default, Docker routes traffic through a proxy. The proxy changes the source
To fix the incorrect port, start the Docker service with the `--userland-proxy=false` switch. Docker will route traffic with iptables rules instead of a proxy. Add the switch to the `DOCKER_OPTS` environment variable or `ExecStart` in the Docker systemd service definition. The specifics vary by operating system.
**When I run a server on a port besides 34197 nobody can connect from the server browser**
### When I run a server on a port besides 34197 nobody can connect from the server browser
Use the `PORT` environment variable to start the server on the a different port, .e.g. `docker run -e "PORT=34198"`. This changes the source port on the packets used for port detection. `-p 34198:34197` works fine for private servers, but the server browser detects the wrong port.
## Contributors
# Contributors
* [dtandersen](https://github.com/dtandersen) - Maintainer
* [Fank](https://github.com/Fankserver) - Programmer of the Factorio watchdog that keeps the version up-to-date.
* [SuperSandro2000](https://github.com/supersandro2000) - CI Guy, Maintainer and runner of the Factorio watchdog. Contributed version updates and wrote the Travis scripts.
* [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
* [Rfvgyhn](https://github.com/Rfvgyhn/docker-factorio) - Coded randomly generated RCON password
* [gnomus](https://github.com/gnomus/docker_factorio_server) - Coded white listing support
* [bplein](https://github.com/bplein/docker_factorio_server) - Coded scenario support
* [jaredledvina](https://github.com/jaredledvina/docker_factorio_server) - Contributed version updates
* [carlbennett](https://github.com/carlbennett) - Contributed version updates and bugfixes
* [dtandersen](https://github.com/dtandersen/docker_factorio_server) - Maintainer
* [Zopanix](https://github.com/zopanix/docker_factorio_server) - Originator
* [Rfvgyhn](https://github.com/Rfvgyhn/docker-factorio) - Randomly generate RCON password
* [gnomus](https://github.com/gnomus/docker_factorio_server) - White listing
* [jaredledvina](https://github.com/jaredledvina/docker_factorio_server) - Version update
[^1]: Space Age mods can also be individually enabled by using their name separated by space.
Example 1: Enable all by using `true`
Example 2: Enable all by listing the mod names `space-age elevated-rails quality`
Example 3: Enable only Elevated rails `elevated-rails`

490
README_zh_CN.md Normal file
View File

@@ -0,0 +1,490 @@
# Factorio [![Docker Version](https://img.shields.io/docker/v/factoriotools/factorio?sort=semver)](https://hub.docker.com/r/factoriotools/factorio/) [![Docker Pulls](https://img.shields.io/docker/pulls/factoriotools/factorio.svg?maxAge=600)](https://hub.docker.com/r/factoriotools/factorio/) [![Docker Stars](https://img.shields.io/docker/stars/factoriotools/factorio.svg?maxAge=600)](https://hub.docker.com/r/factoriotools/factorio/)
> [!注意]
> ARM 架构支持是实验性的。如果你尝试在 Raspberry Pi 上运行,可能会遇到崩溃和延迟问题。
[English](./README.md)
<!-- start autogeneration tags -->
* `2`, `2.0`, `2.0.55`, `latest`, `stable`, `stable-2.0.55`
* `2.0.54`
* `2.0.53`
* `2.0.52`
* `2.0.51`
* `2.0.50`
* `2.0.49`
* `2.0.48`
* `2.0`, `2.0.47`, `stable-2.0.47`
* `2.0.46`
* `2.0.45`
* `2.0.44`
* `2.0`, `2.0.43`, `stable-2.0.43`
* `2.0`, `2.0.42`, `stable-2.0.42`
* `2.0`, `2.0.41`, `stable-2.0.41`
* `2.0.40`
* `2.0`, `2.0.39`, `stable-2.0.39`
* `2.0.38`
* `2.0.37`
* `2.0.36`
* `2.0.35`
* `2.0.34`
* `2.0.33`
* `2.0`, `2.0.32`, `stable-2.0.32`
* `2.0.31`
* `2.0`, `2.0.30`, `stable-2.0.30`
* `2.0.29`
* `2.0`, `2.0.28`, `stable-2.0.28`
* `2.0.27`
* `2.0.26`
* `2.0.25`
* `2.0.24`
* `2.0`, `2.0.23`, `stable-2.0.23`
* `2.0.22`
* `2.0`, `2.0.21`, `stable-2.0.21`
* `2.0`, `2.0.20`, `stable-2.0.20`
* `2.0.19`
* `2.0.18`
* `2.0.17`
* `2.0.16`
* `2.0`, `2.0.15`, `stable-2.0.15`
* `2.0`, `2.0.14`, `stable-2.0.14`
* `2.0`, `2.0.13`, `stable-2.0.13`
* `1`, `1.1`, `1.1.110`, `stable-1.1.110`
* `1.0`, `1.0.0`
* `0.17`, `0.17.79`
* `0.16`, `0.16.51`
* `0.15`, `0.15.40`
* `0.14`, `0.14.23`
* `0.13`, `0.13.20`
* `0.12`, `0.12.35`<!-- end autogeneration tags -->
## 标签描述
* `latest` - 最新版本(可能含有实验性功能)。
* `stable` - 在 [factorio.com](https://www.factorio.com) 上声明为稳定的版本([FFF-435 自 2.0 版本起,版本首先作为实验版发布,一旦稳定就会被标记为稳定版](https://factorio.com/blog/post/fff-435))。
* `0.x` - 某个分支上的最新版本。
* `0.x.y` - 具体的版本。
* `0.x-z` - 该版本的增量修复。
## 什么是 Factorio
[Factorio](https://www.factorio.com) 是一款建造和维护工厂的游戏。
在游戏中,你将挖掘资源、研发科技、建设基础设施、自动化生产并与敌人战斗。发挥你的想象力来设计工厂,将简单的元素组合成巧妙的结构,运用管理技能保持其正常运转,最后保护它不受那些不太喜欢你的生物的侵害。
游戏非常稳定,并为建造大规模工厂进行了优化。你可以创建自己的地图,用 Lua 编写模组,或通过多人游戏与朋友一起游戏。
**注意**:这仅仅是服务端。完整游戏可在 [Factorio.com](https://www.factorio.com)、[Steam](https://store.steampowered.com/app/427520/)、[GOG.com](https://www.gog.com/game/factorio) 和 [Humble Bundle](https://www.humblebundle.com/store/factorio) 获得。
## 使用方法
### 快速开始
运行服务端以创建必要的文件夹结构和配置文件。在这个例子中,数据存储在 `/opt/factorio`
```shell
sudo mkdir -p /opt/factorio
sudo chown 845:845 /opt/factorio
sudo docker run -d \
-p 34197:34197/udp \
-p 27015:27015/tcp \
-v /opt/factorio:/factorio \
--name factorio \
--restart=unless-stopped \
factoriotools/factorio
```
对于 Docker 新手,这里解释一下选项:
* `-d` - 以守护进程方式运行("分离"模式)。
* `-p` - 暴露端口。
* `-v` - 将本地文件系统的 `/opt/factorio` 挂载到容器中的 `/factorio`
* `--restart` - 如果服务端崩溃或系统启动时重启服务端。
* `--name` - 将容器命名为 "factorio"(否则它会有一个有趣的随机名称)。
需要 `chown` 命令是因为在 0.16+ 版本中,出于安全原因,我们不再以 root 身份运行游戏服务端,而是以用户 ID 为 845 的 'factorio' 用户身份运行。因此主机必须允许该用户写入这些文件。
检查日志以查看发生了什么:
```shell
docker logs factorio
```
停止服务端:
```shell
docker stop factorio
```
现在在 `/opt/factorio/config` 文件夹中有一个 `server-settings.json` 文件。根据你的喜好修改它并重启服务端:
```shell
docker start factorio
```
尝试连接到服务端。如果无法正常工作,请检查日志。
### 控制台
要向服务端发出控制台命令,请使用 `-it` 以交互模式启动服务端。使用 `docker attach` 打开控制台,然后输入命令。
```shell
docker run -d -it \
--name factorio \
factoriotools/factorio
docker attach factorio
```
### RCON (2.0.18+)
或者(例如用于脚本),可以使用 RCON 连接向正在运行的 factorio 服务端发送命令。
这不需要暴露 RCON 连接。
```shell
docker exec factorio rcon /h
```
### 更新
在升级服务端之前,请备份存档。在客户端中制作存档很容易。
确保在运行服务端时使用了 `-v` 参数,这样存档就在 Docker 容器外部。`docker rm` 命令会完全销毁容器,如果存档没有存储在数据卷中,也会包括存档。
删除容器并刷新镜像:
```shell
docker stop factorio
docker rm factorio
docker pull factoriotools/factorio
```
现在像之前一样运行服务端。大约一分钟后,新版本的 Factorio 应该就会运行起来,完整保留存档和配置!
### 存档
服务端首次启动时会生成一个名为 `_autosave1.zip` 的新地图。使用 `/opt/factorio/config` 中的 `map-gen-settings.json``map-settings.json` 文件作为地图设置。在后续运行中使用最新的存档。
要加载旧存档,请停止服务端并运行命令 `touch oldsave.zip`。这会重置日期。然后重启服务端。另一个选择是删除除一个存档外的所有存档。
要生成新地图,请停止服务端,删除所有存档并重启服务端。
#### 直接指定存档0.17.79-2+
你可以通过一组环境变量配置服务端来指定要加载的特定存档:
要加载现有存档,请将 `SAVE_NAME` 设置为位于 `saves` 目录中的现有存档文件名,不包含 `.zip` 扩展名:
```shell
sudo docker run -d \
-p 34197:34197/udp \
-p 27015:27015/tcp \
-v /opt/factorio:/factorio \
-e LOAD_LATEST_SAVE=false \
-e SAVE_NAME=replaceme \
--name factorio \
--restart=unless-stopped \
factoriotools/factorio
```
要生成新地图,请设置 `GENERATE_NEW_SAVE=true` 并指定 `SAVE_NAME`
```shell
sudo docker run -d \
-p 34197:34197/udp \
-p 27015:27015/tcp \
-v /opt/factorio:/factorio \
-e LOAD_LATEST_SAVE=false \
-e GENERATE_NEW_SAVE=true \
-e SAVE_NAME=replaceme \
--name factorio \
--restart=unless-stopped \
factoriotools/factorio
```
### Mods-模组
将模组复制到 mods 文件夹中并重启服务端。
从 0.17 版本开始,添加了一个新的环境变量 `UPDATE_MODS_ON_START`,如果设置为 `true`,将在服务端启动时更新模组。如果设置了此选项,必须提供有效的 [Factorio 用户名和令牌](https://www.factorio.com/profile),否则服务端将不会启动。它们可以设置为 docker secrets、环境变量或从 server-settings.json 文件中获取。
### Scenarios-场景
如果你想从全新开始启动场景(而不是从保存的地图),你需要从备用入口点启动 docker 镜像。为此,请使用存储在卷中 /factorio/entrypoints 目录中的示例入口点文件,并使用以下语法启动镜像。请注意,这是正常语法,添加了 --entrypoint 设置和末尾的附加参数,这是 Scenarios 文件夹中场景的名称。
```shell
docker run -d \
-p 34197:34197/udp \
-p 27015:27015/tcp \
-v /opt/factorio:/factorio \
--name factorio \
--restart=unless-stopped \
--entrypoint "/scenario.sh" \
factoriotools/factorio \
MyScenarioName
```
### 将场景转换为常规地图
如果你想将场景导出为保存的地图可以使用类似于上述场景用法的示例入口点。Factorio 将运行一次,将场景转换为 saves 目录中的保存地图。然后使用标准选项重启 docker 镜像将加载该地图,就像上述场景示例刚启动的场景一样。
```shell
docker run -d \
-p 34197:34197/udp \
-p 27015:27015/tcp \
-v /opt/factorio:/factorio \
--name factorio \
--restart=unless-stopped \
--entrypoint "/scenario2map.sh" \
factoriotools/factorio
MyScenarioName
```
### RCON
`rconpw` 文件中设置 RCON 密码。如果 `rconpw` 不存在,将生成随机密码。
要更改密码,请停止服务端,修改 `rconpw`,然后重启服务端。
要"禁用" RCON请不要暴露端口 27015即不使用 `-p 27015:27015/tcp` 启动服务端。RCON 仍在运行,但没有人可以连接到它。
### 白名单 (0.15.3+)
创建文件 `config/server-whitelist.json` 并添加白名单用户。
```json
[
"you",
"friend"
]
```
### 黑名单 (0.17.1+)
创建文件 `config/server-banlist.json` 并添加黑名单用户。
```json
[
"bad_person",
"other_bad_person"
]
```
### 管理员列表 (0.17.1+)
创建文件 `config/server-adminlist.json` 并添加管理员用户。
```json
[
"you",
"friend"
]
```
### 自定义配置文件 (0.17.x+)
开箱即用的 factorio 不支持配置文件中的环境变量。一个解决方法是使用 `envsubst`,它在启动期间从 docker-compose 中设置的环境变量动态生成配置文件:
替换 server-settings.json 的示例:
```yaml
factorio_1:
image: factoriotools/factorio
ports:
- "34197:34197/udp"
volumes:
- /opt/factorio:/factorio
- ./server-settings.json:/server-settings.json
environment:
- INSTANCE_NAME=Your Instance's Name
- INSTANCE_DESC=Your Instance's Description
entrypoint: /bin/sh -c "mkdir -p /factorio/config && envsubst < /server-settings.json > /factorio/config/server-settings.json && exec /docker-entrypoint.sh"
```
然后 `server-settings.json` 文件可能包含这样的变量引用:
```json
"name": "${INSTANCE_NAME}",
"description": "${INSTANCE_DESC}",
```
### 环境变量
这些是可以在容器运行时指定的环境变量。
| 变量名 | 描述 | 默认值 | 可用版本 |
|---------------------|----------------------------------------------------------------|----------------|--------------|
| GENERATE_NEW_SAVE | 如果在启动服务端之前不存在存档,则生成新存档 | false | 0.17+ |
| LOAD_LATEST_SAVE | 为 true 时加载最新存档。否则加载 SAVE_NAME | true | 0.17+ |
| PORT | 服务端监听的 UDP 端口 | 34197 | 0.15+ |
| BIND | 服务端监听的 IP 地址v4 或 v6(IP\[:PORT]) | | 0.15+ |
| RCON_PORT | rcon 服务端监听的 TCP 端口 | 27015 | 0.15+ |
| SAVE_NAME | 存档文件使用的名称 | _autosave1 | 0.17+ |
| TOKEN | factorio.com 令牌 | | 0.17+ |
| UPDATE_MODS_ON_START| 是否在启动服务端之前更新模组 | | 0.17+ |
| USERNAME | factorio.com 用户名 | | 0.17+ |
| CONSOLE_LOG_LOCATION| 将控制台日志保存到指定位置 | | |
| DLC_SPACE_AGE | 在 mod-list.json 中启用或禁用 DLC Space Age 的模组[^1] | true | 2.0.8+ |
| MODS | 要使用的模组目录 | /factorio/mods | 2.0.8+ |
**注意**:所有环境变量都作为字符串进行比较
## 容器细节
理念是[保持简单](http://wiki.c2.com/?KeepItSimple)。
* 服务端应该自启动。
* 优先使用配置文件而不是环境变量。
* 使用一个数据卷。
### 数据卷
为了保持简单,容器使用挂载在 `/factorio` 的单个卷。此卷存储配置、模组和存档。
此卷中的文件应该由 factorio 用户拥有uid 845。
```text
factorio
|-- config
| |-- map-gen-settings.json
| |-- map-settings.json
| |-- rconpw
| |-- server-adminlist.json
| |-- server-banlist.json
| |-- server-settings.json
| `-- server-whitelist.json
|-- mods
| `-- fancymod.zip
`-- saves
`-- _autosave1.zip
```
## Docker Compose
[Docker Compose](https://docs.docker.com/compose/install/) 是运行 Docker 容器的简便方法。
* 需要 docker-engine >= 1.10.0
* 需要 docker-compose >=1.6.0
首先获取一个 [docker-compose.yml](https://github.com/factoriotools/factorio-docker/blob/master/docker/docker-compose.yml) 文件。从此仓库获取:
```shell
git clone https://github.com/factoriotools/factorio-docker.git
cd factorio-docker/docker
```
或者创建你自己的:
```yaml
version: '2'
services:
factorio:
image: factoriotools/factorio
ports:
- "34197:34197/udp"
- "27015:27015/tcp"
volumes:
- /opt/factorio:/factorio
```
现在 cd 到包含 docker-compose.yml 的目录并运行:
```shell
sudo mkdir -p /opt/factorio
sudo chown 845:845 /opt/factorio
sudo docker-compose up -d
```
### 端口
* `34197/udp` - 游戏服务端(必需)。可以通过 `PORT` 环境变量更改。
* `27015/tcp` - RCON可选
## 局域网游戏
确保 server-settings.json 中的 `lan` 设置为 `true`
```json
"visibility":
{
"public": false,
"lan": true
},
```
使用 `--network=host` 选项启动容器,以便客户端可以自动找到局域网游戏。参考快速入门来创建 `/opt/factorio` 目录。
```shell
sudo docker run -d \
--network=host \
-p 34197:34197/udp \
-p 27015:27015/tcp \
-v /opt/factorio:/factorio \
--name factorio \
--restart=unless-stopped \
factoriotools/factorio
```
## 部署到其他平台
### Vagrant
[Vagrant](https://www.vagrantup.com/) 是设置虚拟机VM运行 Docker 的简便方法。[Factorio Vagrant box 仓库](https://github.com/dtandersen/factorio-lan-vagrant)包含一个示例 Vagrantfile。
对于局域网游戏VM 需要内部 IP 以便客户端连接。一种方法是使用公共网络。VM 使用 DHCP 获取 IP 地址。VM 还必须转发端口 34197。
```ruby
config.vm.network "public_network"
config.vm.network "forwarded_port", guest: 34197, host: 34197
```
### Amazon Web Services (AWS) 部署
如果你正在寻找一种简单的方法将此部署到 Amazon Web Services 云,请查看 [Factorio Server Deployment (CloudFormation) 仓库](https://github.com/m-chandler/factorio-spot-pricing)。此仓库包含一个 CloudFormation 模板,可以让你在几分钟内在 AWS 上运行起来。它可选择使用 Spot Pricing因此服务端非常便宜你可以在不使用时轻松关闭它。
## 使用反向代理
如果你需要使用反向代理,可以使用以下 nginx 片段:
```
stream {
server {
listen 34197 udp reuseport;
proxy_pass my.upstream.host:34197;
}
}
```
如果你的 factorio 主机使用多个 IP 地址IPv6 非常常见),你可能还需要将 Factorio 绑定到单个 IP否则 UDP 代理可能会因 IP 不匹配而混乱)。要做到这一点,将 `BIND` 环境变量传递给容器:`docker run --network=host -e BIND=2a02:1234::5678 ...`
## 疑难解答
### 我的服务端在服务端浏览器中列出,但没有人可以连接
检查日志。如果有一行显示 `Own address is RIGHT IP:WRONG PORT`,那么这可能是由 Docker 代理引起的。如果 IP 和端口是正确的,可能是端口转发或防火墙问题。
默认情况下Docker 通过代理路由流量。代理更改源 UDP 端口,因此检测到错误的端口。有关详细信息,请参阅论坛帖子 *[docker 托管服务端检测到错误端口](https://forums.factorio.com/viewtopic.php?f=49&t=35255)*
为了修复错误端口,使用 `--userland-proxy=false` 开关启动 Docker 服务。Docker 将使用 iptables 规则而不是代理路由流量。将开关添加到 `DOCKER_OPTS` 环境变量或 Docker systemd 服务定义中的 `ExecStart`。具体情况因操作系统而异。
### 当我在 34197 之外的端口上运行服务端时,没有人可以从服务端浏览器连接
使用 `PORT` 环境变量在不同端口上启动服务端,例如 `docker run -e "PORT=34198"`。这会更改用于端口检测的数据包的源端口。`-p 34198:34197` 对于私人服务端工作正常,但服务端浏览器检测到错误的端口。
## 贡献者
* [dtandersen](https://github.com/dtandersen) - 维护者
* [Fank](https://github.com/Fankserver) - Factorio 监视程序的程序员,保持版本更新。
* [SuperSandro2000](https://github.com/supersandro2000) - CI 负责人,维护者和 Factorio 监视程序的运行者。贡献版本更新并编写了 Travis 脚本。
* [DBendit](https://github.com/DBendit/docker_factorio_server) - 编写了管理员列表、禁止列表支持并贡献版本更新
* [Zopanix](https://github.com/zopanix/docker_factorio_server) - 原作者
* [Rfvgyhn](https://github.com/Rfvgyhn/docker-factorio) - 编写了随机生成的 RCON 密码
* [gnomus](https://github.com/gnomus/docker_factorio_server) - 编写了白名单支持
* [bplein](https://github.com/bplein/docker_factorio_server) - 编写了场景支持
* [jaredledvina](https://github.com/jaredledvina/docker_factorio_server) - 贡献版本更新
* [carlbennett](https://github.com/carlbennett) - 贡献版本更新和错误修复
[^1]: Space Age 模组也可以通过使用它们的名称(用空格分隔)来单独启用。
示例 1使用 `true` 启用所有
示例 2通过列出模组名称启用所有 `space-age elevated-rails quality`
示例 3仅启用 Elevated rails `elevated-rails`

157
build.py Executable file
View File

@@ -0,0 +1,157 @@
#!/usr/bin/env python3
import os
import json
import subprocess
import shutil
import sys
import tempfile
import argparse
PLATFORMS = [
"linux/arm64",
"linux/amd64",
]
def create_builder(build_dir, builder_name, platform):
check_exists_command = ["docker", "buildx", "inspect", builder_name]
if subprocess.run(check_exists_command, stderr=subprocess.DEVNULL).returncode != 0:
create_command = ["docker", "buildx", "create", "--platform", platform, "--name", builder_name]
try:
subprocess.run(create_command, cwd=build_dir, check=True)
except subprocess.CalledProcessError:
print("Creating builder failed")
exit(1)
def build_and_push_multiarch(build_dir, build_args, push, builder_suffix=""):
builder_name = f"factoriotools{builder_suffix}-multiarch"
platform = ",".join(PLATFORMS)
create_builder(build_dir, builder_name, platform)
build_command = ["docker", "buildx", "build", "--platform", platform, "--builder", builder_name] + build_args
if push:
build_command.append("--push")
try:
subprocess.run(build_command, cwd=build_dir, check=True)
except subprocess.CalledProcessError:
print(f"Build and push of {builder_suffix or 'regular'} image failed")
exit(1)
def build_singlearch(build_dir, build_args, image_type="regular"):
build_command = ["docker", "build"] + build_args
try:
subprocess.run(build_command, cwd=build_dir, check=True)
except subprocess.CalledProcessError:
print(f"Build of {image_type} image failed")
exit(1)
def push_singlearch(tags):
for tag in tags:
try:
subprocess.run(["docker", "push", f"factoriotools/factorio:{tag}"],
check=True)
except subprocess.CalledProcessError:
print("Docker push failed")
exit(1)
def build_and_push(sha256, version, tags, push, multiarch, dockerfile="Dockerfile", builder_suffix=""):
build_dir = tempfile.mktemp()
shutil.copytree("docker", build_dir)
build_args = ["-f", dockerfile, "--build-arg", f"VERSION={version}", "--build-arg", f"SHA256={sha256}", "."]
for tag in tags:
build_args.extend(["-t", f"factoriotools/factorio:{tag}"])
image_type = "rootless" if "rootless" in dockerfile.lower() else "regular"
if multiarch:
build_and_push_multiarch(build_dir, build_args, push, builder_suffix)
else:
build_singlearch(build_dir, build_args, image_type)
if push:
push_singlearch(tags)
def login():
try:
username = os.environ["DOCKER_USERNAME"]
password = os.environ["DOCKER_PASSWORD"]
subprocess.run(["docker", "login", "-u", username, "-p", password], check=True)
except KeyError:
print("Username and password need to be given")
exit(1)
except subprocess.CalledProcessError:
print("Docker login failed")
exit(1)
def generate_rootless_tags(original_tags):
"""Generate rootless-specific tags from original tags"""
return [f"{tag}-rootless" for tag in original_tags]
def main():
parser = argparse.ArgumentParser(description='Build Factorio Docker images')
parser.add_argument('--push-tags', action='store_true', help='Push images to Docker Hub')
parser.add_argument('--multiarch', action='store_true', help='Build multi-architecture images')
parser.add_argument('--rootless', action='store_true', help='Build only rootless images')
parser.add_argument('--both', action='store_true', help='Build both regular and rootless images')
parser.add_argument('--only-stable-latest', action='store_true',
help='Build only stable and latest versions (for rootless by default)')
args = parser.parse_args()
# Default behavior: build regular images unless specified otherwise
build_regular = not args.rootless or args.both
build_rootless = args.rootless or args.both
with open(os.path.join(os.path.dirname(__file__), "buildinfo.json")) as file_handle:
builddata = json.load(file_handle)
if args.push_tags:
login()
# Filter versions if needed
versions_to_build = []
for version, buildinfo in sorted(builddata.items(), key=lambda item: item[0], reverse=True):
if args.only_stable_latest or (build_rootless and not build_regular):
# For rootless-only builds, default to stable/latest only
if "stable" in buildinfo["tags"] or "latest" in buildinfo["tags"]:
versions_to_build.append((version, buildinfo))
else:
versions_to_build.append((version, buildinfo))
# Build regular images
if build_regular:
print("Building regular images...")
for version, buildinfo in versions_to_build:
sha256 = buildinfo["sha256"]
tags = buildinfo["tags"]
build_and_push(sha256, version, tags, args.push_tags, args.multiarch)
# Build rootless images
if build_rootless:
print("Building rootless images...")
# For rootless, only build stable and latest unless building both
rootless_versions = []
if not build_regular or args.only_stable_latest:
for version, buildinfo in builddata.items():
if "stable" in buildinfo["tags"] or "latest" in buildinfo["tags"]:
rootless_versions.append((version, buildinfo))
else:
rootless_versions = versions_to_build
for version, buildinfo in rootless_versions:
sha256 = buildinfo["sha256"]
original_tags = buildinfo["tags"]
rootless_tags = generate_rootless_tags(original_tags)
build_and_push(sha256, version, rootless_tags, args.push_tags, args.multiarch,
dockerfile="Dockerfile.rootless", builder_suffix="-rootless")
if __name__ == '__main__':
main()

104
build_legacy.sh Executable file
View File

@@ -0,0 +1,104 @@
#!/bin/bash
set -eoux pipefail
if [[ -z ${1:-} && -n ${CI:-} ]]; then
echo 'Usage: ./build.sh VERSION_SHORT'
exit 1
elif [[ ${CI:-} == true || -n ${1:-} ]]; then
VERSION_SHORT="$1"
else
VERSION_SHORT=$(find . -maxdepth 1 -type d | sort | tail -1 | grep -o "[[0-9]].[[0-9]]*")
EXTRA_TAG=latest
fi
cd "$VERSION_SHORT" || exit 1
VERSION=$(grep -oP '[0-9]+\.[0-9]+\.[0-9]+' Dockerfile | head -1)
DOCKER_REPO=factoriotools/factorio
BRANCH=${GITHUB_REF#refs/*/}
if [[ -n ${GITHUB_BASE_REF:-} ]]; then
TAGS="-t $DOCKER_REPO:$GITHUB_BASE_REF"
else
if [[ -n ${CI:-} ]]; then
# we are either on master or on a tag build
if [[ ${BRANCH:-} == master || ${BRANCH:-} == "$VERSION" ]]; then
TAGS="-t $DOCKER_REPO:$VERSION -t $DOCKER_REPO:$VERSION_SHORT"
# we are on an incremental build of a tag
elif [[ $VERSION == "${BRANCH%-*}" ]]; then
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
elif [[ -n ${BRANCH:-} && ! $BRANCH =~ "/" ]]; then
TAGS="-t $DOCKER_REPO:$BRANCH"
fi
else
# we are not in CI and tag version and version short
TAGS="-t $DOCKER_REPO:$VERSION -t $DOCKER_REPO:$VERSION_SHORT"
fi
if [[ -n ${EXTRA_TAG:-} ]]; then
IFS=","
for TAG in $EXTRA_TAG; do
TAGS+=" -t $DOCKER_REPO:$TAG"
done
fi
if [[ ${STABLE:-} == "$VERSION" ]]; then
TAGS+=" -t $DOCKER_REPO:stable"
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
eval docker build . ${TAGS[@]:-}
docker images
# remove -1 from incremental tag
# eg before: 0.18.24-1, after 0.18.24
if [[ ${BRANCH:-} ]]; then
BRANCH_VERSION=${BRANCH%-*}
fi
# only push when:
# or we build a tag and we don't build a PR
if [[ $VERSION == "${BRANCH_VERSION:-}" && ${GITHUB_BASE_REF:-} == "" ]] ||
# or we are not in CI
[[ -z ${CI:-} ]]; then
if [[ ${CI:-} == true ]]; then
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
fi
# push a tag on a branch other than master except dependabot branches cause docker does not support /
if [[ -n ${BRANCH:-} && $VERSION != "${BRANCH_VERSION:-}" && ${BRANCH:-} != "master" && ! ${BRANCH:-} =~ "/" ]]; then
docker push "$DOCKER_REPO:$BRANCH"
fi
# push an incremental tag
# eg 0.18.24-1
if [[ $VERSION == "${BRANCH_VERSION:-}" ]]; then
docker push "$DOCKER_REPO:$BRANCH"
fi
# only push on tags or when manually running the script
if [[ -n ${BRANCH_VERSION:-} || -z ${CI:-} ]]; then
docker push "$DOCKER_REPO:$VERSION"
docker push "$DOCKER_REPO:$VERSION_SHORT"
fi
if [[ -n ${EXTRA_TAG:-} ]]; then
IFS=","
for TAG in $EXTRA_TAG; do
docker push "$DOCKER_REPO:$TAG"
done
fi
if [[ ${STABLE:-} == "$VERSION" ]]; then
docker push "$DOCKER_REPO:stable"
fi
fi

19
buildinfo.json Normal file
View File

@@ -0,0 +1,19 @@
{
"2.0.60": {
"sha256": "69b5be1a867fd99524f9914dfee900a1ac386cf4e74c4a63768c05dc4d2b2b0b",
"tags": [
"stable",
"stable-2.0.60",
"2",
"2.0",
"2.0.60"
]
},
"2.0.65": {
"sha256": "6b80f0fbeb43753ed7654695ffa427f442496068f2f72129de76cea246a0c63e",
"tags": [
"latest",
"2.0.65"
]
}
}

38
docker-compose.yml Normal file
View File

@@ -0,0 +1,38 @@
version: "2"
services:
factorio:
container_name: factorio
image: factoriotools/factorio:stable
restart: unless-stopped
ports:
- "34197:34197/udp"
- "27015:27015/tcp"
volumes:
- ./data:/factorio
environment:
- UPDATE_MODS_ON_START=true
# Uncomment to enable autoupdate via watchtower
#labels:
# # Labels to allow watchtower autoupdate only if no players are online
# - com.centurylinklabs.watchtower.enable=true
# - com.centurylinklabs.watchtower.scope=factorio
# - com.centurylinklabs.watchtower.lifecycle.pre-update="/players-online.sh"
# Uncomment the following files to use watchtower for updating the factorio container
# Full documentation of watchtower: https://github.com/containrrr/watchtower
#watchtower:
# container_name: watchtower_factorio
# image: containrrr/watchtower
# restart: unless-stopped
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock
# environment:
# # Only update containers which have the option 'watchtower.enable=true' set
# - WATCHTOWER_TIMEOUT=30s
# - WATCHTOWER_LABEL_ENABLE=true
# - WATCHTOWER_POLL_INTERVAL=3600
# - WATCHTOWER_LIFECYCLE_HOOKS=true
# - WATCHTOWER_SCOPE=factorio
# labels:
# - com.centurylinklabs.watchtower.scope=factorio

97
docker/Dockerfile Executable file
View File

@@ -0,0 +1,97 @@
# build rcon client
FROM debian:stable-slim AS rcon-builder
RUN apt-get -q update \
&& DEBIAN_FRONTEND=noninteractive apt-get -qy install build-essential
WORKDIR /src
COPY rcon/ /src
RUN make
# build factorio image
FROM debian:stable-slim
LABEL maintainer="https://github.com/factoriotools/factorio-docker"
ARG USER=factorio
ARG GROUP=factorio
ARG PUID=845
ARG PGID=845
ARG BOX64_VERSION=v0.2.4
# optionally utilize a built-in map-gen-preset (see data/base/prototypes/map-gen-presets
# if this is used, the preset will be used over any .json files supplied
# vanilla factorio provides the following presets:
# rich-resources, marathon, death-world, death-world-marathon, rail-world, ribbon-world, island
# a modded factorio example for using this:
# space-exploration
ARG PRESET
# number of retries that curl will use when pulling the headless server tarball
ARG CURL_RETRIES=8
ENV PORT=34197 \
RCON_PORT=27015 \
SAVES=/factorio/saves \
PRESET="$PRESET" \
CONFIG=/factorio/config \
MODS=/factorio/mods \
SCENARIOS=/factorio/scenarios \
SCRIPTOUTPUT=/factorio/script-output \
PUID="$PUID" \
PGID="$PGID" \
DLC_SPACE_AGE="true"
SHELL ["/bin/bash", "-eo", "pipefail", "-c"]
RUN apt-get -q update \
&& DEBIAN_FRONTEND=noninteractive apt-get -qy install ca-certificates curl jq pwgen xz-utils procps gettext-base file --no-install-recommends \
&& if [[ "$(uname -m)" == "aarch64" ]]; then \
echo "installing ARM compatability layer" \
&& DEBIAN_FRONTEND=noninteractive apt-get -qy install unzip --no-install-recommends \
&& curl -LO https://github.com/ptitSeb/box64/releases/download/${BOX64_VERSION}/box64-GENERIC_ARM-RelWithDebInfo.zip \
&& unzip box64-GENERIC_ARM-RelWithDebInfo.zip -d /bin \
&& rm -f box64-GENERIC_ARM-RelWithDebInfo.zip \
&& chmod +x /bin/box64; \
fi \
&& rm -rf /var/lib/apt/lists/*
RUN groupadd --system --gid "$PGID" "$GROUP" \
&& useradd --system --uid "$PUID" --gid "$PGID" --no-create-home --shell /bin/sh "$USER"
# version checksum of the archive to download
ARG VERSION
ARG SHA256
LABEL factorio.version=${VERSION}
ENV VERSION=${VERSION} \
SHA256=${SHA256}
RUN set -ox pipefail \
&& if [[ "${VERSION}" == "" ]]; then \
echo "build-arg VERSION is required" \
&& exit 1; \
fi \
&& if [[ "${SHA256}" == "" ]]; then \
echo "build-arg SHA256 is required" \
&& exit 1; \
fi \
&& archive="/tmp/factorio_headless_x64_$VERSION.tar.xz" \
&& mkdir -p /opt /factorio \
&& curl -sSL "https://www.factorio.com/get-download/$VERSION/headless/linux64" -o "$archive" --retry $CURL_RETRIES \
&& echo "$SHA256 $archive" | sha256sum -c \
|| (sha256sum "$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/ \
&& chown -R "$USER":"$GROUP" /opt/factorio /factorio
COPY files/*.sh /
COPY files/config.ini /opt/factorio/config/config.ini
COPY --from=rcon-builder /src/rcon /bin/rcon
VOLUME /factorio
EXPOSE $PORT/udp $RCON_PORT/tcp
ENTRYPOINT ["/docker-entrypoint.sh"]

View File

@@ -0,0 +1,91 @@
# build rcon client
FROM debian:stable-slim AS rcon-builder
RUN apt-get -q update \
&& DEBIAN_FRONTEND=noninteractive apt-get -qy install build-essential --no-install-recommends
WORKDIR /src
COPY rcon/ /src
RUN make
# build factorio image
FROM debian:stable-slim
LABEL maintainer="https://github.com/factoriotools/factorio-docker"
ARG BOX64_VERSION=v0.2.4
# optionally utilize a built-in map-gen-preset (see data/base/prototypes/map-gen-presets
ARG PRESET
# number of retries that curl will use when pulling the headless server tarball
ARG CURL_RETRIES=8
ENV PORT=34197 \
RCON_PORT=27015 \
SAVES=/factorio/saves \
PRESET="$PRESET" \
CONFIG=/factorio/config \
MODS=/factorio/mods \
SCENARIOS=/factorio/scenarios \
SCRIPTOUTPUT=/factorio/script-output \
DLC_SPACE_AGE="true"
SHELL ["/bin/bash", "-eo", "pipefail", "-c"]
RUN apt-get -q update \
&& DEBIAN_FRONTEND=noninteractive apt-get -qy install ca-certificates curl jq pwgen xz-utils procps gettext-base --no-install-recommends \
&& if [[ "$(uname -m)" == "aarch64" ]]; then \
echo "installing ARM compatability layer" \
&& DEBIAN_FRONTEND=noninteractive apt-get -qy install unzip --no-install-recommends \
&& curl -LO https://github.com/ptitSeb/box64/releases/download/${BOX64_VERSION}/box64-GENERIC_ARM-RelWithDebInfo.zip \
&& unzip box64-GENERIC_ARM-RelWithDebInfo.zip -d /bin \
&& rm -f box64-GENERIC_ARM-RelWithDebInfo.zip \
&& chmod +x /bin/box64; \
fi \
&& rm -rf /var/lib/apt/lists/*
# version checksum of the archive to download
ARG VERSION
ARG SHA256
LABEL factorio.version=${VERSION}
ENV VERSION=${VERSION} \
SHA256=${SHA256}
RUN set -ox pipefail \
&& if [[ "${VERSION}" == "" ]]; then \
echo "build-arg VERSION is required" \
&& exit 1; \
fi \
&& if [[ "${SHA256}" == "" ]]; then \
echo "build-arg SHA256 is required" \
&& exit 1; \
fi \
&& archive="/tmp/factorio_headless_x64_$VERSION.tar.xz" \
&& mkdir -p /opt /factorio \
&& curl -sSL "https://www.factorio.com/get-download/$VERSION/headless/linux64" -o "$archive" --retry $CURL_RETRIES \
&& echo "$SHA256 $archive" | sha256sum -c \
|| (sha256sum "$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/
COPY files/*.sh /
COPY files/docker-entrypoint-rootless.sh /docker-entrypoint.sh
COPY files/config.ini /opt/factorio/config/config.ini
COPY --from=rcon-builder /src/rcon /bin/rcon
# Make all scripts executable and set proper permissions for the factorio directory
RUN chmod +x /*.sh \
&& chmod -R 777 /opt/factorio /factorio
VOLUME /factorio
EXPOSE $PORT/udp $RCON_PORT/tcp
# Run as non-root user (UID 1000 is common for the first user in rootless containers)
USER 1000:1000
ENTRYPOINT ["/docker-entrypoint.sh"]

28
docker/docker-compose.yml Normal file
View File

@@ -0,0 +1,28 @@
version: '2'
services:
factorio:
build:
context: .
args:
# Check buildinfo.json for supported versions and SHAs
# https://github.com/factoriotools/factorio-docker/blob/master/buildinfo.json
- VERSION=2.0.60
- SHA256=69b5be1a867fd99524f9914dfee900a1ac386cf4e74c4a63768c05dc4d2b2b0b
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
# - PRESET=deathworld
# - ADDR=::1
# # Uncomment the following line to enable the use of the host's network stack,
# # which may be necessary for some setups like NAS or when using some proxy service like firewall rules.
# extra_hosts:
# - "host.docker.internal:host-gateway"

755
docker/files/config.ini Normal file
View 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=

57
docker/files/docker-dlc.sh Executable file
View File

@@ -0,0 +1,57 @@
#!/bin/bash
set -eou pipefail
# Path to the mod-list.json file
MOD_LIST_FILE="$MODS/mod-list.json"
ALL_SPACE_AGE_MODS=("elevated-rails" "quality" "space-age")
if [[ ! -f "$MOD_LIST_FILE" ]]; then
# Create the mod-list.json file if it doesn't exist
echo '{"mods":[{"name":"base","enabled":true}]}' > "$MOD_LIST_FILE"
fi
enable_mod()
{
echo "Enable mod $1 for DLC"
jq --arg mod_name "$1" 'if .mods | map(.name) | index($mod_name) then .mods |= map(if .name == $mod_name and .enabled == false then .enabled = true else . end) else . end' "$MOD_LIST_FILE" > "$MOD_LIST_FILE.tmp"
mv "$MOD_LIST_FILE.tmp" "$MOD_LIST_FILE"
}
disable_mod()
{
echo "Disable mod $1 for DLC"
jq --arg mod_name "$1" 'if .mods | map(.name) | index($mod_name) then .mods |= map(if .name == $mod_name and .enabled == true then .enabled = false else . end) else .mods += [{"name": $mod_name, "enabled": false}] end' "$MOD_LIST_FILE" > "$MOD_LIST_FILE.tmp"
mv "$MOD_LIST_FILE.tmp" "$MOD_LIST_FILE"
}
# Enable or disable DLCs if configured
if [[ ${DLC_SPACE_AGE:-} == "true" ]]; then
# Define the DLC mods
ENABLE_MODS=(${ALL_SPACE_AGE_MODS[@]})
elif [[ ${DLC_SPACE_AGE:-} == "false" ]]; then
# Define the DLC mods
DISABLE_MODS=(${ALL_SPACE_AGE_MODS[@]})
else
ENABLE_MODS=()
DISABLE_MODS=()
for SPACE_AGE_MOD in "${ALL_SPACE_AGE_MODS[@]}"; do
REGEX="(^|\s)$SPACE_AGE_MOD($|\s)"
if [[ "$DLC_SPACE_AGE" =~ $REGEX ]]; then
ENABLE_MODS+=($SPACE_AGE_MOD)
else
DISABLE_MODS+=($SPACE_AGE_MOD)
fi
done
fi
# Iterate over each DLC mod to enable
for MOD in "${ENABLE_MODS[@]}"; do
enable_mod "$MOD"
done
# Iterate over each DLC mod to disable
for MOD in "${DISABLE_MODS[@]}"; do
disable_mod "$MOD"
done

View File

@@ -0,0 +1,123 @@
#!/bin/bash
set -eoux pipefail
INSTALLED_DIRECTORY=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")
FACTORIO_VOL=/factorio
LOAD_LATEST_SAVE="${LOAD_LATEST_SAVE:-true}"
GENERATE_NEW_SAVE="${GENERATE_NEW_SAVE:-false}"
PRESET="${PRESET:-""}"
SAVE_NAME="${SAVE_NAME:-""}"
BIND="${BIND:-""}"
CONSOLE_LOG_LOCATION="${CONSOLE_LOG_LOCATION:-""}"
# Create directories if they don't exist
# In rootless mode, these should be writable by the container user
mkdir -p "$FACTORIO_VOL"
mkdir -p "$SAVES"
mkdir -p "$CONFIG"
mkdir -p "$MODS"
mkdir -p "$SCENARIOS"
mkdir -p "$SCRIPTOUTPUT"
# Generate RCON password if needed
if [[ ! -f $CONFIG/rconpw ]]; then
pwgen 15 1 >"$CONFIG/rconpw"
fi
# Copy default configs if they don't exist
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
# Clean up incomplete saves
NRTMPSAVES=$( find -L "$SAVES" -iname \*.tmp.zip -mindepth 1 | wc -l )
if [[ $NRTMPSAVES -gt 0 ]]; then
rm -f "$SAVES"/*.tmp.zip
fi
# Update mods if requested
if [[ ${UPDATE_MODS_ON_START:-} == "true" ]]; then
"${INSTALLED_DIRECTORY}"/docker-update-mods.sh
fi
# Handle DLC
"${INSTALLED_DIRECTORY}"/docker-dlc.sh
# In rootless mode, we don't need to handle user switching or chown
# The container runs as the specified user from the start
EXEC=""
# Setup ARM64 emulation support
# shellcheck disable=SC1091
source "${INSTALLED_DIRECTORY}/setup-exec.sh"
# Update config path
sed -i '/write-data=/c\write-data=\/factorio/' /opt/factorio/config/config.ini
# Generate new save if needed
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
if [[ -n "$PRESET" ]]; then
$EXEC /opt/factorio/bin/x64/factorio \
--create "$SAVES/$SAVE_NAME.zip" \
--preset "$PRESET" \
--map-gen-settings "$CONFIG/map-gen-settings.json" \
--map-settings "$CONFIG/map-settings.json"
else
$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
fi
# Build command flags
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 \
--mod-directory "$MODS" \
)
if [ -n "$CONSOLE_LOG_LOCATION" ]; then
FLAGS+=( --console-log "$CONSOLE_LOG_LOCATION" )
fi
if [ -n "$BIND" ]; then
FLAGS+=( --bind "$BIND" )
fi
if [[ $LOAD_LATEST_SAVE == true ]]; then
FLAGS+=( --start-server-load-latest )
else
FLAGS+=( --start-server "$SAVE_NAME" )
fi
# Execute factorio
# In rootless mode, we run directly without user switching
exec $EXEC /opt/factorio/bin/x64/factorio "${FLAGS[@]}" "$@"

123
docker/files/docker-entrypoint.sh Executable file
View File

@@ -0,0 +1,123 @@
#!/bin/bash
set -eoux pipefail
INSTALLED_DIRECTORY=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")
FACTORIO_VOL=/factorio
LOAD_LATEST_SAVE="${LOAD_LATEST_SAVE:-true}"
GENERATE_NEW_SAVE="${GENERATE_NEW_SAVE:-false}"
PRESET="${PRESET:-""}"
SAVE_NAME="${SAVE_NAME:-""}"
BIND="${BIND:-""}"
CONSOLE_LOG_LOCATION="${CONSOLE_LOG_LOCATION:-""}"
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
"${INSTALLED_DIRECTORY}"/docker-update-mods.sh
fi
"${INSTALLED_DIRECTORY}"/docker-dlc.sh
EXEC=""
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
EXEC="runuser -u factorio -g factorio --"
fi
# Setup ARM64 emulation support
# shellcheck disable=SC1091
source "${INSTALLED_DIRECTORY}/setup-exec.sh"
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
if [[ ! -z "$PRESET" ]]; then
$EXEC /opt/factorio/bin/x64/factorio \
--create "$SAVES/$SAVE_NAME.zip" \
--preset "$PRESET" \
--map-gen-settings "$CONFIG/map-gen-settings.json" \
--map-settings "$CONFIG/map-settings.json"
else
$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
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 \
--mod-directory "$MODS" \
)
if [ -n "$CONSOLE_LOG_LOCATION" ]; then
FLAGS+=( --console-log "$CONSOLE_LOG_LOCATION" )
fi
if [ -n "$BIND" ]; then
FLAGS+=( --bind "$BIND" )
fi
if [[ $LOAD_LATEST_SAVE == true ]]; then
FLAGS+=( --start-server-load-latest )
else
FLAGS+=( --start-server "$SAVE_NAME" )
fi
# shellcheck disable=SC2086
exec $EXEC /opt/factorio/bin/x64/factorio "${FLAGS[@]}" "$@"

View 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"

11
docker/files/players-online.sh Executable file
View File

@@ -0,0 +1,11 @@
#!/bin/bash
PLAYERS=$(rcon /players)
ONLINE_COUNT=$(echo "$PLAYERS" | grep -c " (online)$")
if [[ "$ONLINE_COUNT" -gt "0" ]]; then
echo "$PLAYERS"
# exit with 75 (EX_TEMPFAIL) so watchtower skips the update
# https://containrrr.dev/watchtower/lifecycle-hooks/
exit 75
fi

53
docker/files/scenario.sh Executable file
View File

@@ -0,0 +1,53 @@
#!/bin/bash
set -eoux pipefail
INSTALLED_DIRECTORY=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")
if [[ -z ${1:-} ]]; then
echo "No argument supplied"
fi
SERVER_SCENARIO="$1"
PRESET="${PRESET:-""}"
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
# Setup ARM64 emulation support
EXEC=""
# shellcheck disable=SC1091
source "${INSTALLED_DIRECTORY}/setup-exec.sh"
exec $EXEC /opt/factorio/bin/x64/factorio \
--port "$PORT" \
--start-server-load-scenario "$SERVER_SCENARIO" \
--preset "$PRESET" \
--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

33
docker/files/scenario2map.sh Executable file
View File

@@ -0,0 +1,33 @@
#!/bin/bash
set -eoux pipefail
INSTALLED_DIRECTORY=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")
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
# Setup ARM64 emulation support
EXEC=""
# shellcheck disable=SC1091
source "${INSTALLED_DIRECTORY}/setup-exec.sh"
exec $EXEC /opt/factorio/bin/x64/factorio \
--scenario2map "$SERVER_SCENARIO"

View File

@@ -0,0 +1,16 @@
#!/bin/bash
# Setup EXEC variable for running Factorio with ARM64 emulation support
# This script handles ARM64 emulation and can be combined with user switching as needed
# If EXEC is not already set, initialize it
if [[ -z "${EXEC:-}" ]]; then
EXEC=""
fi
if [[ -f /bin/box64 ]]; then
# Use an emulator to run on ARM hosts
# this only gets installed when the target docker platform is linux/arm64
EXEC="$EXEC /bin/box64"
fi
export EXEC

239
docker/files/update-mods.sh Executable file
View File

@@ -0,0 +1,239 @@
#!/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"
}
# Checks if the current game version satisfies the mod's minimum required version.
# Returns 1 if the game version is compatible with the mod, 0 if not
check_game_version() {
local mod_required_version="$1" # The minimum Factorio version required by the mod
local current_game_version="$2" # The current Factorio version
local mod_major mod_minor game_major game_minor
mod_major=$(echo "$mod_required_version" | cut -d '.' -f1)
mod_minor=$(echo "$mod_required_version" | cut -d '.' -f2)
game_major=$(echo "$current_game_version" | cut -d '.' -f1)
game_minor=$(echo "$current_game_version" | cut -d '.' -f2)
# If game major version is greater than mod's required major version, it's compatible
if [[ "$game_major" -gt "$mod_major" ]]; then
echo 1
return
fi
# If game major version is less than mod's required major version, it's not compatible
if [[ "$game_major" -lt "$mod_major" ]]; then
echo 0
return
fi
# Major versions are equal, check minor versions
# Game minor version must be >= mod's required minor version
if [[ "$game_minor" -ge "$mod_minor" ]]; then
echo 1
else
echo 0
fi
}
# Checks dependency string with provided version.
# Only checks for operator based string, ignoring everything else
# Returns 1 if check is ok, 0 if not
check_dependency_version()
{
local dependency="$1"
local mod_version="$2"
if [[ "$dependency" =~ ^(\?|!|~|\(~\)) ]]; then
echo 1
fi
local condition
condition=$(echo "$dependency" | grep -oE '(>=|<=|>|<|=) [0-9]+(\.[0-9]+)*')
if [[ -z "$condition" ]]; then
echo 1
fi
local operator required_version
operator=$(echo "$condition" | awk '{print $1}')
required_version=$(echo "$condition" | awk '{print $2}')
case "$operator" in
">=")
if [[ "$(printf '%s\n%s\n' "$required_version" "$mod_version" | sort -V | head -n1)" == "$required_version" ]]; then
echo 1
else
echo 0
fi
;;
">")
if [[ "$(printf '%s\n%s\n' "$required_version" "$mod_version" | sort -V | head -n1)" == "$required_version" && "$required_version" != "$mod_version" ]]; then
echo 1
else
echo 0
fi
;;
"<=")
if [[ "$(printf '%s\n%s\n' "$required_version" "$mod_version" | sort -V | tail -n1)" == "$required_version" ]]; then
echo 1
else
echo 0
fi
;;
"<")
if [[ "$(printf '%s\n%s\n' "$required_version" "$mod_version" | sort -V | tail -n1)" == "$required_version" && "$required_version" != "$mod_version" ]]; then
echo 1
else
echo 0
fi
;;
"=")
if [[ "$mod_version" == "$required_version" ]]; then
echo 1
else
echo 0
fi
;;
*)
echo 0
;;
esac
}
get_mod_info()
{
local mod_info_json="$1"
# Process mod releases from newest to oldest, looking for a compatible version
while IFS= read -r mod_release_info; do
local mod_version mod_factorio_version
mod_version=$(echo "$mod_release_info" | jq -r ".version")
mod_factorio_version=$(echo "$mod_release_info" | jq -r ".info_json.factorio_version")
# Check if this mod version is compatible with our Factorio version
# This prevents downloading mods that require a newer Factorio version (fixes #468)
# and ensures backward compatibility (e.g., Factorio 2.0 can use 1.x mods) (fixes #517)
if [[ $(check_game_version "$mod_factorio_version" "$FACTORIO_VERSION") == 0 ]]; then
echo " Skipping mod version $mod_version because of factorio version mismatch" >&2
continue
fi
# If we found 'dependencies' element, we also check versions there
if [[ $(echo "$mod_release_info" | jq -e '.info_json | has("dependencies") and (.dependencies | length > 0)') == true ]]; then
while IFS= read -r dependency; do
# We only check for 'base' dependency
if [[ "$dependency" == base* ]] && [[ $(check_dependency_version "$dependency" "$FACTORIO_VERSION") == 0 ]]; then
echo " Skipping mod version $mod_version, unsatisfied base dependency: $dependency" >&2
continue 2
fi
done < <(echo "$mod_release_info" | jq -r '.info_json.dependencies[]')
fi
echo "$mod_release_info" | jq -j ".file_name, \";\", .download_url, \";\", .sha1"
break
done < <(echo "$mod_info_json" | jq -c ".releases|sort_by(.released_at)|reverse|.[]")
}
update_mod()
{
MOD_NAME="$1"
MOD_NAME_ENCODED="${1// /%20}"
print_step "Checking for update of mod $MOD_NAME for factorio $FACTORIO_VERSION ..."
MOD_INFO_URL="$MOD_BASE_URL/api/mods/$MOD_NAME_ENCODED/full"
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=$(get_mod_info "$MOD_INFO_JSON")
if [[ "$MOD_INFO" == "" ]]; then
print_failure " Not compatible with version"
return 0
fi
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 $MOD_FILENAME"
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
}
# Process all enabled mods from mod-list.json, but skip built-in mods
# The Space Age DLC includes built-in mods (elevated-rails, quality, space-age) that should not be downloaded
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
# Skip base mod and DLC built-in mods
if [[ $mod != base ]] && [[ $mod != elevated-rails ]] && [[ $mod != quality ]] && [[ $mod != space-age ]]; then
update_mod "$mod" || true
fi
done
fi

13
docker/rcon/Makefile Normal file
View File

@@ -0,0 +1,13 @@
# Optimization
OPT = -O3 -flto
TARGET = rcon
CC = gcc
CFLAGS = -std=c17 -Wall -Wextra -pedantic $(OPT)
REMOVE = rm -f
all:
$(CC) $(CFLAGS) main.c -o $(TARGET)
clean:
$(REMOVE) $(TARGET)

219
docker/rcon/main.c Normal file
View File

@@ -0,0 +1,219 @@
#define _GNU_SOURCE
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include <unistd.h>
#include <netdb.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <arpa/inet.h>
#define MIN_PACKET 10
#define MAX_PACKET 4096
#define MAX_BODY (MAX_PACKET - (3 * sizeof(uint32_t)) - 2)
#define RCON_HOST "127.0.0.1"
typedef enum {
RCON_TYPE_RESPONSE = 0,
RCON_TYPE_EXECCOMMAND = 2,
RCON_TYPE_AUTH_RESPONSE = 2,
RCON_TYPE_AUTH = 3,
} packet_type;
typedef struct {
uint32_t length;
uint32_t id;
packet_type type;
char body[MAX_BODY];
} packet;
int rcon_open(const char *port);
void rcon_create(packet* pkt, packet_type type, const char* body);
bool rcon_send(int rcon_socket, const packet* pkt);
bool rcon_auth(int rcon_socket, const char* password);
bool rcon_recv(int rcon_socket, packet* pkt, packet_type expected_type);
char* combine_args(int argc, char* argv[]);
char* read_password(const char* conf_dir);
int main(int argc, char* argv[]) {
if (argc < 2) {
fprintf(stderr, "error: missing command argument\n");
return EXIT_FAILURE;
}
srand((unsigned int)time(NULL));
const char* port = getenv("RCON_PORT");
if (port == NULL) {
fprintf(stderr, "error: missing $RCON_PORT env\n");
return EXIT_FAILURE;
}
const char* conf_dir = getenv("CONFIG");
if (conf_dir == NULL) {
fprintf(stderr, "error: missing $CONFIG env");
exit(EXIT_FAILURE);
}
int rcon_socket = rcon_open(port);
if (rcon_socket == -1) {
fprintf(stderr, "error: could not connect\n");
return EXIT_FAILURE;
}
if (!rcon_auth(rcon_socket, read_password(conf_dir))) {
fprintf(stderr, "error: login failed\n");
return EXIT_FAILURE;
}
packet pkt;
rcon_create(&pkt, RCON_TYPE_EXECCOMMAND, combine_args(argc, argv));
if (!rcon_send(rcon_socket, &pkt)) {
fprintf(stderr, "error: send command failed\n");
return EXIT_FAILURE;
}
if (rcon_recv(rcon_socket, &pkt, RCON_TYPE_RESPONSE) && pkt.length > 0) {
puts(pkt.body);
}
return EXIT_SUCCESS;
}
char* combine_args(int argc, char* argv[]) {
// combine all cli arguments
char* command = malloc(MAX_BODY);
memset(command, 0, MAX_BODY);
strcat(command, argv[1]);
for (int idx = 2; idx < argc; idx++) {
strcat(command, " ");
strcat(command, argv[idx]);
}
return command;
}
char* read_password(const char* conf_dir) {
char* path = malloc(strlen(conf_dir) + 64);
strcpy(path, conf_dir);
strcat(path, "/rconpw");
FILE* fptr = fopen(path, "r");
fseek(fptr, 0, SEEK_END);
long fsize = ftell(fptr);
fseek(fptr, 0, SEEK_SET); /* same as rewind(f); */
char *password = malloc(fsize + 1);
size_t bytes_read = fread(password, fsize, 1, fptr);
(void)bytes_read; // Suppress unused warning
fclose(fptr);
password[fsize] = 0;
if (password[fsize-1] == '\n') {
password[fsize-1] = 0;
}
return password;
}
int rcon_open(const char *port) {
struct sockaddr_in address = {
.sin_family = AF_INET,
.sin_port = htons(atoi(port))
};
inet_aton(RCON_HOST, &address.sin_addr);
int rcon_socket = socket(AF_INET, SOCK_STREAM, 0);
if (connect(rcon_socket, (struct sockaddr*) &address, sizeof(address)) < 0) {
return -1;
} else {
return rcon_socket;
}
}
void rcon_create(packet* pkt, packet_type type, const char* body) {
size_t body_length = strlen(body);
if (body_length >= MAX_BODY - 2) {
fprintf(stderr, "error: command to long");
exit(EXIT_FAILURE);
}
pkt->id = abs(rand());
pkt->type = type;
pkt->length = (uint32_t)(sizeof(pkt->id) + sizeof(pkt->type) + body_length + 2);
memset(pkt->body, 0, MAX_BODY);
strncpy(pkt->body, body, MAX_BODY);
}
bool rcon_recv(int rcon_socket, packet* pkt, packet_type expected_type) {
memset(pkt, 0, sizeof(*pkt));
// Read response packet length
ssize_t expected_length_bytes = sizeof(pkt->length);
ssize_t rx_bytes = recv(rcon_socket, &(pkt->length), expected_length_bytes, 0);
if (rx_bytes == -1) {
perror("error: socket error");
return false;
} else if (rx_bytes == 0) {
fprintf(stderr, "error: no data recieved\n");
return false;
} else if (rx_bytes < expected_length_bytes || pkt->length < MIN_PACKET || pkt->length > MAX_PACKET) {
fprintf(stderr, "error: invalid data\n");
return false;
}
ssize_t received = 0;
while (received < pkt->length) {
rx_bytes = recv(rcon_socket, (char *)pkt + sizeof(pkt->length) + received, pkt->length - received, 0);
if (rx_bytes < 0) {
perror("error: socket error");
return false;
} else if (rx_bytes == 0) {
fprintf(stderr, "error: connection lost\n");
return false;
}
received += rx_bytes;
}
return pkt->type == expected_type;
}
bool rcon_send(int rcon_socket, const packet* pkt) {
size_t length = sizeof(pkt->length) + pkt->length;
char *ptr = (char*) pkt;
while (length > 0) {
ssize_t ret = send(rcon_socket, ptr, length, 0);
if (ret == -1) {
return false;
}
ptr += ret;
length -= ret;
}
return true;
}
bool rcon_auth(int rcon_socket, const char* password) {
packet pkt;
rcon_create(&pkt, RCON_TYPE_AUTH, password);
if (!rcon_send(rcon_socket, &pkt)) {
return false;
}
if (!rcon_recv(rcon_socket, &pkt, RCON_TYPE_AUTH_RESPONSE)) {
return false;
}
return true;
}

2
lint.sh Executable file
View File

@@ -0,0 +1,2 @@
#!/bin/bash
git ls-files --exclude='*Dockerfile' --ignored | xargs --max-lines=1 ./hadolint

169
update.sh Executable file
View File

@@ -0,0 +1,169 @@
#!/bin/bash
set -e
SEMVER_REGEX="^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"
stable_online_version=$(curl 'https://factorio.com/api/latest-releases' | jq '.stable.headless' -r)
experimental_online_version=$(curl 'https://factorio.com/api/latest-releases' | jq '.experimental.headless' -r)
stable_sha256=$(curl "https://factorio.com/download/sha256sums/" | grep -E "(factorio_headless_x64_|factorio-headless_linux_)${stable_online_version}.tar.xz" | awk '{print $1}')
experimental_sha256=$(curl "https://factorio.com/download/sha256sums/" | grep -E "(factorio_headless_x64_|factorio-headless_linux_)${experimental_online_version}.tar.xz" | awk '{print $1}')
stable_current_version=$(jq 'with_entries(select(.value.tags | index("stable"))) | keys | .[0]' buildinfo.json -r)
latest_current_version=$(jq 'with_entries(select(.value.tags | index("latest"))) | keys | .[0]' buildinfo.json -r)
echo "stable_online_version=${stable_online_version} experimental_online_version=${experimental_online_version}"
echo "stable_current_version=${stable_current_version} latest_current_version=${latest_current_version}"
if [[ -z "${stable_online_version}" ]] || [[ -z "${experimental_online_version}" ]]; then
exit
fi
if [[ "${stable_current_version}" == "${stable_online_version}" ]] && [[ "${latest_current_version}" == "${experimental_online_version}" ]]; then
exit
fi
function get-semver(){
local ver=$1
local type=$2
if [[ "$ver" =~ $SEMVER_REGEX ]]; then
local major=${BASH_REMATCH[1]}
local minor=${BASH_REMATCH[2]}
local patch=${BASH_REMATCH[3]}
fi
case $type in
major)
echo "$major"
;;
minor)
echo "$minor"
;;
patch)
echo "$patch"
;;
esac
}
stableOnlineVersionMajor=$(get-semver "${stable_online_version}" major)
stableOnlineVersionMinor=$(get-semver "${stable_online_version}" minor)
experimentalOnlineVersionMajor=$(get-semver "${experimental_online_version}" major)
experimentalOnlineVersionMinor=$(get-semver "${experimental_online_version}" minor)
stableCurrentVersionMajor=$(get-semver "${stable_current_version}" major)
stableCurrentVersionMinor=$(get-semver "${stable_current_version}" minor)
latestCurrentVersionMajor=$(get-semver "${latest_current_version}" major)
latestCurrentVersionMinor=$(get-semver "${latest_current_version}" minor)
stableOnlineVersionShort=$stableOnlineVersionMajor.$stableOnlineVersionMinor
experimentalOnlineVersionShort=$experimentalOnlineVersionMajor.$experimentalOnlineVersionMinor
stableCurrentVersionShort=$stableCurrentVersionMajor.$stableCurrentVersionMinor
latestCurrentVersionShort=$latestCurrentVersionMajor.$latestCurrentVersionMinor
echo "stableOnlineVersionShort=${stableOnlineVersionShort} experimentalOnlineVersionShort=${experimentalOnlineVersionShort}"
echo "stableCurrentVersionShort=${stableCurrentVersionShort} latestCurrentVersionShort=${latestCurrentVersionShort}"
# Create new buildinfo.json with only current versions
tmpfile=$(mktemp)
# Start with empty JSON object
echo '{}' > "$tmpfile"
# Add stable version
if [[ "$stable_online_version" == "$experimental_online_version" ]]; then
# Stable and experimental are the same version
jq --arg stable_online_version "$stable_online_version" --arg sha256 "$stable_sha256" --arg stableOnlineVersionShort "$stableOnlineVersionShort" --arg stableOnlineVersionMajor "$stableOnlineVersionMajor" \
'. + {($stable_online_version): {sha256: $sha256, tags: ["latest", "stable", ("stable-" + $stable_online_version), $stableOnlineVersionMajor, $stableOnlineVersionShort, $stable_online_version]}}' "$tmpfile" > buildinfo.json
else
# Different stable and experimental versions
# First add stable
jq --arg stable_online_version "$stable_online_version" --arg sha256 "$stable_sha256" --arg stableOnlineVersionShort "$stableOnlineVersionShort" --arg stableOnlineVersionMajor "$stableOnlineVersionMajor" \
'. + {($stable_online_version): {sha256: $sha256, tags: ["stable", ("stable-" + $stable_online_version), $stableOnlineVersionMajor, $stableOnlineVersionShort, $stable_online_version]}}' "$tmpfile" > buildinfo.json.tmp
mv buildinfo.json.tmp "$tmpfile"
# Then add experimental
if [[ $stableOnlineVersionShort == "$experimentalOnlineVersionShort" ]]; then
jq --arg experimental_online_version "$experimental_online_version" --arg sha256 "$experimental_sha256" \
'. + {($experimental_online_version): {sha256: $sha256, tags: ["latest", $experimental_online_version]}}' "$tmpfile" > buildinfo.json
else
jq --arg experimental_online_version "$experimental_online_version" --arg sha256 "$experimental_sha256" --arg experimentalOnlineVersionShort "$experimentalOnlineVersionShort" --arg experimentalOnlineVersionMajor "$experimentalOnlineVersionMajor" \
'. + {($experimental_online_version): {sha256: $sha256, tags: ["latest", $experimentalOnlineVersionMajor, $experimentalOnlineVersionShort, $experimental_online_version]}}' "$tmpfile" > buildinfo.json
fi
fi
rm -f -- "$tmpfile"
# Generate README tags with logical sorting and de-duplication
# First, collect all unique tags with their versions
# Use regular arrays for bash compatibility
declare tag_versions
while IFS= read -r version; do
while IFS= read -r tag; do
# If this tag is already seen, compare versions to keep the latest
if [[ -n "${tag_versions[$tag]}" ]]; then
# Compare version strings - keep the higher one
if [[ "$version" > "${tag_versions[$tag]}" ]]; then
tag_versions[$tag]="$version"
fi
else
tag_versions[$tag]="$version"
fi
done < <(jq -r ".\"$version\".tags[]" buildinfo.json)
done < <(jq -r 'keys[]' buildinfo.json | sort -V -r)
# Build the tags list for README
readme_tags=""
# First add the current latest and stable tags
latest_version=$(jq -r 'to_entries | map(select(.value.tags | contains(["latest"]))) | .[0].key' buildinfo.json)
stable_version=$(jq -r 'to_entries | map(select(.value.tags | index("stable"))) | .[0].key' buildinfo.json)
if [[ -n "$latest_version" ]]; then
latest_tags=$(jq -r ".\"$latest_version\".tags | map(select(. == \"latest\" or . == \"$latest_version\")) | join(\", \")" buildinfo.json | sed 's/"/`/g')
readme_tags="${readme_tags}\n* \`${latest_tags}\`"
fi
if [[ -n "$stable_version" ]] && [[ "$stable_version" != "$latest_version" ]]; then
stable_tags=$(jq -r ".\"$stable_version\".tags | sort | join(\", \")" buildinfo.json | sed 's/"/`/g')
readme_tags="${readme_tags}\n* \`${stable_tags}\`"
fi
# Add major.minor tags (e.g., 2.0, 1.1) - only the latest version for each
declare -A major_minor_seen
while IFS= read -r version; do
if [[ "$version" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
major="${BASH_REMATCH[1]}"
minor="${BASH_REMATCH[2]}"
major_minor="$major.$minor"
# Skip if this is the latest or stable version (already added above)
if [[ "$version" == "$latest_version" ]] || [[ "$version" == "$stable_version" ]]; then
continue
fi
# Only add if we haven't seen this major.minor yet
if [[ -z "${major_minor_seen[$major_minor]}" ]]; then
major_minor_seen[$major_minor]=1
tags=$(jq -r ".\"$version\".tags | join(\", \")" buildinfo.json | sed 's/"/`/g')
if [[ -n "$tags" ]]; then
readme_tags="${readme_tags}\n* \`${tags}\`"
fi
fi
fi
done < <(jq -r 'keys[]' buildinfo.json | sort -V -r)
readme_tags="${readme_tags}\n"
perl -i -0777 -pe "s/<!-- start autogeneration tags -->.+<!-- end autogeneration tags -->/<!-- start autogeneration tags -->$readme_tags<!-- end autogeneration tags -->/s" README.md
# Replace VERSION and SHA256 args in docker-compose.yaml with latest stable values.
docker_compose_path="docker/docker-compose.yml"
sov="VERSION=${stable_online_version}" yq -i '.services.factorio.build.args[0] = env(sov)' "$docker_compose_path"
sha="SHA256=${stable_sha256}" yq -i '.services.factorio.build.args[1] = env(sha)' "$docker_compose_path"
git config user.name github-actions[bot]
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
git add buildinfo.json
git add README.md
git add docker/docker-compose.yml
git commit -a -m "Auto Update Factorio to stable version: ${stable_online_version} experimental version: ${experimental_online_version}"
git tag -f latest
git push
git push origin --tags -f