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-*