Skip to content

Commit 379b0f1

Browse files
committed
Merge branch 'main' of https://github.com/dolthub/dolt into angela/go_mod
2 parents 5e2148c + 516c2ae commit 379b0f1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+1418
-514
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#!/usr/bin/env bash
2+
3+
set -euo pipefail
4+
IFS=$'\n\t'
5+
6+
# Inputs via environment variables
7+
RAW_DEP=${RAW_DEP:-}
8+
RAW_SHA=${RAW_SHA:-}
9+
RAW_USER=${RAW_USER:-}
10+
RAW_MAIL=${RAW_MAIL:-}
11+
12+
# --- Validate dependency via allow-list and map to module path + label
13+
case "${RAW_DEP:-}" in
14+
go-mysql-server)
15+
MODULE='github.com/dolthub/go-mysql-server'
16+
LABEL='gms-bump'
17+
;;
18+
eventsapi_schema)
19+
MODULE='github.com/dolthub/eventsapi_schema'
20+
LABEL='eventsapi_schema-bump'
21+
;;
22+
*)
23+
echo "Unsupported dependency '${RAW_DEP:-}'" >&2
24+
exit 1
25+
;;
26+
esac
27+
28+
# --- Validate head SHA/tag (conservative)
29+
# allow only hex SHAs or safe tag-ish: letters, digits, dot, dash, underscore, plus
30+
if [ -z "${RAW_SHA:-}" ] || ! printf '%s' "$RAW_SHA" | grep -qE '^[A-Za-z0-9._+-]+$'; then
31+
echo "Invalid head_commit_sha" >&2
32+
exit 1
33+
fi
34+
35+
# Keep a short 8-char form if it's a hex SHA; otherwise derive short safe token
36+
if printf '%s' "$RAW_SHA" | grep -qiE '^[0-9a-f]{40}$'; then
37+
SHORT_SHA="${RAW_SHA:0:8}"
38+
else
39+
SHORT_SHA="$(printf '%s' "$RAW_SHA" | tr -cd 'A-Za-z0-9._+-' | cut -c1-12)"
40+
fi
41+
42+
# --- Validate assignee username (GitHub-compatible subset)
43+
if [ -z "${RAW_USER:-}" ] || ! printf '%s' "$RAW_USER" | grep -qE '^[A-Za-z0-9-]{1,39}$'; then
44+
echo "Invalid assignee username" >&2
45+
exit 1
46+
fi
47+
48+
# --- Validate email; if invalid, fall back to GitHub noreply
49+
if [ -n "${RAW_MAIL:-}" ] && printf '%s' "$RAW_MAIL" | grep -qE '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$'; then
50+
SAFE_EMAIL="$RAW_MAIL"
51+
else
52+
SAFE_EMAIL="${RAW_USER}+noreply@users.noreply.github.com"
53+
fi
54+
55+
# --- Build a safe branch name: <assignee>-<short>
56+
BRANCH_NAME="$(printf '%s-%s' "$RAW_USER" "$SHORT_SHA" | tr -cd 'A-Za-z0-9._-')"
57+
58+
# Expose sanitized values as step outputs
59+
{
60+
echo "label=$LABEL"
61+
echo "safe_module=$MODULE"
62+
echo "safe_head=$RAW_SHA"
63+
echo "safe_assignee=$RAW_USER"
64+
echo "safe_email=$SAFE_EMAIL"
65+
echo "safe_branch=$BRANCH_NAME"
66+
echo "safe_short=$SHORT_SHA"
67+
} >> "${GITHUB_OUTPUT}"

.github/workflows/bump-dependency.yaml

Lines changed: 46 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -5,31 +5,31 @@ on:
55
types: [ bump-dependency ]
66

77
jobs:
8-
get-label:
9-
name: Get Label
10-
outputs:
11-
label: ${{ steps.get-label.outputs.label }}
8+
sanitize-payload:
9+
name: Sanitize Payload
1210
runs-on: ubuntu-22.04
11+
outputs:
12+
label: ${{ steps.sanitize.outputs.label }}
13+
safe_module: ${{ steps.sanitize.outputs.safe_module }}
14+
safe_head: ${{ steps.sanitize.outputs.safe_head }}
15+
safe_assignee: ${{ steps.sanitize.outputs.safe_assignee }}
16+
safe_email: ${{ steps.sanitize.outputs.safe_email }}
17+
safe_branch: ${{ steps.sanitize.outputs.safe_branch }}
18+
safe_short: ${{ steps.sanitize.outputs.safe_short }}
1319
steps:
14-
- name: Get Label
15-
id: get-label
20+
- uses: actions/checkout@v4
21+
- name: Validate & Sanitize Payload (script)
22+
id: sanitize
1623
env:
17-
REPO: ${{ github.event.client_payload.dependency }}
18-
run: |
19-
if [ "$REPO" == "go-mysql-server" ]
20-
then
21-
echo "label=gms-bump" >> $GITHUB_OUTPUT
22-
elif [ "$REPO" == "eventsapi_schema" ]
23-
then
24-
echo "label=eventsapi_schema-bump" >> $GITHUB_OUTPUT
25-
else
26-
echo "$REPO is unsupported"
27-
exit 1
28-
fi
24+
RAW_DEP: ${{ github.event.client_payload.dependency }}
25+
RAW_SHA: ${{ github.event.client_payload.head_commit_sha }}
26+
RAW_USER: ${{ github.event.client_payload.assignee }}
27+
RAW_MAIL: ${{ github.event.client_payload.assignee_email }}
28+
run: bash .github/scripts/sanitize_payload.sh
2929

3030
stale-bump-prs:
3131
name: Retrieving Stale Bump PRs
32-
needs: get-label
32+
needs: sanitize-payload
3333
outputs:
3434
stale-pulls: ${{ steps.get-stale-prs.outputs.open-pulls }}
3535
runs-on: ubuntu-22.04
@@ -38,7 +38,7 @@ jobs:
3838
id: get-stale-prs
3939
uses: actions/github-script@v7
4040
env:
41-
LABEL: ${{ needs.get-label.outputs.label }}
41+
LABEL: ${{ needs.sanitize-payload.outputs.label }}
4242
with:
4343
debug: true
4444
github-token: ${{ secrets.REPO_ACCESS_TOKEN }}
@@ -89,7 +89,7 @@ jobs:
8989
}
9090
9191
open-bump-pr:
92-
needs: [get-label, stale-bump-prs]
92+
needs: [sanitize-payload, stale-bump-prs]
9393
name: Open Bump PR
9494
runs-on: ubuntu-22.04
9595
outputs:
@@ -102,47 +102,51 @@ jobs:
102102
uses: actions/setup-go@v5
103103
with:
104104
go-version-file: go/go.mod
105-
- name: Bump dependency
105+
- name: Bump dependency (safe)
106106
working-directory: go
107+
env:
108+
SAFE_MODULE: ${{ needs.sanitize-payload.outputs.safe_module }}
109+
SAFE_HEAD: ${{ needs.sanitize-payload.outputs.safe_head }}
107110
run: |
108-
go get github.com/dolthub/${{ github.event.client_payload.dependency }}@${{ github.event.client_payload.head_commit_sha }}
111+
GOOS=linux go get "${SAFE_MODULE}@${SAFE_HEAD}"
109112
go mod tidy
110-
- name: Get Assignee and Reviewer
113+
- name: Get Assignee and Reviewer (safe)
111114
id: get_reviewer
115+
env:
116+
ASSIGNEE: ${{ needs.sanitize-payload.outputs.safe_assignee }}
112117
run: |
113-
if [ "${{ github.event.client_payload.assignee }}" == "zachmu" ]
118+
if [ "${ASSIGNEE}" == "zachmu" ]
114119
then
115120
echo "reviewer=Hydrocharged" >> $GITHUB_OUTPUT
116121
else
117122
echo "reviewer=zachmu" >> $GITHUB_OUTPUT
118123
fi
119-
- name: Get short hash
120-
id: short-sha
121-
run: |
122-
commit=${{ github.event.client_payload.head_commit_sha }}
123-
short=${commit:0:8}
124-
echo "short=$short" >> $GITHUB_OUTPUT
125-
- name: Create and Push new branch
124+
- name: Create and Push new branch (safe)
125+
env:
126+
GIT_USER: ${{ needs.sanitize-payload.outputs.safe_assignee }}
127+
GIT_MAIL: ${{ needs.sanitize-payload.outputs.safe_email }}
128+
BRANCH: ${{ needs.sanitize-payload.outputs.safe_branch }}
129+
COMMIT_BY: ${{ needs.sanitize-payload.outputs.safe_assignee }}
126130
run: |
127-
git config --global --add user.name "${{ github.event.client_payload.assignee }}"
128-
git config --global --add user.email "${{ github.event.client_payload.assignee_email }}"
129-
branchname=${{ format('{0}-{1}', github.event.client_payload.assignee, steps.short-sha.outputs.short) }}
130-
git checkout -b "$branchname"
131+
set -euo pipefail
132+
git config --global user.name "${GIT_USER}"
133+
git config --global user.email "${GIT_MAIL}"
134+
git checkout -b "${BRANCH}"
131135
git add .
132-
git commit -m "${{ format('[ga-bump-dep] Bump dependency in Dolt by {0}', github.event.client_payload.assignee) }}"
133-
git push origin "$branchname"
136+
git commit -m "[ga-bump-dep] Bump dependency in Dolt by ${COMMIT_BY}"
137+
git push origin "${BRANCH}"
134138
- name: pull-request
135139
uses: repo-sync/pull-request@v2
136140
id: latest-pr
137141
with:
138-
source_branch: ${{ format('{0}-{1}', github.event.client_payload.assignee, steps.short-sha.outputs.short ) }}
142+
source_branch: ${{ needs.sanitize-payload.outputs.safe_branch }}
139143
destination_branch: "main"
140144
github_token: ${{ secrets.REPO_ACCESS_TOKEN }}
141-
pr_title: "[auto-bump] [no-release-notes] dependency by ${{ github.event.client_payload.assignee }}"
145+
pr_title: "[auto-bump] [no-release-notes] dependency by ${{ needs.sanitize-payload.outputs.safe_assignee }}"
142146
pr_template: ".github/markdown-templates/dep-bump.md"
143147
pr_reviewer: ${{ steps.get_reviewer.outputs.reviewer }}
144-
pr_assignee: ${{ github.event.client_payload.assignee }}
145-
pr_label: ${{ needs.get-label.outputs.label }}
148+
pr_assignee: ${{ needs.sanitize-payload.outputs.safe_assignee }}
149+
pr_label: ${{ needs.sanitize-payload.outputs.label }}
146150

147151
comment-on-stale-prs:
148152
needs: [open-bump-pr, stale-bump-prs]

go/cmd/dolt/commands/cvcmds/verify_constraints.go

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"github.com/dolthub/dolt/go/libraries/doltcore/doltdb"
3030
"github.com/dolthub/dolt/go/libraries/doltcore/env"
3131
"github.com/dolthub/dolt/go/libraries/doltcore/merge"
32+
"github.com/dolthub/dolt/go/libraries/doltcore/sqle/dsess"
3233
"github.com/dolthub/dolt/go/libraries/utils/argparser"
3334
"github.com/dolthub/dolt/go/store/types"
3435
)
@@ -111,30 +112,37 @@ func (cmd VerifyConstraintsCmd) Exec(ctx context.Context, commandStr string, arg
111112
return commands.HandleVErrAndExitCode(errhand.BuildDError("Unable to get head commit hash.").AddCause(err).Build(), nil)
112113
}
113114

114-
endRoot, tablesWithViolations, err := merge.AddForeignKeyViolations(ctx, working, comparingRoot, tableSet, h)
115+
eng, dbName, err := engine.NewSqlEngineForEnv(ctx, dEnv)
116+
if err != nil {
117+
return commands.HandleVErrAndExitCode(errhand.BuildDError("Failed to build sql engine.").AddCause(err).Build(), nil)
118+
}
119+
sqlCtx, err := eng.NewLocalContext(ctx)
120+
if err != nil {
121+
return commands.HandleVErrAndExitCode(errhand.BuildDError("Failed to build sql context.").AddCause(err).Build(), nil)
122+
}
123+
defer sql.SessionEnd(sqlCtx.Session)
124+
sql.SessionCommandBegin(sqlCtx.Session)
125+
defer sql.SessionCommandEnd(sqlCtx.Session)
126+
sqlCtx.SetCurrentDatabase(dbName)
127+
128+
tableResolver, err := dsess.GetTableResolver(sqlCtx)
129+
if err != nil {
130+
cli.PrintErrln(errhand.VerboseErrorFromError(err))
131+
return 1
132+
}
133+
134+
endRoot, tablesWithViolations, err := merge.AddForeignKeyViolations(sqlCtx, tableResolver, working, comparingRoot, tableSet, h)
115135
if err != nil {
116136
return commands.HandleVErrAndExitCode(errhand.BuildDError("Unable to process constraint violations.").AddCause(err).Build(), nil)
117137
}
118138

119-
err = dEnv.UpdateWorkingRoot(ctx, endRoot)
139+
err = dEnv.UpdateWorkingRoot(sqlCtx, endRoot)
120140
if err != nil {
121141
return commands.HandleVErrAndExitCode(errhand.BuildDError("Unable to update working root.").AddCause(err).Build(), nil)
122142
}
123143

124144
if tablesWithViolations.Size() > 0 {
125145
cli.PrintErrln("All constraints are not satisfied.")
126-
eng, dbName, err := engine.NewSqlEngineForEnv(ctx, dEnv)
127-
if err != nil {
128-
return commands.HandleVErrAndExitCode(errhand.BuildDError("Failed to build sql engine.").AddCause(err).Build(), nil)
129-
}
130-
sqlCtx, err := eng.NewLocalContext(ctx)
131-
if err != nil {
132-
return commands.HandleVErrAndExitCode(errhand.BuildDError("Failed to build sql context.").AddCause(err).Build(), nil)
133-
}
134-
defer sql.SessionEnd(sqlCtx.Session)
135-
sql.SessionCommandBegin(sqlCtx.Session)
136-
defer sql.SessionCommandEnd(sqlCtx.Session)
137-
sqlCtx.SetCurrentDatabase(dbName)
138146

139147
for _, tableName := range tablesWithViolations.AsSortedSlice() {
140148
tbl, ok, err := endRoot.GetTable(sqlCtx, tableName)

go/cmd/dolt/commands/schcmds/copy-tags.go

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import (
1818
"context"
1919
"fmt"
2020

21+
"github.com/dolthub/go-mysql-server/sql"
22+
2123
"github.com/dolthub/dolt/go/cmd/dolt/cli"
2224
"github.com/dolthub/dolt/go/cmd/dolt/commands"
2325
"github.com/dolthub/dolt/go/cmd/dolt/errhand"
@@ -27,6 +29,7 @@ import (
2729
"github.com/dolthub/dolt/go/libraries/doltcore/env/actions"
2830
"github.com/dolthub/dolt/go/libraries/doltcore/ref"
2931
"github.com/dolthub/dolt/go/libraries/doltcore/schema"
32+
"github.com/dolthub/dolt/go/libraries/doltcore/sqle/dsess"
3033
"github.com/dolthub/dolt/go/libraries/utils/argparser"
3134
"github.com/dolthub/dolt/go/libraries/utils/config"
3235
"github.com/dolthub/dolt/go/store/datas"
@@ -85,13 +88,26 @@ func (cmd CopyTagsCmd) ArgParser() *argparser.ArgParser {
8588
}
8689

8790
// Exec implements the cli.Command interface.
88-
func (cmd CopyTagsCmd) Exec(ctx context.Context, commandStr string, args []string, dEnv *env.DoltEnv, _ cli.CliContext) int {
91+
func (cmd CopyTagsCmd) Exec(ctx context.Context, commandStr string, args []string, dEnv *env.DoltEnv, cliCtx cli.CliContext) int {
8992
fromBranchName, fromRoots, toRoots, usage, err := cmd.validateArgs(ctx, commandStr, args, dEnv)
9093
if err != nil {
9194
verr := errhand.BuildDError("error validating arguments")
9295
return commands.HandleVErrAndExitCode(verr.AddCause(err).Build(), usage)
9396
}
9497

98+
queryist, err := cliCtx.QueryEngine(ctx)
99+
if err != nil {
100+
cli.PrintErrln(errhand.VerboseErrorFromError(err))
101+
return 1
102+
}
103+
sqlCtx := queryist.Context
104+
105+
tableResolver, err := dsess.GetTableResolver(sqlCtx)
106+
if err != nil {
107+
cli.PrintErrln(errhand.VerboseErrorFromError(err))
108+
return 1
109+
}
110+
95111
// Load all the tags from fromBranch and toBranch
96112
fromBranchTags, err := getAllTagsForRoots(ctx, fromRoots.Head)
97113
if err != nil {
@@ -158,7 +174,7 @@ func (cmd CopyTagsCmd) Exec(ctx context.Context, commandStr string, args []strin
158174
}
159175

160176
if tagsSynced > 0 {
161-
if err = doltCommitUpdatedTags(ctx, dEnv, workingRoot, fromBranchName); err != nil {
177+
if err = doltCommitUpdatedTags(sqlCtx, tableResolver, dEnv, workingRoot, fromBranchName); err != nil {
162178
vErr := errhand.BuildDError("failed to commit column tag updates").AddCause(err).Build()
163179
return commands.HandleVErrAndExitCode(vErr, usage)
164180
}
@@ -240,7 +256,7 @@ func validateDestinationBranch(ctx context.Context, toRoots *doltdb.Roots) error
240256

241257
// doltCommitUpdatedTags commits tag changes in |workingRoot| for the specified DoltEnv, |dEnv|. The commit message uses
242258
// |fromBranchName| to document the source of the tag changes.
243-
func doltCommitUpdatedTags(ctx context.Context, dEnv *env.DoltEnv, workingRoot doltdb.RootValue, fromBranchName string) (err error) {
259+
func doltCommitUpdatedTags(ctx *sql.Context, tableResolver doltdb.TableResolver, dEnv *env.DoltEnv, workingRoot doltdb.RootValue, fromBranchName string) (err error) {
244260
if err = dEnv.UpdateWorkingRoot(ctx, workingRoot); err != nil {
245261
return err
246262
}
@@ -271,7 +287,7 @@ func doltCommitUpdatedTags(ctx context.Context, dEnv *env.DoltEnv, workingRoot d
271287
}
272288

273289
doltDB := dEnv.DoltDB(ctx)
274-
pendingCommit, err := actions.GetCommitStaged(ctx, roots, workingSet, nil, doltDB, actions.CommitStagedProps{
290+
pendingCommit, err := actions.GetCommitStaged(ctx, tableResolver, roots, workingSet, nil, doltDB, actions.CommitStagedProps{
275291
Name: name,
276292
Email: email,
277293
Message: "Syncing column tags from " + fromBranchName + " branch",

go/cmd/dolt/dolt.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ import (
4646
"github.com/dolthub/dolt/go/cmd/dolt/commands/cvcmds"
4747
"github.com/dolthub/dolt/go/cmd/dolt/commands/docscmds"
4848
"github.com/dolthub/dolt/go/cmd/dolt/commands/indexcmds"
49-
"github.com/dolthub/dolt/go/cmd/dolt/commands/schcmds"
5049
"github.com/dolthub/dolt/go/cmd/dolt/commands/sqlserver"
5150
"github.com/dolthub/dolt/go/cmd/dolt/doltcmd"
5251
"github.com/dolthub/dolt/go/cmd/dolt/doltversion"
@@ -74,7 +73,6 @@ var commandsWithoutCliCtx = []cli.Command{
7473
commands.BackupCmd{},
7574
commands.LoginCmd{},
7675
credcmds.Commands,
77-
schcmds.Commands,
7876
cvcmds.Commands,
7977
commands.SendMetricsCmd{},
8078
commands.MigrateCmd{},

go/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ require (
6161
github.com/dolthub/dolt-mcp v0.2.2
6262
github.com/dolthub/eventsapi_schema v0.0.0-20250915094920-eadfd39051ca
6363
github.com/dolthub/flatbuffers/v23 v23.3.3-dh.2
64-
github.com/dolthub/go-mysql-server v0.20.1-0.20251022212313-70b084ecf8af
64+
github.com/dolthub/go-mysql-server v0.20.1-0.20251028181638-d977e491d2e0
6565
github.com/dolthub/gozstd v0.0.0-20240423170813-23a2903bca63
6666
github.com/edsrzf/mmap-go v1.2.0
6767
github.com/esote/minmaxheap v1.0.0

go/go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,8 @@ github.com/dolthub/fslock v0.0.3 h1:iLMpUIvJKMKm92+N1fmHVdxJP5NdyDK5bK7z7Ba2s2U=
213213
github.com/dolthub/fslock v0.0.3/go.mod h1:QWql+P17oAAMLnL4HGB5tiovtDuAjdDTPbuqx7bYfa0=
214214
github.com/dolthub/go-icu-regex v0.0.0-20250916051405-78a38d478790 h1:zxMsH7RLiG+dlZ/y0LgJHTV26XoiSJcuWq+em6t6VVc=
215215
github.com/dolthub/go-icu-regex v0.0.0-20250916051405-78a38d478790/go.mod h1:F3cnm+vMRK1HaU6+rNqQrOCyR03HHhR1GWG2gnPOqaE=
216-
github.com/dolthub/go-mysql-server v0.20.1-0.20251022212313-70b084ecf8af h1:4oCU4A7/8HGzrJ7GUzi8+uRXCjwrhF8muvWnQJibros=
217-
github.com/dolthub/go-mysql-server v0.20.1-0.20251022212313-70b084ecf8af/go.mod h1:EeYR0apo+8j2Dyxmn2ghkPlirO2S5mT1xHBrA+Efys8=
216+
github.com/dolthub/go-mysql-server v0.20.1-0.20251028181638-d977e491d2e0 h1:ZVI3G6OcpvvD4MhB1Msppq0s+s/IMrMXQBeDsHtwUOg=
217+
github.com/dolthub/go-mysql-server v0.20.1-0.20251028181638-d977e491d2e0/go.mod h1:EeYR0apo+8j2Dyxmn2ghkPlirO2S5mT1xHBrA+Efys8=
218218
github.com/dolthub/gozstd v0.0.0-20240423170813-23a2903bca63 h1:OAsXLAPL4du6tfbBgK0xXHZkOlos63RdKYS3Sgw/dfI=
219219
github.com/dolthub/gozstd v0.0.0-20240423170813-23a2903bca63/go.mod h1:lV7lUeuDhH5thVGDCKXbatwKy2KW80L4rMT46n+Y2/Q=
220220
github.com/dolthub/ishell v0.0.0-20240701202509-2b217167d718 h1:lT7hE5k+0nkBdj/1UOSFwjWpNxf+LCApbRHgnCA17XE=

0 commit comments

Comments
 (0)