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 0000000000..3d1f336df2 Binary files /dev/null and b/apps/multiplatform/local-maven/com/github/NanoHttpd/nanohttpd/nanohttpd-websocket/efb2ebf/nanohttpd-websocket-efb2ebf.jar differ 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 0000000000..b22f6a8b1a Binary files /dev/null and b/apps/multiplatform/local-maven/com/github/NanoHttpd/nanohttpd/nanohttpd/efb2ebf/nanohttpd-efb2ebf.jar differ 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 + +