forked from OpenEnroth/OpenEnroth
-
Notifications
You must be signed in to change notification settings - Fork 0
172 lines (152 loc) · 5 KB
/
windows.yml
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
168
169
170
171
172
name: Windows
on:
pull_request: null
workflow_dispatch:
inputs:
myCommit:
description: Commit SHA1
required: false
default: ''
type: string
releaseTag:
description: Release tag
required: false
default: ''
type: string
workflow_call:
inputs:
myCommit:
description: Commit SHA1
required: false
default: ''
type: string
releaseTag:
description: Release tag
required: false
default: ''
type: string
push: null
release:
types:
- published
jobs:
build_windows:
runs-on: windows-2022
strategy:
fail-fast: false
matrix:
configuration:
- Debug
- Release
architecture:
- x86
- x86_64
steps:
# Checkout Code
- name: Checkout
uses: actions/checkout@v3
with:
submodules: recursive
ref: '${{ inputs.myCommit }}'
# Data cache is created by Populate Data Cache build.
- name: Restore data cache
id: restore-data-cache
uses: actions/cache/restore@v3
with:
path: |
OpenEnroth_GameData
key: data-cache
enableCrossOsArchive: true
# If datacache is restored than we will be running gametest and need shaders.
- name: Copy shaders
if: steps.restore-data-cache.outputs.cache-hit == 'true'
run: |
xcopy resources OpenEnroth_GameData\mm7 /E/H/C/I
# Setup the MSVC build enviroment
- name: Setup environment
uses: ilammy/msvc-dev-cmd@v1
with:
arch: '${{matrix.architecture}}'
# Restore ccache file from cache if possible so we don't have to download it.
- name: Restore cached ccache
id: ccache-cache
uses: actions/cache/restore@v3
with:
path: 'C:\ProgramData\chocolatey\lib\ccache\'
key: windows-ccache
# Chocolatey uses shims so create the shim if we used the cached ccache exe
- name: Add ccache shim
if: steps.ccache-cache.outputs.cache-hit == 'true'
run: |
C:\ProgramData\chocolatey\tools\shimgen.exe -o=C:\ProgramData\chocolatey\bin\ccache.exe -p=C:\ProgramData\chocolatey\lib\ccache\tools\ccache-4.8.2-windows-x86_64\ccache.exe
# If ccache can't be restored from cache upgrade it
- name: Update ccache
if: steps.ccache-cache.outputs.cache-hit != 'true'
run: |
choco upgrade ccache --version=4.8.2
# If ccache can't be restored from cache after upgrade cache it
- name: Save ccache to cache
if: steps.ccache-cache.outputs.cache-hit != 'true'
id: check-for-ccache-save
uses: actions/cache/save@v3
with:
path: 'C:\ProgramData\chocolatey\lib\ccache\'
key: windows-ccache
# GH action for ccache, only save cache if its on master branch or has a release build tag
- name: Run ccache
uses: hendrikmuhs/ccache-action@v1.2.10
with:
key: 'windows-${{matrix.configuration}}-${{matrix.architecture}}'
save: ${{ github.ref == 'refs/heads/master' || inputs.releaseTag != '' }}
verbose: 2
max-size: 100M
# MSVC hit rate is higher with ignoring the hash_dir and is safe
- name: Set ccache config values
run: |
ccache --set-config=hash_dir=false
- name: Configure
run: |
cmake -B build -G "Ninja" -DCMAKE_BUILD_TYPE=${{matrix.configuration}}
- name: Build
working-directory: build
shell: cmd
run: |
ninja -v
- name: Run unit tests
working-directory: build
run: |
ninja UnitTest
# Only run gametest if we restored game data.
- name: Run game tests
if: steps.restore-data-cache.outputs.cache-hit == 'true'
working-directory: build
run: |
ninja GameTest_Headless
env:
OPENENROTH_MM7_PATH: 'D:\a\OpenEnroth\OpenEnroth\OpenEnroth_GameData\mm7'
- name: Prepare files for release
run: |
mkdir dist
copy build\src\Bin\OpenEnroth\OpenEnroth.exe dist\
xcopy resources dist\ /E/H/C/I
- name: Zip folder for release
if: inputs.releaseTag != ''
uses: thedoctor0/zip-release@0.7.1
with:
type: zip
filename: ${{runner.os}}_${{inputs.releaseTag}}_${{matrix.configuration}}_${{matrix.architecture}}.zip
path: dist
- name: Publish release
if: inputs.releaseTag != ''
uses: softprops/action-gh-release@v1
with:
prerelease: true
tag_name: '${{ inputs.releaseTag }}'
files: |
${{runner.os}}_${{inputs.releaseTag}}_${{matrix.configuration}}_${{matrix.architecture}}.zip
- name: Check dependencies
run: |
dumpbin /imports build\src\Bin\OpenEnroth\OpenEnroth.exe
- name: Cleanup ccache
run: |
ccache -c