mirror of
https://github.com/pgsty/minio.git
synced 2026-08-09 15:53:28 +03:00
ci: gate build, vet, tests, lint, generation, race, and crosscompile
Make the repository's actual quality contract visible in CI. Check formatting, build and vet the tree, run cmd and internal tests, enforce pinned lint and generated-file cleanliness, exercise S3 Select under the race detector, and cross-compile every supported target. Keep each concern in a separate job so failures identify the missing guarantee instead of hiding behind a single aggregate test result. Co-authored-by: ChatGPT <noreply@openai.com> Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,149 @@
|
|||||||
|
name: Go CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
# Cancel superseded runs for the same PR; never cancel master push runs.
|
||||||
|
# Keyed on PR number (not head_ref) so fork PRs sharing a branch name
|
||||||
|
# do not collide.
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
verify:
|
||||||
|
name: Format, Build, Vet
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 20
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version-file: go.mod
|
||||||
|
cache: true
|
||||||
|
|
||||||
|
- name: Check gofmt
|
||||||
|
run: |
|
||||||
|
unformatted=$(gofmt -l main.go cmd internal)
|
||||||
|
if [ -n "${unformatted}" ]; then
|
||||||
|
echo "The following files are not gofmt-formatted:"
|
||||||
|
echo "${unformatted}"
|
||||||
|
gofmt -d ${unformatted}
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
env:
|
||||||
|
CGO_ENABLED: 0
|
||||||
|
run: go build ./...
|
||||||
|
|
||||||
|
- name: Vet
|
||||||
|
run: go vet ./...
|
||||||
|
|
||||||
|
quality:
|
||||||
|
name: Lint, Generated Files
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 25
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version-file: go.mod
|
||||||
|
cache: true
|
||||||
|
|
||||||
|
- name: Lint
|
||||||
|
run: make lint
|
||||||
|
|
||||||
|
- name: Check generated files
|
||||||
|
run: make check-gen
|
||||||
|
|
||||||
|
race-s3select:
|
||||||
|
name: Race, S3 Select
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 15
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version-file: go.mod
|
||||||
|
cache: true
|
||||||
|
|
||||||
|
- name: Run S3 Select tests under race detector
|
||||||
|
run: go test -race ./internal/s3select/... -count=1
|
||||||
|
|
||||||
|
crosscompile:
|
||||||
|
name: Cross Compile
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 20
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version-file: go.mod
|
||||||
|
cache: true
|
||||||
|
|
||||||
|
- name: Build supported targets
|
||||||
|
run: make crosscompile
|
||||||
|
|
||||||
|
test-internal:
|
||||||
|
name: Test internal/
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 25
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version-file: go.mod
|
||||||
|
cache: true
|
||||||
|
|
||||||
|
# internal/http listener tests bind [::1]; runners disable IPv6 by default.
|
||||||
|
- name: Enable IPv6
|
||||||
|
run: |
|
||||||
|
sudo sysctl net.ipv6.conf.all.disable_ipv6=0
|
||||||
|
sudo sysctl net.ipv6.conf.default.disable_ipv6=0
|
||||||
|
|
||||||
|
- name: Run internal tests
|
||||||
|
env:
|
||||||
|
CGO_ENABLED: 0
|
||||||
|
MINIO_API_REQUESTS_MAX: "10000"
|
||||||
|
run: go test ./internal/... -count=1
|
||||||
|
|
||||||
|
test-cmd:
|
||||||
|
name: Test cmd/
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 35
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version-file: go.mod
|
||||||
|
cache: true
|
||||||
|
|
||||||
|
# Some server tests bind IPv6 listeners; runners disable IPv6 by default.
|
||||||
|
- name: Enable IPv6
|
||||||
|
run: |
|
||||||
|
sudo sysctl net.ipv6.conf.all.disable_ipv6=0
|
||||||
|
sudo sysctl net.ipv6.conf.default.disable_ipv6=0
|
||||||
|
|
||||||
|
- name: Run cmd tests
|
||||||
|
env:
|
||||||
|
CGO_ENABLED: 0
|
||||||
|
MINIO_API_REQUESTS_MAX: "10000"
|
||||||
|
# cmd/ is one large package; raise go test's default 10m per-package
|
||||||
|
# timeout so slower runners fail on the job timeout, not a panic.
|
||||||
|
run: go test ./cmd/ -count=1 -timeout 30m
|
||||||
Reference in New Issue
Block a user