name: Security

on:
  push:
    branches: [main]
  pull_request:

permissions:
  contents: read
  security-events: write

jobs:
  govulncheck:
    name: Vulnerability Check
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v6

      - name: Set up Go
        uses: actions/setup-go@v6
        with:
          go-version: stable

      - name: Run govulncheck
        uses: golang/govulncheck-action@v1

  gosec:
    name: gosec
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v6

      - name: Run gosec
        uses: securego/gosec@v2
        with:
          args: -no-fail -fmt sarif -out gosec-results.sarif ./...

      - name: Upload gosec results
        if: always()
        uses: github/codeql-action/upload-sarif@v4
        with:
          sarif_file: gosec-results.sarif

  codeql:
    name: CodeQL
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v6

      - name: Initialize CodeQL
        uses: github/codeql-action/init@v4
        with:
          languages: go
          config-file: .github/codeql/codeql-config.yml

      - name: Autobuild
        uses: github/codeql-action/autobuild@v4

      - name: Perform CodeQL Analysis
        uses: github/codeql-action/analyze@v4

  bearer:
    name: Bearer
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v6

      - name: Bearer Security Scan
        uses: bearer/bearer-action@v2
        with:
          format: sarif
          output: bearer-results.sarif

      - name: Upload Bearer results
        if: always()
        uses: github/codeql-action/upload-sarif@v4
        with:
          sarif_file: bearer-results.sarif
