mirror of
https://github.com/cashapp/zipline.git
synced 2026-03-13 10:23:19 +08:00
270 lines
7.1 KiB
YAML
270 lines
7.1 KiB
YAML
name: build
|
|
|
|
on:
|
|
pull_request: {}
|
|
workflow_dispatch: {}
|
|
push:
|
|
branches:
|
|
- 'trunk'
|
|
tags-ignore:
|
|
- '**'
|
|
|
|
env:
|
|
GRADLE_OPTS: "-Dorg.gradle.jvmargs=-Xmx4g -Dorg.gradle.daemon=false -Dkotlin.incremental=false -Dorg.gradle.logging.stacktrace=full"
|
|
|
|
jobs:
|
|
zig:
|
|
runs-on: macos-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- uses: mlugg/setup-zig@v2
|
|
with:
|
|
version: 0.14.0
|
|
|
|
- run: zig build -p src/jvmMain/resources/jni
|
|
working-directory: zipline
|
|
|
|
- uses: actions/upload-artifact@v7
|
|
with:
|
|
name: jni-binaries
|
|
path: zipline/src/jvmMain/resources/jni
|
|
if-no-files-found: error
|
|
|
|
jvm-test-binary:
|
|
needs:
|
|
- zig
|
|
runs-on: macos-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- uses: actions/setup-java@v5
|
|
with:
|
|
distribution: 'zulu'
|
|
java-version-file: .github/workflows/.java-version
|
|
|
|
- uses: actions/download-artifact@v8
|
|
with:
|
|
name: jni-binaries
|
|
path: zipline/src/jvmMain/resources/jni
|
|
|
|
- run: ./gradlew :zipline:installJvmTestDistribution
|
|
|
|
- uses: actions/upload-artifact@v7
|
|
with:
|
|
name: jvm-tests
|
|
path: zipline/build/install/jvmTest
|
|
if-no-files-found: error
|
|
|
|
jvm-tests:
|
|
needs:
|
|
- jvm-test-binary
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
platform:
|
|
- macos-15-intel
|
|
- macos-15
|
|
- ubuntu-24.04
|
|
- ubuntu-24.04-arm
|
|
- windows-2025
|
|
- windows-11-arm
|
|
runs-on: ${{ matrix.platform }}
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
sparse-checkout: .github/workflows/.java-version
|
|
sparse-checkout-cone-mode: false
|
|
- uses: actions/setup-java@v5
|
|
with:
|
|
distribution: 'zulu'
|
|
java-version-file: .github/workflows/.java-version
|
|
|
|
- uses: actions/download-artifact@v8
|
|
with:
|
|
name: jvm-tests
|
|
|
|
- name: Run JVM tests
|
|
run: |
|
|
chmod +x bin/zipline-test
|
|
bin/zipline-test
|
|
|
|
native-tests:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
platform:
|
|
- os: macos-15-intel
|
|
task: macosX64Test
|
|
- os: macos-latest
|
|
task: macosArm64Test
|
|
- os: ubuntu-latest
|
|
task: linuxX64Test
|
|
- os: macos-latest
|
|
task: iosSimulatorArm64Test
|
|
- os: macos-latest
|
|
task: tvosSimulatorArm64Test
|
|
runs-on: ${{ matrix.platform.os }}
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- uses: actions/setup-java@v5
|
|
with:
|
|
distribution: 'zulu'
|
|
java-version-file: .github/workflows/.java-version
|
|
|
|
- run: ./gradlew ${{ matrix.platform.task }}
|
|
|
|
- uses: actions/upload-artifact@v7
|
|
if: ${{ always() }}
|
|
with:
|
|
name: test-report-native-${{ matrix.platform.task }}
|
|
path: '**/build/reports/tests/**'
|
|
retention-days: 1
|
|
|
|
check:
|
|
runs-on: macos-latest
|
|
needs:
|
|
- zig
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- uses: actions/setup-java@v5
|
|
with:
|
|
distribution: 'zulu'
|
|
java-version-file: .github/workflows/.java-version
|
|
|
|
- uses: actions/download-artifact@v8
|
|
with:
|
|
name: jni-binaries
|
|
path: zipline/src/jvmMain/resources/jni
|
|
|
|
# Disable Zipline jvmTest and native tests because they're run in jvm-tests and native-tests.
|
|
- run: >
|
|
./gradlew
|
|
check
|
|
-x allTests
|
|
-x iosSimulatorArm64Test
|
|
-x iosX64Test
|
|
-x :zipline:jvmTest
|
|
-x linuxX64Test
|
|
-x macosArm64Test
|
|
-x macosX64Test
|
|
-x tvosSimulatorArm64Test
|
|
-x tvosX64Test
|
|
|
|
sample-check:
|
|
runs-on: macos-latest
|
|
needs:
|
|
- zig
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- uses: actions/setup-java@v5
|
|
with:
|
|
distribution: 'zulu'
|
|
java-version-file: .github/workflows/.java-version
|
|
|
|
- uses: actions/download-artifact@v8
|
|
with:
|
|
name: jni-binaries
|
|
path: zipline/src/jvmMain/resources/jni
|
|
|
|
- run: ./gradlew -p samples check
|
|
|
|
android-tests:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- uses: actions/setup-java@v5
|
|
with:
|
|
distribution: 'zulu'
|
|
java-version-file: .github/workflows/.java-version
|
|
|
|
- name: Enable KVM
|
|
run: |
|
|
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
|
|
sudo udevadm control --reload-rules
|
|
sudo udevadm trigger --name-match=kvm
|
|
|
|
- run: ./gradlew assembleAndroidTest
|
|
|
|
- uses: reactivecircus/android-emulator-runner@v2
|
|
with:
|
|
api-level: 29
|
|
emulator-boot-timeout: 20000
|
|
script: ./gradlew connectedCheck
|
|
|
|
ios-app:
|
|
runs-on: macos-15
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- uses: actions/setup-java@v5
|
|
with:
|
|
distribution: 'zulu'
|
|
java-version-file: .github/workflows/.java-version
|
|
|
|
- name: Build Xcode samples
|
|
run: |
|
|
cd samples/world-clock/ios/app
|
|
pod install
|
|
xcodebuild -workspace WorldClock.xcworkspace -scheme WorldClock -destination 'platform=iOS Simulator,name=iPhone 16,OS=latest'
|
|
|
|
final-status:
|
|
if: ${{ !cancelled() }}
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- jvm-tests
|
|
- native-tests
|
|
- check
|
|
- sample-check
|
|
- android-tests
|
|
- ios-app
|
|
steps:
|
|
- name: Check
|
|
run: |
|
|
results=$(tr -d '\n' <<< '${{ toJSON(needs.*.result) }}')
|
|
if ! grep -q -v -E '(failure|cancelled)' <<< "$results"; then
|
|
echo "One or more required jobs failed"
|
|
exit 1
|
|
fi
|
|
|
|
publish:
|
|
if: ${{ github.ref == 'refs/heads/trunk' && github.repository == 'cashapp/zipline' }}
|
|
runs-on: macos-latest
|
|
needs:
|
|
- final-status
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- uses: actions/setup-java@v5
|
|
with:
|
|
distribution: 'zulu'
|
|
java-version-file: .github/workflows/.java-version
|
|
|
|
- uses: actions/download-artifact@v8
|
|
with:
|
|
name: jni-binaries
|
|
path: zipline/src/jvmMain/resources/jni
|
|
|
|
- run: ./gradlew publishToMavenCentral
|
|
env:
|
|
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_CENTRAL_USERNAME }}
|
|
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_CENTRAL_PASSWORD }}
|
|
ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.GPG_SECRET_KEY }}
|
|
ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.GPG_SECRET_PASSPHRASE }}
|
|
|
|
- run: ./gradlew :dokkaHtmlMultiModule
|
|
|
|
- uses: actions/upload-artifact@v7
|
|
with:
|
|
name: html-docs
|
|
path: build/dokka/htmlMultiModule/
|
|
if-no-files-found: error
|
|
|
|
- name: Deploy docs to website
|
|
uses: JamesIves/github-pages-deploy-action@releases/v3
|
|
with:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
BRANCH: site
|
|
FOLDER: build/dokka/htmlMultiModule/
|
|
TARGET_FOLDER: docs/latest/
|
|
CLEAN: true
|