From c5e71073ff731c5f73d2bbbe1f69169b7516b8c6 Mon Sep 17 00:00:00 2001 From: Konrad 'ktoso' Malawski Date: Mon, 30 Jun 2025 15:25:33 +0900 Subject: [PATCH 01/22] ci: more simple way to get macOS running, reusable workflows facing some issues --- .github/workflows/pull_request.yml | 70 ++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index c9d197e7..7f6f43a9 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -39,6 +39,29 @@ jobs: - name: Gradle compile JMH benchmarks run: ./gradlew compileJmh --info + test-java-macos: + name: Java tests (swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}} os:${{ matrix.os_version }}) + runs-on: [self-hosted, macos, sequoia, ARM64] + strategy: + fail-fast: true + matrix: + swift_version: ['6.1.2'] + os_version: ['macos'] + jdk_vendor: ['Corretto'] + env: + JAVA_HOME: "/usr/lib/jvm/default-jdk" + SWIFT_JAVA_VERBOSE: true + steps: + - uses: actions/checkout@v4 + - name: Prepare CI Environment + uses: ./.github/actions/prepare_env + - name: Gradle :SwiftKit:build + run: ./gradlew build -x test + - name: Gradle :SwiftKit:check + run: ./gradlew :SwiftKit:check --debug + - name: Gradle compile JMH benchmarks + run: ./gradlew compileJmh --info + test-swift: name: Swift tests (swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}} os:${{ matrix.os_version }}) runs-on: ubuntu-latest @@ -62,6 +85,27 @@ jobs: - name: Swift Test run: "swift test" + test-swift-macos: + name: Swift tests (swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}} os:${{ matrix.os_version }}) + runs-on: [self-hosted, macos, sequoia, ARM64] + strategy: + fail-fast: false + matrix: + swift_version: ['6.1.2'] + os_version: ['macos'] + jdk_vendor: ['Corretto'] + env: + JAVA_HOME: "/usr/lib/jvm/default-jdk" + SWIFT_JAVA_VERBOSE: true + steps: + - uses: actions/checkout@v4 + - name: Prepare CI Environment + uses: ./.github/actions/prepare_env + - name: Swift Build + run: "swift build --build-tests --disable-sandbox" + - name: Swift Test + run: "swift test" + verify-samples: name: Verify Sample ${{ matrix.sample_app }} (swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}} os:${{ matrix.os_version }}) runs-on: ubuntu-latest @@ -90,3 +134,29 @@ jobs: uses: ./.github/actions/prepare_env - name: "Verify sample" run: .github/scripts/validate_sample.sh Samples/${{ matrix.sample_app }} + + verify-samples-macos: + name: Verify Sample ${{ matrix.sample_app }} (swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}} os:${{ matrix.os_version }}) + runs-on: [self-hosted, macos, sequoia, ARM64] + strategy: + fail-fast: false + matrix: + swift_version: ['6.1.2'] + os_version: ['sequoia'] + jdk_vendor: ['Corretto'] + sample_app: [ + 'JavaDependencySampleApp', + 'JavaKitSampleApp', + 'JavaProbablyPrime', + 'JavaSieve', + 'SwiftAndJavaJarSampleLib', + 'SwiftKitSampleApp', + ] + env: + JAVA_HOME: "/usr/lib/jvm/default-jdk" + steps: + - uses: actions/checkout@v4 + - name: Prepare CI Environment + uses: ./.github/actions/prepare_env + - name: "Verify sample" + run: .github/scripts/validate_sample.sh Samples/${{ matrix.sample_app }} From 5d222c623a7d8182fd4e4881a6a00a7c4883c15e Mon Sep 17 00:00:00 2001 From: Konrad 'ktoso' Malawski Date: Mon, 30 Jun 2025 15:31:52 +0900 Subject: [PATCH 02/22] ci: change how we install jdk on macos --- .github/actions/prepare_env/action.yml | 14 ++++++++++---- .github/workflows/pull_request.yml | 18 ++++++++++++------ docker/Dockerfile | 2 +- docker/install_jdk.sh | 6 +++--- 4 files changed, 26 insertions(+), 14 deletions(-) diff --git a/.github/actions/prepare_env/action.yml b/.github/actions/prepare_env/action.yml index dfd0a435..2b1295ed 100644 --- a/.github/actions/prepare_env/action.yml +++ b/.github/actions/prepare_env/action.yml @@ -5,10 +5,18 @@ runs: using: composite steps: - name: Install System Dependencies + if: matrix.os_version == 'jammy' run: apt-get -qq update && apt-get -qq install -y make curl wget libjemalloc2 libjemalloc-dev shell: bash + - name: Set up JDK ${{ matrix.jdk_version }} + uses: actions/setup-java@v4 + with: + java-version: ${{ matrix.jdk_version }} + distribution: ${{ matrix.jdk_vendor }} + cache: 'gradle' - name: Cache JDKs id: cache-jdk + if: matrix.os_version == 'jammy' uses: actions/cache@v4 continue-on-error: true with: @@ -17,12 +25,9 @@ runs: restore-keys: | ${{ runner.os }}-jdk- - name: Install JDK - if: steps.cache-jdk.outputs.cache-hit != 'true' + if: steps.cache-jdk.outputs.cache-hit != 'true' && matrix.os_version == 'jammy' run: "bash -xc 'JDK_VENDOR=${{ matrix.jdk_vendor }} ./docker/install_jdk.sh'" shell: bash - # TODO: not using setup-java since incompatible with the swiftlang/swift base image - # - name: Install Untested Nightly Swift - # run: "bash -xc './docker/install_untested_nightly_swift.sh'" - name: Cache local Gradle repository uses: actions/cache@v4 continue-on-error: true @@ -34,6 +39,7 @@ runs: restore-keys: | ${{ runner.os }}-gradle- - name: Cache local SwiftPM repository + if: matrix.os_version == 'jammy' uses: actions/cache@v4 continue-on-error: true with: diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 7f6f43a9..5b999dc2 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -22,7 +22,8 @@ jobs: matrix: swift_version: ['6.1.2'] os_version: ['jammy'] - jdk_vendor: ['Corretto'] + jdk_vendor: ['corretto'] + jdk_version: ['24'] container: image: ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }} env: @@ -47,7 +48,8 @@ jobs: matrix: swift_version: ['6.1.2'] os_version: ['macos'] - jdk_vendor: ['Corretto'] + jdk_vendor: ['corretto'] + jdk_version: ['24'] env: JAVA_HOME: "/usr/lib/jvm/default-jdk" SWIFT_JAVA_VERBOSE: true @@ -70,7 +72,8 @@ jobs: matrix: swift_version: ['6.1.2'] os_version: ['jammy'] - jdk_vendor: ['Corretto'] + jdk_vendor: ['corretto'] + jdk_version: ['24'] container: image: ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }} env: @@ -93,7 +96,8 @@ jobs: matrix: swift_version: ['6.1.2'] os_version: ['macos'] - jdk_vendor: ['Corretto'] + jdk_vendor: ['corretto'] + jdk_version: ['24'] env: JAVA_HOME: "/usr/lib/jvm/default-jdk" SWIFT_JAVA_VERBOSE: true @@ -114,7 +118,8 @@ jobs: matrix: swift_version: ['6.1.2'] os_version: ['jammy'] - jdk_vendor: ['Corretto'] + jdk_vendor: ['corretto'] + jdk_version: ['24'] sample_app: [ 'JavaDependencySampleApp', 'JavaKitSampleApp', @@ -143,7 +148,8 @@ jobs: matrix: swift_version: ['6.1.2'] os_version: ['sequoia'] - jdk_vendor: ['Corretto'] + jdk_vendor: ['corretto'] + jdk_version: ['24'] sample_app: [ 'JavaDependencySampleApp', 'JavaKitSampleApp', diff --git a/docker/Dockerfile b/docker/Dockerfile index 6604d091..06b17a87 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -21,6 +21,6 @@ ENV LANGUAGE=en_US.UTF-8 COPY install_jdk.sh . # JDK dependency -RUN bash -xc 'JDK_VENDOR=Corretto ./install_jdk.sh' +RUN bash -xc 'JDK_VENDOR=corretto ./install_jdk.sh' ENV JAVA_HOME="/usr/lib/jvm/default-jdk" ENV PATH="$PATH:/usr/lib/jvm/default-jdk/bin" diff --git a/docker/install_jdk.sh b/docker/install_jdk.sh index 8d0ddda3..122c0d06 100755 --- a/docker/install_jdk.sh +++ b/docker/install_jdk.sh @@ -17,9 +17,9 @@ set -euo pipefail # We need JDK 24 because that's the supported version with latest FFM # However, we also need JDK 23 at most because Gradle does not support 24. -# Supported JDKs: Corretto +# Supported JDKs: corretto if [ "$JDK_VENDOR" = "" ]; then -declare -r JDK_VENDOR="Corretto" +declare -r JDK_VENDOR="corretto" fi apt-get update && apt-get install -y wget tree @@ -33,7 +33,7 @@ download_and_install_jdk() { echo "Installing $JDK_VENDOR JDK (${jdk_version})..." - if [ "$JDK_VENDOR" = 'Corretto' ]; then + if [ "$JDK_VENDOR" = 'corretto' ]; then if [ "$(uname -m)" = 'aarch64' ]; then case "$jdk_version" in "21") From 33117fd25ec4bf0e1b0e45f5133b3e9e0f9edadb Mon Sep 17 00:00:00 2001 From: Konrad 'ktoso' Malawski Date: Mon, 30 Jun 2025 15:39:41 +0900 Subject: [PATCH 03/22] ci: we must use jdk21 for gradle, 24 is not supported yet --- .github/workflows/pull_request.yml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 5b999dc2..f4bcdd76 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -15,7 +15,7 @@ jobs: license_header_check_project_name: Swift.org test-java: - name: Java tests (swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}} os:${{ matrix.os_version }}) + name: Test (Java) (${{ matrix.os_version }} swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}}) runs-on: ubuntu-latest strategy: fail-fast: true @@ -23,7 +23,7 @@ jobs: swift_version: ['6.1.2'] os_version: ['jammy'] jdk_vendor: ['corretto'] - jdk_version: ['24'] + jdk_version: ['21'] container: image: ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }} env: @@ -41,7 +41,7 @@ jobs: run: ./gradlew compileJmh --info test-java-macos: - name: Java tests (swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}} os:${{ matrix.os_version }}) + name: Test (Java) (${{ matrix.os_version }} swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}}) runs-on: [self-hosted, macos, sequoia, ARM64] strategy: fail-fast: true @@ -49,7 +49,7 @@ jobs: swift_version: ['6.1.2'] os_version: ['macos'] jdk_vendor: ['corretto'] - jdk_version: ['24'] + jdk_version: ['21'] env: JAVA_HOME: "/usr/lib/jvm/default-jdk" SWIFT_JAVA_VERBOSE: true @@ -65,7 +65,7 @@ jobs: run: ./gradlew compileJmh --info test-swift: - name: Swift tests (swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}} os:${{ matrix.os_version }}) + name: Test (Swift) (${{ matrix.os_version }} swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}}) runs-on: ubuntu-latest strategy: fail-fast: false @@ -73,7 +73,7 @@ jobs: swift_version: ['6.1.2'] os_version: ['jammy'] jdk_vendor: ['corretto'] - jdk_version: ['24'] + jdk_version: ['21'] container: image: ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }} env: @@ -89,7 +89,7 @@ jobs: run: "swift test" test-swift-macos: - name: Swift tests (swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}} os:${{ matrix.os_version }}) + name: Test (Swift) (${{ matrix.os_version }} swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}}) runs-on: [self-hosted, macos, sequoia, ARM64] strategy: fail-fast: false @@ -97,7 +97,7 @@ jobs: swift_version: ['6.1.2'] os_version: ['macos'] jdk_vendor: ['corretto'] - jdk_version: ['24'] + jdk_version: ['21'] env: JAVA_HOME: "/usr/lib/jvm/default-jdk" SWIFT_JAVA_VERBOSE: true @@ -111,7 +111,7 @@ jobs: run: "swift test" verify-samples: - name: Verify Sample ${{ matrix.sample_app }} (swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}} os:${{ matrix.os_version }}) + name: Sample ${{ matrix.sample_app }} (${{ matrix.os_version }} swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}}) runs-on: ubuntu-latest strategy: fail-fast: false @@ -119,7 +119,7 @@ jobs: swift_version: ['6.1.2'] os_version: ['jammy'] jdk_vendor: ['corretto'] - jdk_version: ['24'] + jdk_version: ['21'] sample_app: [ 'JavaDependencySampleApp', 'JavaKitSampleApp', @@ -141,15 +141,15 @@ jobs: run: .github/scripts/validate_sample.sh Samples/${{ matrix.sample_app }} verify-samples-macos: - name: Verify Sample ${{ matrix.sample_app }} (swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}} os:${{ matrix.os_version }}) + name: Sample ${{ matrix.sample_app }} (${{ matrix.os_version }} swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}}) runs-on: [self-hosted, macos, sequoia, ARM64] strategy: fail-fast: false matrix: swift_version: ['6.1.2'] - os_version: ['sequoia'] + os_version: ['macos'] jdk_vendor: ['corretto'] - jdk_version: ['24'] + jdk_version: ['21'] sample_app: [ 'JavaDependencySampleApp', 'JavaKitSampleApp', From ea14b00cfff56197831db99c672339a745dd408d Mon Sep 17 00:00:00 2001 From: Konrad 'ktoso' Malawski Date: Mon, 30 Jun 2025 15:53:20 +0900 Subject: [PATCH 04/22] check if we can rely on setup-java again --- .github/actions/prepare_env/action.yml | 56 +++++++++++++------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/.github/actions/prepare_env/action.yml b/.github/actions/prepare_env/action.yml index 2b1295ed..3ab6fac5 100644 --- a/.github/actions/prepare_env/action.yml +++ b/.github/actions/prepare_env/action.yml @@ -4,40 +4,40 @@ description: 'Prepare the CI environment by installing Swift and selected JDK et runs: using: composite steps: - - name: Install System Dependencies - if: matrix.os_version == 'jammy' - run: apt-get -qq update && apt-get -qq install -y make curl wget libjemalloc2 libjemalloc-dev - shell: bash +# - name: Install System Dependencies +# if: matrix.os_version == 'jammy' +# run: apt-get -qq update && apt-get -qq install -y make curl wget libjemalloc2 libjemalloc-dev +# shell: bash - name: Set up JDK ${{ matrix.jdk_version }} uses: actions/setup-java@v4 with: java-version: ${{ matrix.jdk_version }} distribution: ${{ matrix.jdk_vendor }} cache: 'gradle' - - name: Cache JDKs - id: cache-jdk - if: matrix.os_version == 'jammy' - uses: actions/cache@v4 - continue-on-error: true - with: - path: /usr/lib/jvm/ - key: ${{ runner.os }}-jdk-${{ matrix.jdk_vendor }}-${{ hashFiles('/usr/lib/jvm/*') }} - restore-keys: | - ${{ runner.os }}-jdk- - - name: Install JDK - if: steps.cache-jdk.outputs.cache-hit != 'true' && matrix.os_version == 'jammy' - run: "bash -xc 'JDK_VENDOR=${{ matrix.jdk_vendor }} ./docker/install_jdk.sh'" - shell: bash - - name: Cache local Gradle repository - uses: actions/cache@v4 - continue-on-error: true - with: - path: | - /root/.gradle/caches - /root/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('*/*.gradle*', 'settings.gradle') }} - restore-keys: | - ${{ runner.os }}-gradle- +# - name: Cache JDKs +# id: cache-jdk +# if: matrix.os_version == 'jammy' +# uses: actions/cache@v4 +# continue-on-error: true +# with: +# path: /usr/lib/jvm/ +# key: ${{ runner.os }}-jdk-${{ matrix.jdk_vendor }}-${{ hashFiles('/usr/lib/jvm/*') }} +# restore-keys: | +# ${{ runner.os }}-jdk- +# - name: Install JDK +# if: steps.cache-jdk.outputs.cache-hit != 'true' && matrix.os_version == 'jammy' +# run: "bash -xc 'JDK_VENDOR=${{ matrix.jdk_vendor }} ./docker/install_jdk.sh'" +# shell: bash +# - name: Cache local Gradle repository +# uses: actions/cache@v4 +# continue-on-error: true +# with: +# path: | +# /root/.gradle/caches +# /root/.gradle/wrapper +# key: ${{ runner.os }}-gradle-${{ hashFiles('*/*.gradle*', 'settings.gradle') }} +# restore-keys: | +# ${{ runner.os }}-gradle- - name: Cache local SwiftPM repository if: matrix.os_version == 'jammy' uses: actions/cache@v4 From 19dbbf61c2e135f5cb1d245e76f58c072e9710ae Mon Sep 17 00:00:00 2001 From: Konrad 'ktoso' Malawski Date: Mon, 30 Jun 2025 16:26:46 +0900 Subject: [PATCH 05/22] bump samples macos platform --- Samples/JavaProbablyPrime/Package.swift | 2 +- Samples/JavaSieve/Package.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Samples/JavaProbablyPrime/Package.swift b/Samples/JavaProbablyPrime/Package.swift index 4cc887f8..0f9d86d3 100644 --- a/Samples/JavaProbablyPrime/Package.swift +++ b/Samples/JavaProbablyPrime/Package.swift @@ -7,7 +7,7 @@ import PackageDescription let package = Package( name: "JavaProbablyPrime", platforms: [ - .macOS(.v10_15), + .macOS(.v15), ], products: [ diff --git a/Samples/JavaSieve/Package.swift b/Samples/JavaSieve/Package.swift index 65c10481..b3323db5 100644 --- a/Samples/JavaSieve/Package.swift +++ b/Samples/JavaSieve/Package.swift @@ -42,7 +42,7 @@ let javaIncludePath = "\(javaHome)/include" let package = Package( name: "JavaSieve", platforms: [ - .macOS(.v10_15), + .macOS(.v15), ], dependencies: [ .package(name: "swift-java", path: "../../"), From 788141883bdb6629c1f1f14b8c65cdbc77361512 Mon Sep 17 00:00:00 2001 From: Konrad 'ktoso' Malawski Date: Mon, 30 Jun 2025 16:29:15 +0900 Subject: [PATCH 06/22] ci: use setup-java to install multiple JDKs --- .github/actions/prepare_env/action.yml | 4 +++- .github/workflows/pull_request.yml | 6 ------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.github/actions/prepare_env/action.yml b/.github/actions/prepare_env/action.yml index 3ab6fac5..4a705606 100644 --- a/.github/actions/prepare_env/action.yml +++ b/.github/actions/prepare_env/action.yml @@ -11,8 +11,10 @@ runs: - name: Set up JDK ${{ matrix.jdk_version }} uses: actions/setup-java@v4 with: - java-version: ${{ matrix.jdk_version }} distribution: ${{ matrix.jdk_vendor }} + java-version: | + 24 + 21 cache: 'gradle' # - name: Cache JDKs # id: cache-jdk diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index f4bcdd76..77af9701 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -23,7 +23,6 @@ jobs: swift_version: ['6.1.2'] os_version: ['jammy'] jdk_vendor: ['corretto'] - jdk_version: ['21'] container: image: ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }} env: @@ -49,7 +48,6 @@ jobs: swift_version: ['6.1.2'] os_version: ['macos'] jdk_vendor: ['corretto'] - jdk_version: ['21'] env: JAVA_HOME: "/usr/lib/jvm/default-jdk" SWIFT_JAVA_VERBOSE: true @@ -73,7 +71,6 @@ jobs: swift_version: ['6.1.2'] os_version: ['jammy'] jdk_vendor: ['corretto'] - jdk_version: ['21'] container: image: ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }} env: @@ -97,7 +94,6 @@ jobs: swift_version: ['6.1.2'] os_version: ['macos'] jdk_vendor: ['corretto'] - jdk_version: ['21'] env: JAVA_HOME: "/usr/lib/jvm/default-jdk" SWIFT_JAVA_VERBOSE: true @@ -119,7 +115,6 @@ jobs: swift_version: ['6.1.2'] os_version: ['jammy'] jdk_vendor: ['corretto'] - jdk_version: ['21'] sample_app: [ 'JavaDependencySampleApp', 'JavaKitSampleApp', @@ -149,7 +144,6 @@ jobs: swift_version: ['6.1.2'] os_version: ['macos'] jdk_vendor: ['corretto'] - jdk_version: ['21'] sample_app: [ 'JavaDependencySampleApp', 'JavaKitSampleApp', From 47d063b498dea9c6e31be6cead42bc9b95fa3fde Mon Sep 17 00:00:00 2001 From: Konrad 'ktoso' Malawski Date: Mon, 30 Jun 2025 16:41:06 +0900 Subject: [PATCH 07/22] bump platform dependencies in samples --- Samples/JavaDependencySampleApp/Package.swift | 3 +++ Samples/JavaKitSampleApp/Package.swift | 9 ++++----- Samples/JavaProbablyPrime/Package.swift | 3 +++ Samples/JavaSieve/Package.swift | 3 +++ Samples/SwiftAndJavaJarSampleLib/Package.swift | 5 ++++- Samples/SwiftKitSampleApp/Package.swift | 5 ++++- 6 files changed, 21 insertions(+), 7 deletions(-) diff --git a/Samples/JavaDependencySampleApp/Package.swift b/Samples/JavaDependencySampleApp/Package.swift index 4fa33116..506b8c93 100644 --- a/Samples/JavaDependencySampleApp/Package.swift +++ b/Samples/JavaDependencySampleApp/Package.swift @@ -44,6 +44,9 @@ let package = Package( name: "JavaDependencySampleApp", platforms: [ .macOS(.v15), + .iOS(.v18), + .watchOS(.v11), + .tvOS(.v18), ], products: [ diff --git a/Samples/JavaKitSampleApp/Package.swift b/Samples/JavaKitSampleApp/Package.swift index 0956290c..1b545819 100644 --- a/Samples/JavaKitSampleApp/Package.swift +++ b/Samples/JavaKitSampleApp/Package.swift @@ -43,11 +43,10 @@ let javaIncludePath = "\(javaHome)/include" let package = Package( name: "JavaKitSampleApp", platforms: [ - .macOS(.v13), - .iOS(.v13), - .tvOS(.v13), - .watchOS(.v6), - .macCatalyst(.v13), + .macOS(.v15), + .iOS(.v18), + .watchOS(.v11), + .tvOS(.v18), ], products: [ diff --git a/Samples/JavaProbablyPrime/Package.swift b/Samples/JavaProbablyPrime/Package.swift index 0f9d86d3..9f0ecff2 100644 --- a/Samples/JavaProbablyPrime/Package.swift +++ b/Samples/JavaProbablyPrime/Package.swift @@ -8,6 +8,9 @@ let package = Package( name: "JavaProbablyPrime", platforms: [ .macOS(.v15), + .iOS(.v18), + .watchOS(.v11), + .tvOS(.v18), ], products: [ diff --git a/Samples/JavaSieve/Package.swift b/Samples/JavaSieve/Package.swift index b3323db5..ee61a021 100644 --- a/Samples/JavaSieve/Package.swift +++ b/Samples/JavaSieve/Package.swift @@ -43,6 +43,9 @@ let package = Package( name: "JavaSieve", platforms: [ .macOS(.v15), + .iOS(.v18), + .watchOS(.v11), + .tvOS(.v18), ], dependencies: [ .package(name: "swift-java", path: "../../"), diff --git a/Samples/SwiftAndJavaJarSampleLib/Package.swift b/Samples/SwiftAndJavaJarSampleLib/Package.swift index c4c604ee..c350a0e7 100644 --- a/Samples/SwiftAndJavaJarSampleLib/Package.swift +++ b/Samples/SwiftAndJavaJarSampleLib/Package.swift @@ -43,7 +43,10 @@ let javaIncludePath = "\(javaHome)/include" let package = Package( name: "SwiftAndJavaJarSampleLib", platforms: [ - .macOS(.v15) + .macOS(.v15), + .iOS(.v18), + .watchOS(.v11), + .tvOS(.v18), ], products: [ .library( diff --git a/Samples/SwiftKitSampleApp/Package.swift b/Samples/SwiftKitSampleApp/Package.swift index 34d8fcd3..8501062b 100644 --- a/Samples/SwiftKitSampleApp/Package.swift +++ b/Samples/SwiftKitSampleApp/Package.swift @@ -43,7 +43,10 @@ let javaIncludePath = "\(javaHome)/include" let package = Package( name: "SwiftKitSampleApp", platforms: [ - .macOS(.v15) + .macOS(.v15), + .iOS(.v18), + .watchOS(.v11), + .tvOS(.v18), ], products: [ .library( From 925f76f871072b7a7fd7f976092af3a14c064c47 Mon Sep 17 00:00:00 2001 From: Konrad 'ktoso' Malawski Date: Mon, 30 Jun 2025 21:35:48 +0900 Subject: [PATCH 08/22] cleanup --- .github/actions/prepare_env/action.yml | 28 ------------------- .github/workflows/pull_request.yml | 8 +++--- .../SwiftAndJavaJarSampleLib/ci-validate.sh | 16 ++++++----- 3 files changed, 13 insertions(+), 39 deletions(-) diff --git a/.github/actions/prepare_env/action.yml b/.github/actions/prepare_env/action.yml index 4a705606..eccd76ca 100644 --- a/.github/actions/prepare_env/action.yml +++ b/.github/actions/prepare_env/action.yml @@ -4,10 +4,6 @@ description: 'Prepare the CI environment by installing Swift and selected JDK et runs: using: composite steps: -# - name: Install System Dependencies -# if: matrix.os_version == 'jammy' -# run: apt-get -qq update && apt-get -qq install -y make curl wget libjemalloc2 libjemalloc-dev -# shell: bash - name: Set up JDK ${{ matrix.jdk_version }} uses: actions/setup-java@v4 with: @@ -16,30 +12,6 @@ runs: 24 21 cache: 'gradle' -# - name: Cache JDKs -# id: cache-jdk -# if: matrix.os_version == 'jammy' -# uses: actions/cache@v4 -# continue-on-error: true -# with: -# path: /usr/lib/jvm/ -# key: ${{ runner.os }}-jdk-${{ matrix.jdk_vendor }}-${{ hashFiles('/usr/lib/jvm/*') }} -# restore-keys: | -# ${{ runner.os }}-jdk- -# - name: Install JDK -# if: steps.cache-jdk.outputs.cache-hit != 'true' && matrix.os_version == 'jammy' -# run: "bash -xc 'JDK_VENDOR=${{ matrix.jdk_vendor }} ./docker/install_jdk.sh'" -# shell: bash -# - name: Cache local Gradle repository -# uses: actions/cache@v4 -# continue-on-error: true -# with: -# path: | -# /root/.gradle/caches -# /root/.gradle/wrapper -# key: ${{ runner.os }}-gradle-${{ hashFiles('*/*.gradle*', 'settings.gradle') }} -# restore-keys: | -# ${{ runner.os }}-gradle- - name: Cache local SwiftPM repository if: matrix.os_version == 'jammy' uses: actions/cache@v4 diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 77af9701..838aa0eb 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -115,7 +115,7 @@ jobs: swift_version: ['6.1.2'] os_version: ['jammy'] jdk_vendor: ['corretto'] - sample_app: [ + sample_app: [ # TODO: use a reusable-workflow to generate those names 'JavaDependencySampleApp', 'JavaKitSampleApp', 'JavaProbablyPrime', @@ -132,7 +132,7 @@ jobs: - uses: actions/checkout@v4 - name: Prepare CI Environment uses: ./.github/actions/prepare_env - - name: "Verify sample" + - name: "Verify sample: ${{ matrix.sample_app }}" run: .github/scripts/validate_sample.sh Samples/${{ matrix.sample_app }} verify-samples-macos: @@ -144,7 +144,7 @@ jobs: swift_version: ['6.1.2'] os_version: ['macos'] jdk_vendor: ['corretto'] - sample_app: [ + sample_app: [ # TODO: use a reusable-workflow to generate those names 'JavaDependencySampleApp', 'JavaKitSampleApp', 'JavaProbablyPrime', @@ -158,5 +158,5 @@ jobs: - uses: actions/checkout@v4 - name: Prepare CI Environment uses: ./.github/actions/prepare_env - - name: "Verify sample" + - name: "Verify sample ${{ matrix.sample_app }}" run: .github/scripts/validate_sample.sh Samples/${{ matrix.sample_app }} diff --git a/Samples/SwiftAndJavaJarSampleLib/ci-validate.sh b/Samples/SwiftAndJavaJarSampleLib/ci-validate.sh index 1b4769e8..c0303700 100755 --- a/Samples/SwiftAndJavaJarSampleLib/ci-validate.sh +++ b/Samples/SwiftAndJavaJarSampleLib/ci-validate.sh @@ -6,14 +6,12 @@ set -x ./gradlew jar SWIFT_VERSION="$(swift -version | awk '/Swift version/ { print $3 }')" +ARCH=$(uname -m) -# we make sure to build and run with JDK 24 because the runtime needs latest JDK, unlike Gradle which needed 21. -if [ "$(uname -s)" = 'Darwin' ] -then - export OS='osx' +if [ -n "$JAVA_HOME_24_$ARCH" ]; then + export JAVA_HOME="$JAVA_HOME_24_$ARCH" elif [ "$(uname -s)" = 'Linux' ] then - export OS='linux' export PATH="${PATH}:/usr/lib/jvm/jdk-24/bin" # we need to make sure to use the latest JDK to actually compile/run the executable fi @@ -24,8 +22,12 @@ MYLIB_CLASSPATH="$(pwd)/build/libs/*" CLASSPATH="$(pwd)/:${SWIFTKIT_CLASSPATH}:${MYLIB_CLASSPATH}" echo "CLASSPATH = ${CLASSPATH}" -javac -cp "${CLASSPATH}" Example.java +JAVAC="${JAVA_HOME}/bin/javac" +JAVA="${JAVA_HOME}/bin/java" + +$JAVAC -cp "${CLASSPATH}" Example.java +# TODO: move all this into Gradle or SwiftPM and make it easier to get the right classpath for running if [ "$(uname -s)" = 'Linux' ] then SWIFT_LIB_PATHS=/usr/lib/swift/linux @@ -50,7 +52,7 @@ fi echo "SWIFT_LIB_PATHS = ${SWIFT_LIB_PATHS}" # Can we run the example? -java --enable-native-access=ALL-UNNAMED \ +${JAVA} --enable-native-access=ALL-UNNAMED \ -Djava.library.path="${SWIFT_LIB_PATHS}" \ -cp "${CLASSPATH}" \ Example From 42f40d8f014438fcf3cd4607bd626741a74a83d7 Mon Sep 17 00:00:00 2001 From: Konrad 'ktoso' Malawski Date: Mon, 30 Jun 2025 21:46:22 +0900 Subject: [PATCH 09/22] debuggin java home --- .github/actions/prepare_env/action.yml | 3 +++ .github/workflows/pull_request.yml | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/actions/prepare_env/action.yml b/.github/actions/prepare_env/action.yml index eccd76ca..f1885f1b 100644 --- a/.github/actions/prepare_env/action.yml +++ b/.github/actions/prepare_env/action.yml @@ -12,6 +12,9 @@ runs: 24 21 cache: 'gradle' + - name: List JAVA_HOME + run: env | grep JAVA_HOME + shell: bash - name: Cache local SwiftPM repository if: matrix.os_version == 'jammy' uses: actions/cache@v4 diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 838aa0eb..8b54ca3c 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -115,7 +115,7 @@ jobs: swift_version: ['6.1.2'] os_version: ['jammy'] jdk_vendor: ['corretto'] - sample_app: [ # TODO: use a reusable-workflow to generate those names + sample_app: [ # TODO: use a reusable-workflow to generate those names 'JavaDependencySampleApp', 'JavaKitSampleApp', 'JavaProbablyPrime', @@ -144,7 +144,7 @@ jobs: swift_version: ['6.1.2'] os_version: ['macos'] jdk_vendor: ['corretto'] - sample_app: [ # TODO: use a reusable-workflow to generate those names + sample_app: [ # TODO: use a reusable-workflow to generate those names 'JavaDependencySampleApp', 'JavaKitSampleApp', 'JavaProbablyPrime', From 519590cba6c386e64ef8d0576377cfcfea11874e Mon Sep 17 00:00:00 2001 From: Konrad 'ktoso' Malawski Date: Mon, 30 Jun 2025 21:48:55 +0900 Subject: [PATCH 10/22] arch must be uppercase for env variable --- Samples/SwiftAndJavaJarSampleLib/ci-validate.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Samples/SwiftAndJavaJarSampleLib/ci-validate.sh b/Samples/SwiftAndJavaJarSampleLib/ci-validate.sh index c0303700..8fd94c76 100755 --- a/Samples/SwiftAndJavaJarSampleLib/ci-validate.sh +++ b/Samples/SwiftAndJavaJarSampleLib/ci-validate.sh @@ -6,7 +6,7 @@ set -x ./gradlew jar SWIFT_VERSION="$(swift -version | awk '/Swift version/ { print $3 }')" -ARCH=$(uname -m) +ARCH=$(uname -m | awk '{ print toupper($0) }') if [ -n "$JAVA_HOME_24_$ARCH" ]; then export JAVA_HOME="$JAVA_HOME_24_$ARCH" From dca4ade6a805e136d79089c9ffa15db9f0bb5810 Mon Sep 17 00:00:00 2001 From: Konrad 'ktoso' Malawski Date: Mon, 30 Jun 2025 22:02:09 +0900 Subject: [PATCH 11/22] Help Gradle discover other installed JDKs --- .github/actions/prepare_env/action.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/actions/prepare_env/action.yml b/.github/actions/prepare_env/action.yml index f1885f1b..6faf39c8 100644 --- a/.github/actions/prepare_env/action.yml +++ b/.github/actions/prepare_env/action.yml @@ -12,9 +12,19 @@ runs: 24 21 cache: 'gradle' + - name: Re-export JAVA_HOME + run: > + if [[ -n "$JAVA_HOME_24_ARM64" ]]; then echo "JAVA_HOME_24=${{ env.JAVA_HOME_24_ARM64 }}" >> $GITHUB_ENV; fi; + if [[ -n "$JAVA_HOME_24_X64" ]]; then echo "JAVA_HOME_24=${{ env.JAVA_HOME_24_X64 }}" >> $GITHUB_ENV; fi; + if [[ -n "$JAVA_HOME_21_ARM64" ]]; then echo "JAVA_HOME_21=${{ env.JAVA_HOME_21_ARM64 }}" >> $GITHUB_ENV; fi; + if [[ -n "$JAVA_HOME_21_X64" ]]; then echo "JAVA_HOME_21=${{ env.JAVA_HOME_21_X64 }}" >> $GITHUB_ENV; fi; + shell: bash - name: List JAVA_HOME run: env | grep JAVA_HOME shell: bash + - name: Check Gradle detected toolchains + run: ./gradlew -q javaToolchains + shell: bash - name: Cache local SwiftPM repository if: matrix.os_version == 'jammy' uses: actions/cache@v4 From 9a273721c0b2141a7500b2bc7f9c784a55684c58 Mon Sep 17 00:00:00 2001 From: Konrad 'ktoso' Malawski Date: Mon, 30 Jun 2025 22:12:34 +0900 Subject: [PATCH 12/22] set javac/java from setup-java env --- Samples/SwiftAndJavaJarSampleLib/ci-validate.sh | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/Samples/SwiftAndJavaJarSampleLib/ci-validate.sh b/Samples/SwiftAndJavaJarSampleLib/ci-validate.sh index 8fd94c76..0664cdb1 100755 --- a/Samples/SwiftAndJavaJarSampleLib/ci-validate.sh +++ b/Samples/SwiftAndJavaJarSampleLib/ci-validate.sh @@ -6,7 +6,17 @@ set -x ./gradlew jar SWIFT_VERSION="$(swift -version | awk '/Swift version/ { print $3 }')" -ARCH=$(uname -m | awk '{ print toupper($0) }') + +# This is how env variables are set by setup-java +if [ "$(uname -m)" = 'arm64' ]; then + ARCH=ARM64 + JAVAC="${JAVA_HOME_24_ARM64}/bin/javac" + JAVA="${JAVA_HOME_24_ARM64}/bin/java" +else + ARCH=X64 + JAVAC="${JAVA_HOME_24_X64}/bin/javac" + JAVA="${JAVA_HOME_24_X64}/bin/java" +fi if [ -n "$JAVA_HOME_24_$ARCH" ]; then export JAVA_HOME="$JAVA_HOME_24_$ARCH" @@ -22,9 +32,6 @@ MYLIB_CLASSPATH="$(pwd)/build/libs/*" CLASSPATH="$(pwd)/:${SWIFTKIT_CLASSPATH}:${MYLIB_CLASSPATH}" echo "CLASSPATH = ${CLASSPATH}" -JAVAC="${JAVA_HOME}/bin/javac" -JAVA="${JAVA_HOME}/bin/java" - $JAVAC -cp "${CLASSPATH}" Example.java # TODO: move all this into Gradle or SwiftPM and make it easier to get the right classpath for running From 44af804ca11ac108589ca8e562aa6942e9c0145b Mon Sep 17 00:00:00 2001 From: Konrad 'ktoso' Malawski Date: Mon, 30 Jun 2025 22:20:26 +0900 Subject: [PATCH 13/22] futher help Gradle finding installed JDKs --- .github/actions/prepare_env/action.yml | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/.github/actions/prepare_env/action.yml b/.github/actions/prepare_env/action.yml index 6faf39c8..d07cf3ec 100644 --- a/.github/actions/prepare_env/action.yml +++ b/.github/actions/prepare_env/action.yml @@ -14,16 +14,21 @@ runs: cache: 'gradle' - name: Re-export JAVA_HOME run: > - if [[ -n "$JAVA_HOME_24_ARM64" ]]; then echo "JAVA_HOME_24=${{ env.JAVA_HOME_24_ARM64 }}" >> $GITHUB_ENV; fi; - if [[ -n "$JAVA_HOME_24_X64" ]]; then echo "JAVA_HOME_24=${{ env.JAVA_HOME_24_X64 }}" >> $GITHUB_ENV; fi; - if [[ -n "$JAVA_HOME_21_ARM64" ]]; then echo "JAVA_HOME_21=${{ env.JAVA_HOME_21_ARM64 }}" >> $GITHUB_ENV; fi; - if [[ -n "$JAVA_HOME_21_X64" ]]; then echo "JAVA_HOME_21=${{ env.JAVA_HOME_21_X64 }}" >> $GITHUB_ENV; fi; + # Gradle specifically looks for JDK_N environment variables to detect installed JDK versions, + # so we need to ensure it can find it, so it picks up JDK_24 since we are using 21 for Gradle itself, + # because it does not (yet) support JDK 24+. If it did, we wouldn't need multiple JDKs installed. + if [[ -n "$JAVA_HOME_24_ARM64" ]]; then echo "JDK_24=${{ env.JAVA_HOME_24_ARM64 }}" >> "$GITHUB_ENV"; fi; + if [[ -n "$JAVA_HOME_24_X64" ]]; then echo "JDK_24=${{ env.JAVA_HOME_24_X64 }}" >> "$GITHUB_ENV"; fi; + if [[ -n "$JAVA_HOME_21_ARM64" ]]; then echo "JDK_21=${{ env.JAVA_HOME_21_ARM64 }}" >> "$GITHUB_ENV"; fi; + if [[ -n "$JAVA_HOME_21_X64" ]]; then echo "JDK_21=${{ env.JAVA_HOME_21_X64 }}" >> "$GITHUB_ENV"; fi; + echo $JDK_21; + echo $JDK_24; shell: bash - - name: List JAVA_HOME - run: env | grep JAVA_HOME - shell: bash - - name: Check Gradle detected toolchains - run: ./gradlew -q javaToolchains + - name: Check Java environment + run: | + env | grep JAVA_HOME; + env | grep JDK; + ./gradlew -q javaToolchains shell: bash - name: Cache local SwiftPM repository if: matrix.os_version == 'jammy' From efb23f8c9063e83e1c769d422fadba82b313ea2a Mon Sep 17 00:00:00 2001 From: Konrad 'ktoso' Malawski Date: Mon, 30 Jun 2025 22:44:49 +0900 Subject: [PATCH 14/22] try to teach gradle about setup-java env variables --- .github/actions/prepare_env/action.yml | 33 +++++++++++++----------- gradle/wrapper/gradle-wrapper.properties | 1 + 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/.github/actions/prepare_env/action.yml b/.github/actions/prepare_env/action.yml index d07cf3ec..f5d43eab 100644 --- a/.github/actions/prepare_env/action.yml +++ b/.github/actions/prepare_env/action.yml @@ -12,24 +12,27 @@ runs: 24 21 cache: 'gradle' - - name: Re-export JAVA_HOME - run: > - # Gradle specifically looks for JDK_N environment variables to detect installed JDK versions, - # so we need to ensure it can find it, so it picks up JDK_24 since we are using 21 for Gradle itself, - # because it does not (yet) support JDK 24+. If it did, we wouldn't need multiple JDKs installed. - if [[ -n "$JAVA_HOME_24_ARM64" ]]; then echo "JDK_24=${{ env.JAVA_HOME_24_ARM64 }}" >> "$GITHUB_ENV"; fi; - if [[ -n "$JAVA_HOME_24_X64" ]]; then echo "JDK_24=${{ env.JAVA_HOME_24_X64 }}" >> "$GITHUB_ENV"; fi; - if [[ -n "$JAVA_HOME_21_ARM64" ]]; then echo "JDK_21=${{ env.JAVA_HOME_21_ARM64 }}" >> "$GITHUB_ENV"; fi; - if [[ -n "$JAVA_HOME_21_X64" ]]; then echo "JDK_21=${{ env.JAVA_HOME_21_X64 }}" >> "$GITHUB_ENV"; fi; - echo $JDK_21; - echo $JDK_24; + - name: Set JDK21 + shell: bash + run: | + if [[ -n "$JAVA_HOME_21_X64" ]]; then + echo "JDK21=$JAVA_HOME_21_X64" >> $GITHUB_ENV + elif [[ -n "$JAVA_HOME_21_ARM64" ]]; then + echo "JDK21=$JAVA_HOME_21_ARM64" >> $GITHUB_ENV + fi + - name: Set JDK24 shell: bash - - name: Check Java environment run: | - env | grep JAVA_HOME; - env | grep JDK; - ./gradlew -q javaToolchains + if [[ -n "$JAVA_HOME_24_X64" ]]; then + echo "JDK24=$JAVA_HOME_24_X64" >> $GITHUB_ENV + elif [[ -n "$JAVA_HOME_24_ARM64" ]]; then + echo "JDK24=$JAVA_HOME_24_ARM64" >> $GITHUB_ENV + fi + - name: Check Java environment shell: bash + run: ./gradlew -q javaToolchains + env: + JDK21: ${{ env.JAVA_HOME_21_X64 || env.JAVA_HOME_21_ARM64 }} - name: Cache local SwiftPM repository if: matrix.os_version == 'jammy' uses: actions/cache@v4 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9355b415..25a80ecf 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -5,3 +5,4 @@ networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists +org.gradle.java.installations.fromEnv=JAVA_HOME_24_ARM64,JAVA_HOME_24_X64,JAVA_HOME_21_ARM64,JAVA_HOME_24_X64 From 5d151ca8a7b50a8b4a7854601f347e9bac052656 Mon Sep 17 00:00:00 2001 From: Konrad 'ktoso' Malawski Date: Mon, 30 Jun 2025 23:29:08 +0900 Subject: [PATCH 15/22] gradle.properties in order to force gradle to use setup-java env --- Samples/JavaDependencySampleApp/gradle.properties | 1 + Samples/JavaKitSampleApp/gradle.properties | 1 + Samples/JavaProbablyPrime/gradle.properties | 1 + Samples/SwiftAndJavaJarSampleLib/gradle.properties | 1 + Samples/SwiftKitSampleApp/gradle.properties | 1 + Samples/gradle.properties | 1 + gradle.properties | 1 + gradle/wrapper/gradle-wrapper.properties | 1 - 8 files changed, 7 insertions(+), 1 deletion(-) create mode 120000 Samples/JavaDependencySampleApp/gradle.properties create mode 120000 Samples/JavaKitSampleApp/gradle.properties create mode 120000 Samples/JavaProbablyPrime/gradle.properties create mode 120000 Samples/SwiftAndJavaJarSampleLib/gradle.properties create mode 120000 Samples/SwiftKitSampleApp/gradle.properties create mode 120000 Samples/gradle.properties create mode 100644 gradle.properties diff --git a/Samples/JavaDependencySampleApp/gradle.properties b/Samples/JavaDependencySampleApp/gradle.properties new file mode 120000 index 00000000..7677fb73 --- /dev/null +++ b/Samples/JavaDependencySampleApp/gradle.properties @@ -0,0 +1 @@ +../gradle.properties \ No newline at end of file diff --git a/Samples/JavaKitSampleApp/gradle.properties b/Samples/JavaKitSampleApp/gradle.properties new file mode 120000 index 00000000..7677fb73 --- /dev/null +++ b/Samples/JavaKitSampleApp/gradle.properties @@ -0,0 +1 @@ +../gradle.properties \ No newline at end of file diff --git a/Samples/JavaProbablyPrime/gradle.properties b/Samples/JavaProbablyPrime/gradle.properties new file mode 120000 index 00000000..7677fb73 --- /dev/null +++ b/Samples/JavaProbablyPrime/gradle.properties @@ -0,0 +1 @@ +../gradle.properties \ No newline at end of file diff --git a/Samples/SwiftAndJavaJarSampleLib/gradle.properties b/Samples/SwiftAndJavaJarSampleLib/gradle.properties new file mode 120000 index 00000000..7677fb73 --- /dev/null +++ b/Samples/SwiftAndJavaJarSampleLib/gradle.properties @@ -0,0 +1 @@ +../gradle.properties \ No newline at end of file diff --git a/Samples/SwiftKitSampleApp/gradle.properties b/Samples/SwiftKitSampleApp/gradle.properties new file mode 120000 index 00000000..7677fb73 --- /dev/null +++ b/Samples/SwiftKitSampleApp/gradle.properties @@ -0,0 +1 @@ +../gradle.properties \ No newline at end of file diff --git a/Samples/gradle.properties b/Samples/gradle.properties new file mode 120000 index 00000000..7677fb73 --- /dev/null +++ b/Samples/gradle.properties @@ -0,0 +1 @@ +../gradle.properties \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 00000000..d3541457 --- /dev/null +++ b/gradle.properties @@ -0,0 +1 @@ +org.gradle.java.installations.fromEnv=JAVA_HOME_24_X64,JAVA_HOME_24_ARM64,JAVA_HOME_21_X64,JAVA_HOME_21_ARM64 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 25a80ecf..9355b415 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -5,4 +5,3 @@ networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -org.gradle.java.installations.fromEnv=JAVA_HOME_24_ARM64,JAVA_HOME_24_X64,JAVA_HOME_21_ARM64,JAVA_HOME_24_X64 From 64328a743df163477467307833964c5b0e2fb06b Mon Sep 17 00:00:00 2001 From: Konrad 'ktoso' Malawski Date: Mon, 30 Jun 2025 23:35:19 +0900 Subject: [PATCH 16/22] gradle.properties does not need license --- .github/actions/prepare_env/action.yml | 15 +++++---------- .licenseignore | 2 ++ gradle.properties | 2 +- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/.github/actions/prepare_env/action.yml b/.github/actions/prepare_env/action.yml index f5d43eab..33fa1f76 100644 --- a/.github/actions/prepare_env/action.yml +++ b/.github/actions/prepare_env/action.yml @@ -12,27 +12,22 @@ runs: 24 21 cache: 'gradle' - - name: Set JDK21 + - name: Set JAVA_HOME_{N} shell: bash run: | if [[ -n "$JAVA_HOME_21_X64" ]]; then - echo "JDK21=$JAVA_HOME_21_X64" >> $GITHUB_ENV + echo "JAVA_HOME_21=$JAVA_HOME_21_X64" >> $GITHUB_ENV elif [[ -n "$JAVA_HOME_21_ARM64" ]]; then - echo "JDK21=$JAVA_HOME_21_ARM64" >> $GITHUB_ENV + echo "JAVA_HOME_21=$JAVA_HOME_21_ARM64" >> $GITHUB_ENV fi - - name: Set JDK24 - shell: bash - run: | if [[ -n "$JAVA_HOME_24_X64" ]]; then - echo "JDK24=$JAVA_HOME_24_X64" >> $GITHUB_ENV + echo "JAVA_HOME_24=$JAVA_HOME_24_X64" >> $GITHUB_ENV elif [[ -n "$JAVA_HOME_24_ARM64" ]]; then - echo "JDK24=$JAVA_HOME_24_ARM64" >> $GITHUB_ENV + echo "JAVA_HOME_24=$JAVA_HOME_24_ARM64" >> $GITHUB_ENV fi - name: Check Java environment shell: bash run: ./gradlew -q javaToolchains - env: - JDK21: ${{ env.JAVA_HOME_21_X64 || env.JAVA_HOME_21_ARM64 }} - name: Cache local SwiftPM repository if: matrix.os_version == 'jammy' uses: actions/cache@v4 diff --git a/.licenseignore b/.licenseignore index 003cac25..a49ab625 100644 --- a/.licenseignore +++ b/.licenseignore @@ -35,6 +35,8 @@ Makefile **/CMakeLists.txt **/*.jar **/generated/*.java +gradle.properties +**/gradle.properties **/generated/*.swift gradle/wrapper/gradle-wrapper.properties gradlew diff --git a/gradle.properties b/gradle.properties index d3541457..335b6f40 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1 @@ -org.gradle.java.installations.fromEnv=JAVA_HOME_24_X64,JAVA_HOME_24_ARM64,JAVA_HOME_21_X64,JAVA_HOME_21_ARM64 \ No newline at end of file +org.gradle.java.installations.fromEnv=JAVA_HOME_24,JAVA_HOME_24_X64,JAVA_HOME_24_ARM64,JAVA_HOME_21,JAVA_HOME_21_X64,JAVA_HOME_21_ARM64 \ No newline at end of file From 36cb245c91a3b3b9952e7e252861de9cc8f9fc38 Mon Sep 17 00:00:00 2001 From: Konrad 'ktoso' Malawski Date: Tue, 1 Jul 2025 11:54:20 +0900 Subject: [PATCH 17/22] split out JMH into separate job, remove redundant java_home env --- .github/workflows/pull_request.yml | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 8b54ca3c..4f2c37b1 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -26,7 +26,6 @@ jobs: container: image: ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }} env: - JAVA_HOME: "/usr/lib/jvm/default-jdk" SWIFT_JAVA_VERBOSE: true steps: - uses: actions/checkout@v4 @@ -36,6 +35,24 @@ jobs: run: ./gradlew build -x test - name: Gradle :SwiftKit:check run: ./gradlew :SwiftKit:check --debug + + benchmark-java: + name: Benchmark (JMH) (${{ matrix.os_version }} swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}}) + runs-on: ubuntu-latest + strategy: + fail-fast: true + matrix: + swift_version: ['6.1.2'] + os_version: ['jammy'] + jdk_vendor: ['corretto'] + container: + image: ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }} + env: + SWIFT_JAVA_VERBOSE: true + steps: + - uses: actions/checkout@v4 + - name: Prepare CI Environment + uses: ./.github/actions/prepare_env - name: Gradle compile JMH benchmarks run: ./gradlew compileJmh --info @@ -49,7 +66,6 @@ jobs: os_version: ['macos'] jdk_vendor: ['corretto'] env: - JAVA_HOME: "/usr/lib/jvm/default-jdk" SWIFT_JAVA_VERBOSE: true steps: - uses: actions/checkout@v4 @@ -74,7 +90,6 @@ jobs: container: image: ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }} env: - JAVA_HOME: "/usr/lib/jvm/default-jdk" SWIFT_JAVA_VERBOSE: true steps: - uses: actions/checkout@v4 @@ -95,7 +110,6 @@ jobs: os_version: ['macos'] jdk_vendor: ['corretto'] env: - JAVA_HOME: "/usr/lib/jvm/default-jdk" SWIFT_JAVA_VERBOSE: true steps: - uses: actions/checkout@v4 @@ -126,8 +140,6 @@ jobs: ] container: image: ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }} - env: - JAVA_HOME: "/usr/lib/jvm/default-jdk" steps: - uses: actions/checkout@v4 - name: Prepare CI Environment @@ -152,8 +164,6 @@ jobs: 'SwiftAndJavaJarSampleLib', 'SwiftKitSampleApp', ] - env: - JAVA_HOME: "/usr/lib/jvm/default-jdk" steps: - uses: actions/checkout@v4 - name: Prepare CI Environment From e93c7853d1d1b98a14b55b9c345919f99522b0ce Mon Sep 17 00:00:00 2001 From: Konrad 'ktoso' Malawski Date: Tue, 1 Jul 2025 11:58:22 +0900 Subject: [PATCH 18/22] include new JNI jextract sample --- .github/workflows/pull_request.yml | 35 +++++++++++++++--------------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 4f2c37b1..9aee7c9b 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -34,47 +34,45 @@ jobs: - name: Gradle :SwiftKit:build run: ./gradlew build -x test - name: Gradle :SwiftKit:check - run: ./gradlew :SwiftKit:check --debug + run: ./gradlew :SwiftKit:check --info - benchmark-java: - name: Benchmark (JMH) (${{ matrix.os_version }} swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}}) - runs-on: ubuntu-latest + test-java-macos: + name: Test (Java) (${{ matrix.os_version }} swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}}) + runs-on: [self-hosted, macos, sequoia, ARM64] strategy: fail-fast: true matrix: swift_version: ['6.1.2'] - os_version: ['jammy'] + os_version: ['macos'] jdk_vendor: ['corretto'] - container: - image: ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }} env: SWIFT_JAVA_VERBOSE: true steps: - uses: actions/checkout@v4 - name: Prepare CI Environment uses: ./.github/actions/prepare_env - - name: Gradle compile JMH benchmarks - run: ./gradlew compileJmh --info + - name: Gradle :SwiftKit:build + run: ./gradlew build -x test + - name: Gradle :SwiftKit:check + run: ./gradlew :SwiftKit:check --debug - test-java-macos: - name: Test (Java) (${{ matrix.os_version }} swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}}) - runs-on: [self-hosted, macos, sequoia, ARM64] + benchmark-java: + name: Benchmark (JMH) (${{ matrix.os_version }} swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}}) + runs-on: ubuntu-latest strategy: fail-fast: true matrix: swift_version: ['6.1.2'] - os_version: ['macos'] + os_version: ['jammy'] jdk_vendor: ['corretto'] + container: + image: ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }} env: SWIFT_JAVA_VERBOSE: true steps: - uses: actions/checkout@v4 - name: Prepare CI Environment uses: ./.github/actions/prepare_env - - name: Gradle :SwiftKit:build - run: ./gradlew build -x test - - name: Gradle :SwiftKit:check - run: ./gradlew :SwiftKit:check --debug - name: Gradle compile JMH benchmarks run: ./gradlew compileJmh --info @@ -136,7 +134,7 @@ jobs: 'JavaSieve', 'SwiftAndJavaJarSampleLib', 'SwiftKitSampleApp', - 'JExtractJNISampleApp' + 'JExtractJNISampleApp', ] container: image: ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }} @@ -163,6 +161,7 @@ jobs: 'JavaSieve', 'SwiftAndJavaJarSampleLib', 'SwiftKitSampleApp', + 'JExtractJNISampleApp', ] steps: - uses: actions/checkout@v4 From 6fca8b4f18eec8bbb8a7f836ae4c91f80b7a6e9c Mon Sep 17 00:00:00 2001 From: Konrad 'ktoso' Malawski Date: Tue, 1 Jul 2025 13:31:16 +0900 Subject: [PATCH 19/22] figure out where Swift lib paths are on CI --- .github/scripts/prep-gh-action.sh | 87 +++++++++++++++++++ .github/scripts/validate_sample.sh | 2 + .../SwiftAndJavaJarSampleLib/ci-validate.sh | 12 ++- 3 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 .github/scripts/prep-gh-action.sh diff --git a/.github/scripts/prep-gh-action.sh b/.github/scripts/prep-gh-action.sh new file mode 100644 index 00000000..a6ca718e --- /dev/null +++ b/.github/scripts/prep-gh-action.sh @@ -0,0 +1,87 @@ +#!/bin/bash + +# This script does a bit of extra preparation of the docker containers used to run the GitHub workflows +# that are specific to this project's needs when building/testing. Note that this script runs on +# every supported Linux distribution and macOS so it must adapt to the distribution that it is running. + +if [[ "$(uname -s)" == "Linux" ]]; then + # Install the basic utilities depending on the type of Linux distribution + apt-get --help && apt-get update && TZ=Etc/UTC apt-get -y install curl make gpg tzdata + yum --help && (curl --help && yum -y install curl) && yum install make gpg +fi + +set -e + +while [ $# -ne 0 ]; do + arg="$1" + case "$arg" in + --install-swiftly) + installSwiftly=true + ;; + --swift-main-snapshot) + swiftMainSnapshot=true + ;; + *) + ;; + esac + shift +done + +if [ "$installSwiftly" == true ]; then + echo "Installing swiftly" + + if [[ "$(uname -s)" == "Linux" ]]; then + curl -O https://download.swift.org/swiftly/linux/swiftly-$(uname -m).tar.gz && tar zxf swiftly-*.tar.gz && ./swiftly init -y --skip-install + . "/root/.local/share/swiftly/env.sh" + else + export SWIFTLY_HOME_DIR="$(pwd)/swiftly-bootstrap" + export SWIFTLY_BIN_DIR="$SWIFTLY_HOME_DIR/bin" + export SWIFTLY_TOOLCHAINS_DIR="$SWIFTLY_HOME_DIR/toolchains" + + curl -O https://download.swift.org/swiftly/darwin/swiftly.pkg && pkgutil --check-signature swiftly.pkg && pkgutil --verbose --expand swiftly.pkg "${SWIFTLY_HOME_DIR}" && tar -C "${SWIFTLY_HOME_DIR}" -xvf "${SWIFTLY_HOME_DIR}"/swiftly-*/Payload && "$SWIFTLY_HOME_DIR/bin/swiftly" init -y --skip-install + + . "$SWIFTLY_HOME_DIR/env.sh" + fi + + hash -r + + if [ -n "$GITHUB_ENV" ]; then + echo "Updating GitHub environment" + echo "PATH=$PATH" >> "$GITHUB_ENV" && echo "SWIFTLY_HOME_DIR=$SWIFTLY_HOME_DIR" >> "$GITHUB_ENV" && echo "SWIFTLY_BIN_DIR=$SWIFTLY_BIN_DIR" >> "$GITHUB_ENV" && echo "SWIFTLY_TOOLCHAINS_DIR=$SWIFTLY_TOOLCHAINS_DIR" >> "$GITHUB_ENV" + fi + + selector=() + runSelector=() + + if [ "$swiftMainSnapshot" == true ]; then + echo "Installing latest main-snapshot toolchain" + selector=("main-snapshot") + runSelector=("+main-snapshot") + elif [ -f .swift-version ]; then + echo "Installing selected swift toolchain from .swift-version file" + selector=() + runSelector=() + else + echo "Installing latest toolchain" + selector=("latest") + runSelector=("+latest") + fi + + swiftly install --post-install-file=post-install.sh "${selector[@]}" + + if [ -f post-install.sh ]; then + echo "Performing swift toolchain post-installation" + chmod u+x post-install.sh && ./post-install.sh + fi + + echo "Displaying swift version" + swiftly run "${runSelector[@]}" swift --version + + if [[ "$(uname -s)" == "Linux" ]]; then + CC=clang swiftly run "${runSelector[@]}" "$(dirname "$0")/install-libarchive.sh" + fi +else + if [[ "$(uname -s)" == "Linux" ]]; then + "$(dirname "$0")/install-libarchive.sh" + fi +fi \ No newline at end of file diff --git a/.github/scripts/validate_sample.sh b/.github/scripts/validate_sample.sh index b5780976..64265b01 100755 --- a/.github/scripts/validate_sample.sh +++ b/.github/scripts/validate_sample.sh @@ -11,6 +11,8 @@ declare -r RESET='\033[0m' declare -r sampleDir="$1" declare -r CI_VALIDATE_SCRIPT='ci-validate.sh' +echo "Using Swift: $(which swift)" + echo "" echo "" echo "========================================================================" diff --git a/Samples/SwiftAndJavaJarSampleLib/ci-validate.sh b/Samples/SwiftAndJavaJarSampleLib/ci-validate.sh index 0664cdb1..1eb6fcd4 100755 --- a/Samples/SwiftAndJavaJarSampleLib/ci-validate.sh +++ b/Samples/SwiftAndJavaJarSampleLib/ci-validate.sh @@ -34,7 +34,7 @@ echo "CLASSPATH = ${CLASSPATH}" $JAVAC -cp "${CLASSPATH}" Example.java -# TODO: move all this into Gradle or SwiftPM and make it easier to get the right classpath for running +# FIXME: move all this into Gradle or SwiftPM and make it easier to get the right classpath for running if [ "$(uname -s)" = 'Linux' ] then SWIFT_LIB_PATHS=/usr/lib/swift/linux @@ -44,6 +44,7 @@ then SWIFT_CORE_LIB=$(find "$HOME"/.local -name "libswiftCore.so" 2>/dev/null | grep "$SWIFT_VERSION" | head -n1) if [ -n "$SWIFT_CORE_LIB" ]; then SWIFT_LIB_PATHS="${SWIFT_LIB_PATHS}:$(dirname "$SWIFT_CORE_LIB")" + ls "$SWIFT_LIB_PATHS" else # maybe there is one installed system-wide in /usr/lib? SWIFT_CORE_LIB2=$(find /usr/lib -name "libswiftCore.so" 2>/dev/null | grep "$SWIFT_VERSION" | head -n1) @@ -53,8 +54,15 @@ then fi elif [ "$(uname -s)" = 'Darwin' ] then - SWIFT_LIB_PATHS=$(find "$(swiftly use --print-location)" | grep dylib$ | grep libswiftCore | grep macos | xargs dirname) + SWIFT_LIB_PATHS=$(find "$(swiftly use --print-location)" | grep dylib$ | grep libswiftCore | grep macos | head -n1 | xargs dirname) + if [ -z "${SWIFT_LIB_PATHS}" ] + then + # if we failed to locate paths using swiftly... + # try to use the the path that we know about for github actions macOS + SWIFT_LIB_PATHS="${SWIFT_LIB_PATHS}:/Library/Developer/CommandLineTools/usr/lib/swift-5.0/macosx/" + fi SWIFT_LIB_PATHS="${SWIFT_LIB_PATHS}:$(pwd)/$(find . | grep libMySwiftLibrary.dylib$ | sort | head -n1 | xargs dirname)" + fi echo "SWIFT_LIB_PATHS = ${SWIFT_LIB_PATHS}" From f6cee384655112e1cc5fa059fd9df2e00570cc6a Mon Sep 17 00:00:00 2001 From: Konrad 'ktoso' Malawski Date: Tue, 1 Jul 2025 14:52:58 +0900 Subject: [PATCH 20/22] resort to Swiftly to simplify locating swift dylib paths for samples --- .github/scripts/prep-gh-action.sh | 7 +++++++ .github/workflows/pull_request.yml | 5 +++++ 2 files changed, 12 insertions(+) mode change 100644 => 100755 .github/scripts/prep-gh-action.sh diff --git a/.github/scripts/prep-gh-action.sh b/.github/scripts/prep-gh-action.sh old mode 100644 new mode 100755 index a6ca718e..8604673b --- a/.github/scripts/prep-gh-action.sh +++ b/.github/scripts/prep-gh-action.sh @@ -1,5 +1,8 @@ #!/bin/bash +# This script is reused from Swiftly itself, see: +# https://github.com/swiftlang/swiftly/blob/main/scripts/prep-gh-action.sh +# # This script does a bit of extra preparation of the docker containers used to run the GitHub workflows # that are specific to this project's needs when building/testing. Note that this script runs on # every supported Linux distribution and macOS so it must adapt to the distribution that it is running. @@ -57,6 +60,10 @@ if [ "$installSwiftly" == true ]; then echo "Installing latest main-snapshot toolchain" selector=("main-snapshot") runSelector=("+main-snapshot") + elif [ -n "${SWIFT_VERSION}" ]; then + echo "Installing selected swift toolchain from SWIFT_VERSION environment variable" + selector=("${SWIFT_VERSION}") + runSelector=() elif [ -f .swift-version ]; then echo "Installing selected swift toolchain from .swift-version file" selector=() diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 9aee7c9b..e65ae269 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -142,9 +142,14 @@ jobs: - uses: actions/checkout@v4 - name: Prepare CI Environment uses: ./.github/actions/prepare_env + - name: Prepare the action + run: ./.github/scripts/prep-gh-action.sh --install-swiftly + env: + SWIFT_VERSION: "${{ matrix.swift_version }}" - name: "Verify sample: ${{ matrix.sample_app }}" run: .github/scripts/validate_sample.sh Samples/${{ matrix.sample_app }} + verify-samples-macos: name: Sample ${{ matrix.sample_app }} (${{ matrix.os_version }} swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}}) runs-on: [self-hosted, macos, sequoia, ARM64] From 18907f86cac5c2eaa93a22247a1ee603f98c3959 Mon Sep 17 00:00:00 2001 From: Konrad 'ktoso' Malawski Date: Tue, 1 Jul 2025 15:39:52 +0900 Subject: [PATCH 21/22] add gradle.properties to JNI example --- .github/workflows/pull_request.yml | 8 ++++---- Samples/JExtractJNISampleApp/gradle.properties | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) create mode 120000 Samples/JExtractJNISampleApp/gradle.properties diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index e65ae269..59e5a50b 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -142,10 +142,6 @@ jobs: - uses: actions/checkout@v4 - name: Prepare CI Environment uses: ./.github/actions/prepare_env - - name: Prepare the action - run: ./.github/scripts/prep-gh-action.sh --install-swiftly - env: - SWIFT_VERSION: "${{ matrix.swift_version }}" - name: "Verify sample: ${{ matrix.sample_app }}" run: .github/scripts/validate_sample.sh Samples/${{ matrix.sample_app }} @@ -172,5 +168,9 @@ jobs: - uses: actions/checkout@v4 - name: Prepare CI Environment uses: ./.github/actions/prepare_env + - name: Install Swiftly # we specifically install Swiftly in macOS jobs because we want a simpler way to find the right dylib paths for libraries + run: ./.github/scripts/prep-gh-action.sh --install-swiftly + env: + SWIFT_VERSION: "${{ matrix.swift_version }}" - name: "Verify sample ${{ matrix.sample_app }}" run: .github/scripts/validate_sample.sh Samples/${{ matrix.sample_app }} diff --git a/Samples/JExtractJNISampleApp/gradle.properties b/Samples/JExtractJNISampleApp/gradle.properties new file mode 120000 index 00000000..7677fb73 --- /dev/null +++ b/Samples/JExtractJNISampleApp/gradle.properties @@ -0,0 +1 @@ +../gradle.properties \ No newline at end of file From defb820a31643bca612ab249666c8f1bc8345982 Mon Sep 17 00:00:00 2001 From: Konrad 'ktoso' Malawski Date: Tue, 1 Jul 2025 15:55:32 +0900 Subject: [PATCH 22/22] cleaner swiftly install script --- .github/scripts/install_swiftly.sh | 88 +++++++++++++++++ .github/scripts/prep-gh-action.sh | 94 ------------------- .github/workflows/pull_request.yml | 2 +- .../SwiftAndJavaJarSampleLib/ci-validate.sh | 6 -- 4 files changed, 89 insertions(+), 101 deletions(-) create mode 100755 .github/scripts/install_swiftly.sh delete mode 100755 .github/scripts/prep-gh-action.sh diff --git a/.github/scripts/install_swiftly.sh b/.github/scripts/install_swiftly.sh new file mode 100755 index 00000000..78fa3f6b --- /dev/null +++ b/.github/scripts/install_swiftly.sh @@ -0,0 +1,88 @@ +#!/bin/bash + +# This script is reused from Swiftly itself, see: +# https://github.com/swiftlang/swiftly/blob/main/scripts/prep-gh-action.sh +# +# This script does a bit of extra preparation of the docker containers used to run the GitHub workflows +# that are specific to this project's needs when building/testing. Note that this script runs on +# every supported Linux distribution and macOS so it must adapt to the distribution that it is running. + +if [[ "$(uname -s)" == "Linux" ]]; then + # Install the basic utilities depending on the type of Linux distribution + apt-get --help && apt-get update && TZ=Etc/UTC apt-get -y install curl make gpg tzdata + yum --help && (curl --help && yum -y install curl) && yum install make gpg +fi + +set -e + +while [ $# -ne 0 ]; do + arg="$1" + case "$arg" in + snapshot) + swiftMainSnapshot=true + ;; + *) + ;; + esac + shift +done + +echo "Installing swiftly" + +if [[ "$(uname -s)" == "Linux" ]]; then + curl -O "https://download.swift.org/swiftly/linux/swiftly-$(uname -m).tar.gz" && tar zxf swiftly-*.tar.gz && ./swiftly init -y --skip-install + # shellcheck disable=SC1091 + . "/root/.local/share/swiftly/env.sh" +else + # shellcheck disable=SC2155 + export SWIFTLY_HOME_DIR="$(pwd)/swiftly-bootstrap" + export SWIFTLY_BIN_DIR="$SWIFTLY_HOME_DIR/bin" + export SWIFTLY_TOOLCHAINS_DIR="$SWIFTLY_HOME_DIR/toolchains" + + curl -O https://download.swift.org/swiftly/darwin/swiftly.pkg && pkgutil --check-signature swiftly.pkg && pkgutil --verbose --expand swiftly.pkg "${SWIFTLY_HOME_DIR}" && tar -C "${SWIFTLY_HOME_DIR}" -xvf "${SWIFTLY_HOME_DIR}"/swiftly-*/Payload && "$SWIFTLY_HOME_DIR/bin/swiftly" init -y --skip-install + + # shellcheck disable=SC1091 + . "$SWIFTLY_HOME_DIR/env.sh" +fi + +hash -r + +if [ -n "$GITHUB_ENV" ]; then + echo "Updating GitHub environment" + echo "PATH=$PATH" >> "$GITHUB_ENV" && echo "SWIFTLY_HOME_DIR=$SWIFTLY_HOME_DIR" >> "$GITHUB_ENV" && echo "SWIFTLY_BIN_DIR=$SWIFTLY_BIN_DIR" >> "$GITHUB_ENV" && echo "SWIFTLY_TOOLCHAINS_DIR=$SWIFTLY_TOOLCHAINS_DIR" >> "$GITHUB_ENV" +fi + +selector=() +runSelector=() + +if [ "$swiftMainSnapshot" == true ]; then + echo "Installing latest main-snapshot toolchain" + selector=("main-snapshot") + runSelector=("+main-snapshot") +elif [ -n "${SWIFT_VERSION}" ]; then + echo "Installing selected swift toolchain from SWIFT_VERSION environment variable" + selector=("${SWIFT_VERSION}") + runSelector=() +elif [ -f .swift-version ]; then + echo "Installing selected swift toolchain from .swift-version file" + selector=() + runSelector=() +else + echo "Installing latest toolchain" + selector=("latest") + runSelector=("+latest") +fi + +swiftly install --post-install-file=post-install.sh "${selector[@]}" + +if [ -f post-install.sh ]; then + echo "Performing swift toolchain post-installation" + chmod u+x post-install.sh && ./post-install.sh +fi + +echo "Displaying swift version" +swiftly run "${runSelector[@]}" swift --version + +if [[ "$(uname -s)" == "Linux" ]]; then + CC=clang swiftly run "${runSelector[@]}" "$(dirname "$0")/install-libarchive.sh" +fi diff --git a/.github/scripts/prep-gh-action.sh b/.github/scripts/prep-gh-action.sh deleted file mode 100755 index 8604673b..00000000 --- a/.github/scripts/prep-gh-action.sh +++ /dev/null @@ -1,94 +0,0 @@ -#!/bin/bash - -# This script is reused from Swiftly itself, see: -# https://github.com/swiftlang/swiftly/blob/main/scripts/prep-gh-action.sh -# -# This script does a bit of extra preparation of the docker containers used to run the GitHub workflows -# that are specific to this project's needs when building/testing. Note that this script runs on -# every supported Linux distribution and macOS so it must adapt to the distribution that it is running. - -if [[ "$(uname -s)" == "Linux" ]]; then - # Install the basic utilities depending on the type of Linux distribution - apt-get --help && apt-get update && TZ=Etc/UTC apt-get -y install curl make gpg tzdata - yum --help && (curl --help && yum -y install curl) && yum install make gpg -fi - -set -e - -while [ $# -ne 0 ]; do - arg="$1" - case "$arg" in - --install-swiftly) - installSwiftly=true - ;; - --swift-main-snapshot) - swiftMainSnapshot=true - ;; - *) - ;; - esac - shift -done - -if [ "$installSwiftly" == true ]; then - echo "Installing swiftly" - - if [[ "$(uname -s)" == "Linux" ]]; then - curl -O https://download.swift.org/swiftly/linux/swiftly-$(uname -m).tar.gz && tar zxf swiftly-*.tar.gz && ./swiftly init -y --skip-install - . "/root/.local/share/swiftly/env.sh" - else - export SWIFTLY_HOME_DIR="$(pwd)/swiftly-bootstrap" - export SWIFTLY_BIN_DIR="$SWIFTLY_HOME_DIR/bin" - export SWIFTLY_TOOLCHAINS_DIR="$SWIFTLY_HOME_DIR/toolchains" - - curl -O https://download.swift.org/swiftly/darwin/swiftly.pkg && pkgutil --check-signature swiftly.pkg && pkgutil --verbose --expand swiftly.pkg "${SWIFTLY_HOME_DIR}" && tar -C "${SWIFTLY_HOME_DIR}" -xvf "${SWIFTLY_HOME_DIR}"/swiftly-*/Payload && "$SWIFTLY_HOME_DIR/bin/swiftly" init -y --skip-install - - . "$SWIFTLY_HOME_DIR/env.sh" - fi - - hash -r - - if [ -n "$GITHUB_ENV" ]; then - echo "Updating GitHub environment" - echo "PATH=$PATH" >> "$GITHUB_ENV" && echo "SWIFTLY_HOME_DIR=$SWIFTLY_HOME_DIR" >> "$GITHUB_ENV" && echo "SWIFTLY_BIN_DIR=$SWIFTLY_BIN_DIR" >> "$GITHUB_ENV" && echo "SWIFTLY_TOOLCHAINS_DIR=$SWIFTLY_TOOLCHAINS_DIR" >> "$GITHUB_ENV" - fi - - selector=() - runSelector=() - - if [ "$swiftMainSnapshot" == true ]; then - echo "Installing latest main-snapshot toolchain" - selector=("main-snapshot") - runSelector=("+main-snapshot") - elif [ -n "${SWIFT_VERSION}" ]; then - echo "Installing selected swift toolchain from SWIFT_VERSION environment variable" - selector=("${SWIFT_VERSION}") - runSelector=() - elif [ -f .swift-version ]; then - echo "Installing selected swift toolchain from .swift-version file" - selector=() - runSelector=() - else - echo "Installing latest toolchain" - selector=("latest") - runSelector=("+latest") - fi - - swiftly install --post-install-file=post-install.sh "${selector[@]}" - - if [ -f post-install.sh ]; then - echo "Performing swift toolchain post-installation" - chmod u+x post-install.sh && ./post-install.sh - fi - - echo "Displaying swift version" - swiftly run "${runSelector[@]}" swift --version - - if [[ "$(uname -s)" == "Linux" ]]; then - CC=clang swiftly run "${runSelector[@]}" "$(dirname "$0")/install-libarchive.sh" - fi -else - if [[ "$(uname -s)" == "Linux" ]]; then - "$(dirname "$0")/install-libarchive.sh" - fi -fi \ No newline at end of file diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 59e5a50b..b55e0489 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -169,7 +169,7 @@ jobs: - name: Prepare CI Environment uses: ./.github/actions/prepare_env - name: Install Swiftly # we specifically install Swiftly in macOS jobs because we want a simpler way to find the right dylib paths for libraries - run: ./.github/scripts/prep-gh-action.sh --install-swiftly + run: ./.github/scripts/install_swiftly.sh env: SWIFT_VERSION: "${{ matrix.swift_version }}" - name: "Verify sample ${{ matrix.sample_app }}" diff --git a/Samples/SwiftAndJavaJarSampleLib/ci-validate.sh b/Samples/SwiftAndJavaJarSampleLib/ci-validate.sh index 1eb6fcd4..f56b611e 100755 --- a/Samples/SwiftAndJavaJarSampleLib/ci-validate.sh +++ b/Samples/SwiftAndJavaJarSampleLib/ci-validate.sh @@ -55,12 +55,6 @@ then elif [ "$(uname -s)" = 'Darwin' ] then SWIFT_LIB_PATHS=$(find "$(swiftly use --print-location)" | grep dylib$ | grep libswiftCore | grep macos | head -n1 | xargs dirname) - if [ -z "${SWIFT_LIB_PATHS}" ] - then - # if we failed to locate paths using swiftly... - # try to use the the path that we know about for github actions macOS - SWIFT_LIB_PATHS="${SWIFT_LIB_PATHS}:/Library/Developer/CommandLineTools/usr/lib/swift-5.0/macosx/" - fi SWIFT_LIB_PATHS="${SWIFT_LIB_PATHS}:$(pwd)/$(find . | grep libMySwiftLibrary.dylib$ | sort | head -n1 | xargs dirname)" fi