-
Notifications
You must be signed in to change notification settings - Fork 851
148 lines (125 loc) · 5.09 KB
/
Test-CI-main.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
name: "Test Library CI (main)"
# This workflow always run in the context of Classiq/classiq-library (base repo) but might use a branch from a fork to test its contribution
# PRs from users (should be from a fork) need to targePrint repository namet `main` branch which runs against `prod` environment
on:
push: # Trigger the workflow on push to the specific branch
branches:
- main
pull_request_target: # Trigger the workflow on pull requests targeting the specific branch
# Note: `pull_request_target` ensures that the tests run in the context of the `main` branch, not in the user's fork.
branches:
- main
workflow_dispatch:
defaults:
run:
shell: bash
jobs:
test:
permissions:
id-token: write
contents: read
runs-on: ubuntu-latest
steps:
#
# Setup Repository
#
- name: Checkout repository
uses: actions/checkout@v4
- name: Checkout the target branch
id: checkout
run: |
set -ex
# Debugging: initial git status
echo "==== Git status before checkout ===="
git status
# Handle different GitHub Actions events
if [[ "${{ github.event_name }}" == "pull_request_target" ]]; then
echo "Handling pull_request_target event"
echo "SHOULD_TEST_ALL_FILES=false" >> $GITHUB_ENV
if [ "${{ github.event.pull_request.head.repo.full_name }}" != "${{ github.repository }}" ]; then
echo "PR from a fork detected. Checking out the fork's branch."
git remote add fork https://github.com/${{ github.event.pull_request.head.repo.full_name }}.git
git fetch fork ${{ github.event.pull_request.head.ref }}
git checkout -B ci-testing-branch FETCH_HEAD # Tested code is comming from this branch (contributer's)
else
echo "PR from the same repository detected. Checking out the branch."
git fetch origin ${{ github.event.pull_request.head.ref }}
git checkout ${{ github.event.pull_request.head.ref }}
fi
elif [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
echo "Handling workflow_dispatch event: No checkout needed"
echo "SHOULD_TEST_ALL_FILES=true" >> $GITHUB_ENV
echo "list_of_ipynb_changed=**/*.ipynb" >> $GITHUB_ENV
elif [[ "${{ github.event_name }}" == "push" ]]; then
echo "Handling push event: No checkout needed"
else
echo "Unsupported event type: ${github.event_name}. Exiting."
exit 1
fi
# Debugging: final git status
echo "==== Git status after checkout ===="
git status
#
# Setup Python
#
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Get latest classiq version for cache key
id: classiq-version
run: |
echo "LATEST_CLASSIQ_VERSION=$(pip index versions classiq 2>/dev/null | grep classiq | cut -d '(' -f2 | cut -d ')' -f1)" >> $GITHUB_OUTPUT
# The caching we do follows from
# https://stackoverflow.com/questions/59127258/how-can-i-use-pip-cache-in-github-actions
- uses: actions/cache@v2
id: cache-pip
with:
path: ~/.cache/pip
key: ${{ runner.os }}-venv-${{ hashFiles('**/requirements*.txt') }}-classiq-${{steps.classiq-version.outputs.LATEST_CLASSIQ_VERSION}}
restore-keys: |
${{ runner.os }}-venv-
- name: Install dependencies
if: steps.cache-pip.outputs.cache-hit != 'true'
run: |
set -e
python -m pip install -U pip
python -m pip install -U -r requirements.txt
python -m pip install -U -r requirements_tests.txt
#
# Setup Environment
#
# Configure AWS credentials
- name: Configure AWS Credentials
uses: aws-actions/[email protected]
with:
role-to-assume: ${{ secrets.AWS_ROLE }}
aws-region: us-east-1
mask-aws-account-id: true
# Set authentication with M2M token
- name: Set authentication
run: .github/scripts/get_m2m_token.sh
env:
IS_DEV: "false"
M2M_SECRET_ARN: "${{ secrets.PROD_M2M_SECRET_ARN }}"
#
# Propagate CI information to python tests
#
- name: Get changed notebook files
id: changed-files-ipynb
uses: tj-actions/changed-files@v44
with:
files: |
**/*.ipynb
# Run Notebook Tests
- name: Run Notebooks
run: python -m pytest --log-cli-level=INFO tests
env:
# to disable a warning in Jupyter notebooks
JUPYTER_PLATFORM_DIRS: "1"
# Passing which notebooks changed
SHOULD_TEST_ALL_FILES: "${{ env.SHOULD_TEST_ALL_FILES }}"
LIST_OF_IPYNB_CHANGED: "${{ steps.changed-files-ipynb.outputs.all_changed_files }}"
# Passing environment information
CLASSIQ_IDE: "https://platform.classiq.io"
CLASSIQ_HOST: "https://api.classiq.io"