mirror of
https://github.com/absmach/magistrala.git
synced 2026-06-23 04:10:28 +00:00
243ccade0b
Signed-off-by: Felix Gateru <felix.gateru@gmail.com> Signed-off-by: Arvindh <arvindh91@gmail.com> Signed-off-by: Dusan Borovcanin <borovcanindusan1@gmail.com> Co-authored-by: Arvindh <30824765+arvindh123@users.noreply.github.com> Co-authored-by: Felix Gateru <felix.gateru@gmail.com>
391 lines
12 KiB
YAML
391 lines
12 KiB
YAML
# Copyright (c) Abstract Machines
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
name: CI Pipeline
|
|
|
|
on:
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
|
|
jobs:
|
|
lint-and-build: # Linting and building are combined to save time for setting up Go
|
|
name: Lint and Build
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Go
|
|
uses: actions/setup-go@v5
|
|
with:
|
|
go-version: 1.22.x
|
|
cache-dependency-path: "go.sum"
|
|
|
|
- name: Install protolint
|
|
run: |
|
|
go install github.com/yoheimuta/protolint/cmd/protolint@latest
|
|
|
|
- name: Lint Protobuf Files
|
|
run: |
|
|
protolint .
|
|
|
|
- name: golangci-lint
|
|
uses: golangci/golangci-lint-action@v6
|
|
with:
|
|
version: v1.60.3
|
|
args: --config ./tools/config/golangci.yml
|
|
|
|
- name: Build all Binaries
|
|
run: |
|
|
make all -j $(nproc)
|
|
|
|
- name: Compile check for rabbitmq
|
|
run: |
|
|
MG_MESSAGE_BROKER_TYPE=rabbitmq make mqtt
|
|
|
|
- name: Compile check for redis
|
|
run: |
|
|
MG_ES_TYPE=redis make mqtt
|
|
|
|
run-tests:
|
|
name: Run tests
|
|
runs-on: ubuntu-latest
|
|
needs: lint-and-build
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Setup Go
|
|
uses: actions/setup-go@v5
|
|
with:
|
|
go-version: 1.22.x
|
|
cache-dependency-path: "go.sum"
|
|
|
|
- name: Check for changes in specific paths
|
|
uses: dorny/paths-filter@v3
|
|
id: changes
|
|
with:
|
|
base: main
|
|
filters: |
|
|
workflow:
|
|
- ".github/workflows/tests.yml"
|
|
|
|
auth:
|
|
- "auth/**"
|
|
- "cmd/auth/**"
|
|
- "auth.proto"
|
|
- "auth.pb.go"
|
|
- "auth_grpc.pb.go"
|
|
- "pkg/ulid/**"
|
|
- "pkg/uuid/**"
|
|
|
|
bootstrap:
|
|
- "bootstrap/**"
|
|
- "cmd/bootstrap/**"
|
|
- "auth.pb.go"
|
|
- "auth_grpc.pb.go"
|
|
- "auth/**"
|
|
- "pkg/sdk/**"
|
|
- "pkg/events/**"
|
|
|
|
certs:
|
|
- "certs/**"
|
|
- "cmd/certs/**"
|
|
- "auth.pb.go"
|
|
- "auth_grpc.pb.go"
|
|
- "auth/**"
|
|
- "pkg/sdk/**"
|
|
|
|
cli:
|
|
- "cli/**"
|
|
- "cmd/cli/**"
|
|
- "pkg/sdk/**"
|
|
|
|
coap:
|
|
- "coap/**"
|
|
- "cmd/coap/**"
|
|
- "auth.pb.go"
|
|
- "auth_grpc.pb.go"
|
|
- "clients/**"
|
|
- "pkg/messaging/**"
|
|
|
|
consumers:
|
|
- "consumers/**"
|
|
- "cmd/postgres-writer/**"
|
|
- "cmd/timescale-writer/**"
|
|
- "cmd/smpp-notifier/**"
|
|
- "cmd/smtp-notifier/**"
|
|
- "auth.pb.go"
|
|
- "auth_grpc.pb.go"
|
|
- "auth/**"
|
|
- "pkg/ulid/**"
|
|
- "pkg/uuid/**"
|
|
- "pkg/messaging/**"
|
|
|
|
journal:
|
|
- "journal/**"
|
|
- "cmd/journal/**"
|
|
- "auth.pb.go"
|
|
- "auth_grpc.pb.go"
|
|
- "auth/**"
|
|
- "pkg/events/**"
|
|
|
|
http:
|
|
- "http/**"
|
|
- "cmd/http/**"
|
|
- "auth.pb.go"
|
|
- "auth_grpc.pb.go"
|
|
- "clients/**"
|
|
- "pkg/messaging/**"
|
|
- "logger/**"
|
|
|
|
internal:
|
|
- "internal/**"
|
|
|
|
invitations:
|
|
- "invitations/**"
|
|
- "cmd/invitations/**"
|
|
- "auth.pb.go"
|
|
- "auth_grpc.pb.go"
|
|
- "auth/**"
|
|
- "pkg/sdk/**"
|
|
|
|
logger:
|
|
- "logger/**"
|
|
|
|
mqtt:
|
|
- "mqtt/**"
|
|
- "cmd/mqtt/**"
|
|
- "auth.pb.go"
|
|
- "auth_grpc.pb.go"
|
|
- "clients/**"
|
|
- "pkg/messaging/**"
|
|
- "logger/**"
|
|
- "pkg/events/**"
|
|
|
|
pkg-errors:
|
|
- "pkg/errors/**"
|
|
|
|
pkg-events:
|
|
- "pkg/events/**"
|
|
- "pkg/messaging/**"
|
|
|
|
pkg-grpcclient:
|
|
- "pkg/grpcclient/**"
|
|
|
|
pkg-messaging:
|
|
- "pkg/messaging/**"
|
|
|
|
pkg-sdk:
|
|
- "pkg/sdk/**"
|
|
- "pkg/errors/**"
|
|
- "pkg/groups/**"
|
|
- "auth/**"
|
|
- "bootstrap/**"
|
|
- "certs/**"
|
|
- "consumers/**"
|
|
- "http/**"
|
|
- "internal/*"
|
|
- "internal/api/**"
|
|
- "internal/apiutil/**"
|
|
- "internal/groups/**"
|
|
- "invitations/**"
|
|
- "provision/**"
|
|
- "readers/**"
|
|
- "clients/**"
|
|
- "users/**"
|
|
|
|
pkg-transformers:
|
|
- "pkg/transformers/**"
|
|
|
|
pkg-ulid:
|
|
- "pkg/ulid/**"
|
|
|
|
pkg-uuid:
|
|
- "pkg/uuid/**"
|
|
|
|
provision:
|
|
- "provision/**"
|
|
- "cmd/provision/**"
|
|
- "logger/**"
|
|
- "pkg/sdk/**"
|
|
|
|
readers:
|
|
- "readers/**"
|
|
- "cmd/postgres-reader/**"
|
|
- "cmd/timescale-reader/**"
|
|
- "auth.pb.go"
|
|
- "auth_grpc.pb.go"
|
|
- "clients/**"
|
|
- "auth/**"
|
|
|
|
clients:
|
|
- "clients/**"
|
|
- "cmd/clients/**"
|
|
- "auth.pb.go"
|
|
- "auth_grpc.pb.go"
|
|
- "auth/**"
|
|
- "pkg/ulid/**"
|
|
- "pkg/uuid/**"
|
|
- "pkg/events/**"
|
|
|
|
users:
|
|
- "users/**"
|
|
- "cmd/users/**"
|
|
- "auth.pb.go"
|
|
- "auth_grpc.pb.go"
|
|
- "auth/**"
|
|
- "pkg/ulid/**"
|
|
- "pkg/uuid/**"
|
|
- "pkg/events/**"
|
|
|
|
ws:
|
|
- "ws/**"
|
|
- "cmd/ws/**"
|
|
- "auth.pb.go"
|
|
- "auth_grpc.pb.go"
|
|
- "clients/**"
|
|
- "pkg/messaging/**"
|
|
|
|
- name: Create coverage directory
|
|
run: |
|
|
mkdir coverage
|
|
|
|
- name: Run Journal tests
|
|
if: steps.changes.outputs.journal == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/journal.out ./journal/...
|
|
|
|
- name: Run auth tests
|
|
if: steps.changes.outputs.auth == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/auth.out ./auth/...
|
|
|
|
- name: Run bootstrap tests
|
|
if: steps.changes.outputs.bootstrap == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/bootstrap.out ./bootstrap/...
|
|
|
|
- name: Run certs tests
|
|
if: steps.changes.outputs.certs == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/certs.out ./certs/...
|
|
|
|
- name: Run cli tests
|
|
if: steps.changes.outputs.cli == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/cli.out ./cli/...
|
|
|
|
- name: Run CoAP tests
|
|
if: steps.changes.outputs.coap == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/coap.out ./coap/...
|
|
|
|
- name: Run consumers tests
|
|
if: steps.changes.outputs.consumers == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/consumers.out ./consumers/...
|
|
|
|
- name: Run HTTP tests
|
|
if: steps.changes.outputs.http == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/http.out ./http/...
|
|
|
|
- name: Run internal tests
|
|
if: steps.changes.outputs.internal == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/internal.out ./internal/...
|
|
|
|
- name: Run invitations tests
|
|
if: steps.changes.outputs.invitations == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/invitations.out ./invitations/...
|
|
|
|
- name: Run logger tests
|
|
if: steps.changes.outputs.logger == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/logger.out ./logger/...
|
|
|
|
- name: Run MQTT tests
|
|
if: steps.changes.outputs.mqtt == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/mqtt.out ./mqtt/...
|
|
|
|
- name: Run pkg errors tests
|
|
if: steps.changes.outputs.pkg-errors == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/pkg-errors.out ./pkg/errors/...
|
|
|
|
- name: Run pkg events tests
|
|
if: steps.changes.outputs.pkg-events == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/pkg-events.out ./pkg/events/...
|
|
|
|
- name: Run pkg grpcclient tests
|
|
if: steps.changes.outputs.pkg-grpcclient == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/pkg-grpcclient.out ./pkg/grpcclient/...
|
|
|
|
- name: Run pkg messaging tests
|
|
if: steps.changes.outputs.pkg-messaging == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/pkg-messaging.out ./pkg/messaging/...
|
|
|
|
- name: Run pkg sdk tests
|
|
if: steps.changes.outputs.pkg-sdk == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/pkg-sdk.out ./pkg/sdk/...
|
|
|
|
- name: Run pkg transformers tests
|
|
if: steps.changes.outputs.pkg-transformers == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/pkg-transformers.out ./pkg/transformers/...
|
|
|
|
- name: Run pkg ulid tests
|
|
if: steps.changes.outputs.pkg-ulid == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/pkg-ulid.out ./pkg/ulid/...
|
|
|
|
- name: Run pkg uuid tests
|
|
if: steps.changes.outputs.pkg-uuid == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/pkg-uuid.out ./pkg/uuid/...
|
|
|
|
- name: Run provision tests
|
|
if: steps.changes.outputs.provision == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/provision.out ./provision/...
|
|
|
|
- name: Run readers tests
|
|
if: steps.changes.outputs.readers == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/readers.out ./readers/...
|
|
|
|
- name: Run clients tests
|
|
if: steps.changes.outputs.clients == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/clients.out ./clients/...
|
|
|
|
- name: Run users tests
|
|
if: steps.changes.outputs.users == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/users.out ./users/...
|
|
|
|
- name: Run WebSocket tests
|
|
if: steps.changes.outputs.ws == 'true' || steps.changes.outputs.workflow == 'true'
|
|
run: |
|
|
go test --race -v -count=1 -coverprofile=coverage/ws.out ./ws/...
|
|
|
|
- name: Upload coverage
|
|
uses: codecov/codecov-action@v5
|
|
with:
|
|
token: ${{ secrets.CODECOV }}
|
|
files: ./coverage/*.out
|
|
codecov_yml_path: tools/codecov.yml
|
|
verbose: true
|