Add Codecov to GitHub actions

This commit is contained in:
Sebastian Serth
2023-03-31 16:54:41 +02:00
committed by Sebastian Serth
parent a720553dd1
commit 5c2b53f4bc
4 changed files with 57 additions and 7 deletions

6
.github/codecov.yml vendored Normal file
View File

@ -0,0 +1,6 @@
codecov:
notify:
after_n_builds: 2
ignore:
- "**/*_mock.go"

View File

@ -37,7 +37,7 @@ jobs:
run: date +%s > ~/.cache/go-build/trim.txt run: date +%s > ~/.cache/go-build/trim.txt
continue-on-error: true continue-on-error: true
- name: Build - name: Build
run: make build run: make build-cover
- name: Upload Poseidon binary - name: Upload Poseidon binary
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v3
with: with:
@ -84,19 +84,26 @@ jobs:
continue-on-error: true continue-on-error: true
- name: Run tests - name: Run tests
run: make coverhtml run: make coverhtml
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v3
if: ${{ success() || failure() }}
with:
token: ${{ secrets.CODECOV_TOKEN }}
- name: Publish code coverage - name: Publish code coverage
uses: paambaati/codeclimate-action@v3.2.0 uses: paambaati/codeclimate-action@v3.2.0
if: ${{ success() || failure() }}
env: env:
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }} CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
with: with:
prefix: github.com/openHPI/poseidon/ prefix: github.com/openHPI/poseidon/
coverageLocations: | coverageLocations: |
${{github.workspace}}/coverage_cleaned.cov:gocov ${{github.workspace}}/coverage/coverage.cov:gocov
- name: Upload coverage report - name: Upload coverage report
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v3
if: ${{ success() || failure() }}
with: with:
name: coverage name: coverage
path: coverage_unit.html path: coverage/coverage_unit.html
dep-scan: dep-scan:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@ -130,6 +137,7 @@ jobs:
POSEIDON_AWS_ENDPOINT: ${{ secrets.POSEIDON_AWS_ENDPOINT }} POSEIDON_AWS_ENDPOINT: ${{ secrets.POSEIDON_AWS_ENDPOINT }}
POSEIDON_AWS_FUNCTIONS: "" POSEIDON_AWS_FUNCTIONS: ""
POSEIDON_NOMAD_DISABLEFORCEPULL: true POSEIDON_NOMAD_DISABLEFORCEPULL: true
GOCOVERDIR: coverage
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v3 uses: actions/checkout@v3
@ -204,6 +212,7 @@ jobs:
sudo ./nomad agent -dev -log-level=WARN -config e2e-config.hcl & sudo ./nomad agent -dev -log-level=WARN -config e2e-config.hcl &
until curl -s --fail http://localhost:4646/v1/agent/health ; do sleep 1; done until curl -s --fail http://localhost:4646/v1/agent/health ; do sleep 1; done
chmod +x ./poseidon chmod +x ./poseidon
mkdir -p ${GOCOVERDIR}
./poseidon & ./poseidon &
until curl -s --fail http://localhost:7200/api/v1/health ; do sleep 1; done until curl -s --fail http://localhost:7200/api/v1/health ; do sleep 1; done
make e2e-test make e2e-test
@ -211,3 +220,18 @@ jobs:
run: | run: |
killall poseidon killall poseidon
make e2e-test-recovery make e2e-test-recovery
if: ${{ success() || failure() }}
- name: Convert coverage reports
run: make convert-run-coverage
if: ${{ success() || failure() }}
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v3
if: ${{ success() || failure() }}
with:
token: ${{ secrets.CODECOV_TOKEN }}
- name: Upload coverage report
uses: actions/upload-artifact@v3
if: ${{ success() || failure() }}
with:
name: coverage
path: coverage/coverage_run.html

3
.gitignore vendored
View File

@ -16,6 +16,9 @@ tests/e2e/configuration.yaml
# trivy artifacts # trivy artifacts
.trivy .trivy
# coverage reports
/coverage
# IDE files # IDE files
/.idea /.idea
*.iml *.iml

View File

@ -2,6 +2,7 @@ PROJECT_NAME = poseidon
REPOSITORY_OWNER = openHPI REPOSITORY_OWNER = openHPI
PKG = github.com/$(REPOSITORY_OWNER)/$(PROJECT_NAME)/cmd/$(PROJECT_NAME) PKG = github.com/$(REPOSITORY_OWNER)/$(PROJECT_NAME)/cmd/$(PROJECT_NAME)
UNIT_TESTS = $(shell go list ./... | grep -v /e2e | grep -v /recovery) UNIT_TESTS = $(shell go list ./... | grep -v /e2e | grep -v /recovery)
GOCOVERDIR=coverage
# Define the PGO file to be used for the build # Define the PGO file to be used for the build
PGO_FILE = ./cmd/$(PROJECT_NAME)/default.pgo PGO_FILE = ./cmd/$(PROJECT_NAME)/default.pgo
@ -57,6 +58,10 @@ else
@go build -o $(PROJECT_NAME) -v $(PKG) @go build -o $(PROJECT_NAME) -v $(PKG)
endif endif
.PHONY: build-cover
build-cover: deps ## Build the binary and with coverage support for e2e-tests
@go build -cover -o $(PROJECT_NAME) -v $(PKG)
.PHONY: clean .PHONY: clean
clean: ## Remove previous build clean: ## Remove previous build
@rm -f poseidon @rm -f poseidon
@ -97,18 +102,30 @@ race: deps ## Run data race detector
.PHONY: coverage .PHONY: coverage
coverage: deps ## Generate code coverage report coverage: deps ## Generate code coverage report
@go test $(UNIT_TESTS) -v -coverprofile coverage.cov @mkdir -p $(GOCOVERDIR)
@go test $(UNIT_TESTS) -v -coverprofile $(GOCOVERDIR)/coverage_output.cov -covermode atomic
# exclude mock files from coverage # exclude mock files from coverage
@cat coverage.cov | grep -v _mock.go > coverage_cleaned.cov || true @cat $(GOCOVERDIR)/coverage_output.cov | grep -v _mock.go > $(GOCOVERDIR)/coverage.cov || true
@go tool cover -func=coverage_cleaned.cov @rm $(GOCOVERDIR)/coverage_output.cov
@go tool cover -func=$(GOCOVERDIR)/coverage.cov
.PHONY: coverhtml .PHONY: coverhtml
coverhtml: coverage ## Generate HTML coverage report coverhtml: coverage ## Generate HTML coverage report
@go tool cover -html=coverage_cleaned.cov -o coverage_unit.html @go tool cover -html=$(GOCOVERDIR)/coverage.cov -o $(GOCOVERDIR)/coverage_unit.html
deploy/dockerfiles: ## Clone Dockerfiles repository deploy/dockerfiles: ## Clone Dockerfiles repository
@git clone git@github.com:$(REPOSITORY_OWNER)/dockerfiles.git deploy/dockerfiles @git clone git@github.com:$(REPOSITORY_OWNER)/dockerfiles.git deploy/dockerfiles
.PHONY: run-with-coverage
run-with-coverage: build-cover ## Run binary and capture code coverage (during e2e tests)
@mkdir -p $(GOCOVERDIR)
@GOCOVERDIR=$(GOCOVERDIR) ./$(PROJECT_NAME)
.PHONY: convert-run-coverage
convert-run-coverage: ## Convert coverage data (created by `run-with-coverage`) to legacy text format
@go tool covdata textfmt -i $(GOCOVERDIR) -o $(GOCOVERDIR)/coverage_run.cov
@go tool cover -html=$(GOCOVERDIR)/coverage_run.cov -o $(GOCOVERDIR)/coverage_run.html
.PHONY: e2e-test-docker-image .PHONY: e2e-test-docker-image
e2e-test-docker-image: deploy/dockerfiles ## Build Docker image that is used in e2e tests e2e-test-docker-image: deploy/dockerfiles ## Build Docker image that is used in e2e tests
@docker build -t $(E2E_TEST_BASE_IMAGE) deploy/dockerfiles/$(E2E_TEST_BASE_CONTAINER) @docker build -t $(E2E_TEST_BASE_IMAGE) deploy/dockerfiles/$(E2E_TEST_BASE_CONTAINER)