Integrate with GitHub¶
GitHub is a platform where you can create and build applications. You can use your own instance or an existing one.
In the following guide you will update a GitHub repository with its own OpenTestFactory workflow that will run whenever you push changes on your repository.
You need to have access to a repository on a GitHub instance, and you need to be able to start GitHub actions on that repository.
You also need to have access to a deployed OpenTestFactory orchestrator instance, with a corresponding token, that is accessible from the GitHub instance.
You will use the opentf-ctl tool.
Preparation¶
You need to define two actions secrets. You can do this as environment secrets, as repository secrets, or as organization secrets.
If you define them as repository secrets, you will be able to use them in all your environments. That can be quite handy if you use many environments. If you define them at environment level, only this environment will see them. If you define a secret at repository and environment level, the definition at environment level wins.
If you are part of an organization, you can also define secrets as organization secrets.
One secret, OPENTF_CONFIG, is typically shared.  It references your OpenTestFactory
orchestrator instance.
Depending on your preferences and security requirements, you can share the other secret,
OPENTF_TOKEN, between your environments or define one per environment.
Information
If you do not want to give those secrets those names, you can freely change them,
but then you will have to specify them explicitly in your GitHub pipeline, using the
--opentfconfig= and --token=command line options below.
OPENTF_CONFIG¶
The OPENTF_CONFIG secret should contain your orchestrator configuration file, that
is, the information needed to reach your orchestrator instance.
It will look something like the following.
apiVersion: opentestfactory.org/v1alpha1
contexts:
- context:
    orchestrator: my_orchestrator
    user: me
  name: my_orchestrator
current-context: my_orchestrator
kind: CtlConfig
orchestrators:
- name: my_orchestrator
  orchestrator:
    insecure-skip-tls-verify: false
    ports:
      agentchannel: 443
      eventbus: 443
      killswitch: 443
      observer: 443
      receptionist: 443
      qualitygate: 443
    server: https://my_orchestrator.example.com
users:
- name: me
  user:
    token: aa
Testing your configuration file¶
If you have not tested your configuration file before, it is a good idea to test it now.
On your workstation, install the opentf-tools package, using the following command:
pip install --upgrade opentf-tools
Tip
The above command will install the most recent version of the package. If you want to install a specific version you can use the following command:
pip install opentf-tools==0.42.0
The list of available versions is on PyPI.
Then, copy your configuration in a config file on your current directory, and use the
following command:
opentf-ctl get workflows --opentfconfig=config --token=YOURTOKEN
You should get something like:
WORKFLOWID
6c223f7b-3f79-4c51-b200-68eaa33c1325
31b5e665-819c-4e92-862a-f05d1993c096
Please refer to “Tools configuration” for more information on making your configuration file if needed.
Defining the secret¶
Go to your repository Settings tab, search for the Secrets section, expand it and choose the Actions view.
Note
If you are part of an organization and want to add this secret as an organization secret, go to your organization’s Settings tab instead of your repository’s.

In this section, add a repository secret OPENTF_CONFIG with the value above.

OPENTF_TOKEN¶
The OPENTF_TOKEN secret should contain the token you want to use to communicate
with the orchestrator.
Defining the secret¶
Add a new secret OPENTF_TOKEN with the value your token.

The two secrets, OPENTF_CONFIG and OPENTF_TOKEN, will be available for use
in your pipeline jobs.
Integration¶
Now that your two secrets are defined, you are ready to integrate your OpenTestFactory orchestrator within your GitHub workflows.
This section assumes a basic knowledge of GitHub Actions. See “Getting started and core concepts” for more information.
Note
There is no required location for your project’s workflows, but it is a good
practice to put them in a single location.  .opentf/workflows is a good candidate.
In your repository, create the .opentf/workflows directory to store your OpenTestFactory
workflow files.
In the .opentf/workflows directory, create a new file called my_workflow.yaml and add the
following code:
metadata:
  name: My first workflow
jobs:
  greetings:
    runs-on: linux
    steps:
    - run: echo "Hi there"
Running a workflow¶
In your repository, create the .github/workflows directory if it does not already exist, and
in this directory create a new file called ‘run_opentf_workflow.yml’, with the following content:
name: Nightly e2e tests
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up Python 3.x
        uses: actions/setup-python@v2
        with:
          python-version: '3.x'
      - name: Install dependencies
        env:
            OPENTF_CONFIG: ${{ secrets.OPENTF_CONFIG }}
        run: |
          python -m pip install --upgrade pip
          pip install opentf-tools
          echo $OPENTF_CONFIG >.opentf/config
      - name: Test
        env:
            OPENTF_TOKEN: ${{ secrets.OPENTF_TOKEN }}
            OPENTF_CONTIG: ./opentf/config
        run: |
          opentf-ctl run workflow .opentf/workflows/my_workflow.yaml
Commit these changes and push them to your GitHub repository.
Your new OpenTestFactory workflow file is now installed in your repository and will run automatically each time someone pushes a change to the repository.