aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/nightly-server.yml
blob: 5450de9ac193891b50ee4beca9530e7b914d8e0e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
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:
    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, docker]
    if: always()
    runs-on: ubuntu-latest
    steps:
    - name: Cleanup artifacts
      uses: geekyeggo/delete-artifact@v5
      with:
        name: build-*