name: interop 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: additional_markers: default: '' description: 'Pass additional markers that will be and-combined with the interop marker, e.g. "twog or fiveg" -> "interop and twog or fiveg"' required: false schedule: - cron: '30 20 * * *' 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: ubuntu-latest needs: [ build ] strategy: fail-fast: false max-parallel: 1 matrix: test_type: [android, ios] outputs: additional_markers: ${{ steps.marker.outputs.additional }} steps: - 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::interop-ci-${{ github.run_number }}-${{ matrix.test_type }}" - 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: calculate marker expression id: marker run: | if [ "${{ matrix.test_type }}" = "android" ]; then MARKER_EXPRESSION="interop_and and interop_uc_sanity and client_connect" else MARKER_EXPRESSION="interop_ios and interop_uc_sanity and client_connect" fi ADDITIONAL_MARKERS="${{ github.event.inputs.additional_markers || '' }}" if [ ! -z "$ADDITIONAL_MARKERS" ]; then MARKER_EXPRESSION="$MARKER_EXPRESSION and ${ADDITIONAL_MARKERS}" fi echo "::set-output name=additional::${ADDITIONAL_MARKERS}" echo "::set-output name=expression::${MARKER_EXPRESSION}" - name: run interop 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.test_type }} path: allure-results - name: cleanup if: ${{ always() }} run: | kubectl delete job "${{ steps.job.outputs.name }}" --wait=true --ignore-not-found=true kubectl delete secret configuration --wait=true --ignore-not-found=true report: needs: [ test ] if: always() runs-on: ubuntu-latest 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-android path: allure-results-android - uses: actions/download-artifact@v2 with: name: allure-results-ios path: allure-results-ios - 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/interop/interop/latest" ] ; then cp -r reports/interop/interop/latest/history/ allure-results-ios/history cp -r reports/interop/interop/latest/history/ allure-results-android/history fi - name: add report metadata run: | cat << EOF >> allure-results-android/environment.properties Testbed=interop 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-android allure-results-ios - name: upload Allure report as artifact uses: actions/upload-artifact@v2 with: name: allure-report 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-android/* allure-report/results cp -r allure-results-ios/* allure-report/results - name: copy new report run: | mkdir -p reports/interop/interop cp -Tr allure-report reports/interop/interop/${{ github.run_number }} - name: update latest symlink working-directory: reports/interop/interop 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' && needs.test.outputs.additional_markers == '' 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 }}"