chore: add typedialog and just
This commit is contained in:
parent
2d87d60bb5
commit
591f0e0206
320
.typedialog/ci/README.md
Normal file
320
.typedialog/ci/README.md
Normal 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
203
.typedialog/ci/config.ncl
Normal 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,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
203
.typedialog/ci/config.ncl.20260312_005551.bak
Normal file
203
.typedialog/ci/config.ncl.20260312_005551.bak
Normal 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
116
.typedialog/ci/configure.sh
Executable 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
27
.typedialog/ci/envrc
Normal 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
231
.typedialog/ci/form.toml
Normal 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
196
justfiles/ci.just
Normal 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
1
justfiles/rust-axum
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
/Users/Akasha/Tools/dev-system/languages/rust/just-modules/axum
|
||||||
1
justfiles/rust-cargo
Symbolic link
1
justfiles/rust-cargo
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
/Users/Akasha/Tools/dev-system/languages/rust/just-modules/cargo
|
||||||
1
justfiles/rust-leptos
Symbolic link
1
justfiles/rust-leptos
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
/Users/Akasha/Tools/dev-system/languages/rust/just-modules/leptos
|
||||||
Loading…
x
Reference in New Issue
Block a user