name: CI on: push: branches: [ main ] paths-ignore: - '**.md' - '.gitea/**' - 'LICENSE' pull_request: workflow_dispatch: concurrency: group: ${{ gitea.workflow }}-${{ gitea.ref }} cancel-in-progress: true # CI собирает/тестирует ТОЛЬКО headless-вариант: приложение без графического окна # (internal/app/ui_noui.go). UI (Fyne-окно) требует cgo и C-компилятора, поэтому # собирается локально и публикуется скриптом scripts/build-publish-ui.ps1. env: CGO_ENABLED: '0' jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version: '1.25' check-latest: true - name: Run tests run: go test ./... -v -count=1 -timeout 300s 2>&1 - name: Vet run: go vet ./... build-and-package: if: always() needs: test # Только linux: headless-бинарь для сервера. Windows-бинарь (с UI, cgo) # публикуется локально через scripts/build-publish-ui.ps1. runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version: '1.25' check-latest: true - name: Build binary run: | FILENAME="ratatoskr-linux-amd64" VERSION="commit-$(echo '${{ gitea.sha }}' | cut -c1-7)" GOOS=linux GOARCH=amd64 \ go build -ldflags="-s -w -X main.version=${VERSION} -X main.updateToken=${{ secrets.TC_UPDATE_TOKEN }}" -o "${FILENAME}" ./cmd/ratatoskr/ echo "FILENAME=${FILENAME}" >> "${GITEA_ENV}" echo "VERSION=${VERSION}" >> "${GITEA_ENV}" - name: Show size run: ls -lh "$FILENAME" - name: Upload to Gitea Packages if: gitea.ref == 'refs/heads/main' run: | SHA256_HEX=$(sha256sum "${FILENAME}" | awk '{print $1}') # .version — идентификатор версии для авто-обновления printf '%s' "${VERSION}" > "${FILENAME}.version" # .sha256 — контрольная сумма бинаря (проверка U4) printf '%s' "${SHA256_HEX}" > "${FILENAME}.sha256" # Всё публикуется в КОНКРЕТНУЮ версию ${VERSION}, НЕ в псевдо-version "latest". # "latest" в Gitea при параллельных PUT матрицы (6 платформ) переуказывается # на каждый снимок — companion-файлы и бинарь разъезжаются, ломая checksum (U4). for f in "${FILENAME}" "${FILENAME}.version" "${FILENAME}.sha256"; do curl -sS -X PUT \ -H "Authorization: token ${{ secrets.TC_GITEA_TOKEN }}" \ -H "Content-Type: application/octet-stream" \ "${{ vars.GIT_MAIN_URL }}/api/packages/${{ gitea.actor }}/generic/ratatoskr/${VERSION}/${f}" \ --data-binary @"${f}" done echo "Published ${VERSION}/{binary,.version,.sha256}"