diff options
Diffstat (limited to '.github/workflows')
| -rw-r--r-- | .github/workflows/docker-nightly.yml | 160 | ||||
| -rw-r--r-- | .github/workflows/nightly.yml | 29 |
2 files changed, 186 insertions, 3 deletions
diff --git a/.github/workflows/docker-nightly.yml b/.github/workflows/docker-nightly.yml new file mode 100644 index 00000000..78d5256c --- /dev/null +++ b/.github/workflows/docker-nightly.yml @@ -0,0 +1,160 @@ +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
\ No newline at end of file diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 402f3cb6..5af23fe6 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -1,15 +1,19 @@ -name: Nightly Release +name: Nightly Releases on: workflow_dispatch: push: branches: - 'main' + - 'feature/dedicated-server' paths-ignore: - '.gitignore' - '*.md' - '.github/*.md' +permissions: + contents: write + jobs: build: name: Build Windows64 @@ -28,13 +32,16 @@ jobs: - name: Zip Build run: 7z a -r LCEWindows64.zip ./x64/Release/* - - name: Update release + - name: Zip Dedicated Server Build + run: 7z a -r LCEServerWindows64.zip ./x64/Minecraft.Server/Release/* + + - name: Update Client release uses: andelf/nightly-release@main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: nightly - name: Nightly Release + name: Nightly Client Release body: | Requires at least Windows 7 and DirectX 11 compatible GPU to run. Compiled with MSVC v14.44.35207 in Release mode with Whole Program Optimization, as well as `/O2 /Ot /Oi /Ob3 /GF /fp:precise`. @@ -44,3 +51,19 @@ jobs: LCEWindows64.zip ./x64/Release/Minecraft.Client.exe ./x64/Release/Minecraft.Client.pdb + + - name: Update Dedicated Server release + uses: andelf/nightly-release@main + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: nightly-dedicated-server + name: Nightly Dedicated Server Release + body: | + Dedicated Server runtime for Windows64. + + Download `LCEServerWindows64.zip` and extract it to a folder where you'd like to keep the server runtime. + files: | + LCEServerWindows64.zip + ./x64/Minecraft.Server/Release/Minecraft.Server.exe + ./x64/Minecraft.Server/Release/Minecraft.Server.pdb |
