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 monitor an automation workflow and will reflect it into the product.
- 1. Introduction
- 2. Table of Contents
- 3. Requirements
- 4. Workflow Configuration
- 5. Credential 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.
Note
These steps should be done inside your GitHub repository which contains the Functional Testing (formerly UFT One) tests.
- Create a new workflow (.yml file).
- Add
workflow_dispatchevent trigger to allow manual workflow run - Add
pushevent trigger to allow automatic workflow execution on every content change.
on:
workflow_dispatch:
inputs:
# more details in the next NOTE
...
push:
branches: main # or other branchesNote
When the user will run a TestSuite, the OpenText SDP/SDM product will send a workflow_dispatch event to the GitHub workflow, with a payload containing 4 parameters. These parameters must be captured using 4 inputs, like these:
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'- 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 forgithub-action-ft-integration-mbtand 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/github-action-ft-integration-mbt@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: 2Example 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/github-action-ft-integration-mbt@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 these parameters:
testsToRun(string)suiteId(number)suiteRunId(number)executionId(number)
For numeric parameters, set default to 0.
Run the desired workflow(s) from the Actions tab. This will create a new CI Server and Test Runner inside the product, reflecting the status of the executed workflow.
- 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 level4- warning level5- error level
- To use certain features, the product needs to send requests to GitHub. This requires configuring a GitHub App credential and adding it 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 on 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 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 write
- Content: Read-only
- Click on 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 App.
- Select the credential you created in the previous step by clicking on its name.
- In the left-side menu, go to Install App.
- For the organization (or account) you want to configure the credential for, click on the Install button.
- Select the repositories you want to grant access to: All repositories or Only select repositories
- Click on 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 on its name.
- On the current page, note the value of the Client ID.
- In the Private keys section, click on Generate a private key. A file containing the private key will be downloaded to your device.
- Go to the OpenText Software Delivery Platform.
- Navigate to Settings -> Spaces (select the desired workspace containing the CI servers) -> Credentials.
- Create a new credential.
- 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 generated for this GitHub App.
- Click on the
Addbutton to create the credential. - In workspace settings, go to DevOps -> CI Servers.
- For the desired CI server (it has the name of the organization on GitHub), double-click on the cell in the Credential column and select the newly created credential. If the Credential column is not visible, click on the Choose Columns button (near the Filter button) and make the column visible.
-
Configure Workflow Parameters:
- Ensure the parameters required for automated tests are properly set up in the YML workflow as described earlier.
- The workflow must include the following parameters:
testsToRun(type: string)suiteId(type: number)suiteRunId(type: number)executionId(type: number)
- For numerical parameters, it is recommended to set a default value of
0.
-
Run the Workflow:
- After completing the configuration, run your workflow.
- 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.
- After completing the configuration, run your workflow.
- Example of Credential entity created at step 5.3 Configure the Credential:
![]() |
- Make sure a
Releaseentity exists, otherwise create it (required to Run a Test Suite):
![]() |
- Make sure the CI Server is using the appropriate the
Credentialentity:
![]() |
- Select the Test Runner and click
Sync with CI:
![]() |
- Optionally, review the Test Runner details:
![]() |
-
Create Models and MBT Tests:
- 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:
![]() |
-
Create a Test Suite:
- Open the Execution or Quality module and go to
Teststab:
- Open the Execution or Quality module and go to
![]() |
- 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 toAutomatic, and update Test Suite like this:
![]() |
- Run the MBT Tests from the Product:
- In the product, select or open the test suite and click
Run, respectivelyRun Suite.
- In the product, select or open the test suite and click
- One self-hosted GitHub runner to execute the integration workflow.










