# syntaxis Provisioning Quick Reference

Fast reference for provisioning, distribution, and CI/CD commands.

## Local Development

### Create Bundle (Current Platform)
```bash
nu scripts/provisioning/pack.nu
# Output: dist/syntaxis-v0.1.0-x86_64-linux.tar.gz
```

### Create Bundle (Specific Platform)
```bash
nu scripts/provisioning/pack.nu --target aarch64-apple-darwin --output dist/
```

### List Available Targets
```bash
nu scripts/provisioning/pack.nu --list-targets
```

### Dry Run (Preview)
```bash
nu scripts/provisioning/pack.nu --dry-run
```

### Install from Bundle (Complete)
```bash
nu scripts/provisioning/provctl.nu full-install --bundle bundle.tar.gz
```

### Install Binaries Only
```bash
tar -xzf bundle.tar.gz
cd syntaxis-v0.1.0-*
nu scripts/provisioning/install.nu --source ./bin --prefix ~/.local
```

### Deploy Configs Only
```bash
nu scripts/provisioning/deploy.nu --source ./bundle/configs
```

### Check Installation Status
```bash
nu scripts/provisioning/provctl.nu status
```

### Verify Bundle Integrity
```bash
nu scripts/provisioning/provctl.nu verify-bundle --bundle bundle.tar.gz
```

## Bash Installer (Offline)

For systems without NuShell installed:

```bash
# Extract bundle
tar -xzf bundle.tar.gz

# Interactive installation
cd syntaxis-v0.1.0-*
./install.sh

# Verify before installing
./install.sh --verify

# Install to custom location
./install.sh --prefix /opt/syntaxis

# Force overwrite without prompts
./install.sh --force --no-backup

# Dry run to preview
./install.sh --dry-run

# Unattended mode
./install.sh --unattended --prefix ~/.local
```

## GitHub Releases

### Create Release (Local)
```bash
# 1. Tag your release
git tag v0.2.0
git push origin v0.2.0

# 2. GitHub Actions automatically:
#    - Builds all 5 platforms
#    - Creates bundles
#    - Generates checksums
#    - Creates GitHub Release
#    - Publishes documentation
```

### Download from Release
```bash
# Get latest bundle for your platform
curl -L https://github.com/syntaxis/syntaxis/releases/latest/download/syntaxis-x86_64-linux-v0.1.0.tar.gz -o bundle.tar.gz

# Verify checksums
sha256sum -c SHA256SUMS

# Install
tar -xzf bundle.tar.gz
cd syntaxis-*
./install.sh
```

## Provisioning Configuration

All behavior is controlled by `configs/provisioning.toml`:

### Key Sections
- `[targets]` - Platforms to build (x86_64-linux, aarch64-macos, etc.)
- `[artifacts]` - What to include (binaries, configs, docs)
- `[packaging]` - Format options (tar.gz, zip, deb, rpm)
- `[build]` - Cargo build options (release, optimization)
- `[bundle]` - Bundle structure and manifest

### Modify Configuration
```bash
nano configs/provisioning.toml
```

## Workflows

### Build Workflow (On Every Commit)
- **File**: `.github/workflows/build.yml`
- **Triggers**: Push to main/develop, all PRs
- **Jobs**: Format, lint, test, check, audit, builds
- **Artifacts**: Debug/release binaries (Ubuntu, macOS, Windows)

### Release Workflow (On Version Tag)
- **File**: `.github/workflows/release.yml`
- **Triggers**: Push tags (v*)
- **Jobs**: Multi-platform builds, bundle creation, GitHub release
- **Artifacts**: bundles, checksums, documentation

## Utilities

### Detect Platform
```bash
use scripts/provisioning/common/platform.nu

current-target              # Get current platform target
detect-os                   # Get OS: linux, macos, windows
detect-arch                 # Get arch: x86_64, aarch64
available-targets config    # List enabled targets
```

### Manifest Operations
```bash
use scripts/provisioning/common/manifest.nu

load manifest.toml          # Read manifest
create version target fmt   # Create new manifest
validate manifest            # Check manifest validity
info manifest.toml          # Display manifest info
```

### Validation
```bash
use scripts/provisioning/common/validate.nu

sha256 file                 # Calculate checksum
generate-checksums dir      # Batch checksums
verify-checksums file dir   # Verify all checksums
validate-bundle-structure   # Check bundle format
validate-config file        # Check provisioning.toml
```

## Manifests

### Installation Manifest
Location: `~/.syntaxis/manifest.toml`
Created by: `install.nu`
Contains: Installed binaries, timestamps, installation prefix

### Deployment Manifest
Location: `~/.syntaxis/deployment.toml`
Created by: `deploy.nu`
Contains: Deployed configs, timestamps, config directory

### Bundle Manifest
Location: Inside bundle: `manifest.toml`
Created by: `pack.nu`
Contains: Bundle metadata, artifact list, checksums

## Environment Variables

```bash
# Configuration directory
export SYNTAXIS_CONFIG_DIR=~/.config/syntaxis

# Data directory
export SYNTAXIS_DATA_DIR=~/.local/share/syntaxis

# Provisioning config
export PROVISIONING_CONFIG=configs/provisioning.toml
```

## Common Tasks

### Build & Test Locally
```bash
# 1. Build
cargo build --release

# 2. Create bundle
nu scripts/provisioning/pack.nu --verify

# 3. Test install
mkdir -p /tmp/test-install
nu scripts/provisioning/provctl.nu full-install \
  --bundle dist/*.tar.gz \
  --prefix /tmp/test-install

# 4. Verify
/tmp/test-install/bin/syntaxis-cli --version
```

### Prepare Release
```bash
# 1. Test all checks
cargo test --all
cargo clippy --all-targets
cargo fmt --all
cargo audit

# 2. Create and push tag
git tag v0.2.0
git push origin v0.2.0

# 3. Wait for CI/CD to complete
# 4. Check GitHub Releases page
```

### Install for Development
```bash
# Unattended install to ~/.local
nu scripts/provisioning/provctl.nu full-install \
  --bundle dist/syntaxis-v0.1.0-*.tar.gz \
  --prefix ~/.local \
  --verify

# Add to PATH
export PATH="$HOME/.local/bin:$PATH"

# Verify
syntaxis-cli --version
```

### Upgrade Existing Installation
```bash
# Download new bundle
curl -O https://github.com/syntaxis/syntaxis/releases/download/v0.2.0/bundle.tar.gz

# Install with backup
nu scripts/provisioning/provctl.nu full-install --bundle bundle.tar.gz

# Verify new version
syntaxis-cli --version
```

### Deploy to Multiple Machines
```bash
#!/bin/bash
# distribute.sh

BUNDLE="$1"
SERVERS=("server1" "server2" "server3")

for server in "${SERVERS[@]}"; do
    echo "Deploying to: $server"
    scp "$BUNDLE" "user@$server:/tmp/"
    ssh "user@$server" "
        cd /tmp
        tar -xzf $(basename $BUNDLE)
        ./syntaxis-*/install.sh --unattended
    "
done
```

## Scripts Location

```
scripts/provisioning/
├── pack.nu              # Create bundles
├── unpack.nu            # Extract bundles
├── install.nu           # Install binaries
├── deploy.nu            # Deploy configs
├── provctl.nu           # Orchestrator
├── install.sh           # Bash offline installer
├── common/
│   ├── platform.nu      # Platform detection
│   ├── manifest.nu      # Manifest handling
│   └── validate.nu      # Integrity checking
└── README.md            # Full documentation
```

## Troubleshooting

### Bundle creation fails
```bash
# Check if binaries are built
ls target/release/syntaxis-*

# Run build first if needed
cargo build --release

# Try with dry-run
nu scripts/provisioning/pack.nu --dry-run
```

### Installation fails
```bash
# Check permissions
ls -la ~/.local/bin
ls -la ~/.config/syntaxis

# Try with sudo (not recommended)
# Or install to different prefix
./install.sh --prefix ~/local-install

# Check manifest
cat ~/.syntaxis/manifest.toml
```

### Checksum mismatch
```bash
# Download new checksums
curl -O https://github.com/.../SHA256SUMS

# Verify again
sha256sum -c SHA256SUMS --ignore-missing

# If still fails, bundle may be corrupted
rm bundle.tar.gz && wget ... # re-download
```

## Key Files

| File | Purpose |
|------|---------|
| `configs/provisioning.toml` | Provisioning configuration |
| `scripts/provisioning/` | Provisioning scripts (pack, install, etc) |
| `.github/workflows/build.yml` | Continuous integration |
| `.github/workflows/release.yml` | Release automation |
| `docs/provisioning.md` | Complete provisioning guide |
| `scripts/provisioning/README.md` | Detailed provisioning docs |

## Documentation

- **Full Guide**: See `docs/provisioning.md`
- **Provisioning System**: See `scripts/provisioning/README.md`
- **Project Guide**: See `CLAUDE.md`
- **Quick Start**: See `README.md`

---

**Last Updated**: 2025-11-17
**Version**: 0.1.0
