name: CI on: pull_request: branches: [main] env: # Floor is set by the heaviest dep (modernc.org/sqlite v1.50+). GO_VERSION: "1.25" jobs: test: name: Test (linux/amd64) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} cache: true - name: go vet run: go vet ./... - name: go test run: go test -race -coverprofile=coverage.out ./... - name: coverage summary run: go tool cover -func=coverage.out | tail -1 lint: name: Lint runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} cache: true - uses: golangci/golangci-lint-action@v7 with: # v1.61 was built against Go 1.23 and refuses to load a # config that targets a newer toolchain — go.mod is on 1.25. # Bumping to a v2.x release built against current Go. version: v2.1.6 args: --timeout=5m build: name: Build (${{ matrix.goos }}/${{ matrix.goarch }}) runs-on: ubuntu-latest strategy: fail-fast: false matrix: include: - goos: linux goarch: amd64 - goos: linux goarch: arm64 - goos: windows goarch: amd64 ext: ".exe" steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} cache: true - name: build server + agent env: GOOS: ${{ matrix.goos }} GOARCH: ${{ matrix.goarch }} CGO_ENABLED: "0" run: | mkdir -p bin go build -trimpath -ldflags="-s -w" \ -o bin/restic-manager-server-${{ matrix.goos }}-${{ matrix.goarch }}${{ matrix.ext }} \ ./cmd/server go build -trimpath -ldflags="-s -w" \ -o bin/restic-manager-agent-${{ matrix.goos }}-${{ matrix.goarch }}${{ matrix.ext }} \ ./cmd/agent - uses: actions/upload-artifact@v3 with: name: binaries-${{ matrix.goos }}-${{ matrix.goarch }} path: bin/* retention-days: 7