Skip to content

Commit 0e91cd3

Browse files
committed
Publish ModelsDB 1.29.0
Full republication of the public catalog browser: Go backend (cmd/, internal/) with embedded web UI and seed catalog, CI and release workflows, Dependabot config, documentation (README, ARCHITECTURE, DESIGN, CONTRIBUTING, SECURITY, CHANGELOG), build script, and the update-database-manually skill. 91 files, 23133 insertions.
1 parent ea6cae8 commit 0e91cd3

91 files changed

Lines changed: 23133 additions & 0 deletions

Some content is hidden

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

.claude/skills/update-database-manually/SKILL.md

Lines changed: 176 additions & 0 deletions
Large diffs are not rendered by default.

.gitattributes

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
# .gitattributes - stable, cross-platform line endings
2+
# (Windows / WSL / Git Bash / Linux / macOS).
3+
#
4+
# DEFAULT: every text file is stored LF in the repo and checked out LF on EVERY OS.
5+
# One LF policy keeps bash scripts and config working under Git Bash / WSL on Windows
6+
# (a shell script checked out with CRLF breaks), and makes each file byte-identical on
7+
# every machine. Git still auto-detects text vs binary, so unlisted text types are still
8+
# handled and binaries are never EOL-converted. The exceptions below are the few files
9+
# where a DIFFERENT ending is correct.
10+
* text=auto eol=lf
11+
12+
# Windows-native scripts: keep CRLF. These run under cmd.exe / PowerShell, never under
13+
# bash, and CRLF is their native convention.
14+
*.bat text eol=crlf
15+
*.cmd text eol=crlf
16+
*.ps1 text eol=crlf
17+
18+
# Files we author: force LF explicitly (documents intent, and pins "text" so a file is
19+
# never mis-detected as binary). These must stay LF to run under bash or be read by Linux tools.
20+
*.sh text eol=lf
21+
*.bash text eol=lf
22+
*.zsh text eol=lf
23+
*.mjs text eol=lf
24+
*.cjs text eol=lf
25+
*.js text eol=lf
26+
*.jsx text eol=lf
27+
*.ts text eol=lf
28+
*.tsx text eol=lf
29+
*.py text eol=lf
30+
*.rb text eol=lf
31+
*.php text eol=lf
32+
*.go text eol=lf
33+
*.rs text eol=lf
34+
*.json text eol=lf
35+
*.jsonc text eol=lf
36+
*.yml text eol=lf
37+
*.yaml text eol=lf
38+
*.toml text eol=lf
39+
*.ini text eol=lf
40+
*.cfg text eol=lf
41+
*.conf text eol=lf
42+
*.md text eol=lf
43+
*.txt text eol=lf
44+
*.html text eol=lf
45+
*.css text eol=lf
46+
*.scss text eol=lf
47+
*.sql text eol=lf
48+
*.xml text eol=lf
49+
*.svg text eol=lf
50+
51+
# Binary / asset types: never apply EOL conversion or text diffs.
52+
*.png binary
53+
*.jpg binary
54+
*.jpeg binary
55+
*.gif binary
56+
*.bmp binary
57+
*.ico binary
58+
*.webp binary
59+
*.pdf binary
60+
*.woff binary
61+
*.woff2 binary
62+
*.ttf binary
63+
*.otf binary
64+
*.eot binary
65+
*.zip binary
66+
*.gz binary
67+
*.tar binary
68+
*.7z binary
69+
*.mp4 binary
70+
*.webm binary
71+
*.mov binary
72+
*.mp3 binary
73+
*.wav binary
74+
*.exe binary
75+
*.dll binary
76+
*.so binary
77+
*.dylib binary
78+
*.wasm binary
79+
*.bin binary
80+
*.db binary
81+
*.sqlite binary
82+
83+
# Project-specific overrides go here (add per repo as needed). Example: a template file
84+
# consumed only by a Linux script must stay LF even if its extension is unusual:
85+
# *.template text eol=lf

.github/dependabot.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Keep the SHA-pinned GitHub Actions current: Dependabot opens a PR when a pinned
2+
# action has a newer release, bumping both the commit SHA and its version comment.
3+
# (Runs on the public/remote repo only.)
4+
version: 2
5+
updates:
6+
- package-ecosystem: "github-actions"
7+
directory: "/"
8+
schedule:
9+
interval: "weekly"

.github/workflows/ci.yml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Continuous integration: build, vet, and test on every push to main and on PRs.
2+
# This is what powers the "CI passing" badge in the README. (The separate
3+
# release.yml runs only on version tags.)
4+
name: CI
5+
6+
on:
7+
push:
8+
branches: [main]
9+
pull_request:
10+
11+
permissions:
12+
contents: read
13+
14+
jobs:
15+
test:
16+
runs-on: ubuntu-latest
17+
steps:
18+
- name: Check out source
19+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
20+
21+
- name: Set up Go
22+
uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
23+
with:
24+
go-version-file: go.mod
25+
26+
- name: Build
27+
run: go build ./...
28+
29+
- name: Vet
30+
run: go vet ./...
31+
32+
- name: Test
33+
run: go test ./... -cover

.github/workflows/release.yml

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# Build and publish a GitHub Release when a version tag (v*) is pushed.
2+
#
3+
# The FIRST step is a release GATE: it refuses to release unless the pushed tag
4+
# matches the VERSION file, so the tag, the binary's stamped version (build.sh
5+
# injects VERSION via -ldflags), and VERSION itself can never drift apart.
6+
#
7+
# See README "Cutting a release" for how a maintainer triggers this.
8+
name: Release
9+
10+
on:
11+
push:
12+
tags:
13+
- 'v*'
14+
15+
permissions:
16+
contents: write # required to create the Release and upload its assets
17+
18+
jobs:
19+
release:
20+
runs-on: ubuntu-latest
21+
steps:
22+
- name: Check out source
23+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
24+
25+
- name: Verify tag matches VERSION (release gate)
26+
run: |
27+
tag="${GITHUB_REF_NAME#v}"
28+
file="$(tr -d '[:space:]' < VERSION)"
29+
if [ "$tag" != "$file" ]; then
30+
echo "::error::Tag ${GITHUB_REF_NAME} does not match VERSION ($file). Bump VERSION + CHANGELOG, then tag v$file."
31+
exit 1
32+
fi
33+
if ! grep -q "\[$file\]" CHANGELOG.md; then
34+
echo "::warning::No CHANGELOG.md entry found for $file."
35+
fi
36+
37+
- name: Set up Go
38+
uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
39+
with:
40+
go-version-file: go.mod
41+
42+
- name: Build binaries
43+
run: bash build.sh
44+
45+
- name: Checksums for the release assets
46+
run: |
47+
# Stable, version-less asset names (modelsdb.exe / modelsdb) so users
48+
# can download and overwrite their existing binary in place.
49+
( cd dist && sha256sum modelsdb.exe modelsdb > SHA256SUMS && cat SHA256SUMS )
50+
51+
- name: Sign SHA256SUMS (self-update trust anchor)
52+
# The in-app self-update verifies this ed25519 signature (with the public
53+
# key embedded in internal/selfupdate/pubkey.go) before trusting a
54+
# downloaded binary. MODELSDB_SIGN_KEY is the base64 private key repo
55+
# secret. It never prints the key; it only writes dist/SHA256SUMS.sig.
56+
env:
57+
MODELSDB_SIGN_KEY: ${{ secrets.MODELSDB_SIGN_KEY }}
58+
run: go run ./cmd/sign sums dist/SHA256SUMS
59+
60+
- name: Extract release notes from CHANGELOG
61+
run: |
62+
v="${GITHUB_REF_NAME#v}"
63+
awk -v ver="$v" '
64+
$0 ~ ("^## \\[" ver "\\]") { grab=1; next }
65+
grab && /^## \[/ { exit }
66+
grab { print }
67+
' CHANGELOG.md > RELEASE_NOTES.md
68+
if [ ! -s RELEASE_NOTES.md ]; then echo "Release v$v" > RELEASE_NOTES.md; fi
69+
echo "--- release notes ---"; cat RELEASE_NOTES.md
70+
71+
- name: Publish release
72+
uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2
73+
with:
74+
body_path: RELEASE_NOTES.md
75+
files: |
76+
dist/modelsdb.exe
77+
dist/modelsdb
78+
dist/SHA256SUMS
79+
dist/SHA256SUMS.sig

AGENTS.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Agent Guide
2+
3+
See **[CLAUDE.md](./CLAUDE.md)** for the agent rules; it points to `README.md` (overview/usage), `ARCHITECTURE.md` (backend/data design), and `DESIGN.md` (UI/CSS/JS choices) for the details.
4+
5+
This file is intentionally a pointer so every harness reads the same source.

0 commit comments

Comments
 (0)