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
+
+