dirsql 0.0.12__tar.gz → 0.0.14__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dirsql-0.0.12 → dirsql-0.0.14}/.claude/CLAUDE.md +8 -5
- dirsql-0.0.14/.github/workflows/minor-release.yml +113 -0
- dirsql-0.0.14/.github/workflows/patch-release.yml +151 -0
- {dirsql-0.0.12 → dirsql-0.0.14}/.github/workflows/publish.yml +16 -6
- dirsql-0.0.14/.npmignore +23 -0
- {dirsql-0.0.12 → dirsql-0.0.14}/PKG-INFO +1 -1
- {dirsql-0.0.12 → dirsql-0.0.14}/pyproject.toml +12 -1
- dirsql-0.0.12/.github/workflows/minor-release.yml +0 -48
- dirsql-0.0.12/.github/workflows/patch-release.yml +0 -80
- dirsql-0.0.12/index.js +0 -5
- dirsql-0.0.12/justfile +0 -53
- dirsql-0.0.12/package.json +0 -8
- {dirsql-0.0.12 → dirsql-0.0.14}/.github/workflows/pr-monitor.yml +0 -0
- {dirsql-0.0.12 → dirsql-0.0.14}/.github/workflows/python-lint.yml +0 -0
- {dirsql-0.0.12 → dirsql-0.0.14}/.github/workflows/python-test.yml +0 -0
- {dirsql-0.0.12 → dirsql-0.0.14}/.github/workflows/rust-test.yml +0 -0
- {dirsql-0.0.12 → dirsql-0.0.14}/.gitignore +0 -0
- {dirsql-0.0.12 → dirsql-0.0.14}/Cargo.lock +0 -0
- {dirsql-0.0.12 → dirsql-0.0.14}/Cargo.toml +0 -0
- {dirsql-0.0.12 → dirsql-0.0.14}/LICENSE +0 -0
- {dirsql-0.0.12 → dirsql-0.0.14}/SUMMARY.md +0 -0
- {dirsql-0.0.12 → dirsql-0.0.14}/src/db.rs +0 -0
- {dirsql-0.0.12 → dirsql-0.0.14}/src/differ.rs +0 -0
- {dirsql-0.0.12 → dirsql-0.0.14}/src/lib.rs +0 -0
- {dirsql-0.0.12 → dirsql-0.0.14}/src/matcher.rs +0 -0
- {dirsql-0.0.12 → dirsql-0.0.14}/src/scanner.rs +0 -0
- {dirsql-0.0.12 → dirsql-0.0.14}/src/watcher.rs +0 -0
- {dirsql-0.0.12 → dirsql-0.0.14}/tests/__init__.py +0 -0
- {dirsql-0.0.12 → dirsql-0.0.14}/tests/conftest.py +0 -0
- {dirsql-0.0.12 → dirsql-0.0.14}/tests/integration/__init__.py +0 -0
- {dirsql-0.0.12 → dirsql-0.0.14}/tests/integration/test_dirsql.py +0 -0
|
@@ -10,6 +10,7 @@ Write scratch/temporary files to `/tmp` instead of asking permission. Use unique
|
|
|
10
10
|
- **NEVER commit directly to main** - always create a PR
|
|
11
11
|
- One PR per bead. Beads should be concise and small -- as small as possible while still being useful
|
|
12
12
|
- Use `bd` (Beads) for task tracking: `bd list`, `bd show <id>`, `bd ready`
|
|
13
|
+
- **Bead first**: When starting new work, the first step is always to create a bead (`bd create`). No implementation work begins without a bead.
|
|
13
14
|
|
|
14
15
|
### Git Worktrees
|
|
15
16
|
|
|
@@ -47,14 +48,15 @@ git worktree remove .worktrees/my-feature
|
|
|
47
48
|
### Subagent Workflow
|
|
48
49
|
|
|
49
50
|
New work on beads should be done via subagents in isolated worktrees. Each subagent:
|
|
50
|
-
1.
|
|
51
|
-
2.
|
|
52
|
-
3.
|
|
53
|
-
4.
|
|
51
|
+
1. Claims the bead (`bd update <id> --claim`) before starting any work
|
|
52
|
+
2. Creates a worktree and branch for its bead
|
|
53
|
+
3. Does the implementation work (red/green TDD)
|
|
54
|
+
4. Pushes the branch and opens a PR
|
|
55
|
+
5. Monitors the PR and proactively resolves:
|
|
54
56
|
- CI failures
|
|
55
57
|
- GPG signing complaints
|
|
56
58
|
- Merge conflicts
|
|
57
|
-
|
|
59
|
+
6. Continues monitoring until the PR is in a mergeable state
|
|
58
60
|
|
|
59
61
|
### Orchestrator Responsibilities
|
|
60
62
|
|
|
@@ -64,6 +66,7 @@ The orchestrator (main Claude session) must proactively:
|
|
|
64
66
|
3. **Handle post-merge cleanup** as soon as a PR merges (pull main, remove worktree, delete branch, close bead).
|
|
65
67
|
4. **Keep the user informed** of PR status without being asked.
|
|
66
68
|
5. **Use foreground monitoring** when waiting on CI and there's no other work to do. Background monitoring causes the conversation to go silent -- use it only when there's genuinely parallel work to perform.
|
|
69
|
+
6. **Scripts to `/tmp`**: For polling/monitoring scripts (watching CI, waiting for merges), write the script to `/tmp` then run it via `bash /tmp/script.sh`. Do not use inline bash loops in tool calls.
|
|
67
70
|
|
|
68
71
|
### Post-Merge Cleanup
|
|
69
72
|
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
name: Minor Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
|
|
6
|
+
jobs:
|
|
7
|
+
detect-changes:
|
|
8
|
+
runs-on: ubuntu-latest
|
|
9
|
+
outputs:
|
|
10
|
+
rust_changed: ${{ steps.changes.outputs.rust_changed }}
|
|
11
|
+
python_changed: ${{ steps.changes.outputs.python_changed }}
|
|
12
|
+
js_changed: ${{ steps.changes.outputs.js_changed }}
|
|
13
|
+
docs_changed: ${{ steps.changes.outputs.docs_changed }}
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v6
|
|
16
|
+
with:
|
|
17
|
+
fetch-depth: 0
|
|
18
|
+
|
|
19
|
+
- name: Detect changed file types since last tag
|
|
20
|
+
id: changes
|
|
21
|
+
run: |
|
|
22
|
+
latest_tag=$(git tag --sort=-v:refname | grep -E '^v[0-9]' | head -n1)
|
|
23
|
+
|
|
24
|
+
if [ -z "$latest_tag" ]; then
|
|
25
|
+
# No tags yet -- treat everything as changed
|
|
26
|
+
echo "rust_changed=true" >> "$GITHUB_OUTPUT"
|
|
27
|
+
echo "python_changed=true" >> "$GITHUB_OUTPUT"
|
|
28
|
+
echo "js_changed=true" >> "$GITHUB_OUTPUT"
|
|
29
|
+
echo "docs_changed=true" >> "$GITHUB_OUTPUT"
|
|
30
|
+
exit 0
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
changed_files=$(git diff --name-only "${latest_tag}..HEAD")
|
|
34
|
+
|
|
35
|
+
if [ -z "$changed_files" ]; then
|
|
36
|
+
echo "rust_changed=false" >> "$GITHUB_OUTPUT"
|
|
37
|
+
echo "python_changed=false" >> "$GITHUB_OUTPUT"
|
|
38
|
+
echo "js_changed=false" >> "$GITHUB_OUTPUT"
|
|
39
|
+
echo "docs_changed=false" >> "$GITHUB_OUTPUT"
|
|
40
|
+
exit 0
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
rust_changed=false
|
|
44
|
+
python_changed=false
|
|
45
|
+
js_changed=false
|
|
46
|
+
docs_changed=false
|
|
47
|
+
|
|
48
|
+
while IFS= read -r file; do
|
|
49
|
+
case "$file" in
|
|
50
|
+
*.rs|Cargo.toml|Cargo.lock) rust_changed=true ;;
|
|
51
|
+
*.py|pyproject.toml|uv.lock) python_changed=true ;;
|
|
52
|
+
package.json|*.ts|*.js) js_changed=true ;;
|
|
53
|
+
README.md|*.md) docs_changed=true ;;
|
|
54
|
+
esac
|
|
55
|
+
done <<< "$changed_files"
|
|
56
|
+
|
|
57
|
+
echo "rust_changed=$rust_changed" >> "$GITHUB_OUTPUT"
|
|
58
|
+
echo "python_changed=$python_changed" >> "$GITHUB_OUTPUT"
|
|
59
|
+
echo "js_changed=$js_changed" >> "$GITHUB_OUTPUT"
|
|
60
|
+
echo "docs_changed=$docs_changed" >> "$GITHUB_OUTPUT"
|
|
61
|
+
|
|
62
|
+
echo "Rust: $rust_changed, Python: $python_changed, JS: $js_changed, Docs: $docs_changed"
|
|
63
|
+
|
|
64
|
+
release:
|
|
65
|
+
needs: detect-changes
|
|
66
|
+
uses: ./.github/workflows/publish.yml
|
|
67
|
+
with:
|
|
68
|
+
bump_type: minor
|
|
69
|
+
publish_pypi: ${{ needs.detect-changes.outputs.rust_changed == 'true' || needs.detect-changes.outputs.python_changed == 'true' || needs.detect-changes.outputs.docs_changed == 'true' }}
|
|
70
|
+
publish_crates: ${{ needs.detect-changes.outputs.rust_changed == 'true' || needs.detect-changes.outputs.docs_changed == 'true' }}
|
|
71
|
+
secrets: inherit
|
|
72
|
+
permissions:
|
|
73
|
+
contents: write
|
|
74
|
+
id-token: write
|
|
75
|
+
|
|
76
|
+
# npm publish inlined here because npm OIDC doesn't support reusable workflows
|
|
77
|
+
publish-npm:
|
|
78
|
+
needs: [detect-changes, release]
|
|
79
|
+
if: >-
|
|
80
|
+
always() &&
|
|
81
|
+
needs.release.outputs.tag_created == 'true' &&
|
|
82
|
+
(needs.detect-changes.outputs.rust_changed == 'true' ||
|
|
83
|
+
needs.detect-changes.outputs.js_changed == 'true' ||
|
|
84
|
+
needs.detect-changes.outputs.docs_changed == 'true')
|
|
85
|
+
runs-on: ubuntu-latest
|
|
86
|
+
permissions:
|
|
87
|
+
contents: read
|
|
88
|
+
id-token: write
|
|
89
|
+
steps:
|
|
90
|
+
- uses: actions/checkout@v6
|
|
91
|
+
|
|
92
|
+
- name: Check if package.json exists
|
|
93
|
+
id: check_npm
|
|
94
|
+
run: |
|
|
95
|
+
if [ -f package.json ]; then
|
|
96
|
+
echo "exists=true" >> $GITHUB_OUTPUT
|
|
97
|
+
else
|
|
98
|
+
echo "exists=false" >> $GITHUB_OUTPUT
|
|
99
|
+
fi
|
|
100
|
+
|
|
101
|
+
- name: Setup Node.js
|
|
102
|
+
if: steps.check_npm.outputs.exists == 'true'
|
|
103
|
+
uses: actions/setup-node@v4
|
|
104
|
+
with:
|
|
105
|
+
node-version: '24.x'
|
|
106
|
+
|
|
107
|
+
- name: Update package.json version
|
|
108
|
+
if: steps.check_npm.outputs.exists == 'true'
|
|
109
|
+
run: npm version "${{ needs.release.outputs.new_version }}" --no-git-tag-version
|
|
110
|
+
|
|
111
|
+
- name: Publish to npm
|
|
112
|
+
if: steps.check_npm.outputs.exists == 'true'
|
|
113
|
+
run: npm publish --provenance --access public
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
name: Patch Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
schedule:
|
|
5
|
+
# Run at 2:00 AM UTC every day
|
|
6
|
+
- cron: '0 2 * * *'
|
|
7
|
+
push:
|
|
8
|
+
branches: [main]
|
|
9
|
+
workflow_dispatch:
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
check:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
outputs:
|
|
15
|
+
should_release: ${{ steps.decide.outputs.should_release }}
|
|
16
|
+
steps:
|
|
17
|
+
- id: decide
|
|
18
|
+
env:
|
|
19
|
+
EVENT: ${{ github.event_name }}
|
|
20
|
+
STRATEGY: ${{ vars.RELEASE_STRATEGY }}
|
|
21
|
+
COMMIT_MSG: ${{ github.event.head_commit.message }}
|
|
22
|
+
run: |
|
|
23
|
+
if [ "$EVENT" = "workflow_dispatch" ]; then
|
|
24
|
+
echo "should_release=true" >> "$GITHUB_OUTPUT"
|
|
25
|
+
elif [ "$EVENT" = "schedule" ] && [ "$STRATEGY" != "immediate" ]; then
|
|
26
|
+
echo "should_release=true" >> "$GITHUB_OUTPUT"
|
|
27
|
+
elif [ "$EVENT" = "push" ] && [ "$STRATEGY" = "immediate" ]; then
|
|
28
|
+
case "$COMMIT_MSG" in
|
|
29
|
+
*'[no-release]'*) echo "should_release=false" >> "$GITHUB_OUTPUT" ;;
|
|
30
|
+
*) echo "should_release=true" >> "$GITHUB_OUTPUT" ;;
|
|
31
|
+
esac
|
|
32
|
+
else
|
|
33
|
+
echo "should_release=false" >> "$GITHUB_OUTPUT"
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
detect-changes:
|
|
37
|
+
needs: check
|
|
38
|
+
if: needs.check.outputs.should_release == 'true'
|
|
39
|
+
runs-on: ubuntu-latest
|
|
40
|
+
outputs:
|
|
41
|
+
rust_changed: ${{ steps.changes.outputs.rust_changed }}
|
|
42
|
+
python_changed: ${{ steps.changes.outputs.python_changed }}
|
|
43
|
+
js_changed: ${{ steps.changes.outputs.js_changed }}
|
|
44
|
+
docs_changed: ${{ steps.changes.outputs.docs_changed }}
|
|
45
|
+
steps:
|
|
46
|
+
- uses: actions/checkout@v6
|
|
47
|
+
with:
|
|
48
|
+
fetch-depth: 0
|
|
49
|
+
|
|
50
|
+
- name: Detect changed file types since last tag
|
|
51
|
+
id: changes
|
|
52
|
+
run: |
|
|
53
|
+
latest_tag=$(git tag --sort=-v:refname | grep -E '^v[0-9]' | head -n1)
|
|
54
|
+
|
|
55
|
+
if [ -z "$latest_tag" ]; then
|
|
56
|
+
# No tags yet -- treat everything as changed
|
|
57
|
+
echo "rust_changed=true" >> "$GITHUB_OUTPUT"
|
|
58
|
+
echo "python_changed=true" >> "$GITHUB_OUTPUT"
|
|
59
|
+
echo "js_changed=true" >> "$GITHUB_OUTPUT"
|
|
60
|
+
echo "docs_changed=true" >> "$GITHUB_OUTPUT"
|
|
61
|
+
exit 0
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
changed_files=$(git diff --name-only "${latest_tag}..HEAD")
|
|
65
|
+
|
|
66
|
+
if [ -z "$changed_files" ]; then
|
|
67
|
+
echo "rust_changed=false" >> "$GITHUB_OUTPUT"
|
|
68
|
+
echo "python_changed=false" >> "$GITHUB_OUTPUT"
|
|
69
|
+
echo "js_changed=false" >> "$GITHUB_OUTPUT"
|
|
70
|
+
echo "docs_changed=false" >> "$GITHUB_OUTPUT"
|
|
71
|
+
exit 0
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
rust_changed=false
|
|
75
|
+
python_changed=false
|
|
76
|
+
js_changed=false
|
|
77
|
+
docs_changed=false
|
|
78
|
+
|
|
79
|
+
while IFS= read -r file; do
|
|
80
|
+
case "$file" in
|
|
81
|
+
*.rs|Cargo.toml|Cargo.lock) rust_changed=true ;;
|
|
82
|
+
*.py|pyproject.toml|uv.lock) python_changed=true ;;
|
|
83
|
+
package.json|*.ts|*.js) js_changed=true ;;
|
|
84
|
+
README.md|*.md) docs_changed=true ;;
|
|
85
|
+
esac
|
|
86
|
+
done <<< "$changed_files"
|
|
87
|
+
|
|
88
|
+
echo "rust_changed=$rust_changed" >> "$GITHUB_OUTPUT"
|
|
89
|
+
echo "python_changed=$python_changed" >> "$GITHUB_OUTPUT"
|
|
90
|
+
echo "js_changed=$js_changed" >> "$GITHUB_OUTPUT"
|
|
91
|
+
echo "docs_changed=$docs_changed" >> "$GITHUB_OUTPUT"
|
|
92
|
+
|
|
93
|
+
echo "Rust: $rust_changed, Python: $python_changed, JS: $js_changed, Docs: $docs_changed"
|
|
94
|
+
|
|
95
|
+
release:
|
|
96
|
+
needs: [check, detect-changes]
|
|
97
|
+
if: >-
|
|
98
|
+
needs.check.outputs.should_release == 'true' &&
|
|
99
|
+
(needs.detect-changes.outputs.rust_changed == 'true' ||
|
|
100
|
+
needs.detect-changes.outputs.python_changed == 'true' ||
|
|
101
|
+
needs.detect-changes.outputs.docs_changed == 'true')
|
|
102
|
+
uses: ./.github/workflows/publish.yml
|
|
103
|
+
with:
|
|
104
|
+
bump_type: patch
|
|
105
|
+
publish_pypi: ${{ needs.detect-changes.outputs.rust_changed == 'true' || needs.detect-changes.outputs.python_changed == 'true' || needs.detect-changes.outputs.docs_changed == 'true' }}
|
|
106
|
+
publish_crates: ${{ needs.detect-changes.outputs.rust_changed == 'true' || needs.detect-changes.outputs.docs_changed == 'true' }}
|
|
107
|
+
secrets: inherit
|
|
108
|
+
permissions:
|
|
109
|
+
contents: write
|
|
110
|
+
id-token: write
|
|
111
|
+
|
|
112
|
+
# npm publish inlined here because npm OIDC doesn't support reusable workflows
|
|
113
|
+
# (it validates the caller workflow name, not the called workflow)
|
|
114
|
+
publish-npm:
|
|
115
|
+
needs: [check, detect-changes, release]
|
|
116
|
+
if: >-
|
|
117
|
+
always() &&
|
|
118
|
+
needs.check.outputs.should_release == 'true' &&
|
|
119
|
+
needs.release.outputs.tag_created == 'true' &&
|
|
120
|
+
(needs.detect-changes.outputs.rust_changed == 'true' ||
|
|
121
|
+
needs.detect-changes.outputs.js_changed == 'true' ||
|
|
122
|
+
needs.detect-changes.outputs.docs_changed == 'true')
|
|
123
|
+
runs-on: ubuntu-latest
|
|
124
|
+
permissions:
|
|
125
|
+
contents: read
|
|
126
|
+
id-token: write
|
|
127
|
+
steps:
|
|
128
|
+
- uses: actions/checkout@v6
|
|
129
|
+
|
|
130
|
+
- name: Check if package.json exists
|
|
131
|
+
id: check_npm
|
|
132
|
+
run: |
|
|
133
|
+
if [ -f package.json ]; then
|
|
134
|
+
echo "exists=true" >> $GITHUB_OUTPUT
|
|
135
|
+
else
|
|
136
|
+
echo "exists=false" >> $GITHUB_OUTPUT
|
|
137
|
+
fi
|
|
138
|
+
|
|
139
|
+
- name: Setup Node.js
|
|
140
|
+
if: steps.check_npm.outputs.exists == 'true'
|
|
141
|
+
uses: actions/setup-node@v4
|
|
142
|
+
with:
|
|
143
|
+
node-version: '24.x'
|
|
144
|
+
|
|
145
|
+
- name: Update package.json version
|
|
146
|
+
if: steps.check_npm.outputs.exists == 'true'
|
|
147
|
+
run: npm version "${{ needs.release.outputs.new_version }}" --no-git-tag-version
|
|
148
|
+
|
|
149
|
+
- name: Publish to npm
|
|
150
|
+
if: steps.check_npm.outputs.exists == 'true'
|
|
151
|
+
run: npm publish --provenance --access public
|
|
@@ -7,6 +7,16 @@ on:
|
|
|
7
7
|
description: 'Version bump type: patch or minor'
|
|
8
8
|
required: true
|
|
9
9
|
type: string
|
|
10
|
+
publish_pypi:
|
|
11
|
+
description: 'Whether to publish to PyPI'
|
|
12
|
+
required: false
|
|
13
|
+
type: boolean
|
|
14
|
+
default: true
|
|
15
|
+
publish_crates:
|
|
16
|
+
description: 'Whether to publish to crates.io'
|
|
17
|
+
required: false
|
|
18
|
+
type: boolean
|
|
19
|
+
default: true
|
|
10
20
|
outputs:
|
|
11
21
|
tag_created:
|
|
12
22
|
description: 'Whether a tag was created'
|
|
@@ -127,7 +137,7 @@ jobs:
|
|
|
127
137
|
|
|
128
138
|
build:
|
|
129
139
|
needs: [check-python, tag]
|
|
130
|
-
if: needs.check-python.outputs.has_python == 'true' && needs.tag.outputs.created == 'true'
|
|
140
|
+
if: needs.check-python.outputs.has_python == 'true' && needs.tag.outputs.created == 'true' && inputs.publish_pypi
|
|
131
141
|
runs-on: ${{ matrix.os }}
|
|
132
142
|
strategy:
|
|
133
143
|
fail-fast: false
|
|
@@ -164,7 +174,7 @@ jobs:
|
|
|
164
174
|
|
|
165
175
|
sdist:
|
|
166
176
|
needs: [check-python, tag]
|
|
167
|
-
if: needs.check-python.outputs.has_python == 'true' && needs.tag.outputs.created == 'true'
|
|
177
|
+
if: needs.check-python.outputs.has_python == 'true' && needs.tag.outputs.created == 'true' && inputs.publish_pypi
|
|
168
178
|
runs-on: ubuntu-latest
|
|
169
179
|
steps:
|
|
170
180
|
- uses: actions/checkout@v6
|
|
@@ -187,7 +197,7 @@ jobs:
|
|
|
187
197
|
|
|
188
198
|
publish-pypi:
|
|
189
199
|
needs: [tag, build, sdist]
|
|
190
|
-
if: always() && needs.tag.outputs.created == 'true' && needs.sdist.result == 'success'
|
|
200
|
+
if: always() && needs.tag.outputs.created == 'true' && needs.sdist.result == 'success' && inputs.publish_pypi
|
|
191
201
|
runs-on: ubuntu-latest
|
|
192
202
|
permissions:
|
|
193
203
|
id-token: write
|
|
@@ -211,7 +221,7 @@ jobs:
|
|
|
211
221
|
|
|
212
222
|
publish-crates:
|
|
213
223
|
needs: tag
|
|
214
|
-
if: needs.tag.outputs.created == 'true'
|
|
224
|
+
if: needs.tag.outputs.created == 'true' && inputs.publish_crates
|
|
215
225
|
runs-on: ubuntu-latest
|
|
216
226
|
steps:
|
|
217
227
|
- uses: actions/checkout@v6
|
|
@@ -269,8 +279,8 @@ jobs:
|
|
|
269
279
|
if: |
|
|
270
280
|
always() &&
|
|
271
281
|
needs.tag.outputs.created == 'true' &&
|
|
272
|
-
needs.publish-pypi.result
|
|
273
|
-
|
|
282
|
+
(needs.publish-pypi.result == 'failure' ||
|
|
283
|
+
needs.publish-crates.result == 'failure')
|
|
274
284
|
runs-on: ubuntu-latest
|
|
275
285
|
permissions:
|
|
276
286
|
contents: write
|
dirsql-0.0.14/.npmignore
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Source and build artifacts
|
|
2
|
+
src/
|
|
3
|
+
target/
|
|
4
|
+
Cargo.*
|
|
5
|
+
*.rs
|
|
6
|
+
*.toml
|
|
7
|
+
*.lock
|
|
8
|
+
|
|
9
|
+
# Dev/CI infrastructure
|
|
10
|
+
.claude/
|
|
11
|
+
.github/
|
|
12
|
+
tests/
|
|
13
|
+
python/
|
|
14
|
+
.beads
|
|
15
|
+
.dolt/
|
|
16
|
+
|
|
17
|
+
# Docs and notes
|
|
18
|
+
AGENTS.md
|
|
19
|
+
SUMMARY.md
|
|
20
|
+
notes/
|
|
21
|
+
|
|
22
|
+
# Build tools
|
|
23
|
+
justfile
|
|
@@ -4,7 +4,7 @@ build-backend = "maturin"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "dirsql"
|
|
7
|
-
version = "0.0.
|
|
7
|
+
version = "0.0.14"
|
|
8
8
|
description = "Ephemeral SQL index over a local directory"
|
|
9
9
|
license = "MIT"
|
|
10
10
|
requires-python = ">=3.12"
|
|
@@ -25,3 +25,14 @@ dev = [
|
|
|
25
25
|
|
|
26
26
|
[tool.maturin]
|
|
27
27
|
features = ["pyo3/extension-module"]
|
|
28
|
+
exclude = [
|
|
29
|
+
".github/",
|
|
30
|
+
".claude/",
|
|
31
|
+
"tests/",
|
|
32
|
+
"notes/",
|
|
33
|
+
"index.js",
|
|
34
|
+
"package.json",
|
|
35
|
+
".beads",
|
|
36
|
+
"AGENTS.md",
|
|
37
|
+
"justfile",
|
|
38
|
+
]
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
name: Minor Release
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
workflow_dispatch:
|
|
5
|
-
|
|
6
|
-
jobs:
|
|
7
|
-
release:
|
|
8
|
-
uses: ./.github/workflows/publish.yml
|
|
9
|
-
with:
|
|
10
|
-
bump_type: minor
|
|
11
|
-
secrets: inherit
|
|
12
|
-
permissions:
|
|
13
|
-
contents: write
|
|
14
|
-
id-token: write
|
|
15
|
-
|
|
16
|
-
# npm publish inlined here because npm OIDC doesn't support reusable workflows
|
|
17
|
-
publish-npm:
|
|
18
|
-
needs: release
|
|
19
|
-
if: always() && needs.release.outputs.tag_created == 'true'
|
|
20
|
-
runs-on: ubuntu-latest
|
|
21
|
-
permissions:
|
|
22
|
-
contents: read
|
|
23
|
-
id-token: write
|
|
24
|
-
steps:
|
|
25
|
-
- uses: actions/checkout@v6
|
|
26
|
-
|
|
27
|
-
- name: Check if package.json exists
|
|
28
|
-
id: check_npm
|
|
29
|
-
run: |
|
|
30
|
-
if [ -f package.json ]; then
|
|
31
|
-
echo "exists=true" >> $GITHUB_OUTPUT
|
|
32
|
-
else
|
|
33
|
-
echo "exists=false" >> $GITHUB_OUTPUT
|
|
34
|
-
fi
|
|
35
|
-
|
|
36
|
-
- name: Setup Node.js
|
|
37
|
-
if: steps.check_npm.outputs.exists == 'true'
|
|
38
|
-
uses: actions/setup-node@v4
|
|
39
|
-
with:
|
|
40
|
-
node-version: '24.x'
|
|
41
|
-
|
|
42
|
-
- name: Update package.json version
|
|
43
|
-
if: steps.check_npm.outputs.exists == 'true'
|
|
44
|
-
run: npm version "${{ needs.release.outputs.new_version }}" --no-git-tag-version
|
|
45
|
-
|
|
46
|
-
- name: Publish to npm
|
|
47
|
-
if: steps.check_npm.outputs.exists == 'true'
|
|
48
|
-
run: npm publish --provenance --access public
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
name: Patch Release
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
schedule:
|
|
5
|
-
# Run at 2:00 AM UTC every day
|
|
6
|
-
- cron: '0 2 * * *'
|
|
7
|
-
push:
|
|
8
|
-
branches: [main]
|
|
9
|
-
workflow_dispatch:
|
|
10
|
-
|
|
11
|
-
jobs:
|
|
12
|
-
check:
|
|
13
|
-
runs-on: ubuntu-latest
|
|
14
|
-
outputs:
|
|
15
|
-
should_release: ${{ steps.decide.outputs.should_release }}
|
|
16
|
-
steps:
|
|
17
|
-
- id: decide
|
|
18
|
-
env:
|
|
19
|
-
EVENT: ${{ github.event_name }}
|
|
20
|
-
STRATEGY: ${{ vars.RELEASE_STRATEGY }}
|
|
21
|
-
COMMIT_MSG: ${{ github.event.head_commit.message }}
|
|
22
|
-
run: |
|
|
23
|
-
if [ "$EVENT" = "workflow_dispatch" ]; then
|
|
24
|
-
echo "should_release=true" >> "$GITHUB_OUTPUT"
|
|
25
|
-
elif [ "$EVENT" = "schedule" ] && [ "$STRATEGY" != "immediate" ]; then
|
|
26
|
-
echo "should_release=true" >> "$GITHUB_OUTPUT"
|
|
27
|
-
elif [ "$EVENT" = "push" ] && [ "$STRATEGY" = "immediate" ]; then
|
|
28
|
-
case "$COMMIT_MSG" in
|
|
29
|
-
*'[no-release]'*) echo "should_release=false" >> "$GITHUB_OUTPUT" ;;
|
|
30
|
-
*) echo "should_release=true" >> "$GITHUB_OUTPUT" ;;
|
|
31
|
-
esac
|
|
32
|
-
else
|
|
33
|
-
echo "should_release=false" >> "$GITHUB_OUTPUT"
|
|
34
|
-
fi
|
|
35
|
-
|
|
36
|
-
release:
|
|
37
|
-
needs: check
|
|
38
|
-
if: needs.check.outputs.should_release == 'true'
|
|
39
|
-
uses: ./.github/workflows/publish.yml
|
|
40
|
-
with:
|
|
41
|
-
bump_type: patch
|
|
42
|
-
secrets: inherit
|
|
43
|
-
permissions:
|
|
44
|
-
contents: write
|
|
45
|
-
id-token: write
|
|
46
|
-
|
|
47
|
-
# npm publish inlined here because npm OIDC doesn't support reusable workflows
|
|
48
|
-
# (it validates the caller workflow name, not the called workflow)
|
|
49
|
-
publish-npm:
|
|
50
|
-
needs: [check, release]
|
|
51
|
-
if: always() && needs.check.outputs.should_release == 'true' && needs.release.outputs.tag_created == 'true'
|
|
52
|
-
runs-on: ubuntu-latest
|
|
53
|
-
permissions:
|
|
54
|
-
contents: read
|
|
55
|
-
id-token: write
|
|
56
|
-
steps:
|
|
57
|
-
- uses: actions/checkout@v6
|
|
58
|
-
|
|
59
|
-
- name: Check if package.json exists
|
|
60
|
-
id: check_npm
|
|
61
|
-
run: |
|
|
62
|
-
if [ -f package.json ]; then
|
|
63
|
-
echo "exists=true" >> $GITHUB_OUTPUT
|
|
64
|
-
else
|
|
65
|
-
echo "exists=false" >> $GITHUB_OUTPUT
|
|
66
|
-
fi
|
|
67
|
-
|
|
68
|
-
- name: Setup Node.js
|
|
69
|
-
if: steps.check_npm.outputs.exists == 'true'
|
|
70
|
-
uses: actions/setup-node@v4
|
|
71
|
-
with:
|
|
72
|
-
node-version: '24.x'
|
|
73
|
-
|
|
74
|
-
- name: Update package.json version
|
|
75
|
-
if: steps.check_npm.outputs.exists == 'true'
|
|
76
|
-
run: npm version "${{ needs.release.outputs.new_version }}" --no-git-tag-version
|
|
77
|
-
|
|
78
|
-
- name: Publish to npm
|
|
79
|
-
if: steps.check_npm.outputs.exists == 'true'
|
|
80
|
-
run: npm publish --provenance --access public
|
dirsql-0.0.12/index.js
DELETED
dirsql-0.0.12/justfile
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# Run all lints
|
|
2
|
-
lint:
|
|
3
|
-
ruff check .
|
|
4
|
-
|
|
5
|
-
# Check formatting
|
|
6
|
-
format-check:
|
|
7
|
-
ruff format --check .
|
|
8
|
-
|
|
9
|
-
# Auto-format
|
|
10
|
-
format:
|
|
11
|
-
ruff format .
|
|
12
|
-
|
|
13
|
-
# Fix lint issues
|
|
14
|
-
fix:
|
|
15
|
-
ruff check --fix .
|
|
16
|
-
ruff format .
|
|
17
|
-
|
|
18
|
-
# Run Python unit tests (colocated)
|
|
19
|
-
test-unit:
|
|
20
|
-
pytest python/ -x -q
|
|
21
|
-
|
|
22
|
-
# Run integration tests
|
|
23
|
-
test-integration:
|
|
24
|
-
pytest tests/integration/ -x -q
|
|
25
|
-
|
|
26
|
-
# Run e2e tests (local only, not CI)
|
|
27
|
-
test-e2e:
|
|
28
|
-
pytest tests/e2e/ -x -q
|
|
29
|
-
|
|
30
|
-
# CI test target (unit + integration, no e2e)
|
|
31
|
-
test-ci:
|
|
32
|
-
pytest python/ tests/integration/ -x -q --tb=short 2>/dev/null || echo "No tests found yet"
|
|
33
|
-
|
|
34
|
-
# Run Rust tests
|
|
35
|
-
test-rust:
|
|
36
|
-
cargo test
|
|
37
|
-
|
|
38
|
-
# Run Rust clippy
|
|
39
|
-
clippy:
|
|
40
|
-
cargo clippy -- -D warnings
|
|
41
|
-
|
|
42
|
-
# Run Rust format check
|
|
43
|
-
fmt-check:
|
|
44
|
-
cargo fmt -- --check
|
|
45
|
-
|
|
46
|
-
# Full local CI
|
|
47
|
-
ci:
|
|
48
|
-
just lint
|
|
49
|
-
just format-check
|
|
50
|
-
just clippy
|
|
51
|
-
just fmt-check
|
|
52
|
-
just test-rust
|
|
53
|
-
just test-ci
|
dirsql-0.0.12/package.json
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|