name: multi-arch build on: push: branches: - master - develop jobs: build: name: ${{ matrix.type }} on ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: matrix: include: # todo: broken ubuntu dependencies, accepting PRs #- { os: ubuntu-22.04, type: "linux_386_ssl3" } - { os: ubuntu-20.04, type: "linux_amd64_ssl1" } - { os: ubuntu-22.04, type: "linux_amd64_ssl3" } - { os: ubuntu-20.04, type: "linux_amd64_gcc_ssl1" } - { os: ubuntu-22.04, type: "linux_amd64_gcc_ssl3" } - { os: ubuntu-20.04, type: "linux_arm64_ssl1" } - { os: ubuntu-22.04, type: "linux_arm64_ssl3" } - { os: ubuntu-22.04, type: "linux_armhf_ssl3" } - { os: ubuntu-22.04, type: "linux_ppc64le_ssl3" } # todo: broken ubuntu dependencies, accepting PRs #- { os: ubuntu-22.04, type: "linux_riscv64_ssl3" } - { os: windows-2019, type: "windows_amd64", vcpkgCommitId: "6ca56aeb457f033d344a7106cb3f9f1abf8f4e98", triplet: "x64-windows-static" } - { os: macos-12, type: "macos_amd64" } # todo: do not enable until github actions adds support to apple silicon, accepting PRs # - { os: macos-12, type: "macos_arm64" } steps: - name: Checkout current repo uses: actions/checkout@v3 with: submodules: "recursive" - name: Get version shell: bash run: | set -xeo pipefail # Get latest commit short hash HASH_VERSION=$(git rev-parse --short HEAD) # Strip git ref prefix from version VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') # Strip "v" prefix from tag name [[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//') # Use Docker `latest` tag convention [ "$VERSION" == "master" ] && VERSION=latest HASH_VERSION=$(echo "$HASH_VERSION" | awk '{print tolower($0)}') VERSION=$(echo "$VERSION" | awk '{print tolower($0)}') TYPE=${{ matrix.type }} SAFE_TYPE=${TYPE///} # linux_amd64_ -> linux_amd64_ REVISION=4.0.${{ github.run_number }} GH_MATRIX_OS=${{ matrix.os }} GH_MATRIX_TYPE=${{ matrix.type }} # Store variable for future use echo "HASH_VERSION=$HASH_VERSION" >> $GITHUB_ENV echo "VERSION=$VERSION" >> $GITHUB_ENV echo "TYPE=$TYPE" >> $GITHUB_ENV echo "SAFE_TYPE=$SAFE_TYPE" >> $GITHUB_ENV echo "SSL_TYPE=$SSL_TYPE" >> $GITHUB_ENV echo "REVISION=$REVISION" >> $GITHUB_ENV echo "GH_MATRIX_OS=$GH_MATRIX_OS" >> $GITHUB_ENV echo "GH_MATRIX_TYPE=$GH_MATRIX_TYPE" >> $GITHUB_ENV # Print debug info echo "hash version: $HASH_VERSION" echo "version: $VERSION" echo "safe arch: $SAFE_ARCH" echo "ssl type: $SSL_TYPE" echo "Variables:" # Save env to file cat $GITHUB_ENV > github.env - name: Cache packages cache uses: actions/cache@v3 with: path: ~/tdlight-java-natives/tdlight-java-natives/.cache key: ${{ runner.os }}-v3-packages-${{ env.SAFE_TYPE }}-${{ github.sha }} restore-keys: | ${{ runner.os }}-v3-packages-${{ env.SAFE_TYPE }}- - name: Setup Java (Snapshot) if: github.ref == 'refs/heads/develop' uses: actions/setup-java@v3 with: java-version: 11 distribution: temurin server-id: mchv-snapshot-distribution server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD cache: 'maven' - name: Setup Java (Release) if: github.ref != 'refs/heads/develop' uses: actions/setup-java@v3 with: java-version: 11 distribution: temurin server-id: mchv-release-distribution server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD cache: 'maven' - name: Setup PHP with Readline extension uses: shivammathur/setup-php@v2 with: php-version: '8.0' extensions: readline - name: Install ubuntu 20.04 dependencies if: matrix.os == 'ubuntu-20.04' shell: bash run: | export DEBIAN_FRONTEND=noninteractive sudo apt-get --assume-yes update sudo apt-get --assume-yes install make git zlib1g-dev libssl-dev gperf php-cli cmake default-jdk clang-12 lld-12 libc++-12-dev libc++abi-12-dev libgcc-9-dev libunwind-dev libclang-common-12-dev ccache maven # - name: Install ubuntu 20.04 dependencies (cached) # if: matrix.os == 'ubuntu-20.04' # uses: awalsh128/cache-apt-pkgs-action@latest # with: # packages: make git zlib1g-dev libssl-dev gperf php-cli cmake default-jdk clang-12 lld-12 libc++-12-dev libc++abi-12-dev libgcc-9-dev libunwind-dev libclang-common-12-dev ccache maven # version: 1.0 - name: Install ubuntu 22.04 dependencies if: matrix.os == 'ubuntu-22.04' shell: bash run: | export DEBIAN_FRONTEND=noninteractive sudo apt-get --assume-yes update sudo apt-get --assume-yes install make git zlib1g-dev libssl-dev gperf php-cli cmake default-jdk clang-14 lld-14 libc++-14-dev libc++abi-14-dev libgcc-11-dev libunwind-14-dev libclang-common-14-dev ccache maven # - name: Install ubuntu 22.04 dependencies (cached) # if: matrix.os == 'ubuntu-22.04' # uses: awalsh128/cache-apt-pkgs-action@latest # with: # packages: make git zlib1g-dev libssl-dev gperf php-cli cmake default-jdk clang-14 lld-14 libc++-14-dev libc++abi-14-dev libgcc-11-dev libunwind-14-dev libclang-common-14-dev ccache maven # version: 1.0 - name: Setup tmate session uses: mxschmitt/action-tmate@v3 - name: Install custom dependencies shell: bash run: | set -xeo pipefail echo "REVISION: $REVISION" if [[ -f "./.github/workflows/scripts/install_deps_${SAFE_TYPE}.sh" ]]; then if [[ "$GH_MATRIX_OS" == *"windows"* || "$GH_MATRIX_OS" == *"macos"* ]]; then ./.github/workflows/scripts/install_deps_${SAFE_TYPE}.sh else sudo ./.github/workflows/scripts/install_deps_${SAFE_TYPE}.sh fi fi - name: Run sccache-cache uses: mozilla-actions/sccache-action@v0.0.3 env: SCCACHE_GHA_ENABLED: "true" - name: Install MSVC if: matrix.os == 'windows-2019' uses: ilammy/msvc-dev-cmd@v1 with: toolset: 14.0 vs-version: '[16.4,16.5)' - name: Setup cmake if: matrix.os == 'windows-2019' uses: lukka/get-cmake@latest - name: Set up Maven uses: stCarolas/setup-maven@v4.5 with: maven-version: 3.8.2 - name: Setup NASM if: matrix.os == 'windows-2019' uses: ilammy/setup-nasm@v1 - name: Restore artifacts, or setup vcpkg (do not install any package) if: matrix.os == 'windows-2019' uses: lukka/run-vcpkg@v10.2 with: # Just install vcpkg for now, do not install any ports in this step yet. setupOnly: true # Location of the vcpkg submodule in the Git repository. vcpkgDirectory: '${{ github.workspace }}/vcpkg' vcpkgGitCommitId: '${{ matrix.vcpkgCommitId}}' # Since the cache must be invalidated when content of the vcpkg.json file changes, let's # compute its hash and append this to the computed cache's key. appendedCacheKey: ${{ hashFiles( '**/vcpkg_manifest/vcpkg.json' ) }} vcpkgTriplet: ${{ matrix.triplet }} # Ensure the vcpkg artifacts are cached, they are generated in the 'CMAKE_BINARY_DIR/vcpkg_installed' directory. additionalCachedPaths: ${{ github.workspace }}/vcpkg - name: Install vcpkg deps if: matrix.os == 'windows-2019' run: | set -xeo pipefail ./vcpkg/vcpkg install gperf openssl:x64-windows-static zlib:x64-windows-static shell: bash - name: Build shell: bash run: | set -xeo pipefail echo "REVISION: $REVISION" source ./.github/workflows/scripts/build_${SAFE_TYPE}.sh env: SCCACHE_GHA_ENABLED: "true" - uses: actions/upload-artifact@v3 with: name: tdlight-natives-${{env.REVISION}}-${{env.TYPE}}.jar path: natives/target-${{env.TYPE}}/tdlight-natives-${{env.REVISION}}-${{env.TYPE}}.jar - name: Deploy to Maven (Snapshot) if: github.ref == 'refs/heads/develop' shell: bash run: | set -xeo pipefail echo "REVISION: $REVISION" echo "TYPE: $TYPE" mvn -B -f natives/pom.xml -Drevision="$REVISION" -Dnative.type.classifier="$TYPE" clean package mvn -B org.apache.maven.plugins:maven-deploy-plugin:3.1.1:deploy-file -Durl=https://mvn.mchv.eu/repository/mchv-snapshot \ -DrepositoryId=mchv-snapshot-distribution \ -Dfile=natives/target-$TYPE/tdlight-natives-$REVISION-$TYPE.jar \ -Dpackaging=pom \ -DgroupId=it.tdlight \ -DartifactId=tdlight-natives \ -Dversion=$REVISION \ -Drevision=$REVISION \ -Dclassifier=$TYPE \ -Dnative.type.classifier="$TYPE" if [[ "$TYPE" == "linux_amd64_ssl1" ]]; then mvn -B org.apache.maven.plugins:maven-deploy-plugin:3.1.1:deploy-file -Durl=https://mvn.mchv.eu/repository/mchv-snapshot \ -DrepositoryId=mchv-snapshot-distribution \ -Dfile=natives/.ci-friendly-pom.xml \ -Dpackaging=pom \ -DgroupId=it.tdlight \ -DartifactId=tdlight-natives \ -Dversion=$REVISION \ -Drevision=$REVISION \ -Dnative.type.classifier="$TYPE" fi echo "Done." exit 0 env: MAVEN_USERNAME: ${{ secrets.MCHV_USERNAME }} MAVEN_PASSWORD: ${{ secrets.MCHV_TOKEN }} - name: Deploy to Maven (Release) if: github.ref == 'refs/heads/master' shell: bash run: | set -xeo pipefail echo "REVISION: $REVISION" echo "TYPE: $TYPE" mvn -B -f natives/pom.xml -Drevision="$REVISION" -Dnative.type.classifier="$TYPE" clean package mvn -B org.apache.maven.plugins:maven-deploy-plugin:3.1.1:deploy-file -Durl=https://mvn.mchv.eu/repository/mchv \ -DrepositoryId=mchv-release-distribution \ -Dfile=natives/target-$TYPE/tdlight-natives-$REVISION-$TYPE.jar \ -Dpackaging=pom \ -DgroupId=it.tdlight \ -DartifactId=tdlight-natives \ -Dversion=$REVISION \ -Drevision=$REVISION \ -Dclassifier=$TYPE \ -Dnative.type.classifier="$TYPE" if [[ "$TYPE" == "linux_amd64_ssl1" ]]; then mvn -B org.apache.maven.plugins:maven-deploy-plugin:3.1.1:deploy-file -Durl=https://mvn.mchv.eu/repository/mchv \ -DrepositoryId=mchv-release-distribution \ -Dfile=natives/.ci-friendly-pom.xml \ -Dpackaging=pom \ -DgroupId=it.tdlight \ -DartifactId=tdlight-natives \ -Dversion=$REVISION \ -Drevision=$REVISION \ -Dnative.type.classifier="$TYPE" fi echo "Done." exit 0 env: MAVEN_USERNAME: ${{ secrets.MCHV_USERNAME }} MAVEN_PASSWORD: ${{ secrets.MCHV_TOKEN }}