Skip to content

Commit 82ef232

Browse files
committed
updating sqllit to use pure go instead of c libraries, updating ci to skip frontend build if no changes
1 parent 610e3b2 commit 82ef232

File tree

5 files changed

+154
-51
lines changed

5 files changed

+154
-51
lines changed

.github/workflows/deploy.yml

Lines changed: 89 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,54 @@ env:
1010
IMAGE_NAME: ${{ github.repository }}
1111

1212
jobs:
13+
check-changes:
14+
name: Check What Changed
15+
runs-on: [self-hosted, home]
16+
outputs:
17+
backend-changed: ${{ steps.changes.outputs.backend }}
18+
frontend-changed: ${{ steps.changes.outputs.frontend }}
19+
steps:
20+
- name: Checkout code
21+
uses: actions/checkout@v4
22+
with:
23+
fetch-depth: 2 # Need at least 2 commits to compare
24+
25+
- name: Check for changes
26+
id: changes
27+
run: |
28+
# Check if this is the first commit (no previous commit to compare)
29+
if git rev-parse HEAD~1 >/dev/null 2>&1; then
30+
# Compare with previous commit
31+
BACKEND_CHANGED=$(git diff --name-only HEAD~1 HEAD | grep -E '^(cmd/|internal/|pkg/|go\.|configs/|deployments/|\.github/workflows/deploy\.yml)' || echo '')
32+
FRONTEND_CHANGED=$(git diff --name-only HEAD~1 HEAD | grep -E '^frontend/' || echo '')
33+
else
34+
# First commit - build everything
35+
BACKEND_CHANGED="initial"
36+
FRONTEND_CHANGED="initial"
37+
fi
38+
39+
# Set outputs
40+
if [ -n "$BACKEND_CHANGED" ]; then
41+
echo "backend=true" >> $GITHUB_OUTPUT
42+
echo "🔍 Backend changes detected: $BACKEND_CHANGED"
43+
else
44+
echo "backend=false" >> $GITHUB_OUTPUT
45+
echo "✅ No backend changes detected"
46+
fi
47+
48+
if [ -n "$FRONTEND_CHANGED" ]; then
49+
echo "frontend=true" >> $GITHUB_OUTPUT
50+
echo "🔍 Frontend changes detected: $FRONTEND_CHANGED"
51+
else
52+
echo "frontend=false" >> $GITHUB_OUTPUT
53+
echo "✅ No frontend changes detected"
54+
fi
55+
1356
build-and-push:
14-
name: Build and Push to GHCR
57+
name: Build and Push Backend
1558
runs-on: [self-hosted, home]
59+
needs: check-changes
60+
if: needs.check-changes.outputs.backend-changed == 'true'
1661
permissions:
1762
contents: read
1863
packages: write
@@ -56,6 +101,8 @@ jobs:
56101
build-frontend-image:
57102
name: Build Frontend Container
58103
runs-on: [self-hosted, home]
104+
needs: check-changes
105+
if: needs.check-changes.outputs.frontend-changed == 'true'
59106
permissions:
60107
contents: read
61108
packages: write
@@ -99,10 +146,22 @@ jobs:
99146
deploy-via-portainer:
100147
name: Deploy via Portainer
101148
runs-on: [self-hosted, home]
102-
needs: [build-and-push, build-frontend-image]
103-
if: success() && github.ref == 'refs/heads/main'
149+
needs: [check-changes, build-and-push, build-frontend-image]
150+
if: always() && github.ref == 'refs/heads/main' &&
151+
(needs.build-and-push.result == 'success' || needs.build-and-push.result == 'skipped') &&
152+
(needs.build-frontend-image.result == 'success' || needs.build-frontend-image.result == 'skipped') &&
153+
(needs.check-changes.outputs.backend-changed == 'true' || needs.check-changes.outputs.frontend-changed == 'true')
104154

105155
steps:
156+
- name: Deployment Info
157+
run: |
158+
echo "📋 **Deployment Information**" >> $GITHUB_STEP_SUMMARY
159+
echo "" >> $GITHUB_STEP_SUMMARY
160+
echo "- **Backend Changed**: ${{ needs.check-changes.outputs.backend-changed }}" >> $GITHUB_STEP_SUMMARY
161+
echo "- **Frontend Changed**: ${{ needs.check-changes.outputs.frontend-changed }}" >> $GITHUB_STEP_SUMMARY
162+
echo "- **Backend Build**: ${{ needs.build-and-push.result }}" >> $GITHUB_STEP_SUMMARY
163+
echo "- **Frontend Build**: ${{ needs.build-frontend-image.result }}" >> $GITHUB_STEP_SUMMARY
164+
106165
- name: Verify Portainer Connection
107166
run: |
108167
echo "🔍 Verifying connection to Portainer..."
@@ -128,10 +187,14 @@ jobs:
128187
PORTAINER_URL: https://portainer.sankalpnarula.com
129188
PORTAINER_TOKEN: ${{ secrets.PORTAINER_ACCESS_TOKEN }}
130189
STACK_NAME: ocpp-chaos-sim
190+
BACKEND_CHANGED: ${{ needs.check-changes.outputs.backend-changed }}
191+
FRONTEND_CHANGED: ${{ needs.check-changes.outputs.frontend-changed }}
131192
run: |
132193
set -e
133194
134195
echo "🚀 Starting deployment process..."
196+
echo "Backend changed: $BACKEND_CHANGED"
197+
echo "Frontend changed: $FRONTEND_CHANGED"
135198
136199
# Get stack ID
137200
echo "🔍 Looking for stack: $STACK_NAME"
@@ -148,14 +211,14 @@ jobs:
148211
149212
echo "📋 Found stack ID: $STACK_ID"
150213
151-
# Get endpoint ID (usually 1 for local Docker, but let's be sure)
214+
# Get endpoint ID
152215
ENDPOINT_ID=$(curl -s -H "X-API-Key: $PORTAINER_TOKEN" \
153216
"$PORTAINER_URL/api/stacks/$STACK_ID" | \
154217
jq -r '.EndpointId')
155218
156219
echo "🎯 Using endpoint ID: $ENDPOINT_ID"
157220
158-
# Trigger stack update (pull latest images and redeploy)
221+
# Trigger stack update (always pull images, even if only one service changed)
159222
echo "🔄 Triggering stack redeployment with image pull..."
160223
RESPONSE=$(curl -s -w "%{http_code}" -X PUT \
161224
-H "X-API-Key: $PORTAINER_TOKEN" \
@@ -188,17 +251,6 @@ jobs:
188251
jq -r '.Status // "unknown"')
189252
190253
echo "📊 Stack status: $STACK_STATUS"
191-
192-
# Optional: Check if services are running
193-
echo "🔍 Checking service status..."
194-
SERVICES=$(curl -s -H "X-API-Key: $PORTAINER_TOKEN" \
195-
"$PORTAINER_URL/api/endpoints/$ENDPOINT_ID/docker/services" | \
196-
jq -r '.[] | select(.Spec.Labels."com.docker.compose.project" == "'$STACK_NAME'") | "\(.Spec.Name): \(.ServiceStatus.RunningTasks)/\(.Spec.Mode.Replicated.Replicas)"' 2>/dev/null || echo "Service status unavailable")
197-
198-
if [ "$SERVICES" != "Service status unavailable" ]; then
199-
echo "📋 Services:"
200-
echo "$SERVICES"
201-
fi
202254
203255
- name: Deployment Summary
204256
if: always()
@@ -208,13 +260,28 @@ jobs:
208260
if [ "${{ job.status }}" = "success" ]; then
209261
echo "✅ **Status**: Deployment successful" >> $GITHUB_STEP_SUMMARY
210262
echo "🔗 **Portainer**: [View Stack](https://portainer.sankalpnarula.com)" >> $GITHUB_STEP_SUMMARY
211-
echo "📦 **Backend Image**: \`ghcr.io/${{ github.repository }}:latest\`" >> $GITHUB_STEP_SUMMARY
212-
echo "📦 **Frontend Image**: \`ghcr.io/${{ github.repository }}-frontend:latest\`" >> $GITHUB_STEP_SUMMARY
263+
if [ "${{ needs.check-changes.outputs.backend-changed }}" = "true" ]; then
264+
echo "📦 **Backend Image**: \`ghcr.io/${{ github.repository }}:latest\` (updated)" >> $GITHUB_STEP_SUMMARY
265+
else
266+
echo "📦 **Backend Image**: \`ghcr.io/${{ github.repository }}:latest\` (unchanged)" >> $GITHUB_STEP_SUMMARY
267+
fi
268+
if [ "${{ needs.check-changes.outputs.frontend-changed }}" = "true" ]; then
269+
echo "📦 **Frontend Image**: \`ghcr.io/${{ github.repository }}-frontend:latest\` (updated)" >> $GITHUB_STEP_SUMMARY
270+
else
271+
echo "📦 **Frontend Image**: \`ghcr.io/${{ github.repository }}-frontend:latest\` (unchanged)" >> $GITHUB_STEP_SUMMARY
272+
fi
213273
echo "" >> $GITHUB_STEP_SUMMARY
214-
echo "**Deployment included:**" >> $GITHUB_STEP_SUMMARY
215-
echo "- ✅ Pull latest images from GHCR" >> $GITHUB_STEP_SUMMARY
216-
echo "- ✅ Recreate containers with new images" >> $GITHUB_STEP_SUMMARY
217-
echo "- ✅ Prune old unused images" >> $GITHUB_STEP_SUMMARY
274+
echo "**What was deployed:**" >> $GITHUB_STEP_SUMMARY
275+
if [ "${{ needs.check-changes.outputs.backend-changed }}" = "true" ]; then
276+
echo "- ✅ Backend: Built and deployed new image" >> $GITHUB_STEP_SUMMARY
277+
else
278+
echo "- ⏭️ Backend: No changes, using existing image" >> $GITHUB_STEP_SUMMARY
279+
fi
280+
if [ "${{ needs.check-changes.outputs.frontend-changed }}" = "true" ]; then
281+
echo "- ✅ Frontend: Built and deployed new image" >> $GITHUB_STEP_SUMMARY
282+
else
283+
echo "- ⏭️ Frontend: No changes, using existing image" >> $GITHUB_STEP_SUMMARY
284+
fi
218285
else
219286
echo "❌ **Status**: Deployment failed" >> $GITHUB_STEP_SUMMARY
220287
echo "🔍 **Check**: Review job logs for details" >> $GITHUB_STEP_SUMMARY

deployments/Dockerfile

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
# Multi-stage Dockerfile for OCPP Chaos Simulator Backend
22
FROM golang:1.21 AS builder
33

4-
# Install build dependencies
5-
RUN apt-get update && apt-get install -y gcc libc6-dev libsqlite3-dev build-essential
6-
74
WORKDIR /app
85

96
# Copy go mod files first for better caching
@@ -13,37 +10,35 @@ RUN go mod download && go mod verify
1310
# Copy source code
1411
COPY . .
1512

16-
# Build both applications with optimizations
17-
RUN CGO_ENABLED=1 GOOS=linux go build -ldflags="-w -s" -a -installsuffix cgo -o simulator ./cmd/simulator
18-
RUN CGO_ENABLED=1 GOOS=linux go build -ldflags="-w -s" -a -installsuffix cgo -o test-charger ./cmd/test-charger
13+
# Build pure-Go binaries (no CGO needed!)
14+
RUN --mount=type=cache,target=/root/.cache/go-build \
15+
--mount=type=cache,target=/go/pkg/mod \
16+
CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o simulator ./cmd/simulator
17+
18+
RUN --mount=type=cache,target=/root/.cache/go-build \
19+
--mount=type=cache,target=/go/pkg/mod \
20+
CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o test-charger ./cmd/test-charger
21+
22+
# Create data directory with proper permissions
23+
RUN mkdir -p /app/data && chmod 755 /app/data
1924

20-
FROM debian:bookworm-slim
25+
# Use distroless for minimal, secure image
26+
FROM gcr.io/distroless/static-debian12:nonroot
2127

2228
# Add labels for better container management
2329
LABEL org.opencontainers.image.source="https://github.com/HackStrix/ocpp-chaos-simulator"
2430
LABEL org.opencontainers.image.description="OCPP Chaos Simulator Backend"
2531
LABEL org.opencontainers.image.licenses="MIT"
2632

27-
# Install runtime dependencies and create non-root user
28-
RUN apt-get update && apt-get install -y ca-certificates sqlite3 tzdata && \
29-
groupadd -g 1001 appgroup && \
30-
useradd -u 1001 -g appgroup -s /bin/sh appuser && \
31-
apt-get clean && rm -rf /var/lib/apt/lists/*
32-
3333
WORKDIR /app
3434

3535
# Copy binaries and configs
36-
COPY --from=builder --chown=appuser:appgroup /app/simulator /app/test-charger ./
37-
COPY --from=builder --chown=appuser:appgroup /app/configs ./configs
38-
39-
# Create data directory with proper permissions
40-
RUN mkdir -p ./data && chown -R appuser:appgroup ./data
36+
COPY --from=builder --chown=nonroot:nonroot /app/simulator /app/test-charger ./
37+
COPY --from=builder --chown=nonroot:nonroot /app/configs ./configs
4138

42-
USER appuser
39+
# Copy data directory with proper ownership
40+
COPY --from=builder --chown=nonroot:nonroot /app/data ./data
4341

4442
EXPOSE 8080
4543

46-
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
47-
CMD wget --no-verbose --tries=1 --spider http://localhost:8080/health || exit 1
48-
4944
CMD ["./simulator"]

go.mod

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,26 @@ require (
88
github.com/spf13/viper v1.16.0
99
github.com/stretchr/testify v1.11.1
1010
gopkg.in/yaml.v3 v3.0.1
11-
gorm.io/driver/sqlite v1.5.3
12-
gorm.io/gorm v1.25.4
11+
gorm.io/gorm v1.25.7
1312
)
1413

1514
require (
1615
github.com/davecgh/go-spew v1.1.1 // indirect
16+
github.com/dustin/go-humanize v1.0.1 // indirect
1717
github.com/fsnotify/fsnotify v1.6.0 // indirect
18+
github.com/glebarez/go-sqlite v1.21.2 // indirect
19+
github.com/glebarez/sqlite v1.11.0 // indirect
20+
github.com/google/uuid v1.3.0 // indirect
1821
github.com/hashicorp/hcl v1.0.0 // indirect
1922
github.com/jinzhu/inflection v1.0.0 // indirect
2023
github.com/jinzhu/now v1.1.5 // indirect
2124
github.com/magiconair/properties v1.8.7 // indirect
25+
github.com/mattn/go-isatty v0.0.17 // indirect
2226
github.com/mattn/go-sqlite3 v1.14.17 // indirect
2327
github.com/mitchellh/mapstructure v1.5.0 // indirect
2428
github.com/pelletier/go-toml/v2 v2.0.8 // indirect
2529
github.com/pmezard/go-difflib v1.0.0 // indirect
30+
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
2631
github.com/spf13/afero v1.9.5 // indirect
2732
github.com/spf13/cast v1.5.1 // indirect
2833
github.com/spf13/jwalterweatherman v1.1.0 // indirect
@@ -31,4 +36,8 @@ require (
3136
golang.org/x/sys v0.8.0 // indirect
3237
golang.org/x/text v0.9.0 // indirect
3338
gopkg.in/ini.v1 v1.67.0 // indirect
39+
modernc.org/libc v1.22.5 // indirect
40+
modernc.org/mathutil v1.5.0 // indirect
41+
modernc.org/memory v1.5.0 // indirect
42+
modernc.org/sqlite v1.23.1 // indirect
3443
)

go.sum

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnht
4949
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
5050
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
5151
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
52+
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
53+
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
5254
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
5355
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
5456
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
@@ -59,6 +61,10 @@ github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0X
5961
github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
6062
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
6163
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
64+
github.com/glebarez/go-sqlite v1.21.2 h1:3a6LFC4sKahUunAmynQKLZceZCOzUthkRkEAl9gAXWo=
65+
github.com/glebarez/go-sqlite v1.21.2/go.mod h1:sfxdZyhQjTM2Wry3gVYWaW072Ri1WMdWJi0k6+3382k=
66+
github.com/glebarez/sqlite v1.11.0 h1:wSG0irqzP6VurnMEpFGer5Li19RpIRi2qvQz++w0GMw=
67+
github.com/glebarez/sqlite v1.11.0/go.mod h1:h8/o8j5wiAsqSPoWELDUdJXhjAhsVliSn7bWZjOhrgQ=
6268
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
6369
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
6470
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
@@ -115,6 +121,8 @@ github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLe
115121
github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
116122
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
117123
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
124+
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
125+
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
118126
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
119127
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
120128
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
@@ -143,6 +151,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
143151
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
144152
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
145153
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
154+
github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
155+
github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
146156
github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM=
147157
github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
148158
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
@@ -154,6 +164,9 @@ github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qR
154164
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
155165
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
156166
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
167+
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
168+
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
169+
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
157170
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
158171
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
159172
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
@@ -320,6 +333,7 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w
320333
golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
321334
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
322335
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
336+
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
323337
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
324338
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
325339
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -490,13 +504,23 @@ gorm.io/driver/sqlite v1.5.3 h1:7/0dUgX28KAcopdfbRWWl68Rflh6osa4rDh+m51KL2g=
490504
gorm.io/driver/sqlite v1.5.3/go.mod h1:qxAuCol+2r6PannQDpOP1FP6ag3mKi4esLnB/jHed+4=
491505
gorm.io/gorm v1.25.4 h1:iyNd8fNAe8W9dvtlgeRI5zSVZPsq3OpcTu37cYcpCmw=
492506
gorm.io/gorm v1.25.4/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
507+
gorm.io/gorm v1.25.7 h1:VsD6acwRjz2zFxGO50gPO6AkNs7KKnvfzUjHQhZDz/A=
508+
gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
493509
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
494510
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
495511
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
496512
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
497513
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
498514
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
499515
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
516+
modernc.org/libc v1.22.5 h1:91BNch/e5B0uPbJFgqbxXuOnxBQjlS//icfQEGmvyjE=
517+
modernc.org/libc v1.22.5/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY=
518+
modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ=
519+
modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
520+
modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds=
521+
modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
522+
modernc.org/sqlite v1.23.1 h1:nrSBg4aRQQwq59JpvGEQ15tNxoO5pX/kUjcRNwSAGQM=
523+
modernc.org/sqlite v1.23.1/go.mod h1:OrDj17Mggn6MhE+iPbBNf7RGKODDE9NFT0f3EwDzJqk=
500524
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
501525
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
502526
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=

0 commit comments

Comments
 (0)