name: performance testing env: # thirdparties DOCKER_SERVER: tip-tip-wlan-cloud-docker-repo.jfrog.io DOCKER_USER_NAME: wlan-testing-cicd DOCKER_USER_PASSWORD: ${{ secrets.DOCKER_USER_PASSWORD }} # AWS credentials AWS_EKS_NAME: tip-wlan-main AWS_DEFAULT_OUTPUT: json AWS_DEFAULT_REGION: us-east-2 AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_CLIENT_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_CLIENT_KEY }} # Cloud SDK certs CACERT: ${{ secrets.CACERT }} CAKEY: ${{ secrets.CAKEY }} ALLURE_CLI_VERSION: 2.14.0 on: workflow_dispatch: inputs: testbed: default: 'basic-01' description: 'Testbed to test' required: false defaults: run: shell: bash jobs: build: runs-on: ubuntu-latest steps: # checkout needed repositories - name: Checkout Testing repo uses: actions/checkout@v2 with: path: wlan-testing - name: Checkout LANforge scripts uses: actions/checkout@v2 with: path: wlan-lanforge-scripts repository: Telecominfraproject/wlan-lanforge-scripts - name: import LANforge scripts working-directory: wlan-testing run: ./sync_repos.bash # build and push docker image - name: docker login run: docker login ${{ env.DOCKER_SERVER }} -u ${{ env.DOCKER_USER_NAME }} -p ${{ env.DOCKER_USER_PASSWORD }} - name: build docker image working-directory: wlan-testing run: docker build -t ${{ env.DOCKER_SERVER }}/cloud-sdk-nightly:${{ github.run_id }} -f docker/Dockerfile . - name: push docker image run: docker push ${{ env.DOCKER_SERVER }}/cloud-sdk-nightly:${{ github.run_id }} test: runs-on: [ self-hosted, small ] needs: [ build ] strategy: max-parallel: 1 fail-fast: false matrix: marker: - dataplane_throughput_test - single_station_dual_band_throughput - wifi_capacity_test outputs: testbed: ${{ steps.testbed.outputs.name }} steps: - name: install aws CLI tool run: | curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install - name: install kubectl run: | curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl - name: get EKS access credentials run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} - name: install Allure CLI tool run: | wget https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/${{ env.ALLURE_CLI_VERSION }}/allure-commandline-${{ env.ALLURE_CLI_VERSION }}.tgz tar -xzf allure-commandline-${{ env.ALLURE_CLI_VERSION }}.tgz - name: set job name id: job run: echo "::set-output name=name::perf-${{ github.run_id }}" - name: set testbed id: testbed run: echo "::set-output name=name::${{ github.event.inputs.testbed || 'basic-01' }}" - name: prepare namespace id: namespace run: | NAMESPACE="testing-${{ github.run_id }}-${{ steps.testbed.outputs.name }}" kubectl create ns $NAMESPACE kubectl config set-context --current --namespace=$NAMESPACE echo "::set-output name=name::${NAMESPACE}" - name: create configuration.py secret run: | cat << EOF > configuration.py ${{ secrets.LAB_CONFIGURATION }} EOF kubectl create secret generic configuration --from-file=configuration=./configuration.py - name: run perf tests run: | cat </dev/null 2>&1 done echo "tests completed" echo "downloading allure results..." kubectl cp $podname:/tmp/allure-results allure-results >/dev/null 2>&1 echo "waiting for pod to exit" kubectl logs -f $podname >/dev/null 2>&1 exit $(kubectl get pod $podname --output="jsonpath={.status.containerStatuses[].state.terminated.exitCode}") - name: print logs if: always() run: | podname=$(kubectl get pods --no-headers -o custom-columns=":metadata.name" -l job-name="${{ steps.job.outputs.name }}" | sed "s/pod\///") kubectl logs $podname - name: upload Allure results as artifact if: always() uses: actions/upload-artifact@v2 with: name: allure-results-${{ matrix.marker }} path: allure-results - name: cleanup if: always() run: | kubectl delete ns "${{ steps.namespace.outputs.name }}" --wait=true report: runs-on: ubuntu-latest needs: [ test ] if: always() steps: - name: install Allure CLI tool run: | wget https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/${{ env.ALLURE_CLI_VERSION }}/allure-commandline-${{ env.ALLURE_CLI_VERSION }}.tgz tar -xzf allure-commandline-${{ env.ALLURE_CLI_VERSION }}.tgz - uses: actions/download-artifact@v2 with: name: allure-results-dataplane_throughput_test path: allure-results-dataplane_throughput_test - uses: actions/download-artifact@v2 with: name: allure-results-single_station_dual_band_throughput path: allure-results-single_station_dual_band_throughput - uses: actions/download-artifact@v2 with: name: allure-results-wifi_capacity_test path: allure-results-wifi_capacity_test - name: checkout testing repo uses: actions/checkout@v2 with: path: wlan-testing - name: get reports branch uses: actions/checkout@v2 continue-on-error: true with: ref: gh-pages path: reports - name: copy history into results run: | if [ -e "reports/performance/${{ needs.test.outputs.testbed }}/latest" ] ; then cp -r reports/performance/${{ needs.test.outputs.testbed }}/latest/history/ allure-results-dataplane_throughput_test/history cp -r reports/performance/${{ needs.test.outputs.testbed }}/latest/history/ allure-results-single_station_dual_band_throughput/history cp -r reports/performance/${{ needs.test.outputs.testbed }}/latest/history/ allure-results-wifi_capacity_test/history fi - name: add report metadata run: | cat << EOF >> allure-results-dataplane_throughput_test/environment.properties Testbed=${{ needs.test.outputs.testbed }} Tests.CommitId=$(cd wlan-testing && git rev-parse --short HEAD) CiRun.Id=${{ github.run_id }} CiRun.Number=${{ github.run_number }} CiRun.Url=https://github.com/${{github.repository}}/actions/runs/${{github.run_id}} EOF - name: generate Allure report run: allure-${{ env.ALLURE_CLI_VERSION }}/bin/allure generate allure-results-dataplane_throughput_test allure-results-single_station_dual_band_throughput allure-results-wifi_capacity_test - name: upload Allure report as artifact uses: actions/upload-artifact@v2 with: name: allure-report-${{ needs.test.outputs.testbed }} path: allure-report # doing this to be able to aggregate multiple reports together later on - name: copy results into report run: | mkdir -p allure-report/results cp -r allure-results-dataplane_throughput_test allure-report/results cp -r allure-results-single_station_dual_band_throughput allure-report/results cp -r allure-results-wifi_capacity_test allure-report/results - name: copy new report run: | mkdir -p reports/performance/${{ needs.test.outputs.testbed }} cp -Tr allure-report reports/performance/${{ needs.test.outputs.testbed }}/${{ github.run_number }} - name: update latest symlink working-directory: reports/performance/${{ needs.test.outputs.testbed }} run: ln -fns ${{ github.run_number }} latest - name: generate new index.html run: python wlan-testing/.github/tools/generate_directory_index.py -r reports - name: commit reports update working-directory: reports run: | git config --global user.name "github-actions[bot]" git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" git add . git commit -m "Automated deployment: $(date -u)" - name: push if: github.ref == 'refs/heads/master' uses: ad-m/github-push-action@v0.6.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} branch: gh-pages directory: reports cleanup: needs: [ test ] runs-on: ubuntu-latest if: always() steps: - name: cleanup Docker image run: curl -u${{ env.DOCKER_USER_NAME }}:${{ env.DOCKER_USER_PASSWORD }} -X DELETE "https://tip.jfrog.io/artifactory/tip-wlan-cloud-docker-repo/cloud-sdk-nightly/${{ github.run_id }}"