Update README.md to include CI build instructions for tdlib_ping. Document the Gitea workflow for tagging and artifact retrieval, enhancing clarity for users on obtaining the binary and setting up the environment.
This commit is contained in:
@@ -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}"
|
||||||
@@ -6,6 +6,15 @@
|
|||||||
|
|
||||||
`{"ok":true,"error":"","exit_code":0}`
|
`{"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), установите заголовки и библиотеку, например:
|
Linux (Debian/Ubuntu), установите заголовки и библиотеку, например:
|
||||||
|
|||||||
Reference in New Issue
Block a user