-
Notifications
You must be signed in to change notification settings - Fork 3
159 lines (127 loc) · 7.35 KB
/
run-integrationTests-dotnet.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
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\""
# ) &
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