diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 7a59d3cf..23e19225 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -1,6 +1,14 @@
name: signal-cli CI
-on: [ push, pull_request, workflow_call ]
+on:
+ push:
+ branches:
+ - '**'
+ pull_request:
+ workflow_call:
+
+permissions:
+ contents: write # to fetch code (actions/checkout) and submit dependency graph (gradle/gradle-build-action)
jobs:
build:
@@ -8,20 +16,81 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- java: [ '17', '18' ]
+ java: [ '21', '24' ]
steps:
- - uses: actions/checkout@v1
+ - uses: actions/checkout@v4
- name: Set up JDK
- uses: actions/setup-java@v1
+ uses: actions/setup-java@v3
with:
+ distribution: 'zulu'
java-version: ${{ matrix.java }}
+ - name: Setup Gradle
+ uses: gradle/actions/setup-gradle@v4
+ with:
+ dependency-graph: generate-and-submit
+ - name: Install asciidoc
+ run: sudo apt update && sudo apt --no-install-recommends install -y asciidoc-base
- name: Build with Gradle
- run: ./gradlew build
+ run: ./gradlew --no-daemon build
+ - name: Build man page
+ run: |
+ cd man
+ make install
+ - name: Add man page to archive
+ run: |
+ version=$(tar tf build/distributions/signal-cli-*.tar | head -n1 | sed 's|signal-cli-\([^/]*\)/.*|\1|')
+ echo $version
+ tar --transform="flags=r;s|man|signal-cli-${version}/man|" -rf build/distributions/signal-cli-${version}.tar man/man{1,5}
- name: Compress archive
run: gzip -n -9 build/distributions/signal-cli-*.tar
- name: Archive production artifacts
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v4
with:
name: signal-cli-archive-${{ matrix.java }}
path: build/distributions/signal-cli-*.tar.gz
+
+ build-graalvm:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v4
+ - uses: graalvm/setup-graalvm@v1
+ with:
+ version: 'latest'
+ java-version: '21'
+ cache: 'gradle'
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ - name: Build with Gradle
+ run: ./gradlew --no-daemon nativeCompile
+ - name: Archive production artifacts
+ uses: actions/upload-artifact@v4
+ with:
+ name: signal-cli-native
+ path: build/native/nativeCompile/signal-cli
+
+ build-client:
+ strategy:
+ matrix:
+ os:
+ - ubuntu
+ - macos
+ - windows
+ runs-on: ${{ matrix.os }}-latest
+ defaults:
+ run:
+ working-directory: ./client
+ steps:
+ - uses: actions/checkout@v4
+ - name: Install rust
+ run: rustup default stable
+ - name: Build client
+ run: cargo build --release --verbose
+ - name: Archive production artifacts
+ uses: actions/upload-artifact@v4
+ with:
+ name: signal-cli-client-${{ matrix.os }}
+ path: |
+ client/target/release/signal-cli-client
+ client/target/release/signal-cli-client.exe
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 0ef62f7e..f778268a 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -9,6 +9,10 @@ on:
schedule:
- cron: '0 7 * * 4'
+permissions:
+ contents: read # to fetch code (actions/checkout)
+ security-events: write
+
jobs:
analyse:
name: Analyse
@@ -17,12 +21,13 @@ jobs:
steps:
- name: Setup Java JDK
- uses: actions/setup-java@v1
+ uses: actions/setup-java@v3
with:
- java-version: 17
+ distribution: 'zulu'
+ java-version: 21
- name: Checkout repository
- uses: actions/checkout@v2
+ uses: actions/checkout@v4
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
@@ -30,7 +35,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@v1
+ uses: github/codeql-action/init@v3
# Override language selection by uncommenting this and choosing your languages
# with:
# languages: go, javascript, csharp, python, cpp, java
@@ -38,7 +43,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
- uses: github/codeql-action/autobuild@v1
+ uses: github/codeql-action/autobuild@v3
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -52,4 +57,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v1
+ uses: github/codeql-action/analyze@v3
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 00000000..b7ce03f1
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,257 @@
+name: release
+
+on:
+ push:
+ tags:
+ - v*
+
+permissions:
+ contents: write # to fetch code (actions/checkout) and create release
+
+env:
+ IMAGE_NAME: signal-cli
+ IMAGE_REGISTRY: ghcr.io/asamk
+ REGISTRY_USER: ${{ github.actor }}
+ REGISTRY_PASSWORD: ${{ github.token }}
+
+jobs:
+
+ ci_wf:
+ permissions:
+ contents: write
+ uses: AsamK/signal-cli/.github/workflows/ci.yml@master
+ # ${{ github.repository }} not accepted here
+
+ lib_to_jar:
+ needs: ci_wf
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+
+ outputs:
+ signal_cli_version: ${{ steps.cli_ver.outputs.version }}
+ release_id: ${{ steps.create_release.outputs.id }}
+
+ steps:
+
+ - name: Download signal-cli build from CI workflow
+ uses: actions/download-artifact@v4
+
+ - name: Get signal-cli version
+ id: cli_ver
+ run: |
+ ver="${GITHUB_REF_NAME#v}"
+ echo "version=${ver}" >> $GITHUB_OUTPUT
+
+ - name: Extract archive
+ run: |
+ tree .
+ ARCHIVE_DIR=$(ls signal-cli-archive-*/ -d | tail -n1)
+ tar -xzf ./"${ARCHIVE_DIR}"/*.tar.gz
+ mv ./"${ARCHIVE_DIR}"/*.tar.gz signal-cli-${{ steps.cli_ver.outputs.version }}.tar.gz
+ rm -rf signal-cli-archive-*/
+
+# - name: Get signal-client jar version
+# id: lib_ver
+# run: |
+# JAR_PREFIX=libsignal-client-
+# jar_file=$(find ./signal-cli-*/lib/ -name "$JAR_PREFIX*.jar")
+# jar_version=$(echo "$jar_file" | xargs basename | sed "s/$JAR_PREFIX//; s/.jar//")
+# echo "$jar_version"
+# echo "signal_client_version=${jar_version}" >> $GITHUB_OUTPUT
+#
+# - name: Download signal-client builds
+# env:
+# RELEASES_URL: https://github.com/signalapp/libsignal/releases/download/
+# FILE_NAMES: signal_jni.dll libsignal_jni.dylib
+# SIGNAL_CLIENT_VER: ${{ steps.lib_ver.outputs.signal_client_version }}
+# run: |
+# for file_name in $FILE_NAMES; do
+# curl -sOL "${RELEASES_URL}/v${SIGNAL_CLIENT_VER}/${file_name}" # note: added v
+# done
+# tree .
+
+ - name: Compress native app
+ env:
+ SIGNAL_CLI_VER: ${{ steps.cli_ver.outputs.version }}
+ run: |
+ chmod +x signal-cli-native/signal-cli
+ tar -czf signal-cli-${SIGNAL_CLI_VER}-Linux-native.tar.gz -C signal-cli-native signal-cli
+ rm -rf signal-cli-native/
+
+# - name: Replace Windows lib
+# env:
+# SIGNAL_CLI_VER: ${{ steps.cli_ver.outputs.version }}
+# SIGNAL_CLIENT_VER: ${{ steps.lib_ver.outputs.signal_client_version }}
+# run: |
+# mv signal_jni.dll libsignal_jni.so
+# zip -u ./signal-cli-*/lib/libsignal-client-${SIGNAL_CLIENT_VER}.jar ./libsignal_jni.so
+# tar -czf signal-cli-${SIGNAL_CLI_VER}-Windows.tar.gz signal-cli-*/
+#
+# - name: Replace macOS lib
+# env:
+# SIGNAL_CLI_VER: ${{ steps.cli_ver.outputs.version }}
+# SIGNAL_CLIENT_VER: ${{ steps.lib_ver.outputs.signal_client_version }}
+# run: |
+# jar_file=./signal-cli-*/lib/libsignal-client-${SIGNAL_CLIENT_VER}.jar
+# zip -d $jar_file libsignal_jni.so
+# zip $jar_file libsignal_jni.dylib
+# tar -czf signal-cli-${SIGNAL_CLI_VER}-macOS.tar.gz signal-cli-*/
+
+ - name: Create release
+ id: create_release
+ uses: actions/create-release@v1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ tag_name: v${{ steps.cli_ver.outputs.version }} # note: added `v`
+ release_name: v${{ steps.cli_ver.outputs.version }} # note: added `v`
+ draft: true
+
+ - name: Upload archive
+ uses: actions/upload-release-asset@v1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ upload_url: ${{ steps.create_release.outputs.upload_url }}
+ asset_path: signal-cli-${{ steps.cli_ver.outputs.version }}.tar.gz
+ asset_name: signal-cli-${{ steps.cli_ver.outputs.version }}.tar.gz
+ asset_content_type: application/x-compressed-tar # .tar.gz
+
+# - name: Upload Linux archive
+# uses: actions/upload-release-asset@v1
+# env:
+# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+# with:
+# upload_url: ${{ steps.create_release.outputs.upload_url }}
+# asset_path: signal-cli-${{ steps.cli_ver.outputs.version }}-Linux.tar.gz
+# asset_name: signal-cli-${{ steps.cli_ver.outputs.version }}-Linux.tar.gz
+# asset_content_type: application/x-compressed-tar # .tar.gz
+
+ - name: Upload Linux native archive
+ uses: actions/upload-release-asset@v1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ upload_url: ${{ steps.create_release.outputs.upload_url }}
+ asset_path: signal-cli-${{ steps.cli_ver.outputs.version }}-Linux-native.tar.gz
+ asset_name: signal-cli-${{ steps.cli_ver.outputs.version }}-Linux-native.tar.gz
+ asset_content_type: application/x-compressed-tar # .tar.gz
+
+# - name: Upload windows archive
+# uses: actions/upload-release-asset@v1
+# env:
+# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+# with:
+# upload_url: ${{ steps.create_release.outputs.upload_url }}
+# asset_path: signal-cli-${{ steps.cli_ver.outputs.version }}-Windows.tar.gz
+# asset_name: signal-cli-${{ steps.cli_ver.outputs.version }}-Windows.tar.gz
+# asset_content_type: application/x-compressed-tar # .tar.gz
+#
+# - name: Upload macos archive
+# uses: actions/upload-release-asset@v1
+# env:
+# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+# with:
+# upload_url: ${{ steps.create_release.outputs.upload_url }}
+# asset_path: signal-cli-${{ steps.cli_ver.outputs.version }}-macOS.tar.gz
+# asset_name: signal-cli-${{ steps.cli_ver.outputs.version }}-macOS.tar.gz
+# asset_content_type: application/x-compressed-tar # .tar.gz
+
+ build-container:
+ needs: ci_wf
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ packages: write
+
+ steps:
+ - uses: actions/checkout@v4
+ - name: Download signal-cli build from CI workflow
+ uses: actions/download-artifact@v4
+
+ - name: Get signal-cli version
+ id: cli_ver
+ run: |
+ ver="${GITHUB_REF_NAME#v}"
+ echo "version=${ver}" >> $GITHUB_OUTPUT
+
+ - name: Move archive file
+ run: |
+ ARCHIVE_DIR=$(ls signal-cli-archive-*/ -d | tail -n1)
+ tar xf ./"${ARCHIVE_DIR}"/*.tar.gz
+ rm -r signal-cli-archive-* signal-cli-native
+ mkdir -p build/install/
+ mv ./signal-cli-"${GITHUB_REF_NAME#v}"/ build/install/signal-cli
+
+ - name: Build Image
+ id: build_image
+ uses: redhat-actions/buildah-build@v2
+ with:
+ image: ${{ env.IMAGE_NAME }}
+ tags: latest ${{ github.sha }} ${{ steps.cli_ver.outputs.version }}
+ containerfiles:
+ ./Containerfile
+ oci: true
+
+ - name: Push To GHCR
+ uses: redhat-actions/push-to-registry@v2
+ id: push
+ with:
+ image: ${{ steps.build_image.outputs.image }}
+ tags: ${{ steps.build_image.outputs.tags }}
+ registry: ${{ env.IMAGE_REGISTRY }}
+ username: ${{ env.REGISTRY_USER }}
+ password: ${{ env.REGISTRY_PASSWORD }}
+
+ - name: Echo outputs
+ run: |
+ echo "${{ toJSON(steps.push.outputs) }}"
+
+ build-container-native:
+ needs: ci_wf
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ packages: write
+
+ steps:
+ - uses: actions/checkout@v4
+ - name: Download signal-cli build from CI workflow
+ uses: actions/download-artifact@v4
+
+ - name: Get signal-cli version
+ id: cli_ver
+ run: |
+ ver="${GITHUB_REF_NAME#v}"
+ echo "version=${ver}" >> $GITHUB_OUTPUT
+
+ - name: Move archive file
+ run: |
+ mkdir -p build/native/nativeCompile/
+ chmod +x ./signal-cli-native/signal-cli
+ mv ./signal-cli-native/signal-cli build/native/nativeCompile/
+
+ - name: Build Image
+ id: build_image
+ uses: redhat-actions/buildah-build@v2
+ with:
+ image: ${{ env.IMAGE_NAME }}
+ tags: latest-native ${{ github.sha }}-native ${{ steps.cli_ver.outputs.version }}-native
+ containerfiles:
+ ./native.Containerfile
+ oci: true
+
+ - name: Push To GHCR
+ uses: redhat-actions/push-to-registry@v2
+ id: push
+ with:
+ image: ${{ steps.build_image.outputs.image }}
+ tags: ${{ steps.build_image.outputs.tags }}
+ registry: ${{ env.IMAGE_REGISTRY }}
+ username: ${{ env.REGISTRY_USER }}
+ password: ${{ env.REGISTRY_PASSWORD }}
+
+ - name: Echo outputs
+ run: |
+ echo "${{ toJSON(steps.push.outputs) }}"
diff --git a/.github/workflows/repackage-native-libs.yml b/.github/workflows/repackage-native-libs.yml
deleted file mode 100644
index fc5fa780..00000000
--- a/.github/workflows/repackage-native-libs.yml
+++ /dev/null
@@ -1,172 +0,0 @@
-name: repackage-native-libs
-
-on:
- push:
- tags:
- - v*
-
-
-jobs:
-
- ci_wf:
- uses: AsamK/signal-cli/.github/workflows/ci.yml@master
- # ${{ github.repository }} not accpeted here
-
-
- lib_to_jar:
- needs: ci_wf
- runs-on: ubuntu-latest
-
- outputs:
- signal_cli_version: ${{ steps.cli_ver.outputs.signal_cli_version }}
- release_id: ${{ steps.create_release.outputs.id }}
-
- steps:
-
- - name: Download signal-cli build from CI workflow
- uses: actions/download-artifact@v2
-
- - name: Get signal-cli version
- id: cli_ver
- run: |
- #echo ${GITHUB_REF#refs/tag/}
- tree .
- mv ./$(ls */ -d | tail -n1)/*.tar.gz .
- ver=$(ls ./*.tar.gz | xargs basename | sed -E 's/signal-cli-(.*).tar.gz/\1/')
- echo $ver
- echo "::set-output name=signal_cli_version::${ver}"
- tar -xzf ./*.tar.gz
-
- - name: Get signal-client jar version
- id: lib_ver
- run: |
- JAR_PREFIX=libsignal-client-
- jar_file=$(find ./signal-cli-*/lib/ -name "$JAR_PREFIX*.jar")
- jar_version=$(echo "$jar_file" | xargs basename | sed "s/$JAR_PREFIX//; s/.jar//")
- echo "$jar_version"
- echo "::set-output name=signal_client_version::$jar_version"
-
- - name: Download signal-client builds
- env:
- RELEASES_URL: https://github.com/signalapp/libsignal/releases/download/
- FILE_NAMES: signal_jni.dll libsignal_jni.dylib
- SIGNAL_CLIENT_VER: ${{ steps.lib_ver.outputs.signal_client_version }}
- run: |
- for file_name in $FILE_NAMES; do
- curl -sOL "${RELEASES_URL}/v${SIGNAL_CLIENT_VER}/${file_name}" # note: added v
- done
- tree .
-
- - name: Replace Windows lib
- env:
- SIGNAL_CLI_VER: ${{ steps.cli_ver.outputs.signal_cli_version }}
- SIGNAL_CLIENT_VER: ${{ steps.lib_ver.outputs.signal_client_version }}
- run: |
- mv signal_jni.dll libsignal_jni.so
- zip -u ./signal-cli-${SIGNAL_CLI_VER}/lib/libsignal-client-${SIGNAL_CLIENT_VER}.jar ./libsignal_jni.so
- tar -czf signal-cli-${SIGNAL_CLI_VER}-Windows.tar.gz signal-cli-${SIGNAL_CLI_VER}/
-
- - name: Replace macOS lib
- env:
- SIGNAL_CLI_VER: ${{ steps.cli_ver.outputs.signal_cli_version }}
- SIGNAL_CLIENT_VER: ${{ steps.lib_ver.outputs.signal_client_version }}
- run: |
- jar_file=./signal-cli-${SIGNAL_CLI_VER}/lib/libsignal-client-${SIGNAL_CLIENT_VER}.jar
- zip -d "$jar_file" libsignal_jni.so
- zip "$jar_file" libsignal_jni.dylib
- tar -czf signal-cli-${SIGNAL_CLI_VER}-macOS.tar.gz signal-cli-${SIGNAL_CLI_VER}/
-
- - name: Create release
- id: create_release
- uses: actions/create-release@v1
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- tag_name: v${{ steps.cli_ver.outputs.signal_cli_version }} # note: added `v`
- release_name: v${{ steps.cli_ver.outputs.signal_cli_version }} # note: added `v`
- draft: true
-
- - name: Upload Linux archive
- uses: actions/upload-release-asset@v1
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- upload_url: ${{ steps.create_release.outputs.upload_url }}
- asset_path: signal-cli-${{ steps.cli_ver.outputs.signal_cli_version }}.tar.gz
- asset_name: signal-cli-${{ steps.cli_ver.outputs.signal_cli_version }}-Linux.tar.gz
- asset_content_type: application/x-compressed-tar # .tar.gz
-
- - name: Upload windows archive
- uses: actions/upload-release-asset@v1
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- upload_url: ${{ steps.create_release.outputs.upload_url }}
- asset_path: signal-cli-${{ steps.cli_ver.outputs.signal_cli_version }}-Windows.tar.gz
- asset_name: signal-cli-${{ steps.cli_ver.outputs.signal_cli_version }}-Windows.tar.gz
- asset_content_type: application/x-compressed-tar # .tar.gz
-
- - name: Upload macos archive
- uses: actions/upload-release-asset@v1
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- upload_url: ${{ steps.create_release.outputs.upload_url }}
- asset_path: signal-cli-${{ steps.cli_ver.outputs.signal_cli_version }}-macOS.tar.gz
- asset_name: signal-cli-${{ steps.cli_ver.outputs.signal_cli_version }}-macOS.tar.gz
- asset_content_type: application/x-compressed-tar # .tar.gz
-
-
- run_repackaged:
-
- needs:
- - lib_to_jar
-
- strategy:
- matrix:
- runner:
- - windows-latest
- - macos-latest
-
- runs-on: ${{ matrix.runner }}
-
- defaults:
- run:
- shell: bash # Explicit for windows
-
- env:
- JAVA_VERSION: 18
-
- steps:
-
- - name: Download the release file
- env:
- SIGNAL_CLI_VER: ${{ needs.lib_to_jar.outputs.signal_cli_version }}
- RELEASE_ID: ${{ needs.lib_to_jar.outputs.release_id }}
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: |
- file_name=signal-cli-${SIGNAL_CLI_VER}-${RUNNER_OS}.tar.gz
- echo "$file_name"
- assets_json=$(curl -s \
- -H "Authorization: Bearer $GITHUB_TOKEN" \
- "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets")
- asset_dl_url=$(echo "$assets_json" | jq -r ".[] | select (.name == \"$file_name\") | .url")
- echo "$asset_dl_url"
- curl -sLOJ \
- -H 'Accept: application/octet-stream' \
- -H "Authorization: Bearer $GITHUB_TOKEN" \
- "$asset_dl_url"
- tar -xzf "$file_name"
-
- - name: Set up JDK for running signal-cli executable
- uses: actions/setup-java@v1
- with:
- java-version: ${{ env.JAVA_VERSION }}
-
- - name: Run signal-cli
- run: |
- cd signal-cli-*/bin
- if [[ "$RUNNER_OS" == 'Windows' ]]; then
- EXECUTABLE_SUFFIX=".bat"
- fi
- ./signal-cli${EXECUTABLE_SUFFIX} listAccounts
diff --git a/.gitignore b/.gitignore
index e41d1e40..2b6774c1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,3 +12,4 @@ local.properties
out/
.DS_Store
/bin/
+/test-config/
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index bb65b3e9..aa627792 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -5,8 +5,8 @@
-
-
+
+