Releases: apple/swift-distributed-tracing
1.1.2
What's Changed
Updates in Swift 6 compatibility
- Fix use of Swift 6 language mode by @orobio #150
- Adopt Swift 6.0 #isolation; Resolves async closure behavior in withSpan by @ktoso #148
- Explicitly declare the ServiceContext dependency by @sidepelican #147
Other Changes
- Add release.yml by @FranzBusch in #151
New Contributors
- @sidepelican made their first contribution in #147
- @FranzBusch made their first contribution in #151
- @orobio made their first contribution in #150
Full Changelog: 1.1.1...1.1.2
1.1.1
What's Changed
- update documentation references to fix broken reference links on SwiftPackageIndex hosted documentation for main by @heckj in #143
- update the otel-config to match latest otel image by @heckj in #144
- Support compiling against Musl by @simonjbeaumont in #145
New Contributors
- @heckj made their first contribution in #143
- @simonjbeaumont made their first contribution in #145
Full Changelog: 1.1.0...1.1.1
1.1.0
Supported Swift versions
-
This release drops the support for Swift 5.6, and keeps support for 5.7, 5.8, 5.9, 5.10.
-
The legacy type
LegacyTracer
remains available however is now deprecated. -
Please avoid using the deprecated "AnySpan" based APIs.
This release also cleans up some Sendability warnings in preparation for "complete concurrency checking" that will arrive in Swift 6.
What's Changed
- Update the adoption tables by @ktoso in #131
- Enable strict concurrency checking in CI by @czechboy0 in #132
- Add Span.updateAttributes by @adam-fowler in #133
- Update README with the status of Swift-OTel by @Joannis in #135
- Remove old benchmark infra and replace with package-benchmark by @ktoso in #140
- [PATCH] [bug] Fix ignored
at
argument in two instances of withSpan by @ktoso in #139 - Add CI for Swift 5.10 by @yim-lee in #138
- Bump minimum Swift version to 5.7 by @rnro in #134
- Sendable Instrument Carriers by @slashmo in #136
New Contributors
- @czechboy0 made their first contribution in #132
- @Joannis made their first contribution in #135
- @rnro made their first contribution in #134
Full Changelog: 1.0.1...1.1.0
1.0.1
1.0.1
Patch release adjusting how we deal with availability annotations.
Marking availability on specific types and not on package level makes it possible to adopt entirely optionally in packages which otherwise do not require the most recent (5.6+) Swift versions.
Thank you to @adam-fowler for the patch and upcoming adoption in Hummingbird.
What's Changed
- Remove platform requirement from Package.swift by @adam-fowler in #130
New Contributors
- @adam-fowler made their first contribution in #130
Full Changelog: 1.0.0...1.0.1
1.0.0
Initial 1.0 release
After a very long period of incubation, including the development of language features (SE-0311: Task Locals) and multiple iterations on exact shapes of the API to ensure least possible impact on instrumented code when tracing is disabled, we are happy to announce the first source stable release of swift-distributed-tracing!
This package is an "API package", in the same way swift-log and swift-metrics are. This means that this package does not offer a Tracer implementation, but allows libraries to use this abstract API to instrument their code (e.g. http clients, distributed actors, gRPC or other) using tracing and once a tracer is bootstrapped by an end user, spans from given library are included in the distributed trace.
Special thanks
It should be noted that this project initially kicked off thanks to Swift participating in Google Summer of Code in 2020 (initial repository announcement), and would not have been possible without the relentless efforts of @slashmo sticking to the work and project even 3 years after GSoC concluded.
Maturing such crucial "core" libraries for the server ecosystem takes time, and we've since gained multiple Swift language features which made this library possible, and we'd like to extend our thanks to everyone involved along the way. Thanks!
Reference Documentation
Getting started with distributed tracing can be somewhat daunting, so in order to explain how to adopt and what "kind of adopter" and aspect of APIs you should be looking at, the initial release features comprehensive reference documentation in the form of docc documentation hosted on swiftpackageindex.com (or generated from the 1.0 sources).
Notable changes since beta releases
When upgrading from beta releases you might need to take care of the following changes:
- The
Baggage
type, previously vended by the swift-distributed-tracing-baggage package is now known asServiceContext
and has also announced its 1.0 release.- Please refer to its release notes for further rationale on the rename: https://github.com/apple/swift-service-context/releases/tag/1.0.0
- It is possible to mock time using the tracing instant types
- The library now splits its API between
LegacyTracer
which is Swift 5.6 compatible, andTracer
which requires Swift 5.7+- The reason for this is that the APIs now return a concrete
Span
type fromstartSpan
which allows avoiding existential boxing if using tracers explicitly. And such return type is only supported since Swift 5.7 because theSpan
protocol is a "protocol with associated types"
- The reason for this is that the APIs now return a concrete
Further, several small improvements have been made since the betas, but nothing has fundamentally changed in the APIs.
Adoption plans
We anticipate a few tracing implementations (most notably slashmo/swift-otel) to soon release 1.0 compatible versions of libraries.
We (as in the SSWG workgroup) will also collaborate with various client (e.g. http) and server projects to spread the adoption of this API in such way that enabling tracing should give a great ecosystem wide user experience. This process will take time, and we would love to see the community help with this process!
If you have any questions about implementing tracers, or adopting them in your libraries or projects please don't hesitate to reach out on the forums: https://forums.swift.org/c/server/43 or in this repository's issues.
What's Changed
- startSpan should take tracepoint location by @ktoso in #68
- Add .spi.yml for Swift Package Index DocC support by @yim-lee in #72
- Change 'landing' target to Tracing by @yim-lee in #74
- notes about LoggingContext by @ktoso in #75
- Add CI for Swift 5.8 and update nightly to Ubuntu 22.04 by @yim-lee in #76
- Mark types Sendable by @ktoso in #83
- Update CoC and add CONTRIBUTING file by @ktoso in #87
- Allow for reading and mutating a span name by @ktoso in #88
- Recording an error may carry attributes by @ktoso in #90
- associated type Span, Tracer as short-hand, and *Protocol types by @ktoso in #93
- Enable struct Spans with reference semantics; optimal NoopSpan by @ktoso in #94
- remove not used docker configurations by @ktoso in #96
- remove linux test shims by @ktoso in #97
- Provide explicit set/get to avoid SpanAttributeConvertible wrapping by @ktoso in #95
- Implement TracerClock and abstract away "now" by @ktoso in #98
- Remove some unused/untested dead code by @fabianfett in #100
- Correct the default impl for startAnySpan for 5.7 by @ktoso in #112
- Introduce top level withSpan; reclaim Tracer and Instrument for protocols by @ktoso in #113
- Add nanoseconds to instant protocol by @ktoso in #114
- Update CI by @yim-lee in #116
- Add nanoseconds to SpanEvent by @slashmo in #118
- remove clock protocol, use autoclosure "now" instant by @ktoso in #120
- end() should take an autoclosure instant, not direct instant by @ktoso in #122
- consider TracerSpan assoc type -> Span by @ktoso in #111
- [Docs] Combined initial documentation work by @ktoso in #121
- Adopt ServiceContext 1.0 by @ktoso in #127
- Use 1.0.0 service-context by @ktoso in #128
- Rename do not switch case by @fabianfett in #129
New Contributors
- @fabianfett made their first contribution in #100
Full Changelog: 0.3.1...1.0.0
1.0.0-beta.2
Important notes
Please note that during the beta convergence period slight API changes are still happening.
Please have a look at some of the type renames and move away from Clock types towards a TracerInstant
and adjust tracer implementations accordingly.
Important PRs changing APIs are:
- Introduce top level withSpan; reclaim Tracer and Instrument for protocols by @ktoso in #113
- remove clock protocol, use autoclosure "now" instant by @ktoso in #120
- end() should take an autoclosure instant, not direct instant by @ktoso in #122
- consider TracerSpan assoc type -> Span by @ktoso in #111
In addition to that you can view the 13 closed issues on the associated milestone.
Other changes
- Remove some unused/untested dead code by @fabianfett in #100
- Correct the default impl for startAnySpan for 5.7 by @ktoso in #112
- Add nanoseconds to instant protocol by @ktoso in #114
- Update CI by @yim-lee in #116
- Add nanoseconds to SpanEvent by @slashmo in #118
New Contributors
- @fabianfett made their first contribution in #100
Full Changelog: 1.0.0-beta.1...1.0.0-beta.2
1.0.0-beta.1
First Beta release
Hi everyone, this is the first beta release of the tracing API.
We changed many things but believe we have arrived at the final API shapes of the library.
Most notably, it is possible to stick to concrete types if necessary, abstract away the notion of time, as well as mutate span names in-flight before they are ended.
No-op tracing also gained significant performance improvements, with NoopSpan
becoming a struct and therefore not incurring reference counting traffic. And time is not going to be read unless the tracer decides to do so (allowing for no-op and inactive spans to avoid reading the system clock).
Call to action: please try out the APIs in your tracers or adoption
Please try out the APIs before we freeze them in a 1.0 release in the coming weeks.
During the beta period, we are still able to perform any breaking or important changes before this API will become frozen for the foreseeable future. Please raise your issues on the github issue tracker.
Updating from 0.3.x
There have been a number of source breaking changes in order to achieve the ideal 1.0 shape of APIs since the 0.3.x series of this library.
protocol Tracer
becameprotocol TracerProtocol
- this was in order to introduce the
Tracer
namespace so that we can offerTracer.withSpan(...) { ... }
rather than the too longInstrumentationSystem.tracer.withSpan(...) {
- this was in order to introduce the
- the
startSpan
protocol requirement now accepts afunction
andclock
parameters- please use the clock to obtain the timestamp of the events emitted by the tracer, rather than other time sources
- by default the
DefaultTracerClock
will be used
- a new
LegacyTracerProtocol
is introduced which is designed specifically to support Swift 5.6 clients- this protocol cannot make use of returning generic
Span
types, and has to erase them toany Span
, which is why all APIs are phrased asstartAnySpan
- this protocol will be deprecated as soon as the library is able to require Swift 5.7, however it will not be removed in order to retain source compatibility with adopters who may have been using this API for a migration period.
- if your library adopting (or implementing) distributed tracing CAN use Swift 5.7+, please implement the
TracerProtocol
directly; Implementations for theAny
versions of APIs will be provided for you automatically, delegating to yourstartSpan
implementation, so you do not need to implement any of the Legacy APIs.
- this protocol cannot make use of returning generic
- documentation updates are incoming, including full guides for implementing and using tracers here: #69
Swift versions
We are going to stick to the AsyncHTTP, gRPC and other core server library's Swift support strategy.
This means that this package currently will support Swift: 5.6, 5.7, 5.8, and when 5.9 is released, we will drop support for 5.6.
Supporting Swift 5.6 comes with a significant burden for this project, and we want to drop it as soon as our adopters allow us to (i.e. AsyncHTTPClient and friends).
We envision this library to be depended on by these projects and therefore must adhere to their minimum supported Swift policies.
What's Changed
- startSpan should take tracepoint location by @ktoso in #68
- Add .spi.yml for Swift Package Index DocC support by @yim-lee in #72
- Change 'landing' target to Tracing by @yim-lee in #74
- notes about LoggingContext by @ktoso in #75
- Add CI for Swift 5.8 and update nightly to Ubuntu 22.04 by @yim-lee in #76
- Mark types Sendable by @ktoso in #83
- Update CoC and add CONTRIBUTING file by @ktoso in #87
- Allow for reading and mutating a span name by @ktoso in #88
- Recording an error may carry attributes by @ktoso in #90
- associated type Span, Tracer as short-hand, and *Protocol types by @ktoso in #93
- Enable struct Spans with reference semantics; optimal NoopSpan by @ktoso in #94
- remove not used docker configurations by @ktoso in #96
- remove linux test shims by @ktoso in #97
- Provide explicit set/get to avoid SpanAttributeConvertible wrapping by @ktoso in #95
- Implement TracerClock and abstract away "now" by @ktoso in #98
Full Changelog: 0.3.1...1.0.0-beta.1
0.3.1
Changes
- Added
withSpan
overload to accept a baggage from non-async code, but have theoperation
closure beasync
- Prepared docc setup, though not publishing yet.
What's Changed
- CI update by @yim-lee in #62
- DocC Setup by @yim-lee in #63
- +span additional withSpan to ease entering async world from non-async world by @ktoso in #64
New Contributors
Full Changelog: 0.3.0...0.3.1
0.3.0
0.2.0
Updated:
LoggingContext
-based propagation was replaced with automatic context propagation via task-locals (#52)SpanStatus
now conforms toEquatable
(#46)OpenTelemetryTracingSupport
was removed (#53)
For details on the changes please refer to the 0.2.0 milestone