-
Notifications
You must be signed in to change notification settings - Fork 10
183 lines (162 loc) · 5.82 KB
/
Copy pathrelease.yml
File metadata and controls
183 lines (162 loc) · 5.82 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
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
173
174
175
176
177
178
179
180
181
182
183
name: Release Assets
on:
release:
types:
- published
workflow_dispatch:
inputs:
tag_name:
description: "Existing tag to publish assets for (for example, v1.0.0)"
required: true
release_name:
description: "Release name used when creating or updating a release manually"
required: true
body:
description: "Optional release notes for manual publishing"
required: false
permissions:
contents: write
env:
CLIENT_NAME: BestClient
jobs:
build-cmake:
name: Build Release (${{ matrix.name }})
runs-on: ${{ matrix.os }}
env:
CARGO_HTTP_MULTIPLEXING: false
strategy:
fail-fast: false
matrix:
include:
- name: linux
os: ubuntu-24.04
cmake-args: -G Ninja -DCMAKE_BUILD_TYPE=Release -DPREFER_BUNDLED_LIBS=ON -DDISCORD_DYNAMIC=ON
cmake-init-env: CXXFLAGS="-Werror -Wno-unused-function"
package-file: "*-linux_x86_64.tar.xz"
artifact-name: release-linux
asset-name: BestClient-linux.tar.xz
- name: windows
os: windows-latest
cmake-args: -A x64 -DTOOLS=OFF -DDOWNLOAD_GTEST=OFF
cmake-init-env: CXXFLAGS= LDFLAGS=
package-file: "*-win64.zip"
artifact-name: release-windows
asset-name: BestClient-windows.zip
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Prepare Linux
if: contains(matrix.os, 'ubuntu')
run: |
sudo apt-get update -y
sudo apt-get install pkg-config ninja-build libcurl4-openssl-dev libfreetype6-dev libnotify-dev libogg-dev libopus-dev libopusfile-dev libsdl2-dev libsqlite3-dev libavcodec-dev libavformat-dev libavutil-dev libswresample-dev libswscale-dev libx264-dev libpng-dev libvulkan-dev libglew-dev -y
- name: Install Vulkan SDK
uses: humbletim/install-vulkan-sdk@v1.2
with:
version: 1.3.296.0
cache: true
- name: Cache Rust dependencies
uses: Swatinem/rust-cache@v2
with:
workspaces: |
./
- name: Package release build
run: |
cmake -S . -B build-release ${{ matrix.cmake-args }}
cmake --build build-release --config Release --target package_default
mkdir artifacts
mv build-release/${{ matrix.package-file }} artifacts/${{ matrix.asset-name }}
- name: Upload release package
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact-name }}
path: artifacts/${{ matrix.asset-name }}
build-android:
name: Build Release (android)
runs-on: ubuntu-24.04
env:
CARGO_HTTP_MULTIPLEXING: false
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Validate Gradle Wrapper
uses: gradle/actions/wrapper-validation@v4
- name: Prepare Linux
run: |
sudo apt-get update -y
sudo apt-get install ninja-build openjdk-21-jdk openssl
curl -LO https://github.com/Kitware/CMake/releases/download/v3.22.1/cmake-3.22.1-Linux-x86_64.tar.gz
mkdir -p /home/runner/cmake
tar --strip-components 1 -C /home/runner/cmake -xf cmake-3.22.1-Linux-x86_64.tar.gz
rustup default 1.92.0
cargo install cargo-ndk
rustup target add armv7-linux-androideabi
rustup target add i686-linux-android
rustup target add aarch64-linux-android
rustup target add x86_64-linux-android
scripts/android/download_android_sdk.sh /home/runner
- name: Install Vulkan SDK
uses: humbletim/install-vulkan-sdk@v1.2
with:
version: 1.3.296.0
cache: true
- name: Cache Rust dependencies
uses: Swatinem/rust-cache@v2
with:
workspaces: |
./
- name: Build Android app
env:
TW_KEY_NAME: /home/runner/DDNet.jks
TW_KEY_ALIAS: DDNet-Key
run: |
export TW_KEY_PW="$(openssl rand -base64 32)"
keytool -genkey -v -keystore "$TW_KEY_NAME" -keyalg RSA -keysize 2048 -validity 10000 -alias "$TW_KEY_ALIAS" -storepass "$TW_KEY_PW" -dname "CN=DDNet CI, OU=DDNet, O=DDNet"
export ANDROID_HOME="/home/runner/Android/Sdk"
unset ANDROID_SDK_ROOT
export PATH=/home/runner/cmake/bin:$PATH
scripts/android/cmake_android.sh all DDNet org.ddnet.client Release build-android
mkdir artifacts
mv build-android/DDNet.apk artifacts/${{ env.CLIENT_NAME }}-android.apk
- name: Upload Android package
uses: actions/upload-artifact@v4
with:
name: release-android
path: artifacts/${{ env.CLIENT_NAME }}-android.apk
publish:
name: Publish Release Assets
needs:
- build-cmake
- build-android
runs-on: ubuntu-latest
steps:
- name: Download release packages
uses: actions/download-artifact@v4
with:
pattern: release-*
path: artifacts
merge-multiple: true
- name: List downloaded release packages
run: ls -R artifacts
- name: Attach assets to published GitHub release
if: github.event_name == 'release'
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.event.release.tag_name }}
files: |
artifacts/${{ env.CLIENT_NAME }}-linux.tar.xz
artifacts/${{ env.CLIENT_NAME }}-windows.zip
artifacts/${{ env.CLIENT_NAME }}-android.apk
- name: Create or update release manually
if: github.event_name == 'workflow_dispatch'
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.event.inputs.tag_name }}
name: ${{ github.event.inputs.release_name }}
body: ${{ github.event.inputs.body }}
files: |
artifacts/${{ env.CLIENT_NAME }}-linux.tar.xz
artifacts/${{ env.CLIENT_NAME }}-windows.zip
artifacts/${{ env.CLIENT_NAME }}-android.apk