Fix README intro #3896
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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: | | |
SMQ_MESSAGE_BROKER_TYPE=rabbitmq make mqtt | |
- name: Compile check for redis | |
run: | | |
SMQ_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/**" | |
channels: | |
- "channels/**" | |
- "cmd/channels/**" | |
- "auth.pb.go" | |
- "auth_grpc.pb.go" | |
- "auth/**" | |
- "pkg/sdk/**" | |
- "clients/api/grpc/**" | |
- "groups/api/grpc/**" | |
- "domains/api/grpc/**" | |
- "internal/grpc/**" | |
cli: | |
- "cli/**" | |
- "cmd/cli/**" | |
- "pkg/sdk/**" | |
clients: | |
- "clients/**" | |
- "cmd/clients/**" | |
- "auth.pb.go" | |
- "auth_grpc.pb.go" | |
- "auth/**" | |
- "pkg/ulid/**" | |
- "pkg/uuid/**" | |
- "pkg/events/**" | |
- "groups/api/grpc/**" | |
- "channels/api/grpc/**" | |
- "domains/api/grpc/**" | |
- internal/grpc/**" | |
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/**" | |
domains: | |
- "domain/**" | |
- "cmd/domain/**" | |
- "auth.pb.go" | |
- "auth_grpc.pb.go" | |
- "auth/**" | |
- "internal/grpc/**" | |
groups: | |
- "groups/**" | |
- "cmd/groups/**" | |
- "auth.pb.go" | |
- "auth_grpc.pb.go" | |
- "auth/**" | |
- "pkg/ulid/**" | |
- "pkg/uuid/**" | |
- "clients/api/grpc/**" | |
- "channels/api/grpc/**" | |
- "domains/api/grpc/**" | |
- "internal/grpc/**" | |
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/**" | |
journal: | |
- "journal/**" | |
- "cmd/journal/**" | |
- "auth.pb.go" | |
- "auth_grpc.pb.go" | |
- "auth/**" | |
- "pkg/events/**" | |
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/**" | |
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 domains tests | |
if: steps.changes.outputs.domains == 'true' || steps.changes.outputs.workflow == 'true' | |
run: | | |
go test --race -v -count=1 -coverprofile=coverage/domains.out ./domains/... | |
- 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 channels tests | |
if: steps.changes.outputs.channels == 'true' || steps.changes.outputs.workflow == 'true' | |
run: | | |
go test --race -v -count=1 -coverprofile=coverage/channels.out ./channels/... | |
- 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 groups tests | |
if: steps.changes.outputs.groups == 'true' || steps.changes.outputs.workflow == 'true' | |
run: | | |
go test --race -v -count=1 -coverprofile=coverage/groups.out ./groups/... | |
- 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/config/codecov.yml | |
verbose: true |