Skip to content

Commit

Permalink
Dotnet test worfklows (#14)
Browse files Browse the repository at this point in the history
* dotnet test workflows

* updated test trigger

* remove keep app open for python integration tests

* updated build commands

* updated pathing

* updated deploy-debugshim arguments and dotnet test command

* updated commads for deploy and install-depedencies

* debug logs

* removing tree command

* updated names for testing

* remove push trigger

* removed extra publish action

* move install steps prior to tests

---------

Co-authored-by: alianides <[email protected]>
  • Loading branch information
alexlianides and alianides authored Jul 18, 2024
1 parent a2f307f commit 667ab68
Show file tree
Hide file tree
Showing 3 changed files with 193 additions and 3 deletions.
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()

0 comments on commit 667ab68

Please sign in to comment.