This repository was archived by the owner on Mar 22, 2026. It is now read-only.
now it should work atleast #4
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Docker Nightly Dedicated Server | |
| on: | |
| workflow_dispatch: | |
| push: | |
| branches: | |
| - "main" | |
| - 'feature/dedicated-server' | |
| paths-ignore: | |
| - ".gitignore" | |
| - "*.md" | |
| - ".github/*.md" | |
| permissions: | |
| contents: read | |
| packages: write | |
| concurrency: | |
| group: docker-nightly-dedicated-server | |
| cancel-in-progress: true | |
| jobs: | |
| build-runtime: | |
| name: Build Dedicated Server Runtime | |
| runs-on: windows-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Setup msbuild | |
| uses: microsoft/setup-msbuild@v2 | |
| - name: Build Dedicated Server Runtime Only | |
| shell: pwsh | |
| run: | | |
| MSBuild.exe Minecraft.World\Minecraft.World.vcxproj /p:Configuration=Release /p:Platform=x64 /m | |
| MSBuild.exe Minecraft.Server\Minecraft.Server.vcxproj /p:Configuration=Release /p:Platform=x64 /m | |
| - name: Stage dedicated server runtime | |
| shell: pwsh | |
| run: | | |
| $serverOut = "Minecraft.Server/x64/Minecraft.Server/Release" | |
| $stage = ".artifacts/dedicated-server-runtime" | |
| if (Test-Path $stage) { | |
| Remove-Item -Path $stage -Recurse -Force | |
| } | |
| New-Item -ItemType Directory -Path (Join-Path $stage "Windows64") -Force | Out-Null | |
| # Minimum required runtime files | |
| $required = @( | |
| "Minecraft.Server.exe", | |
| "iggy_w64.dll", | |
| "Common" | |
| ) | |
| foreach ($entry in $required) { | |
| $src = Join-Path $serverOut $entry | |
| if (-not (Test-Path $src)) { | |
| throw "Missing required runtime path: $src" | |
| } | |
| } | |
| # Copy required files | |
| Copy-Item -Path (Join-Path $serverOut "Minecraft.Server.exe") -Destination (Join-Path $stage "Minecraft.Server.exe") -Force | |
| Copy-Item -Path (Join-Path $serverOut "iggy_w64.dll") -Destination (Join-Path $stage "iggy_w64.dll") -Force | |
| Copy-Item -Path (Join-Path $serverOut "Common") -Destination (Join-Path $stage "Common") -Recurse -Force | |
| if (Test-Path (Join-Path $serverOut "Windows64")) { | |
| Copy-Item -Path (Join-Path $serverOut "Windows64/*") -Destination (Join-Path $stage "Windows64") -Recurse -Force | |
| } else { | |
| Write-Host "Windows64 directory is not present in build output; staging without it." | |
| } | |
| Get-ChildItem -Path $stage -Recurse -File | Select-Object -First 20 | ForEach-Object { | |
| Write-Host "Staged: $($_.FullName)" | |
| } | |
| - name: Upload dedicated server runtime to artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: dedicated-server-runtime | |
| if-no-files-found: error | |
| path: | | |
| .artifacts/dedicated-server-runtime/** | |
| docker-publish: | |
| name: Build and Push Docker Image | |
| runs-on: ubuntu-latest | |
| needs: build-runtime | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Download dedicated server runtime from artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: dedicated-server-runtime | |
| path: .artifacts/runtime | |
| - name: Prepare Docker runtime directory | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| rm -rf runtime | |
| mkdir -p runtime | |
| cp .artifacts/runtime/Minecraft.Server.exe runtime/Minecraft.Server.exe | |
| cp .artifacts/runtime/iggy_w64.dll runtime/iggy_w64.dll | |
| cp -R .artifacts/runtime/Common runtime/Common | |
| mkdir -p runtime/Windows64 | |
| if [[ -d ".artifacts/runtime/Windows64" ]]; then | |
| cp -R .artifacts/runtime/Windows64/. runtime/Windows64/ | |
| fi | |
| test -f runtime/Minecraft.Server.exe | |
| test -f runtime/iggy_w64.dll | |
| test -d runtime/Common | |
| test -d runtime/Windows64 | |
| - name: Compute image name | |
| id: image | |
| shell: bash | |
| run: | | |
| owner="$(echo "${{ vars.CONTAINER_REGISTRY_OWNER || github.repository_owner }}" | tr '[:upper:]' '[:lower:]')" | |
| image_tag="nightly" | |
| # if [[ "${{ github.ref }}" != "refs/heads/main" ]]; then | |
| # image_tag="nightly-test" | |
| # fi | |
| echo "owner=$owner" >> "$GITHUB_OUTPUT" | |
| echo "image=ghcr.io/$owner/minecraft-lce-dedicated-server" >> "$GITHUB_OUTPUT" | |
| echo "image_tag=$image_tag" >> "$GITHUB_OUTPUT" | |
| - name: Extract Docker metadata | |
| id: meta | |
| uses: docker/metadata-action@v5 | |
| with: | |
| images: ${{ steps.image.outputs.image }} | |
| tags: | | |
| type=raw,value=${{ steps.image.outputs.image_tag }} | |
| - name: Login to GHCR | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ secrets.GHCR_USERNAME || github.actor }} | |
| password: ${{ secrets.GHCR_TOKEN || secrets.GITHUB_TOKEN }} | |
| - name: Build and push image | |
| uses: docker/build-push-action@v6 | |
| with: | |
| context: . | |
| file: docker/dedicated-server/Dockerfile | |
| push: true | |
| tags: ${{ steps.meta.outputs.tags }} | |
| labels: ${{ steps.meta.outputs.labels }} | |
| build-args: | | |
| MC_RUNTIME_DIR=runtime |