diff --git a/.gitea/workflows/tdlib_ping.yaml b/.gitea/workflows/tdlib_ping.yaml new file mode 100644 index 0000000..b9925a6 --- /dev/null +++ b/.gitea/workflows/tdlib_ping.yaml @@ -0,0 +1,100 @@ +# Сборка нативного tdlib_ping (CGO + libtdjson) под linux/amd64. +# - При push тега refs/tags/v* — артефакт job + вложение в релиз Gitea (создаётся при отсутствии). +# - workflow_dispatch — только артефакт прогона (без привязки к релизу). +name: Build tdlib_ping (linux/amd64) + +on: + push: + tags: + - "v*" + workflow_dispatch: + +permissions: + contents: write + +env: + GO_VERSION: "1.22" + ASSET_NAME: tdlib_ping-linux-amd64 + +jobs: + build-tdlib-ping: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: ${{ env.GO_VERSION }} + + - name: Install libtdjson + run: | + sudo apt-get update + sudo apt-get install -y libtdjson-dev jq + + - name: Build tdlib_ping + env: + CGO_ENABLED: "1" + run: | + set -euo pipefail + go build -tags=tdlib -trimpath -ldflags="-s -w" -o "${ASSET_NAME}" ./cmd/tdlib_ping + chmod +x "${ASSET_NAME}" + file "${ASSET_NAME}" + ldd "${ASSET_NAME}" || true + + - name: Upload workflow artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ env.ASSET_NAME }}-${{ gitea.sha }} + path: ${{ env.ASSET_NAME }} + retention-days: 90 + + - name: Create release if needed and upload asset + if: ${{ startsWith(gitea.ref, 'refs/tags/') }} + env: + TOKEN: ${{ github.token }} + run: | + set -euo pipefail + SERVER="${{ gitea.server_url }}" + SERVER="${SERVER%/}" + REPO_FULL="${{ gitea.repository }}" + OWNER="${REPO_FULL%%/*}" + REPO="${REPO_FULL#*/}" + TAG="${{ gitea.ref_name }}" + ASSET_PATH="${{ env.ASSET_NAME }}" + ASSET_NAME="${{ env.ASSET_NAME }}" + + api() { + curl -fsS -H "Authorization: token ${TOKEN}" -H "Accept: application/json" "$@" + } + + code="$(api -o /tmp/rel.json -w "%{http_code}" \ + "${SERVER}/api/v1/repos/${OWNER}/${REPO}/releases/tags/${TAG}")" + + if [ "${code}" = "404" ]; then + api -X POST "${SERVER}/api/v1/repos/${OWNER}/${REPO}/releases" \ + -H "Content-Type: application/json" \ + -d "{\"tag_name\":\"${TAG}\",\"name\":\"${TAG}\",\"draft\":false}" \ + -o /tmp/rel.json + elif [ "${code}" != "200" ]; then + echo "unexpected HTTP ${code} from release-by-tag" + cat /tmp/rel.json || true + exit 1 + fi + + release_id="$(jq -r '.id' /tmp/rel.json)" + if [ "${release_id}" = "null" ] || [ -z "${release_id}" ]; then + echo "missing release id in response:" + cat /tmp/rel.json + exit 1 + fi + + curl -fsS -X POST \ + -H "Authorization: token ${TOKEN}" \ + -H "Accept: application/json" \ + -F "attachment=@${ASSET_PATH};type=application/octet-stream" \ + "${SERVER}/api/v1/repos/${OWNER}/${REPO}/releases/${release_id}/assets?name=${ASSET_NAME}" diff --git a/cmd/tdlib_ping/README.md b/cmd/tdlib_ping/README.md index c5d04eb..f2c9a84 100644 --- a/cmd/tdlib_ping/README.md +++ b/cmd/tdlib_ping/README.md @@ -6,6 +6,15 @@ `{"ok":true,"error":"","exit_code":0}` +## Сборка в CI (Gitea) + +В репозитории есть workflow **`.gitea/workflows/tdlib_ping.yaml`**: + +- при push тега вида **`v*`** собирается **`tdlib_ping-linux-amd64`** и прикрепляется к **релизу** с этим тегом (релиз создаётся автоматически, если его ещё нет); +- у каждого прогона файл также лежит в **артефактах** job (удобно для `workflow_dispatch` с ветки). + +Скачайте бинарник со страницы релиза или из вкладки Actions → нужный run → Artifacts. На сервере положите в каталог вроде `/usr/local/bin`, выставьте `chmod +x`, задайте `MTPROXY_TDLIB_HELPER`. + ## Сборка Linux (Debian/Ubuntu), установите заголовки и библиотеку, например: