forked from MUME/MMapper
-
Notifications
You must be signed in to change notification settings - Fork 0
144 lines (136 loc) · 5.37 KB
/
Copy pathbuild-release.yml
File metadata and controls
144 lines (136 loc) · 5.37 KB
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
name: build-release
on:
push:
tags:
- 'v*'
branches:
- master
pull_request:
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }}
cancel-in-progress: true
jobs:
build:
runs-on: ${{ matrix.os }}
continue-on-error: false
strategy:
fail-fast: false
matrix:
os: [windows-2022, macos-15-intel, macos-15, ubuntu-24.04, ubuntu-24.04-arm]
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
submodules: true
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
create-symlink: ${{ runner.os != 'Windows' }}
key: ${{ github.job }}-${{ matrix.os }}
variant: ${{ matrix.compiler == 'msvc' && 'sccache' || 'ccache' }}
- if: runner.os == 'Windows' || runner.os == 'macOS'
uses: lukka/get-cmake@latest
- if: runner.os == 'Windows'
uses: ilammy/msvc-dev-cmd@v1
# Install Dependencies (Ubuntu)
- if: runner.os == 'Linux'
name: Install Packages for Ubuntu
run: |
sudo apt update -qq
sudo apt install -y \
qt6-base-dev qt6-base-dev-tools libqt6opengl6-dev libqt6websockets6-dev \
qt6-multimedia-dev libqt6multimedia6 qt6-svg-dev \
libgl1-mesa-dev qtkeychain-qt6-dev build-essential cmake ninja-build mold git \
zlib1g-dev libssl-dev
echo "QMAKESPEC=linux-g++" >> $GITHUB_ENV
echo "CC=gcc-12" >> $GITHUB_ENV
echo "CXX=g++-12" >> $GITHUB_ENV
echo "MMAPPER_CMAKE_EXTRA=-DUSE_MOLD=true -DPACKAGE_TYPE=Deb" >> $GITHUB_ENV
# Install Dependencies (Mac)
- if: runner.os == 'macOS'
name: Install Qt for Mac
uses: jurplel/install-qt-action@v4
with:
version: 6.8.3
arch: clang_64
cache: true
modules: 'qtwebsockets qtmultimedia'
- if: runner.os == 'macOS'
name: Install Packages for Mac
run: |
echo "MMAPPER_CMAKE_EXTRA=-DCMAKE_PREFIX_PATH=$QT_ROOT_DIR -DPACKAGE_TYPE=Dmg" >> $GITHUB_ENV
# Install Dependencies (Windows)
- if: runner.os == 'Windows'
name: Install Qt for Windows
uses: jurplel/install-qt-action@v4
with:
version: 6.8.3
dir: 'C:\'
arch: win64_msvc2022_64
cache: true
modules: 'qtwebsockets qtmultimedia'
# Build
- if: runner.os == 'Windows'
name: Build MMapper for Windows
shell: pwsh
run: |
mkdir ${{ github.workspace }}/artifact
mkdir build
cd build
cmake --version
$packageDir = ($env:GITHUB_WORKSPACE -replace '\\', '/') + "/artifact"
$launcher = ${{ matrix.compiler == 'msvc' && 'sccache' || 'ccache' }}
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -G 'Ninja' -DCPACK_PACKAGE_DIRECTORY="$packageDir" -DCMAKE_PREFIX_PATH=$env:QT_ROOT_DIR -DWITH_WEBSOCKET=ON -DWITH_QTKEYCHAIN=ON -DPACKAGE_TYPE=Nsis -DCMAKE_C_COMPILER_LAUNCHER="$launcher" -DCMAKE_CXX_COMPILER_LAUNCHER="$launcher" -S .. || exit -1
cmake --build . --parallel
- if: runner.os == 'Linux' || runner.os == 'macOS'
name: Build MMapper for Linux and Mac
run: |
mkdir -p build ${{ github.workspace }}/artifact
cd build
cmake --version
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -G 'Ninja' -DCPACK_PACKAGE_DIRECTORY=${{ github.workspace }}/artifact $MMAPPER_CMAKE_EXTRA -DWITH_WEBSOCKET=ON -DWITH_QTKEYCHAIN=ON -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -S .. || exit -1
cmake --build . --parallel
# Package
- name: Package MMapper
run: cd build && cpack
- if: runner.os == 'Linux'
name: Get Linux package file base name
id: get_linux_package_name
run: |
PACKAGE_FILE=$(ls ${{ github.workspace }}/artifact/*.deb)
PACKAGE_BASENAME=$(basename "$PACKAGE_FILE" | sed 's/\./-/g')
echo "PACKAGE_BASENAME=$PACKAGE_BASENAME" >> $GITHUB_OUTPUT
- if: runner.os == 'macOS'
name: Get Mac package file base name
id: get_mac_package_name
run: |
PACKAGE_FILE=$(ls ${{ github.workspace }}/artifact/*.dmg)
PACKAGE_BASENAME=$(basename "$PACKAGE_FILE" | sed 's/\./-/g')
echo "PACKAGE_BASENAME=$PACKAGE_BASENAME" >> $GITHUB_OUTPUT
- if: runner.os == 'Windows'
name: Get Windows package file base name
id: get_windows_package_name
shell: pwsh
run: |
$packageFile = Get-ChildItem -Path "${{ github.workspace }}/artifact/*.exe" | Select-Object -First 1
$packageBasename = $packageFile.BaseName -replace '\.', '-'
"PACKAGE_BASENAME=$packageBasename" >> $env:GITHUB_OUTPUT
- if: runner.os == 'macOS'
name: Upload Package for Mac
uses: actions/upload-artifact@v7
with:
name: release-${{ steps.get_mac_package_name.outputs.PACKAGE_BASENAME }}
path: ${{ github.workspace }}/artifact/*.dmg*
- if: runner.os == 'Linux'
name: Upload Package for Ubuntu
uses: actions/upload-artifact@v7
with:
name: release-${{ steps.get_linux_package_name.outputs.PACKAGE_BASENAME }}
path: ${{ github.workspace }}/artifact/*.deb*
- if: runner.os == 'Windows'
name: Upload Package for Windows
uses: actions/upload-artifact@v7
with:
name: release-${{ steps.get_windows_package_name.outputs.PACKAGE_BASENAME }}
path: ${{ github.workspace }}/artifact/*.exe*