8 Commits

Author SHA1 Message Date
xuu
4181cd5fed chore: add grug-math 2024-01-15 11:27:32 -07:00
xuu
b1cc2af8d8 fix: shutdown on error
All checks were successful
Go Bump / bump (push) Successful in 35s
Go Test / build (push) Successful in 40s
2023-10-19 16:53:12 -06:00
7725019ed7 Merge pull request #1 from sour-is/dependabot/go_modules/golang.org/x/net-0.17.0
build(deps): bump golang.org/x/net from 0.12.0 to 0.17.0
2023-10-19 06:40:09 -06:00
fcae935511 Merge pull request #2 from sour-is/dependabot/go_modules/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp-0.44.0
build(deps): bump go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp from 0.42.0 to 0.44.0
2023-10-19 06:39:33 -06:00
dependabot[bot]
14eb48d336 build(deps): bump go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp
Bumps [go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp](https://github.com/open-telemetry/opentelemetry-go-contrib) from 0.42.0 to 0.44.0.
- [Release notes](https://github.com/open-telemetry/opentelemetry-go-contrib/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-go-contrib/blob/main/CHANGELOG.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-go-contrib/compare/zpages/v0.42.0...zpages/v0.44.0)

---
updated-dependencies:
- dependency-name: go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-16 14:16:40 +00:00
dependabot[bot]
15399ff5e1 build(deps): bump golang.org/x/net from 0.12.0 to 0.17.0
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.12.0 to 0.17.0.
- [Commits](https://github.com/golang/net/compare/v0.12.0...v0.17.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-11 23:00:35 +00:00
xuu
6ef0c668a2 chore: add push to GH
All checks were successful
Go Bump / bump (push) Successful in 28s
Go Test / build (push) Successful in 34s
2023-10-05 13:23:26 -06:00
xuu
8be5d358f1 chore: add push to GH
All checks were successful
Go Bump / bump (push) Successful in 32s
Go Test / build (push) Successful in 38s
2023-10-04 17:32:44 -06:00
7 changed files with 312 additions and 16 deletions

View File

@@ -0,0 +1,30 @@
name: Go Bump
on:
push:
branches: [ "main" ]
jobs:
bump:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
fetch-tags: true
- name: Deploy to external repository
uses: https://git.sour.is/actions/github-action-push-to-another-repository@main
env:
API_TOKEN_GITHUB: ${{ secrets.GH_TOKEN }}
with:
# GitHub Action output files
source-directory: .
destination-github-username: sour-is
destination-repository-name: go-pkg
user-email: jon@xuu.cc
# It defaults to `main`
target-branch: "main"
- run: echo "🍏 This job's status is ${{ job.status }}."

10
go.mod
View File

@@ -1,6 +1,6 @@
module go.sour.is/pkg
go 1.20
go 1.21
require (
github.com/99designs/gqlgen v0.17.34
@@ -39,7 +39,7 @@ require (
github.com/golang/protobuf v1.5.3 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect
github.com/prometheus/client_golang v1.17.0
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.42.0
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0
go.opentelemetry.io/contrib/instrumentation/runtime v0.42.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.18.0 // indirect
go.opentelemetry.io/otel/exporters/prometheus v0.41.0
@@ -47,9 +47,9 @@ require (
go.opentelemetry.io/otel/sdk v1.18.0
go.opentelemetry.io/otel/trace v1.18.0
go.opentelemetry.io/proto/otlp v1.0.0 // indirect
golang.org/x/net v0.12.0 // indirect
golang.org/x/sys v0.12.0 // indirect
golang.org/x/text v0.11.0 // indirect
golang.org/x/net v0.17.0 // indirect
golang.org/x/sys v0.13.0 // indirect
golang.org/x/text v0.13.0 // indirect
google.golang.org/grpc v1.58.0 // indirect
google.golang.org/protobuf v1.31.0 // indirect
)

16
go.sum
View File

@@ -69,8 +69,8 @@ github.com/vektah/gqlparser/v2 v2.5.6 h1:Ou14T0N1s191eRMZ1gARVqohcbe1e8FrcONScsq
github.com/vektah/gqlparser/v2 v2.5.6/go.mod h1:z8xXUff237NntSuH8mLFijZ+1tjV1swDbpDqjJmk6ME=
go.opentelemetry.io/contrib v1.16.1 h1:EpASvVyGx6/ZTlmXzxYfTMZxHROelCeXXa2uLiwltcs=
go.opentelemetry.io/contrib v1.16.1/go.mod h1:gIzjwWFoGazJmtCaDgViqOSJPde2mCWzv60o0bWPcZs=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.42.0 h1:pginetY7+onl4qN1vl0xW/V/v6OBZ0vVdH+esuJgvmM=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.42.0/go.mod h1:XiYsayHc36K3EByOO6nbAXnAWbrUxdjUROCEeeROOH8=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0 h1:KfYpVmrjI7JuToy5k8XV3nkapjWx48k4E4JOtVstzQI=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0/go.mod h1:SeQhzAEccGVZVEy7aH87Nh0km+utSpo1pTv6eMMop48=
go.opentelemetry.io/contrib/instrumentation/runtime v0.42.0 h1:EbmAUG9hEAMXyfWEasIt2kmh/WmXUznUksChApTgBGc=
go.opentelemetry.io/contrib/instrumentation/runtime v0.42.0/go.mod h1:rD9feqRYP24P14t5kmhNMqsqm1jvKmpx2H2rKVw52V8=
go.opentelemetry.io/otel v1.18.0 h1:TgVozPGZ01nHyDZxK5WGPFB9QexeTMXEH7+tIClWfzs=
@@ -93,15 +93,15 @@ go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lI
go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50=
golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4=
golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/genproto v0.0.0-20230711160842-782d3b101e98 h1:Z0hjGZePRE0ZBWotvtrwxFNrNE9CUAGtplaDK5NNI/g=
google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98 h1:FmF5cCW94Ij59cfpoLiwTgodWmm60eEV0CjlsVg2fuw=

189
grug/math/math.go Normal file
View File

@@ -0,0 +1,189 @@
// grug math is an unbounded precision math library for integers. It is not designed to be performant in any means. But as an example of how one works.
package math
import "strconv"
type Number []rune
func NewNumber() *Number {
return &Number{}
}
func (*Number) FromString(s string) *Number {
for _, a := range s {
if !(a >= '0' && a <= '9') {
return nil
}
}
var n Number = []rune(s)
i:=0
for range n[:len(n)-1] {
if n[i] == 0 || n[i] == '0' {
i++
} else {
break
}
}
n = n[i:]
return &n
}
func (*Number) FromInt(i int) *Number {
s := strconv.Itoa(i)
var n Number = []rune(s)
return &n
}
func (n *Number) String() string {
if n == nil || len(*n) == 0 {
return "NaN"
}
return string(*n)
}
func (n *Number) Add(a *Number) *Number {
if n == nil || a == nil {
return nil
}
lenN, lenA := len(*n), len(*a)
sum := make(Number, max(lenN, lenA)+1)
for i := range sum[:len(sum)-1] {
ii := len(sum) - i - 1
switch {
case lenN == lenA:
j := (*n)[lenN-i-1]
k := (*a)[lenA-i-1]
sum[ii-1], sum[ii] = add(j, k, sum[ii])
case lenN > lenA:
j := (*n)[lenN-i-1]
k := '0'
if i < lenA {
k = (*a)[lenA-i-1]
}
sum[ii-1], sum[ii] = add(j, k, sum[ii])
case lenN < lenA:
j := '0'
if i < lenN {
j = (*n)[lenN-i-1]
}
k := (*a)[lenA-i-1]
sum[ii-1], sum[ii] = add(j, k, sum[ii])
}
}
// Trim the extra 0 if present
if sum[0] == 0 || sum[0] == '0' {
sum = sum[1:]
}
return &sum
}
func (n *Number) Sub(s *Number) *Number {
if n == nil || s == nil {
return nil
}
lenN, lenA := len(*n), len(*s)
sum := make(Number, max(lenN, lenA)+1)
for i := range sum[:len(sum)-1] {
ii := len(sum) - i - 1
switch {
case lenN == lenA:
j := (*n)[lenN-i-1]
k := (*s)[lenA-i-1]
c := '0'
if i+1 < lenN {
c = (*n)[lenN-i-2]
}
sum[ii-1], sum[ii] = sub(j, k, c)
case lenN > lenA:
j := (*n)[lenN-i-1]
k := '0'
if i < lenA {
k = (*s)[lenA-i-1]
}
c := '0'
if i+1 < lenN {
c = (*n)[lenN-i-2]
}
sum[ii-1], sum[ii] = sub(j, k, c)
if i+1 < lenN {
(*n)[lenN-i-2] =sum[ii-1]
}
case lenN < lenA:
j := '0'
if i < lenN {
j = (*n)[lenN-i-1]
}
k := (*s)[lenA-i-1]
c := '0'
if i+1 < lenN {
c = (*n)[lenN-i-2]
}
sum[ii-1], sum[ii] = sub(j, k, c)
}
}
// Trim the extra 0 if present
i:=0
for range sum[:len(sum)-1] {
if sum[i] == 0 || sum[i] == '0' {
i++
} else {
break
}
}
sum = sum[i:]
return &sum
}
func friends(r rune) (int32, int32) {
return 1, 10 - int32(r-'0')
}
func add(a, b, c rune) (rune, rune) {
up, dn := friends(b)
if c == 0 {
c = '0'
}
a = a + c - '0'
if a-dn < '0' {
return '0', a + b - '0'
}
return c + up, a - dn
}
func sub(a, b, c rune) (rune, rune) {
dn, up := friends(b)
if c == 0 {
c = '0'
}
if a+up > '9' {
return c, a - b + '0'
}
return c - dn, a + up
}

74
grug/math/math_test.go Normal file
View File

@@ -0,0 +1,74 @@
package math_test
import (
"testing"
"github.com/matryer/is"
"go.sour.is/pkg/grug/math"
)
func TestNumber(t *testing.T) {
is := is.New(t)
n := math.NewNumber().FromInt(100)
is.Equal(n.String(), "100")
n = n.FromString("00001")
is.Equal(n.String(), "1")
n = n.FromString("1x0")
is.True(n==nil)
is.Equal(n.String(), "NaN")
n = n.FromString("200")
is.True(n!=nil)
is.Equal(n.String(), "200")
n = (&math.Number{}).FromString("300")
is.True(n!=nil)
is.Equal(n.String(), "300")
}
func TestAdd(t *testing.T) {
is := is.New(t)
n := math.NewNumber().FromString("100")
n = n.Add(nil)
is.Equal(n.String(), "NaN")
n = n.FromInt(100)
n = n.Add(n.FromString("900"))
is.Equal(n.String(), "1000")
n = n.Add(math.NewNumber())
is.Equal(n.String(), "1000")
n = n.Add(n.FromString("10"))
is.Equal(n.String(), "1010")
n = n.Add(n.FromString("10000"))
is.Equal(n.String(), "11010")
n = n.Add(n.FromString("9000"))
is.Equal(n.String(), "20010")
}
func TestSub(t *testing.T) {
is := is.New(t)
n := math.NewNumber()
// n = n.FromString("100")
// n = n.Sub(n.FromInt(100))
// is.Equal(n.String(), "0")
// n = n.FromString("200")
// n = n.Sub(n.FromInt(100))
// is.Equal(n.String(), "100")
n = n.FromString("100")
n = n.Sub(n.FromInt(50))
is.Equal(n.String(), "50")
}

View File

@@ -71,7 +71,7 @@ func (w wrapSpan) AddEvent(name string, options ...trace.EventOption) {
args[2*i+1] = a.Value
}
slog.Info(name, args...)
slog.Debug(name, args...)
}
func (w wrapSpan) RecordError(err error, options ...trace.EventOption) {
@@ -142,7 +142,7 @@ func initTracing(ctx context.Context, name string) (context.Context, func() erro
return ctx, nil
}
exporterAddr := env.Default("EV_TRACE_ENDPOINT", "")
exporterAddr := env.Default("TRACE_ENDPOINT", "")
if exporterAddr == "" {
return ctx, nil
}

View File

@@ -93,7 +93,7 @@ func (s *Harness) Run(ctx context.Context, appName, version string) error {
span.End()
}
g, _ := errgroup.WithContext(ctx)
g, ctx := errgroup.WithContext(ctx)
g.Go(func() error {
<-ctx.Done()
// shutdown jobs
@@ -111,7 +111,10 @@ func (s *Harness) Run(ctx context.Context, appName, version string) error {
close(s.onRunning)
err := g.Wait()
if err != nil {
log.Printf("Shutdown due to error: %s", err)
}
return err
}