Skip to content

Commit ecee205

Browse files
authored
Merge pull request #133 from supertokens/test-cicd/test_splitting
ci: test splitting
2 parents 1d34dfb + 3a71369 commit ecee205

9 files changed

+403
-169
lines changed

.circleci/config.yml

+14-16
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
version: 2.1
2+
3+
# this allows you to use CircleCI's dynamic configuration feature
4+
setup: true
5+
26
orbs:
7+
continuation: circleci/[email protected]
38
slack: circleci/[email protected]
49
jq: circleci/[email protected]
510
jobs:
@@ -16,27 +21,20 @@ jobs:
1621
./publish.sh
1722
- slack/status
1823
test:
19-
docker:
20-
- image: rishabhpoddar/supertokens_website_sdk_testing
24+
machine:
25+
image: ubuntu-2204:2024.04.4
2126
steps:
2227
- checkout
23-
- run: update-alternatives --install "/usr/bin/java" "java" "/usr/java/jdk-15.0.1/bin/java" 2
24-
- run: update-alternatives --install "/usr/bin/javac" "javac" "/usr/java/jdk-15.0.1/bin/javac" 2
25-
- run: echo "127.0.0.1 localhost.org" >> /etc/hosts
26-
- run: npm i -d
2728
- run:
28-
name: Run tests
29-
command: cd .circleci/ && ./doTests.sh
30-
no_output_timeout: 30m
31-
- store_artifacts:
32-
path: ../supertokens-root/logs
33-
destination: logfiles
34-
- run: npm run size
35-
- slack/status
29+
name: Generate config
30+
command: cd .circleci && ./generateConfig.sh
31+
- continuation/continue:
32+
configuration_path: .circleci/config_continue.yml
3633
update-docs:
3734
docker:
38-
- image: rishabhpoddar/supertokens_website_sdk_testing
35+
- image: rishabhpoddar/supertokens_website_sdk_testing_node_16
3936
steps:
37+
- run: git config --global url."https://github.com/".insteadOf ssh://[email protected]/ # This makes npm use http instead of ssh (required for node 16)
4038
- checkout
4139
- run: cd ../ && git clone [email protected]:supertokens/supertokens-backend-website.git
4240
- run: (cd .circleci && ./updateDocsInWebsite.sh)
@@ -64,7 +62,7 @@ workflows:
6462
only: /test-cicd\/.*/
6563
- update-docs:
6664
context:
67-
- slack-notification
65+
- slack-notification
6866
filters:
6967
branches:
7068
only:

.circleci/config_continue.yml

+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
version: 2.1
2+
orbs:
3+
continuation: circleci/[email protected]
4+
slack: circleci/[email protected]
5+
jq: circleci/[email protected]
6+
jobs:
7+
test-dev-tag-as-not-passed:
8+
docker:
9+
- image: rishabhpoddar/supertokens_website_sdk_testing_node_16
10+
steps:
11+
- run: git config --global url."https://github.com/".insteadOf ssh://[email protected]/ # This makes npm use http instead of ssh (required for node 16)
12+
- checkout
13+
- run: (cd .circleci/ && ./markDevTagAsTestNotPassed.sh)
14+
test-unit:
15+
docker:
16+
- image: rishabhpoddar/supertokens_website_sdk_testing_node_16
17+
parameters:
18+
fdi-version:
19+
type: string
20+
parallelism: 4
21+
steps:
22+
- run: mkdir -p ~/reports/
23+
- run: git config --global url."https://github.com/".insteadOf ssh://[email protected]/ # This makes npm use http instead of ssh (required for node 16)
24+
- checkout
25+
- run: echo "127.0.0.1 localhost.org" >> /etc/hosts
26+
- run: npm i -d
27+
- run:
28+
command: for i in $(seq 1 5); do (cd .circleci/ && ./doTests.sh << parameters.fdi-version >>) && s=0 && break || s=$? && sleep 10; done; (exit $s) # https://support.circleci.com/hc/en-us/articles/5728720104347-How-To-Retry-an-Intermittently-Failing-Step
29+
environment:
30+
JEST_JUNIT_OUTPUT_DIR: ~/reports/
31+
- run: npm run size
32+
- store_test_results:
33+
path: ~/reports/
34+
test-success:
35+
docker:
36+
- image: rishabhpoddar/supertokens_website_sdk_testing_node_16
37+
steps:
38+
- run: git config --global url."https://github.com/".insteadOf ssh://[email protected]/ # This makes npm use http instead of ssh (required for node 16)
39+
- checkout
40+
- run: (cd .circleci/ && ./markAsSuccess.sh)
41+
- slack/status
42+
43+
workflows:
44+
version: 2
45+
tagged-build:
46+
jobs:
47+
- test-dev-tag-as-not-passed:
48+
filters:
49+
tags:
50+
only: /dev-v[0-9]+(\.[0-9]+)*/
51+
branches:
52+
only: /test-cicd\/.*/
53+
- test-unit:
54+
requires:
55+
- test-dev-tag-as-not-passed
56+
context:
57+
- slack-notification
58+
filters:
59+
tags:
60+
only: /dev-v[0-9]+(\.[0-9]+)*/
61+
branches:
62+
only: /test-cicd\/.*/
63+
matrix:
64+
parameters:
65+
fdi-version: placeholder
66+
- test-success:
67+
requires:
68+
- test-unit
69+
context:
70+
- slack-notification
71+
filters:
72+
tags:
73+
only: /dev-v[0-9]+(\.[0-9]+)*/
74+
branches:
75+
ignore: /.*/

.circleci/doTests.sh

+48-122
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
frontendDriverJson=`cat ../frontendDriverInterfaceSupported.json`
2-
frontendDriverLength=`echo $frontendDriverJson | jq ".versions | length"`
3-
frontendDriverArray=`echo $frontendDriverJson | jq ".versions"`
4-
echo "got frontend driver relations"
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
58

69
# get sdk version
710
version=`cat ../package.json | grep -e '"version":'`
@@ -16,131 +19,54 @@ while IFS='"' read -ra ADDR; do
1619
done
1720
done <<< "$version"
1821

19-
responseStatus=`curl -s -o /dev/null -w "%{http_code}" -X PUT \
20-
https://api.supertokens.io/0/frontend \
21-
-H 'Content-Type: application/json' \
22-
-H 'api-version: 0' \
23-
-d "{
24-
\"password\": \"$SUPERTOKENS_API_KEY\",
25-
\"version\":\"$version\",
26-
\"name\": \"react-native\",
27-
\"frontendDriverInterfaces\": $frontendDriverArray
28-
}"`
29-
if [ $responseStatus -ne "200" ]
22+
driverVersionXY=`curl -s -X GET \
23+
"https://api.supertokens.io/0/frontend-driver-interface/dependency/driver/latest?password=$SUPERTOKENS_API_KEY&mode=DEV&version=$frontendDriverVersion&driverName=node" \
24+
-H 'api-version: 0'`
25+
if [[ `echo $driverVersionXY | jq .driver` == "null" ]]
3026
then
31-
echo "failed core PUT API status code: $responseStatus. Exiting!"
32-
exit 1
27+
echo "fetching latest X.Y version for driver given frontend-driver-interface X.Y version: $frontendDriverVersion gave response: $driverVersionXY. Please make sure all relevant drivers have been pushed."
28+
exit 1
3329
fi
30+
driverVersionXY=$(echo $driverVersionXY | jq .driver | tr -d '"')
3431

35-
someTestsRan=false
36-
i=0
37-
while [ $i -lt $frontendDriverLength ]; do
38-
frontendDriverVersion=`echo $frontendDriverArray | jq ".[$i]"`
39-
frontendDriverVersion=`echo $frontendDriverVersion | tr -d '"'`
40-
i=$((i+1))
41-
42-
driverVersionXY=`curl -s -X GET \
43-
"https://api.supertokens.io/0/frontend-driver-interface/dependency/driver/latest?password=$SUPERTOKENS_API_KEY&mode=DEV&version=$frontendDriverVersion&driverName=node" \
44-
-H 'api-version: 0'`
45-
if [[ `echo $driverVersionXY | jq .driver` == "null" ]]
46-
then
47-
echo "fetching latest X.Y version for driver given frontend-driver-interface X.Y version: $frontendDriverVersion gave response: $driverVersionXY. Please make sure all relevant drivers have been pushed."
48-
exit 1
49-
fi
50-
driverVersionXY=$(echo $driverVersionXY | jq .driver | tr -d '"')
51-
52-
driverInfo=`curl -s -X GET \
53-
"https://api.supertokens.io/0/driver/latest?password=$SUPERTOKENS_API_KEY&mode=DEV&version=$driverVersionXY&name=node" \
54-
-H 'api-version: 0'`
55-
if [[ `echo $driverInfo | jq .tag` == "null" ]]
56-
then
57-
echo "fetching latest X.Y.Z version for driver, X.Y version: $driverVersionXY gave response: $driverInfo"
58-
exit 1
59-
fi
60-
driverTag=$(echo $driverInfo | jq .tag | tr -d '"')
61-
driverVersion=$(echo $driverInfo | jq .version | tr -d '"')
62-
63-
git clone [email protected]:supertokens/supertokens-node.git
64-
cd supertokens-node
65-
git checkout $driverTag
66-
coreDriverJson=`cat ./coreDriverInterfaceSupported.json`
67-
coreDriverLength=`echo $coreDriverJson | jq ".versions | length"`
68-
coreDriverArray=`echo $coreDriverJson | jq ".versions"`
69-
coreDriverVersion=`echo $coreDriverArray | jq ". | last"`
70-
coreDriverVersion=`echo $coreDriverVersion | tr -d '"'`
71-
cd ../
72-
rm -rf supertokens-node
73-
74-
coreFree=`curl -s -X GET \
75-
"https://api.supertokens.io/0/core-driver-interface/dependency/core/latest?password=$SUPERTOKENS_API_KEY&planType=FREE&mode=DEV&version=$coreDriverVersion" \
76-
-H 'api-version: 0'`
77-
if [[ `echo $coreFree | jq .core` == "null" ]]
78-
then
79-
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."
80-
exit 1
81-
fi
82-
coreFree=$(echo $coreFree | jq .core | tr -d '"')
83-
84-
someTestsRan=true
85-
tries=1
86-
87-
while [ $tries -le 3 ]
88-
do
89-
tries=$(( $tries + 1 ))
90-
./setupAndTestWithFreeCore.sh $coreFree $driverTag $version
91-
92-
if [[ $? -ne 0 ]]
93-
then
94-
if [[ $tries -le 3 ]]
95-
then
96-
rm -rf ../../supertokens-root
97-
rm -rf ../TestingApp/test/server/node_modules/supertokens-node
98-
git checkout HEAD -- ../TestingApp/test/server/package.json
99-
echo "test failed... retrying!"
100-
else
101-
echo "test failed... exiting!"
102-
exit 1
103-
fi
104-
else
105-
rm -rf ../../supertokens-root
106-
rm -rf ../TestingApp/test/server/node_modules/supertokens-node
107-
git checkout HEAD -- ../TestingApp/test/server/package.json
108-
break
109-
fi
110-
done
111-
done
112-
113-
# get git branch name-----------
114-
branch_name="$(git symbolic-ref HEAD 2>/dev/null)" ||
115-
branch_name="(unnamed branch)" # detached HEAD
32+
driverInfo=`curl -s -X GET \
33+
"https://api.supertokens.io/0/driver/latest?password=$SUPERTOKENS_API_KEY&mode=DEV&version=$driverVersionXY&name=node" \
34+
-H 'api-version: 0'`
35+
if [[ `echo $driverInfo | jq .tag` == "null" ]]
36+
then
37+
echo "fetching latest X.Y.Z version for driver, X.Y version: $driverVersionXY gave response: $driverInfo"
38+
exit 1
39+
fi
40+
driverTag=$(echo $driverInfo | jq .tag | tr -d '"')
41+
driverVersion=$(echo $driverInfo | jq .version | tr -d '"')
11642

117-
branch_name=${branch_name##refs/heads/}
43+
git clone [email protected]:supertokens/supertokens-node.git
44+
cd supertokens-node
45+
git checkout $driverTag
46+
coreDriverJson=`cat ./coreDriverInterfaceSupported.json`
47+
coreDriverLength=`echo $coreDriverJson | jq ".versions | length"`
48+
coreDriverArray=`echo $coreDriverJson | jq ".versions"`
49+
coreDriverVersion=`echo $coreDriverArray | jq ". | last"`
50+
coreDriverVersion=`echo $coreDriverVersion | tr -d '"'`
51+
cd ../
52+
rm -rf supertokens-node
11853

119-
if [[ $branch_name =~ ^test-cicd/.*$ ]]
54+
coreFree=`curl -s -X GET \
55+
"https://api.supertokens.io/0/core-driver-interface/dependency/core/latest?password=$SUPERTOKENS_API_KEY&planType=FREE&mode=DEV&version=$coreDriverVersion" \
56+
-H 'api-version: 0'`
57+
if [[ `echo $coreFree | jq .core` == "null" ]]
12058
then
121-
echo "This is a ci testing branch ($branch_name), exiting early"
122-
exit 0
59+
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."
60+
exit 1
12361
fi
62+
coreFree=$(echo $coreFree | jq .core | tr -d '"')
12463

125-
if [[ $someTestsRan = "true" ]]
64+
./setupAndTestWithFreeCore.sh $coreFree $driverTag $version
65+
if [[ $? -ne 0 ]]
12666
then
127-
echo "calling /frontend PATCH to make testing passed"
128-
responseStatus=`curl -s -o /dev/null -w "%{http_code}" -X PATCH \
129-
https://api.supertokens.io/0/frontend \
130-
-H 'Content-Type: application/json' \
131-
-H 'api-version: 0' \
132-
-d "{
133-
\"password\": \"$SUPERTOKENS_API_KEY\",
134-
\"version\":\"$version\",
135-
\"name\": \"react-native\",
136-
\"testPassed\": true
137-
}"`
138-
if [ $responseStatus -ne "200" ]
139-
then
140-
echo "patch api failed"
141-
exit 1
142-
fi
143-
else
144-
echo "no test ran"
67+
echo "test failed... exiting!"
14568
exit 1
146-
fi
69+
fi
70+
rm -rf ../../supertokens-root
71+
rm -rf ../TestingApp/test/server/node_modules/supertokens-node
72+
git checkout HEAD -- ../TestingApp/test/server/package.json

.circleci/generateConfig.sh

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
frontendDriverJson=`cat ../frontendDriverInterfaceSupported.json`
2+
frontendDriverArray=`echo $frontendDriverJson | jq ".versions"`
3+
4+
if [ -z "$SUPERTOKENS_API_KEY" ]; then
5+
echo "SUPERTOKENS_API_KEY missing"
6+
exit 1;
7+
fi
8+
9+
sed -i -e 's/fdi-version: placeholder/fdi-version: '`printf "%q" $frontendDriverArray`'/' config_continue.yml

.circleci/markAsSuccess.sh

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# get git branch name-----------
2+
branch_name="$(git symbolic-ref HEAD 2>/dev/null)" ||
3+
branch_name="(unnamed branch)" # detached HEAD
4+
5+
branch_name=${branch_name##refs/heads/}
6+
7+
if [[ $branch_name =~ ^test-cicd/.*$ ]]
8+
then
9+
echo "This is a ci testing branch ($branch_name), exiting early"
10+
exit 0
11+
fi
12+
13+
frontendDriverJson=`cat ../frontendDriverInterfaceSupported.json`
14+
frontendDriverLength=`echo $frontendDriverJson | jq ".versions | length"`
15+
frontendDriverArray=`echo $frontendDriverJson | jq ".versions"`
16+
echo "got frontend driver relations"
17+
18+
# get sdk version
19+
version=`cat ../package.json | grep -e '"version":'`
20+
while IFS='"' read -ra ADDR; do
21+
counter=0
22+
for i in "${ADDR[@]}"; do
23+
if [ $counter == 3 ]
24+
then
25+
version=$i
26+
fi
27+
counter=$(($counter+1))
28+
done
29+
done <<< "$version"
30+
31+
echo "calling /frontend PATCH to make testing passed"
32+
responseStatus=`curl -s -o /dev/null -w "%{http_code}" -X PATCH \
33+
https://api.supertokens.io/0/frontend \
34+
-H 'Content-Type: application/json' \
35+
-H 'api-version: 0' \
36+
-d "{
37+
\"password\": \"$SUPERTOKENS_API_KEY\",
38+
\"version\":\"$version\",
39+
\"name\": \"react-native\",
40+
\"testPassed\": true
41+
}"`
42+
if [ $responseStatus -ne "200" ]
43+
then
44+
echo "patch api failed"
45+
exit 1
46+
fi

0 commit comments

Comments
 (0)