diff --git a/.github/workflows/spellcheck.yml b/.github/workflows/spellcheck.yml
new file mode 100644
index 000000000..f762c2520
--- /dev/null
+++ b/.github/workflows/spellcheck.yml
@@ -0,0 +1,21 @@
+name: spellcheck
+
+on:
+ pull_request:
+ branches: [ master ]
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: check out code
+ uses: actions/checkout@v2
+
+ - name: install misspell
+ run: |
+ curl -L -o ./install-misspell.sh https://git.io/misspell
+ sh ./install-misspell.sh
+
+ - name: run misspell
+ run: ./bin/misspell -error .
diff --git a/samples/Exporters/Console/TestPrometheus.cs b/samples/Exporters/Console/TestPrometheus.cs
index b891618b3..0201af2f4 100644
--- a/samples/Exporters/Console/TestPrometheus.cs
+++ b/samples/Exporters/Console/TestPrometheus.cs
@@ -52,7 +52,7 @@ namespace Samples
var metricsHttpServer = new PrometheusExporterMetricsHttpServer(promExporter);
metricsHttpServer.Start();
- // Creater Processor (called Batcher in Metric spec, this is still not decided)
+ // Create Processor (called Batcher in Metric spec, this is still not decided)
var processor = new UngroupedBatcher();
// MeterFactory is from where one can obtain Meters.
diff --git a/src/OpenTelemetry.Api/Context/Propagation/ITextFormat.cs b/src/OpenTelemetry.Api/Context/Propagation/ITextFormat.cs
index d294c60c8..96b114015 100644
--- a/src/OpenTelemetry.Api/Context/Propagation/ITextFormat.cs
+++ b/src/OpenTelemetry.Api/Context/Propagation/ITextFormat.cs
@@ -21,7 +21,7 @@ namespace OpenTelemetry.Context.Propagation
{
///
/// Text format wire context propagator. Helps to extract and inject context from textual
- /// representation (typically http headers or metadata colleciton).
+ /// representation (typically http headers or metadata collection).
///
public interface ITextFormat
{
diff --git a/src/OpenTelemetry.Api/Context/Propagation/ITextFormatActivity.cs b/src/OpenTelemetry.Api/Context/Propagation/ITextFormatActivity.cs
index 5819f2fe9..d85529263 100644
--- a/src/OpenTelemetry.Api/Context/Propagation/ITextFormatActivity.cs
+++ b/src/OpenTelemetry.Api/Context/Propagation/ITextFormatActivity.cs
@@ -21,7 +21,7 @@ namespace OpenTelemetry.Context.Propagation
{
///
/// Text format wire context propagator. Helps to extract and inject context from textual
- /// representation (typically http headers or metadata colleciton).
+ /// representation (typically http headers or metadata collection).
///
public interface ITextFormatActivity
{
diff --git a/src/OpenTelemetry.Api/Trace/Status.cs b/src/OpenTelemetry.Api/Trace/Status.cs
index b84e4a1ff..f822bb367 100644
--- a/src/OpenTelemetry.Api/Trace/Status.cs
+++ b/src/OpenTelemetry.Api/Trace/Status.cs
@@ -166,7 +166,7 @@ namespace OpenTelemetry.Trace
public string Description { get; }
///
- /// Gets a value indicating whether span completed sucessfully.
+ /// Gets a value indicating whether span completed successfully.
///
public bool IsOk => this.CanonicalCode == StatusCanonicalCode.Ok;
diff --git a/src/OpenTelemetry/Internal/OpenTelemetrySdkEventSource.cs b/src/OpenTelemetry/Internal/OpenTelemetrySdkEventSource.cs
index ba7017707..6cc72ff05 100644
--- a/src/OpenTelemetry/Internal/OpenTelemetrySdkEventSource.cs
+++ b/src/OpenTelemetry/Internal/OpenTelemetrySdkEventSource.cs
@@ -183,7 +183,7 @@ namespace OpenTelemetry.Internal
this.WriteEvent(15, spanName);
}
- [Event(16, Message = "Exception occuring while invoking Metric Observer callback. '{0}' Exception: '{1}'", Level = EventLevel.Warning)]
+ [Event(16, Message = "Exception occurring while invoking Metric Observer callback. '{0}' Exception: '{1}'", Level = EventLevel.Warning)]
public void MetricObserverCallbackError(string metricName, string exception)
{
this.WriteEvent(16, metricName, exception);
diff --git a/src/OpenTelemetry/Metrics/CounterMetricSdkBase.cs b/src/OpenTelemetry/Metrics/CounterMetricSdkBase.cs
index bd85db38d..615fd16a3 100644
--- a/src/OpenTelemetry/Metrics/CounterMetricSdkBase.cs
+++ b/src/OpenTelemetry/Metrics/CounterMetricSdkBase.cs
@@ -85,7 +85,7 @@ namespace OpenTelemetry.Metrics
* Additional notes:
* This lock is never taken for bound instruments, and they offer the fastest performance.
* This lock is only taken for those labelsets which are marked CandidateForRemoval.
- * It means the the 1st time a labelset is re-encountered after two Collect() has occured,
+ * It means the the 1st time a labelset is re-encountered after two Collect() has occurred,
* this lock must be taken. Subsequent usage of this labelset before the next two Collect()
* will already have status promoted, and no lock is taken.
* In effect, the lock is only taken for those labelsets
@@ -121,7 +121,7 @@ namespace OpenTelemetry.Metrics
if (this.counterBoundInstruments.TryGetValue(labelSet, out var boundInstrument))
{
// Check status again, inside lock as an instrument update
- // might have occured which promoted this record.
+ // might have occurred which promoted this record.
if (boundInstrument.Status == RecordStatus.CandidateForRemoval)
{
this.counterBoundInstruments.Remove(labelSet);
diff --git a/src/OpenTelemetry/Metrics/MeterSdk.cs b/src/OpenTelemetry/Metrics/MeterSdk.cs
index f267c5771..4f21cf790 100644
--- a/src/OpenTelemetry/Metrics/MeterSdk.cs
+++ b/src/OpenTelemetry/Metrics/MeterSdk.cs
@@ -52,7 +52,7 @@ namespace OpenTelemetry.Metrics
OpenTelemetrySdkEventSource.Log.MeterCollectInvoked(this.meterName);
// collect all pending metric updates and send to batcher.
- // must sync to prevent multiple Collect occuring at same time.
+ // must sync to prevent multiple Collect occurring at same time.
var boundInstrumentsToRemove = new List();
foreach (var longCounter in this.longCounters)
{
diff --git a/test/OpenTelemetry.Exporter.Prometheus.Tests/PrometheusExporterTests.cs b/test/OpenTelemetry.Exporter.Prometheus.Tests/PrometheusExporterTests.cs
index 109a61368..36c27c35c 100644
--- a/test/OpenTelemetry.Exporter.Prometheus.Tests/PrometheusExporterTests.cs
+++ b/test/OpenTelemetry.Exporter.Prometheus.Tests/PrometheusExporterTests.cs
@@ -177,7 +177,7 @@ namespace OpenTelemetry.Exporter.Prometheus.Tests
// Though the above are Prometheus Server requirements, we haven't enforced it in code.
// This is because we have implemented Prometheus using a Push Controller, where
// we accumulate metrics from each Push into exporter, and is used to construct
- // out for /metrics call. Because of this, its possible that multiple Push has occured
+ // out for /metrics call. Because of this, its possible that multiple Push has occurred
// before Prometheus server makes /metrics call. (i.e Prometheus scrape interval is much more
// than Push interval scenario)
// Once a pull model is implemented, we'll not have this issue and we need to add tests
diff --git a/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpWebRequestActivitySourceTests.netfx.cs b/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpWebRequestActivitySourceTests.netfx.cs
index 55dfc7bf8..ac88435cb 100644
--- a/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpWebRequestActivitySourceTests.netfx.cs
+++ b/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpWebRequestActivitySourceTests.netfx.cs
@@ -792,7 +792,7 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests
// Examine the result. Make sure we got all successful requests.
// Just make sure some events are written, to confirm we successfully subscribed to it. We should have
- // exactly 1 Start event per request and exaclty 1 Stop event per response (if request succeeded)
+ // exactly 1 Start event per request and exactly 1 Stop event per response (if request succeeded)
var successfulTasks = tasks.Where(t => t.Value.Status == TaskStatus.RanToCompletion);
Assert.Equal(tasks.Count, eventRecords.Records.Count(rec => rec.Key == "Start"));
diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/SpanTest.cs b/test/OpenTelemetry.Tests/Implementation/Trace/SpanTest.cs
index fd719c3cc..c48af0da1 100644
--- a/test/OpenTelemetry.Tests/Implementation/Trace/SpanTest.cs
+++ b/test/OpenTelemetry.Tests/Implementation/Trace/SpanTest.cs
@@ -1114,7 +1114,7 @@ namespace OpenTelemetry.Trace.Test
}
[Fact]
- public void SetAttribute_Array_Sets_Empty_String_For_Emtpy_Array()
+ public void SetAttribute_Array_Sets_Empty_String_For_Empty_Array()
{
var tracer = this.tracerFactory.GetTracer(null);
var span = (SpanSdk)tracer.StartRootSpan(SpanName);