name: tests on: push: branches: - master - stable paths-ignore: - '**.md' pull_request: paths-ignore: - '**.md' jobs: validate-config-file: name: Validate config file runs-on: ubuntu-latest steps: - name: Check out code uses: actions/checkout@v3 - name: Setup nodejs uses: actions/setup-node@v3 with: node-version: '14' - name: Install linter run: npm install -g ajv-cli # Package page: - name: Run linter run: ajv validate --all-errors --verbose -s ./schemas/config/2.0.schema.json -d ./.rr.yaml golangci-lint: name: Golang-CI (lint) runs-on: ubuntu-latest steps: - name: Check out code uses: actions/checkout@v3 - name: Set up Go uses: actions/setup-go@v2 # action page: with: go-version: 1.17 - name: Run linter uses: golangci/golangci-lint-action@v3.1.0 with: version: v1.44 # without patch version only-new-issues: false # show only new issues if it's a pull request args: --build-tags=safe --timeout=10m go-test: name: Unit tests runs-on: ubuntu-latest steps: - name: Set up Go uses: actions/setup-go@v2 with: go-version: 1.18 - name: Check out code uses: actions/checkout@v3 with: fetch-depth: 2 # Fixes codecov error 'Issue detecting commit SHA' - name: Init Go modules Cache # Docs: uses: actions/cache@v3 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/codecov-action@v2.1.0 # https://github.com/codecov/codecov-action with: file: /tmp/coverage.txt build: name: Build for ${{ matrix.os }} runs-on: ubuntu-latest needs: [ golangci-lint, go-test ] strategy: fail-fast: false matrix: os: [ linux, darwin, windows ] steps: - name: Set up Go uses: actions/setup-go@v2 # action page: with: go-version: 1.18 - name: Check out code uses: actions/checkout@v3 - name: Init Go modules Cache # Docs: uses: actions/cache@v3 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: run: | echo "::set-output name=version::`echo ${GITHUB_REF##*/}`@`echo ${GITHUB_SHA} | cut -c1-8`" echo "::set-output name=timestamp::`date +%FT%T%z`" - name: Compile binary file env: GOOS: ${{ matrix.os }} GOARCH: amd64 CGO_ENABLED: 0 LDFLAGS: -s -X github.com/roadrunner-server/roadrunner/v2/internal/meta.version=${{ steps.values.outputs.version }} -X github.com/roadrunner-server/roadrunner/v2/internal/meta.buildTime=${{ steps.values.outputs.timestamp }} run: go build -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@v2 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: [ golangci-lint, go-test ] steps: - name: Check out code uses: actions/checkout@v3 - name: Build image run: docker build -t rr:local -f ./Dockerfile . - name: Try to execute run: docker run --rm rr:local -v - uses: aquasecurity/trivy-action@0.2.2 # action page: with: image-ref: rr:local format: 'table' severity: MEDIUM,HIGH,CRITICAL exit-code: 1