diff --git a/.github/template-version.txt b/.github/template-version.txt index 1df3f9e..521826e 100644 --- a/.github/template-version.txt +++ b/.github/template-version.txt @@ -1 +1 @@ -reloaded-templates-rust:1.1.0 +reloaded-templates-rust:1.2.0 diff --git a/.github/workflows/deploy-mkdocs.yml b/.github/workflows/deploy-mkdocs.yml index 576c60f..f83e55d 100644 --- a/.github/workflows/deploy-mkdocs.yml +++ b/.github/workflows/deploy-mkdocs.yml @@ -5,7 +5,7 @@ on: push: branches: [main] paths: - - "docs/**" + - "src/docs/**" jobs: build: @@ -18,7 +18,7 @@ jobs: - name: Deploy MkDocs uses: Reloaded-Project/devops-mkdocs@v1 with: - config-file: docs/mkdocs.yml - requirements: ./docs/requirements.txt + config-file: src/docs/mkdocs.yml + requirements: ./src/docs/requirements.txt publish-to-pages: ${{ github.event_name == 'push' }} checkout-current-repo: true diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index c630cb3..c9ab76c 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -141,10 +141,8 @@ jobs: ;; esac - format: - name: Format + format-check: runs-on: ubuntu-latest - steps: - uses: actions/checkout@v6 @@ -204,7 +202,7 @@ jobs: permissions: contents: write - needs: [ci, format, semver-checks] + needs: [ci, format-check, semver-checks] if: startsWith(github.ref, 'refs/tags/') runs-on: ubuntu-latest steps: diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..fd5e61f --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "[yaml]": { + "editor.formatOnSave": false + } +} diff --git a/src/.cargo/verify.ps1 b/src/.cargo/verify.ps1 index ecd089b..975aca4 100644 --- a/src/.cargo/verify.ps1 +++ b/src/.cargo/verify.ps1 @@ -1,13 +1,39 @@ # Post-change verification script # All steps must pass without warnings # Keep in sync with verify.sh +# Script is relative to git repo root; search if not found # # Note: reloaded-code-serdesai is async-only. # Blocking mode is validated for core and models-dev. # reloaded-code-bubblewrap is Linux-only; all bubblewrap steps # are skipped on non-Linux platforms. -$ErrorActionPreference = "Stop" +$originalDir = Get-Location +$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path +$projectRoot = Join-Path $scriptDir ".." +$originalRustdocFlags = $env:RUSTDOCFLAGS +Set-Location $projectRoot -ErrorAction Stop + +$script:exitCode = 0 +$script:failedCommands = @() + +function Register-CommandFailure { + param( + [string]$DisplayCommand, + [int]$Code, + [string]$Message = "" + ) + + Write-Host ("Command failed with exit code " + $Code + ": " + $DisplayCommand) + if ($Message -ne "") { + Write-Host $Message + } + + $script:failedCommands += $DisplayCommand + if ($script:exitCode -eq 0) { + $script:exitCode = $Code + } +} function Invoke-LoggedCommand { param( @@ -15,22 +41,26 @@ function Invoke-LoggedCommand { [string[]]$Arguments ) - if ($Arguments.Count -gt 0) { - Write-Host ($Command + " " + ($Arguments -join " ")) + $displayCommand = if ($Arguments.Count -gt 0) { + $Command + " " + ($Arguments -join " ") } else { - Write-Host $Command + $Command } - & $Command @Arguments - if ($LASTEXITCODE -ne 0) { - throw "Command '$Command' failed with exit code $LASTEXITCODE" + Write-Host $displayCommand + + try { + & $Command @Arguments + $commandExitCode = $LASTEXITCODE + } catch { + Register-CommandFailure $displayCommand 1 $_.Exception.Message + return } -} -$originalDir = Get-Location -$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path -$projectRoot = Join-Path $scriptDir ".." -Set-Location $projectRoot + if ($commandExitCode -ne 0) { + Register-CommandFailure $displayCommand $commandExitCode + } +} $onLinux = $IsLinux -eq $true @@ -67,7 +97,6 @@ try { Write-Host "Docs..." $docArgs = @("--workspace", "--document-private-items", "--no-deps", "--quiet", "--exclude", "reloaded-code-bubblewrap") - $originalRustdocFlags = $env:RUSTDOCFLAGS $env:RUSTDOCFLAGS = "-D warnings" try { Invoke-LoggedCommand "cargo" (@("doc") + $docArgs) @@ -78,6 +107,9 @@ try { Write-Host "Formatting..." Invoke-LoggedCommand "cargo" @("fmt", "--all", "--quiet") + Write-Host "Publish dry-run..." + Invoke-LoggedCommand "cargo" @("publish", "--dry-run", "--allow-dirty", "--quiet", "--workspace") + Write-Host "Linux-only feature coverage..." if ($onLinux) { Write-Host "Building (linux async features)..." @@ -108,19 +140,28 @@ try { Invoke-LoggedCommand "cargo" @("clippy", "-p", "reloaded-code-core", "--no-default-features", "--features", "blocking,linux-bubblewrap", "--quiet", "--", "-D", "warnings") Write-Host "Docs (linux-only package)..." - $linuxRustdocFlags = $env:RUSTDOCFLAGS $env:RUSTDOCFLAGS = "-D warnings" try { Invoke-LoggedCommand "cargo" @("doc", "-p", "reloaded-code-bubblewrap", "--document-private-items", "--no-deps", "--quiet") } finally { - $env:RUSTDOCFLAGS = $linuxRustdocFlags + $env:RUSTDOCFLAGS = $originalRustdocFlags } } else { Write-Host " (skipped - not Linux)" } +} finally { + $env:RUSTDOCFLAGS = $originalRustdocFlags + Set-Location $originalDir +} +if ($script:exitCode -eq 0) { Write-Host "All checks passed!" +} else { + Write-Host "Verification failed." + Write-Host "Failed commands:" + foreach ($failedCommand in $script:failedCommands) { + Write-Host (" - " + $failedCommand) + } } -finally { - Set-Location $originalDir -} + +exit $script:exitCode diff --git a/src/.cargo/verify.sh b/src/.cargo/verify.sh index 8547b1e..2bd7a43 100755 --- a/src/.cargo/verify.sh +++ b/src/.cargo/verify.sh @@ -2,17 +2,29 @@ # Post-change verification script # All steps must pass without warnings # Keep in sync with verify.ps1 +# Script is relative to git repo root; search if not found # # Note: reloaded-code-serdesai is async-only. # Blocking mode is validated for core and models-dev. # reloaded-code-bubblewrap is Linux-only; all bubblewrap steps # are skipped on non-Linux platforms. -set -e - run_cmd() { echo "$*" + "$@" + local status=$? + if [ "$status" -eq 0 ]; then + return 0 + fi + + printf 'Command failed with exit code %s: %s\n' "$status" "$*" >&2 + FAILED_COMMANDS+=("$*") + if [ "$EXIT_CODE" -eq 0 ]; then + EXIT_CODE=$status + fi + + return 0 } ORIGINAL_DIR="$(pwd)" @@ -22,6 +34,9 @@ cd "$PROJECT_ROOT" trap 'cd "$ORIGINAL_DIR"' EXIT +EXIT_CODE=0 +FAILED_COMMANDS=() + IS_LINUX=false if [ "$(uname -s)" = "Linux" ]; then IS_LINUX=true @@ -64,6 +79,9 @@ run_cmd env RUSTDOCFLAGS="-D warnings" cargo doc "${DOC_ARGS[@]}" echo "Formatting..." run_cmd cargo fmt --all --quiet +echo "Publish dry-run..." +run_cmd cargo publish --dry-run --allow-dirty --quiet --workspace + echo "Linux-only feature coverage..." if [ "$IS_LINUX" = true ]; then echo "Building (linux async features)..." @@ -100,4 +118,12 @@ else echo " (skipped - not Linux)" fi -echo "All checks passed!" +if [ "$EXIT_CODE" -eq 0 ]; then + echo "All checks passed!" +else + echo "Verification failed." + echo "Failed commands:" + printf ' - %s\n' "${FAILED_COMMANDS[@]}" +fi + +exit "$EXIT_CODE" diff --git a/docs/.gitignore b/src/docs/.gitignore similarity index 100% rename from docs/.gitignore rename to src/docs/.gitignore diff --git a/docs/mkdocs.yml b/src/docs/mkdocs.yml similarity index 100% rename from docs/mkdocs.yml rename to src/docs/mkdocs.yml diff --git a/docs/requirements.txt b/src/docs/requirements.txt similarity index 100% rename from docs/requirements.txt rename to src/docs/requirements.txt diff --git a/docs/src/agents.md b/src/docs/src/agents.md similarity index 100% rename from docs/src/agents.md rename to src/docs/src/agents.md diff --git a/docs/src/architecture.md b/src/docs/src/architecture.md similarity index 100% rename from docs/src/architecture.md rename to src/docs/src/architecture.md diff --git a/docs/src/assets/landing.css b/src/docs/src/assets/landing.css similarity index 100% rename from docs/src/assets/landing.css rename to src/docs/src/assets/landing.css diff --git a/docs/src/comparison.md b/src/docs/src/comparison.md similarity index 100% rename from docs/src/comparison.md rename to src/docs/src/comparison.md diff --git a/docs/src/examples.md b/src/docs/src/examples.md similarity index 100% rename from docs/src/examples.md rename to src/docs/src/examples.md diff --git a/docs/src/extra-sandboxing-notes.md b/src/docs/src/extra-sandboxing-notes.md similarity index 100% rename from docs/src/extra-sandboxing-notes.md rename to src/docs/src/extra-sandboxing-notes.md diff --git a/docs/src/feature-flags.md b/src/docs/src/feature-flags.md similarity index 100% rename from docs/src/feature-flags.md rename to src/docs/src/feature-flags.md diff --git a/docs/src/getting-started.md b/src/docs/src/getting-started.md similarity index 100% rename from docs/src/getting-started.md rename to src/docs/src/getting-started.md diff --git a/docs/src/guides/custom-framework.md b/src/docs/src/guides/custom-framework.md similarity index 100% rename from docs/src/guides/custom-framework.md rename to src/docs/src/guides/custom-framework.md diff --git a/docs/src/guides/custom-providers.md b/src/docs/src/guides/custom-providers.md similarity index 100% rename from docs/src/guides/custom-providers.md rename to src/docs/src/guides/custom-providers.md diff --git a/docs/src/hooks.md b/src/docs/src/hooks.md similarity index 100% rename from docs/src/hooks.md rename to src/docs/src/hooks.md diff --git a/docs/src/index.md b/src/docs/src/index.md similarity index 100% rename from docs/src/index.md rename to src/docs/src/index.md diff --git a/docs/src/migration.md b/src/docs/src/migration.md similarity index 100% rename from docs/src/migration.md rename to src/docs/src/migration.md diff --git a/docs/src/models-catalog.md b/src/docs/src/models-catalog.md similarity index 100% rename from docs/src/models-catalog.md rename to src/docs/src/models-catalog.md diff --git a/docs/src/sandboxing.md b/src/docs/src/sandboxing.md similarity index 100% rename from docs/src/sandboxing.md rename to src/docs/src/sandboxing.md diff --git a/docs/src/tools.md b/src/docs/src/tools.md similarity index 100% rename from docs/src/tools.md rename to src/docs/src/tools.md diff --git a/docs/src/vendor/Reloaded/Images/Nexus-Heart-40.avif b/src/docs/src/vendor/Reloaded/Images/Nexus-Heart-40.avif similarity index 100% rename from docs/src/vendor/Reloaded/Images/Nexus-Heart-40.avif rename to src/docs/src/vendor/Reloaded/Images/Nexus-Heart-40.avif diff --git a/docs/src/vendor/Reloaded/Images/Nexus-Icon-40.avif b/src/docs/src/vendor/Reloaded/Images/Nexus-Icon-40.avif similarity index 100% rename from docs/src/vendor/Reloaded/Images/Nexus-Icon-40.avif rename to src/docs/src/vendor/Reloaded/Images/Nexus-Icon-40.avif diff --git a/docs/src/vendor/Reloaded/Images/Reloaded-Heart-40.avif b/src/docs/src/vendor/Reloaded/Images/Reloaded-Heart-40.avif similarity index 100% rename from docs/src/vendor/Reloaded/Images/Reloaded-Heart-40.avif rename to src/docs/src/vendor/Reloaded/Images/Reloaded-Heart-40.avif diff --git a/docs/src/vendor/Reloaded/Images/Reloaded-Icon-40.avif b/src/docs/src/vendor/Reloaded/Images/Reloaded-Icon-40.avif similarity index 100% rename from docs/src/vendor/Reloaded/Images/Reloaded-Icon-40.avif rename to src/docs/src/vendor/Reloaded/Images/Reloaded-Icon-40.avif diff --git a/docs/src/vendor/Reloaded/Stylesheets/reloaded.css b/src/docs/src/vendor/Reloaded/Stylesheets/reloaded.css similarity index 100% rename from docs/src/vendor/Reloaded/Stylesheets/reloaded.css rename to src/docs/src/vendor/Reloaded/Stylesheets/reloaded.css diff --git a/docs/start_docs.py b/src/docs/start_docs.py similarity index 100% rename from docs/start_docs.py rename to src/docs/start_docs.py diff --git a/src/reloaded-code-agents/Cargo.toml b/src/reloaded-code-agents/Cargo.toml index ab24a24..add79e2 100644 --- a/src/reloaded-code-agents/Cargo.toml +++ b/src/reloaded-code-agents/Cargo.toml @@ -7,6 +7,10 @@ repository = "https://github.com/Reloaded-Project/ReloadedCode" license = "Apache-2.0" include = ["src/**/*", "README.md"] readme = "README.md" +# keywords (search terms): https://crates.io/keywords +keywords = ["agents", "llm", "opencode", "markdown", "yaml"] +# categories (fixed list): https://crates.io/categories +categories = ["development-tools", "artificial-intelligence"] [dependencies] # YAML parsing for frontmatter diff --git a/src/reloaded-code-bubblewrap/Cargo.toml b/src/reloaded-code-bubblewrap/Cargo.toml index 8dd3236..40683ac 100644 --- a/src/reloaded-code-bubblewrap/Cargo.toml +++ b/src/reloaded-code-bubblewrap/Cargo.toml @@ -7,6 +7,10 @@ repository = "https://github.com/Reloaded-Project/ReloadedCode" license = "Apache-2.0" include = ["src/**/*", "README.md"] readme = "README.md" +# keywords (search terms): https://crates.io/keywords +keywords = ["bubblewrap", "sandbox", "linux", "container", "security"] +# categories (fixed list): https://crates.io/categories +categories = ["os", "virtualization", "security", "development-tools"] [features] default = ["tokio"] diff --git a/src/reloaded-code-core/Cargo.toml b/src/reloaded-code-core/Cargo.toml index c39e03e..711a772 100644 --- a/src/reloaded-code-core/Cargo.toml +++ b/src/reloaded-code-core/Cargo.toml @@ -7,6 +7,10 @@ repository = "https://github.com/Reloaded-Project/ReloadedCode" license = "Apache-2.0" include = ["src/**/*", "README.md"] readme = "README.md" +# keywords (search terms): https://crates.io/keywords +keywords = ["coding-tools", "file-system", "permissions", "llm", "agent"] +# categories (fixed list): https://crates.io/categories +categories = ["development-tools", "filesystem"] [features] default = ["tokio"] diff --git a/src/reloaded-code-models-dev/Cargo.toml b/src/reloaded-code-models-dev/Cargo.toml index 580b633..263a664 100644 --- a/src/reloaded-code-models-dev/Cargo.toml +++ b/src/reloaded-code-models-dev/Cargo.toml @@ -7,6 +7,10 @@ repository = "https://github.com/Reloaded-Project/ReloadedCode" license = "Apache-2.0" include = ["src/**/*", "README.md"] readme = "README.md" +# keywords (search terms): https://crates.io/keywords +keywords = ["models-dev", "llm", "catalog", "etag", "caching"] +# categories (fixed list): https://crates.io/categories +categories = ["artificial-intelligence", "api-bindings", "development-tools"] [features] default = ["tokio"] diff --git a/src/reloaded-code-provider-config/Cargo.toml b/src/reloaded-code-provider-config/Cargo.toml index bc0cb6b..0a2f0df 100644 --- a/src/reloaded-code-provider-config/Cargo.toml +++ b/src/reloaded-code-provider-config/Cargo.toml @@ -7,6 +7,10 @@ repository = "https://github.com/Reloaded-Project/ReloadedCode" license = "Apache-2.0" include = ["src/**/*", "README.md"] readme = "README.md" +# keywords (search terms): https://crates.io/keywords +keywords = ["configuration", "providers", "yaml", "llm", "catalog"] +# categories (fixed list): https://crates.io/categories +categories = ["config", "development-tools"] [dependencies] reloaded-code-core = { workspace = true, default-features = false, features = ["tokio"] } diff --git a/src/reloaded-code-serdesai/Cargo.toml b/src/reloaded-code-serdesai/Cargo.toml index 7e2b392..cb5cc9c 100644 --- a/src/reloaded-code-serdesai/Cargo.toml +++ b/src/reloaded-code-serdesai/Cargo.toml @@ -6,6 +6,10 @@ description = "Lightweight, high-performance serdesAI framework Tool implementat repository = "https://github.com/Reloaded-Project/ReloadedCode" license = "Apache-2.0" readme = "README.md" +# keywords (search terms): https://crates.io/keywords +keywords = ["serdesai", "llm", "coding-tools", "agent", "tool-adapter"] +# categories (fixed list): https://crates.io/categories +categories = ["development-tools", "artificial-intelligence"] include = ["src/**/*", "examples/**/*", "README.md"] [features]