.github/workflows/build-deploy-mac-arm64.yml #179
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| on: | |
| workflow_dispatch: | |
| inputs: | |
| buildThreads: | |
| description: 'Build threads for libnd4j. Used to control memory usage of builds.' | |
| required: true | |
| default: 3 | |
| deployToReleaseStaging: | |
| description: 'Whether to deploy to release staging or not.' | |
| required: false | |
| default: 0 | |
| releaseVersion: | |
| description: 'Release version target' | |
| required: false | |
| default: 1.0.0-M3 | |
| snapshotVersion: | |
| description: 'Snapshot version target' | |
| required: false | |
| default: 1.0.0-SNAPSHOT | |
| releaseRepoId: | |
| description: 'Release repository id' | |
| required: false | |
| default: | |
| serverId: | |
| description: 'Server id to publish to' | |
| required: false | |
| default: central | |
| runsOn: | |
| description: 'System to run on' | |
| required: false | |
| default: macos-14 | |
| mvnFlags: | |
| description: "Extra maven flags (must escape input yourself if used)" | |
| required: false | |
| default: | |
| libnd4jUrl: | |
| description: 'Sets a libnd4j download url for this build. LIBND4J_HOME will automatically be set. Should be used when only needing to build other modules.' | |
| required: false | |
| default: | |
| debug_enabled: | |
| description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)' | |
| required: false | |
| default: false | |
| jobs: | |
| mac-arm64: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| helper: [""] | |
| extension: [""] | |
| include: | |
| - mvn_ext: ${{ github.event.inputs.mvnFlags }} | |
| experimental: true | |
| name: Extra maven flags | |
| - debug_enabled: ${{ github.event.inputs.debug_enabled }} | |
| experimental: true | |
| name: Debug enabled | |
| - runs_on: ${{ github.event.inputs.runsOn }} | |
| experimental: true | |
| name: OS to run on | |
| - libnd4j_file_download: ${{ github.event.inputs.libnd4jUrl }} | |
| experimental: true | |
| name: OS to run on | |
| - deploy_to_release_staging: ${{ github.event.inputs.deployToReleaseStaging }} | |
| experimental: true | |
| name: Whether to deploy to release staging or not | |
| - release_version: ${{ github.event.inputs.releaseVersion }} | |
| experimental: true | |
| name: Release version | |
| - snapshot_version: ${{ github.event.inputs.snapshotVersion }} | |
| experimental: true | |
| name: Snapshot version | |
| - server_id: ${{ github.event.inputs.serverId }} | |
| experimental: true | |
| name: Server id | |
| - release_repo_id: ${{ github.event.inputs.releaseRepoId }} | |
| experimental: true | |
| name: The release repository to run on | |
| - mvn_flags: ${{ github.event.inputs.mvnFlags }} | |
| experimental: true | |
| name: Extra maven flags to use as part of the build | |
| - build_threads: ${{ github.event.inputs.buildThreads }} | |
| experimental: true | |
| name: The number of threads to build libnd4j with | |
| runs-on: ${{ matrix.runs_on }} | |
| steps: | |
| - name: Cancel Previous Runs | |
| uses: styfle/[email protected] | |
| with: | |
| access_token: ${{ github.token }} | |
| - uses: actions/checkout@v2 | |
| - name: Set mvn build command based on matrix | |
| shell: bash | |
| run: | | |
| if [ "${{ matrix.libnd4j_file_download }}" != '' ]; then | |
| modules=':nd4j-native,:nd4j-native-preset' | |
| else | |
| echo "Building libnd4j from source" | |
| modules=':nd4j-native,:nd4j-native-preset,:libnd4j' | |
| fi | |
| command="mvn ${{ matrix.mvn_ext }} -Dlibnd4j.generate.flatc=ON --no-transfer-progress -pl $modules -Dlibnd4j.arch=armv8-a -Dlibnd4j.platform=macosx-arm64 -Djavacpp.platform=macosx-arm64 -Pcpu -Dlibnd4j.buildthreads=${{ matrix.build_threads }} -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.http.retryHandler.count=3 -Possrh -DskipTestResourceEnforcement=true -Dmaven.javadoc.failOnError=false -Djavacpp.platform=macosx-arm64 -Pcpu --also-make --batch-mode deploy -DskipTests" | |
| if [ "${{ matrix.helper }}" != '' ] && [ "${{ matrix.extension }}" != '' ]; then | |
| mvn_ext="-Posx-aarch64-protoc -Dlibnd4j.classifier=macosx-arm64-${{ matrix.helper }}-${{matrix.extension}} -Dlibnd4j.helper=${{ matrix.helper }} -Dlibnd4j.extension=${{ matrix.extension }} -Djavacpp.platform.extension=-${{ matrix.helper }}-${{ matrix.extension }}" | |
| elif [ "${{ matrix.helper }}" != '' ]; then | |
| mvn_ext=" -Posx-aarch64-protoc -Dlibnd4j.classifier=${{ matrix.helper }} -Dlibnd4j.helper=${{ matrix.helper }} -Dlibnd4j.extension=${{ matrix.helper }} -Djavacpp.platform.extension=-${{ matrix.helper }}" | |
| elif [ "${{ matrix.extension }}" != '' ]; then | |
| mvn_ext=" -Posx-aarch64-protoc -Dlibnd4j.classifier=macosx-arm64-${{matrix.extension}} -Dlibnd4j.extension=${{ matrix.extension }} -Djavacpp.platform.extension=-${{ matrix.extension }}" | |
| else | |
| mvn_ext=" -Posx-aarch64-protoc -Dlibnd4j.classifier=macosx-arm64" | |
| fi | |
| if [ "${{ matrix.libnd4j_file_download }}" != '' ]; then | |
| echo "Adding libnd4j download" | |
| echo "LIBND4J_FILE_NAME=${libnd4j_download_file_url}" >> $GITHUB_ENV | |
| fi | |
| command="${command} ${mvn_ext}" | |
| echo "Setting command for helper ${{ matrix.helper }} and extension ${{ matrix.extension }} to ${command}" | |
| echo "COMMAND=${command}" >> $GITHUB_ENV | |
| sudo rm -Rf /Library/Developer/CommandLineTools/SDKs/MacOSX10* | |
| - name: Set up Java for publishing to OSSRH | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: 11 | |
| distribution: 'temurin' | |
| server-id: ${{ github.event.inputs.serverId }} | |
| server-username: MAVEN_USERNAME | |
| server-password: MAVEN_PASSWORD | |
| gpg-private-key: ${{ secrets.SONATYPE_GPG_KEY }} | |
| gpg-passphrase: MAVEN_GPG_PASSPHRASE | |
| cache: 'maven' | |
| - name: Update path for gnu sed | |
| shell: bash | |
| run: | | |
| brew install gnu-sed unzip ccache gcc swig autoconf-archive automake libomp libtool libusb ant maven nasm xz pkg-config sdl bison flex perl ragel binutils gradle gmp isl libmpc mpfr wget python | |
| echo "$(brew --prefix)/opt/gnu-sed/libexec/gnubin" >> $GITHUB_PATH | |
| - name: Setup libnd4j home if a download url is specified | |
| shell: bash | |
| run: | | |
| mkdir "${GITHUB_WORKSPACE}/openblas_home" | |
| cd "${GITHUB_WORKSPACE}/openblas_home" | |
| wget https://repo1.maven.org/maven2/org/bytedeco/openblas/0.3.28-1.5.11/openblas-0.3.28-1.5.11-macosx-arm64.jar | |
| unzip openblas-0.3.28-1.5.11-macosx-arm64.jar | |
| cd .. | |
| cp ${GITHUB_WORKSPACE}/openblas_home/org/bytedeco/openblas/macosx-arm64/libopenblas.0.dylib ${GITHUB_WORKSPACE}/openblas_home/org/bytedeco/openblas/macosx-arm64/libopenblas.dylib | |
| echo "OPENBLAS_PATH=${GITHUB_WORKSPACE}/openblas_home/org/bytedeco/openblas/macosx-arm64/" >> "$GITHUB_ENV" | |
| if: ${{ matrix.libnd4j_file_download != '' }} | |
| - name: Build and install | |
| shell: bash | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| PUBLISH_TO: central | |
| MAVEN_GPG_KEY: ${{ secrets.SONATYPE_GPG_KEY }} | |
| MAVEN_USERNAME: ${{ secrets.CENTRAL_SONATYPE_TOKEN_USERNAME }} | |
| MAVEN_PASSWORD: ${{ secrets.CENTRAL_SONATYPE_TOKEN_PASSWORD }} | |
| MAVEN_GPG_PASSPHRASE: ${{ secrets.PACKAGES_GPG_PASS }} | |
| PERFORM_RELEASE: ${{ matrix.deploy_to_release_staging }} | |
| RELEASE_VERSION: ${{ matrix.release_version }} | |
| SNAPSHOT_VERSION: ${{ matrix.snapshot_version }} | |
| RELEASE_REPO_ID: ${{ matrix.release_repo_id }} | |
| MODULES: ${{ matrix.mvn_flags }} | |
| MAVEN_OPTS: "-Xmx2g" | |
| HELPER: ${{ matrix.helper }} | |
| EXTENSION: ${{ matrix.extension }} | |
| LIBND4J_FILE_NAME: ${{ matrix.libnd4j_file_download }} | |
| run: | | |
| echo "libnd4j build threads ${{ matrix.build_threads }}" | |
| echo "deploy to release staging repo or not ${{ matrix.deploy_to_release_staging }}" | |
| echo "release version ${{ matrix.release_version }}" | |
| echo "snapshot version ${{ matrix.snapshot_version }}" | |
| echo "debug enabled ${{ matrix.debug_enabled }}" | |
| echo "libnd4j url ${{ matrix.libnd4j_file_download }}" | |
| echo "maven flags ${{ matrix.mvn_flags }}" | |
| echo "snapshot version ${{ matrix.snapshot_version }}" | |
| echo "server id ${{ matrix.server_id }}" | |
| echo "release repo id ${{ matrix.release_repo_id }}" | |
| brew list | |
| brew list --cask | |
| if [ "$PERFORM_RELEASE" == 1 ]; then | |
| echo "Performing release with command ${COMMAND}" | |
| bash ${GITHUB_WORKSPACE}/release-specified-component.sh "${RELEASE_VERSION}" "${SNAPSHOT_VERSION}" "${RELEASE_REPO_ID}" "${COMMAND}" | |
| else | |
| echo "Running build and deploying to snapshots" | |
| eval "${COMMAND}" | |
| fi | |