Skip to content

Commit 0429345

Browse files
committed
feat: add Litestar integration with SuperTokens and enhance testing setup
1 parent c933915 commit 0429345

File tree

21 files changed

+53501
-183
lines changed

21 files changed

+53501
-183
lines changed

.circleci/authReactLitestar.sh

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
echo "Starting tests for FDI $1";
2+
3+
if [ -z "$SUPERTOKENS_API_KEY" ]; then
4+
echo "SUPERTOKENS_API_KEY not set"
5+
exit 1
6+
fi
7+
frontendDriverVersion=$1
8+
frontendDriverVersion=`echo $frontendDriverVersion | tr -d '"'`
9+
if [[ $frontendDriverVersion == '1.0' ]]; then
10+
exit 0
11+
fi
12+
13+
coreDriverJson=`cat ../coreDriverInterfaceSupported.json`
14+
coreDriverLength=`echo $coreDriverJson | jq ".versions | length"`
15+
coreDriverArray=`echo $coreDriverJson | jq ".versions"`
16+
coreDriverVersion=`echo $coreDriverArray | jq ". | last"`
17+
coreDriverVersion=`echo $coreDriverVersion | tr -d '"'`
18+
coreFree=`curl -s -X GET \
19+
"https://api.supertokens.io/0/core-driver-interface/dependency/core/latest?password=$SUPERTOKENS_API_KEY&planType=FREE&mode=DEV&version=$coreDriverVersion&driverName=python" \
20+
-H 'api-version: 1'`
21+
if [[ `echo $coreFree | jq .core` == "null" ]]
22+
then
23+
echo "fetching latest X.Y version for core given core-driver-interface X.Y version: $coreDriverVersion, planType: FREE gave response: $coreFree. Please make sure all relevant cores have been pushed."
24+
exit 1
25+
fi
26+
coreFree=$(echo $coreFree | jq .core | tr -d '"')
27+
28+
29+
frontendVersionXY=`curl -s -X GET \
30+
"https://api.supertokens.io/0/frontend-driver-interface/dependency/frontend/latest?password=$SUPERTOKENS_API_KEY&frontendName=website&mode=DEV&version=$frontendDriverVersion&driverName=python" \
31+
-H 'api-version: 1'`
32+
if [[ `echo $frontendVersionXY | jq .frontend` == "null" ]]
33+
then
34+
echo "fetching latest X.Y version for frontend given frontend-driver-interface X.Y version: $frontendDriverVersion, name: webiste gave response: $frontend. Please make sure all relevant versions have been pushed."
35+
exit 1
36+
fi
37+
frontendVersionXY=$(echo $frontendVersionXY | jq .frontend | tr -d '"')
38+
39+
frontendInfo=`curl -s -X GET \
40+
"https://api.supertokens.io/0/driver/latest?password=$SUPERTOKENS_API_KEY&mode=DEV&version=$frontendVersionXY&name=website" \
41+
-H 'api-version: 0'`
42+
if [[ `echo $frontendInfo | jq .tag` == "null" ]]
43+
then
44+
echo "fetching latest X.Y.Z version for frontend, X.Y version: $frontendVersionXY gave response: $frontendInfo"
45+
exit 1
46+
fi
47+
frontendTag=$(echo $frontendInfo | jq .tag | tr -d '"')
48+
frontendVersion=$(echo $frontendInfo | jq .version | tr -d '"')
49+
50+
nodeVersionXY=`curl -s -X GET \
51+
"https://api.supertokens.io/0/frontend-driver-interface/dependency/driver/latest?password=$SUPERTOKENS_API_KEY&mode=DEV&version=$frontendDriverVersion&driverName=node&frontendName=auth-react" \
52+
-H 'api-version: 1'`
53+
if [[ `echo $nodeVersionXY | jq .driver` == "null" ]]
54+
then
55+
echo "fetching latest X.Y version for driver given frontend-driver-interface X.Y version: $frontendDriverVersion gave response: $nodeVersionXY. Please make sure all relevant drivers have been pushed."
56+
exit 1
57+
fi
58+
nodeVersionXY=$(echo $nodeVersionXY | jq .driver | tr -d '"')
59+
60+
nodeInfo=`curl -s -X GET \
61+
"https://api.supertokens.io/0/driver/latest?password=$SUPERTOKENS_API_KEY&mode=DEV&version=$nodeVersionXY&name=node" \
62+
-H 'api-version: 0'`
63+
if [[ `echo $nodeInfo | jq .tag` == "null" ]]
64+
then
65+
echo "fetching latest X.Y.Z version for driver, X.Y version: $nodeVersionXY gave response: $nodeInfo"
66+
exit 1
67+
fi
68+
nodeTag=$(echo $nodeInfo | jq .tag | tr -d '"')
69+
70+
frontendAuthReactVersionXY=`curl -s -X GET \
71+
"https://api.supertokens.io/0/frontend-driver-interface/dependency/frontend/latest?password=$SUPERTOKENS_API_KEY&frontendName=auth-react&mode=DEV&version=$frontendDriverVersion&driverName=python" \
72+
-H 'api-version: 1'`
73+
if [[ `echo $frontendAuthReactVersionXY | jq .frontend` == "null" ]]
74+
then
75+
echo "fetching latest X.Y version for frontend given frontend-driver-interface X.Y version: $frontendDriverVersion, name: auth-react gave response: $frontend. Please make sure all relevant frontend libs have been pushed."
76+
exit 1
77+
fi
78+
frontendAuthReactVersionXY=$(echo $frontendAuthReactVersionXY | jq .frontend | tr -d '"')
79+
80+
frontendAuthReactInfo=`curl -s -X GET \
81+
"https://api.supertokens.io/0/driver/latest?password=$SUPERTOKENS_API_KEY&mode=DEV&version=$frontendAuthReactVersionXY&name=auth-react" \
82+
-H 'api-version: 0'`
83+
if [[ `echo $frontendAuthReactInfo | jq .tag` == "null" ]]
84+
then
85+
echo "fetching latest X.Y.Z version for frontend, X.Y version: $frontendAuthReactVersionXY gave response: $frontendAuthReactInfo"
86+
exit 1
87+
fi
88+
frontendAuthReactTag=$(echo $frontendAuthReactInfo | jq .tag | tr -d '"')
89+
frontendAuthReactVersion=$(echo $frontendAuthReactInfo | jq .version | tr -d '"')
90+
91+
if [[ $frontendDriverVersion == '1.3' || $frontendDriverVersion == '1.8' ]]; then
92+
# we skip this since the tests for auth-react here are not reliable due to race conditions...
93+
94+
# we skip 1.8 since the SDK with just 1.8 doesn't have the right scripts
95+
exit 0
96+
else
97+
./setupAndTestWithAuthReactWithLitestar.sh $coreFree $frontendAuthReactTag $nodeTag
98+
if [[ $? -ne 0 ]]
99+
then
100+
echo "test failed for auth-react tests... exiting!"
101+
exit 1
102+
fi
103+
fi

.circleci/config_continue.yml

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,28 @@ jobs:
7676
- run: make with-fastapi
7777
- run: (cd .circleci/ && ./websiteFastApi.sh << parameters.fdi-version >>)
7878
- slack/status
79+
test-website-litestar:
80+
docker:
81+
- image: python:<< parameters.python-version >>
82+
- image: rishabhpoddar/oauth-server-cicd
83+
resource_class: large
84+
parameters:
85+
fdi-version:
86+
type: string
87+
python-version:
88+
type: string
89+
parallelism: 4
90+
steps:
91+
- checkout
92+
- run: apt update && apt install -y bc jq lsof libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libgconf-2-4 libgdk-pixbuf2.0-0 libgtk-3-0 libgbm1 libxss1 libasound2 libxshmfence1 xvfb
93+
- run: (cd .circleci/ && ./installJava.sh)
94+
- run: (cd .circleci/ && ./installNode.sh 20)
95+
- run: git config --global url."https://github.com/".insteadOf ssh://git@github.com/
96+
- run: echo "127.0.0.1 localhost.org" >> /etc/hosts
97+
- run: python3 -m pip install pip setuptools --upgrade
98+
- run: make with-litestar
99+
- run: (cd .circleci/ && ./websiteLitestar.sh << parameters.fdi-version >>)
100+
- slack/status
79101
test-website-flask:
80102
docker:
81103
- image: python:<< parameters.python-version >>
@@ -309,6 +331,39 @@ jobs:
309331
- store_artifacts:
310332
path: ~/test_report/react-logs
311333
destination: react-logs
334+
test-authreact-litestar:
335+
docker:
336+
- image: python:<< parameters.python-version >>
337+
- image: rishabhpoddar/oauth-server-cicd
338+
resource_class: large
339+
environment:
340+
MOCHA_FILE: /root/test_report/report_node-<< parameters.fdi-version >>.xml
341+
parameters:
342+
fdi-version:
343+
type: string
344+
python-version:
345+
type: string
346+
parallelism: 4
347+
steps:
348+
- checkout
349+
- attach_workspace:
350+
at: /
351+
- run: apt update && apt install -y bc jq lsof libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libgconf-2-4 libgdk-pixbuf2.0-0 libgtk-3-0 libgbm1 libxss1 libasound2 libxshmfence1 xvfb
352+
- run: (cd .circleci/ && ./installJava.sh)
353+
- run: (cd .circleci/ && ./installNode.sh 20)
354+
- run: git config --global url."https://github.com/".insteadOf ssh://git@github.com/
355+
- run: echo "127.0.0.1 localhost.org" >> /etc/hosts
356+
- run: python3 -m pip install pip setuptools --upgrade
357+
- run: make with-litestar
358+
- run: (cd .circleci && ./authReactLitestar.sh << parameters.fdi-version >>)
359+
- store_test_results:
360+
path: /root/test_report/report_node-<< parameters.fdi-version >>.xml
361+
- store_artifacts:
362+
path: ~/test_report/screenshots
363+
destination: screenshots
364+
- store_artifacts:
365+
path: ~/test_report/react-logs
366+
destination: react-logs
312367
test-success:
313368
docker:
314369
- image: rishabhpoddar/supertokens_python_driver_testing
@@ -370,6 +425,20 @@ workflows:
370425
only: /dev-v[0-9]+(\.[0-9]+)*/
371426
branches:
372427
only: /test-cicd\/.*/
428+
- test-website-litestar:
429+
requires:
430+
- test-dev-tag-as-not-passed
431+
context:
432+
- slack-notification
433+
matrix:
434+
parameters:
435+
fdi-version: placeholder
436+
python-version: ['3.8', '3.13']
437+
filters:
438+
tags:
439+
only: /dev-v[0-9]+(\.[0-9]+)*/
440+
branches:
441+
only: /test-cicd\/.*/
373442
- test-website-flask:
374443
requires:
375444
- test-dev-tag-as-not-passed
@@ -482,11 +551,26 @@ workflows:
482551
parameters:
483552
fdi-version: placeholder
484553
python-version: ['3.8', '3.13']
554+
- test-authreact-litestar:
555+
requires:
556+
- test-dev-tag-as-not-passed
557+
context:
558+
- slack-notification
559+
filters:
560+
tags:
561+
only: /dev-v[0-9]+(\.[0-9]+)*/
562+
branches:
563+
only: /test-cicd\/.*/
564+
matrix:
565+
parameters:
566+
fdi-version: placeholder
567+
python-version: ['3.8', '3.13']
485568
- test-success:
486569
requires:
487570
- test-unit
488571
- test-backend-sdk-testing
489572
- test-website-fastapi
573+
- test-website-litestar
490574
- test-website-flask
491575
- test-website-django
492576
- test-website-drf-async
@@ -495,6 +579,7 @@ workflows:
495579
- test-authreact-fastapi
496580
- test-authreact-flask
497581
- test-authreact-django
582+
- test-authreact-litestar
498583
context:
499584
- slack-notification
500585
filters:

.circleci/setupAndTestWithAuthReactWithLitestar.sh

Whitespace-only changes.

.circleci/websiteLitestar.sh

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
coreDriverJson=`cat ../coreDriverInterfaceSupported.json`
2+
coreDriverLength=`echo $coreDriverJson | jq ".versions | length"`
3+
coreDriverArray=`echo $coreDriverJson | jq ".versions"`
4+
echo "got core driver relations"
5+
6+
# get driver version
7+
version=`cat ../setup.py | grep -e 'version='`
8+
while IFS='"' read -ra ADDR; do
9+
counter=0
10+
for i in "${ADDR[@]}"; do
11+
if [ $counter == 1 ]
12+
then
13+
version=$i
14+
fi
15+
counter=$(($counter+1))
16+
done
17+
done <<< "$version"
18+
19+
someFrontendTestsRan=false
20+
i=0
21+
coreDriverVersion=`echo $coreDriverArray | jq ". | last"`
22+
coreDriverVersion=`echo $coreDriverVersion | tr -d '"'`
23+
coreFree=`curl -s -X GET \
24+
"https://api.supertokens.io/0/core-driver-interface/dependency/core/latest?password=$SUPERTOKENS_API_KEY&planType=FREE&mode=DEV&version=$coreDriverVersion&driverName=python" \
25+
-H 'api-version: 1'`
26+
if [[ `echo $coreFree | jq .core` == "null" ]]
27+
then
28+
echo "fetching latest X.Y version for core given core-driver-interface X.Y version: $coreDriverVersion, planType: FREE gave response: $coreFree. Please make sure all relevant cores have been pushed."
29+
exit 1
30+
fi
31+
coreFree=$(echo $coreFree | jq .core | tr -d '"')
32+
33+
34+
frontendDriverVersion=$1
35+
frontendDriverVersion=`echo $frontendDriverVersion | tr -d '"'`
36+
37+
frontendVersionXY=`curl -s -X GET \
38+
"https://api.supertokens.io/0/frontend-driver-interface/dependency/frontend/latest?password=$SUPERTOKENS_API_KEY&frontendName=website&mode=DEV&version=$frontendDriverVersion&driverName=node" \
39+
-H 'api-version: 1'`
40+
if [[ `echo $frontendVersionXY | jq .frontend` == "null" ]]
41+
then
42+
echo "fetching latest X.Y version for frontend given frontend-driver-interface X.Y version: $frontendDriverVersion, name: website gave response: $frontend. Please make sure all relevant versions have been pushed."
43+
exit 1
44+
fi
45+
frontendVersionXY=$(echo $frontendVersionXY | jq .frontend | tr -d '"')
46+
47+
frontendInfo=`curl -s -X GET \
48+
"https://api.supertokens.io/0/frontend/latest?password=$SUPERTOKENS_API_KEY&mode=DEV&version=$frontendVersionXY&name=website" \
49+
-H 'api-version: 0'`
50+
if [[ `echo $frontendInfo | jq .tag` == "null" ]]
51+
then
52+
echo "fetching latest X.Y.Z version for frontend, X.Y version: $frontendVersionXY gave response: $frontendInfo"
53+
exit 1
54+
fi
55+
frontendTag=$(echo $frontendInfo | jq .tag | tr -d '"')
56+
frontendVersion=$(echo $frontendInfo | jq .version | tr -d '"')
57+
58+
nodeVersionXY=`curl -s -X GET \
59+
"https://api.supertokens.io/0/frontend-driver-interface/dependency/driver/latest?password=$SUPERTOKENS_API_KEY&mode=DEV&version=$frontendDriverVersion&driverName=node&frontendName=website" \
60+
-H 'api-version: 1'`
61+
if [[ `echo $nodeVersionXY | jq .driver` == "null" ]]
62+
then
63+
echo "fetching latest X.Y version for driver given frontend-driver-interface X.Y version: $frontendDriverVersion gave response: $nodeVersionXY. Please make sure all relevant drivers have been pushed."
64+
exit 1
65+
fi
66+
nodeVersionXY=$(echo $nodeVersionXY | jq .driver | tr -d '"')
67+
68+
nodeInfo=`curl -s -X GET \
69+
"https://api.supertokens.io/0/driver/latest?password=$SUPERTOKENS_API_KEY&mode=DEV&version=$nodeVersionXY&name=node" \
70+
-H 'api-version: 0'`
71+
if [[ `echo $nodeInfo | jq .tag` == "null" ]]
72+
then
73+
echo "fetching latest X.Y.Z version for driver, X.Y version: $nodeVersionXY gave response: $nodeInfo"
74+
exit 1
75+
fi
76+
nodeTag=$(echo $nodeInfo | jq .tag | tr -d '"')
77+
78+
tries=1
79+
while [ $tries -le 3 ]
80+
do
81+
tries=$(( $tries + 1 ))
82+
./setupAndTestWithFrontend.sh $coreFree $frontendTag $nodeTag
83+
if [[ $? -ne 0 ]]
84+
then
85+
if [[ $tries -le 3 ]]
86+
then
87+
rm -rf ../../supertokens-root
88+
rm -rf ../../supertokens-website
89+
echo "failed test.. retrying!"
90+
else
91+
echo "test failed for website tests... exiting!"
92+
exit 1
93+
fi
94+
else
95+
rm -rf ../../supertokens-root
96+
rm -rf ../../supertokens-website
97+
break
98+
fi
99+
done

0 commit comments

Comments
 (0)