diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1fc1c18fe1..04c70546fb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -221,6 +221,16 @@ jobs: done strip /out/simplex-chat + - name: Build CLI deb + if: startsWith(github.ref, 'refs/tags/v') && matrix.should_run == true + shell: docker exec -t builder sh -eu {0} + run: | + version=${{ github.ref }} + version=${version#refs/tags/v} + version=${version%-*} + + ./scripts/desktop/build-cli-deb.sh "$version" + - name: Copy tests from container if: matrix.should_run == true shell: bash @@ -232,21 +242,41 @@ jobs: if: startsWith(github.ref, 'refs/tags/v') && matrix.should_run == true shell: bash run: | - 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\(simplex-chat-ubuntu-${{ matrix.os_underscore }}-${{ matrix.arch }}\)= $(openssl sha256 $path | cut -d' ' -f 2))" >> $GITHUB_OUTPUT + cli_name="simplex-chat-ubuntu-${{ matrix.os_underscore }}-${{ matrix.arch }}" + cli_deb_name="${cli_name}.deb" + cli_path="${{ github.workspace }}" + + docker cp builder:/out/simplex-chat "./${cli_name}" + docker cp builder:/out/deb-build/simplex-chat.deb "./${cli_deb_name}" + + echo "bin_name=${cli_name}" >> $GITHUB_OUTPUT + echo "bin_path=${cli_path}/${cli_name}" >> $GITHUB_OUTPUT + echo "bin_hash=$(echo SHA2-256\(${cli_name}\)= $(openssl sha256 "${cli_path}/${cli_name}" | cut -d' ' -f 2))" >> $GITHUB_OUTPUT + + echo "deb_name=${cli_deb_name}" >> $GITHUB_OUTPUT + 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 - name: Upload CLI if: startsWith(github.ref, 'refs/tags/v') && matrix.should_run == true uses: ./.github/actions/prepare-release with: + bin_name: ${{ steps.linux_cli_prepare.outputs.bin_name }} bin_path: ${{ steps.linux_cli_prepare.outputs.bin_path }} - 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 }} + - name: Upload CLI deb + if: startsWith(github.ref, 'refs/tags/v') && matrix.should_run == true + uses: ./.github/actions/prepare-release + 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: Build Desktop if: startsWith(github.ref, 'refs/tags/v') && matrix.should_run == true shell: docker exec -t builder sh -eu {0} diff --git a/scripts/desktop/build-cli-deb.sh b/scripts/desktop/build-cli-deb.sh new file mode 100755 index 0000000000..7422520d71 --- /dev/null +++ b/scripts/desktop/build-cli-deb.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env sh +set -eu + +export SOURCE_DATE_EPOCH=1764547200 + +CLI_VERSION="$1" +CLI_PATH_TO_BIN="${2:-/out/simplex-chat}" +BUILD_FOLDER="${3:-/out/deb-build}" + +size=$(stat -c '%s' "$CLI_PATH_TO_BIN" | awk '{printf "%.0f\n", ($1+1023)/1024}') +arch=$(case "$(uname -m)" in x86_64) printf "amd64" ;; aarch64) printf "arm64" ;; *) printf "unknown" ;; esac) +package='simplex-chat' + +mkdir "$BUILD_FOLDER" +cd "$BUILD_FOLDER" + +mkdir -p ./${package}/DEBIAN +mkdir -p ./${package}/usr/bin +cat > ./${package}/DEBIAN/control << EOF +Package: ${package} +Version: ${CLI_VERSION} +Section: Messenger +Priority: optional +Architecture: ${arch} +Maintainer: SimpleX Chat +Description: SimpleX - the first messaging platform that has no user identifiers of any kind - 100% private by design! (CLI) +Installed-Size: ${size} +EOF + +cp "$CLI_PATH_TO_BIN" ./${package}/usr/bin/simplex-chat +chmod +x ./${package}/usr/bin/simplex-chat + +find ./${package} -exec touch -d "@${SOURCE_DATE_EPOCH}" {} + + +dpkg-deb --build --root-owner-group --uniform-compression ./${package} + +strip-nondeterminism "./${package}.deb"