mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-10-22 21:41:37 +00:00
Refactor CI pipeline scripts and documentation
- Consolidated CI pipeline steps into PowerShell and Bash scripts for improved usability and consistency. - Updated documentation in `ci.md` to clarify the execution process and options for skipping the rbx-dom section. - Enhanced error handling and reporting in the scripts to provide clearer feedback on CI step results. - Streamlined formatting and linting processes for both Rojo and rbx-dom, ensuring a more efficient CI workflow.
This commit is contained in:
parent
9688224cb4
commit
f496bee347
8 changed files with 473 additions and 193 deletions
193
scripts/ci.ps1
Normal file
193
scripts/ci.ps1
Normal file
|
|
@ -0,0 +1,193 @@
|
|||
# Complete CI Pipeline
|
||||
# Usage: .\scripts\ci.ps1 [-NoRbxDom]
|
||||
|
||||
param(
|
||||
[switch]$NoRbxDom
|
||||
)
|
||||
|
||||
$RbxDom = -not $NoRbxDom
|
||||
|
||||
$ErrorActionPreference = "Continue"
|
||||
$failures = @()
|
||||
|
||||
function Write-Step($number, $name) {
|
||||
Write-Host ""
|
||||
Write-Host "=== Step ${number}: $name ===" -ForegroundColor Cyan
|
||||
}
|
||||
|
||||
function Record-Result($step, $exitCode) {
|
||||
if ($exitCode -ne 0) {
|
||||
$script:failures += $step
|
||||
Write-Host "FAIL" -ForegroundColor Red
|
||||
} else {
|
||||
Write-Host "PASS" -ForegroundColor Green
|
||||
}
|
||||
}
|
||||
|
||||
# ─── Rojo ────────────────────────────────────────────────────────────────────
|
||||
|
||||
Write-Step 1 "Auto-fix Lua Formatting (Stylua)"
|
||||
stylua plugin/src
|
||||
$styluaRojo = $LASTEXITCODE
|
||||
Record-Result "Stylua (Rojo)" $styluaRojo
|
||||
|
||||
Write-Step 2 "Auto-fix Rust Formatting"
|
||||
cargo fmt
|
||||
$rustfmt = $LASTEXITCODE
|
||||
Record-Result "Rustfmt" $rustfmt
|
||||
|
||||
Write-Step 3 "Auto-fix TypeScript Formatting (Prettier)"
|
||||
Push-Location vscode-rojo
|
||||
npx prettier --write "src/**/*.ts"
|
||||
$prettier = $LASTEXITCODE
|
||||
Pop-Location
|
||||
Record-Result "Prettier" $prettier
|
||||
|
||||
Write-Step 4 "Compile TypeScript Extension (vscode-rojo)"
|
||||
Push-Location vscode-rojo
|
||||
npm run compile
|
||||
$tsBuild = $LASTEXITCODE
|
||||
Pop-Location
|
||||
Record-Result "TS Compile (vscode-rojo)" $tsBuild
|
||||
|
||||
Write-Step 5 "Lua Static Analysis (Selene)"
|
||||
selene plugin/src
|
||||
$selene = $LASTEXITCODE
|
||||
Record-Result "Selene" $selene
|
||||
|
||||
Write-Step 6 "Rust Linting (Clippy) - Auto-fix"
|
||||
cargo clippy --fix --allow-dirty --allow-staged 2>&1 | Out-Null
|
||||
Write-Host "Verifying..." -ForegroundColor Yellow
|
||||
cargo clippy --all-targets --all-features 2>&1
|
||||
$clippy = $LASTEXITCODE
|
||||
Record-Result "Clippy" $clippy
|
||||
|
||||
Write-Step 7 "Build Everything"
|
||||
cargo build --locked --all-targets --all-features
|
||||
$build = $LASTEXITCODE
|
||||
Record-Result "Build" $build
|
||||
|
||||
Write-Step 8 "Run ALL Rust Tests"
|
||||
$testOutput = cargo test --locked --all-targets --all-features 2>&1
|
||||
$rustTests = $LASTEXITCODE
|
||||
$testOutput | Write-Host
|
||||
Record-Result "Rust Tests" $rustTests
|
||||
|
||||
Write-Step 9 "Run Roblox Plugin Tests"
|
||||
.\target\debug\atlas.exe build plugin/test-place.project.json -o TestPlace.rbxl
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
run-in-roblox --script plugin/run-tests.server.lua --place TestPlace.rbxl
|
||||
$pluginTests = $LASTEXITCODE
|
||||
} else {
|
||||
Write-Host "Skipped: build failed" -ForegroundColor Yellow
|
||||
$pluginTests = 1
|
||||
}
|
||||
Record-Result "Plugin Tests" $pluginTests
|
||||
|
||||
# ─── rbx-dom ─────────────────────────────────────────────────────────────────
|
||||
|
||||
if ($RbxDom) {
|
||||
Write-Step 10 "Auto-fix Lua Formatting (Stylua) for rbx_dom_lua"
|
||||
Push-Location rbx-dom
|
||||
stylua rbx_dom_lua/src
|
||||
$styluaRbxDom = $LASTEXITCODE
|
||||
Pop-Location
|
||||
Record-Result "Stylua (rbx_dom_lua)" $styluaRbxDom
|
||||
|
||||
Write-Step 11 "Auto-fix Rust Formatting (rbx-dom)"
|
||||
Push-Location rbx-dom
|
||||
cargo fmt
|
||||
$rustfmtRbxDom = $LASTEXITCODE
|
||||
Pop-Location
|
||||
Record-Result "Rustfmt (rbx-dom)" $rustfmtRbxDom
|
||||
|
||||
Write-Step 12 "Lua Static Analysis (Selene) for rbx_dom_lua"
|
||||
Push-Location rbx-dom
|
||||
selene rbx_dom_lua/src
|
||||
$seleneRbxDom = $LASTEXITCODE
|
||||
Pop-Location
|
||||
Record-Result "Selene (rbx_dom_lua)" $seleneRbxDom
|
||||
|
||||
Write-Step 13 "Rust Linting (Clippy) for rbx-dom - Auto-fix"
|
||||
Push-Location rbx-dom
|
||||
cargo clippy --fix --allow-dirty --allow-staged 2>&1 | Out-Null
|
||||
Write-Host "Verifying..." -ForegroundColor Yellow
|
||||
cargo clippy --all-targets --all-features -- -D warnings 2>&1
|
||||
$clippyRbxDom = $LASTEXITCODE
|
||||
Pop-Location
|
||||
Record-Result "Clippy (rbx-dom)" $clippyRbxDom
|
||||
|
||||
Write-Step 14 "Build rbx-dom"
|
||||
Push-Location rbx-dom
|
||||
cargo build --verbose
|
||||
$buildRbxDom = $LASTEXITCODE
|
||||
cargo build --all-features --verbose
|
||||
$buildRbxDomAll = $LASTEXITCODE
|
||||
Pop-Location
|
||||
Record-Result "Build (rbx-dom)" $buildRbxDom
|
||||
Record-Result "Build (rbx-dom all-features)" $buildRbxDomAll
|
||||
|
||||
Write-Step 15 "Run ALL rbx-dom Rust Tests"
|
||||
Push-Location rbx-dom
|
||||
cargo test --verbose
|
||||
$testsRbxDom = $LASTEXITCODE
|
||||
cargo test --all-features --verbose
|
||||
$testsRbxDomAll = $LASTEXITCODE
|
||||
Pop-Location
|
||||
Record-Result "Tests (rbx-dom)" $testsRbxDom
|
||||
Record-Result "Tests (rbx-dom all-features)" $testsRbxDomAll
|
||||
}
|
||||
|
||||
# ─── Report ──────────────────────────────────────────────────────────────────
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "=== CI COMPLETE ===" -ForegroundColor Magenta
|
||||
Write-Host ""
|
||||
Write-Host "--- Rojo ---" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host "Formatting:"
|
||||
Write-Host " - Stylua: $(if ($styluaRojo -eq 0) {'PASS'} else {'FAIL'})"
|
||||
Write-Host " - Rustfmt: $(if ($rustfmt -eq 0) {'PASS'} else {'FAIL'})"
|
||||
Write-Host " - Prettier (vscode-rojo): $(if ($prettier -eq 0) {'PASS'} else {'FAIL'})"
|
||||
Write-Host ""
|
||||
Write-Host "TS Compile (vscode-rojo): $(if ($tsBuild -eq 0) {'PASS'} else {'FAIL'})"
|
||||
Write-Host ""
|
||||
Write-Host "Linting:"
|
||||
Write-Host " - Selene: $(if ($selene -eq 0) {'PASS'} else {'FAIL'})"
|
||||
Write-Host " - Clippy: $(if ($clippy -eq 0) {'PASS'} else {'FAIL'})"
|
||||
Write-Host ""
|
||||
Write-Host "Build: $(if ($build -eq 0) {'PASS'} else {'FAIL'})"
|
||||
Write-Host ""
|
||||
Write-Host "Tests:"
|
||||
Write-Host " - Rust: $(if ($rustTests -eq 0) {'PASS'} else {'FAIL'})"
|
||||
Write-Host " - Plugin: $(if ($pluginTests -eq 0) {'PASS'} else {'FAIL'})"
|
||||
|
||||
if ($RbxDom) {
|
||||
Write-Host ""
|
||||
Write-Host "--- rbx-dom ---" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host "Formatting:"
|
||||
Write-Host " - Stylua (rbx_dom_lua): $(if ($styluaRbxDom -eq 0) {'PASS'} else {'FAIL'})"
|
||||
Write-Host " - Rustfmt: $(if ($rustfmtRbxDom -eq 0) {'PASS'} else {'FAIL'})"
|
||||
Write-Host ""
|
||||
Write-Host "Linting:"
|
||||
Write-Host " - Selene (rbx_dom_lua): $(if ($seleneRbxDom -eq 0) {'PASS'} else {'FAIL'})"
|
||||
Write-Host " - Clippy: $(if ($clippyRbxDom -eq 0) {'PASS'} else {'FAIL'})"
|
||||
Write-Host ""
|
||||
Write-Host "Build: $(if ($buildRbxDom -eq 0) {'PASS'} else {'FAIL'})"
|
||||
Write-Host "Build (all features): $(if ($buildRbxDomAll -eq 0) {'PASS'} else {'FAIL'})"
|
||||
Write-Host ""
|
||||
Write-Host "Tests:"
|
||||
Write-Host " - Rust: $(if ($testsRbxDom -eq 0) {'PASS'} else {'FAIL'})"
|
||||
Write-Host " - Rust (all features): $(if ($testsRbxDomAll -eq 0) {'PASS'} else {'FAIL'})"
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
if ($failures.Count -eq 0) {
|
||||
Write-Host "--- Overall: PASS ---" -ForegroundColor Green
|
||||
exit 0
|
||||
} else {
|
||||
Write-Host "--- Overall: FAIL ---" -ForegroundColor Red
|
||||
Write-Host "Failed steps: $($failures -join ', ')" -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
181
scripts/ci.sh
Normal file
181
scripts/ci.sh
Normal file
|
|
@ -0,0 +1,181 @@
|
|||
#!/usr/bin/env bash
|
||||
# Complete CI Pipeline
|
||||
# Usage: bash scripts/ci.sh [--no-rbx-dom]
|
||||
|
||||
set -o pipefail
|
||||
|
||||
RBX_DOM=true
|
||||
for arg in "$@"; do
|
||||
case "$arg" in
|
||||
--no-rbx-dom) RBX_DOM=false ;;
|
||||
esac
|
||||
done
|
||||
|
||||
failures=()
|
||||
|
||||
step() {
|
||||
echo ""
|
||||
echo "=== Step $1: $2 ==="
|
||||
}
|
||||
|
||||
record() {
|
||||
if [ "$2" -ne 0 ]; then
|
||||
failures+=("$1")
|
||||
echo "FAIL"
|
||||
else
|
||||
echo "PASS"
|
||||
fi
|
||||
}
|
||||
|
||||
# ─── Rojo ────────────────────────────────────────────────────────────────────
|
||||
|
||||
step 1 "Auto-fix Lua Formatting (Stylua)"
|
||||
stylua plugin/src
|
||||
stylua_rojo=$?
|
||||
record "Stylua (Rojo)" $stylua_rojo
|
||||
|
||||
step 2 "Auto-fix Rust Formatting"
|
||||
cargo fmt
|
||||
rustfmt_exit=$?
|
||||
record "Rustfmt" $rustfmt_exit
|
||||
|
||||
step 3 "Auto-fix TypeScript Formatting (Prettier)"
|
||||
(cd vscode-rojo && npx prettier --write "src/**/*.ts")
|
||||
prettier_exit=$?
|
||||
record "Prettier" $prettier_exit
|
||||
|
||||
step 4 "Compile TypeScript Extension (vscode-rojo)"
|
||||
(cd vscode-rojo && npm run compile)
|
||||
ts_build=$?
|
||||
record "TS Compile (vscode-rojo)" $ts_build
|
||||
|
||||
step 5 "Lua Static Analysis (Selene)"
|
||||
selene plugin/src
|
||||
selene_exit=$?
|
||||
record "Selene" $selene_exit
|
||||
|
||||
step 6 "Rust Linting (Clippy) - Auto-fix"
|
||||
cargo clippy --fix --allow-dirty --allow-staged >/dev/null 2>&1
|
||||
echo "Verifying..."
|
||||
cargo clippy --all-targets --all-features 2>&1
|
||||
clippy_exit=$?
|
||||
record "Clippy" $clippy_exit
|
||||
|
||||
step 7 "Build Everything"
|
||||
cargo build --locked --all-targets --all-features
|
||||
build_exit=$?
|
||||
record "Build" $build_exit
|
||||
|
||||
step 8 "Run ALL Rust Tests"
|
||||
cargo test --locked --all-targets --all-features 2>&1
|
||||
rust_tests=$?
|
||||
record "Rust Tests" $rust_tests
|
||||
|
||||
step 9 "Run Roblox Plugin Tests"
|
||||
./target/debug/atlas build plugin/test-place.project.json -o TestPlace.rbxl
|
||||
if [ $? -eq 0 ]; then
|
||||
run-in-roblox --script plugin/run-tests.server.lua --place TestPlace.rbxl
|
||||
plugin_tests=$?
|
||||
else
|
||||
echo "Skipped: build failed"
|
||||
plugin_tests=1
|
||||
fi
|
||||
record "Plugin Tests" $plugin_tests
|
||||
|
||||
# ─── rbx-dom ─────────────────────────────────────────────────────────────────
|
||||
|
||||
if [ "$RBX_DOM" = true ]; then
|
||||
step 10 "Auto-fix Lua Formatting (Stylua) for rbx_dom_lua"
|
||||
(cd rbx-dom && stylua rbx_dom_lua/src)
|
||||
stylua_rbxdom=$?
|
||||
record "Stylua (rbx_dom_lua)" $stylua_rbxdom
|
||||
|
||||
step 11 "Auto-fix Rust Formatting (rbx-dom)"
|
||||
(cd rbx-dom && cargo fmt)
|
||||
rustfmt_rbxdom=$?
|
||||
record "Rustfmt (rbx-dom)" $rustfmt_rbxdom
|
||||
|
||||
step 12 "Lua Static Analysis (Selene) for rbx_dom_lua"
|
||||
(cd rbx-dom && selene rbx_dom_lua/src)
|
||||
selene_rbxdom=$?
|
||||
record "Selene (rbx_dom_lua)" $selene_rbxdom
|
||||
|
||||
step 13 "Rust Linting (Clippy) for rbx-dom - Auto-fix"
|
||||
(cd rbx-dom && cargo clippy --fix --allow-dirty --allow-staged >/dev/null 2>&1)
|
||||
echo "Verifying..."
|
||||
(cd rbx-dom && cargo clippy --all-targets --all-features -- -D warnings 2>&1)
|
||||
clippy_rbxdom=$?
|
||||
record "Clippy (rbx-dom)" $clippy_rbxdom
|
||||
|
||||
step 14 "Build rbx-dom"
|
||||
(cd rbx-dom && cargo build --verbose)
|
||||
build_rbxdom=$?
|
||||
(cd rbx-dom && cargo build --all-features --verbose)
|
||||
build_rbxdom_all=$?
|
||||
record "Build (rbx-dom)" $build_rbxdom
|
||||
record "Build (rbx-dom all-features)" $build_rbxdom_all
|
||||
|
||||
step 15 "Run ALL rbx-dom Rust Tests"
|
||||
(cd rbx-dom && cargo test --verbose)
|
||||
tests_rbxdom=$?
|
||||
(cd rbx-dom && cargo test --all-features --verbose)
|
||||
tests_rbxdom_all=$?
|
||||
record "Tests (rbx-dom)" $tests_rbxdom
|
||||
record "Tests (rbx-dom all-features)" $tests_rbxdom_all
|
||||
fi
|
||||
|
||||
# ─── Report ──────────────────────────────────────────────────────────────────
|
||||
|
||||
pass_or_fail() { [ "$1" -eq 0 ] && echo "PASS" || echo "FAIL"; }
|
||||
|
||||
echo ""
|
||||
echo "=== CI COMPLETE ==="
|
||||
echo ""
|
||||
echo "--- Rojo ---"
|
||||
echo ""
|
||||
echo "Formatting:"
|
||||
echo " - Stylua: $(pass_or_fail $stylua_rojo)"
|
||||
echo " - Rustfmt: $(pass_or_fail $rustfmt_exit)"
|
||||
echo " - Prettier (vscode-rojo): $(pass_or_fail $prettier_exit)"
|
||||
echo ""
|
||||
echo "TS Compile (vscode-rojo): $(pass_or_fail $ts_build)"
|
||||
echo ""
|
||||
echo "Linting:"
|
||||
echo " - Selene: $(pass_or_fail $selene_exit)"
|
||||
echo " - Clippy: $(pass_or_fail $clippy_exit)"
|
||||
echo ""
|
||||
echo "Build: $(pass_or_fail $build_exit)"
|
||||
echo ""
|
||||
echo "Tests:"
|
||||
echo " - Rust: $(pass_or_fail $rust_tests)"
|
||||
echo " - Plugin: $(pass_or_fail $plugin_tests)"
|
||||
|
||||
if [ "$RBX_DOM" = true ]; then
|
||||
echo ""
|
||||
echo "--- rbx-dom ---"
|
||||
echo ""
|
||||
echo "Formatting:"
|
||||
echo " - Stylua (rbx_dom_lua): $(pass_or_fail $stylua_rbxdom)"
|
||||
echo " - Rustfmt: $(pass_or_fail $rustfmt_rbxdom)"
|
||||
echo ""
|
||||
echo "Linting:"
|
||||
echo " - Selene (rbx_dom_lua): $(pass_or_fail $selene_rbxdom)"
|
||||
echo " - Clippy: $(pass_or_fail $clippy_rbxdom)"
|
||||
echo ""
|
||||
echo "Build: $(pass_or_fail $build_rbxdom)"
|
||||
echo "Build (all features): $(pass_or_fail $build_rbxdom_all)"
|
||||
echo ""
|
||||
echo "Tests:"
|
||||
echo " - Rust: $(pass_or_fail $tests_rbxdom)"
|
||||
echo " - Rust (all features): $(pass_or_fail $tests_rbxdom_all)"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
if [ ${#failures[@]} -eq 0 ]; then
|
||||
echo "--- Overall: PASS ---"
|
||||
exit 0
|
||||
else
|
||||
echo "--- Overall: FAIL ---"
|
||||
echo "Failed steps: $(IFS=', '; echo "${failures[*]}")"
|
||||
exit 1
|
||||
fi
|
||||
Loading…
Add table
Add a link
Reference in a new issue