Skip to content

Commit ead1047

Browse files
authored
Merge pull request #187 from kdroidFilter/refactor/native-build-system-and-modernize
Refactor native build system, replace Kermit, modernize project
2 parents 3509728 + 95d3ce6 commit ead1047

118 files changed

Lines changed: 3583 additions & 3119 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.editorconfig

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# .editorconfig
2+
[*]
3+
charset = utf-8
4+
end_of_line = lf
5+
indent_size = 4
6+
indent_style = space
7+
insert_final_newline = true
8+
max_line_length = 120
9+
tab_width = 4
10+
trim_trailing_whitespace = true
11+
12+
[*.{kt,kts}]
13+
ij_kotlin_allow_trailing_comma = true
14+
ij_kotlin_allow_trailing_comma_on_call_site = true
15+
ij_kotlin_imports_layout = *, java.**, javax.**, kotlin.**, ^
16+
ktlint_standard_no-wildcard-imports = disabled
17+
ktlint_standard_function-naming = disabled
18+
ktlint_standard_backing-property-naming = disabled

.github/workflows/build-natives.yml

Lines changed: 76 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,55 +8,113 @@ jobs:
88
runs-on: windows-latest
99
steps:
1010
- name: Checkout Repo
11-
uses: actions/checkout@v4
11+
uses: actions/checkout@v6
12+
13+
- name: Set up JDK
14+
uses: actions/setup-java@v5
15+
with:
16+
java-version: '17'
17+
distribution: 'temurin'
1218

1319
- name: Build Windows native DLLs
1420
shell: cmd
1521
working-directory: mediaplayer/src/jvmMain/native/windows
1622
run: call build.bat
23+
env:
24+
NATIVE_LIBS_OUTPUT_DIR: ${{ github.workspace }}/build/nativeLibs
1725

1826
- name: Verify Windows natives
1927
shell: bash
2028
run: |
2129
for f in \
22-
mediaplayer/src/jvmMain/resources/win32-x86-64/NativeVideoPlayer.dll \
23-
mediaplayer/src/jvmMain/resources/win32-arm64/NativeVideoPlayer.dll; do
30+
build/nativeLibs/win32-x86-64/NativeVideoPlayer.dll \
31+
build/nativeLibs/win32-arm64/NativeVideoPlayer.dll; do
2432
if [ ! -f "$f" ]; then echo "MISSING: $f" >&2; exit 1; fi
2533
echo "OK: $f ($(wc -c < "$f") bytes)"
2634
done
2735
28-
- name: Upload Windows DLLs
29-
uses: actions/upload-artifact@v4
36+
- name: Upload Windows natives
37+
uses: actions/upload-artifact@v7
3038
with:
31-
name: windows-natives
32-
path: |
33-
mediaplayer/src/jvmMain/resources/win32-x86-64/
34-
mediaplayer/src/jvmMain/resources/win32-arm64/
39+
name: native-windows
40+
path: build/nativeLibs/
3541
retention-days: 1
3642

3743
macos:
3844
runs-on: macos-latest
3945
steps:
4046
- name: Checkout Repo
41-
uses: actions/checkout@v4
47+
uses: actions/checkout@v6
48+
49+
- name: Set up JDK
50+
uses: actions/setup-java@v5
51+
with:
52+
java-version: '17'
53+
distribution: 'temurin'
4254

4355
- name: Build macOS native dylibs
4456
run: bash mediaplayer/src/jvmMain/native/macos/build.sh
57+
env:
58+
NATIVE_LIBS_OUTPUT_DIR: ${{ github.workspace }}/build/nativeLibs
4559

4660
- name: Verify macOS natives
4761
run: |
4862
for f in \
49-
mediaplayer/src/jvmMain/resources/darwin-aarch64/libNativeVideoPlayer.dylib \
50-
mediaplayer/src/jvmMain/resources/darwin-x86-64/libNativeVideoPlayer.dylib; do
63+
build/nativeLibs/darwin-aarch64/libNativeVideoPlayer.dylib \
64+
build/nativeLibs/darwin-x86-64/libNativeVideoPlayer.dylib; do
5165
if [ ! -f "$f" ]; then echo "MISSING: $f" >&2; exit 1; fi
5266
echo "OK: $f ($(wc -c < "$f") bytes)"
5367
done
5468
55-
- name: Upload macOS dylibs
56-
uses: actions/upload-artifact@v4
69+
- name: Upload macOS natives
70+
uses: actions/upload-artifact@v7
71+
with:
72+
name: native-macos
73+
path: build/nativeLibs/
74+
retention-days: 1
75+
76+
linux:
77+
runs-on: ${{ matrix.os }}
78+
strategy:
79+
matrix:
80+
include:
81+
- os: ubuntu-latest
82+
arch: x86-64
83+
- os: ubuntu-24.04-arm
84+
arch: aarch64
85+
steps:
86+
- name: Checkout Repo
87+
uses: actions/checkout@v6
88+
89+
- name: Set up JDK
90+
uses: actions/setup-java@v5
91+
with:
92+
java-version: '17'
93+
distribution: 'temurin'
94+
95+
- name: Install GStreamer dependencies
96+
run: |
97+
sudo apt-get update
98+
sudo apt-get install -y \
99+
libgstreamer1.0-dev \
100+
libgstreamer-plugins-base1.0-dev \
101+
gstreamer1.0-plugins-base \
102+
gstreamer1.0-plugins-good
103+
104+
- name: Build Linux native library
105+
working-directory: mediaplayer/src/jvmMain/native/linux
106+
run: bash build.sh
107+
env:
108+
NATIVE_LIBS_OUTPUT_DIR: ${{ github.workspace }}/build/nativeLibs
109+
110+
- name: Verify Linux natives
111+
run: |
112+
test -f build/nativeLibs/linux-${{ matrix.arch }}/libNativeVideoPlayer.so
113+
ls -la build/nativeLibs/linux-${{ matrix.arch }}/
114+
115+
- name: Upload Linux library
116+
uses: actions/upload-artifact@v7
57117
with:
58-
name: macos-natives
59-
path: |
60-
mediaplayer/src/jvmMain/resources/darwin-aarch64/
61-
mediaplayer/src/jvmMain/resources/darwin-x86-64/
118+
name: native-linux-${{ matrix.arch }}
119+
path: build/nativeLibs/
62120
retention-days: 1

.github/workflows/build-test.yml

Lines changed: 115 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,147 @@
11
name: Build and Test
22

33
on:
4+
push:
5+
branches: [ master ]
46
pull_request:
57
branches: [ master ]
68

9+
concurrency:
10+
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
11+
cancel-in-progress: true
12+
713
jobs:
814
build-natives:
915
uses: ./.github/workflows/build-natives.yml
1016

11-
build-and-test:
17+
jvm:
1218
needs: build-natives
13-
strategy:
14-
matrix:
15-
os: [ubuntu-latest, macos-latest, windows-latest]
16-
fail-fast: false
17-
18-
runs-on: ${{ matrix.os }}
19-
19+
runs-on: ubuntu-latest
2020
steps:
2121
- name: Checkout code
22-
uses: actions/checkout@v4
22+
uses: actions/checkout@v6
2323

24-
- name: Download Windows natives
25-
uses: actions/download-artifact@v4
24+
- name: Download all native libraries
25+
uses: actions/download-artifact@v8
2626
with:
27-
name: windows-natives
28-
path: mediaplayer/src/jvmMain/resources/
27+
path: mediaplayer/src/jvmMain/resources/composemediaplayer/native/
28+
pattern: native-*
2929
merge-multiple: true
3030

31-
- name: Download macOS natives
32-
uses: actions/download-artifact@v4
33-
with:
34-
name: macos-natives
35-
path: mediaplayer/src/jvmMain/resources/
36-
merge-multiple: true
37-
38-
- name: Verify all natives present
39-
shell: bash
31+
- name: Verify natives
4032
run: |
41-
EXPECTED=(
42-
"mediaplayer/src/jvmMain/resources/win32-x86-64/NativeVideoPlayer.dll"
43-
"mediaplayer/src/jvmMain/resources/win32-arm64/NativeVideoPlayer.dll"
44-
"mediaplayer/src/jvmMain/resources/darwin-aarch64/libNativeVideoPlayer.dylib"
45-
"mediaplayer/src/jvmMain/resources/darwin-x86-64/libNativeVideoPlayer.dylib"
46-
)
47-
MISSING=0
48-
for f in "${EXPECTED[@]}"; do
49-
if [ -f "$f" ]; then
50-
echo "OK: $f ($(wc -c < "$f") bytes)"
51-
else
52-
echo "MISSING: $f" >&2
53-
MISSING=1
54-
fi
33+
for f in \
34+
linux-x86-64/libNativeVideoPlayer.so \
35+
linux-aarch64/libNativeVideoPlayer.so \
36+
darwin-aarch64/libNativeVideoPlayer.dylib \
37+
darwin-x86-64/libNativeVideoPlayer.dylib \
38+
win32-x86-64/NativeVideoPlayer.dll \
39+
win32-arm64/NativeVideoPlayer.dll; do
40+
path="mediaplayer/src/jvmMain/resources/composemediaplayer/native/$f"
41+
if [ ! -f "$path" ]; then echo "MISSING: $path" >&2; exit 1; fi
42+
echo "OK: $path"
5543
done
56-
if [ "$MISSING" = "1" ]; then exit 1; fi
5744
5845
- name: Set up JDK
59-
uses: actions/setup-java@v4
46+
uses: actions/setup-java@v5
6047
with:
6148
java-version: '17'
6249
distribution: 'temurin'
6350
cache: gradle
6451

65-
- name: Grant execute permission for gradlew
66-
run: chmod +x gradlew
67-
if: runner.os != 'Windows'
52+
- name: Build and test JVM
53+
run: ./gradlew :mediaplayer:compileKotlinJvm :mediaplayer:jvmTest --no-daemon --continue
54+
55+
- name: Upload test reports
56+
uses: actions/upload-artifact@v7
57+
if: always()
58+
with:
59+
name: test-reports-jvm
60+
path: '**/build/reports/tests/'
6861

69-
- name: Build and test with Gradle
70-
run: ./gradlew build test --no-daemon
71-
shell: bash
62+
android:
63+
runs-on: ubuntu-latest
64+
steps:
65+
- name: Checkout code
66+
uses: actions/checkout@v6
67+
68+
- name: Set up JDK
69+
uses: actions/setup-java@v5
70+
with:
71+
java-version: '17'
72+
distribution: 'temurin'
73+
cache: gradle
74+
75+
- name: Build Android
76+
run: ./gradlew :mediaplayer:compileReleaseKotlinAndroid :mediaplayer:testReleaseUnitTest --no-daemon --continue
7277

7378
- name: Upload test reports
74-
uses: actions/upload-artifact@v4
79+
uses: actions/upload-artifact@v7
7580
if: always()
7681
with:
77-
name: test-reports-${{ matrix.os }}
82+
name: test-reports-android
7883
path: '**/build/reports/tests/'
84+
85+
ios:
86+
runs-on: macos-latest
87+
steps:
88+
- name: Checkout code
89+
uses: actions/checkout@v6
90+
91+
- name: Set up JDK
92+
uses: actions/setup-java@v5
93+
with:
94+
java-version: '17'
95+
distribution: 'temurin'
96+
cache: gradle
97+
98+
- name: Build iOS
99+
run: ./gradlew :mediaplayer:compileKotlinIosArm64 :mediaplayer:compileKotlinIosSimulatorArm64 --no-daemon
100+
101+
js:
102+
runs-on: ubuntu-latest
103+
steps:
104+
- name: Checkout code
105+
uses: actions/checkout@v6
106+
107+
- name: Set up JDK
108+
uses: actions/setup-java@v5
109+
with:
110+
java-version: '17'
111+
distribution: 'temurin'
112+
cache: gradle
113+
114+
- name: Build JS
115+
run: ./gradlew :mediaplayer:compileKotlinJs --no-daemon
116+
117+
wasmJs:
118+
runs-on: ubuntu-latest
119+
steps:
120+
- name: Checkout code
121+
uses: actions/checkout@v6
122+
123+
- name: Set up JDK
124+
uses: actions/setup-java@v5
125+
with:
126+
java-version: '17'
127+
distribution: 'temurin'
128+
cache: gradle
129+
130+
- name: Build WasmJS
131+
run: ./gradlew :mediaplayer:compileKotlinWasmJs --no-daemon
132+
133+
lint:
134+
runs-on: ubuntu-latest
135+
steps:
136+
- name: Checkout code
137+
uses: actions/checkout@v6
138+
139+
- name: Set up JDK
140+
uses: actions/setup-java@v5
141+
with:
142+
java-version: '17'
143+
distribution: 'temurin'
144+
cache: gradle
145+
146+
- name: Run ktlint and detekt
147+
run: ./gradlew ktlintCheck detekt --no-daemon --continue

.github/workflows/publish-documentation-and-sample.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ jobs:
2323

2424
steps:
2525
- name: Checkout
26-
uses: actions/checkout@v4
26+
uses: actions/checkout@v6
2727

2828
- name: Set up Java (Temurin 17)
29-
uses: actions/setup-java@v4
29+
uses: actions/setup-java@v5
3030
with:
3131
distribution: temurin
3232
java-version: 17
@@ -55,7 +55,7 @@ jobs:
5555
5656
# Upload to the "pages" artifact so it is available for the next job
5757
- name: Upload artifact for GitHub Pages
58-
uses: actions/upload-pages-artifact@v3
58+
uses: actions/upload-pages-artifact@v4
5959
with:
6060
path: build/final
6161

@@ -70,6 +70,6 @@ jobs:
7070
steps:
7171
- name: Deploy to GitHub Pages
7272
id: deployment
73-
uses: actions/deploy-pages@v4
73+
uses: actions/deploy-pages@v5
7474
with:
7575
path: build/final

0 commit comments

Comments
 (0)