-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
2,111 additions
and
1,967 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,139 @@ | ||
name: Run Xircuits Workflows Test | ||
|
||
on: | ||
push: | ||
branches: [ main ] | ||
pull_request: | ||
branches: "*" | ||
workflow_dispatch: | ||
|
||
jobs: | ||
build-and-run: | ||
runs-on: ubuntu-latest | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
python-version: ["3.9", "3.10", "3.11"] | ||
env: | ||
TEST_XIRCUITS: | | ||
examples/DeclarativeExample.xircuits | ||
examples/InlineExample.xircuits | ||
steps: | ||
- name: Checkout Repository | ||
uses: actions/checkout@v3 | ||
|
||
- name: Set up Python ${{ matrix.python-version }} | ||
uses: actions/setup-python@v4 | ||
with: | ||
python-version: ${{ matrix.python-version }} | ||
|
||
- name: Create virtual environment | ||
run: | | ||
python -m venv venv | ||
echo "${{ github.workspace }}/venv/bin" >> $GITHUB_PATH | ||
- name: Install xircuits in virtual environment | ||
run: pip install xircuits | ||
|
||
- name: Set Environment Variables | ||
run: | | ||
LIBRARY_NAME=$(echo "${GITHUB_REPOSITORY##*/}" | sed 's/-/_/g') | ||
echo "LIBRARY_NAME=$LIBRARY_NAME" >> $GITHUB_ENV | ||
COMPONENT_LIBRARY_PATH="xai_components/${LIBRARY_NAME}" | ||
echo "COMPONENT_LIBRARY_PATH=$COMPONENT_LIBRARY_PATH" >> $GITHUB_ENV | ||
if [ "${{ github.event_name }}" == "pull_request" ]; then | ||
echo "BRANCH_NAME=${{ github.head_ref }}" >> $GITHUB_ENV | ||
else | ||
echo "BRANCH_NAME=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV | ||
fi | ||
- name: List Xircuits | ||
run: xircuits list | ||
|
||
- name: Clone Repository | ||
run: | | ||
rm -rf ${{ env.COMPONENT_LIBRARY_PATH }} | ||
if [ "${{ github.event_name }}" == "pull_request" ]; then | ||
REPO_URL="${{ github.event.pull_request.head.repo.clone_url }}" | ||
else | ||
REPO_URL="https://github.com/${{ github.repository }}" | ||
fi | ||
git clone -b ${{ env.BRANCH_NAME }} $REPO_URL ${{ env.COMPONENT_LIBRARY_PATH }} | ||
- name: Install Component Library | ||
run: | | ||
if [ -f "${{ env.COMPONENT_LIBRARY_PATH }}/requirements.txt" ]; then | ||
echo "requirements.txt found, installing dependencies..." | ||
pip install -r ${{ env.COMPONENT_LIBRARY_PATH }}/requirements.txt | ||
else | ||
echo "requirements.txt not found." | ||
fi | ||
- name: Test Flask .xircuits Workflow | ||
run: | | ||
export PYTHONPATH="${GITHUB_WORKSPACE}:${PYTHONPATH}" | ||
LOG_FILE="${GITHUB_WORKSPACE}/workflow_logs.txt" | ||
TEST_FILES=$(echo "$TEST_XIRCUITS" | tr '\n' ' ') | ||
echo "Starting Flask .xircuits workflow test..." > $LOG_FILE | ||
IFS=' ' read -r -a FILE_ARRAY <<< "$TEST_FILES" | ||
if [ ${#FILE_ARRAY[@]} -eq 0 ]; then | ||
echo "Error: No .xircuits files specified for testing." | tee -a $LOG_FILE | ||
exit 1 | ||
fi | ||
for FILE in "${FILE_ARRAY[@]}"; do | ||
FULL_PATH="${COMPONENT_LIBRARY_PATH}/${FILE}" | ||
echo "Processing file: $FULL_PATH" | tee -a $LOG_FILE | ||
if [ ! -f "$FULL_PATH" ]; then | ||
echo "Error: Xircuits file not found at $FULL_PATH" | tee -a $LOG_FILE | ||
exit 1 | ||
fi | ||
echo "Compiling Xircuits workflow: ${FULL_PATH}" >> $LOG_FILE | ||
xircuits compile "$FULL_PATH" "${FULL_PATH%.*}.py" 2>&1 | tee -a $LOG_FILE | ||
if [ ! -f "${FULL_PATH%.*}.py" ]; then | ||
echo "Error: Compiled Python file not found at ${FULL_PATH%.*}.py" | tee -a $LOG_FILE | ||
exit 1 | ||
fi | ||
echo "Running Python script: ${FULL_PATH%.*}.py" >> $LOG_FILE | ||
python "${FULL_PATH%.*}.py" 2>&1 | tee -a $LOG_FILE & | ||
PYTHON_PID=$! | ||
echo "Waiting for Flask server to initialize..." >> $LOG_FILE | ||
sleep 10 | ||
TEST_ENDPOINT="http://127.0.0.1:8080/hello/world" | ||
RETRIES=3 | ||
SUCCESS=0 | ||
for i in $(seq 1 $RETRIES); do | ||
echo "Attempt $i: Checking endpoint $TEST_ENDPOINT..." | tee -a $LOG_FILE | ||
if curl -s "$TEST_ENDPOINT" | grep -q "Hello World!"; then | ||
echo "Flask test successful: Endpoint $TEST_ENDPOINT is running as expected." | tee -a $LOG_FILE | ||
SUCCESS=1 | ||
break | ||
else | ||
echo "Attempt $i failed. Retrying in 5 seconds..." | tee -a $LOG_FILE | ||
sleep 5 | ||
fi | ||
done | ||
if [ $SUCCESS -ne 1 ]; then | ||
echo "Flask test failed: Endpoint $TEST_ENDPOINT did not respond as expected after $RETRIES attempts." | tee -a $LOG_FILE | ||
if ps -p $PYTHON_PID > /dev/null; then | ||
echo "Killing Python script process (PID: $PYTHON_PID)..." >> $LOG_FILE | ||
kill -9 $PYTHON_PID | ||
fi | ||
exit 1 | ||
fi | ||
if ps -p $PYTHON_PID > /dev/null; then | ||
echo "Python script ran successfully for the duration of the test. Killing the process..." | tee -a $LOG_FILE | ||
kill -9 $PYTHON_PID | ||
else | ||
echo "Python script finished execution before the test completed." | tee -a $LOG_FILE | ||
fi | ||
echo "Completed testing file: $FULL_PATH" | tee -a $LOG_FILE | ||
done | ||
echo "All Flask and Python script tests completed successfully." >> $LOG_FILE | ||
- name: Upload log file | ||
if: always() | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: ${{ env.LIBRARY_NAME }}-validation-workflow-${{ matrix.python-version }} | ||
path: ${{ github.workspace }}/workflow_logs.txt |
Oops, something went wrong.