chore: add typedialog and just
Some checks failed
Rust CI / Security Audit (push) Has been cancelled
Rust CI / Check + Test + Lint (nightly) (push) Has been cancelled
Rust CI / Check + Test + Lint (stable) (push) Has been cancelled
Nickel Type Check / Nickel Type Checking (push) Has been cancelled

This commit is contained in:
Jesús Pérez 2026-03-13 00:19:06 +00:00
parent 2d87d60bb5
commit 591f0e0206
Signed by: jesus
GPG Key ID: 9F243E355E0BC939
10 changed files with 1299 additions and 0 deletions

320
.typedialog/ci/README.md Normal file
View File

@ -0,0 +1,320 @@
# CI System - Configuration Guide
**Installed**: 2026-03-12
**Detected Languages**: rust, nushell, nickel, bash, markdown
---
## Quick Start
### Option 1: Using configure.sh (Recommended)
A convenience script is installed in `.typedialog/ci/`:
```bash
# Use web backend (default) - Opens in browser
.typedialog/ci/configure.sh
# Use TUI backend - Terminal interface
.typedialog/ci/configure.sh tui
# Use CLI backend - Command-line prompts
.typedialog/ci/configure.sh cli
```
**This script automatically:**
- Sources `.typedialog/ci/envrc` for environment setup
- Loads defaults from `config.ncl` (Nickel format)
- Uses cascading search for fragments (local → Tools)
- Creates backup before overwriting existing config
- Saves output in Nickel format using nickel-roundtrip with documented template
- Generates `config.ncl` compatible with `nickel doc` command
### Option 2: Direct TypeDialog Commands
Use TypeDialog nickel-roundtrip directly with manual paths:
#### Web Backend (Recommended - Easy Viewing)
```bash
cd .typedialog/ci # Change to CI directory
source envrc # Load environment
typedialog-web nickel-roundtrip config.ncl form.toml \
--output config.ncl \
--ncl-template $TOOLS_PATH/dev-system/ci/templates/config.ncl.j2
```
#### TUI Backend
```bash
cd .typedialog/ci
source envrc
typedialog-tui nickel-roundtrip config.ncl form.toml \
--output config.ncl \
--ncl-template $TOOLS_PATH/dev-system/ci/templates/config.ncl.j2
```
#### CLI Backend
```bash
cd .typedialog/ci
source envrc
typedialog nickel-roundtrip config.ncl form.toml \
--output config.ncl \
--ncl-template $TOOLS_PATH/dev-system/ci/templates/config.ncl.j2
```
**Note:** The `--ncl-template` flag uses a Tera template that adds:
- Descriptive comments for each section
- Documentation compatible with `nickel doc config.ncl`
- Consistent formatting and structure
**All backends will:**
- Show only options relevant to your detected languages
- Guide you through all configuration choices
- Validate your inputs
- Generate config.ncl in Nickel format
### Option 3: Manual Configuration
Edit `config.ncl` directly:
```bash
vim .typedialog/ci/config.ncl
```
---
## Configuration Format: Nickel
**This project uses Nickel format by default** for all configuration files.
### Why Nickel?
- ✅ **Typed configuration** - Static type checking with `nickel typecheck`
- ✅ **Documentation** - Generate docs with `nickel doc config.ncl`
- ✅ **Validation** - Built-in schema validation
- ✅ **Comments** - Rich inline documentation support
- ✅ **Modular** - Import/export system for reusable configs
### Nickel Template
The output structure is controlled by a **Tera template** at:
- **Tools default**: `$TOOLS_PATH/dev-system/ci/templates/config.ncl.j2`
- **Local override**: `.typedialog/ci/config.ncl.j2` (optional)
**To customize the template:**
```bash
# Copy the default template
cp $TOOLS_PATH/dev-system/ci/templates/config.ncl.j2 \
.typedialog/ci/config.ncl.j2
# Edit to add custom comments, documentation, or structure
vim .typedialog/ci/config.ncl.j2
# Your template will now be used automatically
```
**Template features:**
- Customizable comments per section
- Control field ordering
- Add project-specific documentation
- Configure output for `nickel doc` command
### TypeDialog Environment Variables
You can customize TypeDialog behavior with environment variables:
```bash
# Web server configuration
export TYPEDIALOG_PORT=9000 # Port for web backend (default: 9000)
export TYPEDIALOG_HOST=localhost # Host binding (default: localhost)
# Localization
export TYPEDIALOG_LANG=en_US.UTF-8 # Form language (default: system locale)
# Run with custom settings
TYPEDIALOG_PORT=8080 .typedialog/ci/configure.sh web
```
**Common use cases:**
```bash
# Access from other machines in network
TYPEDIALOG_HOST=0.0.0.0 TYPEDIALOG_PORT=8080 .typedialog/ci/configure.sh web
# Use different port if 9000 is busy
TYPEDIALOG_PORT=3000 .typedialog/ci/configure.sh web
# Spanish interface
TYPEDIALOG_LANG=es_ES.UTF-8 .typedialog/ci/configure.sh web
```
## Configuration Structure
Your config.ncl is organized in the `ci` namespace (Nickel format):
```nickel
{
ci = {
project = {
name = "rust",
detected_languages = ["rust, nushell, nickel, bash, markdown"],
primary_language = "rust",
},
tools = {
# Tools are added based on detected languages
},
features = {
# CI features (pre-commit, GitHub Actions, etc.)
},
ci_providers = {
# CI provider configurations
},
},
}
```
## Available Fragments
Tool configurations are modular. Check `.typedialog/ci/fragments/` for:
- rust-tools.toml - Tools for rust
- nushell-tools.toml - Tools for nushell
- nickel-tools.toml - Tools for nickel
- bash-tools.toml - Tools for bash
- markdown-tools.toml - Tools for markdown
- general-tools.toml - Cross-language tools
- ci-providers.toml - GitHub Actions, Woodpecker, etc.
## Cascading Override System
This project uses a **local → Tools cascading search** for all resources:
### How It Works
Resources are searched in priority order:
1. **Local files** (`.typedialog/ci/`) - **FIRST** (highest priority)
2. **Tools files** (`$TOOLS_PATH/dev-system/ci/`) - **FALLBACK** (default)
### Affected Resources
| Resource | Local Path | Tools Path |
|----------|------------|------------|
| Fragments | `.typedialog/ci/fragments/` | `$TOOLS_PATH/dev-system/ci/forms/fragments/` |
| Schemas | `.typedialog/ci/schemas/` | `$TOOLS_PATH/dev-system/ci/schemas/` |
| Validators | `.typedialog/ci/validators/` | `$TOOLS_PATH/dev-system/ci/validators/` |
| Defaults | `.typedialog/ci/defaults/` | `$TOOLS_PATH/dev-system/ci/defaults/` |
| Nickel Template | `.typedialog/ci/config.ncl.j2` | `$TOOLS_PATH/dev-system/ci/templates/config.ncl.j2` |
### Environment Setup (.envrc)
The `.typedialog/ci/.envrc` file configures search paths:
```bash
# Source this file to load environment
source .typedialog/ci/.envrc
# Or use direnv for automatic loading
echo 'source .typedialog/ci/.envrc' >> .envrc
```
**What's in .envrc:**
```bash
export NICKEL_IMPORT_PATH="schemas:$TOOLS_PATH/dev-system/ci/schemas:validators:..."
export TYPEDIALOG_FRAGMENT_PATH=".:$TOOLS_PATH/dev-system/ci/forms"
export NCL_TEMPLATE="<local or Tools path to config.ncl.j2>"
export TYPEDIALOG_PORT=9000 # Web server port
export TYPEDIALOG_HOST=localhost # Web server host
export TYPEDIALOG_LANG="${LANG}" # Form localization
```
### Creating Overrides
**By default:** All resources come from Tools (no duplication).
**To customize:** Create file in local directory with same name:
```bash
# Override a fragment
cp $TOOLS_PATH/dev-system/ci/fragments/rust-tools.toml \
.typedialog/ci/fragments/rust-tools.toml
# Edit your local version
vim .typedialog/ci/fragments/rust-tools.toml
# Override Nickel template (customize comments, structure, nickel doc output)
cp $TOOLS_PATH/dev-system/ci/templates/config.ncl.j2 \
.typedialog/ci/config.ncl.j2
# Edit to customize documentation and structure
vim .typedialog/ci/config.ncl.j2
# Now your version will be used instead of Tools version
```
**Benefits:**
- ✅ Override only what you need
- ✅ Everything else stays synchronized with Tools
- ✅ No duplication by default
- ✅ Automatic updates when Tools is updated
**See:** `$TOOLS_PATH/dev-system/ci/docs/cascade-override.md` for complete documentation.
## Testing Your Configuration
### Validate Configuration
```bash
nu $env.TOOLS_PATH/dev-system/ci/scripts/validator.nu \
--config .typedialog/ci/config.ncl \
--project . \
--namespace ci
```
### Regenerate CI Files
```bash
nu $env.TOOLS_PATH/dev-system/ci/scripts/generate-configs.nu \
--config .typedialog/ci/config.ncl \
--templates $env.TOOLS_PATH/dev-system/ci/templates \
--output . \
--namespace ci
```
## Common Tasks
### Add a New Tool
Edit `config.ncl` and add under `ci.tools`:
```nickel
{
ci = {
tools = {
newtool = {
enabled = true,
install_method = "cargo",
version = "latest",
},
},
},
}
```
### Disable a Feature
```toml
[ci.features]
enable_pre_commit = false
```
## Need Help?
For detailed documentation, see:
- $env.TOOLS_PATH/dev-system/ci/docs/configuration-guide.md
- $env.TOOLS_PATH/dev-system/ci/docs/installation-guide.md

203
.typedialog/ci/config.ncl Normal file
View File

@ -0,0 +1,203 @@
# CI Configuration - Nickel Format
# Auto-generated by dev-system CI installer
#
# This file is managed by TypeDialog using nickel-roundtrip.
# Edit via: .typedialog/ci/configure.sh
# Or manually edit and validate with: nickel typecheck config.ncl
#
# Documentation: nickel doc config.ncl
{
# CI namespace - all configuration lives under 'ci'
ci = {
# Project Information
# Detected languages and primary language for this project
project = {
# Project name
name = "",
# Project description
description = "",
# Project website or documentation site URL
site_url = "",
# Project repository URL (GitHub, GitLab, etc.)
repo_url = "",
# Languages detected in codebase (auto-detected by installer)
detected_languages = [
"rust",
"markdown",
"nickel"
],
# Primary language (determines default tooling)
primary_language = "rust",
},
# CI Tools Configuration
# Each tool can be enabled/disabled and configured here
tools = {
# Taplo - TOML formatter and linter
taplo = {
enabled = true,
install_method = "cargo",
},
# YAMLlint - YAML formatter and linter
yamllint = {
enabled = true,
install_method = "pip",
},
# Clippy - Rust linting tool
clippy = {
enabled = true,
install_method = "cargo",
deny_warnings = true,
},
# Cargo Audit - Security vulnerability scanner
audit = {
enabled = true,
install_method = "cargo",
},
# Cargo Deny - Dependency checker
deny = {
enabled = true,
install_method = "cargo",
},
# Cargo SBOM - Software Bill of Materials
sbom = {
enabled = true,
install_method = "cargo",
},
# LLVM Coverage - Code coverage tool
llvm-cov = {
enabled = true,
install_method = "cargo",
},
# Shellcheck - Bash/shell script linter
shellcheck = {
enabled = true,
install_method = "brew",
},
# Shfmt - Shell script formatter
shfmt = {
enabled = true,
install_method = "brew",
},
# Markdownlint - Markdown linter
markdownlint = {
enabled = true,
install_method = "npm",
},
# Vale - Prose linter
vale = {
enabled = true,
install_method = "brew",
},
# Nickel - Configuration language type checker
nickel = {
enabled = true,
install_method = "brew",
check_all = true,
},
# NuShell - Shell script validator
nushell = {
enabled = true,
install_method = "builtin",
check_all = true,
},
# Ruff - Fast Python linter
ruff = {
enabled = true,
install_method = "pip",
},
# Black - Python code formatter
black = {
enabled = true,
install_method = "pip",
},
# Mypy - Python static type checker
mypy = {
enabled = false,
install_method = "pip",
},
# Pytest - Python testing framework
pytest = {
enabled = true,
install_method = "pip",
},
# Golangci-lint - Go linter aggregator
"golangci-lint" = {
enabled = true,
install_method = "brew",
},
# Gofmt - Go code formatter
gofmt = {
enabled = true,
install_method = "builtin",
},
# Staticcheck - Go static analysis
staticcheck = {
enabled = true,
install_method = "brew",
},
# Gosec - Go security checker
gosec = {
enabled = false,
install_method = "brew",
},
# ESLint - JavaScript linter
eslint = {
enabled = true,
install_method = "npm",
},
# Prettier - Code formatter
prettier = {
enabled = true,
install_method = "npm",
},
# TypeScript - Type checking
typescript = {
enabled = false,
install_method = "npm",
},
# Jest - JavaScript testing framework
jest = {
enabled = true,
install_method = "npm",
},
},
# CI Features
# High-level feature flags for CI behavior
features = {
enable_ci_cd = true,
enable_pre_commit = true,
generate_taplo_config = true,
generate_contributing = true,
generate_security = true,
generate_code_of_conduct = true,
generate_dockerfiles = true,
enable_cross_compilation = true,
},
# CI Provider Configurations
# Settings for GitHub Actions, Woodpecker, GitLab CI, etc.
ci_providers = {
# GitHub Actions
github_actions = {
enabled = true,
branches_push = "main,develop",
branches_pr = "main",
},
# Woodpecker CI
woodpecker = {
enabled = true,
},
},
# CI Settings
settings = {
parallel_jobs = 1,
job_timeout_minutes = 1,
require_status_checks = true,
run_on_draft_prs = true,
},
},
}

View File

@ -0,0 +1,203 @@
# CI Configuration - Nickel Format
# Auto-generated by dev-system CI installer
#
# This file is managed by TypeDialog using nickel-roundtrip.
# Edit via: .typedialog/ci/configure.sh
# Or manually edit and validate with: nickel typecheck config.ncl
#
# Documentation: nickel doc config.ncl
{
# CI namespace - all configuration lives under 'ci'
ci = {
# Project Information
# Detected languages and primary language for this project
project = {
# Project name
name = "",
# Project description
description = "",
# Project website or documentation site URL
site_url = "",
# Project repository URL (GitHub, GitLab, etc.)
repo_url = "",
# Languages detected in codebase (auto-detected by installer)
detected_languages = [
"rust",
"markdown",
"nickel"
],
# Primary language (determines default tooling)
primary_language = "rust",
},
# CI Tools Configuration
# Each tool can be enabled/disabled and configured here
tools = {
# Taplo - TOML formatter and linter
taplo = {
enabled = true,
install_method = "cargo",
},
# YAMLlint - YAML formatter and linter
yamllint = {
enabled = true,
install_method = "pip",
},
# Clippy - Rust linting tool
clippy = {
enabled = true,
install_method = "cargo",
deny_warnings = true,
},
# Cargo Audit - Security vulnerability scanner
audit = {
enabled = true,
install_method = "cargo",
},
# Cargo Deny - Dependency checker
deny = {
enabled = true,
install_method = "cargo",
},
# Cargo SBOM - Software Bill of Materials
sbom = {
enabled = true,
install_method = "cargo",
},
# LLVM Coverage - Code coverage tool
llvm-cov = {
enabled = true,
install_method = "cargo",
},
# Shellcheck - Bash/shell script linter
shellcheck = {
enabled = true,
install_method = "brew",
},
# Shfmt - Shell script formatter
shfmt = {
enabled = true,
install_method = "brew",
},
# Markdownlint - Markdown linter
markdownlint = {
enabled = true,
install_method = "npm",
},
# Vale - Prose linter
vale = {
enabled = true,
install_method = "brew",
},
# Nickel - Configuration language type checker
nickel = {
enabled = true,
install_method = "brew",
check_all = true,
},
# NuShell - Shell script validator
nushell = {
enabled = true,
install_method = "builtin",
check_all = true,
},
# Ruff - Fast Python linter
ruff = {
enabled = true,
install_method = "pip",
},
# Black - Python code formatter
black = {
enabled = true,
install_method = "pip",
},
# Mypy - Python static type checker
mypy = {
enabled = false,
install_method = "pip",
},
# Pytest - Python testing framework
pytest = {
enabled = true,
install_method = "pip",
},
# Golangci-lint - Go linter aggregator
"golangci-lint" = {
enabled = true,
install_method = "brew",
},
# Gofmt - Go code formatter
gofmt = {
enabled = true,
install_method = "builtin",
},
# Staticcheck - Go static analysis
staticcheck = {
enabled = true,
install_method = "brew",
},
# Gosec - Go security checker
gosec = {
enabled = false,
install_method = "brew",
},
# ESLint - JavaScript linter
eslint = {
enabled = true,
install_method = "npm",
},
# Prettier - Code formatter
prettier = {
enabled = true,
install_method = "npm",
},
# TypeScript - Type checking
typescript = {
enabled = false,
install_method = "npm",
},
# Jest - JavaScript testing framework
jest = {
enabled = true,
install_method = "npm",
},
},
# CI Features
# High-level feature flags for CI behavior
features = {
enable_ci_cd = true,
enable_pre_commit = true,
generate_taplo_config = true,
generate_contributing = true,
generate_security = true,
generate_code_of_conduct = true,
generate_dockerfiles = true,
enable_cross_compilation = true,
},
# CI Provider Configurations
# Settings for GitHub Actions, Woodpecker, GitLab CI, etc.
ci_providers = {
# GitHub Actions
github_actions = {
enabled = true,
branches_push = "main,develop",
branches_pr = "main",
},
# Woodpecker CI
woodpecker = {
enabled = true,
},
},
# CI Settings
settings = {
parallel_jobs = 1,
job_timeout_minutes = 1,
require_status_checks = true,
run_on_draft_prs = true,
},
},
}

116
.typedialog/ci/configure.sh Executable file
View File

@ -0,0 +1,116 @@
#!/usr/bin/env bash
# CI Configuration Script
# Auto-generated by dev-system/ci installer
#
# Interactive configuration for CI tools using TypeDialog.
# Uses Nickel format for configuration files.
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
TYPEDIALOG_CI="${SCRIPT_DIR}"
# Source envrc to load fragment paths and other environment variables
if [[ -f "${TYPEDIALOG_CI}/envrc" ]]; then
# shellcheck source=/dev/null
source "${TYPEDIALOG_CI}/envrc"
fi
# Configuration files
FORM_FILE="${TYPEDIALOG_CI}/form.toml"
CONFIG_FILE="${TYPEDIALOG_CI}/config.ncl"
# NCL_TEMPLATE is set by envrc (cascading: local → Tools)
# If not set, use default from Tools
NCL_TEMPLATE="${NCL_TEMPLATE:-${TOOLS_PATH}/dev-system/ci/templates/config.ncl.j2}"
# TypeDialog environment variables (can be overridden)
# Port for web backend (default: 9000)
export TYPEDIALOG_PORT="${TYPEDIALOG_PORT:-9000}"
# Host for web backend (default: localhost)
export TYPEDIALOG_HOST="${TYPEDIALOG_HOST:-localhost}"
# Locale for form localization (default: system locale)
export TYPEDIALOG_LANG="${TYPEDIALOG_LANG:-${LANG:-en_US.UTF-8}}"
# Detect which TypeDialog backend to use (default: web)
BACKEND="${1:-web}"
# Validate backend
case "$BACKEND" in
cli|tui|web)
;;
*)
echo "Usage: $0 [cli|tui|web]"
echo ""
echo "Launches TypeDialog for interactive CI configuration."
echo "Backend options:"
echo " cli - Command-line interface (simple prompts)"
echo " tui - Terminal UI (interactive panels)"
echo " web - Web server (browser-based) [default]"
exit 1
;;
esac
# Check if form exists
if [[ ! -f "$FORM_FILE" ]]; then
echo "Error: Form file not found: $FORM_FILE"
exit 1
fi
# Create backup if config exists
if [[ -f "$CONFIG_FILE" ]]; then
BACKUP="${CONFIG_FILE}.$(date +%Y%m%d_%H%M%S).bak"
cp "$CONFIG_FILE" "$BACKUP"
echo " Backed up existing config to: $(basename "$BACKUP")"
fi
# Launch TypeDialog with Nickel roundtrip (preserves Nickel format)
echo "🔧 Launching TypeDialog ($BACKEND backend)..."
echo ""
# Show web server info if using web backend
if [[ "$BACKEND" == "web" ]]; then
echo "🌐 Web server will start on: http://${TYPEDIALOG_HOST}:${TYPEDIALOG_PORT}"
echo " (Override with: TYPEDIALOG_PORT=8080 TYPEDIALOG_HOST=0.0.0.0 $0)"
echo ""
fi
# Build nickel-roundtrip command with optional template
NCL_TEMPLATE_ARG=""
if [[ -f "$NCL_TEMPLATE" ]]; then
NCL_TEMPLATE_ARG="--ncl-template $NCL_TEMPLATE"
echo " Using Nickel template: $NCL_TEMPLATE"
fi
case "$BACKEND" in
cli)
typedialog nickel-roundtrip "$CONFIG_FILE" "$FORM_FILE" --output "$CONFIG_FILE" $NCL_TEMPLATE_ARG
;;
tui)
typedialog-tui nickel-roundtrip "$CONFIG_FILE" "$FORM_FILE" --output "$CONFIG_FILE" $NCL_TEMPLATE_ARG
;;
web)
typedialog-web nickel-roundtrip "$CONFIG_FILE" "$FORM_FILE" --output "$CONFIG_FILE" $NCL_TEMPLATE_ARG
;;
esac
EXIT_CODE=$?
if [[ $EXIT_CODE -eq 0 ]]; then
echo ""
echo "✅ Configuration saved to: $CONFIG_FILE"
echo ""
echo "Next steps:"
echo " - Review the configuration: cat $CONFIG_FILE"
echo " - Apply CI tools: (run your CI setup command)"
echo " - Re-run this script anytime to update: $0"
else
echo ""
echo "❌ Configuration cancelled or failed (exit code: $EXIT_CODE)"
if [[ -f "${CONFIG_FILE}.bak" ]]; then
echo " Previous config restored from backup"
fi
exit $EXIT_CODE
fi

27
.typedialog/ci/envrc Normal file
View File

@ -0,0 +1,27 @@
# Auto-generated by dev-system/ci
#
# Cascading Path Strategy:
# 1. Local files in .typedialog/ci/ take precedence (overrides)
# 2. Central files in $TOOLS_PATH/dev-system/ci/ as fallback (defaults)
#
# To customize: Create file in .typedialog/ci/{schemas,validators,defaults,fragments}/
# Your local version will be used instead of the Tools version.
# Nickel import paths (cascading: local → Tools)
export NICKEL_IMPORT_PATH="schemas:$TOOLS_PATH/dev-system/ci/schemas:validators:$TOOLS_PATH/dev-system/ci/validators:defaults:$TOOLS_PATH/dev-system/ci/defaults"
# TypeDialog fragment search paths (cascading: local → Tools)
export TYPEDIALOG_FRAGMENT_PATH=".typedialog/ci:$TOOLS_PATH/dev-system/ci/forms"
# Nickel template for config.ncl generation (with cascading)
# Local template takes precedence if exists
if [[ -f ".typedialog/ci/config.ncl.j2" ]]; then
export NCL_TEMPLATE=".typedialog/ci/config.ncl.j2"
else
export NCL_TEMPLATE="$TOOLS_PATH/dev-system/ci/templates/config.ncl.j2"
fi
# TypeDialog web backend configuration (override if needed)
export TYPEDIALOG_PORT=${TYPEDIALOG_PORT:-9000}
export TYPEDIALOG_HOST=${TYPEDIALOG_HOST:-localhost}
export TYPEDIALOG_LANG=${TYPEDIALOG_LANG:-${LANG:-en_US.UTF-8}}

231
.typedialog/ci/form.toml Normal file
View File

@ -0,0 +1,231 @@
description = "Interactive configuration for continuous integration and code quality tools"
display_mode = "complete"
locales_path = ""
name = "CI Configuration Form"
[[elements]]
border_bottom = true
border_top = true
name = "project_header"
title = "📦 Project Information"
type = "section_header"
[[elements]]
help = "Name of the project"
name = "project_name"
nickel_path = [
"ci",
"project",
"name",
]
placeholder = "my-project"
prompt = "Project name"
required = true
type = "text"
[[elements]]
help = "Optional description"
name = "project_description"
nickel_path = [
"ci",
"project",
"description",
]
placeholder = "Brief description of what this project does"
prompt = "Project description"
required = false
type = "text"
[[elements]]
default = ""
help = "Project website or documentation site URL"
name = "project_site_url"
nickel_path = [
"ci",
"project",
"site_url",
]
placeholder = "https://example.com"
prompt = "Project Site URL"
required = false
type = "text"
[[elements]]
default = ""
help = "Project repository URL (GitHub, GitLab, etc.)"
name = "project_repo_url"
nickel_path = [
"ci",
"project",
"repo_url",
]
placeholder = "https://github.com/user/repo"
prompt = "Project Repo URL"
required = false
type = "text"
[[elements]]
border_bottom = true
border_top = true
name = "languages_header"
title = "🔍 Detected Languages"
type = "section_header"
[[elements]]
default = "rust"
display_mode = "grid"
help = "Select all languages detected or used in the project"
min_selected = 1
name = "detected_languages"
nickel_path = [
"ci",
"project",
"detected_languages",
]
prompt = "Which languages are used in this project?"
required = true
searchable = true
type = "multiselect"
[[elements.options]]
value = "rust"
label = "🦀 Rust"
[[elements.options]]
value = "nushell"
label = "🐚 NuShell"
[[elements.options]]
value = "nickel"
label = "⚙️ Nickel"
[[elements.options]]
value = "bash"
label = "🔧 Bash/Shell"
[[elements.options]]
value = "markdown"
label = "📝 Markdown/Documentation"
[[elements]]
help = "Main language used for defaults (e.g., in GitHub Actions workflows)"
name = "primary_language"
nickel_path = [
"ci",
"project",
"primary_language",
]
options_from = "detected_languages"
prompt = "Primary language"
required = true
type = "select"
default = "rust"
[[elements.options]]
value = "rust"
label = "🦀 Rust"
[[elements.options]]
value = "nushell"
label = "🐚 NuShell"
[[elements.options]]
value = "nickel"
label = "⚙️ Nickel"
[[elements.options]]
value = "bash"
label = "🔧 Bash"
[[elements.options]]
value = "markdown"
label = "📝 Markdown"
[[elements]]
includes = ["fragments/rust-tools.toml"]
name = "rust_tools_group"
type = "group"
when = "rust in detected_languages"
[[elements]]
includes = ["fragments/nushell-tools.toml"]
name = "nushell_tools_group"
type = "group"
when = "nushell in detected_languages"
[[elements]]
includes = ["fragments/nickel-tools.toml"]
name = "nickel_tools_group"
type = "group"
when = "nickel in detected_languages"
[[elements]]
includes = ["fragments/bash-tools.toml"]
name = "bash_tools_group"
type = "group"
when = "bash in detected_languages"
[[elements]]
includes = ["fragments/markdown-tools.toml"]
name = "markdown_tools_group"
type = "group"
when = "markdown in detected_languages"
[[elements]]
includes = ["fragments/general-tools.toml"]
name = "general_tools_group"
type = "group"
[[elements]]
border_bottom = true
border_top = true
name = "ci_cd_header"
title = "🔄 CI/CD Configuration"
type = "section_header"
[[elements]]
default = "true"
help = "Set up continuous integration and deployment pipelines"
name = "enable_ci_cd"
nickel_path = [
"ci",
"features",
"enable_ci_cd",
]
prompt = "Enable CI/CD integration?"
type = "confirm"
[[elements]]
includes = ["fragments/ci-providers.toml"]
name = "ci_providers_group"
type = "group"
when = "enable_ci_cd == true"
[[elements]]
includes = ["fragments/ci-settings.toml"]
name = "ci_settings_group"
type = "group"
when = "enable_ci_cd == true"
[[elements]]
includes = ["fragments/build-deployment.toml"]
name = "build_deployment_group"
type = "group"
when = "enable_ci_cd == true"
[[elements]]
includes = ["fragments/documentation.toml"]
name = "documentation_group"
type = "group"
[[elements]]
border_bottom = true
border_top = true
name = "confirmation_header"
title = "✅ Ready to Install"
type = "section_header"
[[elements]]
content = "Review your configuration above. After confirming, the CI system will be installed with your chosen settings."
name = "confirmation_footer"
type = "footer"

196
justfiles/ci.just Normal file
View File

@ -0,0 +1,196 @@
# CI/CD Just Recipes
# Generated by dev-system/ci - Dynamic template
# Provides `just` recipes for running CI checks locally
# Based on detected languages and enabled tools
# Show CI help
[doc("Show ci help")]
help:
@echo "CI/CD Just Recipes"
@echo ""
@echo "Main Commands:"
@echo " just ci-full - Run all CI checks"
@echo " just ci-fmt - Format code"
@echo " just ci-lint - Run all linting checks"
@echo " just ci-test - Run all tests"
@echo " just ci-audit - Run security audits"
@echo ""
@echo "Language-Specific:"
@echo " just ci-lint-rust - Lint Rust (clippy)"
@echo " just ci-fmt-toml - Check TOML formatting"
@echo " just ci-lint-toml - Lint TOML files (taplo)"
@echo " just ci-lint-nickel - Type check Nickel"
@echo " just ci-lint-markdown - Lint Markdown (markdownlint-cli2)"
@echo " just ci-lint-prose - Lint prose (Vale)"
@echo ""
@echo "Other:"
@echo " just ci-sbom - Generate SBOM"
@echo " just ci-test-coverage - Run tests with coverage"
@echo " just setup-hooks - Install pre-commit hooks"
@echo " just hooks-run-all - Run pre-commit on all files"
@echo " just clean - Clean build artifacts"
# Run all CI checks
ci-full: ci-lint-rust ci-fmt-toml ci-lint-toml ci-lint-nickel ci-lint-markdown ci-lint-prose ci-test ci-audit
@echo "✅ All CI checks passed!"
# ==============================================================================
# Formatting Checks
# ==============================================================================
# Check Rust code formatting
ci-fmt:
@echo "📝 Checking Rust code formatting..."
cargo fmt --all -- --check
# Check TOML file formatting
ci-fmt-toml:
@echo "📝 Checking TOML formatting..."
@command -v taplo >/dev/null || (echo "❌ taplo not installed: cargo install taplo-cli"; exit 1)
taplo format --check
# Format all code
fmt:
@echo "🎨 Formatting code..."
cargo fmt --all
just fmt-toml
# Format TOML files
fmt-toml:
@echo "🎨 Formatting TOML files..."
@command -v taplo >/dev/null || (echo "❌ taplo not installed: cargo install taplo-cli"; exit 1)
taplo format
# ==============================================================================
# Linting
# ==============================================================================
# Run all linting checks
ci-lint: ci-lint-rust ci-lint-toml ci-lint-nickel ci-lint-markdown ci-lint-prose
@echo "✅ All lint checks passed!"
# Lint Rust code
ci-lint-rust:
@echo "🔍 Linting Rust (clippy)..."
cargo clippy --all-targets --all-features -- -D warnings
# Lint TOML files
ci-lint-toml:
@echo "🔍 Linting TOML files..."
@command -v taplo >/dev/null || (echo "❌ taplo not installed: cargo install taplo-cli"; exit 1)
taplo lint
# Lint Nickel schemas
ci-lint-nickel:
#!/usr/bin/env bash
echo "🔍 Type checking Nickel..."
SCHEMAS=$(find . -name "*.ncl" -type f \
! -path "./target/*" \
! -path "./.git/*" \
! -path "./node_modules/*" \
| head -20)
if [ -z "$SCHEMAS" ]; then
echo " No Nickel schemas found"
exit 0
fi
export NICKEL_IMPORT_PATH="/Users/Akasha/Tools/dev-system/ci/schemas:/Users/Akasha/Tools/dev-system/ci/validators:/Users/Akasha/Tools/dev-system/ci/defaults:."
for schema in $SCHEMAS; do
echo " Checking: $schema"
nickel typecheck "$schema" || exit 1
done
echo " ✓ All Nickel schemas valid"
# Lint Markdown files
ci-lint-markdown:
@echo "🔍 Linting Markdown files..."
@command -v markdownlint-cli2 >/dev/null || (echo "❌ markdownlint-cli2 not installed: npm install markdownlint-cli2"; exit 1)
markdownlint-cli2 "**/*.md" "#node_modules" "#.git"
# Lint prose/documentation
ci-lint-prose:
@echo "🔍 Linting prose with Vale..."
@command -v vale >/dev/null || (echo "❌ vale not installed: brew install vale"; exit 1)
vale sync
vale .
# ==============================================================================
# Testing
# ==============================================================================
# Run all tests
ci-test:
@echo "🧪 Running tests..."
cargo test --workspace --all-features
# Run tests with coverage (requires cargo-llvm-cov)
ci-test-coverage:
@echo "📊 Running tests with coverage..."
cargo llvm-cov --all-features --lcov --output-path lcov.info
# ==============================================================================
# Security Auditing
# ==============================================================================
# Run all security audits
ci-audit: ci-audit-rust
@echo "✅ All security audits passed!"
# Audit Rust dependencies
ci-audit-rust:
@echo "🔒 Auditing Rust dependencies..."
cargo audit
cargo deny check licenses
cargo deny check advisories
# Generate SBOM
ci-sbom:
@echo "📦 Generating Software Bill of Materials..."
cargo sbom > sbom.json
@echo "✓ SBOM generated: sbom.json"
# ==============================================================================
# Documentation
# ==============================================================================
# Generate documentation
docs:
@echo "📚 Generating documentation..."
cargo doc --no-deps --open
# Check documentation
ci-docs:
@echo "📚 Checking documentation..."
cargo doc --no-deps --document-private-items 2>&1 | grep -i "warning:" && exit 1 || true
@echo "✓ Documentation check passed"
# ==============================================================================
# Pre-commit Setup
# ==============================================================================
# Install pre-commit hooks
setup-hooks:
@echo "🪝 Installing pre-commit hooks..."
@if command -v pre-commit &> /dev/null; then \
pre-commit install && pre-commit install --hook-type pre-push; \
echo "✓ Pre-commit hooks installed"; \
else \
echo "❌ pre-commit not found. Install with: pip install pre-commit"; \
exit 1; \
fi
# Run pre-commit on all files
hooks-run-all:
@echo "🪝 Running pre-commit on all files..."
pre-commit run --all-files
# ==============================================================================
# Utility Commands
# ==============================================================================
# Clean build artifacts
clean:
@echo "🧹 Cleaning..."
cargo clean
rm -rf target/
rm -f sbom.json lcov.info

1
justfiles/rust-axum Symbolic link
View File

@ -0,0 +1 @@
/Users/Akasha/Tools/dev-system/languages/rust/just-modules/axum

1
justfiles/rust-cargo Symbolic link
View File

@ -0,0 +1 @@
/Users/Akasha/Tools/dev-system/languages/rust/just-modules/cargo

1
justfiles/rust-leptos Symbolic link
View File

@ -0,0 +1 @@
/Users/Akasha/Tools/dev-system/languages/rust/just-modules/leptos