We welcome your contributions to this project!
Please read the OpenTelemetry Contributor Guide for general information on how to contribute including signing the Contributor License Agreement, the Code of Conduct, and Community Expectations.
As with other OpenTelemetry clients, opentelemetry-swift follows the opentelemetry-specification and the library guidelines.
OpenTelemetry is an evolving specification, one where the desires and use cases are clear, but the method to satisfy those uses cases are not.
As such, Contributions should provide functionality and behavior that conforms to the specification, but the interface and structure are flexible.
It is preferable to have contributions follow the idioms of the language rather than conform to specific API names or argument patterns in the spec.
For a deeper discussion, see: open-telemetry/opentelemetry-specification#165
Everyone is welcome to contribute code via GitHub Pull Requests (PRs).
Fork the project on GitHub by clicking the Fork
button at the top of the
repository and clone your fork locally:
git clone [email protected]:YOUR_GITHUB_NAME/opentelemetry-swift.git
or
git clone https://github.com/YOUR_GITHUB_NAME/opentelemetry-swift.git
It can be helpful to add the open-telemetry/opentelemetry-swift
repo as a
remote so you can track changes (we're adding as upstream
here):
git remote add upstream [email protected]:open-telemetry/opentelemetry-swift.git
or
git remote add upstream https://github.com/open-telemetry/opentelemetry-swift.git
For more detailed information on this workflow read the GitHub Workflow.
Open Package.swift
in Xcode and follow normal development process.
To build from the command line you need swift
version 5.0+
.
swift build
Open Package.swift
in Xcode and follow normal testing process.
To test from the command line you need swift
version 5.0+
.
swift test
Always work in a branch from your fork:
git checkout -b my-feature-branch
You'll need to create a Pull Request once you've finished your work. The Kubernetes GitHub Workflow document has a significant section on PRs.
Open the PR against the `open-telemetry/opentelemetry-swift repository.
Please put [WIP]
in the title, or create it as a Draft
PR
if the PR is not ready for review.
All PRs are automatically checked for a signed CLA. Your first PR fails this check if you haven't signed the CNCF CLA.
The failed check displays a link to details
which walks you through the
process. Don't worry it's painless!
PRs require a review from one or more of the code owners before merge. You'll probably get some feedback from these fine folks which helps to make the project that much better. Respond to the feedback and work with your reviewer(s) to resolve any issues.
Occasionally, the opentelemetry protocol's protobuf definitions are updated and need to be regenerated for the OTLP exporters. This is documentation on how to accomplish that for this project. Other projects can regenerate their otlp protobuf files using the Open Telemetry build tools.
$ brew install protobuf
$ protoc --version # Ensure compiler version is 3+
brew install swift-protobuf grpc-swift
Clone opentelemetry-proto
From within opentelemetry-proto:
# collect the proto definitions:
PROTO_FILES=($(ls opentelemetry/proto/*/*/*/*.proto opentelemetry/proto/*/*/*.proto))
# generate swift proto files
for file in "${PROTO_FILES[@]}"
do
protoc --swift_opt=Visibility=Public --swift_out=./out ${file}
done
# genearate GRPC swift proto files
protoc --swift_opt=Visibility=Public --grpc-swift_opt=Visibility=Public --swift_out=./out --grpc-swift_out=./out opentelemetry/proto/collector/trace/v1/trace_service.proto
protoc --swift_opt=Visibility=Public --grpc-swift_opt=Visibility=Public --swift_out=./out --grpc-swift_out=./out opentelemetry/proto/collector/metrics/v1/metrics_service.proto
protoc --swift_opt=Visibility=Public --grpc-swift_opt=Visibility=Public --swift_out=./out --grpc-swift_out=./out opentelemetry/proto/collector/logs/v1/logs_service.proto
Replace the generated files in Sources/Exporters/OpenTelemetryProtocolCommon/proto
& Sources/Exporters/OpenTelemetryGrpc/proto
:
logs_service.grpc.swift
metrics_serivce.grpc.swift
trace_service.grpc.swift
common.pb.swift
logs.pb.swift
logs_service.pb.swift
metrics.pb.swift
metrics_services.pb.swift
resource.pb.swift
trace.pb.swift
trace_service.pb.swift