-
Notifications
You must be signed in to change notification settings - Fork 130
166 lines (151 loc) · 6.24 KB
/
model-monitoring-ci.yml
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
160
161
162
163
164
165
166
name: model-monitoring-ci
on:
pull_request:
branches:
- main
paths:
- assets/model_monitoring/**
- .github/workflows/model-monitoring-ci.yml
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
momoComponentsRootPath: assets/model_monitoring/components
testsRootPath: assets/model_monitoring/components/tests
pytest_report_folder: results
pytest_report_file: junit3.xml
scripts_setup_dir: scripts/setup
pytest_component_version_folder: component_version
pytest_component_version_file: .version_upload
permissions:
# Required to clone repo
contents: read
# Required for OIDC login to Azure
id-token: write
defaults:
run:
shell: bash
jobs:
check-execution-context:
uses: Azure/azureml-assets/.github/workflows/check-execution-context.yaml@main
upload-component-specs:
name: Upload Monitoring Component Specs for E2E Tests
runs-on: ubuntu-latest
needs: check-execution-context
environment: Testing
steps:
- name: Clone branch
uses: Azure/azureml-assets/.github/actions/clone-repo@main
with:
forked-pr: ${{ needs.check-execution-context.outputs.forked_pr }}
- name: Use Python 3.9
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install dependencies
run: pip install -r ${{ env.testsRootPath }}/requirements.txt
- name: Log in to Azure and create resources
uses: ./.github/actions/create-azure-resources
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
scripts-setup-dir: ${{ env.scripts_setup_dir }}
- name: Publish Component Specs
run: python -m pytest ${{ env.testsRootPath }}/e2e/utils/test_publish_components_for_ci.py::TestPublishComponentsForCI::test_publish_components
env:
SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
RESOURCE_GROUP: ${{ env.resource_group }}
WORKSPACE_NAME: ${{ env.workspace }}
- name: Upload component Version artifact
uses: actions/upload-artifact@v4
if: always()
with:
name: ${{ env.pytest_component_version_folder }}
path: ${{ env.pytest_component_version_file }}
include-hidden-files: true
run-momo-tests:
name: Run Monitoring Component Tests
runs-on: ubuntu-latest
needs: [check-execution-context, upload-component-specs]
environment: Testing
strategy:
matrix:
group: [1, 2, 3, 4, 5, 6]
steps:
- name: Clone branch
uses: Azure/azureml-assets/.github/actions/clone-repo@main
with:
forked-pr: ${{ needs.check-execution-context.outputs.forked_pr }}
- name: Download component version
id: download-version
uses: actions/download-artifact@v4
with:
name: ${{ env.pytest_component_version_folder }}
path: ./
- name: Use Python 3.9
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Log in to Azure and create resources
uses: ./.github/actions/create-azure-resources
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
scripts-setup-dir: ${{ env.scripts_setup_dir }}
- name: Refresh login (background process)
run: |
while true; do
token_request=$ACTIONS_ID_TOKEN_REQUEST_TOKEN
token_uri=$ACTIONS_ID_TOKEN_REQUEST_URL
token=$(curl -H "Authorization: bearer $token_request" "${token_uri}&audience=api://AzureADTokenExchange" | jq .value -r)
expiration_time=$(jq -R 'split(".") | .[1] | @base64d | fromjson | .exp' <<< $token)
expiration_time_formatted=$(date -u -d @$expiration_time +"%Y-%m-%dT%H:%M:%SZ")
current_time=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
echo "Token expires at: $expiration_time_formatted, Current time: $current_time"
az login --service-principal -u ${{ secrets.AZURE_CLIENT_ID }} -t ${{ secrets.AZURE_TENANT_ID }} --federated-token $token --output none
sleep_timer=$((expiration_time - $(date +%s) - 30))
echo "Sleeping for $sleep_timer seconds"
sleep $sleep_timer
done &
- name: Install dependencies
run: pip install -r ${{ env.testsRootPath }}/requirements.txt
- name: Test asset
run: python -m pytest --junitxml=${{ env.pytest_report_folder }}/group_${{ matrix.group }}_${{ env.pytest_report_file }} ${{ env.momoComponentsRootPath }} -o log_level=DEBUG -n 8 -m "not gsq_test" --ignore ${{ env.momoComponentsRootPath }}/tests/unit/test_gsq_histogram.py --ignore ${{ env.momoComponentsRootPath }}/tests/unit/test_gsq_metrics.py --splits 6 --group ${{ matrix.group }}
env:
SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
RESOURCE_GROUP: ${{ env.resource_group }}
WORKSPACE_NAME: ${{ env.workspace }}
- name: Upload test results
uses: actions/upload-artifact@v3
if: always()
with:
name: ${{ env.pytest_report_folder }}
path: ${{ env.pytest_report_folder }}
report:
name: Publish test results
if: always()
runs-on: ubuntu-latest
needs: run-momo-tests
permissions:
# Required for EnricoMi/publish-unit-test-result-action
checks: write
issues: read
pull-requests: write
steps:
- name: Download test results
id: download-artifact
uses: actions/download-artifact@v3
with:
name: ${{ env.pytest_report_folder }}
path: ${{ env.pytest_report_folder }}
continue-on-error: true
- name: Publish test results
if: steps.download-artifact.outputs.download-path != ''
uses: EnricoMi/publish-unit-test-result-action@v2
with:
check_name: Test Results for ${{ github.workflow }}
junit_files: ${{ env.pytest_report_folder }}/**/*.xml