name: CI on: push: branches: [main] pull_request: branches: [main] jobs: test: runs-on: ubuntu-latest # Официальный образ Go: версия компилятора совпадает с go.mod и релизной сборкой. container: golang:1.26 steps: # Код забираем сами, а не через actions/checkout: это JS-действие, ему # нужен Node внутри контейнера, которого в образе golang нет. - name: Забрать код env: TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | set -eu git config --global --add safe.directory "$PWD" git init -q . git remote add origin "${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}.git" git -c http.extraheader="Authorization: token ${TOKEN}" \ fetch --depth 1 origin "${GITHUB_SHA}" git checkout -q FETCH_HEAD - name: Проверить форматирование run: | unformatted="$(gofmt -l cmd internal)" if [ -n "$unformatted" ]; then echo "Не отформатировано (запустите gofmt -w):" echo "$unformatted" exit 1 fi - name: go vet run: go vet ./... - name: Тесты run: go test ./... - name: Собрать бинарники run: | set -eu VERSION="main-$(git rev-parse --short HEAD)" for arch in amd64 arm64; do echo "==> backupctl-linux-${arch}" CGO_ENABLED=0 GOOS=linux GOARCH="${arch}" \ go build -trimpath -ldflags "-s -w -X main.version=${VERSION}" \ -o "dist/backupctl-linux-${arch}" ./cmd/backupctl done ls -la dist ./dist/backupctl-linux-amd64 version - name: Проверить синтаксис скриптов run: bash -n internal/restore/provision.sh