aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/nightly-server.yml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/nightly-server.yml')
-rw-r--r--.github/workflows/nightly-server.yml167
1 files changed, 167 insertions, 0 deletions
diff --git a/.github/workflows/nightly-server.yml b/.github/workflows/nightly-server.yml
new file mode 100644
index 00000000..23ea2cb7
--- /dev/null
+++ b/.github/workflows/nightly-server.yml
@@ -0,0 +1,167 @@
+name: Nightly Server Release
+
+on:
+ workflow_dispatch:
+ push:
+ branches:
+ - 'main'
+ paths-ignore:
+ - '.gitignore'
+ - '*.md'
+ - '.github/**'
+ - '!.github/workflows/nightly-server.yml'
+
+permissions:
+ contents: write
+ packages: write
+
+concurrency:
+ group: nightly-server
+ cancel-in-progress: true
+
+jobs:
+ build:
+ runs-on: windows-latest
+
+ strategy:
+ matrix:
+ platform: [Windows64]
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+
+ - name: Set platform lowercase
+ run: echo "MATRIX_PLATFORM=$('${{ matrix.platform }}'.ToLower())" >> $env:GITHUB_ENV
+
+ - name: Setup MSVC
+ uses: ilammy/msvc-dev-cmd@v1
+
+ - name: Setup CMake
+ uses: lukka/get-cmake@latest
+
+ - name: Run CMake
+ uses: lukka/run-cmake@v10
+ env:
+ VCPKG_ROOT: "" # Disable vcpkg for CI builds
+ with:
+ configurePreset: ${{ env.MATRIX_PLATFORM }}
+ buildPreset: ${{ env.MATRIX_PLATFORM }}-release
+ buildPresetAdditionalArgs: "['--target', 'Minecraft.Server']"
+
+ - name: Zip Build
+ run: 7z a -r LCEServer${{ matrix.platform }}.zip ./build/${{ env.MATRIX_PLATFORM }}/Minecraft.Server/Release/* -x!*.ipdb -x!*.iobj
+
+ - name: Stage artifacts
+ run: |
+ New-Item -ItemType Directory -Force -Path staging
+ Copy-Item LCEServer${{ matrix.platform }}.zip staging/
+
+ - name: Stage exe and pdb
+ if: matrix.platform == 'Windows64'
+ run: |
+ Copy-Item ./build/${{ env.MATRIX_PLATFORM }}/Minecraft.Server/Release/Minecraft.Server.exe staging/
+
+ - name: Upload artifacts
+ uses: actions/upload-artifact@v6
+ with:
+ name: build-${{ matrix.platform }}
+ path: staging/*
+
+ release:
+ needs: build
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Download all artifacts
+ uses: actions/download-artifact@v7
+ with:
+ path: artifacts
+ merge-multiple: true
+
+ - name: Update 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: |
+ artifacts/*
+
+ docker-publish:
+ name: Build and Push Docker Image
+ runs-on: ubuntu-latest
+ needs: build
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+
+ - name: Download dedicated server runtime from artifacts
+ uses: actions/download-artifact@v4
+ with:
+ name: build-Windows64
+ path: .artifacts/
+
+ - name: Prepare Docker runtime directory
+ shell: bash
+ run: |
+ set -euo pipefail
+
+ rm -rf runtime
+ mkdir -p runtime
+ unzip .artifacts/LCEServerWindows64.zip -d runtime
+
+ - 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
+
+ cleanup:
+ needs: [build, release]
+ if: always()
+ runs-on: ubuntu-latest
+ steps:
+ - name: Cleanup artifacts
+ uses: geekyeggo/delete-artifact@v5
+ with:
+ name: build-*