In the following documentation, the OpenText Core Software Delivery Platform and OpenText Software Delivery Management will collectively be referred to as 'the product'.
This is a custom GitHub Action which facilitates communication between GitHub and the product (formerly known as ALM Octane/ValueEdge) regarding CI/CD. The action will enable your GitHub repository to trigger MBT test runs and synchronize results with OpenText SDP/SDM.
- 1. Introduction
- 2. Table of Contents
- 3. Requirements
- 4. GitHub Workflow Setup
- 5. Credentials Configuration
- 6. Running MBT Tests
- 7. Limitations
- At least one GitHub Actions runner allocated for running the integration.
- The recommended product version is 25.x or higher
- A Windows machine with OpenText Functional Testing (formerly UFT One) application installed
- API access to the product with CI/CD Integration or DevOps Admin roles.
- Within a single workspace, you can only have one MBT Test Runner associated with each GitHub repository. Therefore, before setting up the custom action to run MBT tests from a specific repository, make sure no existing MBT Test Runner in the same workspace is assigned to the same repository.
This section explains how to create and configure a GitHub Actions workflow that integrates OpenText Functional Testing with Model-Based Testing (MBT).
Note
These steps should be done inside your GitHub repository which contains the OpenText Functional Testing (formerly UFT One) tests.
- Create a new workflow from GitHub Actions tab (resulting in a new
.ymlfile inside of<your_repo>/.github/workflows/subfolder). - Add
workflow_dispatchevent trigger to allow manual workflow run - Add
pushevent trigger to allow automatic workflow run on every content change.
on:
workflow_dispatch:
inputs:
# more details in the next step
...
push:
branches: main # or other branches- Under
inputssection, 4 input parameters must be added (see next example).
on:
workflow_dispatch:
inputs:
testsToRun:
description: 'Tests to run (from OpenText SDP/SDM)'
required: true
default: '...'
suiteRunId:
description: 'Suite Run Id (from OpenText SDP/SDM)'
required: true
default: '0'
executionId:
description: 'Execution Id (from OpenText SDP/SDM)'
required: true
default: '0'
suiteId:
description: 'Suite Id (from OpenText SDP/SDM)'
required: true
default: '0'Note
When the user will run a TestSuite from product, the product will automatically send a workflow_dispatch event to the GitHub workflow, with a payload containing the 4 parameters and values.
Even if the user manully runs the workflow from GitHub Actions, the default value of these 4 parameters must not be changed by user.
- If the product is configured on HTTPS with a self-signed certificate, configure node to allow requests to the server.
env:
NODE_TLS_REJECT_UNAUTHORIZED: 0- In the
jobssection add a job forsdp-ft-mbt-github-action-integrationand make sure theruns-onproperty contains at least theself-hostedvalue. - Configure two secret variables named
SDP_CLIENT_IDandSDP_CLIENT_SECRETwith the credentials, inside your GitHub repository (more details about secret variables configuration here). - Set integration config params (the product's URL, Shared Space, Workspace, credentials) and repository (Token).
- For Private repositories go to
Settings -> Actions -> Generaland set your GITHUB_TOKEN permissions to Read and write. This is necessary to access the actions scope. (more details about GITHUB_TOKEN permissions here)
jobs:
ft_integration_job:
runs-on: <runner_tags>
name: GHA-FT-Integ-MBT#${{github.event.action}}#${{github.event.workflow_run.id}} # you can use a static / constant value too
steps:
- name: GitHub Action FT Integration MBT
uses: opentext/sdp-ft-mbt-github-action-integration@main # you can use the last released version instead of main
id: gha-ft-integration-mbt
with:
octaneUrl: <sdp_octane_URL>
octaneSharedSpace: <sdp_shared_space_id>
octaneWorkspace: <sdp_workspace_id>
octaneClientId: ${{secrets.SDP_CLIENT_ID}}
octaneClientSecret: ${{secrets.SDP_CLIENT_SECRET}}
githubToken: ${{secrets.GITHUB_TOKEN}} # automatically generated by GitHub
minSyncInterval: 2
logLevel: 5For more details about the parameters of opentext/sdp-ft-mbt-github-action-integration, please check this page:
https://github.com/MicroFocus/sdp-ft-mbt-github-action-integration/blob/main/action.yml
Example of complete integration workflow configuration file:
name: GitHub-Action-FT-integ-MBT
on:
workflow_dispatch:
inputs:
testsToRun:
description: 'Tests to run (from OpenText SDP/SDM)'
required: true
default: '...'
suiteRunId:
description: 'Suite Run Id (from OpenText SDP/SDM)'
required: true
default: '0'
executionId:
description: 'Execution Id (from OpenText SDP/SDM)'
required: true
default: '0'
suiteId:
description: 'Suite Id (from OpenText SDP/SDM)'
required: true
default: '0'
push:
branches:
- main
permissions:
actions: read # Explicitly grant actions:read for this workflow
contents: read # Retain read access to contents if needed
env:
NODE_TLS_REJECT_UNAUTHORIZED: 0
jobs:
ft_integration_job:
runs-on: self-hosted
name: Integration-Job
steps:
- name: GitHub Action FT Integration MBT
uses: opentext/sdp-ft-mbt-github-action-integration@main # or use a release version instead of main
id: gha-ft-integration
with:
octaneUrl: 'https://qa8.almoctane.com'
octaneSharedSpace: 1001
octaneWorkspace: 1003
octaneClientId: ${{secrets.SDP_CLIENT_ID}}
octaneClientSecret: ${{secrets.SDP_CLIENT_SECRET}}
githubToken: ${{secrets.GITHUB_TOKEN}}
minSyncInterval: 2
logLevel: 5- Run the desired workflow(s) from Actions Tab. This will create a new
CI ServerandTest Runnerinside the product, reflecting the status of the executed workflow.
Ensure the workflow includes the 4 required parameters:
testsToRun(default: '...')suiteId(default: '0')suiteRunId(default: '0')executionId(default: '0')
Note
When the user will run a TestSuite from product, the product will automatically send a workflow_dispatch event to the GitHub workflow, with a payload containing 4 parameters and values.
Even if the user manully runs the workflow from GitHub Actions, the default value of these 4 parameters must not be changed by user.
- In order to get more information on the execution of the integration workflow, add this parameter for the integration job:
logLevel: '3'. - These are the available values for this parameter:
1- trace level2- debug level3- info level (default)4- warning level5- error level
To use certain features, the product needs to send requests to GitHub. This requires configuring GitHub App credentials and adding them to the application.
- On GitHub, go to your organization (or account, if the repository containing the workflows is owned by an account) settings.
- In the left-side menu, go to Developer Settings -> GitHub Apps.
- Create a new GitHub App by clicking the New GitHub App.
- In the GitHub App name field, enter a name of your choice.
- In the Homepage URL field, enter the URL of the Opentext Core Software Delivery Platform.
- In the Webhook section, uncheck the Active option. No webhook is needed.
- In the Permissions section, grant the following repository permissions:
Actions: Read and writeContent: Read-only
- Click the Create GitHub App button at the bottom of the page. Leave any other fields unchanged.
- On GitHub, go to your organization (or account, if the repository containing the workflows is owned by an account) settings.
- Go to Developer settings -> GitHub Apps.
- Select the
GitHub Appyou created in the previous step by clicking its name. - In the left-side menu, go to Install App.
- For the organization (or account) you want to configure the credentials for, click the Install button.
- Select the repositories you want to grant access to: All repositories or Only select repositories
- Click the
Installbutton to complete the installation.
- On GitHub, go to your organization (or account, if the repository containing the workflows is owned by an account) settings.
- Go to Developer Settings -> GitHub Apps and select the GitHub App you installed by clicking its name.
- On the current page, note the value of the Client ID.
- In the Private keys section, click the Generate a private key button. A file containing the
Private Keywill be downloaded to your device (usually this is a.pemfile). Note:Private Keyshould not be confused withClient secret(which is not required / used). - Go to the OpenText Core Software Delivery Platform.
- Navigate to Settings -> Spaces (select the desired workspace containing the CI servers) -> Credentials.
- Create a new
Credentialsentity. - Enter a name of your choice. In the User Name field, enter the Client ID from the GitHub App, and in the Password field, enter the
Private Key(the full content from.pemfile) generated for this GitHub App. - Click the
Addbutton to save the credentials. - In workspace settings, go to DevOps -> CI Servers.
- For the desired CI Server (it has the name of the organization on GitHub), double-click the cell in the Credential column and select the newly created entity. If the Credential column is not visible, click the Choose Columns button (near the Filter button) and make the column visible.
- After completing the configuration, make sure the desired GitHub self-hosted runner is active, from GitHub Settings -> Actions -> Runners
- To set up a GitHub self-hosted runner, follow the instructions provided in GitHub's documentation:
- Visit the Adding self-hosted runners guide: https://docs.github.com/en/actions/how-tos/manage-runners/self-hosted-runners/add-runners
- Understand the prerequisites and select the machine you will use for your self-hosted runner.
- Follow the steps to add a self-hosted runner at the repository, organization, or enterprise level.
- If you'd like to learn more about self-hosted runners, their configuration, and management, see the following resources:
- Managing self-hosted runners: https://docs.github.com/en/actions/how-tos/manage-runners/self-hosted-runners
- About self-hosted runners: https://docs.github.com/en/actions/concepts/runners/self-hosted-runners
-
After completing the configuration, run your workflow once, manually, from GitHub Actions tab.
- The CI Server and Test Runner entities will be automatically created in the product
- The
Test DiscoveryandSynchronizationmechanisms will be triggered, so that all FT tests'Actionsfrom current repo will be collected and injected asUnitsin the product.
-
You can manually rerun the Workflow anytime, or it will be automatically triggered by
pushevents.- Then, the
Test DiscoveryandSynchronizationmechanisms will be triggered again (if theminSyncIntervalminutes has elapsed since the last sync).
- Then, the
-
Example of Credentials entity created at step 5.3. Configure the Credentials in the product:
![]() |
- Make sure a
Releaseentity exists, otherwise create it (required to Run a Test Suite):
![]() |
- Make sure the CI Server is using the appropriate the
Credentialsentity:
![]() |
- Select the Test Runner and click
Sync with CI:
![]() |
- Optionally, review the Test Runner details:
![]() |
- In the product, navigate to the Model-Based Testing module, create a new Model entity, add the desired Units and link them
- Example of Model entity:
![]() |
- To generate the MBT Test entities, open the
Pathstab, select the desired items, then clickGenerate Test:
![]() |
- After generating the MBT Test, the column
Covered by testshould be populated like this:
![]() |
- Open the Execution or Quality module and go to
Teststab:
![]() |
- Create a Test Suite entity if you don't have one, then assign the relevant MBT Test entries to it.
![]() |
- Make sure the
Run Modeis set toAutomatically, and update Test Suite like this:
![]() |
- In the product, select or open the test suite and click
Run Suite.
![]() |
- One self-hosted GitHub runner is required to execute the integration workflow.
- Within a single workspace, you can only have one MBT Test Runner associated with each GitHub repository. Since the MBT Test Runner creation depends on the YML workflow you use, make sure to create only one YML workflow per GitHub repository. An attempt to sync a second branch (using a second YML workflow) will fail.











