name: ci

on:
  push:
    branches: [ "develop", "main" ]
  pull_request:
    branches: [ "develop", "main" ]

permissions:
  contents: read

jobs:

  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        goVer: ['1.23', '1.24']
    steps:
    - name: Harden the runner (Audit all outbound calls)
      uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0
      with:
        egress-policy: audit

    - name: Checkout Repo
      uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
  
    - name: Set up Go
      uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
      with:
        go-version: ${{ matrix.goVer }}
       
    - name: Test with Coverage
      if: ${{ matrix.goVer == '1.24' }}
      run: go test -coverpkg=./... -v -short -race -coverprofile=coverage1.txt -covermode=atomic ./...
      env:
        GODEBUG: x509sha1=1

    - name: Test Generic with Coverage
      if: ${{ matrix.goVer == '1.24' }}
      run: go test -coverpkg=./... -v -short -tags purego  -coverprofile=coverage2.txt -covermode=atomic ./...      
      env:
        GODEBUG: x509sha1=1

    - name: Upload coverage to Codecov
      if: ${{ matrix.goVer == '1.24' }}
      uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
      with:
        files: ./coverage1.txt,./coverage2.txt
      env:
        CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
  
    - name: Test Force SM4 Single Block with AES-NI
      run: go test -short ./sm4/...      
      env:
        FORCE_SM4BLOCK_AESNI: 1

    - name: Test only
      if: ${{ matrix.goVer != '1.24' }}
      run: go test -short ./...
      env:
        GODEBUG: x509sha1=1

    - name: Test Generic only
      if: ${{ matrix.goVer != '1.24' }}
      run: go test -short -tags purego ./...      
      env:
        GODEBUG: x509sha1=1

    - name: Test Plugin only
      if: ${{ matrix.goVer == '1.24' }}
      run: go test -short -tags plugin ./...      
      env:
        GODEBUG: x509sha1=1
