228 lines
6.9 KiB
YAML
228 lines
6.9 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
- release-*
|
|
pull_request: {}
|
|
workflow_dispatch: {}
|
|
|
|
env:
|
|
# Common versions
|
|
GO_VERSION: '1.21.4'
|
|
GOLANGCI_VERSION: 'v1.54.2'
|
|
|
|
jobs:
|
|
check-diff:
|
|
runs-on: ubuntu-22.04
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
|
|
with:
|
|
submodules: true
|
|
|
|
- name: Setup Go
|
|
uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4
|
|
with:
|
|
go-version: ${{ env.GO_VERSION }}
|
|
|
|
- name: Find the Go Build Cache
|
|
id: go
|
|
run: echo "::set-output name=cache::$(make go.cachedir)"
|
|
|
|
- name: Cache the Go Build Cache
|
|
uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3
|
|
with:
|
|
path: ${{ steps.go.outputs.cache }}
|
|
key: ${{ runner.os }}-build-check-diff-${{ hashFiles('**/go.sum') }}
|
|
restore-keys: ${{ runner.os }}-build-check-diff-
|
|
|
|
- name: Cache Go Dependencies
|
|
uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3
|
|
with:
|
|
path: .work/pkg
|
|
key: ${{ runner.os }}-pkg-${{ hashFiles('**/go.sum') }}
|
|
restore-keys: ${{ runner.os }}-pkg-
|
|
|
|
- name: Vendor Dependencies
|
|
run: make vendor vendor.check
|
|
|
|
- name: Check Diff
|
|
run: make check-diff
|
|
|
|
detect-noop:
|
|
runs-on: ubuntu-22.04
|
|
outputs:
|
|
noop: ${{ steps.noop.outputs.should_skip }}
|
|
steps:
|
|
- name: Detect No-op Changes
|
|
id: noop
|
|
uses: fkirc/skip-duplicate-actions@f75f66ce1886f00957d99748a42c724f4330bdcf # v5.3.1
|
|
with:
|
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
paths_ignore: '["**.md", "**.png", "**.jpg"]'
|
|
do_not_skip: '["workflow_dispatch", "schedule", "push"]'
|
|
concurrent_skipping: false
|
|
|
|
lint:
|
|
runs-on: ubuntu-22.04
|
|
needs: detect-noop
|
|
if: needs.detect-noop.outputs.noop != 'true'
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
|
|
with:
|
|
submodules: true
|
|
|
|
- name: Setup Go
|
|
uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4
|
|
with:
|
|
go-version: ${{ env.GO_VERSION }}
|
|
|
|
- name: Find the Go Build Cache
|
|
id: go
|
|
run: echo "::set-output name=cache::$(make go.cachedir)"
|
|
|
|
- name: Cache the Go Build Cache
|
|
uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3
|
|
with:
|
|
path: ${{ steps.go.outputs.cache }}
|
|
key: ${{ runner.os }}-build-lint-${{ hashFiles('**/go.sum') }}
|
|
restore-keys: ${{ runner.os }}-build-lint-
|
|
|
|
- name: Cache Go Dependencies
|
|
uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3
|
|
with:
|
|
path: .work/pkg
|
|
key: ${{ runner.os }}-pkg-${{ hashFiles('**/go.sum') }}
|
|
restore-keys: ${{ runner.os }}-pkg-
|
|
|
|
- name: Vendor Dependencies
|
|
run: make vendor vendor.check
|
|
|
|
# We could run 'make lint' to ensure our desired Go version, but we prefer
|
|
# this action because it leaves 'annotations' (i.e. it comments on PRs to
|
|
# point out linter violations).
|
|
- name: Lint
|
|
uses: golangci/golangci-lint-action@3a919529898de77ec3da873e3063ca4b10e7f5cc # v3
|
|
with:
|
|
version: ${{ env.GOLANGCI_VERSION }}
|
|
skip-cache: true # We do our own caching.
|
|
|
|
codeql:
|
|
runs-on: ubuntu-22.04
|
|
needs: detect-noop
|
|
if: needs.detect-noop.outputs.noop != 'true'
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
|
|
with:
|
|
submodules: true
|
|
|
|
- name: Setup Go
|
|
uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4
|
|
with:
|
|
go-version: ${{ env.GO_VERSION }}
|
|
|
|
- name: Find the Go Build Cache
|
|
id: go
|
|
run: echo "::set-output name=cache::$(make go.cachedir)"
|
|
|
|
- name: Cache the Go Build Cache
|
|
uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3
|
|
with:
|
|
path: ${{ steps.go.outputs.cache }}
|
|
key: ${{ runner.os }}-build-check-diff-${{ hashFiles('**/go.sum') }}
|
|
restore-keys: ${{ runner.os }}-build-check-diff-
|
|
|
|
- name: Cache Go Dependencies
|
|
uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3
|
|
with:
|
|
path: .work/pkg
|
|
key: ${{ runner.os }}-pkg-${{ hashFiles('**/go.sum') }}
|
|
restore-keys: ${{ runner.os }}-pkg-
|
|
|
|
- name: Vendor Dependencies
|
|
run: make vendor vendor.check
|
|
|
|
- name: Initialize CodeQL
|
|
uses: github/codeql-action/init@689fdc5193eeb735ecb2e52e819e3382876f93f4 # v2
|
|
with:
|
|
languages: go
|
|
|
|
- name: Perform CodeQL Analysis
|
|
uses: github/codeql-action/analyze@689fdc5193eeb735ecb2e52e819e3382876f93f4 # v2
|
|
|
|
trivy-scan-fs:
|
|
runs-on: ubuntu-22.04
|
|
needs: detect-noop
|
|
if: needs.detect-noop.outputs.noop != 'true'
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
|
|
with:
|
|
submodules: true
|
|
|
|
- name: Run Trivy vulnerability scanner in fs mode
|
|
uses: aquasecurity/trivy-action@2b6a709cf9c4025c5438138008beaddbb02086f0 # 0.14.0
|
|
with:
|
|
scan-type: 'fs'
|
|
ignore-unfixed: true
|
|
skip-dirs: design
|
|
scan-ref: '.'
|
|
exit-code: '1'
|
|
severity: 'CRITICAL,HIGH'
|
|
|
|
unit-tests:
|
|
runs-on: ubuntu-22.04
|
|
needs: detect-noop
|
|
if: needs.detect-noop.outputs.noop != 'true'
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
|
|
with:
|
|
submodules: true
|
|
|
|
- name: Fetch History
|
|
run: git fetch --prune --unshallow
|
|
|
|
- name: Setup Go
|
|
uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4
|
|
with:
|
|
go-version: ${{ env.GO_VERSION }}
|
|
|
|
- name: Find the Go Build Cache
|
|
id: go
|
|
run: echo "::set-output name=cache::$(make go.cachedir)"
|
|
|
|
- name: Cache the Go Build Cache
|
|
uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3
|
|
with:
|
|
path: ${{ steps.go.outputs.cache }}
|
|
key: ${{ runner.os }}-build-unit-tests-${{ hashFiles('**/go.sum') }}
|
|
restore-keys: ${{ runner.os }}-build-unit-tests-
|
|
|
|
- name: Cache Go Dependencies
|
|
uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3
|
|
with:
|
|
path: .work/pkg
|
|
key: ${{ runner.os }}-pkg-${{ hashFiles('**/go.sum') }}
|
|
restore-keys: ${{ runner.os }}-pkg-
|
|
|
|
- name: Vendor Dependencies
|
|
run: make vendor vendor.check
|
|
|
|
- name: Run Unit Tests
|
|
run: make -j2 test
|
|
|
|
- name: Publish Unit Test Coverage
|
|
uses: codecov/codecov-action@c4cf8a4f03f0ac8585acb7c1b7ce3460ec15782f # v4
|
|
with:
|
|
flags: unittests
|
|
file: _output/tests/linux_amd64/coverage.txt
|