-
Notifications
You must be signed in to change notification settings - Fork 848
158 lines (135 loc) · 5.45 KB
/
Test-CI-dev.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
name: "Test Library CI (dev)"
# please note the comments in `test-CI-main.yml`
on:
push:
branches:
- dev
- install_nightly_version
pull_request_target:
branches:
- dev
- install_nightly_version
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 Environment
#
# Configure AWS credentials
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4.0.2
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: "true"
M2M_SECRET_ARN: "${{ secrets.NIGHTLY_M2M_SECRET_ARN }}"
#
# Setup Python
# (needs to run after "Setup Environment", since we install classiq's version from aws)
#
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install dependencies
if: steps.cache-pip.outputs.cache-hit != 'true'
run: |
# Some weird behavior, that we should understand soon:
# "pip" defaults to use the aws url, and doesn't use the normal url
# so we need to add the normal pip url to every line..
set -e
python -m pip install -U pip \
--extra-index-url https://pypi.org/simple
# Install "classiq" separately
export CODEARTIFACT_AUTH_TOKEN="$( \
aws codeartifact get-authorization-token \
--domain ${{ secrets.CODEARTIFACT_DOMAIN }} \
--domain-owner ${{ secrets.CODEARTIFACT_OWNER }} \
--region ${{ secrets.CODEARTIFACT_REGION }} \
--query authorizationToken \
--output text \
)"
python -m pip install -U --pre \
--extra-index-url "https://aws:$CODEARTIFACT_AUTH_TOKEN@${{ secrets.CODEARTIFACT_DOMAIN }}-${{ secrets.CODEARTIFACT_OWNER }}.d.codeartifact.${{ secrets.CODEARTIFACT_REGION }}.amazonaws.com/pypi/${{ secrets.PYPI_NIGHTLY_NAME }}/simple/" \
--extra-index-url https://pypi.org/simple \
classiq
# debug
python -m pip list | grep -i classiq
# Install everything from the requirements, other than "classiq".
python -m pip install -U $(grep -ivE "classiq" requirements.txt) \
--extra-index-url https://pypi.org/simple
python -m pip install -U -r requirements_tests.txt \
--extra-index-url https://pypi.org/simple
#
# 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://nightly.platform.classiq.io"
CLASSIQ_HOST: "https://staging.api.classiq.io"