on: workflow_dispatch: inputs: buildThreads: description: 'Build threads for libnd4j. Used to control memory usage of builds.' required: true default: 2 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 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: runsOn: description: 'System to run on' required: false default: ubuntu-22.04 debug_enabled: description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)' required: false default: false jobs: #Note: no -pl here because we publish everything from this branch and use this as the basis for all uploads. linux-x86_64: strategy: fail-fast: false matrix: helper: [""] extension: [compat] 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: - uses: actions/checkout@v2 - name: Free Disk Space Before Build run: | echo "Disk space before cleanup:" df -h sudo rm -rf /usr/local/.ghcup sudo rm -rf /opt/hostedtoolcache/CodeQL sudo rm -rf /usr/local/lib/android/sdk/ndk sudo rm -rf /usr/share/dotnet sudo rm -rf /opt/ghc sudo rm -rf /usr/local/share/boost sudo apt-get clean echo "Disk space after cleanup:" df -h - uses: ./.github/actions/set-linux-distro-version - name: Set mvn build command based on matrix shell: bash run: | command="mvn -pl ':nd4j-native-preset,:libnd4j,:nd4j-native' ${{ matrix.mvn_ext }} -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=linux-x86_64 -Pcpu --also-make --batch-mode -DskipTests" if [ "${{ matrix.helper }}" != '' ] && [ "${{ matrix.extension }}" != '' ]; then mvn_ext=" -Dlibnd4j.helper=${{ matrix.helper }} -Dlibnd4j.extension=${{ matrix.extension }} -Djavacpp.platform.extension=-${{ matrix.helper }}-${{ matrix.extension }} -Dlibnd4j.classifier=linux-x86_64-${{ matrix.helper }}-${{matrix.extension}}" elif [ "${{ matrix.helper }}" != '' ]; then mvn_ext=" -Dlibnd4j.helper=${{ matrix.helper }} -Dlibnd4j.extension=${{ matrix.helper }} -Djavacpp.platform.extension=-${{ matrix.helper }} -Dlibnd4j.classifier=linux-x86_64-${{ matrix.helper }}" elif [ "${{ matrix.extension }}" != '' ]; then mvn_ext=" -Dlibnd4j.extension=${{ matrix.extension }} -Djavacpp.platform.extension=-${{ matrix.extension }} -Dlibnd4j.classifier=linux-x86_64-${{ matrix.extension }}" else mvn_ext="" 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 "DEPLOY_COMMAND=${command} deploy -Dlibnd4j.cpu.compile.skip=true -Djavacpp.compiler.skip=true -Djavacpp.parser.skip=true" >> $GITHUB_ENV echo "INSTALL_COMMAND=${command} install" >> "$GITHUB_ENV" echo "COMMAND=${command}" >> "$GITHUB_ENV" - uses: ./.github/actions/update-deps-linux - name: Build on linux-x86_64 uses: ./.github/actions/build-centos env: JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64/ MAVEN_GPG_KEY: ${{ secrets.SONATYPE_GPG_KEY }} DEBIAN_FRONTEND: noninteractive GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} PUBLISH_TO: central 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 }} HELPER: ${{ matrix.helper }} EXTENSION: ${{ matrix.extension }} MAVEN_OPTS: -Xmx2g - name: Set up Java for publishing to GitHub Packages 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: Deploy shell: bash run: | # Docker builds are root owned sudo chown -R $USER $GITHUB_WORKSPACE/* if [ "$PERFORM_RELEASE" == 1 ]; then export COMMAND="${DEPLOY_COMMAND}" bash "$GITHUB_WORKSPACE/release-specified-component.sh" "${RELEASE_VERSION}" "${SNAPSHOT_VERSION}" "${RELEASE_REPO_ID}" "${DEPLOY_COMMAND}" else echo "Running build and deploying to snapshots" eval "${DEPLOY_COMMAND}" fi env: MAVEN_GPG_KEY: ${{ secrets.SONATYPE_GPG_KEY }} DEBIAN_FRONTEND: noninteractive GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} PUBLISH_TO: central 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 }} HELPER: ${{ matrix.helper }} EXTENSION: ${{ matrix.extension }} MAVEN_OPTS: -Xmx2g