ci: Add CI workflow for Rhai tests
- Added a GitHub Actions workflow to automatically run Rhai tests on push and pull request events. - Created documentation for the CI workflow. - Improved test runner script to log output to a file and check for test failures.
This commit is contained in:
parent
4e166f7750
commit
4578b10acb
73
.github/workflows/rhai-tests.yml
vendored
Normal file
73
.github/workflows/rhai-tests.yml
vendored
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
name: Rhai Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ '*' ]
|
||||||
|
paths:
|
||||||
|
- 'src/rhai_tests/**'
|
||||||
|
- 'src/rhai/**'
|
||||||
|
- 'src/git/**'
|
||||||
|
- 'src/os/**'
|
||||||
|
- 'run_rhai_tests.sh'
|
||||||
|
- '.github/workflows/rhai-tests.yml'
|
||||||
|
pull_request:
|
||||||
|
branches: [ '*' ]
|
||||||
|
paths:
|
||||||
|
- 'src/rhai_tests/**'
|
||||||
|
- 'src/rhai/**'
|
||||||
|
- 'src/git/**'
|
||||||
|
- 'src/os/**'
|
||||||
|
- 'run_rhai_tests.sh'
|
||||||
|
- '.github/workflows/rhai-tests.yml'
|
||||||
|
workflow_dispatch: # Allow manual triggering
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
rhai-tests:
|
||||||
|
name: Run Rhai Tests
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up Rust
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
toolchain: stable
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: Cache Rust dependencies
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/.cargo/registry
|
||||||
|
~/.cargo/git
|
||||||
|
target
|
||||||
|
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-cargo-
|
||||||
|
|
||||||
|
- name: Build herodo
|
||||||
|
run: |
|
||||||
|
cargo build --bin herodo
|
||||||
|
echo "${{ github.workspace }}/target/debug" >> $GITHUB_PATH
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y git curl
|
||||||
|
|
||||||
|
- name: Run Rhai tests
|
||||||
|
run: |
|
||||||
|
chmod +x run_rhai_tests.sh
|
||||||
|
./run_rhai_tests.sh
|
||||||
|
|
||||||
|
- name: Check for test failures
|
||||||
|
run: |
|
||||||
|
if grep -q "Some tests failed" run_rhai_tests.log; then
|
||||||
|
echo "::error::Some Rhai tests failed. Check the logs for details."
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "All Rhai tests passed!"
|
||||||
|
fi
|
||||||
|
if: always()
|
71
docs/rhai/ci_workflow.md
Normal file
71
docs/rhai/ci_workflow.md
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
# Continuous Integration for Rhai Tests
|
||||||
|
|
||||||
|
This document describes the continuous integration (CI) workflow for running Rhai tests in the SAL library.
|
||||||
|
|
||||||
|
## GitHub Actions Workflow
|
||||||
|
|
||||||
|
The SAL project includes a GitHub Actions workflow that automatically runs all Rhai tests whenever changes are made to relevant files. This ensures that the Rhai integration continues to work correctly as the codebase evolves.
|
||||||
|
|
||||||
|
### Workflow File
|
||||||
|
|
||||||
|
The workflow is defined in `.github/workflows/rhai-tests.yml`.
|
||||||
|
|
||||||
|
### Trigger Events
|
||||||
|
|
||||||
|
The workflow runs automatically when:
|
||||||
|
|
||||||
|
1. Changes are pushed to the `main` or `master` branch that affect:
|
||||||
|
- Rhai test scripts (`src/rhai_tests/**`)
|
||||||
|
- Rhai module code (`src/rhai/**`)
|
||||||
|
- Git module code (`src/git/**`)
|
||||||
|
- OS module code (`src/os/**`)
|
||||||
|
- The test runner script (`run_rhai_tests.sh`)
|
||||||
|
- The workflow file itself (`.github/workflows/rhai-tests.yml`)
|
||||||
|
|
||||||
|
2. A pull request is opened or updated that affects the same files.
|
||||||
|
|
||||||
|
3. The workflow is manually triggered using the GitHub Actions interface.
|
||||||
|
|
||||||
|
### Workflow Steps
|
||||||
|
|
||||||
|
The workflow performs the following steps:
|
||||||
|
|
||||||
|
1. **Checkout Code**: Checks out the repository code.
|
||||||
|
2. **Set up Rust**: Installs the Rust toolchain.
|
||||||
|
3. **Cache Dependencies**: Caches Rust dependencies to speed up builds.
|
||||||
|
4. **Build herodo**: Builds the `herodo` binary used to run Rhai scripts.
|
||||||
|
5. **Install Dependencies**: Installs system dependencies like Git and curl.
|
||||||
|
6. **Run Rhai Tests**: Runs the `run_rhai_tests.sh` script to execute all Rhai tests.
|
||||||
|
7. **Check for Failures**: Verifies that all tests passed.
|
||||||
|
|
||||||
|
### Test Results
|
||||||
|
|
||||||
|
The workflow will fail if any Rhai test fails. This prevents changes that break the Rhai integration from being merged.
|
||||||
|
|
||||||
|
## Local Testing
|
||||||
|
|
||||||
|
Before pushing changes, you can run the same tests locally using the `run_rhai_tests.sh` script:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./run_rhai_tests.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
This will produce the same test results as the CI workflow, allowing you to catch and fix issues before pushing your changes.
|
||||||
|
|
||||||
|
## Logs
|
||||||
|
|
||||||
|
The test runner script creates a log file (`run_rhai_tests.log`) that contains the output of all tests. This log is used by the CI workflow to check for test failures.
|
||||||
|
|
||||||
|
## Adding New Tests
|
||||||
|
|
||||||
|
When adding new tests, make sure they are included in the appropriate module's test runner script (`run_all_tests.rhai`). The CI workflow will automatically run the new tests.
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
If the CI workflow fails, check the GitHub Actions logs for details. Common issues include:
|
||||||
|
|
||||||
|
1. **Missing Dependencies**: Ensure all required dependencies are installed.
|
||||||
|
2. **Test Failures**: Fix any failing tests.
|
||||||
|
3. **Build Errors**: Fix any errors in the Rust code.
|
||||||
|
|
||||||
|
If you need to modify the workflow, edit the `.github/workflows/rhai-tests.yml` file.
|
@ -33,6 +33,7 @@ SAL includes test scripts for verifying the functionality of its Rhai integratio
|
|||||||
- [OS Module Tests](os_module_tests.md): Tests for file system, download, and package management operations
|
- [OS Module Tests](os_module_tests.md): Tests for file system, download, and package management operations
|
||||||
- [Git Module Tests](git_module_tests.md): Tests for Git repository management and operations
|
- [Git Module Tests](git_module_tests.md): Tests for Git repository management and operations
|
||||||
- [Running Tests](running_tests.md): Instructions for running all Rhai tests
|
- [Running Tests](running_tests.md): Instructions for running all Rhai tests
|
||||||
|
- [CI Workflow](ci_workflow.md): Continuous integration workflow for Rhai tests
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
|
@ -9,10 +9,19 @@ YELLOW='\033[0;33m'
|
|||||||
BLUE='\033[0;34m'
|
BLUE='\033[0;34m'
|
||||||
NC='\033[0m' # No Color
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
# Create log file
|
||||||
|
LOG_FILE="run_rhai_tests.log"
|
||||||
|
> $LOG_FILE # Clear log file if it exists
|
||||||
|
|
||||||
|
# Function to log messages to both console and log file
|
||||||
|
log() {
|
||||||
|
echo -e "$1" | tee -a $LOG_FILE
|
||||||
|
}
|
||||||
|
|
||||||
# Print header
|
# Print header
|
||||||
echo -e "${BLUE}=======================================${NC}"
|
log "${BLUE}=======================================${NC}"
|
||||||
echo -e "${BLUE} Running All Rhai Tests ${NC}"
|
log "${BLUE} Running All Rhai Tests ${NC}"
|
||||||
echo -e "${BLUE}=======================================${NC}"
|
log "${BLUE}=======================================${NC}"
|
||||||
|
|
||||||
# Find all test runner scripts
|
# Find all test runner scripts
|
||||||
RUNNERS=$(find src/rhai_tests -name "run_all_tests.rhai")
|
RUNNERS=$(find src/rhai_tests -name "run_all_tests.rhai")
|
||||||
@ -27,18 +36,19 @@ for runner in $RUNNERS; do
|
|||||||
# Extract module name from path
|
# Extract module name from path
|
||||||
module=$(echo $runner | cut -d'/' -f3)
|
module=$(echo $runner | cut -d'/' -f3)
|
||||||
|
|
||||||
echo -e "\n${YELLOW}Running tests for module: ${module}${NC}"
|
log "\n${YELLOW}Running tests for module: ${module}${NC}"
|
||||||
echo -e "${YELLOW}-------------------------------------${NC}"
|
log "${YELLOW}-------------------------------------${NC}"
|
||||||
|
|
||||||
# Run the test runner
|
# Run the test runner
|
||||||
herodo --path $runner
|
herodo --path $runner | tee -a $LOG_FILE
|
||||||
|
TEST_RESULT=${PIPESTATUS[0]}
|
||||||
|
|
||||||
# Check if the test passed
|
# Check if the test passed
|
||||||
if [ $? -eq 0 ]; then
|
if [ $TEST_RESULT -eq 0 ]; then
|
||||||
echo -e "${GREEN}✓ Module ${module} tests passed${NC}"
|
log "${GREEN}✓ Module ${module} tests passed${NC}"
|
||||||
PASSED_MODULES=$((PASSED_MODULES + 1))
|
PASSED_MODULES=$((PASSED_MODULES + 1))
|
||||||
else
|
else
|
||||||
echo -e "${RED}✗ Module ${module} tests failed${NC}"
|
log "${RED}✗ Module ${module} tests failed${NC}"
|
||||||
FAILED_MODULES=$((FAILED_MODULES + 1))
|
FAILED_MODULES=$((FAILED_MODULES + 1))
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -46,18 +56,18 @@ for runner in $RUNNERS; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
# Print summary
|
# Print summary
|
||||||
echo -e "\n${BLUE}=======================================${NC}"
|
log "\n${BLUE}=======================================${NC}"
|
||||||
echo -e "${BLUE} Test Summary ${NC}"
|
log "${BLUE} Test Summary ${NC}"
|
||||||
echo -e "${BLUE}=======================================${NC}"
|
log "${BLUE}=======================================${NC}"
|
||||||
echo -e "Total modules tested: ${TOTAL_MODULES}"
|
log "Total modules tested: ${TOTAL_MODULES}"
|
||||||
echo -e "Passed: ${GREEN}${PASSED_MODULES}${NC}"
|
log "Passed: ${GREEN}${PASSED_MODULES}${NC}"
|
||||||
echo -e "Failed: ${RED}${FAILED_MODULES}${NC}"
|
log "Failed: ${RED}${FAILED_MODULES}${NC}"
|
||||||
|
|
||||||
# Set exit code based on test results
|
# Set exit code based on test results
|
||||||
if [ $FAILED_MODULES -eq 0 ]; then
|
if [ $FAILED_MODULES -eq 0 ]; then
|
||||||
echo -e "\n${GREEN}All tests passed!${NC}"
|
log "\n${GREEN}All tests passed!${NC}"
|
||||||
exit 0
|
exit 0
|
||||||
else
|
else
|
||||||
echo -e "\n${RED}Some tests failed!${NC}"
|
log "\n${RED}Some tests failed!${NC}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
Loading…
Reference in New Issue
Block a user