Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

End to End kyma test for node and maven #285

Open
wants to merge 10 commits into
base: main
Choose a base branch
from
77 changes: 77 additions & 0 deletions .github/workflows/maven.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,80 @@ jobs:
run: |
npm ci
npm run test:java -- --ci

e2ekymatest:
name: End to End Kyma Test
if: ${{ github.event_name == 'push' || contains(github.event.pull_request.labels.*.name, 'deploy-kyma') }} # run only if label is set
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- name: Setting up environments
run: |
npm i -g @sap/cds-dk
sudo add-apt-repository ppa:cncf-buildpacks/pack-cli
sudo apt-get update
sudo apt-get install pack-cli
mkdir ${HOME}/kyma-binaries
export PATH=${HOME}/kyma-binaries/:$PATH
mkdir ${HOME}/.kube
echo "${{secrets.KUBE_CONFIG}}" | base64 --decode > ${HOME}/.kube/config
(curl -sSL "https://github.com/buildpacks/pack/releases/download/v0.23.0/pack-v0.23.0-linux.tgz" | tar -C ${HOME}/kyma-binaries/ --no-same-owner -xzv pack)
wget "https://get.helm.sh/helm-v3.8.0-linux-amd64.tar.gz"
tar -xvzf helm-v3.8.0-linux-amd64.tar.gz
mv linux-amd64/helm ${HOME}/kyma-binaries/helm
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
chmod +x ./kubectl
mv ./kubectl ${HOME}/kyma-binaries/kubectl
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
registry: ${{secrets.IMAGEREGISTRY}}
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: End to End testing
run: |
releaseName=sflightjava
deploymentName=srv
releaseNamespace=e2e-kyma-test
endpoint=processor/Travel
appPrefix=${releaseName}-${deploymentName}-${releaseNamespace}
cds add helm --force
cds add helm:hana_deployer
cds add helm:xsuaa
hana_image=${{secrets.IMAGEREGISTRY}}/e2e/github/sflight-hana-deployer
srv_image=${{secrets.IMAGEREGISTRY}}/e2e/github/sflight-srv
pack build ${hana_image} --path db --buildpack gcr.io/paketo-buildpacks/nodejs --builder paketobuildpacks/builder:base
mvn -B package
pack build ${srv_image} --path srv/target/*-exec.jar --buildpack gcr.io/paketo-buildpacks/sap-machine --buildpack gcr.io/paketo-buildpacks/java --builder paketobuildpacks/builder:base --env SPRING_PROFILES_ACTIVE=cloud
cp ./chart/xs-security.json xs-security.json.tmp && jq '. |= . + {"authorities":["$XSAPPNAME.admin"]}' xs-security.json.tmp >./chart/xs-security.json && rm xs-security.json.tmp
docker push ${hana_image}
docker push ${srv_image}
helm install ${releaseName} ./chart --namespace ${releaseNamespace} --set global.imagePullSecret.name=${{secrets.IMAGEPULLSECRET}} --set global.domain=${{secrets.DOMAIN}} --set srv.bindings.db.fromSecret=sflight-java-github-db --set srv.image.repository=${srv_image} --set hana_deployer.image.repository=${hana_image} --set hana_deployer.bindings.hana.fromSecret=sflight-java-github-db --set xsuaa.parameters.xsappname=sflightjava-e2eKyma-test
kubectl rollout status deployment ${releaseName}-${deploymentName} --timeout=3m
curl --max-time 10 --retry 5 --retry-delay 3 -f -LI -k https://${appPrefix}.${{secrets.DOMAIN}}
xsuaaSecret=$(echo $(kubectl get secret ${releaseName}-${deploymentName}-auth -o json))
clientID=$(jq -r '.data.clientid | @base64d' <<< "$xsuaaSecret")
clientSecret=$(jq -r '.data.clientsecret | @base64d' <<< "$xsuaaSecret")
url=$(jq -r '.data.url | @base64d' <<< "$xsuaaSecret")
appPrefix=${releaseName}-${deploymentName}-${releaseNamespace}
appUrl=https://${appPrefix}.${{secrets.DOMAIN}}
auth=$(printf "%s:%s" "$clientID" "$clientSecret" | base64 -w0)
finalUrl="${url}/oauth/token?grant_type=client_credentials&response_type=token"
response=$(curl --location --request GET "${finalUrl}" --header "Authorization: Basic ${auth}")
accessToken=$(jq -r '.access_token' <<< "$response")
status=$(curl -I --location --request GET "${appUrl}/${endpoint}" --header "Authorization: Bearer ${accessToken}" -o /dev/null -w '%{http_code}\n' -s)
if [ $status -eq "200" ];
then
exit 0
else
exit 1
fi
- name: Helm Uninstall test
if: always()
run: |
releaseNamespace=e2e-kyma-test
helm uninstall sflightjava --namespace ${releaseNamespace}


79 changes: 74 additions & 5 deletions .github/workflows/node.js.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,79 @@ jobs:
grant-users: ${{ secrets.GRANT_USERS }}

e2etest:
name: E2E Tests
name: E2E Node Tests
if: ${{ github.event_name == 'push' || contains(github.event.pull_request.labels.*.name, 'deploy-kyma') }} # run only if label is set
runs-on: ubuntu-latest
needs: deployment
steps:
- name: More UI tests
run: |
echo ${{ needs.deployment.outputs.ui_app_url }}
- uses: actions/checkout@v2
- name: Set up the environment
run: |
npm i -g @sap/cds-dk
sudo add-apt-repository ppa:cncf-buildpacks/pack-cli
sudo apt-get update
sudo apt-get install pack-cli
mkdir ${HOME}/kyma-binaries
export PATH=${HOME}/kyma-binaries/:$PATH
mkdir ${HOME}/.kube
echo "${{ secrets.KUBE_CONFIG }}" | base64 --decode > ${HOME}/.kube/config
(curl -sSL "https://github.com/buildpacks/pack/releases/download/v0.23.0/pack-v0.23.0-linux.tgz" | tar -C ${HOME}/kyma-binaries/ --no-same-owner -xzv pack)
wget "https://get.helm.sh/helm-v3.8.0-linux-amd64.tar.gz"
tar -xvzf helm-v3.8.0-linux-amd64.tar.gz
mv linux-amd64/helm ${HOME}/kyma-binaries/helm
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
chmod +x ./kubectl
mv ./kubectl ${HOME}/kyma-binaries/kubectl

- name: Login to Docker Hub
uses: docker/login-action@v2
with:
registry: ${{ secrets.IMAGEREGISTRY }}
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: E2E Test for Node SFlight App
run: |
releaseName=sflight
deploymentName=srv
releaseNamespace=e2e-kyma-test
appPrefix=${releaseName}-${deploymentName}-${releaseNamespace}
cds add helm --force
cp ./chart/xs-security.json xs-security.json.tmp && jq '. |= . + {"authorities":["$XSAPPNAME.admin"]}' xs-security.json.tmp >./chart/xs-security.json && rm xs-security.json.tmp
cds build --profile production,node
hana_image=${{secrets.IMAGEREGISTRY}}/e2e/sflight-hana-deployer
srv_image=${{secrets.IMAGEREGISTRY}}/e2e/sflight-srv
pack build ${hana_image} --path gen/db --buildpack gcr.io/paketo-buildpacks/nodejs --builder paketobuildpacks/builder:base
pack build ${srv_image} --path gen/srv --buildpack gcr.io/paketo-buildpacks/nodejs --builder paketobuildpacks/builder:base

docker push ${hana_image}
docker push ${srv_image}

helm upgrade --install ${releaseName} ./chart --namespace ${releaseNamespace} --set global.imagePullSecret.name=${{ secrets.IMAGEPULLSECRET }} --set global.domain=${{ secrets.domain }} --set xsuaa.parameters.xsappname=sflight-e2e-test-2 --set srv.bindings.db.fromSecret=sflight-github-db --set srv.image.repository=${srv_image} --set hana_deployer.image.repository=${hana_image} --set hana_deployer.bindings.hana.fromSecret=sflight-github-db
kubectl rollout status deployment ${releaseName}-${deploymentName} --timeout=3m
curl --max-time 10 --retry 5 --retry-delay 3 -f -LI -k https://${appPrefix}.${{secrets.DOMAIN}}
xsuaaSecret=$(echo $(kubectl get secret ${releaseName}-${deploymentName}-auth -o json))

clientID=$(jq -r '.data.clientid | @base64d' <<< "$xsuaaSecret")
clientSecret=$(jq -r '.data.clientsecret | @base64d' <<< "$xsuaaSecret")
url=$(jq -r '.data.url | @base64d' <<< "$xsuaaSecret")
appPrefix=${releaseName}-${deploymentName}-${releaseNamespace}
appUrl=https://${appPrefix}.${{secrets.DOMAIN}}
auth=$(printf "%s:%s" "$clientID" "$clientSecret" | base64 -w0)

finalUrl="${url}/oauth/token?grant_type=client_credentials&response_type=token"
response=$(curl --fail --location --request GET "${finalUrl}" --header "Authorization: Basic ${auth}")
accessToken=$(jq -r '.access_token' <<< "$response")
status=$(curl --fail --location --request GET "${appUrl}/${endpoint}" --header "Authorization: Bearer ${accessToken}" -o /dev/null -w '%{http_code}\n' -s)
if [ $status -eq "200" ];
then
exit 0
else
exit 1
fi


- name: Uninstall Application
if: always()
run: |
helm uninstall sflight
kubectl delete jobs --all