App page
Requirements and Test Management for Jira
Cloud Server/Data Center
Requirements and Test Management for Jira

Cloud

Server/Data Center

Documentation
FAQ
Release notes
Migration to Cloud
Last updated Dec 27, 2024

GitHub integration

Use the following script in your GitHub workflow.

  1. Locate RTM API base URL.
  2. Add secret with RTM_API_TOKEN. It’s used for authentication with the RTM REST API.
  3. Update PROJECT_KEY with your target project for import.
  4. Create archive with test results using tar.
name: CI
on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]
  workflow_dispatch:
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Import test results to RTM
        env:
          JOB_URL: ${{github.server_url}}/${{github.repository}}/actions/runs/${{github.run_id}}
          RTM_URL: https://your-rtm-instance.com # 1
          RTM_API_TOKEN: ${{ secrets.RTM_API_TOKEN }} # 2
          PROJECT_KEY: EXAMPLE # 3 target project key with RTM enabled
          TE_SUMMARY: Automated tests report build ${{github.run_id}}
        run: |              
          # use tar to create archive with test results
          RESULTS_ARCHIVE=test_results.tar.gz
          find ./target/surefire-reports -type f -name "*.xml" -exec tar czvf $RESULTS_ARCHIVE {} +              

          printf "\n[RTM] Importing test results...\n"
          IMPORT_RESULT=$(curl -s -S -X POST ${RTM_URL}/api/v2/automation/import-test-results \
            -H "Authorization: Bearer ${RTM_API_TOKEN}" \
            -F "projectKey=${PROJECT_KEY}" \
            -F "name=${TE_SUMMARY}" \
            -F "file=@${RESULTS_ARCHIVE}" \
            -F 'reportType=JUNIT' \
            -F "jobUrl=${JOB_URL}")
          # checks in loop import status
          if [[ $IMPORT_RESULT =~ ^.{8}-.{4}-.{4}-.{4}-.{12}$ ]]; then
            printf "[RTM] Import created with taskId: $IMPORT_RESULT, checking import status"
            TASK_STATUS='IMPORTING'
            TRIES=0
            while [[ "$TASK_STATUS" == *"IMPORTING"* && $TRIES != 30 ]]; do
              TASK_STATUS=$(curl -s -S ${RTM_URL}/api/v2/automation/import-status/$IMPORT_RESULT -H "Authorization: Bearer ${RTM_API_TOKEN}")
              if [[ "$TASK_STATUS" == *"IMPORTING"* ]]; then
                printf "\n[RTM] Importing, retrying in 10 second"
                sleep 10s
              fi
              ((TRIES = TRIES + 1))
            done
            if [ $TRIES -gt 30 ]; then
              printf "\n[RTM] Import timeout with last status: ${TASK_STATUS}\n"
            else
              printf "\n[RTM] Import completed with status: ${TASK_STATUS}\n"
            fi
          else
            printf "\n[RTM] Import failed with response: ${IMPORT_RESULT}\n"
          fi
Note

See REST API for all available options to import endpoint.

Explanation of steps

  1. Defining variables:
  • RTM_URL - The base URL for your RTM instance.
  • JOB_URL - A URL pointing to the current GitHub workflow run.
  • PROJECT_KEY - The project key in RTM where results will be imported.
  • TE_SUMMARY - A summary or description that comes with the test results when imported.
  1. Creating archive of test results:
  • Uses the tar command to compress all XML files (JUnit test reports) from the ./target/surefire-reports directory into a .tar.gz archive.
  1. Importing test results:
  • The script uses curl to issue a POST request to the RTM API endpoint /api/v2/automation/import-test-results. It includes the test results archive and metadata such as project key, build summary, and job URL.
  1. Monitoring import status:
  • After submitting the test results, the script monitors the import status by repeatedly querying /api/v2/automation/import-status/{taskId}.
  • If the status is IMPORTING, it retries up to 30 times, with a 10-second delay between retries.
  • The script will log the final status or timeout if the import doesn’t complete in the allotted time frame.

Required changes

  1. Replace https://your-rtm-instance.com with the URL of your RTM instance.
  2. Replace EXAMPLE in PROJECT_KEY with your RTM project key.
  3. Add RTM_API_TOKEN properly as secret repository variable.

Best practices:

  • Store the RTM_API_TOKEN securely and protect it from unauthorized access.
  • The generated test results need to be compatible with the specified reportType (in the example, JUnit is used).
  • Logs and responses will help debug any issues during the import process. If an error occurs, check the response from the curl commands for further insights.