@ifi/oh-pi-skills 0.2.7 → 0.2.9

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.
Files changed (33) hide show
  1. package/package.json +1 -1
  2. package/skills/flutter-serverpod-mvp/SKILL.md +199 -0
  3. package/skills/rust-workspace-bootstrap/SKILL.md +86 -0
  4. package/skills/rust-workspace-bootstrap/scaffold.js +222 -0
  5. package/skills/rust-workspace-bootstrap/template/.cargo/config.toml +7 -0
  6. package/skills/rust-workspace-bootstrap/template/.changeset/.gitkeep +0 -0
  7. package/skills/rust-workspace-bootstrap/template/.envrc +7 -0
  8. package/skills/rust-workspace-bootstrap/template/.github/actions/devenv/action.yml +42 -0
  9. package/skills/rust-workspace-bootstrap/template/.github/workflows/ci.yml +130 -0
  10. package/skills/rust-workspace-bootstrap/template/.github/workflows/coverage.yml +45 -0
  11. package/skills/rust-workspace-bootstrap/template/.github/workflows/docs-pages.yml +60 -0
  12. package/skills/rust-workspace-bootstrap/template/.github/workflows/release-preview.yml +52 -0
  13. package/skills/rust-workspace-bootstrap/template/.github/workflows/release.yml +87 -0
  14. package/skills/rust-workspace-bootstrap/template/.github/workflows/semver.yml +63 -0
  15. package/skills/rust-workspace-bootstrap/template/Cargo.toml +64 -0
  16. package/skills/rust-workspace-bootstrap/template/changelog.md +3 -0
  17. package/skills/rust-workspace-bootstrap/template/clippy.toml +1 -0
  18. package/skills/rust-workspace-bootstrap/template/crates/__CLI_CRATE__/Cargo.toml +20 -0
  19. package/skills/rust-workspace-bootstrap/template/crates/__CLI_CRATE__/src/main.rs +21 -0
  20. package/skills/rust-workspace-bootstrap/template/crates/__CORE_CRATE__/Cargo.toml +15 -0
  21. package/skills/rust-workspace-bootstrap/template/crates/__CORE_CRATE__/src/lib.rs +32 -0
  22. package/skills/rust-workspace-bootstrap/template/deny.toml +18 -0
  23. package/skills/rust-workspace-bootstrap/template/devenv.nix +214 -0
  24. package/skills/rust-workspace-bootstrap/template/devenv.yaml +10 -0
  25. package/skills/rust-workspace-bootstrap/template/docs/book.toml +6 -0
  26. package/skills/rust-workspace-bootstrap/template/docs/src/SUMMARY.md +3 -0
  27. package/skills/rust-workspace-bootstrap/template/docs/src/index.md +3 -0
  28. package/skills/rust-workspace-bootstrap/template/dprint.json +40 -0
  29. package/skills/rust-workspace-bootstrap/template/knope.toml +73 -0
  30. package/skills/rust-workspace-bootstrap/template/readme.md +77 -0
  31. package/skills/rust-workspace-bootstrap/template/rust-toolchain.toml +4 -0
  32. package/skills/rust-workspace-bootstrap/template/rustfmt.toml +21 -0
  33. package/skills/rust-workspace-bootstrap/template/scripts/release.sh +61 -0
@@ -0,0 +1,214 @@
1
+ {
2
+ pkgs,
3
+ lib,
4
+ config,
5
+ inputs,
6
+ ...
7
+ }:
8
+
9
+ {
10
+ packages =
11
+ with pkgs;
12
+ [
13
+ cargo-binstall
14
+ cargo-run-bin
15
+ dprint
16
+ mdbook
17
+ nixfmt
18
+ rustup
19
+ shfmt
20
+ ]
21
+ ++ lib.optionals stdenv.isDarwin [
22
+ coreutils
23
+ ];
24
+
25
+ enterShell = ''
26
+ set -e
27
+ rustup toolchain install nightly --component rustfmt --no-self-update 2>/dev/null || true
28
+ rustup update stable --no-self-update 2>/dev/null || true
29
+ '';
30
+
31
+ # Disable dotenv hint since direnv interpolation is preferred.
32
+ dotenv.disableHint = true;
33
+
34
+ scripts = {
35
+ "__PROJECT_NAME__" = {
36
+ exec = ''
37
+ set -e
38
+ cargo run --quiet -p __CLI_CRATE__ -- $@
39
+ '';
40
+ description = "Run the __PROJECT_NAME__ CLI from source.";
41
+ binary = "bash";
42
+ };
43
+ "install:all" = {
44
+ exec = ''
45
+ set -e
46
+ install:cargo:bin
47
+ '';
48
+ description = "Install all local development binaries.";
49
+ binary = "bash";
50
+ };
51
+ "install:cargo:bin" = {
52
+ exec = ''
53
+ set -e
54
+ cargo bin --install
55
+ '';
56
+ description = "Install cargo binaries from [workspace.metadata.bin].";
57
+ binary = "bash";
58
+ };
59
+ "update:deps" = {
60
+ exec = ''
61
+ set -e
62
+ cargo update
63
+ devenv update
64
+ '';
65
+ description = "Update Cargo and Nix dependencies.";
66
+ binary = "bash";
67
+ };
68
+ "build:all" = {
69
+ exec = ''
70
+ set -e
71
+ if [ -z "$CI" ]; then
72
+ cargo build --workspace --all-features
73
+ else
74
+ cargo build --workspace --all-features --locked
75
+ fi
76
+ '';
77
+ description = "Build all crates with all features activated.";
78
+ binary = "bash";
79
+ };
80
+ "build:default" = {
81
+ exec = ''
82
+ set -e
83
+ cargo build --workspace --locked
84
+ '';
85
+ description = "Build workspace crates with default features.";
86
+ binary = "bash";
87
+ };
88
+ "test:all" = {
89
+ exec = ''
90
+ set -e
91
+ test:cargo
92
+ test:docs
93
+ '';
94
+ description = "Run all tests across workspace crates.";
95
+ binary = "bash";
96
+ };
97
+ "test:cargo" = {
98
+ exec = ''
99
+ set -e
100
+ cargo nextest run --workspace --all-features --locked
101
+ '';
102
+ description = "Run rust tests with cargo-nextest.";
103
+ binary = "bash";
104
+ };
105
+ "test:docs" = {
106
+ exec = ''
107
+ set -e
108
+ cargo test --workspace --doc --locked
109
+ '';
110
+ description = "Run Rust documentation tests.";
111
+ binary = "bash";
112
+ };
113
+ "coverage:all" = {
114
+ exec = ''
115
+ set -e
116
+ mkdir -p "$DEVENV_ROOT/target/coverage"
117
+ cargo llvm-cov nextest \
118
+ --workspace \
119
+ --all-features \
120
+ --locked \
121
+ --lcov \
122
+ --output-path "$DEVENV_ROOT/target/coverage/lcov.info"
123
+ '';
124
+ description = "Generate lcov coverage report for the whole workspace.";
125
+ binary = "bash";
126
+ };
127
+ "fix:all" = {
128
+ exec = ''
129
+ set -e
130
+ fix:clippy
131
+ fix:format
132
+ '';
133
+ description = "Apply all autofixable lint/format changes.";
134
+ binary = "bash";
135
+ };
136
+ "fix:format" = {
137
+ exec = ''
138
+ set -e
139
+ dprint fmt --config "$DEVENV_ROOT/dprint.json"
140
+ '';
141
+ description = "Format files with dprint.";
142
+ binary = "bash";
143
+ };
144
+ "fix:clippy" = {
145
+ exec = ''
146
+ set -e
147
+ cargo clippy --workspace --all-features --all-targets --fix --allow-dirty --allow-staged
148
+ '';
149
+ description = "Apply clippy autofixes for all workspace crates.";
150
+ binary = "bash";
151
+ };
152
+ "docs:build" = {
153
+ exec = ''
154
+ set -e
155
+ mdbook build "$DEVENV_ROOT/docs"
156
+ '';
157
+ description = "Build mdBook documentation.";
158
+ binary = "bash";
159
+ };
160
+ "verify:docs" = {
161
+ exec = ''
162
+ set -e
163
+ [ -f "$DEVENV_ROOT/docs/book.toml" ]
164
+ [ -f "$DEVENV_ROOT/docs/src/SUMMARY.md" ]
165
+ mdbook build "$DEVENV_ROOT/docs" -d "$DEVENV_ROOT/target/mdbook"
166
+ '';
167
+ description = "Validate docs layout and build mdBook.";
168
+ binary = "bash";
169
+ };
170
+ "deny:check" = {
171
+ exec = ''
172
+ set -e
173
+ cargo deny check
174
+ '';
175
+ description = "Run cargo-deny checks.";
176
+ binary = "bash";
177
+ };
178
+ "lint:all" = {
179
+ exec = ''
180
+ set -e
181
+ lint:clippy
182
+ lint:format
183
+ verify:docs
184
+ deny:check
185
+ '';
186
+ description = "Run all lint and quality gates.";
187
+ binary = "bash";
188
+ };
189
+ "lint:format" = {
190
+ exec = ''
191
+ set -e
192
+ dprint check
193
+ '';
194
+ description = "Check formatting with dprint.";
195
+ binary = "bash";
196
+ };
197
+ "lint:clippy" = {
198
+ exec = ''
199
+ set -e
200
+ cargo clippy --workspace --all-features --all-targets --locked
201
+ '';
202
+ description = "Run clippy checks across the workspace.";
203
+ binary = "bash";
204
+ };
205
+ "release:dry-run" = {
206
+ exec = ''
207
+ set -e
208
+ knope release --dry-run
209
+ '';
210
+ description = "Preview the next release without mutating files.";
211
+ binary = "bash";
212
+ };
213
+ };
214
+ }
@@ -0,0 +1,10 @@
1
+ # yaml-language-server: $schema=https://devenv.sh/devenv.schema.json
2
+ inputs:
3
+ nixpkgs:
4
+ url: github:NixOS/nixpkgs/nixpkgs-unstable
5
+ rust-overlay:
6
+ url: github:oxalica/rust-overlay
7
+ overlays:
8
+ - default
9
+
10
+ allowUnfree: true
@@ -0,0 +1,6 @@
1
+ [book]
2
+ authors = ["__GITHUB_OWNER__"]
3
+ language = "en"
4
+ multilingual = false
5
+ src = "src"
6
+ title = "__PROJECT_TITLE__"
@@ -0,0 +1,3 @@
1
+ # Summary
2
+
3
+ - [Introduction](./index.md)
@@ -0,0 +1,3 @@
1
+ # __PROJECT_TITLE__
2
+
3
+ Welcome to the __PROJECT_NAME__ documentation.
@@ -0,0 +1,40 @@
1
+ {
2
+ "incremental": true,
3
+ "indentWidth": 2,
4
+ "useTabs": true,
5
+ "exec": {
6
+ "commands": [
7
+ {
8
+ "command": "rustup run nightly rustfmt --unstable-features --edition 2024",
9
+ "exts": ["rs"]
10
+ },
11
+ {
12
+ "command": "nixfmt",
13
+ "exts": ["nix"]
14
+ },
15
+ {
16
+ "command": "shfmt --filename {{file_path}} -i 0",
17
+ "exts": ["sh", "bash"]
18
+ }
19
+ ]
20
+ },
21
+ "toml": {
22
+ "useTabs": true,
23
+ "indentWidth": 2,
24
+ "cargo.applyConventions": true
25
+ },
26
+ "markdown": {
27
+ "textWrap": "never"
28
+ },
29
+ "excludes": [
30
+ ".devenv/**",
31
+ "**/target",
32
+ ".bin/",
33
+ "**/node_modules"
34
+ ],
35
+ "plugins": [
36
+ "https://plugins.dprint.dev/markdown-0.20.0.wasm",
37
+ "https://plugins.dprint.dev/exec-0.6.0.json@a054130d458f124f9b5c91484833828950723a5af3f8ff2bd1523bd47b83b364",
38
+ "https://plugins.dprint.dev/toml-0.7.0.wasm"
39
+ ]
40
+ }
@@ -0,0 +1,73 @@
1
+ [changes]
2
+ ignore_conventional_commits = true
3
+
4
+ [package]
5
+ versioned_files = [
6
+ "Cargo.toml",
7
+ { dependency = "__CORE_CRATE__", path = "Cargo.lock" },
8
+ { dependency = "__CORE_CRATE__", path = "Cargo.toml" },
9
+ { dependency = "__CLI_CRATE__", path = "Cargo.lock" },
10
+ { dependency = "__CLI_CRATE__", path = "Cargo.toml" },
11
+ ]
12
+ scopes = ["core", "cli"]
13
+ changelog = "changelog.md"
14
+ extra_changelog_sections = [
15
+ { name = "Notes", types = ["note"] },
16
+ { name = "Documentation", types = ["docs"] },
17
+ ]
18
+
19
+ [[workflows]]
20
+ name = "release"
21
+
22
+ [[workflows.steps]]
23
+ type = "PrepareRelease"
24
+
25
+ [[workflows.steps]]
26
+ type = "Command"
27
+ command = "dprint fmt"
28
+
29
+ [[workflows.steps]]
30
+ type = "Command"
31
+ command = "cargo check --workspace --locked"
32
+
33
+ [[workflows.steps]]
34
+ type = "Command"
35
+ command = "git add --all"
36
+
37
+ [[workflows.steps]]
38
+ type = "Command"
39
+ command = 'git commit -m "chore: prepare releases $version"'
40
+
41
+ [[workflows.steps]]
42
+ type = "Command"
43
+ command = "git push"
44
+
45
+ [[workflows.steps]]
46
+ type = "Release"
47
+
48
+ [[workflows]]
49
+ name = "document-change"
50
+
51
+ [[workflows.steps]]
52
+ type = "CreateChangeFile"
53
+
54
+ [[workflows.steps]]
55
+ type = "Command"
56
+ command = "dprint fmt .changeset/* --allow-no-files"
57
+
58
+ [[workflows]]
59
+ name = "forced-release"
60
+
61
+ [[workflows.steps]]
62
+ type = "Release"
63
+
64
+ [[workflows]]
65
+ name = "publish"
66
+
67
+ [[workflows.steps]]
68
+ type = "Command"
69
+ command = "cargo publish --workspace"
70
+
71
+ [github]
72
+ owner = "__GITHUB_OWNER__"
73
+ repo = "__GITHUB_REPO__"
@@ -0,0 +1,77 @@
1
+ # __PROJECT_TITLE__
2
+
3
+ __DESCRIPTION__
4
+
5
+ A Rust workspace starter inspired by the structure used in `mdt` and `pina`, with strong defaults for:
6
+
7
+ - **knope changeset + release workflows**
8
+ - **devenv/direnv reproducible environments**
9
+ - **GitHub Actions CI, coverage, semver, and release assets**
10
+
11
+ ## Crate naming rule
12
+
13
+ Use underscores (`_`) in crate names, not hyphens (`-`).
14
+
15
+ ## Workspace Layout
16
+
17
+ ```
18
+ __PROJECT_NAME__/
19
+ ├── crates/
20
+ │ ├── __CORE_CRATE__/ # shared library crate
21
+ │ └── __CLI_CRATE__/ # CLI crate (binary name: __PROJECT_NAME__)
22
+ ├── .changeset/ # knope change files
23
+ ├── .github/
24
+ │ ├── actions/devenv/
25
+ │ └── workflows/
26
+ ├── docs/ # mdBook docs source
27
+ ├── scripts/release.sh
28
+ ├── knope.toml
29
+ ├── devenv.nix
30
+ └── Cargo.toml
31
+ ```
32
+
33
+ ## Quick Start
34
+
35
+ ```bash
36
+ direnv allow
37
+ # or: devenv shell
38
+
39
+ install:cargo:bin
40
+ build:all
41
+ lint:all
42
+ test:all
43
+ ```
44
+
45
+ ## Changesets
46
+
47
+ Every change should include a change file:
48
+
49
+ ```bash
50
+ knope document-change
51
+ ```
52
+
53
+ Change types:
54
+
55
+ - `major` — breaking changes
56
+ - `minor` — new features
57
+ - `patch` — fixes/docs/refactors
58
+
59
+ ## Release
60
+
61
+ Dry run:
62
+
63
+ ```bash
64
+ knope release --dry-run
65
+ ```
66
+
67
+ Full local release:
68
+
69
+ ```bash
70
+ ./scripts/release.sh
71
+ ```
72
+
73
+ Publish:
74
+
75
+ ```bash
76
+ knope publish
77
+ ```
@@ -0,0 +1,4 @@
1
+ [toolchain]
2
+ channel = "1.93.1"
3
+ components = ["rustfmt", "cargo", "clippy", "rust-analyzer", "llvm-tools"]
4
+ profile = "default"
@@ -0,0 +1,21 @@
1
+ edition = "2024"
2
+ style_edition = "2024"
3
+ unstable_features = true
4
+ condense_wildcard_suffixes = true
5
+ force_multiline_blocks = true
6
+ format_code_in_doc_comments = true
7
+ format_macro_matchers = true
8
+ format_strings = true
9
+ group_imports = "StdExternalCrate"
10
+ hard_tabs = true
11
+ imports_granularity = "Item"
12
+ imports_layout = "HorizontalVertical"
13
+ indent_style = "Block"
14
+ max_width = 100
15
+ newline_style = "Unix"
16
+ normalize_comments = true
17
+ reorder_impl_items = true
18
+ reorder_imports = true
19
+ reorder_modules = true
20
+ use_field_init_shorthand = true
21
+ wrap_comments = false
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ # Local release helper for __PROJECT_NAME__
5
+ #
6
+ # Usage:
7
+ # ./scripts/release.sh
8
+ # ./scripts/release.sh --dry-run
9
+ #
10
+ # This script validates the workspace, then delegates versioning/tagging/changelog
11
+ # orchestration to `knope release`.
12
+
13
+ DRY_RUN=""
14
+ if [[ "${1:-}" == "--dry-run" ]]; then
15
+ DRY_RUN="--dry-run"
16
+ echo "🏃 Dry run mode — no repository changes will be made"
17
+ fi
18
+
19
+ echo "📋 Checking prerequisites..."
20
+ command -v knope >/dev/null 2>&1 || {
21
+ echo "❌ knope not found. Install with cargo-binstall or nix/devenv."
22
+ exit 1
23
+ }
24
+ command -v cargo >/dev/null 2>&1 || {
25
+ echo "❌ cargo not found."
26
+ exit 1
27
+ }
28
+
29
+ echo "📋 Checking working tree..."
30
+ if [[ -n $(git status --porcelain) ]] && [[ -z "$DRY_RUN" ]]; then
31
+ echo "❌ Working tree is dirty. Commit or stash your changes first."
32
+ exit 1
33
+ fi
34
+
35
+ echo "📋 Checking for pending changesets..."
36
+ CHANGESET_COUNT=$(find .changeset -name '*.md' ! -name 'README.md' 2>/dev/null | wc -l | tr -d ' ')
37
+ if [[ "$CHANGESET_COUNT" -eq 0 ]]; then
38
+ echo "❌ No changesets found. Run 'knope document-change' first."
39
+ exit 1
40
+ fi
41
+
42
+ echo ""
43
+ echo "🔍 Running quality checks..."
44
+ if command -v devenv >/dev/null 2>&1; then
45
+ devenv shell -c -- bash -e -c 'lint:all && test:all && build:all'
46
+ else
47
+ cargo clippy --workspace --all-features --all-targets --locked
48
+ cargo test --workspace --all-features --locked
49
+ cargo build --workspace --all-features --locked
50
+ fi
51
+
52
+ echo ""
53
+ echo "🚀 Running knope release..."
54
+ knope release $DRY_RUN
55
+
56
+ echo ""
57
+ if [[ -z "$DRY_RUN" ]]; then
58
+ echo "✅ Release complete"
59
+ else
60
+ echo "✅ Dry run complete — no changes made"
61
+ fi