| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- name: Go
- on:
- push:
- branches:
- - main
- - 'release/**'
- paths:
- - '**.go'
- - 'go.mod'
- - '.golangci.yml'
- - '.github/workflows/go.yml'
- pull_request:
- paths:
- - '**.go'
- - 'go.mod'
- - '.golangci.yml'
- - '.github/workflows/go.yml'
- env:
- GOPROXY: "https://proxy.golang.org"
- permissions:
- contents: read
- jobs:
- lint:
- permissions:
- contents: read # for actions/checkout to fetch code
- pull-requests: read # for golangci/golangci-lint-action to fetch pull requests
- name: Lint
- runs-on: ubuntu-latest
- steps:
- - name: Checkout code
- uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: 1.25.x
- - name: Install Task
- uses: arduino/setup-task@b91d5d2c96a56797b48ac1e0e89220bf64044611 # v2.0.0
- with:
- repo-token: ${{ secrets.GITHUB_TOKEN }}
- - name: Check Go module tidiness and generated files
- shell: bash
- run: |
- go mod tidy
- task generate
- STATUS=$(git status --porcelain)
- if [ ! -z "$STATUS" ]; then
- echo "Unstaged files:"
- echo $STATUS
- echo "Run 'go mod tidy' or 'task generate' commit them"
- exit 1
- fi
- - name: Run golangci-lint
- uses: golangci/golangci-lint-action@9fae48acfc02a90574d7c304a1758ef9895495fa # v7.0.1
- with:
- version: latest
- args: --timeout=30m
- test:
- name: Test
- strategy:
- matrix:
- go-version: [ 1.25.x ]
- platform: [ ubuntu-latest, macos-latest ]
- runs-on: ${{ matrix.platform }}
- steps:
- - name: Checkout code
- uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ matrix.go-version }}
- - name: Run tests with coverage
- run: |
- go test -shuffle=on -v -race -coverprofile=coverage -covermode=atomic -json ./... > test-report.json
- go install github.com/mfridman/tparse@latest
- tparse -all -file=test-report.json
- - name: Send email on failure
- uses: unknwon/send-email-on-failure@89339a1bc93f4ad1d30f3b7e4911fcba985c9adb # v1
- if: ${{ failure() && github.event_name == 'push' && github.ref == 'refs/heads/main' }}
- with:
- smtp_username: ${{ secrets.SMTP_USERNAME }}
- smtp_password: ${{ secrets.SMTP_PASSWORD }}
- # Running tests with race detection consumes too much memory on Windows,
- # see https://github.com/golang/go/issues/46099 for details.
- test-windows:
- name: Test Windows
- strategy:
- matrix:
- go-version: [ 1.25.x ]
- platform: [ windows-latest ]
- runs-on: ${{ matrix.platform }}
- steps:
- - name: Checkout code
- uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ matrix.go-version }}
- - name: Run tests with coverage
- run: go test -shuffle=on -v -coverprofile=coverage -covermode=atomic ./...
- - name: Send email on failure
- uses: unknwon/send-email-on-failure@89339a1bc93f4ad1d30f3b7e4911fcba985c9adb # v1
- if: ${{ failure() && github.event_name == 'push' && github.ref == 'refs/heads/main' }}
- with:
- smtp_username: ${{ secrets.SMTP_USERNAME }}
- smtp_password: ${{ secrets.SMTP_PASSWORD }}
- postgres:
- name: Postgres
- strategy:
- matrix:
- go-version: [ 1.25.x ]
- platform: [ ubuntu-latest ]
- runs-on: ${{ matrix.platform }}
- services:
- postgres:
- image: postgres:9.6
- env:
- POSTGRES_PASSWORD: postgres
- options: >-
- --health-cmd pg_isready
- --health-interval 10s
- --health-timeout 5s
- --health-retries 5
- ports:
- - 5432:5432
- steps:
- - name: Checkout code
- uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ matrix.go-version }}
- - name: Run tests with coverage
- run: |
- go test -shuffle=on -v -race -coverprofile=coverage -covermode=atomic -json ./internal/database/... > test-report.json
- go install github.com/mfridman/tparse@latest
- tparse -all -file=test-report.json
- env:
- GOGS_DATABASE_TYPE: postgres
- PGPORT: 5432
- PGHOST: localhost
- PGUSER: postgres
- PGPASSWORD: postgres
- PGSSLMODE: disable
- mysql:
- name: MySQL
- strategy:
- matrix:
- go-version: [ 1.25.x ]
- platform: [ ubuntu-22.04 ] # Use the lowest version possible for backwards compatibility
- runs-on: ${{ matrix.platform }}
- steps:
- - name: Start MySQL server
- run: sudo systemctl start mysql
- - name: Checkout code
- uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ matrix.go-version }}
- - name: Run tests with coverage
- run: |
- go test -shuffle=on -v -race -coverprofile=coverage -covermode=atomic -json ./internal/database/... > test-report.json
- go install github.com/mfridman/tparse@latest
- tparse -all -file=test-report.json
- env:
- GOGS_DATABASE_TYPE: mysql
- MYSQL_USER: root
- MYSQL_PASSWORD: root
- MYSQL_HOST: localhost
- MYSQL_PORT: 3306
|