Skip to content

Commit 2976115

Browse files
authored
Merge pull request #20 from makeopensource/dev
Dev
2 parents a4ce127 + 171fe3e commit 2976115

File tree

11 files changed

+158
-115
lines changed

11 files changed

+158
-115
lines changed

.github/workflows/kraken.yml

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,19 @@
1-
# Builds leviathan images on master
2-
3-
name: Build master
1+
name: Build kraken
42
on:
5-
push:
6-
branches:
7-
- dev
8-
paths:
9-
- 'kraken/**'
3+
workflow_dispatch:
104

11-
pull_request:
5+
push:
6+
tags:
7+
- 'v*' # match tags that start with v (like v1.0.0)
128
branches:
139
- dev
10+
- master
1411
paths:
12+
- '.github/workflows/kraken.yml'
1513
- 'kraken/**'
1614

1715
jobs:
18-
build-docker-kraken:
16+
build-docker:
1917
runs-on: ubuntu-latest
2018
permissions:
2119
packages: write # to be able to publish docker images
@@ -31,8 +29,21 @@ jobs:
3129
- name: Login to GHCR registry
3230
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
3331

34-
- name: build and push leviathan
32+
- name: build and push kraken
33+
working-directory: ./kraken
3534
run: |
3635
REGISTRY="ghcr.io/${{ github.repository }}/kraken"
37-
docker build -f kraken/Dockerfile ./kraken -t ${REGISTRY}:dev
38-
docker push ${REGISTRY}:dev
36+
GIT_TAG=$(git describe --tags 2>/dev/null || echo "develop")
37+
GIT_BRANCH=${GITHUB_REF#refs/heads/}
38+
39+
docker build \
40+
-t ${REGISTRY}:${GIT_TAG} \
41+
-t ${REGISTRY}:${GIT_BRANCH} .
42+
43+
if [[ ! -z "$GIT_TAG" && "$GIT_TAG" == v* ]]; then
44+
docker push ${REGISTRY}:${GIT_TAG}
45+
fi
46+
47+
if [ ! -z "$GIT_BRANCH" ]; then
48+
docker push ${REGISTRY}:${GIT_BRANCH}
49+
fi
Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,15 @@
1-
name: Build leviathan images
1+
name: Build leviathan
22
on:
33
workflow_dispatch:
44

55
push:
6+
tags:
7+
- 'v*' # match tags that start with v (like v1.0.0)
68
branches:
79
- dev
810
- master
911
paths:
10-
- '.github/**'
11-
- 'src/**'
12-
13-
pull_request:
14-
branches:
15-
- dev
16-
- master
17-
paths:
18-
- '.github/**'
12+
- '.github/workflows/leviathan.yml'
1913
- 'src/**'
2014

2115
jobs:
@@ -38,11 +32,21 @@ jobs:
3832
- name: build and push leviathan
3933
run: |
4034
REGISTRY="ghcr.io/${{ github.repository }}"
35+
GIT_TAG=$(git describe --tags 2>/dev/null || echo "develop")
36+
GIT_BRANCH=${GITHUB_REF#refs/heads/}
37+
4138
docker build \
42-
--build-arg VERSION=$(git describe --tags --always 2>/dev/null || echo "dev") \
39+
--build-arg VERSION=$GIT_TAG \
4340
--build-arg COMMIT_INFO=$(git rev-parse HEAD 2>/dev/null || echo "unknown") \
4441
--build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') \
45-
--build-arg BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown") \
46-
-t ${REGISTRY}:dev .
42+
--build-arg BRANCH=${GIT_BRANCH:-unknown} \
43+
-t ${REGISTRY}:${GIT_TAG} \
44+
-t ${REGISTRY}:${GIT_BRANCH} .
45+
46+
if [[ ! -z "$GIT_TAG" && "$GIT_TAG" == v* ]]; then
47+
docker push ${REGISTRY}:${GIT_TAG}
48+
fi
4749
48-
docker push ${REGISTRY}:dev
50+
if [ ! -z "$GIT_BRANCH" ]; then
51+
docker push ${REGISTRY}:${GIT_BRANCH}
52+
fi

.github/workflows/release.yml

Lines changed: 1 addition & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
# TODO rework the profile
2-
3-
name: Release
1+
name: tag release
42
on:
53
push:
64
branches:
@@ -30,50 +28,3 @@ jobs:
3028
env:
3129
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3230
run: npx semantic-release
33-
34-
build-docker:
35-
needs:
36-
- tag-release
37-
runs-on: ubuntu-latest
38-
permissions:
39-
contents: write # to be able to publish a GitHub release
40-
issues: write # to be able to comment on released issues
41-
pull-requests: write # to be able to comment on released pull requests
42-
packages: write # to be able to publish docker images
43-
44-
steps:
45-
- uses: actions/checkout@v3
46-
with:
47-
fetch-depth: 0
48-
49-
- name: 'Get tag'
50-
id: tagName
51-
uses: "WyriHaximus/github-action-get-previous-tag@v1"
52-
53-
# docker image build
54-
- name: Set up Docker Buildx
55-
uses: docker/setup-buildx-action@v3
56-
57-
- name: Login to GHCR registry
58-
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
59-
60-
- name: build and push leviathan
61-
run: |
62-
REGISTRY="ghcr.io/${{ github.repository }}"
63-
VERSION="${{ steps.tagName.outputs.tag }}"
64-
65-
docker build . \
66-
-t ${REGISTRY}:${VERSION} \
67-
-t ${REGISTRY}:latest \
68-
--push
69-
70-
- name: build and push hydra
71-
working-directory: hydra
72-
run: |
73-
REGISTRY="ghcr.io/makeopensource/hydra"
74-
VERSION="${{ steps.tagName.outputs.tag }}"
75-
76-
docker build . \
77-
-t ${REGISTRY}:${VERSION} \
78-
-t ${REGISTRY}:latest \
79-
--push

Justfile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,7 @@ lint:
5959
[working-directory: 'src']
6060
tidy:
6161
go mod tidy
62+
63+
[working-directory: 'src']
64+
vet:
65+
go vet ./...

src/common/utils.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,6 @@ func TarDir(src string, fileMode int64) (*bytes.Buffer, error) {
169169
// I think I don't really know
170170
func TarFile(filePath string) (*bytes.Reader, string, error) {
171171
dockerFile := filepath.Base(filePath)
172-
log.Debug().Msgf("file: %s: from path %s", dockerFile, filePath)
173172

174173
buf := new(bytes.Buffer)
175174
tw := tar.NewWriter(buf)

src/go.mod

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ require (
99
github.com/google/uuid v1.6.0
1010
github.com/joho/godotenv v1.5.1
1111
github.com/mitchellh/mapstructure v1.5.0
12-
github.com/opencontainers/image-spec v1.1.0
12+
github.com/opencontainers/image-spec v1.1.1
1313
github.com/rs/zerolog v1.33.0
1414
github.com/spf13/viper v1.19.0
1515
github.com/stretchr/testify v1.10.0
16-
golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa
17-
golang.org/x/net v0.35.0
16+
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394
17+
golang.org/x/net v0.37.0
1818
google.golang.org/protobuf v1.36.5
1919
gopkg.in/natefinch/lumberjack.v2 v2.2.1
2020
gorm.io/driver/postgres v1.5.11
@@ -63,16 +63,16 @@ require (
6363
github.com/spf13/pflag v1.0.6 // indirect
6464
github.com/subosito/gotenv v1.6.0 // indirect
6565
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
66-
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 // indirect
67-
go.opentelemetry.io/otel v1.34.0 // indirect
66+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect
67+
go.opentelemetry.io/otel v1.35.0 // indirect
6868
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0 // indirect
69-
go.opentelemetry.io/otel/metric v1.34.0 // indirect
70-
go.opentelemetry.io/otel/trace v1.34.0 // indirect
69+
go.opentelemetry.io/otel/metric v1.35.0 // indirect
70+
go.opentelemetry.io/otel/trace v1.35.0 // indirect
7171
go.uber.org/multierr v1.11.0 // indirect
72-
golang.org/x/crypto v0.35.0 // indirect
73-
golang.org/x/sync v0.11.0 // indirect
74-
golang.org/x/sys v0.30.0 // indirect
75-
golang.org/x/text v0.22.0 // indirect
72+
golang.org/x/crypto v0.36.0 // indirect
73+
golang.org/x/sync v0.12.0 // indirect
74+
golang.org/x/sys v0.31.0 // indirect
75+
golang.org/x/text v0.23.0 // indirect
7676
gopkg.in/ini.v1 v1.67.0 // indirect
7777
gopkg.in/yaml.v3 v3.0.1 // indirect
7878
gotest.tools/v3 v3.5.1 // indirect

src/go.sum

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
9595
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
9696
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
9797
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
98+
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
9899
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
99100
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
100101
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -153,6 +154,8 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8
153154
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
154155
github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
155156
github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
157+
github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
158+
github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M=
156159
github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M=
157160
github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc=
158161
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
@@ -197,9 +200,13 @@ go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJyS
197200
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
198201
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 h1:CV7UdSGJt/Ao6Gp4CXckLxVRRsRgDHoI8XjbL3PDl8s=
199202
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0/go.mod h1:FRmFuRJfag1IZ2dPkHnEoSFVgTVPUd2qf5Vi69hLb8I=
203+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 h1:sbiXRNDSWJOTobXh5HyQKjq6wUC5tNybqjIqDpAY4CU=
204+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0/go.mod h1:69uWxva0WgAA/4bu2Yy70SLDBwZXuQ6PbBpbsa5iZrQ=
200205
go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs=
201206
go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY=
202207
go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI=
208+
go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ=
209+
go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y=
203210
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0 h1:R/OBkMoGgfy2fLhs2QhkCI1w4HLEQX92GCcJB6SSdNk=
204211
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4=
205212
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0 h1:giGm8w67Ja7amYNfYMdme7xSp2pIxThWopw8+QP51Yk=
@@ -208,12 +215,17 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0 h1:Ydage/
208215
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0/go.mod h1:QNX1aly8ehqqX1LEa6YniTU7VY9I6R3X/oPxhGdTceE=
209216
go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ=
210217
go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE=
218+
go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M=
219+
go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE=
211220
go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs=
212221
go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo=
213222
go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok=
223+
go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY=
214224
go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk=
215225
go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k=
216226
go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE=
227+
go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs=
228+
go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc=
217229
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
218230
go.opentelemetry.io/proto/otlp v0.11.0 h1:cLDgIBTf4lLOlztkhzAEdQsJ4Lj+i5Wc9k6Nn0K1VyU=
219231
go.opentelemetry.io/proto/otlp v0.11.0/go.mod h1:QpEjXPrNQzrFDZgoTo49dgHR9RYRSrg3NAKnUGl9YpQ=
@@ -226,11 +238,15 @@ golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus=
226238
golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M=
227239
golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
228240
golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
241+
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
242+
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
229243
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
230244
golang.org/x/exp v0.0.0-20250215185904-eff6e970281f h1:oFMYAjX0867ZD2jcNiLBrI9BdpmEkvPyi5YrBGXbamg=
231245
golang.org/x/exp v0.0.0-20250215185904-eff6e970281f/go.mod h1:BHOTPb3L19zxehTsLoJXVaTktb06DFgmdW6Wb9s8jqk=
232246
golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa h1:t2QcU6V556bFjYgu4L6C+6VrCPyJZ+eyRsABUPs1mz4=
233247
golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa/go.mod h1:BHOTPb3L19zxehTsLoJXVaTktb06DFgmdW6Wb9s8jqk=
248+
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw=
249+
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM=
234250
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
235251
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
236252
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
@@ -248,6 +264,8 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R
248264
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
249265
golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8=
250266
golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk=
267+
golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c=
268+
golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
251269
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
252270
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
253271
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -258,6 +276,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ
258276
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
259277
golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
260278
golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
279+
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
280+
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
261281
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
262282
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
263283
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -270,10 +290,14 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
270290
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
271291
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
272292
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
293+
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
294+
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
273295
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
274296
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
275297
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
276298
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
299+
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
300+
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
277301
golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg=
278302
golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
279303
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

src/models/counting_mutex.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package models
2+
3+
import (
4+
"sync"
5+
"sync/atomic"
6+
)
7+
8+
type CountingMutex struct {
9+
mu sync.Mutex
10+
waitingCount int32 // Atomic counter for waiting goroutines
11+
}
12+
13+
func NewCountMutex() *CountingMutex {
14+
return &CountingMutex{
15+
waitingCount: 0,
16+
mu: sync.Mutex{},
17+
}
18+
}
19+
20+
func (wm *CountingMutex) Lock() {
21+
// Increment waiting count before attempting to acquire lock
22+
atomic.AddInt32(&wm.waitingCount, 1)
23+
wm.mu.Lock()
24+
// Decrement waiting count after acquiring lock
25+
atomic.AddInt32(&wm.waitingCount, -1)
26+
}
27+
28+
func (wm *CountingMutex) Unlock() {
29+
wm.mu.Unlock()
30+
}
31+
32+
func (wm *CountingMutex) WaitingCount() int32 {
33+
return atomic.LoadInt32(&wm.waitingCount)
34+
}

0 commit comments

Comments
 (0)