diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 26979df834..9b0d5ad4b6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -99,26 +99,43 @@ jobs: # ========================= build-linux: - name: "ubuntu-${{ matrix.os }} (CLI,Desktop), GHC: ${{ matrix.ghc }}" + name: "ubuntu-${{ matrix.os }}-${{ matrix.arch }} (CLI,Desktop), GHC: ${{ matrix.ghc }}" needs: [maybe-release, variables] - runs-on: ubuntu-${{ matrix.os }} + runs-on: ${{ matrix.runner }} strategy: fail-fast: false matrix: include: - os: 22.04 + os_underscore: 22_04 + arch: x86_64 + runner: "ubuntu-22.04" ghc: "8.10.7" should_run: ${{ !(github.ref == 'refs/heads/stable' || startsWith(github.ref, 'refs/tags/v')) }} - os: 22.04 - ghc: ${{ needs.variables.outputs.GHC_VER }} - cli_asset_name: simplex-chat-ubuntu-22_04-x86-64 - desktop_asset_name: simplex-desktop-ubuntu-22_04-x86_64.deb + os_underscore: 22_04 + arch: x86_64 + runner: "ubuntu-22.04" should_run: true + ghc: ${{ needs.variables.outputs.GHC_VER }} - os: 24.04 - ghc: ${{ needs.variables.outputs.GHC_VER }} - cli_asset_name: simplex-chat-ubuntu-24_04-x86-64 - desktop_asset_name: simplex-desktop-ubuntu-24_04-x86_64.deb + os_underscore: 24_04 + arch: x86_64 + runner: "ubuntu-24.04" should_run: true + ghc: ${{ needs.variables.outputs.GHC_VER }} + - os: 22.04 + os_underscore: 22_04 + arch: aarch64 + runner: "ubuntu-22.04-arm" + should_run: true + ghc: ${{ needs.variables.outputs.GHC_VER }} + - os: 24.04 + os_underscore: 24_04 + arch: aarch64 + runner: "ubuntu-24.04-arm" + should_run: true + ghc: ${{ needs.variables.outputs.GHC_VER }} steps: - name: Checkout Code if: matrix.should_run == true @@ -143,7 +160,7 @@ jobs: path: | ~/.cabal/store dist-newstyle - key: ubuntu-${{ matrix.os }}-ghc${{ matrix.ghc }}-${{ hashFiles('cabal.project', 'simplex-chat.cabal') }} + key: ubuntu-${{ matrix.os }}-${{ matrix.arch }}-ghc${{ matrix.ghc }}-${{ hashFiles('cabal.project', 'simplex-chat.cabal') }} - name: Set up Docker Buildx if: matrix.should_run == true @@ -215,17 +232,17 @@ jobs: if: startsWith(github.ref, 'refs/tags/v') && matrix.should_run == true shell: bash run: | - docker cp builder:/out/simplex-chat ./${{ matrix.cli_asset_name }} - path="${{ github.workspace }}/${{ matrix.cli_asset_name }}" + docker cp builder:/out/simplex-chat ./simplex-chat-ubuntu-${{ matrix.os_underscore }}-${{ matrix.arch }} + path="${{ github.workspace }}/simplex-chat-ubuntu-${{ matrix.os_underscore }}-${{ matrix.arch }}" echo "bin_path=$path" >> $GITHUB_OUTPUT - echo "bin_hash=$(echo SHA2-256\(${{ matrix.cli_asset_name }}\)= $(openssl sha256 $path | cut -d' ' -f 2))" >> $GITHUB_OUTPUT + echo "bin_hash=$(echo SHA2-256\(simplex-chat-ubuntu-${{ matrix.os_underscore }}-${{ matrix.arch }}\)= $(openssl sha256 $path | cut -d' ' -f 2))" >> $GITHUB_OUTPUT - name: Upload CLI if: startsWith(github.ref, 'refs/tags/v') && matrix.should_run == true uses: ./.github/actions/prepare-release with: bin_path: ${{ steps.linux_cli_prepare.outputs.bin_path }} - bin_name: ${{ matrix.cli_asset_name }} + bin_name: simplex-chat-ubuntu-${{ matrix.os_underscore }}-${{ matrix.arch }} bin_hash: ${{ steps.linux_cli_prepare.outputs.bin_hash }} github_ref: ${{ github.ref }} github_token: ${{ secrets.GITHUB_TOKEN }} @@ -241,16 +258,16 @@ jobs: if: startsWith(github.ref, 'refs/tags/v') && matrix.should_run == true shell: bash run: | - path=$(echo ${{ github.workspace }}/apps/multiplatform/release/main/deb/simplex_amd64.deb ) + path=$(echo ${{ github.workspace }}/apps/multiplatform/release/main/deb/simplex_${{ matrix.arch }}.deb ) echo "package_path=$path" >> $GITHUB_OUTPUT - echo "package_hash=$(echo SHA2-256\(${{ matrix.desktop_asset_name }}\)= $(openssl sha256 $path | cut -d' ' -f 2))" >> $GITHUB_OUTPUT + echo "package_hash=$(echo SHA2-256\(simplex-desktop-ubuntu-${{ matrix.os_underscore }}-${{ matrix.arch }}.deb\)= $(openssl sha256 $path | cut -d' ' -f 2))" >> $GITHUB_OUTPUT - name: Upload Desktop uses: ./.github/actions/prepare-release if: startsWith(github.ref, 'refs/tags/v') && matrix.should_run == true with: bin_path: ${{ steps.linux_desktop_build.outputs.package_path }} - bin_name: ${{ matrix.desktop_asset_name }} + bin_name: simplex-desktop-ubuntu-${{ matrix.os_underscore }}-${{ matrix.arch }}.deb bin_hash: ${{ steps.linux_desktop_build.outputs.package_hash }} github_ref: ${{ github.ref }} github_token: ${{ secrets.GITHUB_TOKEN }} @@ -268,14 +285,14 @@ jobs: run: | path=$(echo ${{ github.workspace }}/apps/multiplatform/release/main/*imple*.AppImage) echo "appimage_path=$path" >> $GITHUB_OUTPUT - echo "appimage_hash=$(echo SHA2-256\(simplex-desktop-x86_64.AppImage\)= $(openssl sha256 $path | cut -d' ' -f 2))" >> $GITHUB_OUTPUT + echo "appimage_hash=$(echo SHA2-256\(simplex-desktop-${{ matrix.arch }}.AppImage\)= $(openssl sha256 $path | cut -d' ' -f 2))" >> $GITHUB_OUTPUT - name: Upload AppImage if: startsWith(github.ref, 'refs/tags/v') && matrix.os == '22.04' && matrix.should_run == true uses: ./.github/actions/prepare-release with: bin_path: ${{ steps.linux_appimage_build.outputs.appimage_path }} - bin_name: "simplex-desktop-x86_64.AppImage" + bin_name: "simplex-desktop-${{ matrix.arch }}.AppImage" bin_hash: ${{ steps.linux_appimage_build.outputs.appimage_hash }} github_ref: ${{ github.ref }} github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/scripts/ci/linux_util_free_space.sh b/scripts/ci/linux_util_free_space.sh index ef00eb886e..841edf9ef0 100755 --- a/scripts/ci/linux_util_free_space.sh +++ b/scripts/ci/linux_util_free_space.sh @@ -89,8 +89,7 @@ sudo rm -rf /opt/hostedtoolcache/PyPy || : # 376MB sudo rm -rf /opt/hostedtoolcache/node || : # Remove Web browser packages -sudo apt purge -y \ - firefox \ - google-chrome-stable \ - microsoft-edge-stable +for pkg in firefox google-chrome-stable microsoft-edge-stable; do + sudo apt purge -y "$pkg" || echo "Failed or not installed: $pkg" +done df -h diff --git a/scripts/desktop/build-lib-linux.sh b/scripts/desktop/build-lib-linux.sh index 1db2755926..6b197a0b8b 100755 --- a/scripts/desktop/build-lib-linux.sh +++ b/scripts/desktop/build-lib-linux.sh @@ -7,7 +7,7 @@ function readlink() { } OS=linux -ARCH=${1:-`uname -a | rev | cut -d' ' -f2 | rev`} +ARCH="$(uname -m)" GHC_VERSION=9.6.3 if [ "$ARCH" == "aarch64" ]; then diff --git a/scripts/desktop/make-appimage-linux.sh b/scripts/desktop/make-appimage-linux.sh index ffd5e13337..5978fe0cba 100755 --- a/scripts/desktop/make-appimage-linux.sh +++ b/scripts/desktop/make-appimage-linux.sh @@ -2,6 +2,9 @@ set -e + +ARCH="$(uname -m)" + function readlink() { echo "$(cd "$(dirname "$1")"; pwd -P)" } @@ -36,13 +39,13 @@ sed -i 's|Icon=.*|Icon=simplex|g' *imple*.desktop cp *imple*.desktop usr/share/applications/ cp $multiplatform_dir/desktop/src/jvmMain/resources/distribute/*.appdata.xml usr/share/metainfo -if [ ! -f ../appimagetool-x86_64.AppImage ]; then - wget --secure-protocol=TLSv1_3 https://github.com/simplex-chat/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage -O ../appimagetool-x86_64.AppImage - chmod +x ../appimagetool-x86_64.AppImage +if [ ! -f ../appimagetool-${ARCH}.AppImage ]; then + wget --secure-protocol=TLSv1_3 https://github.com/simplex-chat/appimagetool/releases/download/continuous/appimagetool-${ARCH}.AppImage -O ../appimagetool-${ARCH}.AppImage + chmod +x ../appimagetool-${ARCH}.AppImage fi -if [ ! -f ../runtime-x86_64 ]; then - wget --secure-protocol=TLSv1_3 https://github.com/simplex-chat/type2-runtime/releases/download/continuous/runtime-x86_64 -O ../runtime-x86_64 - chmod +x ../runtime-x86_64 +if [ ! -f ../runtime-${ARCH} ]; then + wget --secure-protocol=TLSv1_3 https://github.com/simplex-chat/type2-runtime/releases/download/continuous/runtime-${ARCH} -O ../runtime-${ARCH} + chmod +x ../runtime-${ARCH} fi # Determenistic build @@ -56,7 +59,7 @@ sed -i -e '/skiko-awt-runtime-linux/d' ./usr/lib/app/simplex.cfg # Set all files to fixed time find . -exec touch -d "@$SOURCE_DATE_EPOCH" {} + -../appimagetool-x86_64.AppImage --verbose --no-appstream --runtime-file ../runtime-x86_64 . +../appimagetool-${ARCH}.AppImage --verbose --no-appstream --runtime-file ../runtime-${ARCH} . mv *imple*.AppImage ../../ # Just a safeguard diff --git a/scripts/desktop/make-deb-linux.sh b/scripts/desktop/make-deb-linux.sh index 6f9de8a1e6..c9c4d5a81c 100755 --- a/scripts/desktop/make-deb-linux.sh +++ b/scripts/desktop/make-deb-linux.sh @@ -1,5 +1,7 @@ #!/usr/bin/env sh +ARCH="$(uname -m)" + scripts/desktop/build-lib-linux.sh cd apps/multiplatform ./gradlew packageDeb @@ -39,6 +41,6 @@ rm -f ./extracted/opt/*imple*/lib/app/*skiko-awt-runtime-linux* sed -i -e '/skiko-awt-runtime-linux/d' ./extracted/opt/*imple*/lib/app/simplex.cfg find ./extracted/ -exec touch -d "@$SOURCE_DATE_EPOCH" {} + -dpkg-deb --build --root-owner-group --uniform-compression ./extracted ./release/main/deb/simplex_amd64.deb +dpkg-deb --build --root-owner-group --uniform-compression ./extracted ./release/main/deb/simplex_${ARCH}.deb -strip-nondeterminism ./release/main/deb/simplex_amd64.deb +strip-nondeterminism ./release/main/deb/simplex_${ARCH}.deb diff --git a/scripts/desktop/prepare-vlc-linux.sh b/scripts/desktop/prepare-vlc-linux.sh index a798fd6fc9..6106035d83 100755 --- a/scripts/desktop/prepare-vlc-linux.sh +++ b/scripts/desktop/prepare-vlc-linux.sh @@ -2,16 +2,18 @@ set -e +ARCH="$(uname -m)" + function readlink() { echo "$(cd "$(dirname "$1")"; pwd -P)" } root_dir="$(dirname "$(dirname "$(readlink "$0")")")" -vlc_dir=$root_dir/apps/multiplatform/common/src/commonMain/cpp/desktop/libs/linux-x86_64/vlc +vlc_dir=$root_dir/apps/multiplatform/common/src/commonMain/cpp/desktop/libs/linux-${ARCH}/vlc mkdir $vlc_dir || exit 0 vlc_tag='v3.0.21-1' -vlc_url="https://github.com/simplex-chat/vlc/releases/download/${vlc_tag}/vlc-linux-x86_64.appimage" +vlc_url="https://github.com/simplex-chat/vlc/releases/download/${vlc_tag}/vlc-linux-${ARCH}.appimage" cd /tmp mkdir tmp 2>/dev/null || true