Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dotnet test worfklows #14

Merged
merged 14 commits into from
Jul 18, 2024
157 changes: 157 additions & 0 deletions .github/workflows/run-integrationTests-dotnet.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
name: test-template-spacefx-client-dotnet
on:
workflow_call:
inputs:
WORKFLOW_AGENT:
description: 'The agent to run the job on'
required: true
type: string
app_name:
description: 'The name of the app to test'
default: spacesdk-client
type: string
secrets:
GIT_HUB_USER_NAME:
required: true
GIT_HUB_USER_TOKEN:
required: true
SETUP_REPO_URL:
required: true


jobs:
build-and-test:
name: test-spacefx-client-dotnet-${{ inputs.WORKFLOW_AGENT }}
runs-on: ${{ inputs.WORKFLOW_AGENT }}
permissions:
contents: read
issues: read
checks: write
pull-requests: write

steps:
- uses: microsoft/azure-orbital-space-sdk-github-actions/composite-actions/initialize@main
with:
GIT_HUB_USER_NAME: ${{ secrets.GIT_HUB_USER_NAME }}
GIT_HUB_USER_TOKEN: ${{ secrets.GIT_HUB_USER_TOKEN }}
SETUP_REPO_URL: ${{ secrets.SETUP_REPO_URL }}

- uses: microsoft/azure-orbital-space-sdk-github-actions/composite-actions/install-publish-dependencies@main
if: inputs.WORKFLOW_AGENT == 'spacesdk-ubuntu-2204LTS-arm64'

## Build the Service's Devcontainer and wait for pods to spin up (unnecessary when devcontainer up composite action is available)
- name: Build Devcontainer
shell: bash
run: |
devcontainer up --workspace-folder ${PWD} \
--workspace-mount-consistency cached \
--id-label devcontainer.local_folder=${PWD} \
--default-user-env-probe loginInteractiveShell \
--build-no-cache \
--remove-existing-container \
--mount type=volume,source=vscode,target=/vscode,external=true \
--update-remote-user-uid-default on \
--mount-workspace-git-root true
echo $?

pod_status=$(k3s kubectl get pods -n payload-app -l app=${{ inputs.app_name }} --output=json | jq -r '.items[0].status.phase')

while [[ -z "$pod_status" || "$pod_status" != "Running" ]]; do
echo "Checking pod statuses..."
pod_status=$(k3s kubectl get pods -n payload-app -l app=${{ inputs.app_name }} --output=json | jq -r '.items[0].status.phase')

if [[ -z "$pod_status" || "$pod_status" != "Running" ]]; then
echo "One or both pods are not 'Running'. POD: '$pod_status' ..."
k3s kubectl get pods -A
sleep 5 # Wait for 5 seconds before checking again
fi
done

- name: Build Projects
shell: bash
run: |
[[ ! -f /var/spacedev/tmp/${{ inputs.app_name }}/container_info.json ]] && echo "container_info.json not found. Dev container start up failed" && exit 1
echo "Calculating container name from container_info.json..."
DEV_CONTAINER_NAME=$(jq -r </var/spacedev/tmp/${{ inputs.app_name }}/container_info.json '.[0].Name')

# Remove the first character if it is a slash
[[ ${DEV_CONTAINER_NAME:0:1} == "/" ]] && DEV_CONTAINER_NAME="${DEV_CONTAINER_NAME:1}"

echo "Container Name: $DEV_CONTAINER_NAME"

# Build the app
echo "Running: docker exec ${DEV_CONTAINER_NAME} bash -c \"dotnet build /workspace/${{ inputs.app_name }}/src/spacesdk-client.csproj\""
docker exec ${DEV_CONTAINER_NAME} bash -c "dotnet build /workspace/${{ inputs.app_name }}/src/spacesdk-client.csproj"

# Build integrationTests
echo "Running: docker exec ${DEV_CONTAINER_NAME} bash -c \"dotnet build /workspace/${{ inputs.app_name }}/test/integrationTests/integrationTests.csproj\""
docker exec ${DEV_CONTAINER_NAME} bash -c "dotnet build /workspace/${{ inputs.app_name }}/test/integrationTests/integrationTests.csproj"
echo $?

- name: Run Integration Tests
shell: bash
run: |

[[ ! -f /var/spacedev/tmp/${{ inputs.app_name }}/container_info.json ]] && echo "container_info.json not found. Dev container start up failed" && exit 1
echo "Calculating container name from container_info.json..."
DEV_CONTAINER_NAME=$(jq -r </var/spacedev/tmp/${{ inputs.app_name }}/container_info.json '.[0].Name')

# Remove the first character if it is a slash
[[ ${DEV_CONTAINER_NAME:0:1} == "/" ]] && DEV_CONTAINER_NAME="${DEV_CONTAINER_NAME:1}"

echo "Container Name: $DEV_CONTAINER_NAME"

echo "Waiting for the integration test to start..."
sleep 5

echo "Starting the integration test"
echo "Running: docker exec ${DEV_CONTAINER_NAME} bash -c \"/spacefx-dev/debugShim-deploy.sh --debug_shim ${{ inputs.app_name }} --python_file /workspace/${{ inputs.app_name }}/test/integrationTests_python/integrationTest.py --disable_plugin_configs --port 5678\""
docker exec ${DEV_CONTAINER_NAME} bash -c "/spacefx-dev/debugShim-deploy.sh --debug_shim ${{ inputs.app_name }} --python_file /workspace/${{ inputs.app_name }}/test/integrationTests_python/integrationTest.py --disable_plugin_configs --port 5678" &

echo "k3s kubectl exec -n payload-app deploy/${{ inputs.app_name }} -- bash -c \"/workspace/${{ inputs.app_name }}/.git/spacefx-dev/dotnet/dotnet test --verbosity detailed /workspace/${{ inputs.app_name }}/test/integrationTests/bin/Debug/net6.0/integrationTests.dll --logger \"junit;LogFileName=/workspace/${{ inputs.app_name }}/.git/test-results.xml\"\" &"
(
# Reroute the stdout to a file so we can uniquely identify this run
trap "" HUP
exec 0< /dev/null
exec 1> "${PWD}/.git/logs/${{ inputs.app_name }}.log.stdout"
exec 2>&1

k3s kubectl exec -n payload-app deploy/${{ inputs.app_name }} -- bash -c "/workspace/${{ inputs.app_name }}/.git/spacefx-dev/dotnet/dotnet test --verbosity detailed /workspace/${{ inputs.app_name }}/test/integrationTests/bin/Debug/net6.0/integrationTests.dll --logger \"junit;LogFileName=/workspace/${{ inputs.app_name }}/.git/test-results.xml\""
) &

client_pid=$!

echo "Waiting for the integration test host to finish..."

client_pid_return_code=0
wait "$client_pid"
client_pid_return_code=$?

echo "Client process complete with return code: $client_pid_return_code"

echo "Outputting logs from the integration test client..."
cat ${PWD}/.git/logs/${{ inputs.app_name }}.log.stdout
echo ""
echo "--------------------"
echo ""

if [[ ! -f "${PWD}/.git/test-results.xml" ]]; then
echo "Test results file not found."
exit 1
fi

if [[ $client_pid_return_code -gt 0 ]]; then
echo "Integration tests failed. Exiting with code 1."
exit 1
fi

echo "Test results found."

# moving test-results.xml to the root of the workspace
mv .git/test-results.xml ${PWD}

- name: Publish Test Results
uses: EnricoMi/publish-unit-test-result-action/linux@v2
if: always()
with:
junit_files: test-results.xml
36 changes: 36 additions & 0 deletions .github/workflows/test-spacefx-client-dotnet.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: test-spacefx-client-dotnet
on:
workflow_dispatch:
pull_request:
branches: [ main ]

jobs:
test-spacefx-client-dotnet-amd64:
permissions:
contents: read
issues: read
checks: write
pull-requests: write

uses: ./.github/workflows/run-integrationTests-dotnet.yaml
with:
WORKFLOW_AGENT: ubuntu-latest
secrets:
GIT_HUB_USER_NAME: ${{ secrets.GIT_HUB_USER_NAME }}
GIT_HUB_USER_TOKEN: ${{ secrets.GIT_HUB_USER_TOKEN }}
SETUP_REPO_URL: ${{ secrets.SETUP_REPO_URL }}

test-spacefx-client-dotnet-arm64:
permissions:
contents: read
issues: read
checks: write
pull-requests: write

uses: ./.github/workflows/run-integrationTests-dotnet.yaml
with:
WORKFLOW_AGENT: spacesdk-ubuntu-2204LTS-arm64
secrets:
GIT_HUB_USER_NAME: ${{ secrets.GIT_HUB_USER_NAME }}
GIT_HUB_USER_TOKEN: ${{ secrets.GIT_HUB_USER_TOKEN }}
SETUP_REPO_URL: ${{ secrets.SETUP_REPO_URL }}
3 changes: 0 additions & 3 deletions test/integrationTests_python/integrationTest.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,9 +119,6 @@ def main():
link_service()
logging_service()

logger.info("Debugging complete! Keeping application open...")
spacefx.client.keep_app_open()


if __name__ == '__main__':
main()
Loading