name: Release App on: workflow_dispatch: push: branches: - main permissions: contents: write jobs: release-app: runs-on: ubuntu-latest env: ARCHIVE_NAME: shinoa-linux-x86_64.tar.gz CHECKSUM_NAME: shinoa-linux-x86_64.tar.gz.sha256 TDLIB_RELEASE_TAG: v1.8.63 TDLIB_ARCHIVE_URL: https://git.mshq.dev/AxiFisk/shinoa-tdlib/releases/download/${{ env.TDLIB_RELEASE_TAG }}/tdlib-linux-x86_64.tar.gz steps: - name: Check out repository uses: https://github.com/actions/checkout@v4 with: fetch-depth: 0 - name: Install build dependencies run: | if command -v sudo >/dev/null 2>&1; then SUDO=sudo else SUDO= fi $SUDO apt-get update $SUDO apt-get install -y \ build-essential \ ca-certificates \ cmake \ curl \ git \ gperf \ jq \ libssl-dev \ patchelf \ pkg-config \ zlib1g-dev - name: Resolve app version id: app_version run: | set -euo pipefail version="$(sed -n 's/^project(shinoa VERSION \([^ ]*\) LANGUAGES CXX)$/\1/p' CMakeLists.txt)" if [ -z "$version" ]; then echo "Failed to resolve app version from CMakeLists.txt" >&2 exit 1 fi { echo "version=$version" echo "release_tag=v$version" } >> "$GITHUB_OUTPUT" - name: Download prebuilt TDLib run: | set -euo pipefail curl --fail-with-body -L "$TDLIB_ARCHIVE_URL" -o tdlib-linux-x86_64.tar.gz tar -xzf tdlib-linux-x86_64.tar.gz test -f tdlib/include/td/telegram/td_json_client.h test -f tdlib/lib/libtdjson.so - name: Build release bundle env: TELEGRAM_TUI_BUILD_API_ID: ${{ secrets.TELEGRAM_API_ID }} TELEGRAM_TUI_BUILD_API_HASH: ${{ secrets.TELEGRAM_API_HASH }} run: | set -euo pipefail rm -rf build dist test -n "${TELEGRAM_TUI_BUILD_API_ID}" test -n "${TELEGRAM_TUI_BUILD_API_HASH}" cmake -S . -B build \ -DCMAKE_BUILD_TYPE=Release \ -DTELEGRAM_TUI_REQUIRE_BUILD_CREDENTIALS=ON \ -DTELEGRAM_TUI_TDLIB_ROOT="$PWD/tdlib" cmake --build build -j"$(nproc)" install -dm755 dist/usr/bin dist/usr/lib dist/usr/share/doc/shinoa install -m755 build/shinoa dist/usr/bin/shinoa cp -a tdlib/lib/libtdjson.so* dist/usr/lib/ install -m644 README.md dist/usr/share/doc/shinoa/README.md patchelf --remove-rpath dist/usr/bin/shinoa tar -C dist -czf "$ARCHIVE_NAME" usr sha256sum "$ARCHIVE_NAME" > "$CHECKSUM_NAME" - name: Create or update release env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} run: | set -euo pipefail api="${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}" commit_sha="${{ github.sha }}" release_tag="${{ steps.app_version.outputs.release_tag }}" version="${{ steps.app_version.outputs.version }}" release_json="$(mktemp)" body_file="$(mktemp)" cat > "$body_file" <&2 cat "$release_json" >&2 exit 1 fi status="$(curl --silent --show-error \ --output /dev/null \ --write-out "%{http_code}" \ -H "Authorization: token ${GITEA_TOKEN}" \ -X DELETE \ "$api/tags/$release_tag")" case "$status" in 204|404) ;; *) echo "Failed to delete tag $release_tag, HTTP $status" >&2 exit 1 ;; esac curl --fail-with-body \ -H "Authorization: token ${GITEA_TOKEN}" \ -H "Content-Type: application/json" \ -X POST \ -d @- \ "$api/releases" > "$release_json" <