forked from OpenEnroth/OpenEnroth
-
Notifications
You must be signed in to change notification settings - Fork 0
166 lines (149 loc) · 5.11 KB
/
linux.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
name: Linux
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
# cancels currently running workflow from the same PR, branch or tag
#concurrency:
# group: ${{github.workflow}}-${{github.ref}}
# cancel-in-progress: true
jobs:
build_linux:
timeout-minutes: 60
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
configuration:
- Debug
- RelWithDebInfo
architecture:
- x86
- x86_64
steps:
- name: Configure fast APT mirror
uses: vegardit/fast-apt-mirror.sh@v1
with: # the following parameters are listed with their action default values and are optional
healthchecks: 10 # Number of mirrors from the mirrors list to check for availability and up-to-dateness
speedtests: 6 # Maximum number of healthy mirrors to test for speed
parallel: 2 # Number of parallel speed tests
sample-size: 1024 # Number of kilobytes to download during the speed from each mirror
sample-time: 3 # Maximum number of seconds within the sample download from a mirror must finish
- name: Checkout
uses: actions/checkout@v4.2.2
with:
submodules: recursive
ref: '${{inputs.myCommit}}'
- name: Restore data cache
id: restore-data-cache
uses: actions/cache/restore@v3
with:
path: |
OpenEnroth_GameData
key: data-cache
- name: Install dependencies
run: |
if [ "${{matrix.architecture}}" = "x86" ]; then
sudo dpkg --add-architecture i386
fi
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
sudo apt-get update
if [ "${{matrix.architecture}}" = "x86" ]; then
sudo apt-get install -y gcc-13-multilib g++-13-multilib lld
sudo apt-get install -y libglu1-mesa-dev:i386
sudo apt-get install -y libsdl2-dev:i386
sudo apt-get install -y libdwarf-dev:i386 libelf-dev:i386
fi
if [ "${{matrix.architecture}}" = "x86_64" ]; then
sudo apt-get install -y gcc-13 g++-13 lld
sudo apt-get install -y libglu1-mesa-dev
sudo apt-get install -y libsdl2-dev
sudo apt-get install -y libdwarf-dev libelf-dev
fi
- name: Run ccache
uses: hendrikmuhs/ccache-action@v1.2.14
with:
key: 'linux-${{matrix.configuration}}-${{matrix.architecture}}'
save: ${{ github.ref == 'refs/heads/master' || inputs.releaseTag != '' }}
verbose: 2
max-size: 200M
- name: Configure
run: |
if [ "${{matrix.architecture}}" = "x86" ]; then
export CFLAGS="-m32" CXXFLAGS="-m32"
fi
export CC=gcc-13 && export CXX=g++-13
cmake -B build -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=${{matrix.configuration}}
- name: Build
working-directory: build
run: |
make -j3
- name: Run unit tests
working-directory: build
run: |
make Run_UnitTest
- name: Run game tests
if: steps.restore-data-cache.outputs.cache-hit == 'true'
working-directory: build
run: |
make Run_GameTest_Headless_Parallel
env:
OPENENROTH_MM7_PATH: /home/runner/work/OpenEnroth/OpenEnroth/OpenEnroth_GameData/mm7
- name: Run retrace tests
if: steps.restore-data-cache.outputs.cache-hit == 'true' && matrix.configuration != 'Debug'
working-directory: build
run: |
make Run_RetraceTest_Headless_Parallel
env:
OPENENROTH_MM7_PATH: /home/runner/work/OpenEnroth/OpenEnroth/OpenEnroth_GameData/mm7
- name: Prepare artifact
run: |
mkdir dist
cp build/src/Bin/OpenEnroth/OpenEnroth dist/
- 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: |
objdump -p build/src/Bin/OpenEnroth/OpenEnroth | grep 'NEEDED'
- name: Cleanup ccache
run: |
ccache -c