Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# .editorconfig
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
max_line_length = 120
tab_width = 4
trim_trailing_whitespace = true

[*.{kt,kts}]
ij_kotlin_allow_trailing_comma = true
ij_kotlin_allow_trailing_comma_on_call_site = true
ij_kotlin_imports_layout = *, java.**, javax.**, kotlin.**, ^
ktlint_standard_no-wildcard-imports = disabled
ktlint_standard_function-naming = disabled
ktlint_standard_backing-property-naming = disabled
94 changes: 76 additions & 18 deletions .github/workflows/build-natives.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,55 +8,113 @@ jobs:
runs-on: windows-latest
steps:
- name: Checkout Repo
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Set up JDK
uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'temurin'

- name: Build Windows native DLLs
shell: cmd
working-directory: mediaplayer/src/jvmMain/native/windows
run: call build.bat
env:
NATIVE_LIBS_OUTPUT_DIR: ${{ github.workspace }}/build/nativeLibs

- name: Verify Windows natives
shell: bash
run: |
for f in \
mediaplayer/src/jvmMain/resources/win32-x86-64/NativeVideoPlayer.dll \
mediaplayer/src/jvmMain/resources/win32-arm64/NativeVideoPlayer.dll; do
build/nativeLibs/win32-x86-64/NativeVideoPlayer.dll \
build/nativeLibs/win32-arm64/NativeVideoPlayer.dll; do
if [ ! -f "$f" ]; then echo "MISSING: $f" >&2; exit 1; fi
echo "OK: $f ($(wc -c < "$f") bytes)"
done

- name: Upload Windows DLLs
uses: actions/upload-artifact@v4
- name: Upload Windows natives
uses: actions/upload-artifact@v7
with:
name: windows-natives
path: |
mediaplayer/src/jvmMain/resources/win32-x86-64/
mediaplayer/src/jvmMain/resources/win32-arm64/
name: native-windows
path: build/nativeLibs/
retention-days: 1

macos:
runs-on: macos-latest
steps:
- name: Checkout Repo
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Set up JDK
uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'temurin'

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

- name: Verify macOS natives
run: |
for f in \
mediaplayer/src/jvmMain/resources/darwin-aarch64/libNativeVideoPlayer.dylib \
mediaplayer/src/jvmMain/resources/darwin-x86-64/libNativeVideoPlayer.dylib; do
build/nativeLibs/darwin-aarch64/libNativeVideoPlayer.dylib \
build/nativeLibs/darwin-x86-64/libNativeVideoPlayer.dylib; do
if [ ! -f "$f" ]; then echo "MISSING: $f" >&2; exit 1; fi
echo "OK: $f ($(wc -c < "$f") bytes)"
done

- name: Upload macOS dylibs
uses: actions/upload-artifact@v4
- name: Upload macOS natives
uses: actions/upload-artifact@v7
with:
name: native-macos
path: build/nativeLibs/
retention-days: 1

linux:
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- os: ubuntu-latest
arch: x86-64
- os: ubuntu-24.04-arm
arch: aarch64
steps:
- name: Checkout Repo
uses: actions/checkout@v6

- name: Set up JDK
uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'temurin'

- name: Install GStreamer dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good

- name: Build Linux native library
working-directory: mediaplayer/src/jvmMain/native/linux
run: bash build.sh
env:
NATIVE_LIBS_OUTPUT_DIR: ${{ github.workspace }}/build/nativeLibs

- name: Verify Linux natives
run: |
test -f build/nativeLibs/linux-${{ matrix.arch }}/libNativeVideoPlayer.so
ls -la build/nativeLibs/linux-${{ matrix.arch }}/

- name: Upload Linux library
uses: actions/upload-artifact@v7
with:
name: macos-natives
path: |
mediaplayer/src/jvmMain/resources/darwin-aarch64/
mediaplayer/src/jvmMain/resources/darwin-x86-64/
name: native-linux-${{ matrix.arch }}
path: build/nativeLibs/
retention-days: 1
161 changes: 115 additions & 46 deletions .github/workflows/build-test.yml
Original file line number Diff line number Diff line change
@@ -1,78 +1,147 @@
name: Build and Test

on:
push:
branches: [ master ]
pull_request:
branches: [ master ]

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true

jobs:
build-natives:
uses: ./.github/workflows/build-natives.yml

build-and-test:
jvm:
needs: build-natives
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
fail-fast: false

runs-on: ${{ matrix.os }}

runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Download Windows natives
uses: actions/download-artifact@v4
- name: Download all native libraries
uses: actions/download-artifact@v8
with:
name: windows-natives
path: mediaplayer/src/jvmMain/resources/
path: mediaplayer/src/jvmMain/resources/composemediaplayer/native/
pattern: native-*
merge-multiple: true

- name: Download macOS natives
uses: actions/download-artifact@v4
with:
name: macos-natives
path: mediaplayer/src/jvmMain/resources/
merge-multiple: true

- name: Verify all natives present
shell: bash
- name: Verify natives
run: |
EXPECTED=(
"mediaplayer/src/jvmMain/resources/win32-x86-64/NativeVideoPlayer.dll"
"mediaplayer/src/jvmMain/resources/win32-arm64/NativeVideoPlayer.dll"
"mediaplayer/src/jvmMain/resources/darwin-aarch64/libNativeVideoPlayer.dylib"
"mediaplayer/src/jvmMain/resources/darwin-x86-64/libNativeVideoPlayer.dylib"
)
MISSING=0
for f in "${EXPECTED[@]}"; do
if [ -f "$f" ]; then
echo "OK: $f ($(wc -c < "$f") bytes)"
else
echo "MISSING: $f" >&2
MISSING=1
fi
for f in \
linux-x86-64/libNativeVideoPlayer.so \
linux-aarch64/libNativeVideoPlayer.so \
darwin-aarch64/libNativeVideoPlayer.dylib \
darwin-x86-64/libNativeVideoPlayer.dylib \
win32-x86-64/NativeVideoPlayer.dll \
win32-arm64/NativeVideoPlayer.dll; do
path="mediaplayer/src/jvmMain/resources/composemediaplayer/native/$f"
if [ ! -f "$path" ]; then echo "MISSING: $path" >&2; exit 1; fi
echo "OK: $path"
done
if [ "$MISSING" = "1" ]; then exit 1; fi

- name: Set up JDK
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'temurin'
cache: gradle

- name: Grant execute permission for gradlew
run: chmod +x gradlew
if: runner.os != 'Windows'
- name: Build and test JVM
run: ./gradlew :mediaplayer:compileKotlinJvm :mediaplayer:jvmTest --no-daemon --continue

- name: Upload test reports
uses: actions/upload-artifact@v7
if: always()
with:
name: test-reports-jvm
path: '**/build/reports/tests/'

- name: Build and test with Gradle
run: ./gradlew build test --no-daemon
shell: bash
android:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6

- name: Set up JDK
uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'temurin'
cache: gradle

- name: Build Android
run: ./gradlew :mediaplayer:compileReleaseKotlinAndroid :mediaplayer:testReleaseUnitTest --no-daemon --continue

- name: Upload test reports
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
if: always()
with:
name: test-reports-${{ matrix.os }}
name: test-reports-android
path: '**/build/reports/tests/'

ios:
runs-on: macos-latest
steps:
- name: Checkout code
uses: actions/checkout@v6

- name: Set up JDK
uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'temurin'
cache: gradle

- name: Build iOS
run: ./gradlew :mediaplayer:compileKotlinIosArm64 :mediaplayer:compileKotlinIosSimulatorArm64 --no-daemon

js:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6

- name: Set up JDK
uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'temurin'
cache: gradle

- name: Build JS
run: ./gradlew :mediaplayer:compileKotlinJs --no-daemon

wasmJs:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6

- name: Set up JDK
uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'temurin'
cache: gradle

- name: Build WasmJS
run: ./gradlew :mediaplayer:compileKotlinWasmJs --no-daemon

lint:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6

- name: Set up JDK
uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'temurin'
cache: gradle

- name: Run ktlint and detekt
run: ./gradlew ktlintCheck detekt --no-daemon --continue
8 changes: 4 additions & 4 deletions .github/workflows/publish-documentation-and-sample.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Set up Java (Temurin 17)
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 17
Expand Down Expand Up @@ -55,7 +55,7 @@ jobs:

# Upload to the "pages" artifact so it is available for the next job
- name: Upload artifact for GitHub Pages
uses: actions/upload-pages-artifact@v3
uses: actions/upload-pages-artifact@v4
with:
path: build/final

Expand All @@ -70,6 +70,6 @@ jobs:
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
uses: actions/deploy-pages@v5
with:
path: build/final
Loading