This commit changes the client test workflow into building the fat container's image, and so builds server and RTS as well, in order to achieve that.
120 lines
4.5 KiB
Bash
Executable File
120 lines
4.5 KiB
Bash
Executable File
#! /bin/sh
|
|
|
|
# This script is responsible for setting up the local Nginx server for running E2E Cypress tests
|
|
# on our CI/CD system. Currently the script is geared towards Github Actions
|
|
|
|
# Serve the react bundle on a specific port. Nginx will proxy to this port
|
|
echo "Starting the setup the test framework"
|
|
sudo echo "127.0.0.1 dev.appsmith.com" | sudo tee -a /etc/hosts
|
|
serve -s build -p 3000 &
|
|
|
|
# Substitute all the env variables in nginx
|
|
vars_to_substitute=$(printf '\$%s,' $(env | grep -o "^APPSMITH_[A-Z0-9_]\+" | xargs))
|
|
cat ./docker/templates/nginx-app.conf.template | sed -e "s|__APPSMITH_CLIENT_PROXY_PASS__|http://localhost:3000|g" | sed -e "s|__APPSMITH_SERVER_PROXY_PASS__|http://localhost:8080|g" | envsubst ${vars_to_substitute} | sed -e 's|\${\(APPSMITH_[A-Z0-9_]*\)}||g' > ./docker/nginx.conf
|
|
cat ./docker/templates/nginx-root.conf.template | envsubst ${vars_to_substitute} | sed -e 's|\${\(APPSMITH_[A-Z0-9_]*\)}||g' > ./docker/nginx-root.conf
|
|
|
|
# Create the SSL files for Nginx. Required for service workers to work properly.
|
|
touch ./docker/dev.appsmith.com.pem ./docker/dev.appsmith.com-key.pem
|
|
echo "$APPSMITH_SSL_CERTIFICATE" > ./docker/dev.appsmith.com.pem
|
|
echo "$APPSMITH_SSL_KEY" > ./docker/dev.appsmith.com-key.pem
|
|
|
|
echo "Going to run the nginx server"
|
|
sudo docker pull nginx:latest
|
|
sudo docker pull postgres:latest
|
|
|
|
sudo docker run --network host --name wildcard-nginx -d -p 80:80 -p 443:443 \
|
|
-v `pwd`/docker/nginx-root.conf:/etc/nginx/nginx.conf \
|
|
-v `pwd`/docker/nginx.conf:/etc/nginx/conf.d/app.conf \
|
|
-v `pwd`/docker/dev.appsmith.com.pem:/etc/certificate/dev.appsmith.com.pem \
|
|
-v `pwd`/docker/dev.appsmith.com-key.pem:/etc/certificate/dev.appsmith.com-key.pem \
|
|
nginx:latest &
|
|
|
|
sudo docker run --network host --name postgres -d -p 5432:5432 \
|
|
-e POSTGRES_PASSWORD=$POSTGRES_PASSWORD \
|
|
-v `pwd`/cypress/init-pg-dump-for-test.sql:/docker-entrypoint-initdb.d/init-pg-dump-for-test.sql \
|
|
--health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 \
|
|
postgres:latest &
|
|
|
|
sudo docker run -p 127.0.0.1:3306:3306 --name mariadb -e MARIADB_ROOT_PASSWORD=root123 -d mariadb
|
|
|
|
echo "Sleeping for 30 seconds to let the MySQL start"
|
|
sleep 30
|
|
|
|
sudo docker exec -i mariadb mysql -uroot -proot123 mysql < `pwd`/cypress/init-mysql-dump-for-test.sql
|
|
|
|
|
|
echo "Sleeping for 30 seconds to let the servers start"
|
|
sleep 30
|
|
|
|
echo "Checking if the containers have started"
|
|
sudo docker ps -a
|
|
for fcid in $(sudo docker ps -a | awk '/Exited/ { print $1 }'); do
|
|
echo "Logs for container '$fcid'."
|
|
docker logs "$fcid"
|
|
done
|
|
if sudo docker ps -a | grep -q Exited; then
|
|
echo "One or more containers failed to start." >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "Checking if the server has started"
|
|
status_code=$(curl -o /dev/null -s -w "%{http_code}\n" https://dev.appsmith.com/api/v1/users)
|
|
|
|
retry_count=1
|
|
|
|
while [ "$retry_count" -le "3" -a "$status_code" -eq "502" ]; do
|
|
echo "Hit 502.Server not started retrying..."
|
|
retry_count=$((1 + $retry_count))
|
|
sleep 30
|
|
status_code=$(curl -o /dev/null -s -w "%{http_code}\n" https://dev.appsmith.com/api/v1/users)
|
|
done
|
|
|
|
echo "Checking if client and server have started"
|
|
ps -ef |grep java 2>&1
|
|
ps -ef |grep serve 2>&1
|
|
|
|
if [ "$status_code" -eq "502" ]; then
|
|
echo "Unable to connect to server"
|
|
exit 1
|
|
fi
|
|
|
|
# Create the test user
|
|
curl -k --request POST -v 'https://dev.appsmith.com/api/v1/users' \
|
|
--header 'Content-Type: application/json' \
|
|
--data-raw '{
|
|
"name" : "'"$CYPRESS_USERNAME"'",
|
|
"email" : "'"$CYPRESS_USERNAME"'",
|
|
"source" : "FORM",
|
|
"state" : "ACTIVATED",
|
|
"isEnabled" : "true",
|
|
"password": "'"$CYPRESS_PASSWORD"'"
|
|
}'
|
|
|
|
#Create another testUser1
|
|
curl -k --request POST -v 'https://dev.appsmith.com/api/v1/users' \
|
|
--header 'Content-Type: application/json' \
|
|
--data-raw '{
|
|
"name" : "'"$CYPRESS_TESTUSERNAME1"'",
|
|
"email" : "'"$CYPRESS_TESTUSERNAME1"'",
|
|
"source" : "FORM",
|
|
"state" : "ACTIVATED",
|
|
"isEnabled" : "true",
|
|
"password": "'"$CYPRESS_TESTPASSWORD1"'"
|
|
}'
|
|
|
|
#Create another testUser2
|
|
curl -k --request POST -v 'https://dev.appsmith.com/api/v1/users' \
|
|
--header 'Content-Type: application/json' \
|
|
--data-raw '{
|
|
"name" : "'"$CYPRESS_TESTUSERNAME2"'",
|
|
"email" : "'"$CYPRESS_TESTUSERNAME2"'",
|
|
"source" : "FORM",
|
|
"state" : "ACTIVATED",
|
|
"isEnabled" : "true",
|
|
"password": "'"$CYPRESS_TESTPASSWORD2"'"
|
|
}'
|
|
|
|
# DEBUG=cypress:* $(npm bin)/cypress version
|
|
# sed -i -e "s|api_url:.*$|api_url: $CYPRESS_URL|g" /github/home/.cache/Cypress/4.1.0/Cypress/resources/app/packages/server/config/app.yml
|
|
# cat /github/home/.cache/Cypress/4.1.0/Cypress/resources/app/packages/server/config/app.yml
|