From f03ae448584b96cf686aca817bd73510a372e006 Mon Sep 17 00:00:00 2001 From: shum Date: Wed, 19 Aug 2026 09:48:53 +0000 Subject: [PATCH] desktop: vendor nanohttpd, rebuild linux aarch64 --- .github/workflows/build.yml | 611 ++---------------- apps/multiplatform/build.gradle.kts | 11 + apps/multiplatform/common/build.gradle.kts | 1 + .../efb2ebf/nanohttpd-websocket-efb2ebf.jar | Bin 0 -> 23146 bytes .../efb2ebf/nanohttpd-websocket-efb2ebf.pom | 32 + .../nanohttpd/efb2ebf/nanohttpd-efb2ebf.jar | Bin 0 -> 51000 bytes .../nanohttpd/efb2ebf/nanohttpd-efb2ebf.pom | 24 + 7 files changed, 121 insertions(+), 558 deletions(-) create mode 100644 apps/multiplatform/local-maven/com/github/NanoHttpd/nanohttpd/nanohttpd-websocket/efb2ebf/nanohttpd-websocket-efb2ebf.jar create mode 100644 apps/multiplatform/local-maven/com/github/NanoHttpd/nanohttpd/nanohttpd-websocket/efb2ebf/nanohttpd-websocket-efb2ebf.pom create mode 100644 apps/multiplatform/local-maven/com/github/NanoHttpd/nanohttpd/nanohttpd/efb2ebf/nanohttpd-efb2ebf.jar create mode 100644 apps/multiplatform/local-maven/com/github/NanoHttpd/nanohttpd/nanohttpd/efb2ebf/nanohttpd-efb2ebf.pom diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4e5050fe8f..302a1888a0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,42 +1,17 @@ name: build +# Only the ubuntu-22.04-aarch64 (CLI,Desktop) job is kept on this branch, every other job +# and trigger is removed, so that pushing here rebuilds nothing but the 7.0.1 assets that +# are missing from the release. on: push: branches: - - master - - stable - tags: - - "v*" - - "!*-fdroid" - - "!*-armv7a" - pull_request: - paths: - - "src/**" - - "apps/simplex-chat/**" - - "apps/simplex-bot/**" - - "apps/simplex-bot-advanced/**" - - "apps/simplex-broadcast-bot/**" - - "apps/simplex-directory-service/**" - - "tests/**" - - "bots/src/**" - - "simplex-chat.cabal" - - "cabal.project" - - "Dockerfile*" - - "scripts/ci/**" - - "scripts/desktop/**" - - ".github/**" + - sh/desktop-rebuild + workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: ${{ !startsWith(github.ref, 'refs/tags/v') }} - -# This workflow uses custom actions (prepare-build and prepare-release) defined in: -# -# .github/actions/ -# ├── prepare-build -# │ └── action.yml -# └── prepare-release -# └── action.yml + cancel-in-progress: true # Important! # Do not use always(), it makes build unskippable. @@ -64,77 +39,18 @@ jobs: if: false run: echo -# ============================= -# Create release -# ============================= - -# Create release, but only if it's triggered by tag push. -# On pull requests/commits push, this job will always complete. - - maybe-release: - runs-on: ubuntu-latest - steps: - - name: Clone project - if: startsWith(github.ref, 'refs/tags/v') - uses: actions/checkout@v3 - - - name: Build changelog - id: build_changelog - if: startsWith(github.ref, 'refs/tags/v') - uses: simplex-chat/release-changelog-builder-action@v5 - with: - configuration: .github/changelog_conf.json - failOnError: true - ignorePreReleases: true - commitMode: true - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Create release - if: startsWith(github.ref, 'refs/tags/v') - uses: simplex-chat/action-gh-release@v2 - with: - body: ${{ steps.build_changelog.outputs.changelog }} - prerelease: true - files: | - LICENSE - fail_on_unmatched_files: true - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # ========================= # Linux Build # ========================= build-linux: name: "ubuntu-${{ matrix.os }}-${{ matrix.arch }} (CLI,Desktop), GHC: ${{ matrix.ghc }}" - needs: [maybe-release, variables] + needs: [variables] 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" - hash: 'sha256:5c8b2c0a6c745bc177669abfaa716b4bc57d58e2ea3882fb5da67f4d59e3dda5' - should_run: ${{ !(github.ref == 'refs/heads/stable' || startsWith(github.ref, 'refs/tags/v')) }} - - os: 22.04 - os_underscore: 22_04 - arch: x86_64 - runner: "ubuntu-22.04" - should_run: true - ghc: ${{ needs.variables.outputs.GHC_VER }} - hash: 'sha256:5c8b2c0a6c745bc177669abfaa716b4bc57d58e2ea3882fb5da67f4d59e3dda5' - - os: 24.04 - os_underscore: 24_04 - arch: x86_64 - runner: "ubuntu-24.04" - should_run: true - ghc: ${{ needs.variables.outputs.GHC_VER }} - hash: 'sha256:98ff7968124952e719a8a69bb3cccdd217f5fe758108ac4f21ad22e1df44d237' - os: 22.04 os_underscore: 22_04 arch: aarch64 @@ -142,13 +58,6 @@ jobs: should_run: true ghc: ${{ needs.variables.outputs.GHC_VER }} hash: 'sha256:6a62a4157b8775eaf4959cb629e757d32d39d1f4c8ac1b0ddc2510b555cf72f3' - - os: 24.04 - os_underscore: 24_04 - arch: aarch64 - runner: "ubuntu-24.04-arm" - should_run: true - ghc: ${{ needs.variables.outputs.GHC_VER }} - hash: 'sha256:68434214381cb38287104e629fe8ee720167dd98cbb36ab1cbbab342515fa6ab' steps: - name: Checkout Code if: matrix.should_run == true @@ -243,12 +152,11 @@ jobs: strip /out/simplex-chat - name: Build CLI deb - if: startsWith(github.ref, 'refs/tags/v') && matrix.should_run == true + if: matrix.should_run == true shell: docker exec -t builder sh -eu {0} run: | - version=${{ github.ref }} - version=${version#refs/tags/v} - version=${version%-*} + # Built from a branch, not from a tag, so take the version from the app itself + version=$(sed -n 's/^android.version_name=//p' apps/multiplatform/gradle.properties) ./scripts/desktop/build-cli-deb.sh "$version" @@ -260,7 +168,7 @@ jobs: - name: Copy CLI from container and prepare it id: linux_cli_prepare - if: startsWith(github.ref, 'refs/tags/v') && matrix.should_run == true + if: matrix.should_run == true shell: bash run: | cli_name="simplex-chat-ubuntu-${{ matrix.os_underscore }}-${{ matrix.arch }}" @@ -278,28 +186,26 @@ jobs: echo "deb_path=${cli_path}/${cli_deb_name}" >> $GITHUB_OUTPUT echo "deb_hash=$(echo SHA2-256\(${cli_deb_name}\)= $(openssl sha256 "${cli_path}/${cli_deb_name}" | cut -d' ' -f 2))" >> $GITHUB_OUTPUT + # Nothing is attached to the release from a branch, the assets are uploaded as workflow + # artifacts, each named after the release asset it has to replace - name: Upload CLI - if: startsWith(github.ref, 'refs/tags/v') && matrix.should_run == true - uses: ./.github/actions/prepare-release + if: matrix.should_run == true + uses: actions/upload-artifact@v4 with: - bin_name: ${{ steps.linux_cli_prepare.outputs.bin_name }} - bin_path: ${{ steps.linux_cli_prepare.outputs.bin_path }} - bin_hash: ${{ steps.linux_cli_prepare.outputs.bin_hash }} - github_ref: ${{ github.ref }} - github_token: ${{ secrets.GITHUB_TOKEN }} + name: ${{ steps.linux_cli_prepare.outputs.bin_name }} + path: ${{ steps.linux_cli_prepare.outputs.bin_path }} + if-no-files-found: error - name: Upload CLI deb - if: startsWith(github.ref, 'refs/tags/v') && matrix.should_run == true - uses: ./.github/actions/prepare-release + if: matrix.should_run == true + uses: actions/upload-artifact@v4 with: - bin_name: ${{ steps.linux_cli_prepare.outputs.deb_name }} - bin_path: ${{ steps.linux_cli_prepare.outputs.deb_path }} - bin_hash: ${{ steps.linux_cli_prepare.outputs.deb_hash }} - github_ref: ${{ github.ref }} - github_token: ${{ secrets.GITHUB_TOKEN }} + name: ${{ steps.linux_cli_prepare.outputs.deb_name }} + path: ${{ steps.linux_cli_prepare.outputs.deb_path }} + if-no-files-found: error - name: Build Desktop - if: startsWith(github.ref, 'refs/tags/v') && matrix.should_run == true + if: matrix.should_run == true shell: docker exec -t builder sh -eu {0} run: | export ASSETS_DIR='../../assets' @@ -307,25 +213,24 @@ jobs: - name: Prepare Desktop id: linux_desktop_build - if: startsWith(github.ref, 'refs/tags/v') && matrix.should_run == true + if: matrix.should_run == true shell: bash run: | path=$(echo ${{ github.workspace }}/apps/multiplatform/release/main/deb/simplex_${{ matrix.arch }}.deb ) + echo "package_name=simplex-desktop-ubuntu-${{ matrix.os_underscore }}-${{ matrix.arch }}.deb" >> $GITHUB_OUTPUT echo "package_path=$path" >> $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 + uses: actions/upload-artifact@v4 + if: matrix.should_run == true with: - bin_path: ${{ steps.linux_desktop_build.outputs.package_path }} - 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 }} + name: ${{ steps.linux_desktop_build.outputs.package_name }} + path: ${{ steps.linux_desktop_build.outputs.package_path }} + if-no-files-found: error - name: Build AppImage - if: startsWith(github.ref, 'refs/tags/v') && matrix.os == '22.04' && matrix.should_run == true + if: matrix.os == '22.04' && matrix.should_run == true shell: docker exec -t builder sh -eu {0} run: | export ASSETS_DIR='../../assets' @@ -333,22 +238,35 @@ jobs: - name: Prepare AppImage id: linux_appimage_build - if: startsWith(github.ref, 'refs/tags/v') && matrix.os == '22.04' && matrix.should_run == true + if: matrix.os == '22.04' && matrix.should_run == true shell: bash run: | path=$(echo ${{ github.workspace }}/apps/multiplatform/release/main/*imple*.AppImage) + echo "appimage_name=simplex-desktop-${{ matrix.arch }}.AppImage" >> $GITHUB_OUTPUT echo "appimage_path=$path" >> $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 + if: matrix.os == '22.04' && matrix.should_run == true + uses: actions/upload-artifact@v4 with: - bin_path: ${{ steps.linux_appimage_build.outputs.appimage_path }} - 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 }} + name: ${{ steps.linux_appimage_build.outputs.appimage_name }} + path: ${{ steps.linux_appimage_build.outputs.appimage_path }} + if-no-files-found: error + + # The hashes in the release notes are of the bare files, not of the artifact zips + - name: Print hashes + if: matrix.should_run == true + shell: bash + run: | + { + echo '```' + echo "${{ steps.linux_cli_prepare.outputs.bin_hash }}" + echo "${{ steps.linux_cli_prepare.outputs.deb_hash }}" + echo "${{ steps.linux_desktop_build.outputs.package_hash }}" + echo "${{ steps.linux_appimage_build.outputs.appimage_hash }}" + echo '```' + } >> $GITHUB_STEP_SUMMARY - name: Fix permissions for cache if: matrix.should_run == true @@ -378,426 +296,3 @@ jobs: echo "All "$attempts" attempts failed." exit 1 fi - -# ================================= -# Linux PostgreSQL Library Build -# ================================= - - build-linux-postgres: - name: "ubuntu-22.04-x86_64 (Postgres lib), GHC: ${{ needs.variables.outputs.GHC_VER }}" - needs: [maybe-release, variables] - runs-on: ubuntu-22.04 - if: startsWith(github.ref, 'refs/tags/v') - steps: - - name: Checkout Code - uses: actions/checkout@v3 - - - name: Get UID and GID - id: ids - run: | - echo "uid=$(id -u)" >> $GITHUB_OUTPUT - echo "gid=$(id -g)" >> $GITHUB_OUTPUT - - - name: Free disk space - shell: bash - run: ./scripts/ci/linux_util_free_space.sh - - - name: Restore cached build - uses: actions/cache@v4 - with: - path: | - ~/.cabal/store - dist-newstyle - key: ubuntu-22.04-x86_64-postgres-ghc${{ needs.variables.outputs.GHC_VER }}-${{ hashFiles('cabal.project', 'simplex-chat.cabal') }} - - - name: Set up Docker Buildx - uses: simplex-chat/docker-setup-buildx-action@v3 - - - name: Build and cache Docker image - uses: simplex-chat/docker-build-push-action@v6 - with: - context: . - load: true - file: Dockerfile.build - tags: build/22.04:latest - build-args: | - TAG=22.04 - HASH=sha256:5c8b2c0a6c745bc177669abfaa716b4bc57d58e2ea3882fb5da67f4d59e3dda5 - GHC=${{ needs.variables.outputs.GHC_VER }} - USER_UID=${{ steps.ids.outputs.uid }} - USER_GID=${{ steps.ids.outputs.gid }} - - - name: Start container - shell: bash - run: | - docker run -t -d \ - --name builder \ - -v ~/.cabal:/root/.cabal \ - -v /home/runner/work/_temp:/home/runner/work/_temp \ - -v ${{ github.workspace }}:/project \ - build/22.04:latest - - - name: Prepare cabal.project.local - shell: bash - run: | - echo "ignore-project: False" >> cabal.project.local - echo "package direct-sqlcipher" >> cabal.project.local - echo " flags: +openssl" >> cabal.project.local - - - name: Build postgres library - shell: docker exec -t builder sh -eu {0} - run: | - cabal clean - cabal update - scripts/desktop/build-lib-linux.sh postgres - - - name: Copy libs from container - shell: bash - run: | - ARCH=x86_64 - GHC_VER=${{ needs.variables.outputs.GHC_VER }} - BUILD_DIR=$(echo dist-newstyle/build/${ARCH}-linux/ghc-${GHC_VER}/simplex-chat-*) - mkdir -p postgres-libs - cp ${BUILD_DIR}/build/libsimplex.so postgres-libs/ - cp ${BUILD_DIR}/build/deps/* postgres-libs/ - - - name: Upload postgres libs artifact - uses: actions/upload-artifact@v4 - with: - name: simplex-libs-linux-postgres-x86_64 - path: postgres-libs/ - - - name: Fix permissions for cache - shell: bash - run: | - sudo chmod -R 777 dist-newstyle ~/.cabal - sudo chown -R $(id -u):$(id -g) dist-newstyle ~/.cabal - -# ========================= -# MacOS Build -# ========================= - - build-macos: - name: "${{ matrix.os }} (CLI,Desktop), GHC: ${{ matrix.ghc }}" - needs: [maybe-release, variables] - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - include: - - os: macos-latest - ghc: ${{ needs.variables.outputs.GHC_VER }} - cli_asset_name: simplex-chat-macos-aarch64 - desktop_asset_name: simplex-desktop-macos-aarch64.dmg - openssl_dir: "/opt/homebrew/opt" - - os: macos-15-intel - ghc: ${{ needs.variables.outputs.GHC_VER }} - cli_asset_name: simplex-chat-macos-x86-64 - desktop_asset_name: simplex-desktop-macos-x86_64.dmg - openssl_dir: "/usr/local/opt" - steps: - - name: Checkout Code - uses: actions/checkout@v3 - - - name: Prepare build - uses: ./.github/actions/prepare-build - with: - java_ver: ${{ needs.variables.outputs.JAVA_VER }} - ghc_ver: ${{ matrix.ghc }} - os: ${{ matrix.os }} - github_ref: ${{ github.ref }} - - - name: Install OpenSSL - run: brew install openssl@3.0 - - - name: Prepare cabal.project.local - shell: bash - run: | - echo "ignore-project: False" >> cabal.project.local - echo "package simplexmq" >> cabal.project.local - echo " extra-include-dirs: ${{ matrix.opnessl_dir }}/openssl@3.0/include" >> cabal.project.local - echo " extra-lib-dirs: ${{ matrix.openssl_dir}}/openssl@3.0/lib" >> cabal.project.local - echo "" >> cabal.project.local - echo "package direct-sqlcipher" >> cabal.project.local - echo " extra-include-dirs: ${{ matrix.openssl_dir }}/openssl@3.0/include" >> cabal.project.local - echo " extra-lib-dirs: ${{ matrix.openssl_dir }}/openssl@3.0/lib" >> cabal.project.local - echo " flags: +openssl" >> cabal.project.local - - - name: Build CLI - id: mac_cli_build - shell: bash - run: | - cabal build -j --enable-tests - path=$(cabal list-bin simplex-chat) - 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 - - - name: Upload CLI - if: startsWith(github.ref, 'refs/tags/v') - uses: ./.github/actions/prepare-release - with: - bin_path: ${{ steps.mac_cli_build.outputs.bin_path }} - bin_name: ${{ matrix.cli_asset_name }} - bin_hash: ${{ steps.mac_cli_build.outputs.bin_hash }} - github_ref: ${{ github.ref }} - github_token: ${{ secrets.GITHUB_TOKEN }} - - - name: Build Desktop - id: mac_desktop_build - if: startsWith(github.ref, 'refs/tags/v') - shell: bash - env: - APPLE_SIMPLEX_SIGNING_KEYCHAIN: ${{ secrets.APPLE_SIMPLEX_SIGNING_KEYCHAIN }} - APPLE_SIMPLEX_NOTARIZATION_APPLE_ID: ${{ secrets.APPLE_SIMPLEX_NOTARIZATION_APPLE_ID }} - APPLE_SIMPLEX_NOTARIZATION_PASSWORD: ${{ secrets.APPLE_SIMPLEX_NOTARIZATION_PASSWORD }} - run: | - export ASSETS_DIR='../../assets' - scripts/ci/build-desktop-mac.sh - path=$(echo $PWD/apps/multiplatform/release/main/dmg/SimpleX-*.dmg) - 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 - - - name: Upload Desktop - if: startsWith(github.ref, 'refs/tags/v') - uses: ./.github/actions/prepare-release - with: - bin_path: ${{ steps.mac_desktop_build.outputs.package_path }} - bin_name: ${{ matrix.desktop_asset_name }} - bin_hash: ${{ steps.mac_desktop_build.outputs.package_hash }} - github_ref: ${{ github.ref }} - github_token: ${{ secrets.GITHUB_TOKEN }} - - - name: Run tests - timeout-minutes: 120 - shell: bash - run: | - i=1 - attempts=1 - ${{ (github.ref == 'refs/heads/stable' || startsWith(github.ref, 'refs/tags/v')) }} && attempts=3 - while [ "$i" -le "$attempts" ]; do - if cabal test --test-show-details=direct; then - break - else - echo "Attempt $i failed, retrying..." - i=$((i + 1)) - sleep 1 - fi - done - if [ "$i" -gt "$attempts" ]; then - echo "All "$attempts" attempts failed." - exit 1 - fi - -# ========================= -# Windows Build -# ========================= - - build-windows: - name: "${{ matrix.os }} (CLI,Desktop), GHC: ${{ matrix.ghc }}" - needs: [maybe-release, variables] - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - include: - - os: windows-latest - ghc: ${{ needs.variables.outputs.GHC_VER }} - cli_asset_name: simplex-chat-windows-x86-64 - desktop_asset_name: simplex-desktop-windows-x86_64.msi - steps: - - name: Checkout Code - uses: actions/checkout@v3 - - - name: Prepare build - uses: ./.github/actions/prepare-build - with: - java_ver: ${{ needs.variables.outputs.JAVA_VER }} - ghc_ver: ${{ matrix.ghc }} - os: ${{ matrix.os }} - cache_path: "C:/cabal" - github_ref: ${{ github.ref }} - - - name: Configure pagefile (Windows) - uses: simplex-chat/configure-pagefile-action@v1.4 - with: - minimum-size: 16GB - maximum-size: 16GB - disk-root: "C:" - - - name: 'Setup MSYS2' - uses: simplex-chat/setup-msys2@v2 - with: - msystem: ucrt64 - update: true - install: >- - git - perl - make - pacboy: >- - toolchain:p - cmake:p - - # rm -rf dist-newstyle/src/{direct-sq,simplexmq}* is here because of the bug in cabal's dependency which prevents second build from finishing - # (simplexmq is removed because cabal cannot delete its read-only git submodule pack files - blst, libbbs - on Windows) - - name: Build CLI - id: windows_cli_build - shell: msys2 {0} - run: | - export PATH=$PATH:/c/ghcup/bin:$(echo /c/tools/ghc-*/bin || echo) - scripts/desktop/prepare-openssl-windows.sh - openssl_windows_style_path=$(echo `pwd`/dist-newstyle/openssl-3.0.15 | sed 's#/\([a-zA-Z]\)#\1:#' | sed 's#/#\\#g') - rm cabal.project.local 2>/dev/null || true - echo "ignore-project: False" >> cabal.project.local - echo "package direct-sqlcipher" >> cabal.project.local - echo " flags: +openssl" >> cabal.project.local - echo " extra-include-dirs: $openssl_windows_style_path\include" >> cabal.project.local - echo " extra-lib-dirs: $openssl_windows_style_path" >> cabal.project.local - - rm -rf dist-newstyle/src/direct-sq* dist-newstyle/src/simplexmq* - sed -i "s/, unix /--, unix /" simplex-chat.cabal - cabal build -j --enable-tests - rm -rf dist-newstyle/src/direct-sq* dist-newstyle/src/simplexmq* - path=$(cabal list-bin simplex-chat | tail -n 1) - 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 - - - name: Upload CLI - if: startsWith(github.ref, 'refs/tags/v') - uses: ./.github/actions/prepare-release - with: - bin_path: ${{ steps.windows_cli_build.outputs.bin_path }} - bin_name: ${{ matrix.cli_asset_name }} - bin_hash: ${{ steps.windows_cli_build.outputs.bin_hash }} - github_ref: ${{ github.ref }} - github_token: ${{ secrets.GITHUB_TOKEN }} - - - name: Build Desktop - id: windows_desktop_build - if: startsWith(github.ref, 'refs/tags/v') - shell: msys2 {0} - run: | - export PATH=$PATH:/c/ghcup/bin:$(echo /c/tools/ghc-*/bin || echo) - scripts/desktop/build-lib-windows.sh - cd apps/multiplatform - ./gradlew -Psimplex.assets.dir=../../assets packageMsi - rm -rf dist-newstyle/src/direct-sq* dist-newstyle/src/simplexmq* - path=$(echo $PWD/release/main/msi/*imple*.msi | sed 's#/\([a-z]\)#\1:#' | sed 's#/#\\#g') - 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 - - - name: Upload Desktop - if: startsWith(github.ref, 'refs/tags/v') - uses: ./.github/actions/prepare-release - with: - bin_path: ${{ steps.windows_desktop_build.outputs.package_path }} - bin_name: ${{ matrix.desktop_asset_name }} - bin_hash: ${{ steps.windows_desktop_build.outputs.package_hash }} - github_ref: ${{ github.ref }} - github_token: ${{ secrets.GITHUB_TOKEN }} - -# ========================= -# NodeJS libs release -# ========================= - -# Downloads Desktop builds, extracts and archives libraries for NodeJS addon. -# Depends on Linux/MacOS, executes only on release. - -# Secrets: -# ------- -# NODEJS_REPO_TOKEN -# Only select repositories: simplex-chat-libs -# Permissions: -# * Contents (Read and Write) - - release-nodejs-libs: - runs-on: ubuntu-latest - needs: [build-linux, build-linux-postgres, build-macos] - if: startsWith(github.ref, 'refs/tags/v') && (!cancelled()) - steps: - - name: Checkout current repository - uses: actions/checkout@v6 - - - name: Install packages for archiving - run: sudo apt install -y msitools gcc-mingw-w64 - - - name: Download postgres libs artifact - if: needs.build-linux-postgres.result == 'success' - uses: actions/download-artifact@v4 - with: - name: simplex-libs-linux-postgres-x86_64 - path: ${{ runner.temp }}/postgres-libs - - - name: Build archives - run: | - INIT_DIR='${{ runner.temp }}/artifacts' - RELEASE_DIR='${{ runner.temp }}/release-assets' - TAG='${{ github.ref_name }}' - URL='https://github.com/${{ github.repository }}/releases/download' - PREFIX='${{ github.event.repository.name }}-libs' - # Windows-specific - FILE_URL='https://raw.githubusercontent.com/${{ github.repository }}/refs/tags/${{ github.ref_name }}' - - # Setup directories - mkdir "$INIT_DIR" "$RELEASE_DIR" && cd "$INIT_DIR" - - # Downlaod desktop release - curl --proto '=https' --tlsv1.2 -sSf -L "${URL}/${TAG}/simplex-desktop-ubuntu-22_04-x86_64.deb" -o linux.deb - curl --proto '=https' --tlsv1.2 -sSf -L "${URL}/${TAG}/simplex-desktop-macos-aarch64.dmg" -o macos-aarch64.dmg - curl --proto '=https' --tlsv1.2 -sSf -L "${URL}/${TAG}/simplex-desktop-macos-x86_64.dmg" -o macos-x86_64.dmg - curl --proto '=https' --tlsv1.2 -sSf -L "${URL}/${TAG}/simplex-desktop-windows-x86_64.msi" -o windows-x86_64.msi - - # Linux - # ----- - # Extract libraries - dpkg-deb -R linux.deb linux-out/ && cd linux-out/opt/simplex/lib/app/resources - # Preprare directory - mkdir libs && cp *.so libs/ - # Archive - zip -r "${PREFIX}-linux-x86_64.zip" libs - # Back to original dir - mv "${PREFIX}-linux-x86_64.zip" "$RELEASE_DIR" && cd "$INIT_DIR" - - # MacOS: aarch64 - # -------------- - 7z x macos-aarch64.dmg -omacos1-out/ && cd macos1-out/SimpleX/SimpleX.app/Contents/app/resources/ - mkdir libs && cp *.dylib libs/ - zip -r "${PREFIX}-macos-aarch64.zip" libs - mv "${PREFIX}-macos-aarch64.zip" "$RELEASE_DIR" && cd "$INIT_DIR" - - # Macos: x86_64 - # ------------- - 7z x macos-x86_64.dmg -omacos2-out/ && cd macos2-out/SimpleX/SimpleX.app/Contents/app/resources/ - mkdir libs && cp *.dylib libs/ - zip -r "${PREFIX}-macos-x86_64.zip" libs - mv "${PREFIX}-macos-x86_64.zip" "$RELEASE_DIR" && cd "$INIT_DIR" - - # Windows: x86_64 - # --------------- - msiextract windows-x86_64.msi -C windows-out && cd windows-out/SimpleX/app/resources - - # We need to generate library that exports symbols from Windows dll - curl --proto '=https' --tlsv1.2 -sSf -LO "${FILE_URL}/libsimplex.dll.def" - x86_64-w64-mingw32-dlltool -d libsimplex.dll.def -l libsimplex.lib -D libsimplex.dll - - mkdir libs && cp *.dll *.lib libs/ - zip -r "${PREFIX}-windows-x86_64.zip" libs - mv "${PREFIX}-windows-x86_64.zip" "$RELEASE_DIR" && cd "$INIT_DIR" - - # Linux PostgreSQL (only if postgres build succeeded) - # ------------------------------------------------- - POSTGRES_LIBS='${{ runner.temp }}/postgres-libs' - if [ -d "$POSTGRES_LIBS" ]; then - mkdir -p linux-postgres/libs - cp "${POSTGRES_LIBS}"/*.so linux-postgres/libs/ - cd linux-postgres - zip -r "${PREFIX}-linux-x86_64-postgres.zip" libs - mv "${PREFIX}-linux-x86_64-postgres.zip" "$RELEASE_DIR" && cd "$INIT_DIR" - fi - - - name: Create release in libs repo and upload artifacts - uses: softprops/action-gh-release@v2 - with: - repository: ${{ github.repository }}-libs - tag_name: ${{ github.ref_name }} - files: ${{ runner.temp }}/release-assets/* - token: ${{ secrets.NODEJS_REPO_TOKEN }} diff --git a/apps/multiplatform/build.gradle.kts b/apps/multiplatform/build.gradle.kts index 64dd34afbf..b5eb80b6e2 100644 --- a/apps/multiplatform/build.gradle.kts +++ b/apps/multiplatform/build.gradle.kts @@ -69,6 +69,17 @@ version = extra["android.version_name"] as String allprojects { repositories { + // JitPack stopped serving com.github.NanoHttpd.nanohttpd:*:efb2ebf (404 on both the pom + // and the jar), which breaks the desktop build. The only versions it still serves for that + // commit are `master-SNAPSHOT` and its git-describe alias, and both of them declare + // `master-SNAPSHOT` in the pom, so Gradle rejects them with "inconsistent module metadata". + // The jars below are the ones shipped in the 7.0.1 release, taken from + // simplex-desktop-ubuntu-24_04-aarch64.deb: + // nanohttpd-efb2ebf.jar sha256 e063590fb4f8223be5f02ff09aadf4cd40da47ac9cbe0272e6137387be2f9b9a + // nanohttpd-websocket-efb2ebf.jar sha256 8938650ab58c6c1adf6119c3d4691d15de9305637bdce5471fdb51d83724ffe8 + maven(rootProject.layout.projectDirectory.dir("local-maven")) { + content { includeGroup("com.github.NanoHttpd.nanohttpd") } + } google() mavenCentral() maven("https://oss.sonatype.org/content/repositories/snapshots") diff --git a/apps/multiplatform/common/build.gradle.kts b/apps/multiplatform/common/build.gradle.kts index 1f55b9c660..8f6e76e2a0 100644 --- a/apps/multiplatform/common/build.gradle.kts +++ b/apps/multiplatform/common/build.gradle.kts @@ -148,6 +148,7 @@ kotlin { implementation("org.slf4j:slf4j-simple:2.0.12") implementation("uk.co.caprica:vlcj:4.8.3") implementation("net.java.dev.jna:jna:5.14.0") + // Resolved from local-maven, see the root build.gradle.kts - JitPack stopped serving these implementation("com.github.NanoHttpd.nanohttpd:nanohttpd:efb2ebf") implementation("com.github.NanoHttpd.nanohttpd:nanohttpd-websocket:efb2ebf") implementation("com.squareup.okhttp3:okhttp:4.12.0") diff --git a/apps/multiplatform/local-maven/com/github/NanoHttpd/nanohttpd/nanohttpd-websocket/efb2ebf/nanohttpd-websocket-efb2ebf.jar b/apps/multiplatform/local-maven/com/github/NanoHttpd/nanohttpd/nanohttpd-websocket/efb2ebf/nanohttpd-websocket-efb2ebf.jar new file mode 100644 index 0000000000000000000000000000000000000000..3d1f336df20bdf8f8d1df9874592743bc0dfcf66 GIT binary patch literal 23146 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 N3yd1VICRdw{RcJJKd%4) literal 0 HcmV?d00001 diff --git a/apps/multiplatform/local-maven/com/github/NanoHttpd/nanohttpd/nanohttpd-websocket/efb2ebf/nanohttpd-websocket-efb2ebf.pom b/apps/multiplatform/local-maven/com/github/NanoHttpd/nanohttpd/nanohttpd-websocket/efb2ebf/nanohttpd-websocket-efb2ebf.pom new file mode 100644 index 0000000000..444206b858 --- /dev/null +++ b/apps/multiplatform/local-maven/com/github/NanoHttpd/nanohttpd/nanohttpd-websocket/efb2ebf/nanohttpd-websocket-efb2ebf.pom @@ -0,0 +1,32 @@ + + + 4.0.0 + com.github.NanoHttpd.nanohttpd + nanohttpd-websocket + efb2ebf + NanoHttpd/nanohttpd + Tiny, easily embeddable HTTP server in Java. + http://nanohttpd.org + 2012 + + + BSD 3-Clause "New" or "Revised" License + https://api.github.com/licenses/bsd-3-clause + repo + + + + scm:git://github.com/NanoHttpd/nanohttpd.git + scm:git://github.com/NanoHttpd/nanohttpd.git + git://github.com/NanoHttpd/nanohttpd.git + + + + com.github.NanoHttpd.nanohttpd + nanohttpd + efb2ebf + compile + + + diff --git a/apps/multiplatform/local-maven/com/github/NanoHttpd/nanohttpd/nanohttpd/efb2ebf/nanohttpd-efb2ebf.jar b/apps/multiplatform/local-maven/com/github/NanoHttpd/nanohttpd/nanohttpd/efb2ebf/nanohttpd-efb2ebf.jar new file mode 100644 index 0000000000000000000000000000000000000000..b22f6a8b1a0cb818244d9d12858e3aeaf30a547f GIT binary patch literal 51000 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%0A6sSoQWbxc+<0lKeNc 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 a|3yI>61c*7xKxZDL<|W8WbR?I1M+{4NyQWZ literal 0 HcmV?d00001 diff --git a/apps/multiplatform/local-maven/com/github/NanoHttpd/nanohttpd/nanohttpd/efb2ebf/nanohttpd-efb2ebf.pom b/apps/multiplatform/local-maven/com/github/NanoHttpd/nanohttpd/nanohttpd/efb2ebf/nanohttpd-efb2ebf.pom new file mode 100644 index 0000000000..9e96997b7f --- /dev/null +++ b/apps/multiplatform/local-maven/com/github/NanoHttpd/nanohttpd/nanohttpd/efb2ebf/nanohttpd-efb2ebf.pom @@ -0,0 +1,24 @@ + + + 4.0.0 + com.github.NanoHttpd.nanohttpd + nanohttpd + efb2ebf + NanoHttpd/nanohttpd + Tiny, easily embeddable HTTP server in Java. + http://nanohttpd.org + 2012 + + + BSD 3-Clause "New" or "Revised" License + https://api.github.com/licenses/bsd-3-clause + repo + + + + scm:git://github.com/NanoHttpd/nanohttpd.git + scm:git://github.com/NanoHttpd/nanohttpd.git + git://github.com/NanoHttpd/nanohttpd.git + +