summaryrefslogtreecommitdiff
path: root/.github/workflows/tests.yml
blob: f88608678955e42e6d1828e50e1a38a38a781f8a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
name: rr_cli_tests

on:
  push:
    branches:
      - master
      - stable
  pull_request:

jobs:
  golangci-lint:
    name: Golang-CI (lint)
    runs-on: ubuntu-latest
    steps:
      - name: Check out code
        uses: actions/checkout@v4

      - name: Set up Go
        uses: actions/setup-go@v5 # action page: <https://github.com/actions/setup-go>
        with:
          go-version: stable

      - name: Run linter
        uses: golangci/[email protected]
        with:
          version: v1.62 # without patch version
          only-new-issues: false # show only new issues if it's a pull request
          args: -v --build-tags=race --timeout=10m

  go-test:
    name: Unit tests
    runs-on: ubuntu-latest
    steps:
      - name: Set up Go
        uses: actions/setup-go@v5
        with:
          go-version: stable

      - name: Check out code
        uses: actions/checkout@v4
        with:
          fetch-depth: 2 # Fixes codecov error 'Issue detecting commit SHA'

      - name: Init Go modules Cache # Docs: <https://git.io/JfAKn#go---modules>
        uses: actions/cache@v4
        with:
          path: ~/go/pkg/mod
          key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
          restore-keys: ${{ runner.os }}-go-

      - name: Install Go dependencies
        run: go mod download

      - name: Run Unit tests
        run: go test -race -covermode=atomic -coverprofile /tmp/coverage.txt ./...

      - name: Upload Coverage report to CodeCov
        continue-on-error: true
        uses: codecov/[email protected] # https://github.com/codecov/codecov-action
        with:
          file: /tmp/coverage.txt

  build:
    name: Build for ${{ matrix.os }}
    runs-on: ubuntu-latest
    needs: [ go-test ]
    strategy:
      fail-fast: false
      matrix:
        os: [ linux, darwin, windows, freebsd ]
    steps:
      - name: Set up Go
        uses: actions/setup-go@v5 # action page: <https://github.com/actions/setup-go>
        with:
          go-version: stable

      - name: Check out code
        uses: actions/checkout@v4

      - name: Init Go modules Cache # Docs: <https://git.io/JfAKn#go---modules>
        uses: actions/cache@v4
        with:
          path: ~/go/pkg/mod
          key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
          restore-keys: ${{ runner.os }}-go-

      - name: Install Go dependencies
        run: go mod download && go mod verify

      - name: Generate version value
        id: values # for PR this value will be `merge@__hash__`, SO: <https://stackoverflow.com/a/59780579/2252921>
        run: |
          echo "version=$(echo ${GITHUB_REF##*/} | sed -e 's/^[vV ]*//')" >> $GITHUB_OUTPUT
          echo "timestamp=$(echo $(date +%FT%T%z))" >> $GITHUB_OUTPUT

      - name: Compile binary file
        env:
          GOOS: ${{ matrix.os }}
          GOARCH: amd64
          CGO_ENABLED: 0
          LDFLAGS: -s
            -X github.com/roadrunner-server/roadrunner/v2024/internal/meta.version=${{ steps.values.outputs.version }}
            -X github.com/roadrunner-server/roadrunner/v2024/internal/meta.buildTime=${{ steps.values.outputs.timestamp }}
        run: go build -pgo=roadrunner.pprof -trimpath -ldflags "$LDFLAGS" -o ./rr ./cmd/rr

      - name: Try to execute
        if: matrix.os == 'linux'
        run: ./rr -v

      - name: Upload artifact
        uses: actions/upload-artifact@v4
        with:
          name: rr-${{ matrix.os }}
          path: ./rr
          if-no-files-found: error
          retention-days: 10

  docker-image:
    name: Build docker image
    runs-on: ubuntu-latest
    needs: [ go-test ]
    steps:
      - name: Check out code
        uses: actions/checkout@v4

      - name: Build image
        run: docker build -t rr:local -f ./Dockerfile .

      - name: Try to execute
        run: docker run --rm rr:local -v

      - uses: aquasecurity/[email protected] # action page: <https://github.com/aquasecurity/trivy-action>
        with:
          image-ref: rr:local
          format: "table"
          severity: HIGH,CRITICAL
          exit-code: 1